• 0
Sign in to follow this  
Followers 0
qqaaalll

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

Question

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

 

Код из мода

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.

Share this post


Link to post

1 answer to this question

  • 0

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

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

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0