Что нового

[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" и по результату подыскивается соответствующий данному состоянию шаблон действия. Назвал склеп, ибо похоже на опознание трупа\скелета по ключевым факторам, когда мы сверху вниз просматриваем каждую полку на соответствие заданным критериям.
 
Автор
Belfigor

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
Автор
Belfigor

Belfigor

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

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

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


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

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

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
уволили, че это ты опять ботоводишь?) РМТшить там можно/выгодно?
 
Автор
Belfigor

Belfigor

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

Belfigor

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

gloss

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

Belfigor

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


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

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

gloss

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


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

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

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
Отправил вам запрос на добавления в друзья
 
Автор
Belfigor

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
Автор
Belfigor

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
 
Верх