Что нового

[HoMM Online] Клик по кнопке автоматического боя

Lepat87

Новичок
Сообщения
12
Репутация
0
Доброго времени суток!
Игра Heroes of Might and Magic Online, сервера китайские, европейский к сожалению закрыли.
Сайт игры
Прошу помощи в выявлении недостающего кода или исправления уже имеющегося.
Собственно сам код:
Код:
Global $sDM = '[Title:Heroes of Might and Magic Online]';
HotKeySet("{ESC}", "Terminate")

Func Terminate()
     Exit 0
EndFunc

Func _Battle()
    If ControlCommand($sDM, "",1462, 'IsVisible') = 1 Then ;=>> "ID=1462 - AutoCombat"
 	  Sleep(500)
    Do
 	  Sleep(500)                                           
 	  ControlClick($sDM, "",1462) 
    Until ControlCommand($sDM, "",1462, 'IsVisible')
    EndIf
EndFunc

Func _Confirm()
	  Sleep(100)  
	  ControlClick($sDM, "", 1480) ;=>> "ID=1480 - ConfirmResult after battle"
EndFunc

While 1
   _Confirm()
Wend


Работа скрипта такова:
1) При входе в бой с мобом скрипт должен нажать на кнопку AutoCombat (ID=1462)
2) После, нажимается кнопка ОК (ID=1480), тем самым быстро закрывая окно результата боя.


Кнопка автокомбата не жмакается совсем. Нужно сделать так, что бы автокомбат нажимался 1 раз в бою и не зацикливался, т.е. при каждом нападении на моба 1 клик по кнопке, еще я думаю, нужно что бы скрипт распозновал когда персонаж вошел в бой.
Есть простой скрипт с бесконечным циклом "While...Wend", но как то он меня не устраивает.
Подскажите в чем недостаток? Если имеются ошибки, тыкните на них (в ходе работы, скрипт ошибок не выдал). Если не хватает чего-то, подскажите.

2й вариант меня устраивает, работает отлично.

P.S. Отредактировал сообщение, разъяснил немного по конкретней чтого что мне нужно.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Автоматизация] HoMM Online autocombat, исправление/дополнение скрипта

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Автоматизация] HoMM Online autocombat, исправление/дополнение скрипта" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.
 
Автор
L

Lepat87

Новичок
Сообщения
12
Репутация
0
Re: [Автоматизация] HoMM Online Бот для автобоя

Исправил :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Автоматизация] HoMM Online Бот для автобоя

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"[Автоматизация] HoMM Online Бот для автобоя" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.











Добавлено:
Сообщение автоматически объединено:

Небольшое FAQ на эту тему:
Q:
DjKoP сказал(а):
Да, правила я все ваши знаю.
Суть я отобразил, но вот вам не нравиться.
Как нужно то? вы к каждому человеку пристаете что тема не правильно названа, вы покажите им чтобы не было ошибок, для чего так да модераторы? чтобы следить и помогать!!!
Вам трудно так подсказать?почему? покажите остальным пример что тут модераторы гаразды не только предупреждение выдавать. вторую тему лично создаю и вторую намереваетесь закрыть без данного мне ответа.

A:
Belfigor сказал(а):
Для слепых, тупых, кривых, и всех кто себя такими не считают но тем не менее у них сейчас каникулы:
dgm3uo.jpg
2n702nt.jpg
167a5v.jpg


Добавлено:
Сообщение автоматически объединено:

Так понятнее?





Добавлено:
Сообщение автоматически объединено:

P.S. С момента написания подсказки правила могли пополниться.
 
Автор
L

Lepat87

Новичок
Сообщения
12
Репутация
0
Re: [HoMM Online] Бот автобоя

Не пинайте сильно :smile: Если все устраивает, удалите лишнее пожалуйста!
Хотя бы намек дали по скрипту и я отвязался бы :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [HoMM Online] Бот автобоя

Игра же вроде бы клиентская, откуда ты узнал ID контроллов?
 
Автор
L

Lepat87

Новичок
Сообщения
12
Репутация
0
Игра же вроде бы клиентская, откуда ты узнал ID контроллов?
Когда то скачивал на этом форуме программу "Control Wiewer" аналог "Autoit window info"
Показывает все доступные id кнопок клиента, к примеру выкладываю скрин.
Выделена красным цветом кнопка "стоп" (id=4097) окшка статуса тренировки заклинаний.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
От цеж лафа, во всех бы играх так. Вообще ни разу не встречал ммо игру в которой так легкодоступны все кнопки.
А если просто отправить ?
Код:
ControlClick($sDM, "",1462)
 
Автор
L

Lepat87

Новичок
Сообщения
12
Репутация
0
От цеж лафа, во всех бы играх так.
Это же китайцы ;D

А если просто отправить ?
Не могли бы вы мне подробно написать, что заменить этой функцией, что лишнее убрать?
Тут нужно какое то условие, чтобы скрипт жмакал на кнопку, как я дополнил первый пост:
нужно что бы скрипт распозновал когда персонаж вошел в бой.

Пробовал так:
Код:
Func _battle()
      Sleep(1000)
      ControlClick($sDM, "",1462) 
EndFunc

Автобой не включается вообще, даже если уже вошел в бой и только потом запустил скрипт

Так:
Код:
Sleep(1000)
      ControlClick($sDM, "",1462)

Тыкает только в первом нападе на моба, последующие не включает автобой.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
Global $sDM = '[Title:Heroes of Might and Magic Online]';
HotKeySet("{ESC}", "Terminate")

Func Terminate()
     Exit 0
EndFunc

Func _Battle()
    If ControlCommand($sDM, "",1462, 'IsVisible') = 1 Then ;=>> "ID=1462 - AutoCombat"
      Sleep(500)
    Do
      Sleep(500)                                          
      ControlClick($sDM, "",1462)
    Until ControlCommand($sDM, "",1462, 'IsVisible')
    EndIf
EndFunc

Func _Confirm()
      Sleep(100)  
      ControlClick($sDM, "", 1480) ;=>> "ID=1480 - ConfirmResult after battle"
EndFunc

While 1
   _Battle()
   _Confirm()
Wend


А так? Не играв в игру я могу лишь на угад предположить что именно там не так, и проблема в конструкции скрипта или же в самой игре.
 
Автор
L

Lepat87

Новичок
Сообщения
12
Репутация
0
Belfigor [?]
Зацикливает нажатие на кнопку автокомбата, этого мне не хотелось бы. Был прогер на европейском сервере, он делал такую плюшку и не только такую, но к сожалению он покину игру очень давно. Так вот он делал скрипты через память чит энжайна, имею сами скрипты *.cea. Проблема в том что ехе файл клиента очень часто обновляется, да и в ассемблере я полный ноль :(
Вобщем спасибо за ответы, не остается выбора больше, как только использовать скрипт с циклом без слипов, так он моментально тыкает на кнопку, хоть что то будет.


Добавлено:
Сообщение автоматически объединено:

Хех один хороший человек дал мне похожий скриптик, определяет что перс находится в бою по ImageSearch

Код:
#include <ImageSearch.au3>
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")

$x=0
$y=0

While 1
	$result=0
	while $result = 0
	$result = _ImageSearch('shield.bmp',1,$x,$y,0)
	wend
	Sleep(500)
	ToolTip('Script is "Running"',0,0)
	ControlClick('Heroes of Might and Magic Online', '',1462)
	while ControlClick('Heroes of Might and Magic Online', '',1480) =0
	wend
	ControlClick($sDM, "",1480)

	
WEnd
;;;;;;;;

Func TogglePause()
	$Paused = NOT $Paused
	While $Paused
		sleep(100)
		ToolTip('Script is "Paused"',0,0)
	WEnd
	ToolTip("")
EndFunc

Func Terminate()
	Exit 0
EndFunc

Можно ли заменить поиск изоброжения чем то другим? Например какой нибудь кнопкой?

Например так:
Код:
Global $sDM = '[Title:Heroes of Might and Magic Online]';
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")

While 1
	$result=0
	WinActivate($sDM)
	while $result = 0
	$result = ControlCommand($sDM,'',1462,'IsEnabled','')
	wend
	Sleep(2000)
	ControlClick($sDM, '',1462)
	while ControlClick($sDM, '',1480) =0
	wend
	ControlClick($sDM, '',1480)
WEnd

Func TogglePause()
	$Paused = NOT $Paused
	While $Paused
		sleep(100)
		ToolTip('Script is "Paused"',0,0)
	WEnd
	ToolTip("")
EndFunc

Func Terminate()
	Exit 0
EndFunc


Добавлено:
Сообщение автоматически объединено:

кажется подойдет... :smile:
 
Верх