// в мейнлуп регаешь колбэк
SF->getRakNet()->registerRakNetCallback( RAKHOOK_TYPE_OUTCOMING_RPC, outcomingRPC );
bool __stdcall outcomingRPC( stRakNetHookParams *params ) {
if ( params->packetId == RPC_ClientJoin ) {
int32_t version;
uint8_t mod, nickNameLen, authKeyLen, clientVerLen;
std::string nickName, authKey, clientVersion;
uint32_t clientChallengeResponse;
// читаешь данные
params->bitStream->ResetReadPointer();
params->bitStream->Read( version );
params->bitStream->Read( mod );
params->bitStream->Read( nickNameLen );
nickName.reserve( nickNameLen );
params->bitStream->Read( const_cast<char *>( nickName.data() ), nickNameLen );
params->bitStream->Read( clientChallengeResponse );
params->bitStream->Read( authKeyLen );
authKey.reserve( authKeyLen );
params->bitStream->Read( const_cast<char *>( authKey.data() ), authKeyLen );
params->bitStream->Read( clientVerLen );
clientVersion.reserve( clientVerLen );
params->bitStream->Read( const_cast<char *>( clientVersion.data() ), clientVerLen );
// меняешь данные
// обратно вписываешь данные
params->bitStream->ResetWritePointer();
params->bitStream->Write( version );
params->bitStream->Write( mod );
params->bitStream->Write( static_cast<uint8_t>( nickName.size() ) );
params->bitStream->Write( nickName.c_str(), nickName.size() );
params->bitStream->Write( clientChallengeResponse );
params->bitStream->Write( static_cast<uint8_t>( authKey.size() ) );
params->bitStream->Write( authKey.c_str(), authKey.size() );
params->bitStream->Write( static_cast<uint8_t>( clientVer.size() ) );
params->bitStream->Write( clientVersion.c_str(), clientVer.size() );
}
return true;
}