Beispiel #1
0
void UpdateScoreAndPing(PCHAR Data, int iBitLength, PlayerID sender)
{
	RakNet::BitStream bsData(Data,iBitLength/8,FALSE);
	RakNet::BitStream bsSend;
	BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender);
	if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return;

	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();

	int write_counter=0;
	PlayerID pID;

	BYTE x=0;
	while(x!=MAX_PLAYERS) {
		if(pPlayerPool->GetSlotState(x) == TRUE) {

			pID = pRak->GetPlayerIDFromIndex(x);

			bsSend.Write((BYTE)x);
			bsSend.Write((int)pPlayerPool->GetScore(x));
			bsSend.Write((int)pRak->GetLastPing(pRak->GetPlayerIDFromIndex(x)));
			
			if(pPlayerPool->IsAdmin(bytePlayerID)) {
				bsSend.Write(pID.binaryAddress);
			} else {
				bsSend.Write((unsigned long)0UL);
			}

			write_counter++;
		}
		x++;
	}
		
	pRak->RPC("UpdateScPing",&bsSend,HIGH_PRIORITY,RELIABLE,0,sender,FALSE,FALSE);
}
Beispiel #2
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 #3
0
void cmdGetIP(PCHAR szCmd)
{
	if(!strlen(szCmd)) {
	    pChatWindow->AddDebugMessage("Usage: /getip [player_id]");
		return;
	}

	BYTE bytePlayerID;
	sscanf(szCmd,"%u",&bytePlayerID);
	
	if(pNetGame) {
		CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
		if(pPlayerPool->GetSlotState(bytePlayerID)) {

			char ret[30];
			DWORD ip = pPlayerPool->GetIPAddress(bytePlayerID);
			IP2String(ip,ret);
			pChatWindow->AddDebugMessage("%s is: %s",
				pPlayerPool->GetPlayerName(bytePlayerID),ret);

		} else {
			pChatWindow->AddDebugMessage("That player doesn't appear to be active.");
		}
	}
}
Beispiel #4
0
void CNetSends::BanPlayer( unsigned char uc )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;
		bsSend.Write( uc );

		NetInterface->RPC( "Banned", &bsSend, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_PLAYER_ID, TRUE, FALSE );

		//NetInterface->Kick( pPlayer->GetPlayerID() ); 

		CConsole::PrintC( "CONNECTION", COLOUR_RED, "Banned [%s] | IP [%s] | Index [%i]", pPlayer->GetNick(), pPlayer->GetIP(), uc );

		PlayerPart( uc, PARTREASON_KICKED );
		CPlayerSendPackets::Part( uc, PARTREASON_BANNED );

		CScripting::PushFunction( "onPlayerPart" );
		CScripting::PushPlayerPointer( pPlayer );
		CScripting::PushInteger( PARTREASON_BANNED );
		CScripting::CallFunction();

		CBanList::AddToBanList( pPlayer->GetIP() );

		CPlayerPoolManager::Remove( pPlayer );
	}
}
Beispiel #5
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 #6
0
BOOL _stdcall IsFriendlyFire(PED_TYPE *pPlayer,DWORD *pdwEnt, int iWeapon, float fUnk, int PedPiece, BYTE byteUnk)
{
	CPlayerPool *pPlayerPool;
	CRemotePlayer *pRemotePlayer;
	CLocalPlayer *pLocalPlayer;
	BYTE byteRemotePlayerID;
	BYTE byteLocalPlayerTeam;

	if(pPlayer == GamePool_FindPlayerPed()) {
		if(pNetGame && pNetGame->m_byteFriendlyFire) {
			
			pPlayerPool = pNetGame->GetPlayerPool();
			pLocalPlayer = pPlayerPool->GetLocalPlayer();
			byteLocalPlayerTeam = pLocalPlayer->GetTeam();

			if(pLocalPlayer->IsWasted() || (byteLocalPlayerTeam == NO_TEAM)) return FALSE;

			byteRemotePlayerID = pPlayerPool->FindRemotePlayerIDFromGtaPtr((PED_TYPE *)pdwEnt);

			if(byteRemotePlayerID != INVALID_PLAYER_ID) {
				pRemotePlayer = pPlayerPool->GetAt(byteRemotePlayerID);
				if(pRemotePlayer->GetTeam() == byteLocalPlayerTeam) {
					return TRUE;
				} else {
					return FALSE;
				}
			}

			// didn't find pdwEnt in the player pool.
			// this is where we could check for a vehicle.
		}
	}

	return FALSE;	
}
Beispiel #7
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 #8
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 #9
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 #10
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 #11
0
void CRemotePlayer::Say(unsigned char *szText)
{
	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
	if (pPlayerPool) {
		char * szPlayerName = pPlayerPool->GetPlayerName(m_PlayerID);
		pChatWindow->AddChatMessage(szPlayerName,GetPlayerColorAsARGB(),(char*)szText);
	}
}
Beispiel #12
0
void CRemotePlayer::TeamPrivmsg(char *szText)
{
	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
	if (pPlayerPool) {
		CHAR szStr[256];
		sprintf(szStr, "Team PM from %s(%d): %s", pPlayerPool->GetPlayerName(m_PlayerID), m_PlayerID, szText);
		pChatWindow->AddClientMessage(D3DCOLOR_ARGB(255,220,24,26), szStr);
	}
}
Beispiel #13
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 #14
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 #15
0
void CVehicle::Destroy()
{
    CPlayerPool* pPlayerPool = pNetGame->GetPlayerPool();
    int x=0;
    while(x<=MAX_PLAYERS) {
        CPlayer* p = pPlayerPool->GetAt((BYTE)x);
        if(p->IsActive()) {
            this->DespawnForPlayer((BYTE)x);
        }
        x++;
    }
    m_bDestroyed = true;
}
Beispiel #16
0
bool CPlayerPoolManager::Remove( char* sz )
{
	CPlayerPool* p = Find( sz );
	if ( p )
	{
		m_PlayerPool[ p->GetID() ] = NULL;
		delete p;

		m_ucPlayers--;

		return true;
	}
	return false;
}
Beispiel #17
0
void KickPlayer(PCHAR Data, int iBitLength, PlayerID sender)
{
	RakNet::BitStream bsData(Data,iBitLength/8,FALSE);
	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
	BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender);
	if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return;

	BYTE byteKickPlayer;

	if(pPlayerPool->IsAdmin(bytePlayerID)) {
		bsData.Read(byteKickPlayer);	
		pNetGame->KickPlayer(byteKickPlayer);
	}
}
Beispiel #18
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 #19
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 #20
0
void CNetSends::DoAnim( unsigned char uc, unsigned char ucAnim )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		if ( !pPlayer->GetSyncBlocked() )
		{
			RakNet::BitStream bsSend;

			bsSend.Write( uc );
			bsSend.Write( ucAnim );

			NetInterface->RPC( "DoAnim", &bsSend, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_PLAYER_ID, TRUE, FALSE );
		}
	}
}
Beispiel #21
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 #22
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 #23
0
CPlayerPool* CPlayerPoolManager::FindExact( char* sz )
{
	unsigned char uc = 0, uc1 = 0;
	CPlayerPool* pPlayer = NULL;
	while ( ( uc < MAX_PLAYERS ) && ( uc1 < m_ucPlayers ) )
	{
		pPlayer = m_PlayerPool[ uc ];
		if ( pPlayer )
		{
			if ( !strcmp( pPlayer->GetNick(), sz ) ) return pPlayer;

			uc1++;
		}
		uc++;
	}

	return NULL;
}
Beispiel #24
0
void BanIPAddress(PCHAR Data, int iBitLength, PlayerID sender)
{
	RakNet::BitStream bsData(Data,iBitLength/8,FALSE);
	BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender);
	if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return;

	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();

	char ban_ip[256];
	int iBanIpLen;

	if(pPlayerPool->IsAdmin(bytePlayerID)) {
		bsData.Read(iBanIpLen);
		bsData.Read(ban_ip,iBanIpLen);
		ban_ip[iBanIpLen] = 0;

		pNetGame->AddBan(ban_ip);
	}
}
Beispiel #25
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 );
	}
}
void CPickupRecvPackets::PickedUp( void )
{
	unsigned char uc = 0;
	unsigned int ui1 = 0, ui2 = 0;

	bs.ReadCompressed(uc);
	bs.ReadCompressed(ui1);
	bs.ReadCompressed(ui2);

	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		CPickupPool* pPickup = CPickupPoolManager::Find( ui1 );
		if ( pPickup )
		{
			CallSignal("vcmp.pickup.hit", "%i %s %i %i", uc, pPlayer->GetNick(), ui1, ui2);
		}
	}
}
Beispiel #27
0
void CNetSends::SetPlayerCash( unsigned char uc )
{
	CPlayerPool* pPlayer = CPlayerPoolManager::Find( uc );
	if ( pPlayer )
	{
		RakNet::BitStream bsSend;
		char szText[ 256 ] = { NULL };
		BYTE byteTextLen = 0;

		sprintf(szText, "4 %i %i", uc, pPlayer->GetCash());

		byteTextLen = strlen( szText );

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

		NetInterface->RPC( "Set", &bsSend, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_PLAYER_ID, TRUE, FALSE );
	}
}
Beispiel #28
0
void Admin(PCHAR Data, int iBitLength, PlayerID sender)
{
	RakNet::BitStream bsData(Data,iBitLength/8,FALSE);
	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
	BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender);
	if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return;

	char szPassTest[65];
	int iPassLen;

	bsData.Read(iPassLen);
	if(iPassLen > 64) return;
	bsData.Read(szPassTest,iPassLen);

	szPassTest[iPassLen] = '\0';
	
	if(!strcmp(szPassTest,szAdminPass)) {
		pPlayerPool->SetAdmin(bytePlayerID);
	}
}
Beispiel #29
0
void CRcon::Packet_NewIncomingConnection(Packet* pPacket)
{
	in_addr in;
	in.s_addr = pPacket->playerId.binaryAddress;
	logprintf("[RCON] Admin [%s] has connected.", inet_ntoa(in));

	RakNet::BitStream bsSend;

	char* szHostname = pConsole->GetStringVariable( "hostname" );
	BYTE byteHostnameLength = strlen(szHostname);

	CPlayerPool* pPlayerPool = pNetGame->GetPlayerPool();

	bsSend.Write( byteHostnameLength );
	bsSend.Write( szHostname, byteHostnameLength );

	m_pRakServer->RPC( RPC_RconConnect,&bsSend,HIGH_PRIORITY,RELIABLE,0,UNASSIGNED_PLAYER_ID,true,false);
	bsSend.Reset();

	for( int i = 0; i < MAX_PLAYERS; i++ )
	{
		if( pPlayerPool->GetSlotState(i) == TRUE ) 
		{
			bsSend.Write((BYTE)i);
			bsSend.Write(pPlayerPool->GetPlayerName(i),MAX_PLAYER_NAME);

			pRcon->GetRakServer()->RPC( RPC_ServerJoin, &bsSend, HIGH_PRIORITY, RELIABLE, 0,
				UNASSIGNED_PLAYER_ID, true, false );

			bsSend.Reset();	
			
			PLAYER_DATA playerData = GetPlayerInformation( i );
			bsSend.Write( (BYTE)i );
			bsSend.Write( (PCHAR)&playerData, sizeof(PLAYER_DATA) );
			pRcon->GetRakServer()->RPC( RPC_RconPlayerInfo, &bsSend, HIGH_PRIORITY, RELIABLE, 0,
				UNASSIGNED_PLAYER_ID, true, false );

			bsSend.Reset();	
		}
	}
}
Beispiel #30
0
void CRemotePlayer::HandleDeath()
{
	CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool();
	CLocalPlayer *pLocalPlayer = NULL;

	if (pPlayerPool) pLocalPlayer = pPlayerPool->GetLocalPlayer();

	if (pLocalPlayer) {
		if (pLocalPlayer->IsSpectating() && pLocalPlayer->m_SpectateID == m_PlayerID) {
				//pLocalPlayer->ToggleSpectating(FALSE);
		}
	}

	if(m_pPlayerPed) {
		m_pPlayerPed->SetKeys(0,0,0);
		m_pPlayerPed->SetDead();
	}

	// Dead weapon pickups
	if (m_pPlayerPed && m_pPlayerPed->GetDistanceFromLocalPlayerPed() <= 100.0f)
	{
		MATRIX4X4 matPlayer;
		m_pPlayerPed->GetMatrix(&matPlayer);

		WEAPON_SLOT_TYPE * WeaponSlot = m_pPlayerPed->GetCurrentWeaponSlot();

		if (WeaponSlot->dwType != 0 &&
			WeaponSlot->dwType != WEAPON_GRENADE &&
			WeaponSlot->dwType != WEAPON_TEARGAS &&
			WeaponSlot->dwType != WEAPON_MOLTOV)
		{
			if(pNetGame->GetPickupPool()) {
				pNetGame->GetPickupPool()->New(pGame->GetWeaponModelIDFromWeapon(WeaponSlot->dwType),
					matPlayer.pos.X, matPlayer.pos.Y, matPlayer.pos.Z, WeaponSlot->dwAmmoInClip, m_PlayerID);
			}
		}
	}

	SetState(PLAYER_STATE_WASTED);
	ResetAllSyncAttributes();
}