Example #1
0
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));
			}
		}
	}
}
Example #5
0
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]);
}