Что нового

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

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

Продвинутый
Сообщения
235
Репутация
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

Ну и так далее ....
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Спасибо, попробую.
 

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)


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

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

warshadow

Новичок
Сообщения
62
Репутация
0
Это не много не то...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
привязываешься к чему-нибудь что является индикатором того что то что тебе надо загрузилось и просто каждый раз ожидаешь этого момента, как только он наступает переходишь к действиям.
 
Автор
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 590
Репутация
938
Количество которые надо найти заранее не известно?
 
Автор
W

warshadow

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

Belfigor

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

warshadow

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