Исходник arizona-events

wojciech?

Известный
Автор темы
Проверенный
457
418
Чушь не неси. Тут нет хуков
видимо сампфункс по наитию определяет получение пакета

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
Правильно делаю? Почему редко ловлю краши?
но работает
Посмотреть вложение 274375
посмотри как тут реализована подмена данных в cef-элементах: https://www.blast.hk/threads/235664/
эмуляция очень нестабильно работает
 

Tema05

Известный
1,613
533
видимо сампфункс по наитию определяет получение пакета


посмотри как тут реализована подмена данных в cef-элементах: https://www.blast.hk/threads/235664/
эмуляция очень нестабильно работает
А причём тут сампфункс? Он то работает идеально. Человек пожаловался непосредственно на краши при использовании библиотеки, это по сути вина библиотеки. Никто же не желается на сампфункс после добавления CEF. То что эмуляция работает нестабильно это опять же проблема cef, но вызвана она из-за lua кода.

Я где-то месяц потратил подробно ревёрся всё устройство ракнета лаунчера. Кто какие где хуки ставит, в какой последовательности они все работают. Разобрал конкретно почему некоторые пакеты не нопаются и как это исправить. Также долгое время страдал фиксил непонятные краши. Там всё работает синхронно и вообще все хуки работают в рамках основного потока игры. Многопоточности там нет, в lua из-за этого тоже не будет проблем. Да там дебри лютые, хуки на функции вызываемые из лаунчера из другого хука данные для, которого было сохранены ещё в другом хуке. Но если в lua калбек функции привязаны к основному lua потоку, то проблем с хуками не будет. Встроенные в moonloader addEventHandler такой проблемы не вызывают. Хуки через ffi, могут от этого страдать. Но опять же это проблема виртуальный машины lua, ракнет в сампе условно потокобезопасен (не берём socket прослойку, да она в отдельном потоке, но и с ней никто и не работает), ведь вся игра работает в 1 потоке. Я разобрал больше половины всех кастомных пакетов лаунчера, от охранников до передаваемых настроек, там всё всегда получается и отправляется в основном потоке игры и сампа.

Мне тоже всегда казалось, но я же в lua всё идеально написал, там никаких ошибок не может быть. Но при более детальном изучении в 99% случаев проблемы возникала не из-за ракнета, лаунчера, cef или т.п., а из-за кода lua. Да, cef конечно крашит, но он и не всегда предназначен, для того кода, что в него пытаются вставить
 

vegas

Известный
Проверенный
562
520
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
Правильно делаю? Почему редко ловлю краши?
но работает
Посмотреть вложение 274375



Попробуй поменять эту функцию
Lua:
function acef.onArizonaDisplay(packet)
    packet.text = separator(packet.text)

    return packet
end
 

Орк

Известный
399
344
Попробуй поменять эту функцию
Lua:
function acef.onArizonaDisplay(packet)
    packet.text = separator(packet.text)

    return packet
end
Код:
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: Script died due to an error. (3953DD7C)
 

wojciech?

Известный
Автор темы
Проверенный
457
418
Код:
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: attempt to index local 'packet' (a nil value)
stack traceback:
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:108: in function 'write'
    ...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:181: in function <...ncher\bin\arizona\moonloader\lib\arizona-events\core.lua:170>
[ML] (error) money_separator.lua: Script died due to an error. (3953DD7C)
возвращаемое значение из обработчика надо оборачивать в { packet } (кроме true / false)
 

Орк

Известный
399
344
возвращаемое значение из обработчика надо оборачивать в { packet } (кроме true / false)
function acef.onArizonaDisplay(packet)
packet.text = separator(packet.text)

return {packet}
end
не открываются в принципе цеф окна, после третьей попытки открыть любое окно - краш игры
лог пустой
 

wojciech?

Известный
Автор темы
Проверенный
457
418
function acef.onArizonaDisplay(packet)
packet.text = separator(packet.text)

return {packet}
end
не открываются в принципе цеф окна, после третьей попытки открыть любое окно - краш игры
лог пустой
я вчера пробовал доработать эмуляцию и самый оптимальный вариант, как мне кажется, с небольшой задержкой эмулировать новый пакет, а не перезаписывать тот, что пришел ранее
 
  • Нравится
Реакции: Орк

wojciech?

Известный
Автор темы
Проверенный
457
418
Библиотека обновлена
  • Добавлены новые функции (примеры использования есть в первом посте):
Lua:
local [bool] status = acef.decode([table] packet, [function decoder = decodeJson])
local [bool] status = acef.encode([table] packet, [function encoder = encodeJson])
acef.eval([string] js_code, [number server_id = 0])
  • Исправлена перезапись 17 пакета (onArizonaDisplay), теперь она не приводит к непредвиденным ошибкам.
  • Событие onArizonaBotHealthSync переименовано в onArizonaBotOnfootSync.
  • Добавлены новые события:
onArizonaSetSatiety
onArizonaSetInterior
onArizonaSetHudMode
onArizonaSetRadarMode
onArizonaShowPositionInDiscord
onArizonaSetVisableDistance3DMarker
onArizonaSwitchChatMode
onArizonaSetNicknameMode
onArizonaSendSwitchChatMode
 

Орк

Известный
399
344
Библиотека обновлена
function acef.onArizonaDisplay(packet)
packet.text = separator(packet.text)

return {packet}
end
Всё заработало и вроде краши не ловлю, спасибо
1753108733678.png
 

БеzликиЙ

Автор темы
Проверенный
1,693
996
@wojciech? лови новый пакет (хотя на самом деле он пиздец какой старый)

Lua:
OUTGOING[2] = {
    "onArizonaSendTurnLights",
    { IO.uint8, "state" } -- 1 = левый поворотник, 2 = правый, 3 = аварийка, 0 = выключены
}

INCOMING[2] = {
    "onArizonaTurnLightUpdate",
    { IO.uint16, "car_id" }, -- samp id машины
    { IO.uint8, "state" }
}

обнови либу, мне этот пакет нужен для правильной работы ivf.lua с аризоновской синхрой :)
 
  • Нравится
Реакции: wojciech?

wojciech?

Известный
Автор темы
Проверенный
457
418
Библиотека обновлена. Исправлены проблемы в subprocess при запуске на raksamp и добавлены пакеты:
@wojciech? лови новый пакет (хотя на самом деле он пиздец какой старый)

Lua:
OUTGOING[2] = {
    "onArizonaSendTurnLights",
    { IO.uint8, "state" } -- 1 = левый поворотник, 2 = правый, 3 = аварийка, 0 = выключены
}

INCOMING[2] = {
    "onArizonaTurnLightUpdate",
    { IO.uint16, "car_id" }, -- samp id машины
    { IO.uint8, "state" }
}

обнови либу, мне этот пакет нужен для правильной работы ivf.lua с аризоновской синхрой :)
 
  • Нравится
Реакции: romanespit и 2elnwndrer.