Исходник arizona-events

wojciech?

Известный
Автор темы
Проверенный
457
418
Arizona-events - это аналог библиотеки SAMP.Lua, позволяющий также удобно и просто взаимодействовать с новыми пакетами и CEF-интерфейсами аризоны. На данный момент поддерживается как обычный клиент SAMP'a, так и RakSamp Lite.

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

Важно сразу отметить, в событии вместо передачи аргументов по порядку, они передаются таблицей.
Lua:
function acef.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
})
Декодирует пакет onArizonaDisplay и записывает значения в поля .event и .json
Lua:
---@table packet
---@function decoder - функция, декодирующая JSON в таблицу
---@return [bool] status - успешность декодирования
local status = acef.decode(packet, [decoder = decodeJson])
Lua:
function acef.onArizonaDisplay(packet)
    if acef.decode(packet) then
        print(packet.event, packet.json)
    end
end
Кодирует текст для пакета onArizonaDisplay после использования acef.decode
Lua:
---@table packet
---@function encoder - функция, кодирующая таблицу в JSON
---@return [bool] status - успешность кодирования
local status = acef.encode(packet, [encoder = encodeJson])
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:
---@string js_code
---@number server_id
acef.eval(js_code, [server_id = 0])
Lua:
acef.eval("let i = 0")

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

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

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

Автокликер мышкой для мини-игры:
function acef.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 acef.onArizonaBotStreamIn(packet)
    bot_pool[packet.bot_id] = packet
end

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

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

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

Библиотека всё еще находится на стадии разработки и на данный момент некоторые функции могут работать некорректно.

Установка: скачайте актуальную версию на GitHub и разархивируйте папку arizona-events (целиком!) в папку moonloader/lib.

Авторы: @wojciech?, @vegas, @XRLM
 
Последнее редактирование:

copypaste_scripter

Известный
1,431
290
о да вегас постоянно крутые вещи делал и автор темы тоже годно помогал всегда, будет заебись когда выйдет до конца
 
  • Нравится
Реакции: vegas

wojciech?

Известный
Автор темы
Проверенный
457
418
Библиотека обновлена, были исправлены мелкие ошибки и добавлены новые события:
onArizonaPlayMediaOnBillboard
onArizonaSetPlayerNametagFlags
onArizonaSetVehicleLights

onArizonaSetBotAttachedObject
onArizonaSetBotAttachedSimpleObject
onArizonaRemoveAttachedObjectFromBot
onArizonaBotPassengerSync
onArizonaBotHealthSync
onArizonaSetBotWeapon
onArizonaDestroyBot

onArizonaSendBotOnfootSync
 
  • Нравится
  • Влюблен
Реакции: Sargon, VanoKLR и Deps

wojciech?

Известный
Автор темы
Проверенный
457
418
Библиотека обновлена. Больше нет зависимости от SAMP.lua, появилась поддержка RakSamp Lite и еще немного новых пакетов.
 

bfix

Активный
107
80
Сниппеты для этого чуда
кидать файлик в \AppData\Roaming\Code\User\snippets (для тех кто не шарит)
создано нейронкой
Пример: send, emul, acef, onArizona(...)
Отправляю zip'кой ибо тут не поддерживается формат файлов сниппетов
1753969502837.png


Обновил 31.07.2025
 

Вложения

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

romanespit

Участник
59
28
Хотел убрать злоебучие аксы на охранниках и вообще всех актёрах, но чото не воркает 😐
Lua:
function acef.onArizonaSetBotAttachedObject(info) -- bot_id, slot, model_id, bone_id, offset, rotation, scale, color1, color2
    return false
end
function acef.onArizonaSetBotAttachedSimpleObject(info) -- bot_id, slot, model_id, bone_id, offset, rotation, scale, color1, color2
    return false
end
 

vegas

Известный
Проверенный
562
520
Хотел убрать злоебучие аксы на охранниках и вообще всех актёрах, но чото не воркает 😐
Lua:
function acef.onArizonaSetBotAttachedObject(info) -- bot_id, slot, model_id, bone_id, offset, rotation, scale, color1, color2
    return false
end
function acef.onArizonaSetBotAttachedSimpleObject(info) -- bot_id, slot, model_id, bone_id, offset, rotation, scale, color1, color2
    return false
end
Аризона что-то намутила с работой со своими пакетами, прийто то приходят, но как либо видоизменить или нопнуть пакет не выйдет, только прочитать его. Тоже самое и с эмуляцией всех пакетов. НО почему-то с cef-интерфейсами все работает как надо)
 

niqger

Потрачен
7
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
помогите пж с джереми,просто пытаюсь понять как бота заставить покликать пару раз по кнопкам и всё
 

Орк

Известный
405
340
Lua:
-- Форматирует число с точками: 1234567 -> 1.234.567
local function comma_value(n)
    return tostring(n):reverse():gsub("(%d%d%d)", "%1."):reverse():gsub("^%.", "")
end

-- Добавляет разделители тысяч для $123456 и 123456$
local function separator(text)
    if type(text) ~= "string" then return text end
    text = string.gsub(text, "%$(%d+)", function(num) return "$" .. comma_value(num) end)
    text = string.gsub(text, "(%d+)%$", function(num) return comma_value(num) .. "$" end)
    return text
end

local acef = require("arizona-events")

function acef.onArizonaDisplay(packet)
    packet.text = separator(packet.text)
    if packet.text then
        acef.emul("onArizonaDisplay", {
            server_id = packet.server_id,
            text = packet.text
        })
    end
end
Правильно делаю? Почему редко ловлю краши?
но работает
1752792787233.png