Что нового

[Автоматизация] Как заставить бота собирать ресурсы в движении

qwertiusse

Новичок
Сообщения
4
Репутация
0
Здравствуйте !
Возник следующий вопрос.
Пытаясь реализовать в боте - кликере сбор ресов, столкнулся с проблемой на ровном месте. Игра - браузерная, флеш.
Алгоритм элементарный :
1. Оглядеться на карте в поиске ресов, если есть - собрать.
2. При отсутствии - выбрать рандомно пункт назначения и передвигаться к нему.
3. По дороге проверять присутствие ресурсов, если есть - собрать и
двигаться дальше к тому же (но не обязательно, можно выбрать и новый)
пункту назначения.
4. Дойдя до конца маршрута - п.1 (ибо цыкл !)
П.1 реализуется, п.2 - тоже, но вот дальше... полный игнор ресов,
пока либо Sleep не сработает, либо до конца маршрута не дойдёт т.е.
не могу заставить выполнять п.3.
И через Case делал, и с Continue всякими игрался, и со Sleep'oм боролся, ни в какую. Если не трудно, подскажите какой финт ушами сделать, или какой бубен для танца выбрать.
(По форуму искал, кучу сырцов перелопатил)
Собственно код :

Код:
Func _Loot ()	; Функция перемещения и сбора рес-ов.
	
While 1
	$Coord_X = Random (841, 1013)
	$Coord_Y = Random (523, 626)
	$Resource = PixelSearch (3, 63, 794, 575, 0xFFFCDF, 10)
	If Not @error Then
		MouseClick ("left", $Resource [0], $Resource [1], 1, 0)
	Else
		MouseClick ("left", $Coord_X, $Coord_Y, 1, 0)
	EndIf
	Sleep (Random (2000, 4000))
	ContinueLoop
Wend

EndFunc		; ==> _Loot  (Функция перемещения и сбора рес-ов)

:smile:
 

Belfigor

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


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

Алгоритм вроде должен быть рабочий. Может проблема в том что в момент перемещения цвет ресурсов плавает с большей погрешностью нежели 10? Попробуй 50.
 
Автор
Q

qwertiusse

Новичок
Сообщения
4
Репутация
0
Да, игнорирует, пока в движении.
Пробовал с разными значениями. При 50 вообще кликает на самого себя. ;D
При уменьшении значения Sleep собирает больше ресов, чем при значительном увеличении.Ну, это и понятно, Sleep в данном случае - прерывание.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
А если вот так:
Код:
Func _Loot ()   ; Функция перемещения и сбора рес-ов.
   
While 1
    $Coord_X = Random (841, 1013)
    $Coord_Y = Random (523, 626)
    $Resource = PixelSearch (3, 63, 794, 575, 0xFFFCDF, 10)
    For $i = 0 To 20
        If Not @error Then
            MouseClick ("left", $Resource [0], $Resource [1], 1, 0)
        Else
            MouseClick ("left", $Coord_X, $Coord_Y, 1, 0)
            ExitLoop
        EndIf
        Sleep (Random (100, 200))
    Next
Wend

EndFunc     ; ==> _Loot  (Функция перемещения и сбора рес-ов)
 
Автор
Q

qwertiusse

Новичок
Сообщения
4
Репутация
0
М-да, к сожалению, что-то не то. И функция Sleep оказывает не последнее влияние.
При (100, 200) перс крутится на месте из-за беспрерывных кликов по карте.
Буду медитировать над разными циклами, большей частью вложенными.
:scratch:
Авось и нирвана свалится. :-\
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм... встречал я похожую проблему..
Проблема заключалась в том, что бот на офисном компе не работал, а на домашнем все было нормально. А все дело было в том, что в рабочем графика была встроенной в материнку и поиск цвета занимал довольно значительно время.. около 100-200 ms.. из-за этого объект успевал переместиться и клик если шел, то мимо.
(Особенно это было заметно когда маску цвета ставил больше 1-2... и поиск шел в каждом пикселе)

P.S. Если не секрет, что за игрушка?
 
Автор
Q

qwertiusse

Новичок
Сообщения
4
Репутация
0
и поиск цвета занимал довольно значительно время.. около 100-200 ms.. из-за этого объект успевал переместиться и клик если шел, то мимо.

Одна из вероятных причин. Видяха - не интеграл, но слабовата, 128 MB. И проц - одноядрёный. Надо бы потестить на более мощном компе, но думаю, что это - второстепенная если не болеестепенная причина. Просто подобного (чужого, сырцов нет) бота я у себя запускал и он шкварит, аки пропащий, быстрее скорости САМОГО!... инета.
Насчёт игрушки. :-[
Если хотите, напишите в личку, отвечу (тоже в личку).
 

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Код:
Func _Loot ()   ; Функция перемещения и сбора рес-ов.
   
While 1
    $Coord_X = Random (841, 1013)
    $Coord_Y = Random (523, 626)
    $Resource = PixelSearch (3, 63, 794, 575, 0xFFFCDF, 10)
    For $i = 0 To 20
        If Not @error Then
       ; я бы попробывал вставить сюда mousemove    $Resource [0], $Resource  а потом клик
 MouseClick ("left", $Resource [0], $Resource [1], 1, 0)
        Else
            MouseClick ("left", $Coord_X, $Coord_Y, 1, 0)
            ExitLoop
        EndIf
        Sleep (Random (100, 200))
    Next
Wend

EndFunc     ; ==> _Loot  (Функция перемещения и сбора рес-ов)
 
Верх