SA:MP Arizona Где взять ID всех предметов Arizona?

romanespit

Участник
Автор темы
59
28
Версия SA-MP
  1. Любая
Может знает кто, где можно угнать ID (не modelid) и названия всех предметов на Arizona RP? В супер идеале найти какую-то волшебную API ручку или файл в любом формате, как например с названиями тачек из админ тулзы https://api.arztools.tech/tools/arizona/vehicles.json
Если их можно получить как-то in-game, подскажите как, спаршу сам 🙃
 
  • Нравится
Реакции: ZeroDixon
Решение

gdtparser

Участник
11
4
могу ток так дать
 
  • Нравится
Реакции: romanespit

romanespit

Участник
Автор темы
59
28
могу ток так дать
Да, вполне годно. Не подскажешь, откуда ты их взял/запарсил, чтобы в дальнейшем я мог обновлять этот список?
 
  • Клоун
Реакции: qqnexd

2elnwndrer.

Известный
158
57
JavaScript:
(async function() {
  const BASE_URL = 'https://cdn.azresources.cloud/projects/arizona-rp/assets/images/donate/';
  const START = 1;          // Начать с 1.webp
  const END = 100000;       // Проверить до 100000
  const BATCH_SIZE = 50;    // Размер пачки для одновременных проверок
  const PAGE_SIZE = 100;    // Выводить по 100 изображений на страницу
  const DELAY = 200;        // Задержка между пачками (мс)
 
  let foundImages = [];
  let currentNum = START;
  let isPaused = false;
  let currentPage = 1;
  let totalPages = 1;

  // окно результатов
  const resultWindow = window.open('', '_blank');
  resultWindow.document.write(`
    <!DOCTYPE html>
    <html>
    <head>
      <title>Поиск изображений (0/${END})</title>
      <style>
        body { font-family: Arial, sans-serif; padding: 20px; }
        #controls { display: flex; gap: 10px; margin: 15px 0; }
        button { padding: 8px 15px; cursor: pointer; }
        #progress { width: 100%; background: #f0f0f0; border-radius: 5px; margin: 15px 0; }
        #progress-bar { height: 25px; background: #4CAF50; width: 0%; border-radius: 5px; }
        #status { margin: 10px 0; }
        #pagination { display: flex; gap: 5px; margin: 15px 0; }
        #images { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 10px; }
        .image-card { border: 1px solid #ddd; padding: 5px; text-align: center; }
        .image-card img { max-width: 100%; max-height: 80px; }
        .filename { font-size: 11px; word-break: break-all; }
        .active { font-weight: bold; background: #f0f0f0; }
      </style>
    </head>
    <body>
      <h1>Поиск изображений donate/ (${END} файлов)</h1>
      <div id="controls">
        <button id="pause-btn">⏸ Пауза</button>
        <button id="prev-btn" disabled>◀ Назад</button>
        <span id="page-info">Страница 1/1</span>
        <button id="next-btn" disabled>Вперёд ▶</button>
        <button id="download-btn">💾 JSON (0)</button>
      </div>
      <div id="progress">
        <div id="progress-bar"></div>
      </div>
      <div id="status">Проверено: 0/${END} | Найдено: 0</div>
      <div id="images"></div>
    </body>
    </html>
  `);
  resultWindow.document.close();

  // Элементы управления
  const pauseBtn = resultWindow.document.getElementById('pause-btn');
  const prevBtn = resultWindow.document.getElementById('prev-btn');
  const nextBtn = resultWindow.document.getElementById('next-btn');
  const pageInfo = resultWindow.document.getElementById('page-info');
  const downloadBtn = resultWindow.document.getElementById('download-btn');
  const progressBar = resultWindow.document.getElementById('progress-bar');
  const statusEl = resultWindow.document.getElementById('status');
  const imagesEl = resultWindow.document.getElementById('images');

  // Проверка изображения
  async function checkImage(num) {
    try {
      const img = new Image();
      await new Promise((resolve, reject) => {
        img.onload = resolve;
        img.onerror = reject;
        img.src = `${BASE_URL}${num}.webp`;
      });
      return true;
    } catch {
      return false;
    }
  }

  // Обновление прогресса
  function updateProgress() {
    const progress = (currentNum / END) * 100;
    progressBar.style.width = `${progress}%`;
    statusEl.textContent = `Проверено: ${currentNum}/${END} | Найдено: ${foundImages.length}`;
    downloadBtn.textContent = `💾 JSON (${foundImages.length})`;
  }

  // Показать изображения для текущей страницы
  function showCurrentPage() {
    totalPages = Math.ceil(foundImages.length / PAGE_SIZE);
    pageInfo.textContent = `Страница ${currentPage}/${totalPages}`;
    prevBtn.disabled = currentPage <= 1;
    nextBtn.disabled = currentPage >= totalPages;

    const start = (currentPage - 1) * PAGE_SIZE;
    const end = start + PAGE_SIZE;
    const pageImages = foundImages.slice(start, end);

    imagesEl.innerHTML = pageImages.map(num => `
      <div class="image-card">
        <img src="${BASE_URL}${num}.webp" loading="lazy">
        <div class="filename">${num}.webp</div>
      </div>
    `).join('');
  }

  // Кнопки пагинации
  prevBtn.addEventListener('click', () => {
    if (currentPage > 1) {
      currentPage--;
      showCurrentPage();
    }
  });

  nextBtn.addEventListener('click', () => {
    if (currentPage < totalPages) {
      currentPage++;
      showCurrentPage();
    }
  });

  // Кнопка паузы
  pauseBtn.addEventListener('click', () => {
    isPaused = !isPaused;
    pauseBtn.textContent = isPaused ? '▶ Продолжить' : '⏸ Пауза';
  });

  // Скачать JSON
  downloadBtn.addEventListener('click', () => {
    const blob = new Blob([JSON.stringify(foundImages, null, 2)], { type: 'application/json' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `donate_images_${foundImages.length}.json`;
    a.click();
  });

  // Основной цикл проверки
  while (currentNum <= END) {
    if (isPaused) {
      await new Promise(resolve => setTimeout(resolve, 500));
      continue;
    }

    const batch = [];
    for (let i = 0; i < BATCH_SIZE && currentNum <= END; i++) {
      batch.push(currentNum++);
    }

    const results = await Promise.all(batch.map(num => checkImage(num)));
    const newFound = batch.filter((_, i) => results[i]);
    
    if (newFound.length > 0) {
      foundImages.push(...newFound);
      showCurrentPage();
    }

    updateProgress();
    await new Promise(resolve => setTimeout(resolve, DELAY));
  }

  // Завершено
  pauseBtn.disabled = true;
  pauseBtn.textContent = '✅ Готово';
  console.log(`Найдено: ${foundImages.length} изображений`);
})();
 
  • Ха-ха
  • Нравится
Реакции: romanespit и Sargon

gdtparser

Участник
11
4
Последнее редактирование:
  • Влюблен
Реакции: romanespit