Что нового

Общение с GUI интерфейсом WoW

JimmyN

Новичок
Сообщения
20
Репутация
0
Я написал простенький скрипт релоггера для бота которым пользуюсь в вове...
Единственно что незнаю как организовать механизм выбора персонажа. Проблема в том что каретка выбора персонажа всегда остаётся на месте последнего за которого заходил, на данный момент мой скрипт жмёт просто Enter, а я хочу сделать чтобы он выбирал персонажа, по имени скажем. Как вытащить значение имени из памяти я разобрался, точнее как получить его числовой эквивалент а вот что делать дальше не представляю.

Вот скрипт целиком
Код:
[spoiler][box title=TitleBox]

AutoItSetOption("WinTitleMatchMode", 4)
;AutoItSetOption("ExpandVarStrings", 0)
AutoItSetOption("SendKeyDelay", 20)
AutoItSetOption("SendKeyDownDelay", 20)

#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>


Opt("GUIOnEventMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayOnEventMode",1)


Global $iRelogger
Global $iLogin
Global $iClicker
Global $StopClick
Global $iPaused

TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE,"Show")
TraySetClick (8)

$settings_ini = @ScriptDir & "\Settings.ini"
$char_ini = IniRead($settings_ini, "", "$char", "Персонаж")

#region Главное окно
$mainwindow = GUICreate($char_ini, 154, 215)
GUISetBkColor(0x808080)

$settings = GUICtrlCreateButton("Настройки", 2, 157, 72)
$login = GUICtrlCreateButton("Логин", 2, 185, 72)
$relogger = GUICtrlCreateButton("Релоггер", 80, 185, 72)
$list = GUICtrlCreateList("", 1, 1, 152, 135)
$clicker = GUICtrlCreateButton("Кликер", 80, 157, 72)
$pause_button = GUICtrlCreateButton("Пауза", 2, 130, 150)

GUICtrlSetOnEvent($login, "Login_Event")
GUICtrlSetOnEvent($relogger, "Relogger_Event")
GUICtrlSetOnEvent($settings, "Settings")
GUICtrlSetOnEvent($clicker, "Clicker")
GUICtrlSetOnEvent($pause_button, "_PauseScript")
GUISetOnEvent($GUI_EVENT_CLOSE, "Exiting")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Tray")
GUISetState(@SW_SHOW, $mainwindow)

#endregion Главное окно

#region Настройки
$setwindow = GUICreate("Настройки", 260, 300)
GUISetBkColor(0x808080)

$acc_ini = IniRead($settings_ini, "", "$acc", "Логин")
$pass_ini = IniRead($settings_ini, "", "$pass", "Пароль")
$char_ini = IniRead($settings_ini, "", "$char", "Персонаж")
$bnet_ini = IniRead($settings_ini, "", "$bnet", "")
$wowpath_ini = IniRead($settings_ini, "", "$browse_wow", "Путь к WoW")
$botpath_ini = IniRead($settings_ini, "", "$browse_bot", "Путь к Боту")
$bnet_nini = IniRead($settings_ini, "", "$bnet_n", "")
$lvl_ini = IniRead($settings_ini, "", "$lvl", "lvl")


$acc_input = GUICtrlCreateInput($acc_ini, 20, 20, 200, 20)
$pass_input = GUICtrlCreateInput($pass_ini, 20, 50, 200, 20, $ES_PASSWORD)
$wowpath = GUICtrlCreateInput($wowpath_ini, 20, 100, 200, 20)
$browse_button1 = GUICtrlCreateButton("...", 230, 100, 20, 20)
$botpath = GUICtrlCreateInput($botpath_ini, 20, 130, 200, 20)
$browse_button2 = GUICtrlCreateButton("...", 230, 130, 20, 20)
$char_input = GUICtrlCreateInput($char_ini, 20, 180, 120, 20)
$bnet_check = GUICtrlCreateCheckbox("Battlenet", 20, 220)
$bnet_ncheck = GUICtrlCreateCombo("", 90, 220, 40, 20)
$save = GUICtrlCreateButton("Сохранить", 140, 260, 80, 20)
GUICtrlSetData($bnet_ncheck, "1|2|3|4|5", $bnet_nini)
$lvl_input = GUICtrlCreateInput($lvl_ini, 170, 180, 50, 20)

GUICtrlCreateLabel("№ Battlenet аккаунта", 138, 225 )
GUICtrlSetState($bnet_check, $bnet_ini)
GUISetOnEvent($GUI_EVENT_CLOSE, "Exiting")
GUICtrlSetOnEvent($browse_button1, "WoW_path")
GUICtrlSetOnEvent($browse_button2, "Bot_path")
GUICtrlSetOnEvent($save, "Save")

#endregion Настройки

#region Кликер
$clickwindow = GUICreate("Кликер", 141, 70)
GUISetBkColor(0x808080)

$key_ini = IniRead($settings_ini, "", "$key", "Кнопка")
$deley_ini = IniRead($settings_ini, "", "$deley", "Таймаут")

$key_input = GUICtrlCreateInput($key_ini, 10, 8, 50, 20)
$deley_input = GUICtrlCreateInput($deley_ini, 80, 8, 50, 20)
$start = GUICtrlCreateButton("Старт", 10, 40, 50, 20, $WS_GROUP)
$stop = GUICtrlCreateButton("Стоп", 80, 40, 50, 20, $WS_GROUP)
GUICtrlSetOnEvent($start, "Clicker_Event")
GUICtrlSetOnEvent($stop, "Clicker_Stop")
GUISetOnEvent($GUI_EVENT_CLOSE, "Exiting")
#endregion Кликер

#region Переменные
$acc = GUICtrlRead($acc_input)
$pass = GUICtrlRead($pass_input)
$char = GUICtrlRead($char_input)
$bnet = GUICtrlRead($bnet_check)
$browse_wow = GUICtrlRead($wowpath)
$browse_bot = GUICtrlRead($botpath)
$bnet_n = GUICtrlRead($bnet_ncheck)
$lvl = GUICtrlRead($lvl_input)
$winname = $acc
$str = StringLen($char)
$str2 = StringLeft($char, $str - 2)
$id = $str2 & " - " & $lvl
#endregion Переменные

TraySetToolTip ($char)

Func WoW_path()
	$browse_wow = FileOpenDialog("Open", "C:\", "(*.exe)", 1)
	GUICtrlDelete($wowpath)
	$path_input = GUICtrlCreateInput($browse_wow, 20, 100, 200, 20)
EndFunc   ;==>WoW_path

Func Bot_path()
	$browse_bot = FileOpenDialog("Open", "C:\", "(*.exe)", 1)
	GUICtrlDelete($botpath)
	$path_input = GUICtrlCreateInput($browse_bot, 20, 130, 200, 20)
EndFunc   ;==>Bot_path

Func Save()
	$acc = GUICtrlRead($acc_input)
	$pass = GUICtrlRead($pass_input)
	$char = GUICtrlRead($char_input)
	$bnet = GUICtrlRead($bnet_check)
	$browse_wow = GUICtrlRead($wowpath)
	$browse_bot = GUICtrlRead($botpath)
	$bnet_n = GUICtrlRead($bnet_ncheck)
	$lvl = GUICtrlRead($lvl_input)
	$winname = $acc

	IniWrite($settings_ini, "", "$acc", $acc)
	IniWrite($settings_ini, "", "$pass", $pass)
	IniWrite($settings_ini, "", "$char", $char)
	IniWrite($settings_ini, "", "$bnet", $bnet)
	IniWrite($settings_ini, "", "$browse_wow", $browse_wow)
	IniWrite($settings_ini, "", "$browse_bot", $browse_bot)
	IniWrite($settings_ini, "", "$bnet_n", $bnet_n)
	IniWrite($settings_ini, "", "$lvl", $lvl)

	GUISetState(@SW_HIDE, $setwindow)

EndFunc   ;==>Save

Func _PauseScript()
    $iPaused = Not $iPaused
if $iPaused then
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Пауза")
Else
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Продолжаем")
	EndIf
EndFunc

Func _CheckPause()
    While $iPaused
        Sleep(100)
    WEnd
EndFunc

Func Settings()
	GUISwitch($setwindow)
	GUISetState(@SW_SHOW, $setwindow)
EndFunc   ;==>Settings

Func Clicker()
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Кликер")
	GUISwitch($clickwindow)
	GUISetState(@SW_SHOW, $clickwindow)
EndFunc   ;==>Clicker

Func Clicker_Event()
	$key = GUICtrlRead($key_input)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Жмём" & " < " & $key & " >")
	$iClicker = 1
	$StopClick = 0
EndFunc   ;==>Clicker_Event

Func Clicker_Stop()
	$key = GUICtrlRead($key_input)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Не жмём" & " < " & $key & " >")
	$StopClick = 1
EndFunc   ;==>Clicker_Stop

Func Clicker_func()
	$key = GUICtrlRead($key_input)
	$deley = GUICtrlRead($deley_input)
	IniWrite($settings_ini, "", "$key", $key)
	IniWrite($settings_ini, "", "$deley", $deley)
	While $StopClick <> 1
		ControlSend($winname, "", "", $key)
		Sleep($deley)
	WEnd
EndFunc   ;==>Clicker_func

Func Tray()
	If @GUI_WinHandle = $mainwindow Then
		GUISetState(@SW_HIDE, $mainwindow)
	EndIf
EndFunc

Func Show()
		GUISetState(@SW_SHOW, $mainwindow)
EndFunc

Func Exiting()
	If @GUI_WinHandle = $mainwindow Then
		GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Выход")
		Sleep(300)
		Exit (0)
	ElseIf @GUI_WinHandle = $clickwindow Then
		GUISetState(@SW_HIDE, $clickwindow)
	ElseIf @GUI_WinHandle = $setwindow Then
		GUISetState(@SW_HIDE, $setwindow)
	EndIf
EndFunc   ;==>Exiting

Func Login_Event()
	$iLogin = 1
EndFunc   ;==>Login_Event

Func Login()
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Запуск WoW")
	Run($browse_wow)
	WinWait("World of Warcraft")
	_CheckPause()
	Sleep(Random(10000, 20000))
	WinSetTitle("World of Warcraft", "", $winname)
	Sleep(100)
	WinMove($winname, "", 0, 0, 328, 270)
	_CheckPause()
	Sleep(5000)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Логин")
	_CheckPause()
	Sleep(Random(1000, 5000))
	$temp = ClipGet()
	ClipPut($acc)
	Sleep(100)
	ControlSend($winname, "", 0, "{CTRLDOWN}v{CTRLUP}")
	ClipPut($temp)
	_CheckPause()
	Sleep(1000)
	ControlSend($winname, "", "", "{TAB}")
	_CheckPause()
	Sleep(1000)
	ClipPut($pass)
	_CheckPause()
	Sleep(500)
	ControlSend($winname, "", 0, "{CTRLDOWN}v{CTRLUP}")
	ClipPut($temp)
	_CheckPause()
	Sleep(1000)
	ControlSend($winname, "", "", "{ENTER}")
	_CheckPause()
	Sleep(3000)

	If $bnet = $GUI_CHECKED Then
		If $bnet_n = 1 Then
			ControlSend($winname, "", "", "{ENTER}")
			_CheckPause()
			Sleep(3000)
		ElseIf $bnet_n = 2 Then
			ControlSend($winname, "", "", "{DOWN}")
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{ENTER}")
		ElseIf $bnet_n = 3 Then
			ControlSend($winname, "", "", "{DOWN 2}")
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{ENTER}")
		ElseIf $bnet_n = 4 Then
			ControlSend($winname, "", "", "{DOWN 3}")
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{ENTER}")
		ElseIf $bnet_n = 5 Then
			ControlSend($winname, "", "", "{DOWN 4}")
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{ENTER}")
		EndIf
	EndIf
	_CheckPause()
	Sleep(10000)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Загрузка мира")
	_CheckPause()
	Sleep(1000)
	ControlSend($winname, "", "", "{ENTER}")
	_CheckPause()
	Sleep(30000)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Запуск бота")
	Run($browse_bot)
	WinWait("Select process")
	_CheckPause()
	Sleep(1000)
	WinSetTitle("Select process", "", $char)
	;ControlClick("Select process", "Attach", "[CLASS:WindowsForms10.Window.8.app.0.378734a; INSTANCE:2]","left")
	;Sleep(5000)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Выберите процесс")
	WinWait("Ready", $id)
	_CheckPause()
	Sleep(5000)
	$title = WinGetHandle("[CLASS:WindowsForms10.Window.8.app.0.378734a]", $id)
	_CheckPause()
	Sleep(1000)
	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & "   Готово")
	_CheckPause()
	Sleep(1000)

EndFunc   ;==>Login

Func Relogger_Event()
	$iRelogger = 1
EndFunc   ;==>Relogger_Event

Func Relogger()

	GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Релоггер запущен")

	While 1
		_CheckPause()
		Sleep(1000)

		Do
			Sleep(100)
			$var = Ping("www.mail.ru", 1000)
		Until $var

		$title2 = WinGetHandle("[CLASS:WindowsForms10.Window.8.app.0.378734a]", $id)
		$line = ControlCommand($title2, "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]", "GetLineCount", "")
		$txt = ControlCommand($title2, "", "[CLASS:WindowsForms10.RichEdit20W.app.0.378734a; INSTANCE:1]", "GetLine", $line - 1)
		$result = StringRegExp($txt, "Bot stopped", 0)
		$result2 = StringRegExp($txt, "Please ress before starting the bot", 0)
		$result3 = StringRegExp($txt, "this is not optional!", 0)
		$result4 = StringRegExp($txt, "Please enter the world", 0)
		$result5 = StringRegExp($txt, "Attached", 0)
		$result6 = StringRegExp($txt, "Please login", 0)

		If $result3 = 1 Then
			_CheckPause()
			$title2 = WinGetHandle("[CLASS:WindowsForms10.Window.8.app.0.378734a]", $id)
			ControlClick($title2, "Stop botting", "[CLASS:WindowsForms10.Window.8.app.0.378734a; INSTANCE:13]", "left")
			GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Перезапуск")
			ControlClick($title2, "Start botting", "[CLASS:WindowsForms10.Window.8.app.0.378734a; INSTANCE:13]", "left")
		ElseIf $result = 1 Then
			_CheckPause()
			$title2 = WinGetHandle("[CLASS:WindowsForms10.Window.8.app.0.378734a]", $id)
			GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Запуск бота")
			ControlClick($title2, "Start botting", "[CLASS:WindowsForms10.Window.8.app.0.378734a; INSTANCE:13]", "left")
		ElseIf $result4 = 1 Or $result6 = 1 Then
			_CheckPause()
			$title2 = WinGetHandle("[CLASS:WindowsForms10.Window.8.app.0.378734a]", $id)
			GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Дисконект")
			_CheckPause()
			Sleep(5000)
			ControlSend($winname, "", "", "{ENTER}")
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{Backspace 50}")
			_CheckPause()
			Sleep(5000)
			GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Логин")
			_CheckPause()
			Sleep(Random(1000, 5000))
			$temp = ClipGet()
			ClipPut($acc)
			_CheckPause()
			Sleep(500)
			ControlSend($winname, "", 0, "{CTRLDOWN}v{CTRLUP}")
			ClipPut($temp)
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{TAB}")
			_CheckPause()
			Sleep(1000)
			ClipPut($pass)
			_CheckPause()
			Sleep(500)
			ControlSend($winname, "", 0, "{CTRLDOWN}v{CTRLUP}")
			ClipPut($temp)
			_CheckPause()
			Sleep(1000)

			If $bnet = $GUI_CHECKED Then
				If $bnet_n = 1 Then
					ControlSend($winname, "", "", "{ENTER}")
					_CheckPause()
					Sleep(3000)
				ElseIf $bnet_n = 2 Then
					ControlSend($winname, "", "", "{DOWN}")
					_CheckPause()
					Sleep(1000)
					ControlSend($winname, "", "", "{ENTER}")
				ElseIf $bnet_n = 3 Then
					ControlSend($winname, "", "", "{DOWN 2}")
					_CheckPause()
					Sleep(1000)
					ControlSend($winname, "", "", "{ENTER}")
				ElseIf $bnet_n = 4 Then
					ControlSend($winname, "", "", "{DOWN 3}")
					_CheckPause()
					Sleep(1000)
					ControlSend($winname, "", "", "{ENTER}")
				ElseIf $bnet_n = 5 Then
					ControlSend($winname, "", "", "{DOWN 4}")
					_CheckPause()
					Sleep(1000)
					ControlSend($winname, "", "", "{ENTER}")
				EndIf
			EndIf

			ControlSend($winname, "", "", "{ENTER}")
			_CheckPause()
			Sleep(10000)
			GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & " Загрузка персонажа")
			_CheckPause()
			Sleep(1000)
			ControlSend($winname, "", "", "{ENTER}")
			_CheckPause()
			Sleep(30000)

		ElseIf $result5 = 1 Then
			$title2 = WinGetHandle("[CLASS:WindowsForms10.Window.8.app.0.378734a]", $id)
			GUICtrlSetData(6, @HOUR & ":" & @MIN & ":" & @SEC & "   Запуск бота")
			ControlClick($title2, "Start botting", "[CLASS:WindowsForms10.Window.8.app.0.378734a; INSTANCE:13]", "left")
		EndIf
	WEnd

EndFunc   ;==>Relogger

While 1
	Sleep(500)

	If $iRelogger Then
		$iRelogger = 0
		Relogger()
	ElseIf $iLogin Then
		$iLogin = 0
		Login()
	ElseIf $iClicker Then
		$iClicker = 0
		Clicker_func()
	EndIf

WEnd[/box][/spoiler]
 

lirikmel

Продвинутый
Сообщения
225
Репутация
84
мм... может я не заметил..но я не увидел в скрипте кусок памяти с именем...но поидее в этом нет ведь ничего сложного проверка адреса на наличие определенных символов(имени)персонажа ..и если совпадает то enter
 
Автор
JimmyN

JimmyN

Новичок
Сообщения
20
Репутация
0
Я вообще механизм не понимаю как это сделать. Если не трудно разьясни. В принципе я думаю проще сделать чтоб он скрипт выбирал перса по номеру в списке но вот проблема ползунок остается на последнем за которого заходил и как сделать чтоб скрипт из любого положения возвращал каретку к персонажу с номером 1 я не знаю...
 

lirikmel

Продвинутый
Сообщения
225
Репутация
84
ты говорил что нашел значение в памяти с именем персонажа для выбора ....покажи таблицу СE

ПС.а разве выбор персонажа стрелками с клавиатуры не работает ?
 
Автор
JimmyN

JimmyN

Новичок
Сообщения
20
Репутация
0
Работает, я нашел очень много разных значений которые можно использовать но суда по всему адреса меняются когда перезапускаешь клиент. проблема в том что мне нужно чтобы скрипт выбирал игрока с определенным ником, номером. не важно в не зависимости от того в каком положение каретка выбора персонажа. скажем каретка на 2 персонаже а мне нужен 4, я нашел значения в памяти которые указывают на номер персонажа но адрес почему то меняется каждый раз когда перезапускаю клиент. возможно потому что это данные с сервера, а если не знаешь где ползунок соответственно не знаешь сколько раз нужно нажать стрелочку чтоб попасть на нужного персонажа.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 593
Репутация
938
Ищи статический адрес.
 

Wfaut

Новичок
Сообщения
6
Репутация
4
Офигеть!
Это называется решено?!
Где решение то?
 

TYTAHXAMOH

Новичок
Сообщения
1
Репутация
0
автор а ты попробуй чтобы при входе просто происходил клик на первого персонажа а там уже стрелками переходи куда нужно
 
Верх