Ejemplo n.º 1
0
void CNetGame::Packet_VehicleSync(Packet* p)
{
	CPlayer* pPlayer = this->playerPool->GetPlayer((_PlayerID)p->playerIndex);
	RakNet::BitStream bsVehicleSync((char*)p->data, p->length, false);

	if(this->gameState != 1) return;

	uint8_t			bytePacketID=0;
	IN_VEHICLE_SYNC icSync;
	
	bsVehicleSync.Read(bytePacketID);
#ifdef _BIG_ENDIAN_SYSTEM
	bsVehicleSync.Read(icSync.vehicleID);
	bsVehicleSync.Read(icSync.leftRightKeysOnVehicle);
	bsVehicleSync.Read(icSync.updownKeysOnVehicle);
	bsVehicleSync.Read(icSync.keysOnVehicle);
	bsVehicleSync.Read(icSync.rotation.W), bsVehicleSync.Read(icSync.rotation.X), bsVehicleSync.Read(icSync.rotation.Y), bsVehicleSync.Read(icSync.rotation.Z);
	bsVehicleSync.Read(icSync.position.X), bsVehicleSync.Read(icSync.position.Y), bsVehicleSync.Read(icSync.position.Z);
	bsVehicleSync.Read(icSync.velocity.X), bsVehicleSync.Read(icSync.velocity.Y), bsVehicleSync.Read(icSync.velocity.Z);
	bsVehicleSync.Read(icSync.health);
	bsVehicleSync.Read(icSync.playerHealth);
	bsVehicleSync.Read(icSync.playerArmor);
	bsVehicleSync.Read(icSync.playerWeapon);
	bsVehicleSync.Read(icSync.sirenType);
	bsVehicleSync.Read(icSync.gearState);
	bsVehicleSync.Read(icSync.trailerID);
	bsVehicleSync.Read(icSync.hydraReactorAngle[0]), bsVehicleSync.Read(icSync.hydraReactorAngle[1]);
	icSync.trainSpeed = ((icSync.hydraReactorAngle[0] << 16) | ((icSync.hydraReactorAngle[1]) & 0xFFFF));
#else
	bsVehicleSync.Read((char*)&icSync,sizeof(IN_VEHICLE_SYNC));
#endif

	if(pPlayer)	
	{
		if(icSync.vehicleID == INVALID_VEHICLE_ID) 
		{
			this->KickPlayer((_PlayerID)p->playerIndex);
			return;
		}

		if( icSync.velocity.X < 100.0f && icSync.velocity.X > -100.0f &&
			icSync.velocity.Y < 100.0f && icSync.velocity.Y > -100.0f &&
			icSync.velocity.Z < 100.0f && icSync.velocity.Z > -100.0f )
		{
			pPlayer->ProcessOnVehicleSyncData(&icSync);
			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_VehicleSync(Packet *p)
{
	CPlayer * pPlayer = GetPlayerPool()->GetAt((BYTE)p->playerIndex);
	RakNet::BitStream bsVehicleSync(p->data, p->length, false);

	if(GetGameState() != GAMESTATE_RUNNING) return;

	BYTE		bytePacketID=0;
	INCAR_SYNC_DATA icSync;
	
	bsVehicleSync.Read(bytePacketID);
	bsVehicleSync.Read((PCHAR)&icSync,sizeof(INCAR_SYNC_DATA));

	if(pPlayer)	{
		if(icSync.VehicleID == 0xFFFF) {
			// Syncing a manually added/bad vehicle
			KickPlayer((BYTE)p->playerIndex);
			return;
		}
	    pPlayer->StoreInCarFullSyncData(&icSync);
	}
}
Ejemplo n.º 3
0
void Packet_VehicleSync(Packet *p)
{
	//Log("Packet_VehicleSync: %d  %d", pRakServer->GetIndexFromPlayerID(p->playerId), p->length);

	RakNet::BitStream bsVehicleSync((unsigned char *)p->data, p->length, false);
	PLAYERID playerId = pRakServer->GetIndexFromPlayerID(p->playerId);

	// clear last data
	memset(&playerInfo[playerId].incarData, 0, sizeof(INCAR_SYNC_DATA));

	bsVehicleSync.IgnoreBits(8);
	bsVehicleSync.Read((PCHAR)&playerInfo[playerId].incarData, sizeof(INCAR_SYNC_DATA));

	playerPool[playerId].currentVehicleID = playerInfo[playerId].incarData.VehicleID;

	// BROADCAST DATA
	RakNet::BitStream bsInVehicleBC;
	bsInVehicleBC.Write((BYTE)ID_VEHICLE_SYNC);
	bsInVehicleBC.Write(playerId);
	bsInVehicleBC.Write(playerInfo[playerId].incarData.VehicleID);

	bsInVehicleBC.Write(playerInfo[playerId].incarData.lrAnalog);
	bsInVehicleBC.Write(playerInfo[playerId].incarData.udAnalog);
	bsInVehicleBC.Write(playerInfo[playerId].incarData.wKeys);

	bsInVehicleBC.WriteNormQuat(
		playerInfo[playerId].incarData.fQuaternion[0],
		playerInfo[playerId].incarData.fQuaternion[1],
		playerInfo[playerId].incarData.fQuaternion[2],
		playerInfo[playerId].incarData.fQuaternion[3]);

	bsInVehicleBC.Write(playerInfo[playerId].incarData.vecPos[0]);
	bsInVehicleBC.Write(playerInfo[playerId].incarData.vecPos[1]);
	bsInVehicleBC.Write(playerInfo[playerId].incarData.vecPos[2]);

	bsInVehicleBC.WriteVector(playerInfo[playerId].incarData.vecMoveSpeed[0],
		playerInfo[playerId].incarData.vecMoveSpeed[1], playerInfo[playerId].incarData.vecMoveSpeed[2]);

	WORD wTempVehicleHealh = (WORD)playerInfo[playerId].incarData.fCarHealth;
	bsInVehicleBC.Write(wTempVehicleHealh);
	BYTE byteSyncHealthArmour=0;
	BYTE byteHealth = playerInfo[playerId].incarData.bytePlayerHealth;
	BYTE byteArmour = playerInfo[playerId].incarData.bytePlayerArmour;
	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;
	}
	bsInVehicleBC.Write(byteSyncHealthArmour);

	bsInVehicleBC.Write(playerInfo[playerId].incarData.byteCurrentWeapon);

	if(playerInfo[playerId].incarData.byteSirenOn)
		bsInVehicleBC.Write(true);
	else
		bsInVehicleBC.Write(false);

	if(playerInfo[playerId].incarData.byteLandingGearState)
		bsInVehicleBC.Write(true);
	else
		bsInVehicleBC.Write(false);

	// HYDRA THRUST ANGLE AND TRAILER ID
	bsInVehicleBC.Write(false);
	bsInVehicleBC.Write(false);

	DWORD dwTrailerID_or_ThrustAngle = 0;
	bsInVehicleBC.Write(dwTrailerID_or_ThrustAngle);

	// TRAIN SPECIAL
	bsInVehicleBC.Write(false);
	/*WORD wSpeed;
	bsSync.ReadCompressed(bTrain);
	if(bTrain)
	{
		bsSync.Read(wSpeed);
		playerInfo[playerId].incarData.fTrainSpeed = (float)wSpeed;
	}*/
	
	UpdatePosition(playerId, playerInfo[playerId].incarData.vecPos[0], playerInfo[playerId].incarData.vecPos[1], playerInfo[playerId].incarData.vecPos[2]);

	pRakServer->Send(&bsInVehicleBC, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0, p->playerId, TRUE);
}