Что нового

[Автоматизация] Martial Empires - MaBot v 0.2.5 (by kry) - FROZEN !!!

kry

Новичок
Сообщения
14
Репутация
4
Upadate #1
Такс только что сам понял 1 ошибку
Код:
while $attack=1
use_skills()
WEnd
это получается вечный цикл )))
Щас будем править.

Нужна помощь дальше
не работают условия

Если low_hp=1 и aggro()=0
attack=0
meditation=1
Upadate #2
Кое что поменял, бот только что вроде бы сделал все как нужно, но дальше не успел проверить, сервер выключили на небольшое время.
Буду ждать Апа.
Upadate #3
Все равно не работает условие если мало хп и нет агро юзать медитацию.
Жду помощи.
Upadate #4
Бот работает( но все же он сильно специфичен )
Upadate #5
Прикрепил "тултипы" чтобы было легче делать отладку, да и для наглядности.
Делаю GUI интерфейс, + запуск ,пауза и остановка через нажатие кнопок.
По понятным причнинам исходник выкладывать не буду.
Буду выкладывать лишь те куски ,которые не могу реализовать.
Upadate #6
Теперь хп и мп чара беру из адреса памяти, благо он всегда один и тот же )))
Upadate #7
Уже 229 строк ) + начал цеплять GUI
botmf.jpg


Upadate #8
- Немного поправлен код ( 300 строк )
- Если во время медитации нас атакует моб, мы его убиваем, далее продолжаем Медитацию.
- Время медитации так же указывается в интерфейсе.
- Если мы добиваем моба(сработало условие hp< хп_когда_используем_медитацию), и хп опускается ниже введенного, используем банки.

bot02.jpg

Upadate #9
Хп моба беру из памяти (спс lirikmel)
Определение х,у - коорд.
______Upadate #10______
Теперь умею посылать нажатия кнопок в неактивное окно )
______Upadate #11______
Разработка временно приостановлена, жду хака системы защиты.
В связи с этим выкладываю исходник....

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <nomadmemory.au3>

;GLOBAL VARIABLES SECTION ==========================================================================
Global $botting = 0 ; Ботим , или нет.
Global $attack=0,$meditation=0,$target,$Paused
Global $ProcessName = "Martial Empires" ;Название окна
Global $ProcessID = WinGetProcess($ProcessName,"") ;Ну или $Pid кому как нравится
Global $HP = 0x00CBDFB8 ;
Global $x_coord_adr,$y_coord_adr ;
Global $DllInformation = _MemoryOpen($ProcessID)
Global $HP_percent,$MP_percent,$Meditation_time
Global $HPdec,$HP_before_meditation ; Хп персонажа
Global $med_time ; Время Медитации
Global $i=0 ; Проверка на агр при медитации
Global $potion_key,$potion_key_read,$use_potions,$use_potions_read,$hp_when_use_potions,$hp_when_use_potions_read
$meditation_key="{F11}"
;GLOBAL VARIABLES  SECTION ==========================================================================

;GUI _ INTERFACE_______________________________________________________________________________________
Opt("GUIOnEventMode", 1)  ; Change to OnEvent mode
Global $botting = 0
$main_window = GUICreate("Martial Empires Bot v 0.2.5",500,500)                 ; start the definition
GUISetBkColor(0x74B5D3)
$bot_start = GUICtrlCreateButton("Start Botting", 175,2 ,150,30) ; Запуск бота
$bot_stop = GUICtrlCreateButton("Stop  Botting", 175,35 ,150,30) ; Остановка бота

$use_potions = GUICtrlCreateCheckbox("Use Potions", 4,10)  ; Кнопка использования потов
GUICtrlCreateLabel("KEY= (0-9) ", 4,35)
$potion_key = GUICtrlCreateInput("",4,50,50,20) ; Кнопка от 0 до 9 на которой у вас висит банка хп
GUICtrlCreateLabel("HP < ", 90,35)
$hp_when_use_potions = GUICtrlCreateInput("",80,50,50,20)


$use_skills = GUICtrlCreateCheckbox("Use Skills", 400,10)  ; Кнопка использования скиллов
GUICtrlCreateLabel("Using Meditation when HP < ", 4,80) ; Настраиваем хп, при котором используется медитация
$hp_when_meditation_gui = GUICtrlCreateInput("",4,100,50,20)
GUICtrlCreateLabel("Time for meditation (in Sec) ", 4,125) ; Указываем время медитации в секундах
$Meditation_time = GUICtrlCreateInput("",4,145,50,20)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_PROGRAM")
GUICtrlSetOnEvent($bot_start, "BOT_START")
GUICtrlSetOnEvent($bot_stop, "BOT_STOP")
HotKeySet("!s","BOT_STOP")
GUISetState(@SW_SHOW)
;GUI _ INTERFACE_______________________________________________________________________________________




Func CLOSE_PROGRAM()
      Exit
EndFunc

Func BOT_START()
	WinActivate("Martial Empires")
    ToolTip("Bot active", 350, 0) ;Включить надпись
	sleep(5000)
    $botting = 1 ;Включить бота
EndFunc

Func BOT_STOP()
    ToolTip("") ;Выключить надпись
    $botting = 0 ;Выключить бота
	$meditation = 1 ;Выключить бота
EndFunc


; Проверяем на аггр
Func aggro()
	ToolTip('Проверяем на аггр',350,0)
	$check_aggro=PixelGetColor(841,55)
	$check_hex_aggro=Hex($check_aggro, 6)
	$check_aggro2=PixelGetColor(841,55)
	$check_hex_aggro2=Hex($check_aggro2, 6)
	$check_aggro3=PixelGetColor(841,55)
	$check_hex_aggro3=Hex($check_aggro3, 6)
			if  $check_hex_aggro = "ABA79A" or $check_hex_aggro2 = "050406" or $check_hex_aggro3 = "A09270" then
				Return True
			Else
				Return False
			EndIf
EndFunc

Func new_aggro()
	ToolTip('Проверяем на аггр',350,0)
	$new_aggro=PixelGetColor(808,42)
	$new_hex_aggro=Hex($new_aggro, 6)
			if  $new_hex_aggro = "970308"   then
					Return True
			Else
					Return False
			EndIf
EndFunc

;Количество ХП
Func hp()
	$CurrentHP = (_MemoryRead(0x00CBDFB8, $DllInformation, 'ptr'))
    $HPdec = dec(StringTrimLeft($CurrentHP, 2))
	Return $HPdec
EndFunc

; Проверка ХП
Func check_hp()

	$CurrentHP = (_MemoryRead(0x00CBDFB8, $DllInformation, 'ptr'))
    If @Error Then
        MsgBox(4096, "ERROR", "Failed to read memory.")
        Exit
    EndIf
    $HPdec = dec(StringTrimLeft($CurrentHP, 2))
	$hp_when_meditation=GUICtrlRead($hp_when_meditation_gui)
	SLEEP(Random(100,300))
	if $HPdec < $hp_when_meditation Then
		return True
    Else
		return False
	EndIf



EndFunc


Func check_mp()
	$CurrentMP = (_MemoryRead($HP, $DllInformation, 'ptr'))
    If @Error Then
        MsgBox(4096, "ERROR", "Failed to read memory.")
        Exit
    EndIf
    Global $MPdec = dec(StringTrimLeft($CurrentMP, 2))
	ToolTip($MPdec,350,0)
	SLEEP(5000)

EndFunc



; HP < 50% ?!
Func low_hp()
	ToolTip('Проверяем на хп',350,0)
	$check=PixelGetColor(457,989)
	$check_hex_hp=Hex($check, 6)
			if  $check_hex_hp = "F94546" then
				Return False
			Else
				Return True
			EndIf

EndFunc



; НЕ ГОТОВО !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Func aggro_mob()
	ToolTip('Проверяем на аггр',350,0)
	$aggro_mob=PixelGetColor(784,17)
	$aggro_mob_hex=Hex($aggro_mob, 6)
			if  $aggro_mob_hex = "951716" then
					Return False
			Else
					Return True
			EndIf

EndFunc



; Медитация
Func meditation()


$hp_before=hp()
ToolTip('Медитация',350,0)
Sleep(Random(50,1000))
Send("{F10}")
sleep(500)
		while  $i<$med_time/1000



			if aggro()=0 Then
				sleep(1000)
				$i=$i+1
				;Elseif hp() < $hp_before_meditation+100	Then
				;$i=0;
				;meditation()
			Else
				$meditation=0
				ExitLoop
			EndIf
		WEnd
$meditation=0
EndFunc

Func MyExit()
    Exit
EndFunc



;Бьем ))))
Func use_skills()
	ToolTip('Юзаем скиллы',350,0)
	Sleep(200)
	Send("{F6}")  ; >>> TO FAST
	Sleep(500)
	Send("{F1}")
	Sleep(500)
	Send("{F2}")
	Sleep(500)
	Send("`")
	Sleep(500)
	Send("{F3}")
	Sleep(500)
	Send("{F4}")

EndFunc



;hp<50 and not_aggro
Func heal()
	if low_hp()=1 and aggro()=0 Then
		return 1
	Else
		Return 0
	EndIf
EndFunc


Func bot_working()
	While $botting = 1
			;Sleep(500)
			if check_hp() = 1  Then ; Хп < 3500, если да то $meditation=1 and aggro()=0
					$meditation=1
			Else
					$meditation=0
			EndIf


					if $meditation=1 and aggro()=0 Then ; Если $meditation=1 юзаем скилл , после использования $meditation=0
						$i=0
						meditation()
						;sleep(500)
					else
						$meditation=0
					EndIf


							while $meditation=0 ;Если $meditation=0, атакуем мобов
									$time=Random(400,800)
									ToolTip('Следующая цель',350,0)
									;Sleep(300)
									sleep($time)
									send("f")
									sleep(500)
									$mob_hp_before_attack=hp()
									use_skills()
									if check_hp()=1 Then  ;Бьем мобов, если вало хп запускаем цикл проверки , мертв ли моб или нет.
														while aggro()=1 and $botting=1
															  ToolTip('Добиваем моба',350,0)
															  if $HPdec < $hp_when_use_potions_read and $use_potions_read=1 Then
																sleep(Random(100,500))
																send($potion_key_read)
															  EndIf

															  if $HPdec < 500 Then
																sleep(Random(100,500))
																Send("!1")
															  EndIf
														use_skills()
														sleep(2000)
														;$hp_before_meditation=hp()
														WEnd
									;Sleep(250)
									$meditation=1
									;Sleep(250)
									$attack=0
									EndIf
							WEnd

WEnd
EndFunc






;; MAIN _ PROGRAM
While 1
	$med_time=GUICtrlRead($Meditation_time)*1000  ; Считываем // продолжительность медитации
	$use_potions_read=GUICtrlRead($use_potions)	  ; Считываем // использовать ли банки ХП
	$potion_key_read=GUICtrlRead($potion_key)     ; Считываем // кнопку, на которой висит банка ХП
	$hp_when_use_potions_read=GUICtrlRead($hp_when_use_potions) ; Считываем // Кол-во хп при котором использовать банку
    If $botting = 1 Then ;Если бот включен
        bot_working() ;Работа бота
	Else
	ToolTip("Bot disabled", 350, 0) ;Включить надпись
    sleep(1000)
	ToolTip("Activate me sir ^_^:)", 350, 0) ;Включить надпись
	sleep(1000)
    EndIf
Wend
 

Belfigor

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

Ты бы хоть код по нормальному оформил сперва в первом посте, читать не возможно.
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
Re: Martial Empires - Автоматизация

ну уж извините, не программер я )
Проблему решил.Но тему пока не закрывайте,по ходу написания бота будет еще много вопросов )
 

Belfigor

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

Дак ты открой хелп, возьми там какой-нибудь пример побольше, или же посмотри чужие примеры на форуме. Я вот например тоже не программер, я даже курс информитики в школе не проходил а по диплому вообще инженер конструктор зданий и объектов сооружений. Так что это не отговорка, пока что первый пост исправил я
tastey.png
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
Re: Martial Empires - Автоматизация

Кстати у меня в 1 случае из 20-30, бот не жмет кнопку медитации (F10) , хоть это не фатально ибо после 32 сек идет еще 1 проверка,если хп мало то юзаем meditation() снова.
Кто нить может сказать в чем проблема ?
 

Belfigor

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

Это глюк, у меня такое бывает но с комбинациями Alt+F[№], Ctrl+F[№], Ctrl+Alt+F[№], снизить частоту глюкавости можно, но особо это ничем не поможет. Проблема в том что мы не физически нажимаем кнопку а с помощью автоита, софтверно через АПИ, загоняем в обработчик команду ее нажатия.
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
Re: Martial Empires - Автоматизация

Как же тогда быть ? ))))
Ктстати раньше перед нажатием была задержка 1 сек, иногда глючило.
Щас сделал sleep(500) вроде норм.

http://rghost.ru/2090959 - Просьба проверить прогу на проверку ХП,
Запускаем клиент > Логинимся > Заходим за чара > Сворачиваем игру, запускаем прогу, сверху должен появиться тултип с указанием ХП.

upd.
Чтобы вырубить , закрываем в трее.
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
Re: Martial Empires - Автоматизация

Чет не могу разобраться с GUI никак.

Суть такова , есть 2 кнопки.
START_BOT
STOP_BOT

Global $activate=1
Если жму старт > начинается цикл while $activate=1
Если жму стоп > Нужно завершить 1 цикл, сменить $activate=0 , ждать пока я не нажму снова старт.

Помогите разобраться с простейшим примером, остальное сам сделаю.



Пока не получается.
Код:
#include <GUIConstantsEx.au3>
Global $botting=0
Opt("GUIOnEventMode", 1)  ; Change to OnEvent mode 
$mainwindow =GUICreate("Martial Empires Bot v 0.0.0.1",500,500)                 ; start the definition
$bot_start=GUICtrlCreateButton("Start Botting", 175,2 ,150,30) ; Запуск бота
$bot_stop=GUICtrlCreateButton("Stop  Botting", 175,35 ,150,30) ; Остановка бота
$use_potions=GUICtrlCreateCheckbox("Use Potions", 4,10)  ; Кнопка использования потов
$use_skills=GUICtrlCreateCheckbox("Use Skills", 400,10)  ; Кнопка использования потов
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_PROGRAM")
GUICtrlSetOnEvent($bot_start, "BOT_START")
GUICtrlSetOnEvent($bot_stop, "BOT_STOP")
GUISetState(@SW_SHOW)


Func start_botting()
	while $botting=1
	ToolTip("BOT_ACTIVE",350,0)	
	sleep(1000)
	WEnd
EndFunc

While 1
	if $botting=1 then
		start_botting()
	else 
		BOT_STOP()
	EndIf
Wend


Func CLOSE_PROGRAM()

  MsgBox(0, "Exit...", "bye, see a later !!!")
  Exit
EndFunc


Func BOT_START()
	$botting=1
	
EndFunc 
Func BOT_STOP()
	$botting=0
EndFunc
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Re: Martial Empires - Автоматизация

Код:
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)  ; Change to OnEvent mode

Global $botting = 0

$mainwindow = GUICreate("Martial Empires Bot v 0.0.0.1",500,500) 	 	 	 	 ; start the definition
$bot_start = GUICtrlCreateButton("Start Botting", 175,2 ,150,30) ; Запуск бота
$bot_stop = GUICtrlCreateButton("Stop  Botting", 175,35 ,150,30) ; Остановка бота
$use_potions = GUICtrlCreateCheckbox("Use Potions", 4,10)  ; Кнопка использования потов
$use_skills = GUICtrlCreateCheckbox("Use Skills", 400,10)  ; Кнопка использования потов

GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_PROGRAM")
GUICtrlSetOnEvent($bot_start, "BOT_START")
GUICtrlSetOnEvent($bot_stop, "BOT_STOP")

GUISetState(@SW_SHOW)


While 1
 	Sleep(10)
	If $botting = 1 Then ;Если бот включен
		MouseMove(MouseGetPos(0) + Random(-1, 1, 1), MouseGetPos(1) + Random(-1, 1, 1)) ;Работа бота
	EndIf
Wend


Func CLOSE_PROGRAM()
	MsgBox(0, "Exit...", "bye, see a later !!!")
	Exit
EndFunc

Func BOT_START()
	ToolTip("BOT_ACTIVE", 350, 0) ;Включить надпись
 	$botting = 1 ;Включить бота
EndFunc

Func BOT_STOP()
	ToolTip("") ;Выключить надпись
 	$botting = 0 ;Выключить бота
EndFunc
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
Re: Martial Empires - Автоматизация

Спасибо.
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
Re: Martial Empires - Автоматизация

Ввели защиту xtrap.
Нужно искать способ убить ее )
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Xtrap снимается с Martial Empires , немного дебагером просто поковыряться, ищу пока что способ автоматизировать это для бота (если интересно есть на просторах интернета мануал в картинках для AIka Online как избавиться от этой заразы, если хочешь пока вручную избавиться от Xtrap -) )

З.Ы. Все адреса значений поменялись .
 
Автор
K

kry

Новичок
Сообщения
14
Репутация
4
На счет того что поменялись, уже заметил )
 

arfey

Новичок
Сообщения
25
Репутация
2
Пробовали прикрутить этот бот к русскому серверу этой игры, что называется "Седьмой Элемент"?
Тут уже не XTrap используется, а nProtect GG, который заставляет меня тут отписывать в поисках затычки для него в частности :(

Мои поиски пока тщетны.
 
Верх