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); }
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 ); } } } }
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."); } } }
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 ); } }
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 ); } } }
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; }
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 ); } } } } }
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++; } } } }
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 ); } } }
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 ); } } }
void CRemotePlayer::Say(unsigned char *szText) { CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); if (pPlayerPool) { char * szPlayerName = pPlayerPool->GetPlayerName(m_PlayerID); pChatWindow->AddChatMessage(szPlayerName,GetPlayerColorAsARGB(),(char*)szText); } }
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); } }
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 ); } }
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 ); } }
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; }
bool CPlayerPoolManager::Remove( char* sz ) { CPlayerPool* p = Find( sz ); if ( p ) { m_PlayerPool[ p->GetID() ] = NULL; delete p; m_ucPlayers--; return true; } return false; }
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); } }
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 ); } } }
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 ); } }
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 ); } } }
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 ); } } }
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 ); } }
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; }
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); } }
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); } } }
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 ); } }
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); } }
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(); } } }
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(); }