Информация Гайд Эмуляция RPC, заполнение BitStream для кипятильников

Всем салам, в этой "статье" я попытаюсь объяснить как эмулировать получение RPC, а так же как "заполнить" битстрим.

Для начала нам необходимо найти айди и содержимое RPC, получение которого мы будем эмулировать. Для этого перейдем по этой ссылке.
Лично я выберу RPC 153 (установка скина игроку)

Для написания кода нам нужны следующие функции:
Lua:
bs = raknetNewBitStream() --создаем битстрим (вместо bs можно написать что угодно)
raknetEmulRpcReceiveBitStream(int rpc, bs) --эмулируем получение RPC (айди rpc, битстрим)
raknetDeleteBitStream(bs) --после эмуляции удаляем битстрим
raknetBitStreamWriteBool(Bitstream bs, bool value)  -- записать в бс данные типа bool (true/false)
raknetBitStreamWriteInt8(Bitstream bs, int value)  -- записать в бс данные типа int8 (число)
raknetBitStreamWriteInt16(Bitstream bs, int value)  -- записать в бс данные типа int16 (число)
raknetBitStreamWriteInt32(Bitstream bs, int value)  -- записать в бс данные типа int32 (число)
raknetBitStreamWriteFloat(Bitstream bs, float value)  -- записать в бс данные типа float (пример: 1.1337)
raknetBitStreamWriteString(Bitstream bs, string str)  -- записать в бс данные типа string (пример: "хуй трахать сперма пирожки")

Для начала нам необходимо создать битстрим, для этого будем использовать функцию:
Lua:
raknetNewBitStream()

Теперь перейдем к списку RPC и посмотрим что должно быть в RPC
Тут мы видим что бс состоит из 2 параметров, а именно: int32 ид игрока, int32 ид скина
1626360781342.png


!!! в списке rpc написано uint, но нам похуй, будем юзать int, а так же надо запомнить что нельзя вписывать в int число меньше нуля

Теперь соблюдая порядок составляем такой код:
Lua:
bs = raknetNewBitStream()
raknetBitStreamWriteInt32(bs, select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))) --id игрока которому будем выдавать скин
raknetBitStreamWriteInt32(bs, 49) --id скина

Ну и теперь нам необходимо добавить 2 строки:
Lua:
bs = raknetNewBitStream()

raknetBitStreamWriteInt32(bs, select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))) --id игрока которому будем выдавать скин
raknetBitStreamWriteInt32(bs, 49) --id скина

raknetEmulRpcReceiveBitStream(153, bs) --эмулируем получение 153 rpc
raknetDeleteBitStream(bs) --удаляем бс

Пример кода с изменением скина:
Lua:
function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('setskin', function(skinId)
        bs = raknetNewBitStream()
        raknetBitStreamWriteInt32(bs, select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))) --id игрока которому будем выдавать скин
        raknetBitStreamWriteInt32(bs, tonumber(skinId)) --id скина
        raknetEmulRpcReceiveBitStream(153, bs)
        raknetDeleteBitStream(bs)
    end)
    wait(-1)
end
я сам нихуя не понял, но надеюсь что вы поймете
СПИСОК ВСЕХ RPC
так же содержимое бс можно брать тут

фут, не оставляй гневных комментариев о том что я нихуя не могу но при этом пишу "гайды", я и сам это знаю​
 
Последнее редактирование:

chapo

чопа сребдс // @moujeek
Автор темы
Модератор
8,868
11,575
Ахуеть, а вот то что они будут думать что uint это int по твоему нормально?
если я добавлю такое пояснение в тему, его будет достаточно? "!!! в списке rpc написано uint, но нам похуй, будем юзать int, так как нет функции с uint. "
 

SAsha133777

Потрачен
127
111
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
У дарк пикселя ещё хороший гайд по этой теме. На клео только, но принцип один.
www.youtube.com/watch?v=Wa26rcEeLJM
 

Smeruxa

Известный
1,361
722
🙂 🙂 🤟
Да, давайте с одной на другую библиотеку прыгать
 

sat0ry

Известный
1,092
293
raknetBitStreamWriteInt16(Bitstream bs, int value) -- записать в бс данные типа int16 (число)
raknetBitStreamWriteInt32(Bitstream bs, int value) -- записать в бс данные типа int32 (число)

Чем они отличаются?
 

chapo

чопа сребдс // @moujeek
Автор темы
Модератор
8,868
11,575
raknetBitStreamWriteInt16(Bitstream bs, int value) -- записать в бс данные типа int16 (число)
raknetBitStreamWriteInt32(Bitstream bs, int value) -- записать в бс данные типа int32 (число)

Чем они отличаются?
int8: представляет целое число от -128 до 127 и занимает в памяти 1 байт (8 бит) int16: представляет целое число от -32768 до 32767 и занимает в памяти 2 байта (16 бит) int32: представляет целое число от -2147483648 до 2147483647 и занимает 4 байта (32 бита)”
 
  • Влюблен
  • Нравится
Реакции: whyega52 и sat0ry