Ejemplo n.º 1
0
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 );
			}

		}		
	}
}
Ejemplo n.º 2
0
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);
	}
}
Ejemplo n.º 3
0
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);
}