Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Tools

Development::Tools 3rd Party Tools for EQEMu (DB management tools, front ends, etc...)

Reply
 
Thread Tools Display Modes
  #1  
Old 12-26-2007, 05:11 PM
Knightly
Accomplished Programmer
 
Join Date: Nov 2006
Location: Honolulu, HI
Posts: 91
Default Wrapper to start EQEmu on Windows

I wrote this vbscript a while back when I kept getting annoyed that my batch file was taking too long. It doesn't have Angelox's Day/Night scripts, but that wouldn't be too hard to add.

It's also an example of bad coding because most everything is hard-coded. But if anyone wants it, here it is . I used to use it in a login script for my EQEmulator Server that would auto-login and lock the screen.

Code:
numSecondsToSleep = 10 'Number of seconds to sleep before continuing to launch programs
numMinutesWorldTimeout = 5 'How many minutes should we give World to connect to the login server before we give up
Const ForReading = 1

'Get the arguments
Set objArgs = WScript.Arguments
If objArgs.Count > 0 Then
   	If InStr(objArgs(0), ":\") or InStr(objArgs(0), "\\") Then
    	strPathToEQEmuFolder = objArgs(0)
	End If
End If

If InStr(strPathToEQEmuFolder, ":\") > 0 or InStr(strPathToEQEmuFolder, "\\") > 0 Then
	binDoCleanup = True
	
	'Fix the path if needed
	If Right(strPathToEQEmuFolder, 1) = "\" Then
		'Do nothing
	Else
		strPathToEQEmuFolder = strPathToEQEmuFolder & "\"
	End If
	
	Set objFSO = CreateObject("Scripting.FileSystemObject")
	'Check to make sure the path to the stored files exists
	If True = objFSO.FolderExists(strPathToEQEmuFolder) Then
		Set objShell = CreateObject("WScript.Shell")
		objShell.CurrentDirectory = strPathToEQEmuFolder
		strPathToMiniLogin = strPathToEQEmuFolder & "MiniLogin.exe"
		'If we were provided with the path to wget.exe and it exists, then make sure it exists
		If True = objFSO.FileExists(strPathToMiniLogin) Then
			strPathToWorld = strPathToEQEmuFolder & "world.exe"
			If True = objFSO.FileExists(strPathToWorld) Then
				strPathToEQLaunch = strPathToEQEmuFolder & "eqlaunch.exe"
				If True = objFSO.FileExists(strPathToEQLaunch) Then
					'Correct for Spaces in the File Names
					If InStr(strPathToMiniLogin, " ") Then
						strPathToMiniLoginShell = chr(34) & strPathToMiniLogin & chr(34)
					Else
						strPathToMiniLoginShell = strPathToMiniLogin
					End If
					
					If InStr(strPathToWorld, " ") Then
						strPathToWorldShell = chr(34) & strPathToWorld & chr(34)
					Else
						strPathToWorldShell = strPathToWorld
					End If
					
					If InStr(strPathToEQLaunch, " ") Then
						strPathToEQLaunchShell = chr(34) & strPathToEQLaunch & chr(34)
					Else
						strPathToEQLaunchShell = strPathToEQLaunch
					End If
					
					'Start MiniLogin
					objShell.Exec(strPathToMiniLoginShell)
					Wscript.Sleep numSecondsToSleep * 1000
					If True = ProcessIsRunning("MiniLogin.exe") Then
						'Start World
						objShell.Exec(strPathToWorldShell)
						Wscript.Sleep numSecondsToSleep * 1000
						If True = ProcessIsRunning("World.exe") Then
							'Find the debug log for World
							Set objFolder = objFSO.GetFolder(strPathToEQEmuFolder & "logs")
							Set objLogFiles = objFolder.Files
							dateCurrentWorldLog = CDate("01/01/0000 00:00:00 PM")
							For Each curFile in objLogFiles
								If InStr(lcase(curFile.Name), "debug_world") Then
									If curFile.DateLastModified > dateCurrentWorldLog Then
										strPathToCurrentWorldLog = curFile.Path
										dateCurrentWorldLog = curFile.DateLastModified
									End If
								End If
							Next
							If dateCurrentWorldLog <> CDate("01/01/0000 00:00:00 PM") Then
								If objFSO.FileExists(strPathToCurrentWorldLog) Then
									i = 0
									binConnected = False
									Do
										Wscript.Sleep numSecondsToSleep * 1000
										i = i + numSecondsToSleep
										Set objCurrentWorldLog = objFSO.OpenTextFile(strPathToCurrentWorldLog, ForReading)
										strCurrentWorldLog = objCurrentWorldLog.ReadAll
										objCurrentWorldLog.Close
										If InStr(strCurrentWorldLog, "[WORLD__LS] Connected to Loginserver:") Then
											binConnected = True
										End If
									Loop Until i > (numMinutesWorldTimeout * 60) or True = binConnected
									
									If True = binConnected Then
										objShell.Exec(strPathToEQLaunchShell & " zone")
										Wscript.Sleep numSecondsToSleep * 1000
										If True = ProcessIsRunning("eqlaunch.exe") Then
											Wscript.Sleep numSecondsToSleep * 1000
											If True = ProcessIsRunning("zone.exe") Then
												varResponse = MsgBox("Your EQEmulator Server should now be running.  Do you want to shut it down?", vbYesNo + vbInformation + vbDefaultButton2, "EQEmulator Wrapper")
												If vbNo = varResponse Then
													binDoCleanup = False
												End If
											Else
												Wscript.Echo "ERROR - zone.exe did not start."
											End If
										Else
											Wscript.Echo "ERROR - Could not start eqlaunch.exe"
										End If
									Else
										Wscript.Echo "ERROR - Timed out while waiting for Loginserver connection: " & numMinutesWorldTimeout & " minute timeout."
									End If
								Else
									Wscript.Echo "ERROR - The system reports that the current log file does not exist: " & strPathToCurrentWorldLog
								End if
							Else
								Wscript.Echo "ERROR - Could not find the date of the latest log file in " & strPathToEQEmuFolder & "logs"
							End If
						Else
							Wscript.Echo "ERROR - Could not start world.exe"
						End If
					Else
						Wscript.Echo "ERROR - Could not start minilogin.exe"
					End If
				Else
					Wscript.Echo "ERROR - eqlaunch.exe is required for this script and was not found."
				End If
			Else
				Wscript.Echo "ERROR - world.exe is required for this script and was not found."
			End If
		Else
			Wscript.Echo "ERROR - MiniLogin.exe is required for this script and was not found."
		End If
	Else
		Wscript.Echo "ERROR - The EQ Emulator Folder does not exist:  " & strPathToEQEmuFolder
	End If
	
	If True = binDoCleanup Then
		strComputer = "."
		Set objWMIService = GetObject("winmgmts:" _
			& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
		Set colProcess = objWMIService.ExecQuery _
			("SELECT * FROM Win32_Process")
		For Each objProcess in colProcess
			If "zone.exe" = LCase(objProcess.Name) or "world.exe" = LCase(objProcess.Name) or "eqlaunch.exe" = LCase(objProcess.Name) or "minilogin.exe" = LCase(objProcess.Name) Then
				objProcess.Terminate()
			End If
		Next
	End If
Else
	Wscript.Echo Wscript.ScriptName & vbcrlf & _
				 vbtab & "by: Knightly" & vbcrlf & _
				 vbtab & "Last Updated: 2007-09-03" & vbcrlf & _
				 vbcrlf & _
				 "Requirements:" & vbtab & "(File)" & vbtab & vbtab & "(Minimum Version)" & vbcrlf & _
				 		vbtab & vbtab & "MiniLogin.exe" & vbtab & vbtab & "0.6.2" & vbcrlf & _
						vbtab & vbtab & "World.exe" & vbtab & vbtab & "0.7.0" & vbcrlf & _
						vbtab & vbtab & "EQLaunch.exe" & vbtab & vbtab & "0.7.0" & vbcrlf & _
				 vbcrlf & _
				 "This script will start MiniLogin.exe, start World.exe and wait for a connection " & _
				 "to the login server, then start EQLaunch.exe zone.  Finally, it will give you a " & _
				 "dialog box that you can use to stop the server. " &  vbcrlf & _
				 vbcrlf & _
				 "Syntax:" & vbcrlf & _
				 vbtab & vbtab & Wscript.ScriptName & " PathToEQEmuFolder" & vbcrlf & _
				 "Example:" & vbcrlf & _
				vbtab & vbtab & Wscript.ScriptName & " C:\EQEmu" & vbcrlf
End If

Function ProcessIsRunning(strProcessToCheck)
	ProcessIsRunning = False
	strComputer = "."
	Set objWMIService = GetObject("winmgmts:" _
		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
	Set colProcess = objWMIService.ExecQuery _
		("SELECT * FROM Win32_Process")
	For Each objProcess in colProcess
		If LCase(objProcess.Name) = LCase(strProcessToCheck) Then
			ProcessIsRunning = True
			Exit Function
		End If
	Next
End Function
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 11:10 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3