Информация Гайд Эмуляция 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
так же содержимое бс можно брать тут

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

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
  • Грустно
  • Нравится
Реакции: chapo и Sargon

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,767
11,209
А если мне нужно эмулировать диалог? А там используется метод, который у тебя не описан
sampShowDialog мне не доводилось записывать CSTRING, так что я хз как это сделать 🤷
 

4el0ve4ik

Известный
Всефорумный модератор
1,548
1,338
Ужасный гайд, если и писать про заполнение битстрима, то только без использования сф, ибо с сф и так все понятно.
 
  • Эм
  • Грустно
Реакции: MAHEKEH и chapo

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
без использования сф
🙂 🙂 🤟