int NetworkSendGameListRequest (void) { tSequencePacket me; #ifdef _DEBUG memset (&me, 0, sizeof (me)); #endif me.nType = PID_GAME_LIST; memcpy (me.player.callsign, LOCALPLAYER.callsign, CALLSIGN_LEN + 1); if (gameStates.multi.nGameType >= IPX_GAME) { memcpy (me.player.network.ipx.node, IpxGetMyLocalAddress (), 6); memcpy (me.player.network.ipx.server, IpxGetMyServerAddress (), 4); if (gameStates.multi.nGameType != UDP_GAME) SendBroadcastSequencePacket (me); else { int i; con_printf (0, "looking for netgames\n"); if (gameStates.multi.bUseTracker) { if (!RequestServerListFromTracker ()) return 0; //memset (activeNetGames, 0, sizeof (activeNetGames)); //networkData.nActiveGames = 0; for (i = 0; GetServerFromList (i); i++) SendInternetSequencePacket (me, ipx_ServerAddress, ipx_ServerAddress + 4); } else { //memset (activeNetGames, 0, sizeof (activeNetGames)); //networkData.nActiveGames = 0; SendInternetSequencePacket (me, ipx_ServerAddress, ipx_ServerAddress + 4); } } } return 1; }
int NetworkSendGameListRequest (void) { tSequencePacket me; #if DBG memset (&me, 0, sizeof (me)); #endif me.nType = PID_GAME_LIST; memcpy (me.player.callsign, LOCALPLAYER.callsign, CALLSIGN_LEN + 1); if (gameStates.multi.nGameType >= IPX_GAME) { memcpy (me.player.network.ipx.node, IpxGetMyLocalAddress (), 6); memcpy (me.player.network.ipx.server, IpxGetMyServerAddress (), 4); if (gameStates.multi.nGameType != UDP_GAME) SendBroadcastSequencePacket (me); else { console.printf (0, "looking for netgames\n"); if (tracker.m_bUse) { if (!tracker.RequestServerList ()) return 0; for (int i = 0; tracker.GetServerFromList (i); i++) SendInternetSequencePacket (me, ipx_ServerAddress, ipx_ServerAddress + 4); } else { SendInternetSequencePacket (me, ipx_ServerAddress, ipx_ServerAddress + 4); } } } return 1; }
int NetworkSendRequest (void) { // Send a request to join a game 'netGame'. Returns 0 if we can join this // game, non-zero if there is some problem. int i; networkData.nSyncPlayer = -1; if (netGame.nNumPlayers < 1) return 1; for (i = 0; i < MAX_NUM_NET_PLAYERS; i++) if (netPlayers.players [i].connected) break; Assert (i < MAX_NUM_NET_PLAYERS); networkData.mySeq.nType = PID_REQUEST; networkData.mySeq.player.connected = gameData.missions.nCurrentLevel; networkData.nJoinState = 0; networkData.nSyncFrame = 0; networkData.bHaveSync = 0; networkData.missingObjFrames.nFrame = 0; networkData.bTraceFrames = 1; if (gameStates.multi.nGameType >= IPX_GAME) { networkData.nSyncPlayer = i; SendInternetSequencePacket ( networkData.mySeq, netPlayers.players [i].network.ipx.server, netPlayers.players [i].network.ipx.node); } return i; }
void NetworkDumpPlayer (ubyte * server, ubyte *node, int nReason) { // Inform tPlayer that he was not chosen for the netgame tSequencePacket temp; temp.nType = PID_DUMP; memcpy (temp.player.callsign, LOCALPLAYER.callsign, CALLSIGN_LEN+1); temp.player.connected = nReason; if (gameStates.multi.nGameType >= IPX_GAME) SendInternetSequencePacket (temp, server, node); else Int3 (); }
int NetworkWaitForSync (void) { char text [60]; tMenuItem m [2]; int i, choice; tSequencePacket me; networkData.nStatus = NETSTAT_WAITING; memset (m, 0, sizeof (m)); m [0].nType = NM_TYPE_TEXT; m [0].text = text; m [1].nType = NM_TYPE_TEXT; m [1].text = (char *) TXT_NET_LEAVE; networkData.nJoinState = 0; i = NetworkSendRequest (); if (i < 0) { #if DBG NetworkSendRequest (); #endif return -1; } sprintf (m [0].text, "%s\n'%s' %s", TXT_NET_WAITING, netPlayers.players [i].callsign, TXT_NET_TO_ENTER); networkData.toSyncPoll = 0; do { choice = ExecMenu (NULL, TXT_WAIT, 2, m, NetworkSyncPoll, NULL); } while (choice > -1); if (networkData.nStatus == NETSTAT_PLAYING) return 0; else if (networkData.nStatus == NETSTAT_AUTODL) if (DownloadMission (netGame.szMissionName)) return 1; #if 1 con_printf (CONDBG, "Aborting join.\n"); #endif me.nType = PID_QUIT_JOINING; memcpy (me.player.callsign, LOCALPLAYER.callsign, CALLSIGN_LEN+1); if (gameStates.multi.nGameType >= IPX_GAME) { memcpy (me.player.network.ipx.node, IpxGetMyLocalAddress (), 6); memcpy (me.player.network.ipx.server, IpxGetMyServerAddress (), 4); SendInternetSequencePacket (me, netPlayers.players [0].network.ipx.server, netPlayers.players [0].network.ipx.node); } gameData.multiplayer.nPlayers = 0; SetFunctionMode (FMODE_MENU); gameData.app.nGameMode = GM_GAME_OVER; return -1; // they cancelled }