[RNM] RakNet Manager 1.0.0
Новая тема с более свежей информацией о плагине:
*клац*
Содержимое темы (не актуально) Описание:
Плагин для SA:MP-сервера, который позволяет работать с RakNet-пакетами в PAWN. Перехват входящих/исходящих, отправка кастомных Packet/RPC.
Скачать:
https://github.com/urShadow/raknetmanager/releases
Оригинальная тема: http://forum.sa-mp.com/showthread.php?t=599936
Примеры:
Открыть/закрыть
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);
Автор: urShadow.