Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

[RNM] RakNet Manager 1.0.0

Zaur_Lumanov

Изучающий
Пользователь
Регистрация
11 Июл 2014
Сообщения
304
Лучшие ответы
0
Репутация
199
Описание:

Плагин для SA:MP-сервера, который позволяет работать с RakNet-пакетами в PAWN. Перехват входящих/исходящих, отправка кастомных Packet/RPC.

Скачать:



Примеры:

PHP:
#include <raknetmanager>
1. Отправка RPC

PHP:
stock SendChatMessage(senderid, msg[])
{
  new BitStream:bs = BS_New(), RPC_Chat = 101;

  BS_WriteValue(bs, RNM_INT16, senderid,
                    RNM_INT8, strlen(msg),
                    RNM_STRING, msg);

  RNM_SendRPC(senderid, RPC_Chat, bs);

  BS_Delete(bs);
}
2. Отправка пакета

PHP:
stock FakeLostConnectionForPlayer(playerid)
{
  new BitStream:bs = BS_New(), ID_CONNECTION_LOST = 33;

  BS_WriteValue(bs, RNM_INT8, ID_CONNECTION_LOST);

  RNM_SendPacket(playerid, bs);

  BS_Delete(bs);
}
3. Перехват пакета со входящей синхронизации игрока пешком

PHP:
new ID_PLAYER_SYNC = 207;
public OnPlayerReceivedPacket(playerid, packetid, BitStream:bs)
{
    if(packetid == ID_PLAYER_SYNC)
    {
    new lrkeys, udkeys, sampkeys,
    Float:pos[3], Float:quaternion[4],
    health, armor, weaponid, specialaction,
    Float:speed[3], Float:surfingoffsets[3],
    surfingvehid, animationid, animflags;

    BS_IgnoreBits(bs, 8); // packet id 1 byte
    BS_ReadValue(bs, RNM_UINT16, lrkeys,
                     RNM_UINT16, udkeys,
                     RNM_UINT16, sampkeys,
                     RNM_FLOAT, pos[0],
                     RNM_FLOAT, pos[1],
                     RNM_FLOAT, pos[2],
                     RNM_FLOAT, quaternion[0],
                     RNM_FLOAT, quaternion[1],
                     RNM_FLOAT, quaternion[2],
                     RNM_FLOAT, quaternion[3],
                     RNM_UINT8, health,
                     RNM_UINT8, armor,
                     RNM_UINT8, weaponid,
                     RNM_UINT8, specialaction,
                     RNM_FLOAT, speed[0],
                     RNM_FLOAT, speed[1],
                     RNM_FLOAT, speed[2],
                     RNM_FLOAT, surfingoffsets[0],
                     RNM_FLOAT, surfingoffsets[1],
                     RNM_FLOAT, surfingoffsets[2],
                     RNM_UINT16, surfingvehid,
                     RNM_INT16, animationid,
                     RNM_INT16, animflags);

    printf("lrkeys %d udkeys %d sampkeys %d\n" \
           "pos %.2f %.2f %.2f\n" \
           "quaternion %.2f %.2f %.2f %.2f\n" \
           "health %d\n" \
           "armor %d\n" \
           "weaponid %d\n" \
           "specialaction %d\n" \
           "speed %.2f %.2f %.2f\n" \
           "surfingoffsets %.2f %.2f %.2f\n" \
           "surfingvehid %d\n" \
           "anim %d flags %d",
           lrkeys, udkeys, sampkeys,
           pos[0], pos[1], pos[2],
           quaternion[0], quaternion[1], quaternion[2], quaternion[3],
           health, armor, weaponid, specialaction,
           speed[0], speed[1], speed[2],
           surfingoffsets[0], surfingoffsets[1], surfingoffsets[2],
           surfingvehid, animationid, animflags
           );
    }
    return 1;
}
4. Перехват входящего RPC с чат-сообщением

PHP:
new RPC_Chat = 101;
public OnPlayerReceivedRPC(playerid, rpcid, BitStream:bs)
{
    if(rpcid == RPC_Chat)
    {
    new message[256], len;

    BS_ReadValue(bs, RNM_UINT8, len,
                    RNM_STRING, message, len);

    printf("chat message from player %d: %s", playerid, message);
    }

    return 1;
}

Native list:

PHP:
native RNM_SendRPC(playerid, rpcid, BitStream:bs); 
native RNM_SendPacket(playerid, BitStream:bs);

native BitStream:BS_New();
native BS_Delete(&BitStream:bs);

native BS_Reset(BitStream:bs);
native BS_ResetReadPointer(BitStream:bs);
native BS_ResetWritePointer(BitStream:bs);
native BS_IgnoreBits(BitStream:bs, bitcount);

native BS_SetWriteOffset(BitStream:bs, offset);
native BS_GetWriteOffset(BitStream:bs, &offset);
native BS_SetReadOffset(BitStream:bs, offset);
native BS_GetReadOffset(BitStream:bs, &offset);

native BS_GetNumberOfBitsUsed(BitStream:bs, &number);
native BS_GetNumberOfBytesUsed(BitStream:bs, &number);
native BS_GetNumberOfUnreadBits(BitStream:bs, &number);

native BS_WriteValue(BitStream:bs, {Float,_}:...);
native BS_ReadValue(BitStream:bs, {Float,_}:...);
Callback list:

PHP:
// return 0 => blocking action
forward OnPlayerReceivedPacket(playerid, packetid, BitStream:bs);
forward OnPlayerReceivedRPC(playerid, rpcid, BitStream:bs);
forward OnServerSendPacket(playerid, packetid, BitStream:bs);
forward OnServerSendRPC(playerid, rpcid, BitStream:bs);
Автор: .
 
Последнее редактирование модератором:
Сверху Снизу