Example #1
0
void CNetGame::ProcessClientJoin(BYTE bytePlayerID)
{

	// Perform all init operations.
	if(GetGameState() == GAMESTATE_RUNNING) {
		m_pVehiclePool->InitForPlayer(bytePlayerID); // give them all the existing vehicles
		m_pPickupPool->InitForPlayer(bytePlayerID); // give them all the existing pickups
		m_pObjectPool->InitForPlayer(bytePlayerID); // give them all the existing map objects
		InitGameForPlayer(bytePlayerID);
		m_pPlayerPool->InitPlayersForPlayer(bytePlayerID); // let them know who's on the server
		m_pPlayerPool->InitSpawnsForPlayer(bytePlayerID); // spawn any existing players for them
		m_pMenuPool->ResetPlayer(bytePlayerID); // Mark them as requiring menus
		
		// Inform them of their VW as it doesn't actually work if called from OnPlayerConnect
		// The server is updated but they're not connected fully so don't get it, so resend it
		BYTE byteVW = m_pPlayerPool->GetPlayerVirtualWorld(bytePlayerID);
		/*RakNet::BitStream bsData;
		bsData.Write(bytePlayerID); // player id
		bsData.Write(byteVW); // VW id
		m_pRak->RPC(&RPC_ScrSetPlayerVirtualWorld, &bsData, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_PLAYER_ID, true, false, UNASSIGNED_NETWORK_ID, NULL);
	*/
	} 
	else if(GetGameState() == GAMESTATE_RESTARTING)
	{
		InitGameForPlayer(bytePlayerID);
		m_pPlayerPool->InitPlayersForPlayer(bytePlayerID); // let them know who's on the server
		// Tell them that the world is currently restarting.
		RakNet::BitStream bsParams;
		PlayerID sender = m_pRak->GetPlayerIDFromIndex(bytePlayerID);
		m_pRak->RPC(&RPC_GameModeRestart, &bsParams, HIGH_PRIORITY,
			RELIABLE,0,sender,false,false, UNASSIGNED_NETWORK_ID, NULL);
	}
	
	//GetGameLogic()->HandleClientJoin(bytePlayerID);
	//GetGameMode()->OnPlayerConnect(bytePlayerID);

}
Example #2
0
void CNetGame::ReInitWhenRestarting()
{
	Init();

	BYTE bytePlayerID=0;

	while(bytePlayerID != MAX_PLAYERS) {
		if(m_pPlayerPool->GetSlotState(bytePlayerID)) {
			m_pVehiclePool->InitForPlayer(bytePlayerID); // give them all the existing vehicles
			m_pPickupPool->InitForPlayer(bytePlayerID);
			m_pObjectPool->InitForPlayer(bytePlayerID);
			InitGameForPlayer(bytePlayerID);
			m_pFilterScripts->OnPlayerConnect(bytePlayerID);
			m_pGameMode->OnPlayerConnect(bytePlayerID);
		}
		bytePlayerID++;
	}
}
Example #3
0
void RPC_ClientJoins(RPCParameters *rpcParams)
{
	PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input);
	int iBitLength = rpcParams->numberOfBitsOfData;
	PlayerID sender = rpcParams->sender;

	RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false);
	RakNet::BitStream bsReject;

	char szNickName[32], pszAuthBullshit[44];
	int iVersion;
	unsigned int uiChallengeResponse;
	BYTE byteMod, byteNameLen, byteAuthBSLen;
	PLAYERID playerID = pRakServer->GetIndexFromPlayerID(sender);
	BYTE byteRejectReason;

	bsData.Read(iVersion);
	bsData.Read(byteMod);
	bsData.Read(byteNameLen);
	bsData.Read(szNickName, byteNameLen);
	szNickName[byteNameLen] = 0;
	bsData.Read(uiChallengeResponse);
	bsData.Read(byteAuthBSLen);
	bsData.Read(pszAuthBullshit, byteAuthBSLen);

	PlayerID MyPlayerID = pRakServer->GetPlayerIDFromIndex(playerID);
	in_addr in;
	if(UNASSIGNED_PLAYER_ID == MyPlayerID)
	{
		in.s_addr = sender.binaryAddress;
		Log("Detected possible bot from (%s)", inet_ntoa(in));
		pRakServer->Kick(MyPlayerID);
		return;
	}

	if(!pRakServer->IsActivePlayerID(sender) || playerID > MAX_PLAYERS)
	{
		byteRejectReason = REJECT_REASON_BAD_PLAYERID;
		bsReject.Write(byteRejectReason);
		pRakServer->RPC(&RPC_ConnectionRejected, &bsReject, HIGH_PRIORITY, RELIABLE,
			0, sender, FALSE, FALSE, UNASSIGNED_NETWORK_ID, NULL);
		pRakServer->Kick(sender);
		return;
	}

	if(iVersion != NETGAME_VERSION || _uiRndSrvChallenge != (uiChallengeResponse ^ NETGAME_VERSION))
	{
		byteRejectReason = REJECT_REASON_BAD_VERSION;
		bsReject.Write(byteRejectReason);
		pRakServer->RPC(&RPC_ConnectionRejected, &bsReject, HIGH_PRIORITY, RELIABLE,
			0, sender, FALSE, FALSE, UNASSIGNED_NETWORK_ID, NULL);
		pRakServer->Kick(sender);
		return;
	}

	for(int i = 0; i < iScriptsRunning; i++)
	{
		if(script.scriptVM[i] != NULL && script.szScriptName[i][0] != 0x00)
			ScriptEvent_OnPlayerJoin(script.scriptVM[i], playerID, szNickName,
			rpcParams->sender.ToString(false), rpcParams->sender.port);
	}

	addPlayerToPool(rpcParams->sender, playerID, szNickName);

	InitGameForPlayer(playerID);
	SendPlayerPoolToPlayer(playerID);
	SpawnAllVehiclesForPlayer(playerID);
}