Пример перехвата входящего (пришедшего от сервера) RPC_ScrServerJoin:
bool CALLBACK incomingRPC( stRakNetHookParams *params ) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if( params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin ) // если это RPC_ScrServerJoin
{
short int sPlayerID;
D3DCOLOR D3DPlayerColor;
byte isNPC, nameLen;
char szPlayerName[25];
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
params->bitStream->Read( sPlayerID ); // читаем ID игрока.
params->bitStream->Read( D3DPlayerColor ); // цвет ника игрока.
params->bitStream->Read( isNPC ); // флаг, говорящий о том, NPC это или нет.
params->bitStream->Read( nameLen ); // длина ника.
params->bitStream->Read( szPlayerName, nameLen ); // ник.
szPlayerName[ nameLen ]= '\0'; // обрезаем, чтоб не было мусора
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения
SF->getSAMP()->getChat()->AddChatMessage( D3DPlayerColor, "%s[%d] Подключился к серверу.",
szPlayerName, sPlayerID ); // добавляем сообщение в чат.
};
return true; // успешно завершаем обработку RPC.
};
SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC ); // регистрируем callback