Что нового

[FreeSky Online II] Бот. Пишем с нуля

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
На пожертвования создана гильдия "RUSSIA_PAWA_AU3", присоединяйтесь :smile:
Играет кто? Есть у кого бот?
Собсно решил сам написать для неё даже не бота, а пока что просто автокликкера, поиграв пару часов, понял что бой, при достаточно оптимальном блобе, происходит без потерь со стороны игрока. При этом 5 минутный бой приносит 1\5 объема ресов добывающихся за час + всякие плюшки типа чертежей, которые как я понял без боя можно получит только за реал.

Условия разработки:
Вирт машина VMWare Workstation:
Процессоров: 1
Ядер: 2
Оперативной памяти: 6 гигов (используется 3gb из-за оси)
Ссылка на игру: http://fo2.igg.com/hd/
Мой ник в игре: Belfigor_au3. Может быть и зря я такой ник сделал, зобанят :smile:

Итак, разработка началась.
Windows 7 Professional x32
FireFox последняя версия
Разрешение: 1280х768
Автоматически скрывающаяся панель задач.
Игра запускается не в FullScreen режиме

Бот пишется и запускается под учеткой Администратора (не Локального Админа)

Разработка ведется в ISN AutoIt Studio последней версии ссылка на скачивание на оффсайт. Файлы проекта будут выкладываться так же для этой программы. Это гибрид Koda и SciTe, и он куда крутее их т.к. совмещает в себе все их функции, хоть и редактор гуя там послабее чем в koda, но для рядовых целей его хватает за глаза.

Принцип работы: исключительно графика. При этом на данный момент она ограничится только типовыми функциями AutoIt'а, без всяких ImageSearch и FastFind. В 99.9999999% мы обойдемся только функцией PixelSearch, и различных построенных на её основе доп функциях, возможно PixelSearchEx, но не факт, пока не вижу смысла её юзать.

Контроль версий:
Все просто, когда я создаю новую функцию, я присваиваю ей имя и версию 0.1
0.1 - голая функция которая умеет только выводить в лог свое название и версию
Когда функция обрастает кодом она получает +0.1 к своей версии
Когда я сочту что функция доведена до рабочего состояния, она получает версию 1.0
Все последующие изменения в функции увеличивают её версию на +0.1
Все критические изменения перерабатывающие концепт функции увеличивают её версию на +1.0

Программа опрашивает каждую функцию на предмет её версии и суммарно высчитывает свою версию.

Не удивляйтесь если версии бота будут перепрыгивать с 1.0 на 5.0 разом или же расти по +0.1 долгое время.

Когда функции бота стабилизируются он будет прирастать по 0.1, а прирост в 1.0 за раз будет значить критическое изменение.


Реализация логики: Склеп.
Незнаю как это называется по научному, управляющая функция опрашивает используемые на предмет их состояния, формируется результат "1|2|4|5|6|2|1" и по результату подыскивается соответствующий данному состоянию шаблон действия. Назвал склеп, ибо похоже на опознание трупа\скелета по ключевым факторам, когда мы сверху вниз просматриваем каждую полку на соответствие заданным критериям.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [FreeSky Online] Бот. Пишем с нуля

Зарезервированное сообщение 1



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

Любая мало мальски сложная программа начинается с отладки. Выкладываю первую версию, она только может выводить в консоль информацию о том что скрипт запущен и тут же выключаться. Функцию Debug мы будем использовать для отладки. Она может выводить отладочную инфу в консоль, месседж бокс, логфайл и в память. Т.к. я буду всегда запускать скрипт из редактора, я буду использовать только режим вывода в консоль. Для нормальной работы с логфайлом и памятью для последующей коммерциализации скрипта, вам вероятнее придется её слегка подпилисть. Скажу сразу, я буду говнокодить по страшному, чтобы это коммерциализировать вам придется писать с нуля :smile:
 

Вложения

  • FSO-chan v1.1.isp.zip
    4.2 КБ · Просмотры: 7
  • FSO-chan v1.1.zip
    4.3 КБ · Просмотры: 9
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [FreeSky Online] Бот. Пишем с нуля

alex33 сказал(а):
Belfigor сказал(а):
Зарезервированное сообщение 1

Прошу кого-нибудь написать что-нибудь, чтобы я второе зарезервированное сообщение создал, а то оно щас добавляет к текущему :(. Ваше сообщение потом будет удалено. А после 2-го зарезервированного сообщения уже начнется обсуждение :smile:
А вот и сообщение :smile: Кстати да, зачем резервировать сообщения? Зачем они? Можно ведь просто писать в самое первое сообщение, редактировать или по порядку...
Зарезервированное сообщение номер 2
Число знаков в сообщении ограничено. Поэтому сразу несколько делаю, на всякий случай. :smile:


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

Гости жены взяли верх. Придется продолжить завтра :(
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [FreeSky Online] Бот. Пишем с нуля

v3.4
Бот умеет циклически фармить кампанию 2-го лвла с помощью двух капитанов. Управляющие функции статические, для работы нужно разместить базу как на скрине: https://www.dropbox.com/s/ulr203ldc6sx08l/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202015-07-12%2022.47.39.png?dl=0

За час бот выполнил 24 миссии
 

Вложения

  • FSO-chan v3.4.isp.zip
    6.5 КБ · Просмотры: 14
  • FSO-chan v3.4.zip
    6.7 КБ · Просмотры: 19

bugaj

Знающий
Сообщения
140
Репутация
11
уволили, че это ты опять ботоводишь?) РМТшить там можно/выгодно?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
bugaj, Да просто на больничном сижу, решил молодость вспомнить. РМТшить не знаю, не ставил себе целью. Просто игра понравилась :smile:.
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
OffTopic:
Belfigor [?]
Мой ник в игре: Belfigor_au3.

Ник не играет роли. Связаться можно только по UserID.
MTBuiPx.png
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ооо, кто-то шарит в этой игре? Там есть хотябы английские сервера?
User ID:268872296
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
Нет не шарит :whistle:
Попробовал добавить в друзья, но кроме цифр поле ввода ничего не принимало.
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Я еще даже не разобрался сколько там серверов и как создать чара на конкретном серваке :smile:


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

Бот работает стабильно. Кстати как я и писал в сообщениях выше, без бота там играть нереально, ибо все что выше кораблей 1 лвла, падает в дропе на мисках, и я получил первый новый корабль спустя несколько сотен миссий.
 

gloss

Ленивое кодило
Сообщения
155
Репутация
5
OffTopic:
Ошибся я с PlayerID :shok:ops:
Посмотреть можно в Rankings
Запутали меня, нехорошие ;D
Сам я с ником тоже намудрил
ITc7d8u.png


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

Что-то я не совсем въезжаю, как под координаты окно браузера подстроить. Оно должно быть развернуто на весь экран(при условии что разрешение монитора 1280х768) или можно просто передвинуть в Top-Left? И обязательно ли браузер должен быть FF?
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Мой ID 52551


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

Посмотри скрин, сделай именно как на скрине.


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

На пожертвования создана гильдия "RUSSIA_PAWA_AU3", присоединяйтесь :smile:
 

DStalker

Ботоводство+Мультибоксинг = время выспаться ;)
Сообщения
39
Репутация
2
ID:269737425
USSeR_Arachnid мой ник, нахожусь левее от вас)
разбираюсь 2й день, полёт нормальный. Бота не запускал)
 

DStalker

Ботоводство+Мультибоксинг = время выспаться ;)
Сообщения
39
Репутация
2
Случайно сегодня набрёл на битву между топ кланами:

Дядечки там флотами по 200тысяч кораблей 87 уровня летают)

Автокликера преписал под себя, чужой код - дебри, ниасилил)
Под созданное ГУИ окно находим координаты кнопок которые надо перетыкивать, и в бой!
полминуты на 1ю миссию=1сундук
со ста сундуков у меня упало
3 вида чертежа на начальные корабли, остальное ресы.

Принципе автокликер нужен для прохождении миссий начиная с первой и открывание писем и сундуков, после ночи кликания их может быть под 1000)


Код:
While 1

$tutor= PixelSearch (900,650,950,700,0xE882FB);поиск туториала
	If @error = 0 Then
		MouseClick("left",918,686,1,0);вход в миссию
		Sleep(1000)
		MouseClick("left",484,613,1,0)
		Sleep(700)
		MouseClick("left",480,670,1,0)
		Sleep(700)
		MouseClick("left",222,300,1,0)
		Sleep(700)
		MouseClick("left",375,343,1,0)
		Sleep(700)
		;MouseClick("left",430,715,1,0);топливо заправить
		;Sleep(500)
		;MouseClick("left",456,692,1,0)
		;Sleep(200)
		;MouseClick("left",656,686,1,0)
		;Sleep(500)
		MouseClick("left",607,257,1,0)
		Sleep(700)
		MouseClick("left",522,723,1,0)
		Sleep(27000)
		$EndMission01= PixelSearch (891,647,891,647,0xA18677);поиск кнопки окончания миссии
			If @error = 0 Then
				Else
				 sleep(3000)
				 		MouseClick("left",1093,218,1,0)
						Sleep(500)
						MouseClick("left",930,649,1,0)
						Sleep(500)
				EndIf
		MouseClick("left",891,647,1,0)
		Sleep(1000)
	Else
		MouseClick("left",1093,218,1,0);всякие случайные повисоны
		Sleep(500)
		MouseClick("left",930,649,1,0);;всякие случайные повисоны
		Sleep(500)
	EndIf
WEnd


ISN AutoIt Studio - отдельное сспасибо, курю мануал что на нём удобнее создавать
Координаты подгоняются под размер созданного ГУИ окна
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Тоже зарегистрировался в игре, пока разбираюсь.

Ник: XpycT
ID: 52776

Belfigor
Отправил вам запрос на добавления в друзья
 
Автор
B

Belfigor

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


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

Обновление бота 4.4
Добавился GUI, кнопка start/stop, возможность настраивать часть MouseCLick и кнопка запускающая открывалку писем (перед этим надо открыть окно с письмами)
 

Вложения

  • FSO-chan 4.4.isp.zip
    12.3 КБ · Просмотры: 7
  • FSO-chan 4.4.zip
    12.8 КБ · Просмотры: 8
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Последняя версия
 

Вложения

  • FSO-chan 4.4.isp
    14 КБ · Просмотры: 12

Geralld

Новичок
Сообщения
7
Репутация
0
OffTopic:
А какая версия ISN Autoit Studio?
Просто скачал по ссылке студию и у меня проекты создаются с расширением *.isn, а при попытке открыть Ваш *.isp проект выдает ошибку "Ошибка открытия проекта"

Странный баг: пробовал открывать просто из тотала, запускалась ISN студия с этой ошибкой; пробовал открыть студию и там уже выбрать импорт проектов - тот же результат. Запустил из тотала при открытой ISN студии и опана! открылась 2ая копия ISN студии и нормально импортировался проект...

ЗЫ: лол, _Bidlo функции? почему так жестоко назвали? :smile:
 

Geralld

Новичок
Сообщения
7
Репутация
0
Пробовал запустить код Belfigor-а, но так и не переборол: скорее всего из-за недопонимания как работает прога. У меня каждый раз просит залогиниться несмотря на то что в ФФ уже залогинен. Ставлю на паузу логинюсь, а дальше траблы со флешем: выдает мессаджбокс с сообщением "страница сообщила об ошибке " и пару стековерфлоу.

В итоге плюнул и написал простенький автокликер (хром, разрешение 1920*1080, слева панель задач, поле боя масимально отдалено и смещено влево и вниз до упора). Кто хочет изменить под себя придется все константы переписать (координаты крайних точек кнопок).

Код:
; Версия 0.1
Opt("PixelCoordMode", 2) 	;Отсчет координат пикселей от левого верхнего угла клиентской части окна
Opt("MouseCoordMode", 2) 	;Отсчет координат мыши от левого верхнего угла клиентской части окна

#Region ; ============ Горячие клавиши ========================

HotKeySet ('{`}','_exit');задаем горячую клавишу остановки скрипта
HotKeySet("{PAUSE}", "TogglePause") ;пауза по нажатию PAUSE

#EndRegion

Const $WINTITLE = "FreeSky Online 2:Best Steampunk Strategy Game - Google Chrome"
Const $Surrender[6]=[888, 933, 898, 943, 0xEA850C, 10]
Const $ControlTower[4] = [740, 670, 820, 720]
Const $Campaing[4] = [1027, 682, 1105, 691]
Const $Mission2[4] = [747, 506, 786, 544]
Const $Captain1[4] = [647, 366, 908, 428]
Const $Captain2[4] = [947, 373, 1203, 434]
Const $Captain3[4] = [647, 461,901, 516]
Const $Captain4[4] = [954, 465, 1206, 524]
Const $LoadAerogol[4] = [655,844,673,858]
Const $SupplyMax[4] = [662, 814, 803, 829]
Const $ConfirmSupply[4] = [824, 812, 967, 829]
Const $ConfirmCampaing[4] = [709, 843, 814, 864]
Const $ConfirmWin[6] = [1073, 773, 1210, 786, 0xF37226, 10]
Const $Mail[6] = [1600, 880, 1609, 888, 0xFF0A00, 10]
Const $FirstMailMessage[4] = [629, 500, 1289, 526]
Const $AcceptAll[4] = [718, 831, 847, 845]
Const $DeleteMail[4] = [546, 830, 679, 844]
Const $CloseMail[4] = [1337, 347, 1359, 372]
Global $Paused

WinActivate($WINTITLE)
If not @error Then
   While 1
	  Sleep(3000)
	  
	  SetError(0)
	  PixelSearch($Mail[0], $Mail[1], $Mail[2], $Mail[3], $Mail[4], $Mail[5])	; есть красный кружок на кнопке Mail - открываем письма
	  If Not @error Then
		 
		 ToolTip("Открываем письма", 0,0)
		 MouseClickRandom($Mail[0], $Mail[1], $Mail[2], $Mail[3])
		 Sleep(1000)
		 MouseClickRandom($FirstMailMessage[0], $FirstMailMessage[1], $FirstMailMessage[2], $FirstMailMessage[3])
		 Sleep(1000)
		 MouseClickRandom($AcceptAll[0], $AcceptAll[1], $AcceptAll[2], $AcceptAll[3])
		 Sleep(1000)
		 MouseClickRandom($DeleteMail[0], $DeleteMail[1], $DeleteMail[2], $DeleteMail[3])
		 Sleep(1000)
		 MouseClickRandom($CloseMail[0], $CloseMail[1], $CloseMail[2], $CloseMail[3])

	  Else 
	  
		 SetError(0)
		 PixelSearch($ConfirmWin[0], $ConfirmWin[1], $ConfirmWin[2], $ConfirmWin[3], $ConfirmWin[4], $ConfirmWin[5])	; есть кнопка confirm после боя - подтверждаем победу
		 If Not @error Then
			ToolTip("Победили!", 0,0)
			MouseClickRandom($ConfirmWin[0], $ConfirmWin[1], $ConfirmWin[2], $ConfirmWin[3])
		 Else		   
			SetError(0)
			PixelSearch($Surrender[0], $Surrender[1], $Surrender[2], $Surrender[3], $Surrender[4], $Surrender[5])
			If @error Then																								; Нет кнопки Surrneder - признак боя, значит заправимся и отправим 4 капитанов на 2ую миссию
			   ToolTip("Запускаем бой!@error = " &@error, 0,0)
			   MouseClickRandom($ControlTower[0], $ControlTower[1], $ControlTower[2], $ControlTower[3])
			   Sleep(1000)
			   MouseClickRandom($Campaing[0], $Campaing[1], $Campaing[2], $Campaing[3])
			   Sleep(1000)
			   MouseClickRandom($Mission2[0], $Mission2[1], $Mission2[2], $Mission2[3])
			   Sleep(1000)
			   MouseClickRandom($Captain1[0], $Captain1[1], $Captain1[2], $Captain1[3])
			   Sleep(500)
			   MouseClickRandom($Captain2[0], $Captain2[1], $Captain2[2], $Captain2[3])
			   Sleep(500)
			   MouseClickRandom($Captain3[0], $Captain3[1], $Captain3[2], $Captain3[3])
			   Sleep(500)
			   MouseClickRandom($Captain4[0], $Captain4[1], $Captain4[2], $Captain4[3])
			   Sleep(1000)
			   MouseClickRandom($LoadAerogol[0], $LoadAerogol[1], $LoadAerogol[2], $LoadAerogol[3])
			   Sleep(1000)
			   MouseClickRandom($SupplyMax[0], $SupplyMax[1], $SupplyMax[2], $SupplyMax[3])
			   Sleep(1000)
			   MouseClickRandom($ConfirmSupply[0], $ConfirmSupply[1], $ConfirmSupply[2], $ConfirmSupply[3])
			   Sleep(1000)
			   MouseClickRandom($ConfirmCampaing[0], $ConfirmCampaing[1], $ConfirmCampaing[2], $ConfirmCampaing[3])
			   Sleep(2000)
			Else
			   ToolTip("Сражаемся! @error = " &@error, 0,0)	
			EndIf
			
		 EndIf
		 
	  EndIf
	  
   WEnd   
Else
   MsgBox(0, "Поиск окна", "Искомое окно не найдено:" &@CLR &$WINTITLE)
EndIf


Func MouseClickRandom($x1, $y1, $x2, $y2, $mainButton = "left")
   MouseClick($mainButton, Random($x1, $x2, 1), Random($y1, $y2, 1));
   Sleep(100)
EndFunc


#Region ; ============== Функции горячих клавиш ================

; Функция выхода из скрипта
Func _exit($param = "")
   MsgBox(0, "Exit", "Скрипт заканчивает свою работу!")
  Exit
EndFunc

Func TogglePause();Функция паузы
    $Paused = NOT $Paused
    While $Paused
    sleep(50)
        ToolTip('Скрипт "Остановлен"',0,0)
    WEnd
    ToolTip("")
EndFunc
#EndRegion
 
Верх