bitstream в строку

Tornamic

Новичок
Автор темы
14
4
Версия MoonLoader
Другое
как перевести аргументы rpc в строку? чтобы в onReceiveRpc любой bitstream переводился в строку с аргументами rpc_name [arg1] [arg2]....
 
Решение
это ясно, возможно ли "автоматом" парсить в нужный тип байты которые получаешь с bs? как я понимаю нет, придется генерировать код для каждого rpc
именно). в целом, можешь посмотреть реализацию чтения каждого RPC и пакета в samp.events

хуега)

РП игрок
Модератор
2,568
2,269
как перевести аргументы rpc в строку? чтобы в onReceiveRpc любой bitstream переводился в строку с аргументами rpc_name [arg1] [arg2]....
Не совсем в том формате, как ты просил, но думаю сам сможешь поменять
Lua:
-- 1 вариант
addEventHandler("onReceiveRpc", function(id, bs)
    local bytes = {}
    local length = raknetBitStreamGetNumberOfBytesUsed(bs)
    for i = 1, length do
        table.insert(bytes, raknetBitStreamReadInt8(bs))
    end
    print(raknetGetRpcName(id), table.concat(bytes, ", "))
end)


-- 2 варинт (не уверен в его работе, но можешь попробовать)
addEventHandler("onReceiveRpc", function(id, bs)
    local length = raknetBitStreamGetNumberOfBytesUsed(bs)
    local bytes = 0
    for _ = 1, length do
        bytes = bytes * 256 + raknetBitStreamReadInt8(bs)
    end
    print(("%s %X"):format(raknetGetRpcName(id), bytes))
end)
 

Tornamic

Новичок
Автор темы
14
4
Не совсем в том формате, как ты просил, но думаю сам сможешь поменять
Lua:
-- 1 вариант
addEventHandler("onReceiveRpc", function(id, bs)
    local bytes = {}
    local length = raknetBitStreamGetNumberOfBytesUsed(bs)
    for i = 1, length do
        table.insert(bytes, raknetBitStreamReadInt8(bs))
    end
    print(raknetGetRpcName(id), table.concat(bytes, ", "))
end)


-- 2 варинт (не уверен в его работе, но можешь попробовать)
addEventHandler("onReceiveRpc", function(id, bs)
    local length = raknetBitStreamGetNumberOfBytesUsed(bs)
    local bytes = 0
    for _ = 1, length do
        bytes = bytes * 256 + raknetBitStreamReadInt8(bs)
    end
    print(("%s %X"):format(raknetGetRpcName(id), bytes))
end)
первый вариант рабочий, каким способом можно парсить byte в string/float/int?
 

хуега)

РП игрок
Модератор
2,568
2,269
первый вариант рабочий, каким способом можно парсить byte в string/float/int?

Lua:
-- string:
print(string.char(72, 69, 76, 76, 79, 32, 78, 73, 71, 71, 69, 82, 83)) -- output: HELLO NIGGERS


local byte = 7860

--int
print(tonumber(ffi.cast("int", byte)))

--char
print(tonumber(ffi.cast("char", byte)))

--float
print(tonumber(ffi.cast("float", byte)))
 

Tornamic

Новичок
Автор темы
14
4
Lua:
-- string:
print(string.char(72, 69, 76, 76, 79, 32, 78, 73, 71, 71, 69, 82, 83)) -- output: HELLO NIGGERS


local byte = 7860

--int
print(tonumber(ffi.cast("int", byte)))

--char
print(tonumber(ffi.cast("char", byte)))

--float
print(tonumber(ffi.cast("float", byte)))
это ясно, возможно ли "автоматом" парсить в нужный тип байты которые получаешь с bs? как я понимаю нет, придется генерировать код для каждого rpc
 
  • Нравится
Реакции: хуега)

хуега)

РП игрок
Модератор
2,568
2,269
это ясно, возможно ли "автоматом" парсить в нужный тип байты которые получаешь с bs? как я понимаю нет, придется генерировать код для каждого rpc
именно). в целом, можешь посмотреть реализацию чтения каждого RPC и пакета в samp.events
 
  • Влюблен
Реакции: Tornamic

хуега)

РП игрок
Модератор
2,568
2,269
Список почти всех входящих rpc (кроме тех, у которых нет параметров), генерировал C# кодом
Pastebin
Хах, неплохо. Но в луа есть таблицы, благодаря которым можно было бы упростить код (как в самп.евентс). А то сейчас коду ооочень плохо
 
  • Нравится
Реакции: Tornamic

Tornamic

Новичок
Автор темы
14
4
Хах, неплохо. Но в луа есть таблицы, благодаря которым можно было бы упростить код (как в самп.евентс). А то сейчас коду ооочень плохо
в луа ничего не понимаю, пишу чтобы хоть как-то работало, нет времени и желания разбираться
 
  • Вау
Реакции: хуега)