void CPlayerManager::HandleClientJoin(EntityId playerId) { if(GetPlayerCount() > 1) { for(EntityId x = 0; x < MAX_PLAYERS; x++) { if(m_bActive[x] && x != playerId) { m_pPlayers[x]->AddForPlayer(playerId); m_pPlayers[x]->SpawnForPlayer(playerId); if(g_pBlipManager->DoesPlayerBlipExist(x)) { CBitStream bsSend; bsSend.WriteCompressed(x); bsSend.Write(g_pBlipManager->GetPlayerBlipSprite(x)); bsSend.Write(true); bsSend.Write(g_pBlipManager->GetPlayerBlipShow(x)); g_pNetworkManager->RPC(RPC_ScriptingCreatePlayerBlip, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, true); bsSend.Reset(); } m_pPlayers[x]->SetDimension(m_pPlayers[x]->GetDimension()); } else if(x == playerId) { m_pPlayers[x]->SetDimension(m_pPlayers[x]->GetDimension()); } } } }
void CBlipManager::HandleClientJoin(EntityId playerId) { if(GetBlipCount() > 0) { CBitStream bsSend; for(EntityId x = 0; x < MAX_BLIPS; x++) { if(m_bActive[x]) { bsSend.WriteCompressed(x); bsSend.Write(m_Blips[x].iSprite); bsSend.Write(m_Blips[x].vecSpawnPos); bsSend.Write(m_Blips[x].uiColor); bsSend.Write(m_Blips[x].fSize); bsSend.Write(m_Blips[x].bShortRange); bsSend.Write(m_Blips[x].bRouteBlip); bsSend.Write(m_Blips[x].bShow); bsSend.Write(m_Blips[x].strName); g_pNetworkManager->RPC(RPC_NewBlip, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); bsSend.Reset(); } } } if(g_pPlayerManager->GetPlayerCount() > 0) { CBitStream bsSend; for(EntityId y = 0; y < MAX_PLAYERS; y++) { if(m_bPlayerActive[y]) { bsSend.WriteCompressed(y); bsSend.Write(m_PlayerBlips[y].iSprite); bsSend.Write(m_PlayerBlips[y].bShortRange); bsSend.Write(m_PlayerBlips[y].bShow); g_pNetworkManager->RPC(RPC_ScriptingCreatePlayerBlip, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); bsSend.Reset(); } } } }
void CClientFileManager::HandleClientJoin(EntityId playerId) { CBitStream bsSend; for(iterator iter = begin(); iter != end(); ++ iter) { // Reset the bit stream bsSend.Reset(); // Write if the file is a script or resource bsSend.Write(bIsScriptManager); // Write the file name bsSend.Write((*iter).first); // Write the file checksum bsSend.Write((char *)&((*iter).second), sizeof(CFileChecksum)); // Send the rpc g_pNetworkManager->RPC(RPC_NewFile, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); } }
void CObjectManager::HandleClientJoin(EntityId playerId) { if(GetObjectCount() > 0) { CBitStream bsSend; for(EntityId x = 0; x < MAX_OBJECTS; x++) { if(m_bActive[x]) { bsSend.Reset(); bsSend.WriteCompressed(x); bsSend.Write(m_Objects[x].dwModelHash); bsSend.Write(m_Objects[x].vecPosition); bsSend.Write(m_Objects[x].vecRotation); bsSend.Write(m_Objects[x].m_iInterior); bsSend.Write(m_Objects[x].bAttached); bsSend.Write(m_Objects[x].bVehicleAttached); bsSend.Write(m_Objects[x].uiVehiclePlayerId); bsSend.Write(m_Objects[x].vecAttachPosition); bsSend.Write(m_Objects[x].vecAttachRotation); if(m_Objects[x].iBone == -1) bsSend.Write0(); else { bsSend.Write1(); bsSend.Write(m_Objects[x].iBone); } g_pNetworkManager->RPC(RPC_NewObject, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); SetDimension(x, this->GetDimension(x)); } } } }
void CVehicle::SpawnForPlayer(EntityId playerId) { CBitStream bsSend; bsSend.WriteCompressed(m_vehicleId); bsSend.Write(m_iModelId); bsSend.Write(m_uiHealth); bsSend.Write(m_fPetrolTankHealth); bsSend.Write(m_vecPosition); if(!m_vecRotation.IsEmpty()) { bsSend.Write1(); bsSend.Write(m_vecRotation); } else bsSend.Write0(); if(!m_vecTurnSpeed.IsEmpty()) { bsSend.Write1(); bsSend.Write(m_vecTurnSpeed); } else bsSend.Write0(); if(!m_vecMoveSpeed.IsEmpty()) { bsSend.Write1(); bsSend.Write(m_vecMoveSpeed); } else bsSend.Write0(); bsSend.Write(m_iRespawnDelay); bsSend.Write((char *)m_byteColors, sizeof(m_byteColors)); bsSend.Write(m_fDirtLevel); for(int i = 0; i < 4; ++ i) bsSend.WriteBit(m_bIndicatorState[i]); for(int i = 0; i < 9; ++ i) bsSend.WriteBit(m_bComponents[i]); bsSend.Write(m_iHornDuration); bsSend.Write(m_bSirenState); bsSend.Write(m_iLocked); bsSend.Write(m_bEngineStatus); bsSend.Write(m_bLights); for(int i = 0; i < 6; i++) bsSend.Write(m_fDoor[i]); for(int i = 0; i < 4; i++) bsSend.Write(m_bWindow[i]); bsSend.Write(m_bTaxiLight); bsSend.Write(m_bGpsState); if(m_ucVariation != 0) { bsSend.Write1(); bsSend.Write(m_ucVariation); } else bsSend.Write0(); g_pNetworkManager->RPC(RPC_NewVehicle, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); // Mark vehicle as actor vehicle bsSend.Reset(); bsSend.Write(m_vehicleId); bsSend.Write(m_bActorVehicle); g_pNetworkManager->RPC(RPC_ScriptingMarkVehicleAsActorVehicle, &bsSend, PRIORITY_HIGH, RELIABILITY_RELIABLE_ORDERED, playerId, false); SetColors(m_byteColors[0],m_byteColors[1],m_byteColors[2],m_byteColors[3]); }