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

elyrin

Активный
Автор темы
114
70
Никогда не замечали такой строчки в вип-чате?
Снимок экрана 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 item.id == item_id then
                    return sampAddChatMessage("Название предмета: " .. u8:decode(item.name), -1)
                end
            end

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

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand("item_id", function (item_id)
        sampAddChatMessage("Проверяю информацию предмета с ID: " .. item_id, -1)
        checkItemWithID(tonumber(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 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 предмета либо сообщения "Предмет не найден", объясню:
Если в цикле мы находим нужный нам ID по его названию, то return вернёт нам ID предмета, но и выйдет с функции, так-как он уже вернул нам ID, и выполнять дальше он ничего не будет
Но если бы ID предмета не нашёлся, то и сам цикл бы ничего не вернул, но вернулось бы сообщение "Предмет не найден"

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


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


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

dslk;d

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

БеzликиЙ

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

elyrin

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

манул бахус

Известный
190
167
Лучше сделать чтобы по названию найти айдишник предмета, это будет упрощать работу в разработке
 

dslk;d

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

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

elyrin

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

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

kyrtion

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

elyrin

Активный
Автор темы
114
70
Никогда не замечали такой строчки в вип-чате?
Посмотреть вложение 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 предмета