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; }
void NetworkSendAllInfoRequest (char nType, int nSecurity) { // Send a broadcast request for game info tSequencePacket me; me.nSecurity = nSecurity; me.nType = nType; 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); SendBroadcastSequencePacket (me); } }
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 }
void NetworkInit (void) { int nPlayerSave = gameData.multiplayer.nLocalPlayer; GameDisableCheats (); gameStates.multi.bIWasKicked = 0; gameStates.gameplay.bFinalBossIsDead = 0; networkData.nNamesInfoSecurity = -1; #ifdef NETPROFILING OpenSendLog (); OpenReceiveLog (); #endif InitAddressFilter (); InitPacketHandlers (); memset (gameData.multiplayer.maxPowerupsAllowed, 0, sizeof (gameData.multiplayer.maxPowerupsAllowed)); memset (gameData.multiplayer.powerupsInMine, 0, sizeof (gameData.multiplayer.powerupsInMine)); networkData.nTotalMissedPackets = 0; networkData.nTotalPacketsGot = 0; memset (&netGame, 0, sizeof (tNetgameInfo)); memset (&netPlayers, 0, sizeof (tAllNetPlayersInfo)); networkData.thisPlayer.nType = PID_REQUEST; memcpy (networkData.thisPlayer.player.callsign, LOCALPLAYER.callsign, CALLSIGN_LEN+1); networkData.thisPlayer.player.versionMajor=D2X_MAJOR; networkData.thisPlayer.player.versionMinor=D2X_MINOR | (IS_D2_OEM ? NETWORK_OEM : 0); networkData.thisPlayer.player.rank=GetMyNetRanking (); if (gameStates.multi.nGameType >= IPX_GAME) { memcpy (networkData.thisPlayer.player.network.ipx.node, IpxGetMyLocalAddress (), 6); if (gameStates.multi.nGameType == UDP_GAME) * ((ushort *) (networkData.thisPlayer.player.network.ipx.node + 4)) = htons (* ((ushort *) (networkData.thisPlayer.player.network.ipx.node + 4))); // if (gameStates.multi.nGameType == UDP_GAME) // memcpy (networkData.thisPlayer.player.network.ipx.node, ipx_LocalAddress + 4, 4); memcpy (networkData.thisPlayer.player.network.ipx.server, IpxGetMyServerAddress (), 4); } networkData.thisPlayer.player.computerType = DOS; for (gameData.multiplayer.nLocalPlayer = 0; gameData.multiplayer.nLocalPlayer < MAX_NUM_NET_PLAYERS; gameData.multiplayer.nLocalPlayer++) InitPlayerStatsGame (); gameData.multiplayer.nLocalPlayer = nPlayerSave; MultiNewGame (); networkData.bNewGame = 1; gameData.reactor.bDestroyed = 0; NetworkFlush (); netGame.nPacketsPerSec = mpParams.nPPS; }