Что нового

[Last Chaos] Лечение чара

NovyhI

Новичок
Сообщения
10
Репутация
0
Доброго времени суток.
Проблема такова: в скриптописании я новичок, так что пока меня хватило лишь на простейший бот:
Код:
#RequireAdmin
WinWaitActive('Last Chaos - Mail.ru (Window 1280x720)')
$hWnd1 = WinGetHandle('Last Chaos - Mail.ru (Window 1280x720)')
WinMove($hWnd1, '', 10, 10)
Sleep(2000)
While 1 = 1
ControlSend($hWnd1, "","", "{TAB}")
Sleep(200)
ControlSend($hWnd1, "","", "{1}")
Sleep(200)
ControlSend($hWnd1, "","", "{2}")
Sleep(200)
ControlSend($hWnd1, "","", "{3}")
Sleep(200)
Sleep(500)
Wend
Данный бот, что очевидно, перемещает окно игры в левый верхний угол, переключается на моба клавишей TAB, бьет его простыми ударами и скиллами, назначенными на кнопки 1,2,3, и, собственно, все.
Хотелось бы еще прикрутить сюда самолечение. Лечится выпиванием эликсира, который тоже можно назначить на кнопку, к примеру 4. Вот только как определить, что здоровье упало настолько, что пора пить лекарство?
Поиск по форуму и курение мануалов меня не просветлили (возможно, из-за недостаточной компетенции).
Как я понимаю, возможны два пути решения проблемы: чтение значения из памяти либо получение цвета конкретного пикселя. Вот только как реализовать все это при моем уровне знаний?
Привожу кусок скриншота - верхний левый угол окна игры (замазан ник чара - конспирация, однако). Интересует, понятно, верхняя - красная полоска
24998744KlV.jpg



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

Курение форума продолжается...

Казалось бы, логично вычислить значение здоровья и отслеживать его - как достигло установленного значения, жать кнопку и пить лекарство. Но тут я затупил с поиском этого значения, вернее, с реализацией алгоритма, ибо пока не разобрался в этом процессе (слово оффсет меня пока еще пугает :( )
По второму варианту, как понимаю, проще отслеживать цвет полоски здоровья с правой стороны, который потемнее (он, вроде бы, более однородный), но с реализацией...
В-общем, был бы благодарен, если бы ткнули носом, лучше всего - в работающий кусок кода, а если он прокомментирован, то вообще бы красота.
Нет, я, конечно, все-равно со временем разберусь и сделаю (я не гений, но упорный, все-равно освою), вот только времени это займет... Да и учусь я лучше на примерах.
Вот бы со здоровьем решить - с маной по аналогии гораздо проще будет :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,603
Репутация
941
Код:
Pixelsearch(x,y,x,y,col, shade)
If @error Then
    Send
EndIf

В случае отсутствия заданного цвета по заданным координатам нажмет указанную клавишу.
 
Автор
N

NovyhI

Новичок
Сообщения
10
Репутация
0
Спасибо за подсказку, вечером попробую.
Как только разберусь, как правильно координаты и цвет прописать.
Только, пожалуй, сделаю немного по другому:
срабатывать будет при наличии искомого (темного) цвета.
Сам пришел к другому решению: сравнивать точку слева от цифр и справа.
То есть, координата у этих двух точек будет одинаковая, а вот х будет отличаться - тогда и сработает.
Такое вот у меня парадоксальное мышление :smile:
В-общем, посмотрим, о результатах отпишусь
 
Автор
N

NovyhI

Новичок
Сообщения
10
Репутация
0
Блин, я вообще уже ничего не понимаю :(
Сделал по совету:
Код:
While 1=1
Pixelsearch(210,31,212,38,0x750505,10)
If @error Then
	ControlSend($hWnd1, "","", "{4}")
EndIf
	Sleep(15000)
WEnd

Цвет определял с помощью AutoIt Window Info, брал разные соседние точки. Так и не понял, как оно срабатывает. То не срабатывает вообще, то срабатывает, когда не должно.
Или мистика, или оттенки цвета с течением времени меняются незаметно для моего глаза, но заметно для AutoIt.
С моим вариантом - сравнение двух точек (слева и справа от цифр) вообще приводит к постоянному срабатыванию - по-видимому, использование градиентов приводит к тому, что на одной горизонтальной линии точки по цвету отличаются.
В-общем, попал в тупик и пошел спать. Завтра снова мутить будем.
Если не получится с цветом, придется все-таки осваивать работу со значениями, хотя времени не хватает.
Что будет получаться (или не получаться) - буду сообщать
 
Автор
N

NovyhI

Новичок
Сообщения
10
Репутация
0
И снова я здесь.
С цветом, по всей видимости, ничего не получится.
Специально для отслеживания значения цвета написал небольшой скрипт:
Код:
#RequireAdmin
WinWaitActive('Last Chaos - Mail.ru (Window 1280x720)')
$hWnd1 = WinGetHandle('Last Chaos - Mail.ru (Window 1280x720)')
WinMove($hWnd1, '', 10, 10)
Sleep(2000)
Opt("PixelCoordMode", 2)
Sleep(2000)
While 1 = 1
$za = PixelGetColor(211, 32)
MsgBox(4096, "Test", $za)
Sleep(10000)
WEnd

И что заметил: сначала цвет пикселя стабильный - значение одно и то же. Потом даю монстрам покусать чара, чтобы полоска изменилась. Некоторое время цвет пикселя снова стабильный - значение другое, но тоже не меняется, пока снова выросшая полоска не перкрывает искомый пиксель.
Дальше начинается мистика: здоровье почти полностью восстановилось (полоска практически полная), но значение цвета пикселя, как у почти мертвого чара (некоторое время стабильно), а потом вообще начинают вылетать значения, отличные от всех предыдущих, хотя чисто на взгляд, все, как и было сначала. И я снова ничего не понимаю, хотя теперь понял, почему работа скрипта с течением времени отличалась от ожидаемой.
Значит придется все-таки копать в сторону чтения значений из памяти.
И опять затыка: не успел разобраться с механизмом, как обломился. Скачал программу Cheat Engine 6.0 Final - не запускается. Мелькает всплывающее окошко, которое прочитать практически не успеваю, но не с жалобой на ошибку (никаких сообщенийтоб ошибке вообще не появляется) и все - ни в запущенных приложениях ни в процессах - никаких следов. Скачал тогда ArtMoney SE v7.37. Уже запускается, но при попытке выбора игры программа сообщает о невозможности этого и просит денег. Сумма, конечно небольшая - 290 рублей за полную версию (пробовал демку), но никаких гарантий, что заплатив деньги, получу нужный функционал - демка, кроме окна программы, мне ничего не показала, даже попробовать в работе (хотя бы с ограниченным функционалом) не смог, что настораживает.
И как теперь быть? :'(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,603
Репутация
941
Попробуй поискать темный цвет отсутствия хп :smile:
 
Автор
N

NovyhI

Новичок
Сообщения
10
Репутация
0
Может, я не очень внятно описал результаты своих телодвижений, но искал и темный цвет - после покусания монстрами - сначала стабильно, потом - чехарда
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,603
Репутация
941
Ну тогда да, проще вгрызться в память. Хотя есть одна структура памяти которую я раскусить не смог. На данный момент встречал такую в Final Fantasy XIV.
 
Автор
N

NovyhI

Новичок
Сообщения
10
Репутация
0
проще вгрызться в память
Ну, для меня это пока еще совсем не проще.
Сам процесс еще не освоен, да и глюки какие-то все время.
Артмани почти победил (в смысле запуска). Нужно было отключить проверку драйверов (не совсем понял, какая тут связь, ну да главное - работает) и программу запускать от администратора.
Вот только и артмани уже в процессе работы вылетала, да и игра что-то заглючила - сначала перестала реагировать на клавиатуру, потом запускаться отказалась (не смогла найти сервер, правда, перезагрузка помогла)

Блин, что-то я задумался о симптомах...
На форуме игры был разговор о том, что после одного из обновлений ввели какую-то защиту от читов. Но там просто через какое-то время вышибало игру, если принудительно изменялись значения в памяти. Я проверял - находил значение скорости атак и изменял его - игра действительно минут через 5 вылетала. (использовался Cheat Engine - на другом компе - с WinXP, а не 7). Тут симптомы не похожи, но все же... Да нет, вряд ли...)
Уже подумывал создать тему в разделе "Стол заказов", но все же хочется еще попытаться разобраться. Да и захочет ли кто-нибудь ковыряться


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

http://autoit-script.ru/index.php/topic,3233.0.html - вот тут у товарища почему-то работало (код № 2). Может я что-то не так делаю? Я, правда, пока не разобрался во включенной там функции -надо читать мануалы, а времени опять не хватает.
Но методика сравнения цвета у меня не работает. Вводит в сомнение контролируемая точка - на мой взгляд неправдоподобные координаты. А может, я что-то не то делаю. Попытка связаться с автором лично провалилась - реакции ноль
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
вот как через память
(из моего бота для этой игры)

Код:
If $dif > "14000" Then ;~ проверяет время с последнего нажатия
        $result = _MemoryRead($hill, $memory) ;~ извлекает из игры значение
        If $result < $hillmin Then ;~ сравнивает значение с заданым минимально допустимым значением
            Sleep(1000)
            ControlSend($hWnd1, "", "", "{F7}") ;~ жмёт 7 если требуется отхилится
            $begin = TimerInit() ;~ сохраняет время нажатия
        Else
        EndIf

этот кусок у меня является функцией к которой идёт пеиодическое обращение
 
Автор
N

NovyhI

Новичок
Сообщения
10
Репутация
0
Спасибо за подсказочку - нашел это в скрипте в другой Вашей теме - втыкаю в код )
Там теперь и еще вопросик задам ;)
 
Верх