Daniel_Govnocode
Активный
- 328
- 61
Сегодня на аризоне немного обновился цеф и часть скриптов перестала работать. Изменили они не очень много, вот новая структура входящего пакета:
C:struct cef_packet_recieved { uint8_t packet_id; // default 220 uint8_t unknown_id; // default 17 uint32_t _unused; uint16_t length; uint8_t is_encoded; // 1 - encoded, 0 - default char[] str; // char[length + is_encoded] // если строка закодирована, то + 1 байт к длине, иначе не захватит последний символ };
Код для чтения входящего пакета:
Lua:addEventHandler('onReceivePacket', function (id, bs) if id == 220 then raknetBitStreamIgnoreBits(bs, 8) if (raknetBitStreamReadInt8(bs) == 17) then raknetBitStreamIgnoreBits(bs, 32) local length = raknetBitStreamReadInt16(bs) local encoded = raknetBitStreamReadInt8(bs) local str = (encoded ~= 0) and raknetBitStreamDecodeString(bs, length + encoded) or raknetBitStreamReadString(bs, length) print(str) -- строка из пакета end end end)
up
Исходящие пакеты всё-таки тоже изменились:
C:struct cef_packet_sended { uint8_t packet_id; // default 220, другие не разбирал uint8_t packet_type; uint16_t length; char[] str; // строка из пакета: char[length] uint32_t _unused; }
Код для отправки исходящего пакета:
Lua:function send_cef(str) local bs = raknetNewBitStream() raknetBitStreamWriteInt8(bs, 220) raknetBitStreamWriteInt8(bs, 18) raknetBitStreamWriteInt16(bs, #str) raknetBitStreamWriteString(bs, str) raknetBitStreamWriteInt32(bs, 0) raknetSendBitStream(bs) raknetDeleteBitStream(bs) end
Код для чтения исходящего пакета:
Lua:addEventHandler('onSendPacket', function (id, bs, priority, reliability, orderingChannel) if id == 220 then local id = raknetBitStreamReadInt8(bs) local packettype = raknetBitStreamReadInt8(bs) local strlen = raknetBitStreamReadInt16(bs) local str = raknetBitStreamReadString(bs, strlen) if packettype ~= 0 and packettype ~= 1 and #str > 2 then print(str) -- исходящая строка end end end)
Ниже обновленная библиотека (x2) из темы:
Lua:
function main()
while not isSampAvailable() do wait(0) end
end
addEventHandler('onReceivePacket', function (id, bs)
if id == 220 then
raknetBitStreamIgnoreBits(bs, 8)
if (raknetBitStreamReadInt8(bs) == 17) then
raknetBitStreamIgnoreBits(bs, 32)
local length = raknetBitStreamReadInt16(bs)
local encoded = raknetBitStreamReadInt8(bs)
local str = (encoded ~= 0) and raknetBitStreamDecodeString(bs, length + encoded) or raknetBitStreamReadString(bs, length)
print(str) -- строка из пакета
end
end
end)
addEventHandler('onSendPacket', function (id, bs, priority, reliability, orderingChannel)
if id == 220 then
local id = raknetBitStreamReadInt8(bs)
local packettype = raknetBitStreamReadInt8(bs)
local strlen = raknetBitStreamReadInt16(bs)
local str = raknetBitStreamReadString(bs, strlen)
if packettype ~= 0 and packettype ~= 1 and #str > 2 then
print(str) -- исходящая строка
end
end
end)
Хз чё такое, открываю например интерфейс рулетки и в логах просто пустая строка.