;search for a game ;-top XIncludeFile "MatchWin.pb" XIncludeFile "NormsFTP.pb" XIncludeFile "MatchGlob.pb" XIncludeFile "IniFile.pb" XIncludeFile "beginchat.pb" Procedure GetGameOpts() ;MessageRequester("GetGameOpts","SelGame = "+SelGame,0) IniFile=MainPath+"Masterlst.ini" If OpenPreferences(MainPath+SelGame+".host") ;locate the game file gfile.s=ReadPreferenceString("Game","unsupported") gfile=PeekS(GetString(gfile,"Path","")) ClosePreferences() If OpenPreferences(gfile) ;clear all current settings SetGadgetText(#Join_TFlags,"") ClearGadgetItemList(#JD_Opts) ;fill flag options... A.l=Asc("a") For n=0 To 25 If n>0 And n<10 PreferenceGroup("Display Options") ss.s=ReadPreferenceString(Str(n),"") If Len(ss) AddGadgetItem(#JD_Opts,-1,Str(N)+" "+ss) EndIf EndIf Next n ClosePreferences() ;select the host flags... OpenPreferences(MainPath+SelGame+".host") SetGadgetText(#JD_Flag,ReadPreferenceString("Host","")) gfile=ReadPreferenceString("Game","unsupported") ClosePreferences() SetGadgetState(#JD_Opts,GetInt("gfile","Display",0)) Else MessageRequester("Options","Unsupported game="+gfile,#MB_ICONSTOP) EndIf Else MessageRequester("Options","Unable to open file "+MainPath+SelGame+".host",#MB_ICONSTOP) EndIf EndProcedure Procedure UpdateFileList() ;called after each download ;scan current directory If ExamineDirectory(1,MainPath,"*.host") While NextDirectoryEntry() msg.s=Trim(DirectoryEntryName()) ;see if its in the list yet ResetList(HostGames()) reply=0 While NextElement(HostGames()) If LCase(HostGames()\name+".host")=LCase(msg) reply=1 LastElement(HostGames()) EndIf Wend If reply=0 AddElement(HostGames()) HostGames()\Name=Left(msg,Len(msg)-5) ;now to read the file stuff If OpenPreferences(MainPath+msg) HostGames()\Version=ReadPreferenceString("Version","1") HostGames()\Status=ReadPreferenceString("Status","Waiting") HostGames()\Flag=ReadPreferenceString("Host","") HostGames()\Map=ReadPreferenceString("Map","") HostGames()\GType=ReadPreferenceString("GameType","") HostGames()\Players=ReadPreferenceString("Player","1") HostGames()\Game=ReadPreferenceString("Game","Unknown") HostGames()\ISP=ReadPreferenceString("MyISP","") ClosePreferences() Else MessageRequester("File Update","Unable to open file "+MainPath+msg,#MB_ICONSTOP) EndIf EndIf Wend EndIf ClearGadgetItemList(#Gadget_58) ResetList(HostGames()) line.l=0 While NextElement(HostGames()) AddGadgetItem(#Gadget_58,-1,HostGames()\name) SetGadgetItemText(#Gadget_58,line,HostGames()\Game,1) SetGadgetItemText(#Gadget_58,line,HostGames()\Version,2) SetGadgetItemText(#Gadget_58,line,HostGames()\Status,3) SetGadgetItemText(#Gadget_58,line,HostGames()\Players,4) SetGadgetItemText(#Gadget_58,line,HostGames()\Map,5) SetGadgetItemText(#Gadget_58,line,HostGames()\GType,6) line+1 Wend EndProcedure Procedure.l HandleJoinEvent(GID.l) reply.l=0 Select GID Case #Refresh ;scan ftp site for files SelGame="" ;first delete all local files ExamineDirectory(1,MainPath,"*.host") While NextDirectoryEntry() DeleteFile(MainPath+DirectoryEntryName()) Wend DownLoadFileHost(@File) Case #Fix_Options ;open ftp file and show options If Len(SelGame) GetGameOpts() Else MessageRequester("Join Game Error","No game currently selected",#MB_ICONINFORMATION) EndIf Case #Join_Game ;connect to chat server If Len(SelGame) ;check if game has started... If OpenPreferences(MainPath+SelGame+".host") If ReadPreferenceString("Status","Waiting")="Started" ;simply launch the game app isp.s=ReadPreferenceString("MyISP","") cflag.s=Trim(ReadPreferenceString("HOST","")) If Len(cflag) cflag=cflag+" "+cflag EndIf cflag=Left(cflag,2)+" "+Left(GetGadgetText(#JD_Opts),2) gfile.s=ReadPreferenceString("Game","") ClosePreferences() OpenPreferences(MainPath+"Masterlst.ini") PreferenceGroup(gfile) gfile=ReadPreferenceString("PATH","") ClosePreferences() OpenPreferences(gfile) PreferenceGroup("Specs") gfile=GetPathPart(gfile)+ReadPreferenceString("EXE","") ClosePreferences() If RunProgram(gfile,MyName+" "+isp+cflag,"") End Else MessageRequester("Launch Error","Program "+gfile+" does not exist",#MB_ICONSTOP) EndIf EndIf ClosePreferences() EndIf BeginChat(0) Else MessageRequester("Join game error","No game currently selected",#MB_ICONINFORMATION) EndIf Case #Join_Exit CloseWindow(#Window_Join) reply=1 Case #Join_Help ;some kind of help n=RunProgram("Notepad.exe","Setup.txt","") Case #Join_About ; MessageRequester("Norm's MatchMaker","Search created 02Oct2003 by Norm Perry",#MB_ICONINFORMATION) Default p.l=GetGadgetState(#Gadget_58) If p>=0 sg.s=GetGadgetItemText(#Gadget_58,p,0) sg=Trim(sg) If Len(sg) If sg<>SelGame ;get options for new game... SelGame=sg GetGameOpts() EndIf EndIf EndIf EndSelect ProcedureReturn reply EndProcedure Procedure Search_Game() Open_Window_Join() AddGadgetColumn(#Gadget_58,0,"Game",100) AddGadgetColumn(#Gadget_58,1,"App Name",100) AddGadgetColumn(#Gadget_58,2,"Version",100) AddGadgetColumn(#Gadget_58,3,"Status",50) AddGadgetColumn(#Gadget_58,4,"Players",50) AddGadgetColumn(#Gadget_58,5,"Map Info",200) AddGadgetColumn(#Gadget_58,6,"Game Type",200) ;SetForground() GetCurrentpath() quit.l=0 File\FTPDnLoadDir=MainPath ExamineDirectory(1,MainPath,"*.host") While NextDirectoryEntry() DeleteFile(MainPath+DirectoryEntryName()) Wend DownLoadFileHost(@File) Repeat SetForground() If File\ThreadActive ;just finished downloading a file File\ThreadActive=0 UpdateFileList() EndIf Select WindowEvent() Case #PB_EVENT_CLOSEWINDOW quit=1 Case #PB_EVENT_GADGET quit=HandleJoinEvent(EventGadgetID()) EndSelect Delay(10) Until quit EndProcedure ; ExecutableFormat=Windows ; EOF