Что нового

[Автоматизация] Не удерживает цель на мобе

controlg

Новичок
Сообщения
10
Репутация
0
Доброго времени суток.
Постарался написать простенького бота для клиентской мморпг.
Краткое описание действий бота:
Поиск моба табом, после того, как бот нашел моба (увидел фрейм с его здоровьем),начинает его бить до тех пор пока не убьет(фрейм со здоровьем пропадает). И цикл повторяется.

Вместо этого бот идет молотить всех кого поймает, нанося по 1-2 удара меняет цель.

Код:
if PixelGetColor(534, 82,0xC2C2C2)Then
	send ('{1}')
	if not @error Then send('{tab}')
	EndIf
WEnd


прошу ткнуть носом в ошибку
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
Re: [Автоматизация] Прошу указать на ошибку

мне кажется будет лучше так
Код:
While 1

if PixelGetColor(534, 82,0xC2C2C2)Then
    send ('{1}')
Sleep(1000) ;тут задержку на секунду незачем долбить по кнопки постоянно)
	Else
	send('{tab}')
EndIf



WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 471
Репутация
2 401
Re: [Автоматизация] Прошу указать на ошибку

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


Как правильно называть темы

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

С уважением, Администратор форума.
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0
2 Wistan: Спасибо, паузу обязательно поставлю :smile: но ваш скрипт приведенный выше вовсе не нажимает TAB :( циклично жмакая хоткей (1)
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
controlg [?]
ваш скрипт приведенный выше вовсе не нажимает TAB
циклично жмакая хоткей (1)
значит проблема в условии поставленным вами

Код:
PixelGetColor(534, 82,0xC2C2C2)


если данная функция возращает "1" то и выполняется

Код:
send ('{1}')


вообще дайте скрин так попроще будет (2 скрина с выделенной целью и без цели)
 

Fever

Скриптер
Сообщения
308
Репутация
112
winstan
Вы немного не так поняли код в 1 посте :smile:
Код:
if PixelGetColor(534, 82,0xC2C2C2)Then
    send ('{1}')
    if not @error Then send('{tab}')
    EndIf
WEnd
эквивалентен
Код:
if PixelGetColor(534, 82,0xC2C2C2)Then
    send ('{1}')
    send('{tab}')
    EndIf
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
Fever [?]
Вы немного не так поняли код в 1 посте
Верно) просто я прочитал вот это
controlg [?]
Краткое описание действий бота:
Поиск моба табом, после того, как бот нашел моба (увидел фрейм с его здоровьем),начинает его бить до тех пор пока не убьет(фрейм со здоровьем пропадает). И цикл повторяется.
я воспринял
Код:
PixelGetColor(534, 82,0xC2C2C2)
как условие существования флейма т.е. жать на таб пока не появится флейм, а когда флейм появлся жать 1 -атаковать
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0



2 Fever: прочитал сообщение, исправил код, теперь он отказывается жать TAB и зацикливает (1)
Код:
if PixelGetColor(534, 82,0xC2C2C2)Then
    send ('{1}')
    if @error Then send('{tab}')
    EndIf
WEnd
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
HotKeySet("{TAB}", "_Search")

While 1
	Sleep(100)
WEnd

Func _Search()
	Do
		$sSearch = PixelSearch(0, 0, @DesktopWidth, @DesktopHeight, 0xEAEFB9, 1, 3)
		Sleep(1000)
	Until IsArray($sSearch)

	_Hit($sSearch[0], $sSearch[1])
EndFunc

Func _Hit($iX, $iY)
	MouseClick("left", $iX, $iY)
	For $i = 1 To 10
		Send('{1}')
		Send('{TAB}')
		Sleep(1000)
	Next
EndFunc


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

controlg

Новичок
Сообщения
10
Репутация
0
немного переписал, но все равно отказывается нажимать Tab :(
Код:
while 1
	sleep (500)
	search()
	WEnd
func search()
While 1	
PixelGetColor (655, 77, 0xA6A193)
if @error then	send ('{tab}')
	PixelGetColor (655, 77, 0xA6A193)
	if not @error then attack()
WEnd
EndFunc
func attack()
	PixelGetColor (655, 77, 0xA6A193)
	if @error then search()
		PixelGetColor (655, 77, 0xA6A193)
		if not @error then send ('{1}')
			sleep (1000)
			attack()
	EndFunc
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
if @error then  send ('{tab}')

это нажмет таб в случае ошибки (цвет не будет найден), нужно сделать наоборот, а лучше всего:
Код:
While 1
    sleep (500)
    search()

WEnd
func search()
	While 1
		PixelGetColor (655, 77, 0xA6A193)
		if Not @error then
			send ('{tab}')
			attack()
		EndIf
	WEnd
EndFunc

func attack()
	PixelGetColor (655, 77, 0xA6A193)
    if @error then
		search()
	Else
        PixelGetColor (655, 77, 0xA6A193)
        if not @error then send ('{1}')
		sleep (1000)
        attack()
	EndIf
EndFunc
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0
Код:
While 1
    sleep (500)
    search()

WEnd
func search()
    While 1
PixelSearch(534, 82, 534, 82, 0xC2C2C2)
        if @error then
            send ('{tab}')
            attack()
        EndIf
    WEnd
EndFunc

func attack()
	PixelGetColor(534, 82,0xC2C2C2)
    if @error then
        search()
    Else
		PixelGetColor(534, 82,0xC2C2C2)
        if not @error then send ('{1}')
        sleep (1000)
        attack()
    EndIf
EndFunc


Всё отлично, ловит моба и убивает, но после убийства не ищет нового и спамит единицу... :(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Сколько раз говорить, не используйте PixelGetColor для таких целей, в хелпе хотя бы читайте что делает каждая из команд . Я понимаю что "ой а вот эта покороче" для многих вариант предпочтительный, но иногда надо думать и головой
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0
Переписал код...
Код:
HotKeySet("{f6}","_exit")
While 1
	$variable = PixelSearch(465,69,717,144,0xE38D00)
	if IsArray($variable) = true Then
		send ("{1}")
	endif
WEnd


	
	Func _exit()
		exit
	EndFunc

При появлении фрейма с жизнями моба, начинает его бить пока не убьет, подскажите, как сделать поиск следующей цели, после убийства первой?
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0
итак.
немного изменив код приведенный выше, получаем
Код:
While 1
    $variable = PixelSearch(352, 71,506, 84,0xFFFF00)
    if IsArray($variable) = False Then
        send ("{tab}")
		ataka()
    endif
WEnd


То есть если фрейма нету, жмем таб пока он не появится...

теперь следующий вопрос ;D как их объединить, чтобы получить следущее, ищем моба пока не найдем( ждем появление фрейма), запускаем атаку(скрипт предыдущего поста), после убийства опять ищем?
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Мой вариан кода ;D

Код:
Opt("PixelCoordMode", 2) ;(опция в начало скрипта) считать координаты от клиентской области игры
HotKeySet("{f6}", "_exit")

While 1
	Send('{tab}')
	Sleep(500)
	PixelSearch(637, 82, 639, 85, 0xf5acb3, 5); Ищем розовый цвет HP моба (чтобы выделялся только целый моб, которого другой не кто не бьет)
	If Not @error Then
		PixelSearch(559, 104, 559, 104, 0xa8edfd, 5);(для подтверждения что это действительно фрейм моба а не "розовая гора") ищем голубой цвет MP
		If Not @error Then
			_attack()
		EndIf
	EndIf
WEnd

Func _attack()
	Local $Color1 = PixelGetColor(442, 80);Запоминаем цвет точки на фрейме
	While 1
		If PixelGetColor(442, 80) = $Color1 Then
			Send("{1}"); Атачим моба
			Sleep(1000)
		Else
			ExitLoop ;Моб убит
		EndIf
	WEnd
EndFunc   ;==>attack

Func _exit()
	Exit
EndFunc   ;==>_exit
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0
2 rusreg79 спасибо, но скрипт просто перебирает цели :(
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Перепроверь по координатам цвета, на твоих скриншотах после ужатия jpg цвет мог сильно изменится, или выкладывай скриншоты в bmp
 
Автор
C

controlg

Новичок
Сообщения
10
Репутация
0
все цвета и координаты менял под текущее состояние окна клиента игры :(
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Код:
While 1
    Local $var = MobSearch()
    If Not @error Then ;If $var = "Found" Then
        Send("{1}")
    Else ;ElseIf $var = "Not Found" Then
        Send("{TAB}")
    EndIf        
WEnd

Func MobSearch()
    PixelSearch ;ищем
    If Not @error Then
        ;Если нашли
        Return "Found"
    Else
        ;Если не нашли
        SetError(1)
        Return "Not Found"
    EndIf
EndFunc



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

Все решается гораздо проще и без вложенных циклов v_v
Ищем фрейм, нашли фрейм ткнули 1, ненашли ткнули таб.
Или я неправильно понял вопрос
 
Верх