Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: pawn raknet

  1. #1
    Аватар для antosha22rus
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2018
    Сообщений
    14
    Репутация:
    0 ±

    pawn raknet

    1. public OnIncomingRPC(playerid, rpcid, BitStream:bs)
    2. {
    3. if(rpcid == 119) // RPC_MapMarker
    4. {
    5. new BitStream:b = BS_New();
    6. BS_ReadValue(
    7. b,
    8. PR_UINT16, 0,
    9. PR_FLOAT, vx,
    10. PR_FLOAT, vy,
    11. PR_FLOAT, vz
    12. );
    13.  
    14. new string[128];
    15. format(string, sizeof(string), "%f", vz);
    16. SendClientMessage(playerid, 0x919191FF, string);
    17. }
    18. return 1;
    19. }

    Почему я получаю vz = 0,000, и как получать правильно данные с РПС?
    Как я могу зарегистрировать новый рпс с помощью павн ракнет?

  2. #2
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от antosha22rus Посмотреть сообщение
    Почему я получаю vz = 0,000, и как получать правильно данные с РПС?
    Потому что ты читаешь данные из пустого только что созданного битстрима "b", а не из "bs", который передаётся в паблике.

    Цитата Сообщение от antosha22rus Посмотреть сообщение
    Как я могу зарегистрировать новый рпс с помощью павн ракнет?
    Для начала просто попробуй отправлять как и любые существующие, через PR_SendRPC. Если речь идёт о том, чтобы принимать новый, вроде бы IRawPacket: для этого можно использовать.
    Последний раз редактировалось Nexius_Tailer; 15.01.2021 в 15:46.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  3. #3
    Аватар для antosha22rus
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2018
    Сообщений
    14
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Потому что ты читаешь данные из пустого только что созданного битстрима "b", а не из "bs", который передаётся в паблике.


    Для начала просто попробуй отправлять как и любые существующие, через PR_SendRPC. Если речь идёт о том, чтобы принимать новый, вроде бы IRawPacket: для этого можно использовать.
    1. Почему если
    1. IRawPacket:256(playerid, BitStream:bs)
    больше 255, то я получаю [Pawn.RakNet] Natives::n_PR_RegHandler: invalid array<T, N> subscript?
    2. Это регистрирует новый рпс или пакет?

  4. #4
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от antosha22rus Посмотреть сообщение
    1. Почему если
    1. IRawPacket:256(playerid, BitStream:bs)
    больше 255, то я получаю [Pawn.RakNet] Natives::n_PR_RegHandler: invalid array<T, N> subscript?
    Они также как и всё имеют ограничения по макс. идам. Получается, для них это 255 как максимально возможный валидный ид.

    Цитата Сообщение от antosha22rus Посмотреть сообщение
    2. Это регистрирует новый рпс или пакет?
    Это ловит любой пакет, в т.ч. и свой собственный. RPC это разновидность пакета, так что и кастомный RPC ловишь через эту функцию, предварительно проверяя, что сырой пакет это ID_RPC, как в скинутом выше примере на вики (там сделано через хандлер).
    Последний раз редактировалось Nexius_Tailer; 15.01.2021 в 22:41.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  5. #5
    Аватар для antosha22rus
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2018
    Сообщений
    14
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Они также как и всё имеют ограничения по макс. идам. Получается, для них это 255 как максимально возможный валидный ид.


    Это ловит любой пакет, в т.ч. и свой собственный. RPC это разновидность пакета, так что и кастомный RPC ловишь через эту функцию, предварительно проверяя, что сырой пакет это ID_RPC, как в скинутом выше примере на вики (там сделано через хандлер).
    1. IRawPacket:101(playerid, BitStream:bs)
    2. {
    3. new num;
    4.  
    5. BS_ReadValue(bs,
    6. PR_IGNORE_BITS, 8,
    7. PR_UINT16, num
    8. );
    9.  
    10. printf("test %d", playerid1);
    11. return 1;
    12. }


    и для примера я вызываю через команду:
    1. new BitStream:bs = BS_New();
    2. BS_WriteValue(bs, PR_UINT16, 5);
    3. PR_SendRPC(bs, playerid, 101);
    4. BS_Delete(bs);


    что я не правильно делаю?
    Последний раз редактировалось antosha22rus; 16.01.2021 в 00:16.

  6. #6
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Переменная num = 0. Так и задумано?

  7. #7
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от antosha22rus Посмотреть сообщение
    1. IRawPacket:101(playerid, BitStream:bs)
    2. {
    3. new num;
    4.  
    5. BS_ReadValue(bs,
    6. PR_IGNORE_BITS, 8,
    7. PR_UINT16, num
    8. );
    9.  
    10. printf("test %d", playerid1);
    11. return 1;
    12. }


    и для примера я вызываю через команду:
    1. new BitStream:bs = BS_New();
    2. BS_WriteValue(bs, PR_UINT16, 5);
    3. PR_SendRPC(bs, playerid, 101);
    4. BS_Delete(bs);


    что я не правильно делаю?
    А что выводит printf на "num"? И почему у тебя там при логировании "playerid1"?
    И с чем в принципе проблемы сейчас? По-подробнее бы.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  8. Пользователь сказал cпасибо:
    antosha22rus (16.01.2021)
  9. #8
    Аватар для antosha22rus
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2018
    Сообщений
    14
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    А что выводит printf на "num"? И почему у тебя там при логировании "playerid1"?
    И с чем в принципе проблемы сейчас? По-подробнее бы.
    Для теста я передаю значение "5" ( BS_WriteValue(bs, PR_UINT16, 5) )
    Но принтф не выводит num ( то что стоял плауерид1, это не обратил внимание, в коде уже исправлено на num)

  10. #9
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от antosha22rus Посмотреть сообщение
    Для теста я передаю значение "5" ( BS_WriteValue(bs, PR_UINT16, 5) )
    Но принтф не выводит num ( то что стоял плауерид1, это не обратил внимание, в коде уже исправлено на num)
    А, ну так IRawPacket ловит Incoming (входящие) для сервера пакеты, а не исходящие. Шли его с клиента и всё залогируется по пришествии на сервер.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  11. Пользователь сказал cпасибо:
    antosha22rus (16.01.2021)
  12. #10
    Аватар для antosha22rus
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.07.2018
    Сообщений
    14
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    А, ну так IRawPacket ловит Incoming (входящие) для сервера пакеты, а не исходящие. Шли его с клиента и всё залогируется по пришествии на сервер.
    Спасибо! Я смог разобраться, но как передавать сами параметры правильно для РПС?

    1. IRawPacket:101(playerid, BitStream:bs)
    2. {
    3. new rpcid, numberOfBitsOfData;
    4.  
    5. BS_ReadValue(bs,
    6. PR_IGNORE_BITS, 8, // packet id
    7. PR_UINT8, rpcid,
    8. PR_CUINT32, numberOfBitsOfData
    9. );
    10. if(rpcid == 143)
    11. {
    12. new Float: num;
    13.  
    14. BS_ReadValue(bs,
    15. PR_IGNORE_BITS, 8,
    16. PR_FLOAT, num
    17. );
    18.  
    19. printf("test %f", num);
    20. }
    21. return 1;
    22. }



    1.  
    2. struct stNewData
    3. {
    4. float fTest;
    5. };
    6.  
    7. stNewData sync;
    8. ZeroMemory(&sync, sizeof(stNewData));
    9. sync.fTest = (float)25;
    10.  
    11. BitStream bsSends;
    12. bsSends.Write((BYTE)101);
    13. bsSends.Write((UINT8)143);
    14. bsSends.Write((UINT32)60);
    15. bsSends.Write((PCHAR)&sync, sizeof(stNewData));
    16.  
    17. pSAMP->sendPacket(&bsSends);

    1. В консоль я получаю только test, без аргумента num

    2. Как правильно высчитывать размер для numberOfBitsOfData ( передаю так, bsSends.Write((UINT32)60) )
    Последний раз редактировалось antosha22rus; 17.01.2021 в 00:02.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •