Информация Гайд [Arizona] | ID предмета в название и название в ID предмета

elyrin

Участник
Автор темы
65
41
Никогда не замечали такой строчки в вип-чате?
Снимок экрана 2026-04-07 010928.png


Это строчка в которой хранится шаблон :itemid: (пример с этим предметом :item9774:)
Так вот как мне сказали - некоторые не знали как переводить этот шаблон в название самого предмета, чтобы потом данные с названием как-либо обрабатывать

Поискав на BlastHack я также нигде не нашёл эту тему, где хоть кто-то бы рассказал об этом
Но я думаю пора это освятить, и возможно это кому-то понадобится

Заходим в main.bundle.js (если у вас нет этого файла - распакуйте архив frontend.zip)
И находим переменную `var CDN_CONFIG`:
Снимок экрана 2026-04-07 011433.png

Это сети серверов от самой Аризоны, которые распределены под каждую задачу
В нашем случае нам понадобится: https://server-api.arizona.games

В вашем случае можно и не лезть в main.bundle.js, просто для тех кто возможно захочет углубиться - все CDN хранятся в этой переменной

Зайдя на скрипт от Willy4ka Маркетплейс я нашёл API, которая нам и нужна - https://server-api.arizona.games/client/json/table/get?project=arizona&server=0&key=inventory_items

Создаём простой скрипт, который по команде /item_id id будет выводить нам название предмета по его ID:
Lua:
local effil = require("effil")
local json = require("dkjson")

local encoding = require("encoding")
encoding.default = "CP1251"
local u8 = encoding.UTF8

local asyncHttpRequest = function (method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)
        local requests = require("requests")
        local ok, response = pcall(requests.request, method, url, args)
        if ok then
            response.json, response.xml = nil, nil
            return true, response
        end
        return false, response
    end)(method, url, args)

    if not resolve then resolve = function() end end
    if not reject then reject = function() end end

    lua_thread.create(function()
        while true do
            local status, err = request_thread:status()
            if err then return reject(err) end

            if status == "completed" then
                local ok, response = request_thread:get()
                if ok then
                    resolve(response)
                else
                    reject(response)
                end
                return
            end

            if status == "canceled" then
                return reject("canceled")
            end

            wait(0)
        end
    end)
end

local checkItemWithID = function (item_id)
    asyncHttpRequest(
        "GET",
        "https://server-api.arizona.games/client/json/table/get?project=arizona&server=0&key=inventory_items",
        {
            headers = {
                ["Content-Type"] = "application/json; charset=utf-8",
                ["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0",
            },
        },
        
        function(response)
            local data = json.decode(response.text)

            for _, item in pairs(data) do
                if u8:decode(item.name) == item_name then
                    return sampAddChatMessage("ID предмета: " .. item.id, -1)
                end
            end
        end
    )
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand("item_id", function (item_id)
        sampAddChatMessage("Проверяю информацию предмета с ID: " .. item_id, -1)
        checkItemWithID(item_id)
    end)
    while true do wait(0) end
end

Если кто-то захочет сам ловить из чата - то используйте регулярное выражение :item(%d+):
Данное регулярное выражение берёт из строки :item9774: цифры, а именно - 9774
После чего, по сути всё тоже самое, что и показано в гайде выше

И кстати, не меняйте кодировку названия предметов (u8:decode), потому что будут выводиться каракули
Вывод этого скрипта:

Снимок экрана 2026-04-07 012113.png


Если вам нужно наоборот из названия предмета в его ID, можете воспользоваться таким примером:
Команда /item_name name
Lua:
local effil = require("effil")
local json = require("dkjson")

local encoding = require("encoding")
encoding.default = "CP1251"
local u8 = encoding.UTF8

local asyncHttpRequest = function (method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)
        local requests = require("requests")
        local ok, response = pcall(requests.request, method, url, args)
        if ok then
            response.json, response.xml = nil, nil
            return true, response
        end
        return false, response
    end)(method, url, args)
    if not resolve then resolve = function() end end
    if not reject then reject = function() end end
    lua_thread.create(function()
        while true do
            local status, err = request_thread:status()
            if err then return reject(err) end
            if status == "completed" then
                local ok, response = request_thread:get()
                if ok then
                    resolve(response)
                else
                    reject(response)
                end
                return
            end
            if status == "canceled" then
                return reject("canceled")
            end
            wait(0)
        end
    end)
end

local checkNameItem = function (item_name)
    asyncHttpRequest(
        "GET",
        "https://server-api.arizona.games/client/json/table/get?project=arizona&server=0&key=inventory_items",
        {
            headers = {
                ["Content-Type"] = "application/json; charset=utf-8",
                ["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0",
            },
        },
        
        function(response)
            local data = json.decode(response.text)

            for _, item in pairs(data) do
                if string.lower(u8:decode(item.name)) == string.lower(item_name) then
                    return sampAddChatMessage("ID предмета: " .. item.id, -1)
                end
            end

            sampAddChatMessage("Предмет не найден", -1)
        end
    )
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand("item_name", function (item_name)
        sampAddChatMessage("Нахожу ID предмета по его названию: " .. item_name, -1)
        checkNameItem(item_name)
    end)
    while true do wait(0) end
end

Если кто-то не понимает как работает вывод либо ID предмета либо сообщения "Предмет не найден", объясню:
Если в цикле мы находим нужный нам ID по его названию, то return вернёт нам ID предмета, но и выйдет с функции, так-как он уже вернул нам ID, и выполнять дальше он ничего не будет
Но если бы ID предмета не нашёлся, то и сам цикл бы ничего не вернул, но вернулось бы сообщение "Предмет не найден"

Вывод этого скрипта с правильным написанием:
Снимок экрана 2026-04-08 104403.png


Вывод этого скрипта с неправильным написанием:
Снимок экрана 2026-04-08 104722.png


Если будут вопросы - писать в тему
 
Последнее редактирование:

dslk;d

Новичок
5
1
сделать реально,что бы вместо названия был подгружался пнг по типу такого (png нашивки экономиста) Нашивка экономиста
 

БеzликиЙ

Эксперт в области Аризона РПГ
Проверенный
2,010
1,192

elyrin

Участник
Автор темы
65
41
потому что CEF пакеты нельзя эмулировать, а данные о предметах в чате идут CEF пакетом
Ну тут кстати смотря о какой именно обработке он говорит
Если бы это был какой-то ТГ-бот, то по сути через него можно кидать картинку
Но как по мне это тупая идея, ведь одного названия достаточно
 

dslk;d

Новичок
5
1
Лучше сделать чтобы по названию найти айдишник предмета, это будет упрощать работу в разработке
1775616357312.png

нажимаешь сюда затем ищешь предмет наводишься лкм и зажимаешь ctrl.Ид предмета появится
 

elyrin

Участник
Автор темы
65
41
Лучше сделать чтобы по названию найти айдишник предмета, это будет упрощать работу в разработке
Точно, добавлю сейчас тоже об этом информацию

Посмотреть вложение 290415
нажимаешь сюда затем ищешь предмет наводишься лкм и зажимаешь ctrl.Ид предмета появится
Перечитай ещё раз о чём он пишет
 
  • Нравится
Реакции: манул бахус

kyrtion

Известный
1,377
534
  • Влюблен
Реакции: elyrin

elyrin

Участник
Автор темы
65
41
Никогда не замечали такой строчки в вип-чате?
Посмотреть вложение 290382

Это строчка в которой хранится шаблон :itemid: (пример с этим предметом :item9774:)
Так вот как мне сказали - некоторые не знали как переводить этот шаблон в название самого предмета, чтобы потом данные с названием как-либо обрабатывать

Поискав на BlastHack я также нигде не нашёл эту тему, где хоть кто-то бы рассказал об этом
Но я думаю пора это освятить, и возможно это кому-то понадобится

Заходим в main.bundle.js (если у вас нет этого файла - распакуйте архив frontend.zip)
И находим переменную `var CDN_CONFIG`:
Посмотреть вложение 290383
Это сети серверов от самой Аризоны, которые распределены под каждую задачу
В нашем случае нам понадобится: https://server-api.arizona.games

В вашем случае можно и не лезть в main.bundle.js, просто для тех кто возможно захочет углубиться - все CDN хранятся в этой переменной

Зайдя на скрипт от Willy4ka Маркетплейс я нашёл API, которая нам и нужна - https://server-api.arizona.games/client/json/table/get?project=arizona&server=0&key=inventory_items

Создаём простой скрипт, который по команде /item_id id будет выводить нам название предмета по его ID:

Lua:
local effil = require("effil")
local json = require("dkjson")

local encoding = require("encoding")
encoding.default = "CP1251"
local u8 = encoding.UTF8

local asyncHttpRequest = function (method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)
        local requests = require("requests")
        local ok, response = pcall(requests.request, method, url, args)
        if ok then
            response.json, response.xml = nil, nil
            return true, response
        end
        return false, response
    end)(method, url, args)

    if not resolve then resolve = function() end end
    if not reject then reject = function() end end

    lua_thread.create(function()
        while true do
            local status, err = request_thread:status()
            if err then return reject(err) end

            if status == "completed" then
                local ok, response = request_thread:get()
                if ok then
                    resolve(response)
                else
                    reject(response)
                end
                return
            end

            if status == "canceled" then
                return reject("canceled")
            end

            wait(0)
        end
    end)
end

local checkItemWithID = function (item_id)
    asyncHttpRequest(
        "GET",
        "https://server-api.arizona.games/client/json/table/get?project=arizona&server=0&key=inventory_items",
        {
            headers = {
                ["Content-Type"] = "application/json; charset=utf-8",
                ["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0",
            },
        },
        
        function(response)
            local data = json.decode(response.text)

            for _, item in pairs(data) do
                if item.id == tonumber(item_id) then
                    sampAddChatMessage("Название предмета: " .. u8:decode(item.name), -1)
                    # могут быть ваши функции
                end
            end
        end
    )
end

function main()
    while not isSampAvailable() do wait(0) end
    # могут быть также ваши функции
    sampRegisterChatCommand("item_id", function (item_id)
        sampAddChatMessage("Проверяю информацию предмета с ID: " .. item_id, -1)
        checkItemWithID(item_id)
    end)
    while true do wait(0) end
end

Если кто-то захочет сам ловить из чата - то используйте регулярное выражение :item(%d+):
Данное регулярное выражение берёт из строки :item9774: цифры, а именно - 9774
После чего, по сути всё тоже самое, что и показано в гайде выше

И кстати, не меняйте кодировку названия предметов (u8:decode), потому что будут выводиться каракули
Вывод этого скрипта:

Посмотреть вложение 290384

Если вам нужно наоборот из названия предмета в его ID, можете воспользоваться таким примером:
Командой /item_name name

Lua:
local effil = require("effil")
local json = require("dkjson")

local encoding = require("encoding")
encoding.default = "CP1251"
local u8 = encoding.UTF8

local asyncHttpRequest = function (method, url, args, resolve, reject)
    local request_thread = effil.thread(function (method, url, args)
        local requests = require("requests")
        local ok, response = pcall(requests.request, method, url, args)
        if ok then
            response.json, response.xml = nil, nil
            return true, response
        end
        return false, response
    end)(method, url, args)

    if not resolve then resolve = function() end end
    if not reject then reject = function() end end

    lua_thread.create(function()
        while true do
            local status, err = request_thread:status()
            if err then return reject(err) end

            if status == "completed" then
                local ok, response = request_thread:get()
                if ok then
                    resolve(response)
                else
                    reject(response)
                end
                return
            end

            if status == "canceled" then
                return reject("canceled")
            end

            wait(0)
        end
    end)
end

local checkNameItem = function (item_name)
    asyncHttpRequest(
        "GET",
        "https://server-api.arizona.games/client/json/table/get?project=arizona&server=0&key=inventory_items",
        {
            headers = {
                ["Content-Type"] = "application/json; charset=utf-8",
                ["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0",
            },
        },
        
        function(response)
            local data = json.decode(response.text)

            for _, item in pairs(data) do
                if u8:decode(item.name) == item_name then
                    return sampAddChatMessage("ID предмета: " .. item.id, -1)
                end
            end

            sampAddChatMessage("Предмет не найден", -1)
        end
    )
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand("item_name", function (item_name)
        sampAddChatMessage("Нахожу ID предмета по его названию: " .. item_name, -1)
        checkNameItem(item_name)
    end)
    while true do wait(0) end
end

Если кто-то не понимает как работает вывод найден-ли предмет или нет, объясняю:
Если цикл возвращает нам значение того что предмет найден, и его ID выводится, то он по сути останавливает выполнение следующих функций которые прописаны ниже этого цикла, и сообщение "Предмет не найден" не выведется
Но если бы цикл ничего не вернул - у нас бы вывелось сообщение "Предмет не найден"

Вывод этого скрипта с правильным написанием:
Посмотреть вложение 290428

Вывод этого скрипта с неправильным написанием:
Посмотреть вложение 290429

Если будут вопросы - писать в тему
Добавил информацию о преобразовании названия в ID предмета