• 0
qqaaalll

Не читается строка из BitStream.

Вопросы

Проблема изложена в названии темы.

 

Код из мода

public OnIncomingPacket(playerid, packetid, BitStream:bs)
{
    new data[100], string[100], byteNameLen;

    BS_IgnoreBits(bs, 8);
    BS_ReadValue(bs, PR_STRING, data);

    /* format(string, 10, "%d", packetid);
    SendClientMessage(playerid, -1, string); */

    switch(packetid)
    {
        case PACKET_TEST:
        {
            format(string, 100, "Received %d packet: %s len: %s", packetid, data, byteNameLen);
            SendClientMessage(playerid, -1, string);
            return 1;
        }
    }
    return 1;
}

Код из .lua

PACKET_CUSTOM = 251
PACKET_DATA = "78"
COLOR = 0x00BFFF

function main()

    if not isSampLoaded() or not isSampfuncsLoaded() then
        return
    end

    while not isSampAvailable() do
        wait(100)
    end

    sampAddChatMessage("Скрипт загружен", COLOR)

    while true do

        wait(0)
        if isKeyJustPressed(0x42) then

            bs = raknetNewBitStream()
            raknetBitStreamWriteInt8(bs, PACKET_CUSTOM)
            raknetBitStreamWriteString(bs, PACKET_DATA)
            raknetSendBitStream(bs)

            sampAddChatMessage("Пакет отправлен", COLOR)

        end
    end
end

 

Если передавать число ( в моде указываю PR_INT8, new data[100] меняю на new data, в format меняю %s на %d; в .lua raknetBitStreamWriteString меняю на raknetBitStreamWriteInt8 и передаю число вторым параметром ) то всё получается, и в сампе мне приходит сообщение с цифрой которую я указал в .lua. Также заметил, что если заменить PR_STRING на PR_INT8 и передать строку, то в data записывается ASCII код первого символа из передаваемой строки, подозреваю что здесь проблема в PR_STRING.

Поделиться сообщением


Ссылка на сообщение

1 ответ на этот вопрос

  • 0

Я разобрался - нужно было в BS_ReadValue(bs, PR_STRING, data); четвёртым аргументом передать длину строки в байтах.

Её можно получить в функции BS_GetNumberOfUnreadBits(bs, <переменная в которую нужно записать байты>);

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • fresko241
      От fresko241
      Привет, я только обучаюсь разработке. Хочу узнать у меня есть радио, музыка играет. Но как можно сделать чтобы музыка играла только в машине и слышна была и людям которые возле нее.


       
      CMD:radio(playerid,params[])
      {
              ShowPlayerDialog(playerid,150,DIALOG_STYLE_LIST,"Включить радио","[1] Кайф ты поймала\n[2] Седая ночь\n[3] Руки вверх ай яй яй\n[4] Radio ZaycevFM\n","Выбрать","Отмена");
      }
      CMD:radiostop(playerid,params[])
      {
              if(!IsValidObject(3)) return SendClientMessage(playerid,0xff0000AA,"Вы не включали радио");
          RemovePlayerAttachedObject(playerid, 3);
          StopAudioStreamForPlayer(playerid);
          SendClientMessage(playerid,0xff0000AA,"Вы сняли наушники и выключил плеер.");
          return 1;
      }