Что нового

[ВКонтакте: Рыбное Место] Бот abyrvalg от karcun.

karcun

Новичок
Сообщения
5
Репутация
0
ВКонтакте: Рыбное Место
http://vkontakte.ru/app1822452_16639950

Исходник для autoit-бота, рыбачащего на автомате круглосуточно )))
У меня пашет уже 6 суток.
Думаю, не за горами и бан )))

Да и abr c ним, не велика потеря.
Перед использованием бота нужно слегка доработать напильником.
Это не страшно, ниже прилагаю пошаговую инструкцию.
Эта инструкция подходит для всех сообществ: ВСекте, Одноклассники, Мэйл.Ру

Итак, начнем:

Копируем размещенный ниже код в "SciTE Script Editor", он идет в поставке с autoit

1) Строки 25 и 26.
Тут нужно вписать заголовок окна Вашего браузера с активной вкладкой игры.
Открываем браузер, открываем страницу с игрой и смотрим на заголовок окна.
Это и есть нужная нам строка

2) Строка 27:
Тут бот тыкает в любое свободное место на странице, чтобы сфокусироваться на ней.
Открываем "AutoIt Window Info", хватаем прицел и смотрим на координаты.
Для упрощения прицеливания идем в меню Options->Magnify
Заменяем то, что есть на то, что надо.

3) Строка 31:
Тут бот тыкает уже в окно приложения.
Ничего сложного, просто бот тыкает в любую точку приложения, главное что бы там кнопок не оказалось.
(см. шаг 2)

4) Строка 49 (
Код:
If Hex(PixelGetColor(891,533), 6) <> "563A12" Then
):
Проверяем на месте ли кнопка "Забросить удочку".
Берем "AutoIt Window Info" и замеряем точку, располагающуюся на верхней кромке кнопки (коричневая обводка)
Результатами заменяем нужное в нашей строке 29

5) Строка 54
Тут указываем координаты кнопки браузера "обновить" или "перезагрузить страницу"
Опять же используем "AutoIt Window Info"

6) Строки 74, 78, 82, 86, 90, 94, 98.
Код:
$coord = PixelSearch(624, 480, 680, 560, 0xFF8000)

Эта строка ищет в прямоугольнике х0, у0, х1, у1 цвет FFFFFF
Этот цвет следует искать на поверхности поплавка с помощью скриншотов и "AutoIt Window Info".

7) Строки 116, 117 и 123
Тут опять используем "AutoIt Window Info"
Код:
$str = 496 + 140

позиция шкалы по оси Х, где начинаем тянуть
Код:
$end = 883 - 140

позиция шкалы по оси Х, где заканчиваем тянуть
Код:
$lvl = 738

позиция шкалы по оси У

8) Строка 136
Код:
While Hex(PixelGetColor(891,533), 6) = "563A12"

См. шаг 4

Код бота:
Код:
SoundPlay(EnvGet("WINDIR") & "\Media\Windows Notify.wav", 0)
$exit = 0
$refresh = 0
$pause = 0
HotKeySet("{Pause}", "TogglePause")
HotKeySet("{F10}", "Quit")
Func Quit()
	SoundPlay(EnvGet("WINDIR") & "\Media\Windows Hardware Remove.wav", 0)
	MsgBox(0, "Bye!!!", "See you later )))", 1)
	Exit
EndFunc
Func TogglePause()
	If $pause = 0 Then
		$pause = 1
		SoundPlay(EnvGet("WINDIR") & "\Media\Speech On.wav", 0)
		MsgBox(0, "Pause", "Paused", 1)
	Else
		$pause = 0
		SoundPlay(EnvGet("WINDIR") & "\Media\Speech Off.wav", 0)
		MsgBox(0, "Pause", "Continue", 1)
	EndIf
EndFunc
;Главный цикл программы
WHILE $exit <> 1
	WinActive("Рыбное место - ловим рыбу с друзьями!");Заголовок окна
	WinActivate("Рыбное место - ловим рыбу с друзьями!");Заголовок окна
	MouseClick("left", 1200, 100) ;Сфокусировались на странице
	SLEEP(200)
	;Send("{Home}");Передвинули страницу на самый верх
	SLEEP(200)
	MouseClick("left", 720, 300);Сфокусировались на приложении
	;Закрыли все оповещалки
	Send("{Esc}")
	SLEEP(200)
	Send("{Esc}")
	SLEEP(200)
	Send("{Esc}")
	SLEEP(200)
	
	;Забросили удочку
	Send("{Space}")
	SLEEP(3000)
	
	;Если не получилось
	;Проверка - на обводке кнопки.
	;Если кнопка есть, то можно забрасывать
	;Так бывает когда закончились снасти
	;или если сервер не доступен
	IF Hex(PixelGetColor(877,487), 6) <> "563A12" THEN
			;С каждым разом ждем дольше
			SLEEP($refresh * 20000)
			$refresh += 1
			;что-то случилось, перезагружаем страницу
			MouseClick("left", 70, 40)
			;Ждем загрузки приложения
			SLEEP(20000)
			;Перезапуск главного цикла
			ContinueLoop
	EndIf
	$refresh = 0
	;Ждем поклевку
	$bite = 0;
	WHILE $bite=0
			$bite1 = False
			$bite2 = False
			$bite3 = False
			$bite4 = False
			$bite5 = False
			$bite6 = False
			$bite7 = False
			;Если удочка, то смотрим на поплавок
			;При необходимости добавляем цвета на поверхности поплавка
								;координаты прямоугольника, в котором ищем поплавок и цвет, который ищем
			$coord = PixelSearch(624, 480, 680, 560, 0xFF8000)
			IF NOT @ERROR THEN
					$bite1 = True
			EndIf
			$coord = PixelSearch(624, 480, 680, 560, 0xD50202)
			IF NOT @ERROR THEN
					$bite2 = True
			EndIf
			$coord = PixelSearch(624, 480, 680, 560, 0xFF9F00)
			IF NOT @ERROR THEN
					$bite3 = True
			EndIf
			$coord = PixelSearch(624, 480, 680, 560, 0xD0661E)
			IF NOT @ERROR THEN
					$bite4 = True
			EndIf
			$coord = PixelSearch(624, 480, 680, 560, 0xFFCC00)
			IF NOT @ERROR THEN
					$bite5 = True
			EndIf
			$coord = PixelSearch(624, 480, 680, 560, 0xBF9900)
			IF NOT @ERROR THEN
					$bite6 = True
			EndIf
			$coord = PixelSearch(624, 480, 680, 560, 0xFF0000)
			IF NOT @ERROR THEN
					$bite7 = True
			EndIf
			IF $bite1 OR $bite2 OR $bite3 OR $bite4 OR $bite5 OR $bite6 OR $bite7 THEN
					;нет поклевки, поплавок найден
					$bite = 0
			ELSE
					;поклевка
					$bite = 1  
			EndIf
			SLEEP(25)
	WEND
	
	;Когда поплавок ушел под воду при поклевке
	;или рыбачим на спининг (поплавка нет вовсе)
	;запоминаем цвет под шкалой (закрашено шкалой или нет)
	
	$str = 497 + 140;позиция шкалы по оси Х, где начинаем тянуть
	$end = 884 - 140;позиция шкалы по оси X, где заканчиваем тянуть

	;первое слагаемое - координата края шкалы
	;второе - отступ от края
	;по идее, чем мощнее тачка, тем меньше можно делать отступ

	$lvl = 692;позиция шкалы по оси У
	
	$drag = Hex(PixelGetColor($str, $lvl), 6);запоминаем цвет подложки слева
	$drop = Hex(PixelGetColor($end, $lvl), 6);запоминаем цвет подложки справа
	
	;Клюет, вытаскиваем!!!
	;настройка ввода с клавиатуры
	AutoItSetOption("SendKeyDelay", 1)
	AutoItSetOption("SendKeyDownDelay", 100)
	AutoItSetOption("SendCapslockMode", 1)

	;подсекаем
	;Send("{Space}");решил, что это будет лишним. При желании, раскомментируйте
	
	$flag = 1;0 - отпускаем, 1 - тащим
	WHILE Hex(PixelGetColor(877,487), 6) = "563A12";пока есть кнопка
			IF Hex(PixelGetColor($str, $lvl), 6) = $drag THEN;шкала ушла левее левой отметки, тащим
					$flag = 1
			EndIf
			IF Hex(PixelGetColor($end, $lvl), 6) <> $drop THEN;шкала закрасила правую отметку, отпускаем
					$flag = 0
			EndIf
			IF $flag = 1 THEN
					Send("{Space}");тащим
			ELSE
					SLEEP(25);отпускаем
			EndIf
	WEND
	;смотрим на улов
	;или любуемся надписью "Рыба сорвалась" или что-либо другое
	SLEEP(3000)
	While $pause = 1
		Sleep(3000)
	WEnd
WEND

Этот бот не "ломает" игру.
Он не сделает из Вас супер пользователя.
Он не позволит Вам на удочке первого уровня вытащить сома весом 250 кг.

Бот лишь рыбачит за Вас, имитируя Ваши действия.
То бишь, его нужно периодически выключать и качать персонажа руками: оснащать персонажа снастями, следить что бы наживка не закончилась.

бот работает с любыми удочками и спиннингами на любой локации

Добавил управление с клавиатуры и звуки:
Pause/Brake: пауза.
Можно поставить на паузу в любой момент до окошка с уловом и втечение 3-х секунд после его отображения.
Если Вы нажали на паузу, но реакции не последовало, не нужно давить несколько раз.
Пауза сработает вовремя.
F10: Выход, отключить бота

Звуки указал стандартные из семерки.
Если не играют, значит у Вас другие.
Укажите свои
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Название темы подправил. Если так уж сильно хочется указать ссылку на источник, это надо делать в начале или конце первого сообщения. Так же было бы неплохо указать ссылку на саму игру.
 
Автор
K

karcun

Новичок
Сообщения
5
Репутация
0
убрал себя )
добавил ссылку на игру.
Чуть переработал код и добавил управление с клавиатуры, а так же звуковое сопровождение.
Судим )))
Хотелось бы чутка критики.
Это моя первая работа с autoit

Эта игра есть еще и в Одноклассниках, и в Моем Мире на Мэйл.РУ
Хотелось бы отзывов из этих сообществ.
Собственно, управление и звук пришли из ВСекты.
Возможно, что-то добавят от себя и остальные )))
Было бы интересно ))
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 595
Репутация
938
Ждать думаю придется долго, тут редко по вконтакту темы поднимаются :smile:
 
Автор
K

karcun

Новичок
Сообщения
5
Репутация
0
а можно уведомление на почту сделать?
тогда тема сама собой жить будет.
в принципе, по отзывам трудящихся, особо ничего дополнять и не надо.
как мне сказали, инструкция максимально человекопонятная и не вызывает трудностей даже у далеких от программирования людей )))
профессионализм не пропьешь :Typing: :Google:
 

snaugrim

Новичок
Сообщения
16
Репутация
1
Не уверен, увидит ли тут кто-нибудь сообщение, но возникла следующая сложность - после забрасывания удочки, скрипт начинает отслеживать координаты полоски вылавливания рыбы относительно непосредственно флеш-контейнера, а не общего окна, что приводит к сбою скрипта. Вне зависимости от выставленных параметров
Код:
AutoItSetOption("PixelCoordMode", 1)
AutoItSetOption("MouseCoordMode", 1)
 
Автор
K

karcun

Новичок
Сообщения
5
Репутация
0
http://zhyk.ru/forum/showthread.php?t=264856
не сочтите за рекламу, но этого бота уже тыщу раз переписал и обсудил
 

snaugrim

Новичок
Сообщения
16
Репутация
1
Прочитал все по ссылке (спасибо, кстати), но не помогло. Я не знаю, по какой причине, но у меня после первого же щелчка в самом приложении, скрипт начинает делать щелчки мышкой где угодно, только не в самом приложении. Не знаю, по какой причине.

Вообще, честно говоря, у меня задача несколько переделать скрипт, чтобы он не сам ловил рыбу, а только вытягивал ее, после подсекания игроком. Во-первых, так бан выхватить не за что, а во-вторых, мышку поберечь хочется ;)
 
Автор
K

karcun

Новичок
Сообщения
5
Репутация
0
убери автоматизацию заброса наживки и закрытия окон, какие проблемы?
Если скрипт не работает, виноват ты сам.
Читай внимательнее...
Хотя, возможно, игру еще раз пофиксили и скрипт нужно править.
Мне лень )))
 

snaugrim

Новичок
Сообщения
16
Репутация
1
Я и говорю - проблема в том, что скрипт начинает щелкать в какие-то нелепые места, не имеющие никакого отношения к выставленным координатам.
 
Верх