Загрузка...

[.lua] Эмуляция получения RPC, заполнение BitStream

Тема в разделе Гайды SAMP создана пользователем Amid24 24 ноя 2021. 832 просмотра

Загрузка...
  1. Amid24
    Amid24 Автор темы 24 ноя 2021 8 10 ноя 2016
    Всем салам, в этой "статье" я попытаюсь объяснить как эмулировать получение 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 ид скина

    [IMG]

    !!! в списке 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
     
  2. OnlyFans_inactive4693559
    OnlyFans_inactive4693559 12 дек 2021 Заблокирован(а) 362 14 ноя 2021
    а ведь на деле , будет полезно Новичкам в сфере луа!
     
  3. Miladora
    Miladora 12 дек 2021 :coder: 10 181 30 июн 2019
    гов... не надо плодить говно, пусть остаётся на бх
     
  4. ROSTAK
    ROSTAK 25 дек 2021 0 22 авг 2021
    Годно.
     
Top