void ClientJoin(PCHAR Data, int iBitLength, PlayerID sender) { RakNet::BitStream bsData(Data,iBitLength/8,FALSE); CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); CVehiclePool *pVehiclePool = pNetGame->GetVehiclePool(); CPickupPool *pPickupPool = pNetGame->GetPickupPool(); CPedPool *pPedPool = pNetGame->GetPedPool(); CHAR szPlayerName[MAX_PLAYER_NAME]; BYTE bytePlayerID; BYTE byteVersion; BYTE byteNickLen; bsData.Read(byteVersion); if(byteVersion != NETGAME_VERSION) { pNetGame->GetNetSends()->ConnectionRejected(sender, REJECT_REASON_BAD_VERSION); return; } bsData.Read(byteNickLen); bsData.Read(szPlayerName,byteNickLen); szPlayerName[byteNickLen] = '\0'; FilterInvalidNickChars(szPlayerName); byteNickLen = strlen(szPlayerName); if(byteNickLen==0 || byteNickLen > 16 || pPlayerPool->IsNickInUse(szPlayerName)) { pNetGame->GetNetSends()->ConnectionRejected(sender, REJECT_REASON_BAD_NICKNAME); return; } bytePlayerID = pRak->GetIndexFromPlayerID(sender); // Add this client to the player pool. pPlayerPool->New(bytePlayerID, szPlayerName); // Send this client back an 'InitGame' Call pNetGame->GetNetSends()->InitGame(sender, pNetGame->m_vecInitPlayerPos, pNetGame->m_vecInitCameraPos, pNetGame->m_vecInitCameraLook, pNetGame->m_WorldBounds, pNetGame->m_iSpawnsAvailable, pNetGame->m_byteFriendlyFire, pNetGame->m_byteShowOnRadar, pNetGame->m_startInterior); // Send this client existing players pNetGame->GetNetSends()->FirstJoin(sender); // Spawn all existing vehicles for player. CVehicle *pVehicle; BYTE x=0; while(x!=MAX_VEHICLES) { if(pVehiclePool->GetSlotState(x) == TRUE) { pVehicle = pVehiclePool->GetAt(x); if(pVehicle->IsActive()) pVehicle->SpawnForPlayer(bytePlayerID); } x++; } CPickup *pPickup; x=0; while(x!=MAX_PICKUPS) { if(pPickupPool->GetSlotState(x) == TRUE) { pPickup = pPickupPool->GetAt(x); if(pPickup->IsActive()) pPickup->SpawnForPlayer(bytePlayerID); } x++; } /*CPed *pPed; x=0; while(x!=MAX_PEDS) { if(pPedPool->GetSlotState(x) == TRUE) { pPed = pPedPool->GetAt(x); if(pPed->IsActive()) pPed->SpawnForPlayer(bytePlayerID); } x++; }*/ pNetGame->GetGameLogic()->HandleClientJoin(bytePlayerID); // lua_getglobal( L, "OnPlayerJoinDataChange" ); // lua_pushnumber( L, strlen(szPlayerName) ); // lua_pushstring( L, szPlayerName ); // lua_pcall( L, 2, 0, 0 ); }