Что нового

Повторное исполнение скрипта

Olim98

Новичок
Сообщения
48
Репутация
2
Всем доброго времени суток!
Много времени потратил на то чтобы правильно описать проблему, но даже так сомневаюсь что описал правильно, поэтому извините!

Вообщем решил я написать лаунчер для игры на AutoIt, поначалу все шло хорошо, но потом возникла проблема. К лаунчеру подключена dll и у нее имеется callback функция, я ее установил в скрипте, после ее исполнения скрипт начинает исполнять код с самого начала, то есть с #include и т.д. Причину ищу уже 2 дня, если кто знает подскажите пожалуйста, буду бесконечно благодарен.

Вот сам код:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable
#AutoIt3Wrapper_Run_Debug_Mode=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;~ #include <Debug.au3>
;~ _DebugSetup("BF3 Лаунчер - Отладка", True, 1, Default, True)

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$BF3Launcher = GUICreate("Battlefield 3 Launcher", 615, 438, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "BF3LauncherClose")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "BF3LauncherMinimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "BF3LauncherMaximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "BF3LauncherRestore")
$MemoLog = GUICtrlCreateEdit("", 24, 72, 153, 337)
GUICtrlSetOnEvent($MemoLog, "MemoLogChange")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Func MemoWrite($sData, $fCRLF = True)
	GUICtrlSetData($MemoLog, $sData, 2131321321321)
	If $fCRLF Then GUICtrlSetData($MemoLog, @CRLF, 1)
	Return
EndFunc   ;==>MemoWrite
;~ _DebugReport("Открытие ZloDll")
$hDLL = DllOpen("Launcher.dll")
;~ _DebugReport("Результат:" & $hDLL)
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Инициализация ZloDll")
DllCall($hDLL, "none:cdecl", "ZLO_Init")
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Создание Callback")
$hEventListener = DllCallbackRegister("EventListener", "none:cdecl", "int")
;~ $hClientListener = DllCallbackRegister("ClientListener", "none:cdecl", "str,str")
;~ _DebugReport("")

;~ _DebugReport("Установка Callback в ZloDll")
DllCall($hDLL, "none:cdecl", "ZLO_SetEventListener", "ptr", DllCallbackGetPtr($hEventListener))
Sleep(2000)
;~ DllCall($hDLL, "none:cdecl", "ZLO_SetClientListener", "ptr", DllCallbackGetPtr($hClientListener))
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Проверка доступности порта")
$aListenGOS = DllCall($hDLL, "bool:cdecl", "ZLO_ListenGOS")
;~ _DebugReportVar("Результат", $aListenGOS[0])
;~ _DebugReport("")
Sleep(2000)
;~ _DebugReport("Подключение к серверу эмулятора")
$aConnect = DllCall($hDLL, "bool:cdecl", "ZLO_ConnectMClient", "str", "zlofenix.org")
;~ _DebugReportVar("Результат", $aConnect[0])
;~ _DebugReport("")
Sleep(2000)
If $aConnect[0] Then
;~ 	_DebugReport("Авторизация пользователя")
;~ 	DllCall($hDLL, "none:cdecl", "ZLO_AuthClient", "str", "*****@**.**", "str", "*****")
;~ 	_DebugReport("")
Sleep(0200)
;~ 	_DebugReport("Выбор сервера")
;~ 	DllCall($hDLL, "none:cdecl", "ZLO_SelectServer", "int", "1454")
;~ 	_DebugReport("")

Else

EndIf
;~ $aRun = DllCall($hDLL, "bool:cdecl", "ZLO_RunClient")
While 1
	Sleep(10000)
WEnd


Func EventListener($iEvent)

	#cs
		0 - Auth success
		1 - Auth error
		2 - Old LaucherDLL
		3 - Server select ok
		4 - server select not found - error 1
		5 - server select full - error 2
		6 - server select not ready - error 3
		23 - server list begin
		24 - server list end
		27 - launcher(client) disconnected from master
		28 - mclient timeouted and disconnected
#ce
	Switch $iEvent
		Case 0
			MemoWrite("Auth success")
			DllCall($hDLL, "none:cdecl", "ZLO_GetServerList")
		Case 1
			MemoWrite("Auth error")
		Case 2
			MemoWrite("Old Launcher.dll")
		Case 3
			MemoWrite("Server select ok")
		Case 4
			MemoWrite("server select not found")
		Case 5
			;
		Case 6
			;
		Case 23
			;
		Case 24
			;
		Case 27
			MemoWrite("Disconnected from master")
		Case 28
			MemoWrite("Master timeout and disconnected")
		Case 666
			;
		Case Else
			;
	EndSwitch
Return
;~ 	MemoWrite($iEvent)
EndFunc   ;==>EventListener

Func ClientListener($sType, $sValue)
	MemoWrite("[" & $sType & "]" & $sValue)
EndFunc

Func BF3LauncherClose()
	GUIDelete($BF3Launcher)
	DllCall($hDLL, "none:cdecl", "ZLO_Close")
	DllCallbackFree($hEventListener)
	DllClose($hDLL)
	Exit
EndFunc   ;==>BF3LauncherClose

Func BF3LauncherMaximize()

EndFunc   ;==>BF3LauncherMaximize

Func BF3LauncherMinimize()

EndFunc   ;==>BF3LauncherMinimize

Func BF3LauncherRestore()

EndFunc   ;==>BF3LauncherRestore

Func MemoLogChange()

EndFunc   ;==>MemoLogChange
Щелкните сюда http://rghost.ru/56617992 чтобы скачать DLL необходимую для работы скрипта. Запускать скрипт лучше с SciTe чтобы видеть исполняемый код в консоли. Чтобы получить эту проблему, после входа скрипта в бесконечный цикл подождите секунд 20-25. Если же ничего не произойдет, перезапустите его
 
Верх