void CNetGame::Packet_PlayerSync(Packet* p) { CPlayer* pPlayer = this->playerPool->GetPlayer((_PlayerID)p->playerIndex); RakNet::BitStream bsPlayerSync((char*)p->data, p->length, false); if(this->gameState != 1) return; uint8_t bytePacketID = 0; ON_FOOT_SYNC ofSync; bsPlayerSync.Read(bytePacketID); #ifdef _BIG_ENDIAN_SYSTEM bsPlayerSync.Read(ofSync.leftRightKeysOnfoot); bsPlayerSync.Read(ofSync.updownKeysOnfoot); bsPlayerSync.Read(ofSync.keysOnfoot); bsPlayerSync.Read(ofSync.position.X), bsPlayerSync.Read(ofSync.position.Y), bsPlayerSync.Read(ofSync.position.Z); bsPlayerSync.Read(ofSync.quaterRotation.W), bsPlayerSync.Read(ofSync.quaterRotation.X), bsPlayerSync.Read(ofSync.quaterRotation.Y), bsPlayerSync.Read(ofSync.quaterRotation.Z); bsPlayerSync.Read(ofSync.health); bsPlayerSync.Read(ofSync.armour); bsPlayerSync.Read(ofSync.weapon); bsPlayerSync.Read(ofSync.specialAction); bsPlayerSync.Read(ofSync.velocity.X), bsPlayerSync.Read(ofSync.velocity.Y), bsPlayerSync.Read(ofSync.velocity.Z); bsPlayerSync.Read(ofSync.surfingOffsets.X), bsPlayerSync.Read(ofSync.surfingOffsets.Y), bsPlayerSync.Read(ofSync.surfingOffsets.Z); bsPlayerSync.Read(ofSync.surfingVehicleID); bsPlayerSync.Read(ofSync.animationIndex); #else bsPlayerSync.Read((char*)&ofSync, sizeof(ON_FOOT_SYNC)); #endif if(pPlayer) { if( ofSync.velocity.X < 100.0f && ofSync.velocity.X > -100.0f && ofSync.velocity.Y < 100.0f && ofSync.velocity.Y > -100.0f && ofSync.velocity.Z < 100.0f && ofSync.velocity.Z > -100.0f ) { pPlayer->ProcessOnFootSyncData(&ofSync); if( this->gamemodeManager && this->filterscriptsManager ) { if( this->gamemodeManager->OnPlayerUpdate( ( cell )p->playerIndex ) == 0 || this->filterscriptsManager->OnPlayerUpdate( ( cell )p->playerIndex ) == 0 ) pPlayer->setSyncingType( SYNCING_TYPE_NONE ); } } } }
void CNetGame::Packet_AimSync(Packet *p) { CPlayer * pPlayer = GetPlayerPool()->GetAt((BYTE)p->playerIndex); RakNet::BitStream bsPlayerSync(p->data, p->length, false); if(GetGameState() != GAMESTATE_RUNNING) return; BYTE bytePacketID=0; AIM_SYNC_DATA aimSync; bsPlayerSync.Read(bytePacketID); bsPlayerSync.Read((PCHAR)&aimSync,sizeof(AIM_SYNC_DATA)); if(pPlayer) { pPlayer->StoreAimSyncData(&aimSync); } }
void Packet_PlayerSync(Packet *p) { //Log("Packet_PlayerSync: %d %d", pRakServer->GetIndexFromPlayerID(p->playerId), p->length); RakNet::BitStream bsPlayerSync((unsigned char *)p->data, p->length, false); PLAYERID playerId = pRakServer->GetIndexFromPlayerID(p->playerId); // clear last data memset(&playerInfo[playerId].onfootData, 0, sizeof(ONFOOT_SYNC_DATA)); bsPlayerSync.IgnoreBits(8); bsPlayerSync.Read((PCHAR)&playerInfo[playerId].onfootData, sizeof(ONFOOT_SYNC_DATA)); // BROADCAST DATA RakNet::BitStream bsOnFootBC; bsOnFootBC.Write((BYTE)ID_PLAYER_SYNC); bsOnFootBC.Write((PLAYERID)playerId); if(playerInfo[playerId].onfootData.lrAnalog) { bsOnFootBC.Write(true); bsOnFootBC.Write(playerInfo[playerId].onfootData.lrAnalog); } else bsOnFootBC.Write(false); if(playerInfo[playerId].onfootData.udAnalog) { bsOnFootBC.Write(true); bsOnFootBC.Write(playerInfo[playerId].onfootData.udAnalog); } else bsOnFootBC.Write(false); bsOnFootBC.Write(playerInfo[playerId].onfootData.wKeys); bsOnFootBC.Write(playerInfo[playerId].onfootData.vecPos[0]); bsOnFootBC.Write(playerInfo[playerId].onfootData.vecPos[1]); bsOnFootBC.Write(playerInfo[playerId].onfootData.vecPos[2]); bsOnFootBC.WriteNormQuat( playerInfo[playerId].onfootData.fQuaternion[0], playerInfo[playerId].onfootData.fQuaternion[1], playerInfo[playerId].onfootData.fQuaternion[2], playerInfo[playerId].onfootData.fQuaternion[3]); BYTE byteSyncHealthArmour=0; BYTE byteHealth = playerInfo[playerId].onfootData.byteHealth; BYTE byteArmour = playerInfo[playerId].onfootData.byteArmour; if( byteHealth > 0 && byteHealth < 100 ) { byteSyncHealthArmour = ((BYTE)(byteHealth / 7)) << 4; } else if(byteHealth >= 100) { byteSyncHealthArmour = 0xF << 4; } if( byteArmour > 0 && byteArmour < 100 ) { byteSyncHealthArmour |= (BYTE)(byteArmour / 7); } else if(byteArmour >= 100) { byteSyncHealthArmour |= 0xF; } bsOnFootBC.Write(byteSyncHealthArmour); bsOnFootBC.Write(playerInfo[playerId].onfootData.byteCurrentWeapon); bsOnFootBC.Write(playerInfo[playerId].onfootData.byteSpecialAction); bsOnFootBC.WriteVector(playerInfo[playerId].onfootData.vecMoveSpeed[0], playerInfo[playerId].onfootData.vecMoveSpeed[1], playerInfo[playerId].onfootData.vecMoveSpeed[2]); if(playerInfo[playerId].onfootData.wSurfInfo) { bsOnFootBC.Write(true); bsOnFootBC.Write(playerInfo[playerId].onfootData.wSurfInfo); bsOnFootBC.Write(playerInfo[playerId].onfootData.vecSurfOffsets[0]); bsOnFootBC.Write(playerInfo[playerId].onfootData.vecSurfOffsets[1]); bsOnFootBC.Write(playerInfo[playerId].onfootData.vecSurfOffsets[2]); } else bsOnFootBC.Write(false); if(playerInfo[playerId].onfootData.iCurrentAnimationID) { bsOnFootBC.Write(true); bsOnFootBC.Write(playerInfo[playerId].onfootData.iCurrentAnimationID); } else bsOnFootBC.Write(false); playerPool[playerId].currentVehicleID = 0; UpdatePosition(playerId, playerInfo[playerId].onfootData.vecPos[0], playerInfo[playerId].onfootData.vecPos[1], playerInfo[playerId].onfootData.vecPos[2]); pRakServer->Send(&bsOnFootBC, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0, p->playerId, TRUE); }