Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   ВКонтакте: Рыбное Место, бот abyrvalg от karcun (vk.com/karcun) (http://forum.oszone.net/showthread.php?t=215244)

karcun 09-09-2011 16:10 1749724

ВКонтакте: Рыбное Место, бот abyrvalg от karcun (vk.com/karcun)
 
Исходник для autoit-бота, рыбачащего на автомате круглосуточно )))
У меня пашет уже 6 суток.
Думаю, не за горами и бан )))

Да и abr c ним, не велика потеря
Перед использованием бота нужно слегка доработать напильником.
Это не страшно, ниже прилагаю пошаговую инструкцию.

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

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

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

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

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

4) Строка 29 (
PHP код:

If Hex(PixelGetColor(891,533), 6) <> "563A12" Then 

):
Проверяем на месте ли кнопка "Забросить удочку".
Берем "AutoIt Window Info" и замеряем точку, располагающуюся на верхней кромке кнопки (коричневая обводка)
Результатами заменяем нужное в нашей строке 29

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

6) Строки 52, 56, 60, 64, 68, 72, 76.
PHP код:

$coord PixelSearch(6244806805600xFF8000

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

7) Строки 94, 95 и 101
Тут опять используем "AutoIt Window Info"
PHP код:

$str 496 140 

позиция шкалы по оси Х, где начинаем тянуть
PHP код:

$end 883 140 

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

$lvl 738 

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

8) Строка 116
PHP код:

While Hex(PixelGetColor(891,533), 6) = "563A12" 

См. шаг 4

Код бота:
PHP код:

$exit 0
$refresh 
0
;Главный цикл программы
While $exit <> 1
    WinActive
("Рыбное место - ловим рыбу с друзьями!");Заголовок окна
    WinActivate
("Рыбное место - ловим рыбу с друзьями!");Заголовок окна
    MouseClick
("left"1070) ;Сфокусировались на странице
    Sleep
(200)
    
Send("{Home}");Передвинули страницу на самый верх
    Sleep
(200)
    
MouseClick("left"451273);Сфокусировались на приложении
    
;Закрыли все оповещалки
    Send
("{Esc}")
    
Sleep(200)
    
Send("{Esc}")
    
Sleep(200)
    
Send("{Esc}")
    
Sleep(200)
    
    ;
Забросили удочку
    Send
("{Space}")
    
Sleep(3000)
    
    ;
Если не получилось
    
;Проверка на обводке кнопки.
    ;
Если кнопка естьто можно забрасывать
    
;Так бывает когда закончились снасти
    
;или если сервер не доступен
    
If Hex(PixelGetColor(891,533), 6) <> "563A12" Then
        
;С каждым разом ждем дольше
        Sleep
($refresh 20000)
        
$refresh += 1
        MouseClick
("left"7040)
        ;
Ждем загрузки приложения
        Sleep
(20000)
        ;
Перезапуск главного цикла
        ContinueLoop
    
EndIf
    
$refresh 0
    
;Ждем поклевку
    $bite 
0;
    While 
$bite=0
        $bite1 
False
        $bite2 
False
        $bite3 
False
        $bite4 
False
        $bite5 
False
        $bite6 
False
        
;Если удочкато смотрим на поплавок
        
;При необходимости добавляем цвета на поверхности поплавка
                            
;координаты прямоугольникав котором ищем поплавок и цветкоторый ищем
        $coord 
PixelSearch(6244806805600xFF8000)
        If 
Not @error Then
            $bite1 
True
        
EndIf
        
$coord PixelSearch(6244806805600xD50202)
        If 
Not @error Then
            $bite2 
True
        
EndIf
        
$coord PixelSearch(6244806805600xFF9F00)
        If 
Not @error Then
            $bite3 
True
        
EndIf
        
$coord PixelSearch(6244806805600xD0661E)
        If 
Not @error Then
            $bite4 
True
        
EndIf
        
$coord PixelSearch(6244806805600xFFCC00)
        If 
Not @error Then
            $bite4 
True
        
EndIf
        
$coord PixelSearch(6244806805600xBF9900)
        If 
Not @error Then
            $bite4 
True
        
EndIf
        
$coord PixelSearch(6244806805600xFF0000)
        If 
Not @error Then
            $bite4 
True
        
EndIf
        If 
$bite1 Or $bite2 Or $bite3 Or $bite4 Or $bite5 Or $bite6 Then
            
;нет поклевкипоплавок найден
            $bite 
0
        
Else
            ;
поклевка
            $bite 
1  
        
EndIf
        
Sleep(25)
    
WEnd
    
    
;Когда поплавок ушел под воду при поклевке
    
;или рыбачим на спиннинг (поплавка нет вовсе)
    ;
запоминаем цвет под шкалой (закрашено шкалой или нет)
    
    
$str 496 140;позиция шкалы по оси Хгде начинаем тянуть
    $end 
883 140;позиция шкалы по оси Хгде заканчиваем тянуть

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

    $lvl 
738;позиция шкалы по оси У
    
    $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;отпускаемтащим
    
While Hex(PixelGetColor(891,533), 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)
WEnd 

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

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

karcun 09-09-2011 18:13 1749813

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

karcun 10-09-2011 00:57 1750042

Исправил нелепые ошибки
и добавил управление с клавиатуры.

Pause/Break - ставим бота на паузу что бы сделать скриншот
Поставить бота на паузу можно в любое время, пауза срабатывает когда показывается окошко с уловом, через 3 секунды оно исчезнет если на паузу не поставить и бот снова забросит удочку.

F10 - выключить бота.
PHP код:

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"1070) ;Сфокусировались на странице
    SLEEP
(200)
    
Send("{Home}");Передвинули страницу на самый верх
    SLEEP
(200)
    
MouseClick("left"451273);Сфокусировались на приложении
    
;Закрыли все оповещалки
    Send
("{Esc}")
    
SLEEP(200)
    
Send("{Esc}")
    
SLEEP(200)
    
Send("{Esc}")
    
SLEEP(200)
    
    ;
Забросили удочку
    Send
("{Space}")
    
SLEEP(3000)
    
    ;
Если не получилось
    
;Проверка на обводке кнопки.
    ;
Если кнопка естьто можно забрасывать
    
;Так бывает когда закончились снасти
    
;или если сервер не доступен
    
IF Hex(PixelGetColor(891,533), 6) <> "563A12" THEN
            
;С каждым разом ждем дольше
            SLEEP
($refresh 20000)
            
$refresh += 1
            
;что-то случилосьперезагружаем страницу
            MouseClick
("left"7040)
            ;
Ждем загрузки приложения
            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(6244806805600xFF8000)
            IF 
NOT @ERROR THEN
                    $bite1 
True
            
EndIf
            
$coord PixelSearch(6244806805600xD50202)
            IF 
NOT @ERROR THEN
                    $bite2 
True
            
EndIf
            
$coord PixelSearch(6244806805600xFF9F00)
            IF 
NOT @ERROR THEN
                    $bite3 
True
            
EndIf
            
$coord PixelSearch(6244806805600xD0661E)
            IF 
NOT @ERROR THEN
                    $bite4 
True
            
EndIf
            
$coord PixelSearch(6244806805600xFFCC00)
            IF 
NOT @ERROR THEN
                    $bite5 
True
            
EndIf
            
$coord PixelSearch(6244806805600xBF9900)
            IF 
NOT @ERROR THEN
                    $bite6 
True
            
EndIf
            
$coord PixelSearch(6244806805600xFF0000)
            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 496 140;позиция шкалы по оси Хгде начинаем тянуть
    $end 
883 140;позиция шкалы по оси Xгде заканчиваем тянуть

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

    $lvl 
738;позиция шкалы по оси У
    
    $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;отпускаемтащим
    
WHILE Hex(PixelGetColor(891,533), 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 



Время: 23:45.

Время: 23:45.
© OSzone.net 2001-