Собственно основной геморрой в ПВ заключен в возобновлении работы экстракторов.
Вот для этого пример бота я и предлагаю.
Алгоритм примерно следующий:
Построено все на простых циклах For-Next, настройки забиваются в файл ini, хотя конечно можно сделать и базу данных, тогда возможно бот получится менее громоздким. После входа в экран планеты нам потребуется свернуть или закрыть все окна, что можно сделать сочетанием CTRL+ALT+W, этим хоткеем правда все необязательные окна закрываются, так что после отработки скрипта их потребуется снова открывать. Кнопки выхода из экрана планеты и подтверждения изменений имеют постоянные координаты и специально их искать не требуется. В качестве масштабирования можно воспользоваться кнопкой Home, которая центрирует экран на нашем командном центре и устанавливает приемлемый для работы масштаб, который не изменится если крутить планету без приближения-удаления.
Само собой планета должна уже быть застроена модулями и настроены роуты. Далее нам потребуются координаты экстракторов и точек линий перемещения по планете.
Зоны где идет добыча назовем регионами. То есть регион это группа построек для управления которыми нужно крутить планету. Перемещение между регионами при помощи серии драг&дроп:
If $Region <> $Regions Then
$Moves = IniRead($INI, $Chars[$Char], "Moves" & $Planet & "-" & ($Region + 1), 0)
For $Move=1 To $Moves
$X = IniRead($INI, $Chars[$Char], "Move" & $Planet & "-" & ($Region+1) & "-" & $Move & "X1", 0)
$Y = IniRead($INI, $Chars[$Char], "Move" & $Planet & "-" & ($Region+1) & "-" & $Move & "Y1", 0)
$X1 = IniRead($INI, $Chars[$Char], "Move" & $Planet & "-" & ($Region+1) & "-" & $Move & "X2", 0)
$Y1 = IniRead($INI, $Chars[$Char], "Move" & $Planet & "-" & ($Region+1) & "-" & $Move & "Y2", 0)
MouseClickDrag("left", $X,$Y, $X1,$Y1, 10)
Next
EndIf
В файле настроек маршрут будет выглядеть примерно так:
Regions3=2
Moves3-2=3
Move3-2-1X1=1154
Move3-2-1Y1=473
Move3-2-1X2=639
Move3-2-1Y2=447
Move3-2-2X1=1131
Move3-2-2Y1=474
Move3-2-2X2=630
Move3-2-2Y2=452
Move3-2-3X1=1114
Move3-2-3Y1=474
Move3-2-3X2=631
Move3-2-3Y2=451
Возможно потребуется настройка мыши опциями MouseClickDownDelay, MouseClickDragDelay, чтобы не было проскальзывания планеты при вращении.
Обработка экстракторов делается на даблкликах, первым даблкликом по самому экстрактору в заранее полученных координатах вызывается форма управления экстрактором, причем сразу запускается сканер ресурсов, остается только чуть чуть подождать пока он выдаст результат и сделать второй даблклик по строке с требуемой нам интенсивностью. Само собой, при том обстоятельстве, что экстракторы у нас дрочит бот, можно выставить и максимальную интенсивность с циклом полной выработки за пол часа, но следует иметь в виду что система линков должна иметь соответствующую пропускную способность. В настройках координаты экстракторов у меня выглядят примерно так:
Extractors4-1=2
E4-1-1X=529
E4-1-1Y=594
E4-1-2X=526
E4-1-2Y=562
Extractors4-2=3
E4-2-1X=480
E4-2-1Y=638
E4-2-2X=445
E4-2-2Y=600
E4-2-3X=436
E4-2-3Y=567
И обрабатываются примерно таким кодом:
$Extractors = IniRead($INI, $Chars[$Char], "Extractors" & $Planet & "-" & $Region, 0)
For $Extractor=1 To $Extractors
$X = IniRead($INI, $Chars[$Char], "E" & $Planet & "-" & $Region & "-" & $Extractor & "X", 0)
$Y = IniRead($INI, $Chars[$Char], "E" & $Planet & "-" & $Region & "-" & $Extractor & "Y", 0)
MouseMoveClick($X, $Y, "left", 2)
Sleep(3000)
If Not $ThisTest Then
$X = IniRead($INI, $Chars[$Char], "SurveyAxis", 0)
$Y = IniRead($INI, $Chars[$Char], "SurveyFirstRow", 0) + (IniRead($INI, $Chars[$Char], "RowStep", 0) * ($Intesivity-1))
MouseMoveClick($X, $Y, "left",2)
Sleep(1000)
EndIf
$X = IniRead($INI, $Chars[$Char], "SurveyCloseX", 0)
$Y = IniRead($INI, $Chars[$Char], "SurveyCloseY", 0)
MouseMoveClick($X, $Y, "left")
Sleep(1000)
Next
В качестве индикаторов можно использовать бэкграунды окон наука и промышленность и формы управления экстрактором. Так же сам экстрактор, которому уже задан режим добычи, но изменения еще не подтверждены кнопкой Submit, имеет толстое желтое кольцо в своей иконке.
Ну и собственно сам скрипт с файлом настроек