void NetworkSendRejoinSync (int nPlayer) { int i, j; gameData.multiplayer.players [nPlayer].connected = 1; // connect the new guy ResetPlayerTimeout (nPlayer, -1); if (gameStates.app.bEndLevelSequence || gameData.reactor.bDestroyed) { // Endlevel started before we finished sending the goods, we'll // have to stop and try again after the level. if (gameStates.multi.nGameType >= IPX_GAME) NetworkDumpPlayer ( networkData.playerRejoining.player.network.ipx.server, networkData.playerRejoining.player.network.ipx.node, DUMP_ENDLEVEL); networkData.nSyncState = 0; networkData.nSyncExtras = 0; return; } if (networkData.bPlayerAdded) { networkData.playerRejoining.nType = PID_ADDPLAYER; networkData.playerRejoining.player.connected = nPlayer; NetworkNewPlayer (&networkData.playerRejoining); for (i = 0; i < gameData.multiplayer.nPlayers; i++) { if ((i != nPlayer) && (i != gameData.multiplayer.nLocalPlayer) && (gameData.multiplayer.players [i].connected)) if (gameStates.multi.nGameType >= IPX_GAME) { SendSequencePacket ( networkData.playerRejoining, netPlayers.players [i].network.ipx.server, netPlayers.players [i].network.ipx.node, gameData.multiplayer.players [i].netAddress); } } } // Send sync packet to the new guy NetworkUpdateNetGame (); // Fill in the kill list for (j = 0; j < MAX_PLAYERS; j++) { for (i = 0; i < MAX_PLAYERS; i++) netGame.kills [j][i] = gameData.multigame.kills.matrix [j][i]; netGame.killed [j] = gameData.multiplayer.players [j].netKilledTotal; netGame.playerKills [j] = gameData.multiplayer.players [j].netKillsTotal; netGame.player_score [j] = gameData.multiplayer.players [j].score; } netGame.xLevelTime = LOCALPLAYER.timeLevel; netGame.monitor_vector = NetworkCreateMonitorVector (); if (gameStates.multi.nGameType >= IPX_GAME) { SendInternetFullNetGamePacket ( networkData.playerRejoining.player.network.ipx.server, networkData.playerRejoining.player.network.ipx.node); SendNetPlayersPacket ( networkData.playerRejoining.player.network.ipx.server, networkData.playerRejoining.player.network.ipx.node); } return; }
void NetworkSendRejoinSync (int nPlayer, tNetworkSyncData *syncP) { int i, j; gameData.multiplayer.players [nPlayer].connected = 1; // connect the new guy ResetPlayerTimeout (nPlayer, -1); if (gameStates.app.bEndLevelSequence || gameData.reactor.bDestroyed) { // Endlevel started before we finished sending the goods, we'll // have to stop and try again after the level. if (gameStates.multi.nGameType >= IPX_GAME) NetworkDumpPlayer ( syncP->player [1].player.network.ipx.server, syncP->player [1].player.network.ipx.node, DUMP_ENDLEVEL); syncP->nState = 0; syncP->nExtras = 0; return; } if (networkData.bPlayerAdded) { syncP->player [1].nType = PID_ADDPLAYER; syncP->player [1].player.connected = nPlayer; NetworkNewPlayer (&syncP->player [1]); for (i = 0; i < gameData.multiplayer.nPlayers; i++) { if ((i != nPlayer) && (i != gameData.multiplayer.nLocalPlayer) && gameData.multiplayer.players [i].connected && (gameStates.multi.nGameType >= IPX_GAME)) { SendSequencePacket ( syncP->player [1], netPlayers.m_info.players [i].network.ipx.server, netPlayers.m_info.players [i].network.ipx.node, gameData.multiplayer.players [i].netAddress); } } } // Send sync packet to the new guy NetworkUpdateNetGame (); // Fill in the kill list for (j = 0; j < MAX_PLAYERS; j++) { for (i = 0; i < MAX_PLAYERS; i++) *netGame.Kills (j, i) = gameData.multigame.kills.matrix [j][i]; *netGame.Killed (j) = gameData.multiplayer.players [j].netKilledTotal; *netGame.PlayerKills (j) = gameData.multiplayer.players [j].netKillsTotal; *netGame.PlayerScore (j) = gameData.multiplayer.players [j].score; } netGame.SetLevelTime (LOCALPLAYER.timeLevel); netGame.SetMonitorVector (NetworkCreateMonitorVector ()); if (gameStates.multi.nGameType >= IPX_GAME) { SendInternetFullNetGamePacket (syncP->player [1].player.network.ipx.server, syncP->player [1].player.network.ipx.node); SendNetPlayersPacket (syncP->player [1].player.network.ipx.server, syncP->player [1].player.network.ipx.node); MultiSendMonsterball (1, 1); } }
int AddPlayerHandler (ubyte *dataP, int nLength) { NetworkNewPlayer (THEIR); return 1; }