Что нового

Бот для игры Остров

warshadow

Новичок
Сообщения
62
Репутация
0
Всем доброго времени суток! Вот решил тут по автоматизировать игруху) В целом все получается, за одним но, не могу понять почему у меня странно как-то кусок кода работает:
Код:
While 1
								

				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",1153,849,1,3)
				Sleep(2500)
				
				
				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",1062,850,1,3)	
					Sleep(2500)
				
				
				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",967,852,1,3)	
				Sleep(2500)
			
				
				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",884,849,1,3)	
					Sleep(2500)
				
				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",775,849,1,3)	
				Sleep(2500)	
				
				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",691,849,1,3)	
				Sleep(2500)
				
				$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
				if  Not @error then ExitLoop 
				MouseClick("left",635,867,1,3)	
				Sleep(2500)
				
				
				
				
				WEnd
				
									
					GUICtrlRead($aRed_SborMorkovi)
					MouseClick("left", $aRed_SborMorkovi[0], $aRed_SborMorkovi[1],1,3)
					ReDim $aRed_SborMorkovi

Неисправимость заключается в том, что он все время возвращается к первому действию и идет заново, пример
1
2
3
4
5

Делаем 1 -успех,делаем 1-заново, делаем 2-успех, возвращаемся к 1-заново,делаем 1-заново,делаем 2-заново,3-успех,возврат к 1-заново,2-заново,3-заново,4-успех,1-заново....итд так до 5
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Не понял, но может это потому что у тебя действия стоят после бесконечного цикла?
Игра в контакте? Кинь сылку, посмотрю что ты хочешь(=
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Да,игра вконтакте,вот ссылка:
http://vkontakte.ru/app1822052_2480004
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Код:
PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1)

Здесь ты задал квадрат нулевого размера.
По идее эта функция у тебя не используется...

Код:
if  Not @error then ExitLoop

А это что?) Если нету ошибок, то прекратить выполнение?
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Viktor217 сказал(а):
Код:
PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1)

Здесь ты задал квадрат нулевого размера.
По идее эта функция у тебя не используется...
Тут имеется виду, чтобы искал по всему экрана,каков у меня размер стоит экрана (1680х1060)

Viktor217 сказал(а):
Код:
if  Not @error then ExitLoop

А это что?) Если нету ошибок, то прекратить выполнение?
Да, именно так,чтобы не вылетала функция,а искала до того, пока не найдет.
 

FoxTiM

Новичок
Сообщения
22
Репутация
2
Код:
If Not @error then

По мне так будет проще!
Скрипт вообще начал малех не правильно) позже покажу если будет время кину скрипт!
Код:
PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1)

Да и это можно было сделать для окна Флеш игры
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
И как правильнее сделать, чтобы осуществлялся ход мышкой с кликами,а также поиск цвета и нажатие на него и последовательные действия,без возврата в начало?
 
Автор
W

warshadow

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

DJ_Tommy

Продвинутый
Сообщения
236
Репутация
57
warshadow сказал(а):
мдя...пытался пытался я, но никак не смог сделать так, чтобы после успешного нахождения пикселя программа не возвращалась к началу...
Мне надо, чтобы бот ходил по друзьям, и искал пикселя, нашел, не нашел - шел дальше.
А у меня получается он ходит,пока не найдет пиксель, при находке пикселя начинает все заново..

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

While 1
While 1
Поиск пикселя
Если найден - выходим из внутреннего цикла
Если не найден пиксель делаем движения
WEnd
WEnd
т.е. у тебя каждый раз запускается проверка с самого начала. Если пиксель найден, то внутренний цикл начинается сначала.
Попробуй следующую конструкцию
Код:
While 1
                $aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);
                if  @error then 
                           Sleep (2000)
                Else 
                           MouseClick("left",1153,849,1,3)
                           Sleep(2500)
                           ExitLoop
                EndIf         
WEnd                
               
While 1
                      $aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);
               if  @error then 
                           Sleep (2000)
                Else 
                MouseClick("left",1062,850,1,3) 
                    Sleep(2500)
                           ExitLoop
                EndIf         
WEnd

Ну и так далее ....
 

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Я так понял что при нахождении надо выполнить клик, или ещё какое то действие...
Код:
While 1
                               

                $aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
                if  Not @error then 
                     MouseClick("left",1153,849,1,3)
                     Sleep(2500)
                     ExitLoop
                endIf
               
               
                $aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x9E6832,0,1);открытие сундуков
                if  Not @error then 
                    MouseClick("left",1062,850,1,3)
                    Sleep(2500)
                    ExitLoop
                endIf
....

думается мне так будет правильнее.
А возврат потому что все поиски находятся в одной петле, и обрабатываются последовательно.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Вроде более менее разобрался с кодом, все работает, но теперь мне хочется еще более автоматизировать программу:

Код:
$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x87A494,0,1) ;открытие снеговиков 
if  Not @error then MouseClick("left", $aRed_SborMorkovi[0], $aRed_SborMorkovi[1],1,3)
MouseClick("left",1153,849,1,3)	
Sleep(1500)

......

$aRed_SborMorkovi = PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0x87A494,0,1) ;открытие снеговиков 
if  Not @error then MouseClick("left", $aRed_SborMorkovi[0], $aRed_SborMorkovi[1],1,3)
MouseClick("left",1133,849,1,3)	
Sleep(1500)


Работа такая: ищет пиксель, если нашел ,то клик на него, далее клик в другое место и так в цикле.. мне надо сделать так -- кликнул подождал, пока приложение про грузилось, нашел пиксель, далее кликнул, подождал пока приложение загрузилось итд

Приложение: остров - вконтакте, суть его в том, чтобы ходить по друзьям и собирать что-то и при переходе на друзей, приложение соотв. грузиться, вот я и хочу функцию эту узнать..
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
привязываешься к чему-нибудь что является индикатором того что то что тебе надо загрузилось и просто каждый раз ожидаешь этого момента, как только он наступает переходишь к действиям.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
А как написать так, чтобы до того как не были найдены все пиксели не было дальнейших действий, например:
Код:
$aCoord =PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xBB6013,0,1);
If not @error Then MouseClick("left", $aCoord[0], $aCoord[1],1,3)
Sleep(5000)
$aCoord =PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xBB6013,0,1);
if  not @error Then MouseClick("left",1540,981,1,3)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
Количество которые надо найти заранее не известно?
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
не известно, может быть 1 может быть 20, а может вообще не быть
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,601
Репутация
941
ищи на форуме тему про PixelSearchEx. Там реализовано продолжение поиска заданной заранее группы пикселей. Используй этот алгоритм для сбора информации о своих пикселях.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
PixelSearch имеет параметры типа
Код:
PixelSearch(0,0,@DesktopWidth, @DesktopHeight, 0xBB6013,0,1)
, можно их как-нибудь программно узнать ? а то получается у меня ищет по всему экрану
 
Верх