Гайд arizona-events

labubu-zayka

Новичок
Автор темы
17
7
ГАЙД ПО АРИЗОНА‑ИВЕНТАМ (arizona-events) ДЛЯ НАСТОЯЩИХ ПАЦАНОВ

Эт че каво, библиотека - https://www.blast.hk/threads/235586/

Слушай сюда, петушара. Задолбался мучаться с сырыми пакетами в сампе? Хочешь управлять ботами, цефить интерфейсы и вообще чувствовать себя властелином вселенной на Аризоне? Тогда эта хуйня – твой выбор.

arizona-events – это такой аналог SAMP.Lua, только более поеботистый и удобный для наших сраных скриптов. Работает и на обычном клиенте, и на RakSamp Lite – пиздато, да.




1. ПОДКЛЮЧЕНИЕ – ВСЁ ПРОСТО, КАК ТРИ ПАЛЬЦА ОБСОСАТЬ

Пишем в своём скрипте:

Lua:
local acef = require("arizona-events")

Всё, ты в игре. Дальше будет пизда.




2. ОБРАБОТКА СОБЫТИЙ – ТУТ ЕСТЬ НЮАНС (НЕ ССЫ, РАЗБЕРЁШЬСЯ)

В этой библиотеке аргументы ивентов передаются не по очереди, как ты привык, а таблицей. Не пизди, что это сложно – на самом деле так даже удобнее, когда аргументов дохуя.

Lua:
function acef.onArizonaBotChatBubble(packet)
sampAddChatMessage(("Бот[%s] хуярит: %s"):format(packet.bot_id, packet.text), -1)
end

Видишь? Вместо кучи аргументов – одна таблица packet, где поля называются, как в структуре. Заебись.




3. ГДЕ УЗНАТЬ, КАКИЕ ПОЛЯ В ПАКЕТЕ?

Открывай файл arizona-events/init.lua – там лежит полная хуйня со всеми структурами. Выглядит это примерно так:

Lua:
INCOMING_EX[85] = {
"onArizonaBotChatBubble",
{ IO.uint16, "bot_id" },
{ IO.string32, "text" },
{ IO.int32, "color" },
{ IO.float, "distance" },
{ IO.int32, "duration" }
}

Здесь видно, какие поля тебе доступны: bot_id, text, color и т.д. Типы данных (uint16, string32) – это уже для тех, кто шарит, тебе достаточно знать имена полей.




4. ДОПОЛНИТЕЛЬНОЕ API – ЭМУЛЯЦИЯ, ОТПРАВКА, ДЕКОДИНГ И ПРОЧАЯ ПОЕБОТА

  • Эмуляция входящего пакета – тупо подсовываем серверу левый пакет, будто он пришёл.
    Lua:
    acef.emul("onArizonaDisplay", {
    id = 17, -- можно не указывать, если событие однозначное
    text = "..."
    })
  • Отправка исходящего пакета – шлём свои данные на сервер.
    Lua:
    acef.send("onArizonaSend", {
    text = "...",
    server_id = 0
    })
  • Декодинг onArizonaDisplay – раскладываем JSON‑поле text в таблицу. После декодинга появляются поля .event и .json.
    Lua:
    function acef.onArizonaDisplay(packet)
    if acef.decode(packet) then
    print(packet.event, packet.json)
    end
    end
  • Кодирование обратно – если хочешь модифицировать JSON и отправить дальше.
    Lua:
    function acef.onArizonaDisplay(packet)
    if acef.decode(packet) then
    if packet.event == "event.inventory.playerInventory" then
    local t = packet.json[1]
    if t.action == 1 and t.data.skin then
    t.data.skin.model = math.random(0, 303)
    if acef.encode(packet) then
    return { packet } -- возвращаем модифицированный пакет
    end
    end
    end
    end
    end
  • Исполнение JS‑кода в CEF – запускаем свою хуйню в браузере.
    Lua:
    acef.eval("let i = 0", 0) -- server_id можно не писать, по дефолту 0




5. НЕРАЗОБРАННЫЕ ПАКЕТЫ – ЕСЛИ НИЧЕГО НЕ НАШЛОСЬ

Для пакетов, которых нет в init.lua, есть специальные обработчики:

  • [] onArizonaAnyIn и onArizonaAnyOut – для 220 пакета.
    [] onArizonaAnyInEx и onArizonaAnyOutEx – для 221 пакета.

Структура у них одинаковая:
Lua:
{
id = 0, -- id пакета
bytes = { ... } -- таблица с байтами (сырые данные)
}

Если хочешь эмулировать или отправить такой пакет, заполняй эту структуру полностью, включая id.




6. ПРИМЕР ИЗ ЖИЗНИ

Допустим, сервер прислал тебе пакет с менюшкой, а ты хочешь вместо стандартного текста подставить своё.

Lua:
function acef.onArizonaDisplay(packet)
if acef.decode(packet) then
if packet.event == "event.menu.show" then
-- изменяем заголовок
packet.json.title = "ПИЗДАТОЕ МЕНЮ"
if acef.encode(packet) then
return { packet }
end
end
end
end

Всё, клиент получит подменённый JSON и отобразит то, что ты захотел.




7. ПОСЛЕДНИЙ СОВЕТ

Не забывай, что все вызовы должны быть внутри функции-обработчика. Если будешь тупить и пытаться вызвать acef.send просто так из ниоткуда – нифига не уйдёт.

С библиотекой можно творить любую хуйню: от простых читов до своих интерфейсов на CEF.
 
Последнее редактирование: