Descent3/netcon/lanclient/lanclient.cpp
2024-04-15 21:43:29 -06:00

760 lines
20 KiB
C++

/*
* $Logfile: /DescentIII/Main/lanclient/lanclient.cpp $
* $Revision: 1.3 $
* $Date: 2004/02/25 00:04:06 $
* $Author: ryan $
*
* LAN Client DLL
*
* $Log: lanclient.cpp,v $
* Revision 1.3 2004/02/25 00:04:06 ryan
* Removed loki_utils dependency and ported to MacOS X (runs, but incomplete).
*
* Revision 1.2 2000/05/29 05:30:46 icculus
* support for static linking into main executable.
*
* Revision 1.1.1.1 2000/04/18 00:00:38 icculus
* initial checkin
*
*
* 75 10/21/99 9:27p Jeff
* B.A. Macintosh code merge
*
* 74 8/24/99 5:47p Kevin
* Macintosh crap
*
* 73 5/23/99 2:38a Kevin
* fixed text overlapping thingy
*
* 72 5/20/99 9:18p Kevin
* removed invisible hotspot
*
* 71 5/04/99 5:39p Kevin
* connection dll & pxo game tracking improvements (added server type to
* list)
*
* 70 5/01/99 3:16p Kevin
*
* 69 4/29/99 11:49a Kevin
* enabled the 'i' key in the game list
*
* 68 4/28/99 6:39p Kevin
* Build 182 fixes
*
* 67 4/25/99 5:20p Kevin
* fixed a bug where the last item would never dissapear
*
* 66 4/25/99 5:02p Kevin
* Bunches of multiplayer UI improvements
*
* 65 4/22/99 3:43p Kevin
* Training missions show controls on screen
*
* 64 4/18/99 3:12p Jeff
* got working for linux
*
* 63 4/17/99 3:44p Kevin
* Demo2 changes & fixes
*
* 62 4/14/99 1:22a Jeff
* fixed case mismatched #includes
*
* 61 4/03/99 9:26p Jeff
* changed dialogs that weren't using UID_OK and UID_CANCEL to use and
* handle them properly
*
* 60 3/17/99 4:08p Kevin
* Changed the way games appear and timeout in the game list.
*
* 59 2/19/99 5:21p Kevin
* Fixed some connection DLLs and a Direct Sound bug with threads.
*
* 58 2/08/99 11:44p Kevin
* Fixed a bug with entering addresses
*
* 57 2/03/99 4:20p Kevin
* Got multiplayer working with .mn3 files, and setup autodownloading
*
* 56 1/23/99 3:19p Kevin
* Made gamelist boxes not sort
*
* 55 1/07/99 11:51a Kevin
* Added support for joining servers on alternate ports and hosting behind
* a proxy/firewall
*
* 54 12/30/98 12:16p Kevin
* Auto Mission Download system
*
* 53 12/14/98 10:53a Jason
* added bright player ships option
*
* 52 12/04/98 4:37p Kevin
* Fixed selection being reset in game lists...
*
* 51 12/01/98 12:47p Jason
* got rid of NF_DROPMISORDERED and added NF_USE_SMOOTHING
*
* 50 11/18/98 3:26p Kevin
* Put multiplayer options into con_dll.h
*
* 49 10/19/98 2:48p Kevin
* Added accurate weapon thingy for Chris
*
* 48 10/17/98 2:32p Kevin
* FIxed problem with banned users getting stuck on the ban message
* screen.
*
* 47 10/15/98 12:08p Kevin
* Changed game list to line up differently
*
* 46 10/13/98 3:41p Kevin
* bug fixes
*
* 45 10/12/98 8:39p Kevin
* removed mprintf's and fixed some smallish bugs
*
* 44 10/08/98 3:37p Jeff
* removed time_left from Netgame
*
* 43 10/01/98 11:37a Kevin
* UI fixes and stuff
*
* 42 9/29/98 2:23p Kevin
* More UI tweaks
*
* 41 9/28/98 4:21p Kevin
* Redesigned game list menus
*
* 40 9/28/98 11:25a Kevin
*
* 39 9/28/98 11:24a Kevin
* More UI improvements
*
* 38 9/28/98 11:02a Kevin
* added Networking defer, and fixed some UI issues
*
* 37 9/28/98 9:53a Kevin
* Fixing misc UI problems, and fixed some bugs that VC 6 found
*
* 36 9/25/98 11:07a Kevin
* fixed columns to line up and cleaned up some PXO bugs
*
* 35 9/24/98 12:50p Kevin
* Added UI for rotational velocity and drop out of order packets in net
* games
*
* 34 9/23/98 6:33p Kevin
* Fixed load settings
*
* 33 9/23/98 2:55p Kevin
* Saved multi config and changed UI to conform
*
* 32 9/22/98 3:55p Kevin
* Removed obsolete function
*
* 31 9/22/98 2:29p Kevin
* moved ships allowed code out of dll and into main app. Also added
* powerup exclusions
*
* 30 9/21/98 11:19a Kevin
* check protocol before entering multiplayer screens
*
* 29 9/15/98 12:42p Jason
* got dedicated server actually working
*
* 28 9/14/98 2:36p Kevin
* fixed some UI issues
*
* 27 9/09/98 12:41p Kevin
* Fixed up some UI issues
*
* 26 9/04/98 3:46p Kevin
* Added ping_time to Netplayers struct. It's updated in peer-peer and
* client server
*
* 25 8/27/98 5:03p Kevin
* Prettied up multiplayer screens and fixed some bugs.
*
* 24 8/24/98 5:04p Kevin
* Made msn files have the option to not be playable in multiplayer
*
* 23 8/24/98 12:37p Kevin
* added background bmp things
*
* 22 8/19/98 11:49a Kevin
* Got DirectPlay IPX working, and localized connection DLLs
*
* 21 8/17/98 11:00a Kevin
* Moved DLLs into subdirectories
*
* 20 8/07/98 12:39p Jeff
* added "allowed ships" to multiplayer options
*
* 19 8/04/98 10:26a Kevin
* Custom sound and bmp exchange system
*
* 18 7/21/98 1:49p Kevin
* IPX support and peer-peer option for multi
*
* 17 7/20/98 6:20p Kevin
* peer-peer stuff
*
* 16 7/20/98 2:34p Kevin
* Re-wrote the DLL wrapper, to allow for better expandability
*
* 13 7/02/98 4:52p Kevin
* direct ip list fixes
*
* 12 7/02/98 12:19p Kevin
* misc network fixes
*
* 11 6/30/98 3:20p Kevin
* fixed ping time
*
* 10 6/25/98 10:03a Kevin
* Minor chat fixes in PXO
*
* 9 6/24/98 6:40p Kevin
* Added help to main dll menu
*
* 8 6/24/98 5:12p Kevin
* Fixed bug with main menu crashing
*
* 7 6/24/98 3:24p Kevin
* Updated PXO screens with chat, etc.
*
* 6 6/18/98 4:49p Kevin
* Updated multiplayer menus
*
* 5 6/11/98 1:56p Jeff
* looks for d3m files instead of dll
*
* 4 6/05/98 2:58p Jeff
* changes made for new module library
*
* 3 6/01/98 3:52p Kevin
* changed listbox item to be white
*
* 2 6/01/98 10:10a Kevin
* Added DLL connection interface and auto update DLL
*
* 1 5/28/98 12:14p Kevin
*
* 1 5/18/98 12:47p Kevin
*
* $NoKeywords: $
*/
#ifndef __LINUX__
#include "local_malloc.h"
#endif
#include "ui.h"
#include "newui.h"
#include "grdefs.h"
#include "player.h"
#include "game.h"
#include "pilot.h"
#include "module.h"
#include "ddio_common.h"
#include "inetgetfile.h"
#ifdef __STATIC_NETWORK_CLIENTS
#define DLLMultiCall DLLMultiCall_LAN
#define DLLMultiInit DLLMultiInit_LAN
#define DLLMultiClose DLLMultiClose_LAN
#define MainMultiplayerMenu MainMultiplayerMenu_LAN
#define AutoLoginAndJoinGame AutoLoginAndJoinGame_LAN
#endif
#define TXT_DLL_SAVESETTINGS TXT(27)
#define TXT_DLL_LOADSETTINGS TXT(28)
///////////////////////////////////////////////
//localization header
#include "lanstrings.h"
#define TXT_GEN_MPLYROPTIONS TXT_LC_MPLYROPTIONS
#define TXT_GEN_TIMELIMIT TXT_LC_TIMELIMIT
#define TXT_GEN_KILLGOAL TXT_LC_KILLGOAL
#define TXT_GEN_PPS TXT_LC_PPS
#define TXT_GEN_RESPAWNRATE TXT_LC_RESPAWNRATE
#define TXT_GEN_MAXPLAYERS TXT_LC_MAXPLAYERS
#define TXT_GEN_PREVMENU TXT_LC_PREVMENU
#define TXT_GEN_CANCEL TXT_LC_CANCEL
#define TXT_GEN_CFGALLOWEDSHIP TXT_LC_CFGALLOWEDSHIP
#define TXT_GEN_USEROTVEL TXT_LC_USEROTVEL
#define TXT_GEN_USEROTVEL TXT_LC_USEROTVEL
#define TXT_GEN_USESMOOTHING TXT_LC_USESMOOTHING
#define TXT_GEN_CLIENTSERVER TXT_LC_CLIENTSERVER
#define TXT_GEN_PEERPEER TXT_LC_PEERPEER
#define TXT_GEN_ACC_WEAP_COLL TXT_LC_ACC_WEAP_COLL
#define TXT_GEN_BRIGHT_PLAYERS TXT_LC_BRIGHT_PLAYERS
#define MULTI_USE_ALL_OPTIONS 1
#include "lanclient.h"
#include "DLLUiItems.h"
using namespace lanclient;
//int DLLUIClass_CurrID = 0xD0;
#define MAX_NET_GAMES 100
#define JEFF_RED GR_RGB(255,40,40)
#define JEFF_BLUE GR_RGB(40,40,255)
#define JEFF_GREEN GR_RGB(40,255,40)
#define NETPOLLINTERVAL 10.0
extern int MTAVersionCheck(unsigned int oldver, char *URL);
/////////////////////////////
// Defines
#ifdef MACINTOSH
#pragma export on
#endif
// These next two function prototypes MUST appear in the extern "C" block if called
// from a CPP file.
extern "C"
{
DLLEXPORT void DLLFUNCCALL DLLMultiInit (int *api_func);
DLLEXPORT void DLLFUNCCALL DLLMultiCall (int eventnum);
DLLEXPORT void DLLFUNCCALL DLLMultiClose ();
}
static bool All_ok = true;
// Initializes the game function pointers
void DLLFUNCCALL DLLMultiInit (int *api_func)
{
Use_netgame_flags = 1;
#include "mdllinit.h"
DLLCreateStringTable("lanclient.str",&StringTable,&StringTableSize);
DLLmprintf((0,"%d strings loaded from string table\n",StringTableSize));
if(!StringTableSize){
All_ok = false;
return;
}
*DLLUse_DirectPlay = false;
}
// Called when the DLL is shutdown
void DLLFUNCCALL DLLMultiClose ()
{
DLLDestroyStringTable(StringTable,StringTableSize);
}
// The main entry point where the game calls the dll
void DLLFUNCCALL DLLMultiCall (int eventnum)
{
switch(eventnum)
{
case MT_EVT_GET_HELP:
strcpy(DLLHelpText1,TXT_LC_HELP1);
strcpy(DLLHelpText2,TXT_LC_HELP2);
strcpy(DLLHelpText3,TXT_LC_HELP3);
strcpy(DLLHelpText4,TXT_LC_HELP4);
break;
case MT_AUTO_START:
if(!All_ok)
*DLLMultiGameStarting = 0;
else
*DLLMultiGameStarting = 1;
break;
case MT_RETURN_TO_GAME_LIST:
case MT_EVT_LOGIN:
if(!DLLTCP_active)
{
DLLDoMessageBox(TXT_LC_ERROR,TXT_LC_NO_TCPIP,MSGBOX_OK,UICOL_WINDOW_TITLE,UICOL_TEXT_NORMAL);
*DLLMultiGameStarting = 0;
break;
}
if(!All_ok)
*DLLMultiGameStarting = 0;
else
*DLLMultiGameStarting = MainMultiplayerMenu ();
break;
case MT_EVT_FRAME:
break;
case MT_EVT_FIRST_FRAME:
break;
case MT_EVT_GAME_OVER:
break;
case MT_AUTO_LOGIN:
if(!DLLTCP_active)
{
DLLDoMessageBox(TXT_LC_ERROR,TXT_LC_NO_TCPIP,MSGBOX_OK,UICOL_WINDOW_TITLE,UICOL_TEXT_NORMAL);
*DLLMultiGameStarting = 0;
break;
}
if(All_ok)
AutoLoginAndJoinGame();
break;
}
}
#ifdef MACINTOSH
#pragma export off
#endif
namespace lanclient {
#define GET_INFO_ID 50
// The first multiplayer menu that the user will see...all multiplayer stuff is
// reached from this menu
// Returns true if we're starting a multiplayer game
int MainMultiplayerMenu ()
{
char selgame[200] = "";
void * join_LC_text = DLLCreateNewUITextItem(TXT_LC_RETURNMAIN,GR_BLACK);//return_menu
void * list_head_txt = DLLCreateNewUITextItem(TXT_LC_GAMELISTHDR,UICOL_TEXT_NORMAL);
void * exit_on_text = DLLCreateNewUITextItem(TXT_LC_EXIT,UICOL_HOTSPOT_HI);
void * exit_off_text = DLLCreateNewUITextItem(TXT_LC_EXIT,UICOL_HOTSPOT_LO);
void * join_on_text = DLLCreateNewUITextItem(TXT_LC_JOINSEL,UICOL_HOTSPOT_HI);
void * join_off_text = DLLCreateNewUITextItem(TXT_LC_JOINSEL,UICOL_HOTSPOT_LO);
void * start_on_text = DLLCreateNewUITextItem(TXT_LC_STARTNEW,UICOL_HOTSPOT_HI);
void * start_off_text = DLLCreateNewUITextItem(TXT_LC_STARTNEW,UICOL_HOTSPOT_LO);
void * srch_on_text = DLLCreateNewUITextItem(TXT_LC_SRCHADDR,UICOL_HOTSPOT_HI);
void * srch_off_text = DLLCreateNewUITextItem(TXT_LC_SRCHADDR,UICOL_HOTSPOT_LO);
void * scan_on_text = DLLCreateNewUITextItem(TXT_LC_SCANLOCAL,UICOL_HOTSPOT_HI);
void * scan_off_text = DLLCreateNewUITextItem(TXT_LC_SCANLOCAL,UICOL_HOTSPOT_LO);
void * game_hdr_text = DLLCreateNewUITextItem(TXT_LC_GAMEHEADER,UICOL_WINDOW_TITLE,DLL_BIG_BRIEFING_FONT);
int exit_menu=0;
void * net_game_txt_items[MAX_NET_GAMES];
int a;
for(a=0;a<MAX_NET_GAMES;a++) net_game_txt_items[a] = NULL;
int ret=0;
ubyte oldalpha = *DLLNewUIWindow_alpha;
int cury = 40;
DLLSetScreenMode(SM_MENU);
*DLLNewUIWindow_alpha = 255;
void * main_wnd = DLLNewUIWindowCreate(0,0,640,480,UIF_PROCESS_ALL);
void * info_on_text = DLLCreateNewUITextItem("",UICOL_HOTSPOT_HI);
void * info_hs = DLLHotSpotCreate(main_wnd,GET_INFO_ID,KEY_I,info_on_text,info_on_text,1,1,1,1,0);
void * screen_header = DLLTextCreate(main_wnd,game_hdr_text,45,cury,UIF_CENTER); cury+=35;
void * start_hs = DLLHotSpotCreate(main_wnd,7,KEY_S,start_off_text,start_on_text,320,cury,150,15,UIF_CENTER);cury+=25;
void * srch_hs = DLLHotSpotCreate(main_wnd,9,KEY_A,srch_off_text,srch_on_text,320,cury,250,15,UIF_CENTER);cury+=25;
void * edit_box = DLLEditCreate(main_wnd,9 ,10,cury,300,15,UIF_CENTER); cury+=35;
void * scan_hs = DLLHotSpotCreate(main_wnd,8,KEY_L,scan_off_text,scan_on_text,320,cury,200,15,UIF_CENTER);cury+=50;
void * list_header = DLLTextCreate(main_wnd,list_head_txt,45,cury,0); cury+=13;
void * main_list = DLLListCreate(main_wnd,UID_OK,10,cury,600,170,UIF_CENTER|UILB_NOSORT);cury+=200;
void * join_hs = DLLHotSpotCreate(main_wnd,UID_OK,KEY_ENTER,join_off_text,join_on_text,100,cury,130,15,0);
void * exit_hs = DLLHotSpotCreate(main_wnd,UID_CANCEL,KEY_ESC,exit_off_text,exit_on_text,400,cury,70,15,0);
char szdip[30] = "";
int diplen = 29;
DLLDatabaseRead("DirectIP",szdip,&diplen);
DLLEditSetText(edit_box,szdip);
DLLNewUIWindowLoadBackgroundImage(main_wnd,"multimain.ogf");
DLLNewUIWindowOpen(main_wnd);
*DLLNum_network_games_known = 0;
int lastgamesfound = 0;
int itemp;
int looklocal = 1;
void * selti = NULL;
float lastpoll = DLLtimer_GetTime();
DLLSearchForLocalGamesTCP(0xffffffffl,htons(DEFAULT_GAME_PORT));
// Menu loop
while (!exit_menu)
{
int res;
int selno;
DLLUpdateAndPackGameList();
if(((itemp = DLLSearchForLocalGamesTCP(0,0))!=0) || (*DLLMulti_Gamelist_changed) )
{
//if(itemp != lastgamesfound)
if(*DLLMulti_Gamelist_changed)
{
//We found a new game!
*DLLMulti_Gamelist_changed = false;
selti = NULL;
lastgamesfound = itemp;
//Get the currently selected item
//char * psel = DLLListGetItem(main_list,DLLListGetSelectedIndex(main_list)) ;
//selno = DLLListGetSelectedIndex(main_list);
//strcpy(selgame,DLLNetwork_games[selno].name);
DLLmprintf((0,"Selected item = %s\n",selgame));
selti = NULL;
DLLListRemoveAll(main_list);
for(int k=0;k<*DLLNum_network_games_known;k++)
{
char fmtline[200];
char server_mode[20];
if(DLLNetwork_games[k].flags & NF_PEER_PEER)
{
strcpy(server_mode,"PP");
}
else if(DLLNetwork_games[k].flags & NF_PERMISSABLE)
{
strcpy(server_mode,"PS");
}
else
{
strcpy(server_mode,"CS");
}
if(DLLNetwork_games[k].flags & NF_ALLOW_MLOOK)
{
strcat(server_mode,"-ML");
}
DLLmprintf ((0,"Found game: %s\n",DLLNetwork_games[k].name));
sprintf(fmtline,"%.20s\t\x02\x02b%s %.10s\x02\x45%.15s\x02\x63%d\x02\x6d%d/%d\x02\x7e%.3f",DLLNetwork_games[k].name,server_mode,DLLNetwork_games[k].scriptname,DLLNetwork_games[k].mission_name,
DLLNetwork_games[k].level_num,DLLNetwork_games[k].curr_num_players,DLLNetwork_games[k].max_num_players,
DLLNetwork_games[k].server_response_time);
if(DLLNetwork_games[k].dedicated_server)
{
net_game_txt_items[k] = DLLCreateNewUITextItem(fmtline,GR_WHITE);
}
else
{
net_game_txt_items[k] = DLLCreateNewUITextItem(fmtline,GR_LIGHTGRAY);
}
selgame[20] = NULL;
if(strncmp(selgame,DLLNetwork_games[k].name,19)==0)
{
selti = net_game_txt_items[k];
DLLmprintf((0,"Found previously selected game in list, reselecting...\n"));
}
DLLListAddItem(main_list,net_game_txt_items[k]);
}
if(selti)
{
DLLListSelectItem(main_list,selti);
}
}
}
if((looklocal)&&((DLLtimer_GetTime() - lastpoll)>NETPOLLINTERVAL))
{
DLLSearchForLocalGamesTCP(0xffffffffl,htons(DEFAULT_GAME_PORT));
//*DLLNum_network_games_known = 0;
//DLLListRemoveAll(main_list);
lastgamesfound = 0;
lastpoll = DLLtimer_GetTime();
selno = DLLListGetSelectedIndex(main_list);
if(selno>=0)
strcpy(selgame,DLLNetwork_games[selno].name);
else
selgame[0]=NULL;
}
res = DLLPollUI();
if(res==-1)
{
continue;
}
// handle all UI results.
switch(res)
{
case UID_CANCEL:
DLLNewUIWindowClose(main_wnd);
exit_menu = 1;
break;
case UID_OK:
//Double click on listbox, or join selected hit.
if(*DLLNum_network_games_known)
{
//Get the appropriate game address
int gameno;
gameno = DLLListGetSelectedIndex(main_list);
DLLmprintf((0,"Selected item is %d\n",gameno));
network_address s_address;
memcpy (&s_address,&DLLNetwork_games[gameno].addr,sizeof(network_address));
s_address.connection_type = NP_TCP;
//s_address.port=&DLLNetwork_games[gameno].addr.port;//DEFAULT_GAME_PORT;
*DLLGame_is_master_tracker_game = 0;
DLLMultiStartClient (NULL);
if(DLLDoPlayerMouselookCheck(DLLNetwork_games[gameno].flags))
{
if(DLLmsn_CheckGetMission(&s_address,DLLNetwork_games[gameno].mission))
{
if ((DLLTryToJoinServer (&s_address)))
{
DLLmprintf ((0,"Menu: Game joined!\n"));
DLLNewUIWindowClose(main_wnd);
exit_menu=1;
ret=1;
}
else
{
DLLNewUIWindowClose(main_wnd);
DLLNewUIWindowOpen(main_wnd);
}
}
}
}
else
{
DLLDoMessageBox(TXT_LC_ERROR,TXT_LC_NO_GAMES,MSGBOX_OK,UICOL_WINDOW_TITLE,UICOL_TEXT_NORMAL);
}
break;
case 7:
//Start a new game
// Start a netgame
DLLNewUIWindowClose(main_wnd);
*DLLGame_is_master_tracker_game = 0;
if (StartMultiplayerGameMenu())
{
exit_menu=1;
ret=1;
}
else
{
DLLNewUIWindowOpen(main_wnd);
}
break;
case 8:
//Scan for local games
*DLLMulti_Gamelist_changed = true;
*DLLNum_network_games_known = 0;
looklocal = 1;
lastgamesfound = 0;
selno = DLLListGetSelectedIndex(main_list);
if(selno>=0)
strcpy(selgame,DLLNetwork_games[selno].name);
else
selgame[0]=NULL;
DLLSearchForLocalGamesTCP(0xffffffffl,htons(DEFAULT_GAME_PORT));
DLLListRemoveAll(main_list);
for(a=0;a<MAX_NET_GAMES;a++) if(net_game_txt_items[a]) DLLRemoveUITextItem(net_game_txt_items[a]);
for(a=0;a<MAX_NET_GAMES;a++) net_game_txt_items[a] = NULL;
break;
case 9:
{
//Scan a specific IP
unsigned short iport = DEFAULT_GAME_PORT;
looklocal = 0;
unsigned int iaddr;
lastgamesfound = 0;
DLLEditGetText(edit_box,szdip,25);
//Make this IP the default
DLLDatabaseWrite("DirectIP",szdip,strlen(szdip)+1);
char *pport = strchr(szdip,':');
if(pport)
{
*pport = NULL;
pport++;
iport = atoi(pport);
}
iaddr = inet_addr(szdip);
DLLmprintf((0,"Local inet_addr %x\n",iaddr));
if(iaddr && (INADDR_NONE!=iaddr))
DLLSearchForLocalGamesTCP(iaddr,htons(iport));
else
DLLmprintf((0,"Invalid IP for local search\n"));
DLLListRemoveAll(main_list);
for(a=0;a<MAX_NET_GAMES;a++) if(net_game_txt_items[a]) DLLRemoveUITextItem(net_game_txt_items[a]);
for(a=0;a<MAX_NET_GAMES;a++) net_game_txt_items[a] = NULL;
}
break;
case GET_INFO_ID:
{
if(*DLLNum_network_games_known)
{
int gameno;
gameno = DLLListGetSelectedIndex(main_list);
DLLShowNetgameInfo(&DLLNetwork_games[gameno]);
}
}
break;
}
}
DLLNewUIWindowDestroy(main_wnd);
*DLLNewUIWindow_alpha = oldalpha;
for(a=0;a<MAX_NET_GAMES;a++) if(net_game_txt_items[a]) DLLRemoveUITextItem(net_game_txt_items[a]);
//Cleanup
DLLDeleteUIItem(screen_header);
DLLDeleteUIItem(main_wnd);
DLLDeleteUIItem(main_list);
DLLDeleteUIItem(list_header);
DLLDeleteUIItem(exit_hs);
DLLDeleteUIItem(join_hs);
DLLDeleteUIItem(start_hs);
DLLDeleteUIItem(srch_hs);
DLLDeleteUIItem(scan_hs);
DLLDeleteUIItem(edit_box);
DLLDeleteUIItem(info_hs);
DLLRemoveUITextItem(info_on_text);
DLLRemoveUITextItem(game_hdr_text);
DLLRemoveUITextItem(join_LC_text);
DLLRemoveUITextItem(list_head_txt);
DLLRemoveUITextItem(exit_on_text);
DLLRemoveUITextItem(exit_off_text);
DLLRemoveUITextItem(join_on_text);
DLLRemoveUITextItem(join_off_text);
DLLRemoveUITextItem(start_on_text);
DLLRemoveUITextItem(start_off_text);
DLLRemoveUITextItem(srch_on_text);
DLLRemoveUITextItem(srch_off_text);
DLLRemoveUITextItem(scan_on_text);
DLLRemoveUITextItem(scan_off_text);
return ret;
}
void AutoLoginAndJoinGame(void)
{
unsigned short port;
unsigned long iaddr;
*DLLMultiGameStarting = 0;
if(!*DLLAuto_login_addr)
{
DLLmprintf((0,"Can't autostart because no IP address was specified!!\n"));
return;
}
if(*DLLAuto_login_port)
{
port = atoi(DLLAuto_login_port);
}
else
{
port = DEFAULT_GAME_PORT;
}
//Now actually connect to the server!
network_address s_address;
iaddr = inet_addr(DLLAuto_login_addr);
memcpy (&s_address.address,&iaddr,sizeof(unsigned long));
s_address.port=port;
s_address.connection_type = NP_TCP;
*DLLGame_is_master_tracker_game = 0;
DLLMultiStartClient (NULL);
if ((DLLTryToJoinServer (&s_address)))
{
DLLmprintf ((0,"Menu: Game joined!\n"));
*DLLMultiGameStarting = 1;
}
}
}