Исходник arizona-events

wojciech?

Известный
Автор темы
Проверенный
399
321
Arizona-events - это дополнение к уже существующей библиотеке SAMP.Lua, позволяющие также удобно и просто взаимодействовать с новыми пакетами и CEF-интерфейсами аризоны.

Подключение:
local samp = require("samp.events")
local acef = require("arizona-events")

Важно сразу отметить, в событии вместо передачи аргументов по порядку, они передаются таблицей. И сами события должны быть зарегистрированы в оригинальной библиотеке SAMP.lua:
Lua:
function samp.onArizonaBotChatBubble(packet)
    sampAddChatMessage(("Бот[%s] сказал: %s"):format(packet.bot_id, packet.text), -1)
end

Структуру таблицы для каждого пакета можно посмотреть в 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" }
}

Помимо обработки событий, также имеется дополнительный API для эмуляции (скорее всего не будет работать) и отправки пакетов:
ОписаниеМетодПример
Эмулирует входящий пакет
Lua:
---@string event* - название события
---@table packet - заполненный пакет
acef.emul(event, packet)
Lua:
acef.emul("onArizonaDisplay", {
    id = 17, -- указывать не обязательно*
    text = "..."
})
Отправляет исходящий пакет
Lua:
---@string event* - название события
---@table packet - заполненный пакет
acef.send(event, packet)
Lua:
acef.send("onArizonaSend", {
    text = "...",
    server_id = 0
})

* Для неразобранных событий есть специальные обработчики onArizonaAnyIn, onArizonaAnyOut для 220 пакета и onArizonaAnyInEx, onArizonaAnyOutEx для 221 пакета. Их структура:
Lua:
{
    id = 0, -- id пакета
    bytes = { ... } -- таблицы с байтами
}

Для отправки или эмуляции нужно полностью заполнить эту структуру, в том числе явно указать id пакета.

Примеры использования библиотеки:
Запрещаем открывать телефон, батлпас и др, пока открыта консоль SF или любой другой интерфейс:
function samp.onArizonaSendKey(packet)
    if packet.key ~= vkeys.VK_ESCAPE and (sampIsCursorActive() or isCursorActive()) then
        return false
    end
end

Автокликер мышкой для мини-игры:
function samp.onArizonaDisplay(packet)
    if packet.text:find("window.executeEvent%('event.clicker.setProgress', `%[%d+%]`%);") then
        for i = 1, 4 do
            acef.send("onArizonaSend", { server_id = 0, text = "clickMinigame" })
        end
    end
end

Простой пул ботов в зоне стрима:
local bot_pool = {}

function samp.onArizonaBotStreamIn(packet)
    bot_pool[packet.bot_id] = packet
end

function samp.onArizonaBotStreamOut(packet)
    bot_pool[packet.bot_id] = nil
end

function samp.onArizonaSetBotTargetPos(packet)
    local bot = bot_pool[packet.bot_id]
    if bot then
        bot.position = packet.position
    end
end

function samp.onArizonaSetBotPos(packet)
    local bot = bot_pool[packet.bot_id]
    if bot then
        bot.position = packet.position
    end
end

Библиотека всё еще находится на стадии разработки и на данный момент некоторые функции могут работать некорректно. Также будем очень признательны, если кто-то решит помочь разобрать пакеты, которых еще нет в нашем списке :)

Установка: разархивировать папку arizona-events в папку moonloader/lib

Авторы: @wojciech?, @vegas
 

Вложения

  • arizona-events.zip
    3.3 KB · Просмотры: 3
Последнее редактирование:

copypaste_scripter

Известный
1,395
278
о да вегас постоянно крутые вещи делал и автор темы тоже годно помогал всегда, будет заебись когда выйдет до конца