Что нового

Общение с 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

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

JimmyN

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

lirikmel

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

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

JimmyN

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

Belfigor

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

Wfaut

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

TYTAHXAMOH

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