Что нового

Простой скрипт для бота

colwados

хочу знать!
Сообщения
8
Репутация
1
Всем привет! Вто сделал скрипт для бота с проверкой на пиксель HP моба , ток не могу понять как добавить проверку на HP персонажа,впринцепе бот может получится универсальным да и учиться проще на том что интерестно). Может кто подсказать и если можно обьяснить как делать несколько проверок чтоб они работали паралельно?
Код:
Global $Autoshoot = 0
HotKeySet("{F1}", "startAutoshoot") ;старт
HotKeySet("{F2}", "offAutoshoot") ;стоп
While 1
    If $Autoshoot = 1 then ;
Sleep(500)
		Send ("{TAB}") ;Следующая цель
		Sleep(1000)
        PixelSearch(650, 884, 912, 895, 0xCB432C, 40, 2)
            If Not @error Then
		Send ("{1}")  ;Атака
		Sleep(100)
		Send ("{2}")  ;Атака
		Sleep(100)
		Send ("{3}")  ;Атака
		Sleep(100)
		Send ("{4}")  ;Атака
		Sleep(100)
		Send ("{5}")  ;Атака
		Sleep(100)

            Else
	    Send ("{0}") ;Подбор лут
		Sleep(1000)
		Send ("{0}") ;Подбор лута
		Sleep(1000)
    EndIf
    EndIf
WEnd

Func startAutoshoot() 
    $Autoshoot = 1
EndFunc 

Func offAutoshoot() 
    $Autoshoot = 0
EndFunc
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
PixelSearch
If Not @error Then
    ;атака
Else
    PixelSearch
    If Not @error Then
        ;лечимся
    Else
        ;лутаем
    EndIf
EndIf
 
Автор
C

colwados

хочу знать!
Сообщения
8
Репутация
1
Спасибо! за подсказку
пока ждал овета сделал так:
если сделать два скрипта: один на атаку, второй на проверку HP у перса компилировать в два ЕХЕ файла ( например - Атака.ехе и НРчара.ехе) и запустить командой RUN то они висят в трее, как два процесса. Как можно - это сделать по покомпактней?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Нет нужды делать это в двух ехешниках, делай так как я тебе показал выше. Если у тебя будет одновременно бегать 2 exe файла которые оба могут оперировать мышью и клавиатурой, они в итоге могут подраться за контроль.
 
Автор
C

colwados

хочу знать!
Сообщения
8
Репутация
1
Получился вот такой код:
Global $Autoshoot = 0
HotKeySet("{Home}", "startAutoshoot") ;старт
HotKeySet("{End}", "offAutoshoot") ;стоп
While 1
If $Autoshoot = 1 Then
Sleep(500)
Send ("{TAB}") ;Следующая цель
Sleep(500)
PixelSearch(738, 635, 788, 635, 0x953828, 40, 5); Проверка на HP моба
If Not @error Then
Sleep(500)
Send ("{1}") ;Авто Атака
Sleep(500)
Send ("{2}") ;Атака
Sleep(500)
Send ("{3}") ;Атака
Sleep(500)
Send ("{4}") ;Атака
Sleep(500)
Send ("{5}") ;Атака
Sleep(500)
Else
PixelSearch(445, 635, 310, 635, 0x615139, 40, 5) ;Проверка на HP перса
If Not @error Then
Sleep(500)
Send ("{-}") ;Лечимся
Sleep(500)
Else
Send ("{0}") ;Подбор лута
Sleep(500)
Send ("{0}") ;Подбор лута
Sleep(500)
Send ("{0}") ;Подбор лута
Sleep(500)
Send ("{0}") ;Подбор лута
Sleep(500)
EndIf
EndIf
EndIf
WEnd
;-------функции
Func startAutoshoot() ; функция включения
$Autoshoot = 1
EndFunc ; конец функции

Func offAutoshoot() ; функция выключения
$Autoshoot = 0
EndFunc ; конец функции

С работой этой команды
Код:
PixelSearch(738, 635, 788, 635, 0x953828, 40, 5); Проверка на HP моба
			If Not @error Then
			    Sleep(500)
				Send ("{1}")  ;Авто Атака
проблем нет: ищем красный цвет, при совпадении жмём 1,2,..5. Тут всё понятно.
Но вот на проверку НР персонажа, команда "PixelSearch" не подходит. Обьясню : Цвет НР персонажа зелёный а сам блок (фон) на котором она находится почти прозрачный и при уменьшении полосы пиксель в данной координате может принять любой цвет.
Значит надо чтоб в данной координате был постоянный контроль цвета пикселя, и при его смене срабатывал дальнейший код то есть лечение
Вопрос : Какая команда подойдёт лучше для этого случая???
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
перебирай попиксельно слева на право по одному пикселю за раз тот же зеленый цвет до первого несовпадения
 
Автор
C

colwados

хочу знать!
Сообщения
8
Репутация
1
можно пример? не могу понять как это реализовать(
Есть зелёный цвет (при этом условии нет ни каких действий), если зелёный изменился на любой другой то юзается банка
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
$x1=0, $x2=100, $y=10
For $x=$x1 To $x2 Step 1
   PixelSearch($x, $y, $x, $y, зеленый, 10)
   If @error Then
	  MsgBox(0,0,"найдена граница жизней персонажа")
   EndIf
Next
 
Автор
C

colwados

хочу знать!
Сообщения
8
Репутация
1
Belfigor ! спасибо за ваши советы.
Не могли бы вы дать совет по самому алгоритму скрипта?
Может есть смысл с начало делать проверку НР перса и только после неё всё остальное?
то есть: в приоритете стоит НР перса, если НР мало - лечимся и только потом ищем моба и атакуем
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Приоритеты проверок это вопрос по большей части риторический, кто-то любит мыть руки перед едой, кто-то после еды, кто-то и до и после. И в каждом отдельном случае каждый по своему прав. Всё зависит от конкретной ситуации. Если проводить аналогию с твоим скриптом, моя логика строится так:
1) Собираем инфу о всех возможных интиресующих нас в данный момент датчиках, например:
-Узнаем количество ХП чара, варьируем его по 2-м параметрам "лоу\ норм"
-Узнаем ХП моба, хп варьируем по 2-м параметрам "есть моб\ нету моба"
В первом пункте не применяем никаких действий, просто собираем информацию.
2) Анализ полученных данных и принятие решений:
Всю полученную в пункте 1 информацию собираем в одну строку, получаем несколько вариантов строки:
-лоу|есть моб
-лоу|нету моба
-норм|есть моб
-норм|нету моба
Исходя из полученной строки принимаем решение
Если "лоу|есть моб" или "лоу|нету моба" = "лечимся"
Если "норм|есть моб" = "бьем"
Если "норм|нету моба" = "лутаем и ищим моба"
3) Повторяем всё с пункта 1)

Таким образом ежемоментно в пункте 1) с экрана собирается информация, исходя из информации полученной в пункте 1) в пункте 2) принимается действие, повторяем до усрачки.

Но для такого маленького функционала по большому счету абсолютно без разницы какую логику ты будешь использовать. Свой вариант логики я применяю на масштабных ИИ, не подверженных шаблону "цепи действий" и действующих исходя из конкретной ситуации на каждый отдельный момент времени.
 
Автор
C

colwados

хочу знать!
Сообщения
8
Репутация
1
Спасибо! буду пробовать)
подскажите какой командой поставить скрипт на паузу?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
В хелпе смотри пример команды
Код:
HotKeySet
 
Автор
C

colwados

хочу знать!
Сообщения
8
Репутация
1
вот что получилось, чистый бред, запутался полностью :stars:
Код:
HotKeySet("{Home}", "start")
HotKeySet("{End}", "stop")
HotKeySet("{Esc}", "pause")

While 1
	Sleep(100)
WEnd

Func start ()
	While 1
		$pixel = PixelSearch (330, 632, 271, 639, 0x67533B, 10);проверка на НР чара
		If IsArray ($pixel) = True Then
		    Sleep(500)
			Send ("{+}");лечимся
			Sleep(500)
			Send ("{+}");лечимся
			Sleep(500)
		Else
			Sleep(500)
			Send ("{0}");дроп
			Sleep(500)
			$pixel = PixelSearch (212, 280, 218, 283, 0xDBB133, 1);проверка на открытое окно дропа
			If IsArray ($pixel) = True Then
				Sleep(500)
				Send ("{0}");закрыть окно дропа
				Sleep(500)
			Else
				Sleep(500)
				Send ("{TAB}") ;Ищем цель
				Sleep(1000)
				$pixel = PixelSearch (690, 633, 787, 640, 0x953828, 40, 2);провкрув НР перса
				If IsArray ($pixel) = True Then
					Send ("{1}")  ;Атака
					Sleep(500)
					Send ("{2}")  ;Атака
					Sleep(500)
					Send ("{3}")  ;Атака
					Sleep(500)
					Send ("{4}")  ;Атака
					Sleep(500)
					Send ("{5}")  ;Атака
					Sleep(500)
				Else
					Send ("{0}") ;Подбор лут
					Sleep(1000)
					Send ("{0}") ;Подбор лута
					Sleep(1000)
				EndIf
			EndIf
		EndIf
	WEnd
EndFunc


Func stop ()
	Exit
EndFunc


господа! помогите понять (именно ПОНЯТЬ) как делаються подобные вещи, укажите ошибки
Провека на НР чара работает через раз с дропам тоже как то не то(
 

Belfigor

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