Помощь с копированием BitStream RakNet

Mattioli

Участник
Автор темы
45
2
RU: Привет, ребята из BH! Я ищу функцию Lua, с помощью которой я могу скопировать битовый поток из onReceiveRpc в переменную (как копию), чтобы использовать его позже.

EN: Hi BH folks! I'm looking for a Lua function that allows me to copy a bitstream from onReceiveRpc to a variable (as a copy) for later use. Спасибо!
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,802
2,672
RU: Привет, ребята из BH! Я ищу функцию Lua, с помощью которой я могу скопировать битовый поток из onReceiveRpc в переменную (как копию), чтобы использовать его позже.

EN: Hi BH folks! I'm looking for a Lua function that allows me to copy a bitstream from onReceiveRpc to a variable (as a copy) for later use. Спасибо!
Lua:
local bytestream = {
    data = {}
}


function bytestream:copy(bs)
    local length = raknetBitStreamGetNumberOfBytesUsed()
    for i = 1, length do
        table.insert(self.data, raknetBitStreamReadInt8())
    end
end


function bytestream:write(bs)
    for _, byte in ipairs(self.data) do
        raknetBitStreamWriteInt8(bs, byte)
    end
end



addEventHandler("onReceiveRpc", function(id, bs)
    if id == 93 then
        bytestream:copy(bs)
    end
end)


-- Пример эмуляции
local bs = raknetNewBitStream()
bytestream:write(bs)
raknetEmulRpcReceiveBitStream(93, bs)
raknetDeleteBitStream()

Еще можно через ffi создавать новый буффер и записывать в него данные из битстрима (как буду дома, посмотрю, возможно, скину еще и это решение)
 

imring

Ride the Lightning
Всефорумный модератор
2,365
2,552
Lua:
local bytestream = {
    data = {}
}


function bytestream:copy(bs)
    local length = raknetBitStreamGetNumberOfBytesUsed()
    for i = 1, length do
        table.insert(self.data, raknetBitStreamReadInt8())
    end
end


function bytestream:write(bs)
    for _, byte in ipairs(self.data) do
        raknetBitStreamWriteInt8(bs, byte)
    end
end



addEventHandler("onReceiveRpc", function(id, bs)
    if id == 93 then
        bytestream:copy(bs)
    end
end)


-- Пример эмуляции
local bs = raknetNewBitStream()
bytestream:write(bs)
raknetEmulRpcReceiveBitStream(93, bs)
raknetDeleteBitStream()

Еще можно через ffi создавать новый буффер и записывать в него данные из битстрима (как буду дома, посмотрю, возможно, скину еще и это решение)
Lua:
local function copy_bitstream(bitstream)
    local read_offset = raknetBitStreamGetReadOffset(bitstream)
    raknetBitStreamResetReadPointer(bitstream)

    local new_bitstream = raknetNewBitStream()
    raknetBitStreamWriteBitStream(new_bitstream, bitstream)

    raknetBitStreamSetReadOffset(bitstream, read_offset)
    return new_bitstream
end
 
  • Нравится
Реакции: Mintha, whyega52 и Sargon