Beispiel #1
0
void CNetSends::UpdateScoreAndPing( unsigned char uc )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;

		unsigned char uc = 0, uc1 = 0;
		while ( ( uc < MAX_PLAYERS ) && ( uc1 < CPlayerPoolManager::Count() ) )
		{
			CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
			if ( pPlayer )
			{
				bsSend.Write( uc );
				bsSend.Write( (int)pPlayer->GetScore() );
				bsSend.Write( (int)pPlayer->GetPing() );

				if ( pPlayer->IsAdmin() )
				{
					bsSend.Write( (unsigned long)pPlayer->GetPlayerID().binaryAddress );
				}
				else bsSend.Write((unsigned long)0UL);

				uc1++;
			}
			uc++;
		}

		NetInterface->RPC( "UpdateScPing", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
	}
}
Beispiel #2
0
void CNetSends::RequestAmmu( unsigned char uc, unsigned char ucAmmu )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		CAmmuPool* pAmmu = CAmmuPoolManager::Find( ucAmmu );
		if ( pAmmu )
		{
			unsigned char ucThing = 1;
			RakNet::BitStream bsSend;

			bsSend.Write( ucThing );
			bsSend.Write( ucAmmu );
			bsSend.Write( pAmmu->GetX() );
			bsSend.Write( pAmmu->GetY() );
			bsSend.Write( pAmmu->GetZ() );
			bsSend.Write( pAmmu->GetCameraAngleX() );
			bsSend.Write( pAmmu->GetCameraAngleY() );
			bsSend.Write( pAmmu->GetCameraAngleZ() );
			bsSend.Write( pAmmu->GetCameraX() );
			bsSend.Write( pAmmu->GetCameraY() );
			bsSend.Write( pAmmu->GetCameraZ() );

			NetInterface->RPC( "RequestAmmu", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
		}
	}
}
Beispiel #3
0
void CNetSends::RequestWep( unsigned char uc, unsigned char ucAmmu, unsigned int iWeapon )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		CAmmuPool* pAmmu = CAmmuPoolManager::Find( ucAmmu );
		if ( pAmmu )
		{
			unsigned char ucEnabled = 0;
			if ( pAmmu->GetWeaponEnabled( iWeapon ) ) ucEnabled = 1;

			RakNet::BitStream bsSend;

			bsSend.Write( ucEnabled );
			bsSend.Write( iWeapon );
			bsSend.Write( ucAmmu );

			bsSend.Write( pAmmu->GetWeaponX() );
			bsSend.Write( pAmmu->GetWeaponY() );
			bsSend.Write( pAmmu->GetWeaponZ() );
			bsSend.Write( pAmmu->GetWeapon( iWeapon ) );
			bsSend.Write( pAmmu->GetWeaponCost( iWeapon ) );

			NetInterface->RPC( "RequestWep", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
		}
	}
}
Beispiel #4
0
void CNetSends::SpawnVehicleForPlayer( unsigned char uc, unsigned char ucVehicle )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		CVehiclePool* pVehicle = CVehiclePoolManager::Find( ucVehicle );
		if ( pVehicle )
		{
			RakNet::BitStream bsSend;

			bsSend.Write( ucVehicle );
			bsSend.Write( pVehicle->GetModel() );
			bsSend.Write( pVehicle->GetX() );
			bsSend.Write( pVehicle->GetY() );
			bsSend.Write( pVehicle->GetZ() );
			bsSend.Write( pVehicle->GetRotation() );
			bsSend.Write( (int)pVehicle->GetColour1() );
			bsSend.Write( (int)pVehicle->GetColour2() );
			bsSend.Write( pVehicle->GetHealth() );

			// Spawn stuff
			bsSend.Write( pVehicle->GetSpawnX() );
			bsSend.Write( pVehicle->GetSpawnY() );
			bsSend.Write( pVehicle->GetSpawnZ() );
			bsSend.Write( pVehicle->GetSpawnRotation() );

			NetInterface->RPC( "VehicleSpawn", &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
		}
	}
}
Beispiel #5
0
void CNetSends::SpawnForPlayer( unsigned char uc, unsigned char ucPlayer )
{
	CPlayerPool* pPlayerToSend = CPlayerPoolManager::Find( uc );
	if ( pPlayerToSend )
	{
		if ( !pPlayerToSend->GetSyncBlocked() )
		{
			CPlayerPool* pPlayer = CPlayerPoolManager::Find( ucPlayer );
			if ( pPlayer )
			{
				RakNet::BitStream bsSend;
				CSpawnPool* pSpawn = CSpawnPoolManager::Find( pPlayer->GetClassID() );
				if ( pSpawn )
				{
					bsSend.Write( ucPlayer );
					bsSend.Write( pSpawn->GetTeam() );
					bsSend.Write( pSpawn->GetSkin() );
					bsSend.Write( pSpawn->GetX() );
					bsSend.Write( pSpawn->GetY() );
					bsSend.Write( pSpawn->GetZ() );
					bsSend.Write( pSpawn->GetAngle() );
					bsSend.Write( pSpawn->GetWeapon( 0 ) );
					bsSend.Write( pSpawn->GetWeaponAmmo( 0 ) );
					bsSend.Write( pSpawn->GetWeapon( 1 ) );
					bsSend.Write( pSpawn->GetWeaponAmmo( 1 ) );
					bsSend.Write( pSpawn->GetWeapon( 2 ) );
					bsSend.Write( pSpawn->GetWeaponAmmo( 2 ) );

					NetInterface->RPC( "Spawn", &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, pPlayerToSend->GetPlayerID(), FALSE, FALSE );
				}
			}
		}
	}
}
Beispiel #6
0
void CNetSends::PM( unsigned char ucPlayer, unsigned char ucPlayerTo, char* szText )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( ucPlayer );
	if ( pPlayer )
	{
		CPlayerPool* pPlayerTo = CPlayerPoolManager::Find( ucPlayerTo );
		if ( pPlayerTo )
		{
			if ( !pPlayerTo->GetIgnored( ucPlayer ) )
			{
				char szBlah[ MAX_TEXT_LEN ] = { 0 };
				strcpy( szBlah, "PM" );
				strcat( szBlah, szText );

				BYTE byteTextLen = strlen( szBlah );

				RakNet::BitStream bsSend;
				bsSend.Write( ucPlayer );
				bsSend.Write( ucPlayerTo );
				bsSend.Write( byteTextLen );
				bsSend.Write( szBlah, byteTextLen );

				NetInterface->RPC( "MsgChat", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayerTo->GetPlayerID(), FALSE, FALSE );
			}
		}
	}
}
Beispiel #7
0
void CNetSends::SpecOn( unsigned char uc )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;

		NetInterface->RPC( "SpecOn", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
	}
}
Beispiel #8
0
void CNetSends::ExitVehicle( unsigned char uc, unsigned char ucVehicle )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		if ( !pPlayer->GetSyncBlocked() )
		{
			RakNet::BitStream bsSend;
			bsSend.Write( uc );
			bsSend.Write( ucVehicle );

			NetInterface->RPC( "ExitVehicle", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), TRUE, FALSE );
		}
	}
}
Beispiel #9
0
void CNetSends::PassengerSync( unsigned char uc, unsigned char ucVehicle, unsigned int uiPassengerSeat )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;

		//bsSend.Write( (unsigned char)ID_PASSENGER_SYNC );
		bsSend.Write( (unsigned char)uc );
		bsSend.Write( (unsigned char)ucVehicle );
		bsSend.Write( uiPassengerSeat );

		NetInterface->RPC( "Passenger", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), TRUE, FALSE );
	}
}
Beispiel #10
0
void CNetSends::DeletePickupForPlayer( unsigned char uc, unsigned int ui )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		CPickupPool* pPickup = CPickupPoolManager::Find( ui );
		if ( pPickup )
		{
			RakNet::BitStream bsSend;

			bsSend.Write( ui );

			NetInterface->RPC( "PickedUp", &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
		}
	}
}
Beispiel #11
0
void CNetSends::SetMarkerForPlayer( unsigned char uc, unsigned char uc2, float fX, float fY, float fZ )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;
		char szText[ 256 ] = { NULL };
		BYTE byteTextLen = 0;

		sprintf( szText, "16 %i %f %f %f", uc2, fX, fY, fZ);

		byteTextLen = strlen( szText );

		bsSend.Write( byteTextLen );
		bsSend.Write( szText, byteTextLen );

		NetInterface->RPC( "Set", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
	}
}
Beispiel #12
0
void CNetSends::SetPlayerLocalMarker( unsigned char uc1, unsigned char uc2, unsigned char uc3 )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc1 );
	CPlayerPool* pPlayerTo = CPlayerPoolManager::Find( uc3 );

	if ( ( pPlayer ) && ( pPlayerTo ) )
	{
		RakNet::BitStream bsSend;
		char szText[ 256 ] = { NULL };
		BYTE byteTextLen = 0;

		sprintf(szText, "11 %i %i", uc1, uc2);

		byteTextLen = strlen( szText );

		bsSend.Write( byteTextLen );
		bsSend.Write( szText, byteTextLen );

		NetInterface->RPC( "Set", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayerTo->GetPlayerID(), FALSE, FALSE );
	}
}
Beispiel #13
0
void CNetSends::AdminMsg( unsigned char uc, char* sz )
{
	CPlayerPool* pPlayerTo = CPlayerPoolManager::Find( uc );
	if ( pPlayerTo )
	{
		char szBlah[ MAX_TEXT_LEN ] = { 0 };
		strcpy( szBlah, "PM" );
		strcat( szBlah, sz );

		unsigned char ucAdmin = 200;
		unsigned char byteTextLen = strlen( szBlah );

		RakNet::BitStream bsSend;
		bsSend.Write( ucAdmin );
		bsSend.Write( uc );
		bsSend.Write( byteTextLen );
		bsSend.Write( szBlah, byteTextLen );

		NetInterface->RPC( "MsgChat", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayerTo->GetPlayerID(), FALSE, FALSE );
	}
}
Beispiel #14
0
void CNetSends::AdminChat( char* szText )
{
	BYTE byteTextLen = strlen( szText );

	RakNet::BitStream bsSend;
	bsSend.Write( byteTextLen );
	bsSend.Write( szText, byteTextLen );

	unsigned char uc = 0, uc1 = 0;
	while ( ( uc < MAX_PLAYERS ) && ( uc1 < CPlayerPoolManager::Count() ) )
	{
		CPlayerPool* pSendTo = CPlayerPoolManager::Find( uc );
		if ( pSendTo )
		{
			NetInterface->RPC( "AdminChat", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pSendTo->GetPlayerID(), FALSE, FALSE );

			uc1++;
		}
		uc++;
	}
}
Beispiel #15
0
void CNetSends::SpawnPickupForPlayer( unsigned char uc, unsigned int uiPickup, unsigned char ucOwner )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		CPickupPool* pPickup = CPickupPoolManager::Find( uiPickup );
		if ( pPickup )
		{
			RakNet::BitStream bsSend;

			bsSend.Write( ucOwner );
			bsSend.Write( uiPickup );
			bsSend.Write( pPickup->GetModel() );
			bsSend.Write( pPickup->GetX() );
			bsSend.Write( pPickup->GetY() );
			bsSend.Write( pPickup->GetZ() );
			if ( pPickup->GetSpawned() ) bsSend.Write( (BYTE)1 );
			else bsSend.Write( (BYTE)0 );

			NetInterface->RPC( "PickupSpawn", &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 1, pPlayer->GetPlayerID(), FALSE, FALSE );
		}
	}
}
Beispiel #16
0
void CNetSends::Chat( unsigned char ucPlayer, char* szText )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( ucPlayer );
	if ( pPlayer )
	{
		if ( !pPlayer->GetMuted() )
		{
			BYTE byteTextLen = strlen( szText );

			RakNet::BitStream bsSend;
			bsSend.Write( ucPlayer );
			bsSend.Write( byteTextLen );
			bsSend.Write( szText, byteTextLen );

			//NetInterface->RPC( "Chat", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), TRUE, FALSE );
			unsigned char uc = 0, uc1 = 0;
			while ( ( uc < MAX_PLAYERS ) && ( uc1 < CPlayerPoolManager::Count() ) )
			{
				CPlayerPool* pSendTo = CPlayerPoolManager::Find( uc );
				if ( pSendTo )
				{
					if ( pSendTo != pPlayer )
					{
						// If the player hasn't ignored the player talking, send the message
						if ( !pSendTo->GetIgnored( ucPlayer ) ) NetInterface->RPC( "Chat", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pSendTo->GetPlayerID(), FALSE, FALSE );
					}
					uc1++;
				}
				uc++;
			}
		}
	}
}
Beispiel #17
0
void CNetSends::ChatToPlayer( unsigned char ucPlayerTo, unsigned char ucPlayer, char* szText )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( ucPlayer );
	CPlayerPool* pPlayerTo = CPlayerPoolManager::Find( ucPlayerTo );

	if ( ( pPlayer ) && ( pPlayerTo ) )
	{
		BYTE byteTextLen = strlen( szText );

		RakNet::BitStream bsSend;
		bsSend.Write( ucPlayer );
		bsSend.Write( byteTextLen );
		bsSend.Write( szText, byteTextLen );

		unsigned char uc = 0, uc1 = 0;

		if ( ucPlayerTo != ucPlayer )
		{
			// If the player hasn't ignored the player talking, send the message
			if ( !pPlayer->GetIgnored( ucPlayerTo ) ) NetInterface->RPC( "Chat", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayerTo->GetPlayerID(), FALSE, FALSE );
		}
	}
}
Beispiel #18
0
void CNetSends::InitGame( unsigned char uc )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		// Send this back as the 'InitGame' RPC
		RakNet::BitStream bsInitGame;

		VECTOR vInitPlayerPos = CConfigLoader::GetInitPlayerPos();
		VECTOR vInitCameraPos = CConfigLoader::GetInitCameraPos();
		VECTOR vInitCameraLook = CConfigLoader::GetInitCameraLook();

		bsInitGame.Write( (float)vInitPlayerPos.X );
		bsInitGame.Write( (float)vInitPlayerPos.Y );
		bsInitGame.Write( (float)vInitPlayerPos.Z );
		bsInitGame.Write( (float)vInitCameraPos.X );
		bsInitGame.Write( (float)vInitCameraPos.Y );
		bsInitGame.Write( (float)vInitCameraPos.Z );
		bsInitGame.Write( (float)vInitCameraLook.X );
		bsInitGame.Write( (float)vInitCameraLook.Y );
		bsInitGame.Write( (float)vInitCameraLook.Z );
		bsInitGame.Write( (float)CConfigLoader::GetWorldBounds( 0 ) );
		bsInitGame.Write( (float)CConfigLoader::GetWorldBounds( 1 ) );
		bsInitGame.Write( (float)CConfigLoader::GetWorldBounds( 2 ) );
		bsInitGame.Write( (float)CConfigLoader::GetWorldBounds( 3 ) );
		bsInitGame.Write( (int)CSpawnPoolManager::Count() ); // Spawns Available

		if ( CConfigLoader::GetFriendlyFire() ) bsInitGame.Write( (BYTE)1 );
		else bsInitGame.Write((BYTE)0);

		bsInitGame.Write( (unsigned char)CConfigLoader::GetShowOnRadar() );

		bsInitGame.Write( uc );

		bsInitGame.Write( (unsigned char)CAmmuPoolManager::Count() );
		CNet::GetInterface()->RPC( "InitGame", &bsInitGame, HIGH_PRIORITY, RELIABLE_ORDERED, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
	}
}
Beispiel #19
0
void CNetSends::PlayerJoin( unsigned char uc )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;
		bsSend.Write( uc );
		bsSend.Write( (int)strlen( pPlayer->GetNick() ) );
		bsSend.Write( pPlayer->GetNick(), strlen( pPlayer->GetNick() ) );
		CNet::GetInterface()->RPC( "ServerJoin", &bsSend, HIGH_PRIORITY, RELIABLE_ORDERED, 0, pPlayer->GetPlayerID(), TRUE, FALSE );
	}
}
Beispiel #20
0
void CNetSends::Death( unsigned char uc, unsigned char ucKiller, unsigned char ucReason )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;

		bsSend.Write( uc );
		bsSend.Write( ucReason );
		bsSend.Write( ucKiller );

		if ( ( ucKiller != INVALID_PLAYER_ID ) && ( ucKiller < MAX_PLAYERS ) )
		{
			CPlayerPool* pKiller = CPlayerPoolManager::Find( ucKiller );
			if ( pKiller )
			{
				if ( ( pKiller->GetTeam() == INVALID_TEAM_ID ) || ( ( pKiller->GetTeam() != INVALID_TEAM_ID ) && ( pKiller->GetTeam() != pPlayer->GetTeam() ) ) )
				{
					if (CConfigLoader::GetDeathmatchScoreB()) pKiller->IncScore();

					bsSend.Write( (unsigned char)VALID_KILL );

					CScripting::PushFunction( "onPlayerKill" );
					CScripting::PushPlayerPointer( pKiller );
					CScripting::PushPlayerPointer( pPlayer );
					CScripting::PushInteger( ucReason );
					CScripting::CallFunction();

					CPlayerSendPackets::Kill( ucKiller, pKiller->GetTeam(), uc, pPlayer->GetTeam(), ucReason );
				}
				else
				{
					if (CConfigLoader::GetDeathmatchScoreB()) pKiller->DecScore();

					bsSend.Write( (unsigned char)TEAM_KILL );

					CScripting::PushFunction( "onPlayerTeamKill" );
					CScripting::PushPlayerPointer( pKiller );
					CScripting::PushPlayerPointer( pPlayer );
					CScripting::PushInteger( ucReason );
					CScripting::CallFunction();

					CPlayerSendPackets::TeamKill( ucKiller, pKiller->GetTeam(), uc, pPlayer->GetTeam(), ucReason );
				}
			}
			else
			{
				bsSend.Write( (unsigned char)SELF_KILL );

				CScripting::PushFunction( "onPlayerDeath" );
				CScripting::PushPlayerPointer( pPlayer );
				CScripting::PushInteger( ucReason );
				CScripting::CallFunction();

				CPlayerSendPackets::Death( uc, ucReason );
			}
		}
		else
		{
			bsSend.Write( (unsigned char)SELF_KILL );

			CScripting::PushFunction( "onPlayerDeath" );
			CScripting::PushPlayerPointer( pPlayer );
			CScripting::PushInteger( ucReason );
			CScripting::CallFunction();

			CPlayerSendPackets::Death( uc, ucReason );
		}

		// Broadcast it
		NetInterface->RPC( "Death", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), TRUE, FALSE );

		// Now let the player who died know aswell.
		NetInterface->RPC( "OwnDeath", &bsSend, HIGH_PRIORITY, RELIABLE, 0, pPlayer->GetPlayerID(), FALSE, FALSE );
	}
}