示例#1
0
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);
	}
}
示例#4
0
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               
}
示例#5
0
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;
}