Исходник arizona-events

wojciech?

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

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,551
511
видимо сампфункс по наитию определяет получение пакета


посмотри как тут реализована подмена данных в 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

Известный
Проверенный
556
505
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