D&C :: Скрипты

Общая информация

Обратите внимание: Скриптование как таковое и данный раздел справки находятся в активной работе. Не все, написанное здесь уже работает в игре и не все, работающее в игре, описано здесь.

В D&C есть возможность автоматизировать свою империю. Вы можете отлучиться на неделю, можете быть слишком заняты какое-то время, но это не значит, что ваши подданные должны страдать! Управляйте будущим наравне с настоящим и будьте там, где вас нет. Эта возможность доступна только для платных учетных записей, причем продвинутые возможности даются отдельно, обычная подписка позволяет автоматизировать далеко не все.

Автоматизация осуществляется путем назначения флотам скриптов. В качестве языка скриптования используется perl с отключенным доступом к ресурсам системы (модуль Safe).

После просчета хода все флоты платных игроков просматриваются в поиске активных скриптов. Если найден разрешенный скрипт, он выполняется. Вы можете задать порядок выполнения скриптов назначая им "вес", наиболее "тяжелые" скрипты будут выполнены последними – 1, 2, 3, 4...

Каждому флоту вы можете назначить один скрипт.

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

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

Empire

my $Fleet = $Empire->this_fleet();

if (!$Empire->fake()){
  $Empire->writeVariable('myvar',56);
  $Empire->message('Everything is Ok');
  $Empire->clearLog();
} else {
  $Empire->log(0,"Processed fleet ".$Fleet->getProp('name')."...");
}

Один экземпляр этого объекта дается вам при запуске скрипта в переменной $Empire. Все прочие объекты вы получаете вызывая процедуры экземпляра $Empire.

Методы:

fake – read/write метод. Если вызывается с параметром, устанавливает режим "учебного" выполнения. Если вызывается без параметров – показывает, в каком режиме исполняется скрипт в данный момент - в тестовом или в реальном. Это позволит гибко отлаживать скрипты. Если fake установлен в 1, никаких реальных действий скрипт не производит, только пишет лог, по возможности проверяя корректность операций. Если fake равен нулю или не определен, скрипт реально и необратимо выполняется на сервере и вы можете посмотреть на результат. По-умолчанию установлена в 1 при тестовом запуске из редактора и в 0 при автоматическом запуске после расчета хода. Обратите внимание, что при создании дочерних объектов они наследуют fake от Empire, но в дальнейшем ведут "самостоятельную" жизнь, изменение свойства fake для Empire не повлияет на уже созданные объекты.

tag – read/write метод. Если вызывается с параметром, назначает метку/переменную длинной 10 символов, которая сохраняется между запусками данного экземпляра скрипта. Для чтения метки метод вызывается без параметров. Сразу после создания скрипта содержит undef, впоследствии хранит последнее присвоенное значение. Используйте для хранения текущей позиции в очереди задач и т.п. вещей.

message – read/write метод. Сообщение, передаваемое скриптом пользователю размером до ста символов. Будет видно в списке флотов. По умолчанию пустое, назначается по желанию, например message("Идет погрузка...") и т.п.

ok – read/write метод. Статус завершения скрипта. Будет виден в списке флотов, если установлено свойство message. По-умолчанию устанавливается в 1, что означает успешное выполнение. Присвойте 0, чтобы сигнализировать об ошибке. Не зубудьте передать и message с подробной информацией.

this_fleet – возвращает объект типа Fleet, указывающий на флот, которому принадлежит выполняющийся скрипт. При простой подписке это единственный объект типа Fleet, к которому вы можете получить доступ.

harrison($X,$Y) – возвращает объект типа Harrison, указывающий на гарнизон одной из ваших планет. При простой подписке это единственный объект, в который и из которого вы можете перемещать юниты. Так же при обычной подписке объект Harrison может работать только с контейнерами. Чтобы получить доступ ко всем юнитам, находящимся в гарнизоне, необходима расширенная подписка.

dipRelation($OtherPlayerID) – возвращает установленные с другим игроком отношения. Может принимать значения undef:undef, 0: enemy, 1: none, 2: ally, 3: vassal, 4: lord.

fleets – возвращает объект Fleets. При обычном платном доступе метод не работает, чтобы получить доступ к объекту Fleets необходимо оформить дополнительную подписку.

planets – возвращает объект Planets. При обычном платном доступе метод не работает, чтобы получить доступ к объекту Planets необходимо оформить дополнительную подписку.

queue – возвращает объект Queue. При обычном платном доступе метод не работает, чтобы получить доступ к объекту Queue необходимо оформить дополнительную подписку.

designHouse – возвращает объект DesignHouse. При обычном платном доступе метод не работает, чтобы получить доступ к объекту DesignHouse необходимо оформить дополнительную подписку.

log($Status,$Description) – вносит запись в лог исполнения скрипта, первый параметр – статус (0 – OK, 1 – сообщение, 2 – предупреждение, 3 – ошибка), второй – текст, описывающий событие.

writeVariable($VariableName,$ValueToStore) – сохраняет значение в базу данных сервера. Значение может быть прочитано из любого скрипта, выполняемого от имени этого пользователя. Метод доступен при оформлении дополнительной подписки, в обычную подписку не включен. Метод одинаково необратимо выполняется и в реальном, и в fake режимах.

readVariable($VariableName) – читает значение переменной из базы данных сервера. Значение может быть записано из любого скрипта, выполняемого от имени этого пользователя. Метод доступен при оформлении дополнительной подписки, в обычную подписку не включен.

getVariablesNames – читает все доступные имена переменных из базы данных сервера и возвращает их как массив. Можно использовать для очистки базы от ненужных переменных (для удаления переменной достаточно записать в нее undef и при следующей уборке мусора на сервере она будет удалена). Метод доступен только в расширенной подписке.

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

getProp($propName) – возвращает одно из свойств планеты. Возможные значения $propName:

paid_lvl – возвращает 0 в случае базовой подписки и уровень подписки для расширенной.

turn – возвращает номер текущего хода.

player_id - ID игрока, от имени которого выполняется скрипт.

race_nature, industry_nature, unused_resource – названия ресурса-природы расы, основного и дополнительного ресурса для данного игрока (для хумансов будет 'o', 'm', 'e').

main_left, second_left, money_left – запасы ресурсов у текущего игрока (те, что отображаются вверху экрана).

main_per_turn, second_per_turn, money_per_turn, main_per_turn_spent, second_per_turn_spent, money_per_turn_spent – затраты/расходы за последний ход.

tehnology – уровень технологии.

race_id – ID расы игрока.

t_optimal, t_delta - температурный режим игрока.

bonus_iq, bonus_multiply, bonus_attack, bonus_dr, bonus_hp, bonus_speed, bonus_build_peace, bonus_build_war, bonus_price, bonus_mining – расовые бонусы игрока.

Fleet

my $Fleet = $Empire->this_fleet();
if ($Fleet->getProp('turns_till_arrival')){
  $Empire->log(1,"Fleet ".$Fleet->getProp('name')." is still flying, ".
    $Fleet->getProp('turns_till_arrival')." turns to fly left");
} else {
  if (scalar($Fleet->getAllUnits()) > 10){
    $Empire->log(0,"Fleet ".$Fleet->getProp('name')." has too many".
      " units, time to drop some");
    $Fleet->SetBehaviour('111111'); #Kill anyone and then invade!
  } else {
    $Empire->log(0,$Fleet->getProp('name')." is too".
      " small, we better escape!");
    if (!$Fleet->jump(500,500)){
      my $Mes="Help! \"".$Fleet->getProp('name')."\" can not".
        " escape! Need a human brain here! Help!";
      $Empire->log(3,$Mes);
      $Empire->message($Mes);
      $Empire->ok(0);
    }
  }
}

Объект Fleet предоставляет доступ к флотам. Вы можете спрятаться, показаться, совершить гиперпространственный прыжок или оценить полученные повреждения.

Фактически, вы можете делать все то же самое, что и через веб-интерфейс (кроме отмены для прыжков и для невидимости). Экземпляр этого объекта всегда передается вам в свойстве this_fleet объекта Empire.

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

Методы:

getProp($propName) – возвращает одно из свойств флота. Возможные значения $propName:

id – ID флота, используемый в БД.

turns_till_arrival – время до прибытия. Для флотов, которые никуда не летят, всегда равно нулю.

x, y – координаты планеты расположения/назначения, в зависимости от значения turns_till_arrival.

behaviour – текущее поведение флота, представленное как строка из шести цифр. Цифры означают следующее: [1] Attack&invade, [2] Atack, [3] Defend, [4] Help. Первая цифра относится к неопределенным игрокам, вторая – к врагам, далее нейтральный игрок, союзник, вассал и лорд. По-умолчанию флот имеет поведение '313444'.

hidden – текущий статус скрытности флота.

name – имя флота.

fly_range – дальность полета. Имеет смысл сверяться с этим значением перед отправкой флота в гиперпространство.

fly_speed – скорость полета.

large_ship_count – число прыгунов во флоте. Его, в числе прочего, видят другие игроки.

sum_weight – суммарный вес флота.

stealth_lvl – возможности флота скрыться.

free_carrier_capacity – свободные взлетные палубы для истребителей.

free_transport_capacity – свободные транспортные ячейки.

ext_name – «внешнее» имя для флота.

fake – read/write метод. Если вызывается с параметром, устанавливает режим "учебного" выполнения для отдельного флота. Если вызывается без параметров – показывает, в каком режиме исполняется скрипт для данного флота. Если fake равен нулю или не определен, скрипт реально и необратимо выполняется на сервере и вы можете посмотреть на результат. По-умолчанию установлена в 1 при тестовом запуске из редактора и в 0 при автоматическом запуске после расчета хода.

jump($X,$Y) – совершить прыжок в указанную точку. Возвращает 1 при успехе undef при неудаче.

show($Show) – изменить статус видимости флота. show(0) включает невидимость, show(1) отключит невидимость. Возвращает 1 при успехе и undef при неудаче.

createFleetNear($FleetName) – создает флот по соседству с флотом, для которого вызван метод. Возвращает объект-флот, который можно использовать, к примеру, для перемещения в него юнитов. Эта функция доступна только при подписке на объект Fleets.

getUnitByID($UnitID) – находит во флоте юнит с указанным ID и возвращает соответствующий объект-Unit.

getUnitsByClass($ClassID) – возвращает массив, содержащий все юниты в выбранном флоте указанного типа. getUnitsByClass(11), к примеру, вернет все зонды во флоте в виде массива.

getAllUnits() – возвращает массив, содержащий все юниты в выбранном флоте.

SetBehaviour($NewBehaviour) – задает поведение для флота (см. свойство behaviour выше).

Rename($NewName,$NewExtName) – задает новые имена для флота – внутреннее и внешнее.

Share($PlayerNames,$Mode) – Расшаривает флот на управление другим игрокам. В $PlayerNames записываются имена игроков, которым должно быть передано управление, разделитель – запятая. Установив $Mode в -1 вы отзовете все разрешения.

Harrison

my $Fleet = $Empire->this_fleet();
my $Harrison=$Empire->harrison(500,500);
my @Colonyes=$Harrison->getUnitsByClass(7);
for (@Colonyes){
	$_->transferToAnotherFleet($Fleet->getProp("id"));
}
$Fleet->jump(500,501) if @Colonyes;

По сути, аналог объекта Fleet во всем, что касается работы с юнитами, но полностью лишенный управления поведением. Вы можете выбирать в нем юниты, перемещать юниты в него и из него, но и только. При базовой подписке это единственный объект, с которым вы можете проводить перемещения юнитов, то есть вы можете перемещать контейнеры из гарнизона во флот или из флота в гарнизон, но не из флота во флот. При подписке на объект Fleets этого ограничения нет, вы можете перемещать юниты между флотами и создавать новые флоты.

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

Методы:

getProp($propName) – возвращает одно из свойств гарнизона, аналогично методу флота но имеет скудный набор возможных значений $propName:

x, y – координаты планеты, которой принадлежит гарнизон.

createFleetNear($FleetName) – создает флот по соседству с гарнизоном, для которого вызван метод. Возвращает объект-флот, который можно использовать, к примеру, для перемещения в него юнитов. Эта функция доступна только при подписке на объект Fleets.

getUnitByID($UnitID) – находит в гарнизоне юнит с указанным ID и возвращает соответствующий объект-Unit.

getUnitsByClass($ClassID) – возвращает массив, содержащий все юниты в выбранном гарнизоне указанного типа. getUnitsByClass(11), к примеру, вернет все зонды в гарнизоне в виде массива.

getAllUnits() – возвращает массив, содержащий все юниты в выбранном гарнизоне.

Fleets

my $Fleets=$Empire->fleets();
my $Fleet=$Empire->this_fleet();

my ($Unit) = $Fleet->getUnitsByClass(11);
my $AnotherFleet = $Fleets->getFleetByID(6353);

$Unit->transferToAnotherFleet(6353) if $Unit;

for ($Fleets->getFleetsByName('Explo%')){
  unless ($_->getProp('turns_till_arrival')){
    my ($Probe) = $_->getUnitsByClass(11);
    $Probe->performAction(1) if $Probe;
  }
}

Этот объект не входит в обычную подписку, его нужно оплачивать отдельно. Позволяет из любого скрипта управлять всеми флотами.

Методы:

getFleetByID($FleetID) – выбирает флот по ID.

getFleetsByName($Pattern) – отбирает все флоты по названию. В названии можно использовать символы % (процент, соответствует любой последовательности символов) и _ (подчеркивание, соответствует одному символу). Возвращает массив.

getFleetsByLocation($X,$Y) – отбирает все ваши флоты, находящиеся в настоящий момент в системе $X:$Y. Возвращает массив.

Unit

my $Fleet=$Empire->this_fleet();
my $Hospital;
for ($Fleet->getAllUnits()){
  # this simple script will only work with
  # non-transportable units
  if ($_->getProp('max_hitpoints')/$_->getProp('hit_pointsleft') < 0.2){
    # below 20% HP left, escape to the nearest base
    unless ($AnotherFleet){
      $Hospital=$Fleet->createFleetNear('Field hospital');
    }
    $_->transferToAnotherFleet($Hospital);
  }
}

if ($Hospital){
  $Hospital->jump(500,500);
}

Позволяет управлять отдельным юнитом – перемещать его из флота во флот (требуется дополнительная подписка) и использовать его специальные умения (доступно в обычной подписке).

Методы:

getProp($propName) – возвращает одно из свойств юнита. Возможные значения $propName:

id – ID юнита.

lvl – уровень юнита.

building_id – класс юнита (11 – зонд).

hit_pointsleft – сколько у юнита осталось жизни.

tag – текстовый тег, заполняется для контейнеров.

i_tag – числовой тег, заполняется для контейнеров.

unwrapped – указывает, является ли юнит контейнером чужих (undef – нет) и если является, то был ли он распакован (1). Если unwrapped==0, контейнер требует распаковки.

creator_race – раса-создатель юнита.

max_hitpoints – максимальное число очков жизни для юнита.

is_ground_unit – юнит участвует в наземных операциях.

is_space_ship – юнит участвует в орбитальных операциях.

is_transportable – 0 юнит не является транспортируемым, 1 перевозится на транспортах, 2 на авианосцах.

carrier_capacity – число взлетных палуб для истребителей.

transport_capacity – число транспортных отсеков.

fly_range – дальность полета (может отличаться от дальности флота).

fly_speed – скорость полета (может отличаться от скорости флота).

weight – вес.

class – тип юнита. 1 Boat, 3 Destroyer, 4 Battle-cruiser, 5 Carrier, 6 Transport, 7 Civil (Colony, Probe, Building), 8 infantry, 9 Mech.

performAction($ActionID) – выполнение спецзадания. ID заданий (зачистка=2, исследование зондом=1, выгрузка контейнера=3 и т.д.) можно подсмотреть в url web-интерфейса. Возвращает 1 при успехе и undef при неудаче.

transferToAnotherFleet($FleetID) – переносит юнит в другой флот. Эта функция доступна при подписке на объект Fleets. Возвращает 1 при успехе и undef при неудаче. В настоящий момент эта операция НЕ МЕНЯЕТ свойств объектов-флотов, как-то число свободных взлетных палуб, вес и т.п. Если вам нужны новые значения этих свойств у флотов, запросите создание объектов Fleet заново после завершения всех перемещений. Если в качестве ID передан 0, флот перемещается в гарнизон.

getActions – возвращает ссылку на массив ссылок на хэши, содержащие информацию о спецзаданиях для этого юнита. Каждый элемент массива (хэш) может содержать следующие ключи:

action – ID спецзадания (1 для разведки зондом).

cost_main, cost_second, cost_money - стоимость активации спецзадания.

maxcount – ограниченно ли число спец-заданий на одной планете (к примеру, зачистку может производить только одно подразделение пехоты на планете).

request_id – если содержит не undef, данное спецзадание для юнита уже активизировано.

disband – распускает юнит. Функция доступна только в расширенной подписке. Возвращает 1 при успехе, при неуспехе undef (к примеру, при попытке распустить транспорт во флоте с грузом).

unpack – вскрывает контейнер, если это контейнер. Функция доступна только в расширенной подписке.

Planets

my $Planets=$Empire->planets();
my $Home=$Planets->get(500,500);
$Empire->log(1,"Population on the HW is ".$Home->getProp('population'));
my $Fleet = $Empire->this_fleet();
my $WhereToRun=$Planets->getNearestJumpable(
	$Fleet->getProp('x'),$Fleet->getProp('y'));
$Fleet->jump($WhereToRun->getProp('x'),$WhereToRun->getProp('y'));

Объект Planets позволяет отбирать планеты по координатам и другим параметрам. Найдя планеты, соответствующие вашему запросу, Planets вернет вам объект(ы) Planet, через которые вы сможете получить доступ к свойствам планет и очереди заданий на строительство. Объект доступен только в расширенной подписке.

Методы:

get($X,$Y) – возвращает планету с заданными координатами.

getAllMy – возвращает массив, содержащий все ваши планеты.

getAllMyQuick – возвращает массив, содержащий все ваши планеты, но со списком свойств, ограниченным x, y и name, благодаря чему работает значительно быстрее getAllMy.

getAllJumpable – возвращает массив, содержащий все ваши планеты а так же открытые для вас планеты союзников.

getAllJumpableQuick – возвращает массив, содержащий все ваши планеты а так же открытые для вас планеты союзников. В отличие от getAllJumpable для возвращаемых планет не возвращаются запасы ресурсов, не вычисляется пригодность и прочее. Возвращаемые объекты имеют только свойства x, y, name, owner_id, jumpable (всегда 1). Работает на порядок быстрее обычной getAllJumpable.

getAllKnown – возвращает массив, содержащий все известные вам планеты. Сюда включаются планеты, о которых вы знаете только имя владельца, планеты, которые вы исследовали сами и планеты, свойства которых вы задали вручную. В связи с большой загруженностью функции в getAllKnown не вычисляется степень пригодности планеты для вас, возвращаются только свойства x, y, o, e, m, t, s, name, owner_id, owner_name, fake_info

getAllKnownQuick - возвращает массив, содержащий все известные вам планеты. Сюда включаются планеты, о которых вы знаете только имя владельца, планеты, которые вы исследовали сами и планеты, свойства которых вы задали вручную. В отличие от getAllKnown возвращаются только свойства x, y, owner_id и my. Работает заметно быстрее стандартного метода getAllKnown.

getReacheble($X,$Y,$Distance) – возвращает массив планет, доступных флоту с дальностью $Distance и расположенному в точке $X:$Y. Открытость при отборе не учитывается, это просто готовая процедура для отбора всех планет, попадающих в радиус $Distance.

getReachebleJumpable($X,$Y,$Distance) – возвращает массив открытых для игрока планет, доступных флоту с дальностью $Distance и расположенному в точке $X:$Y. В массив входят только планеты игрока и открытые для него планеты союзников. Планеты отсортированы по удаленности (первая планета в массиве та же, что возвращается getNearestJumpable($X,$Y)).

getNearestMy($X,$Y) – возвращает ближайшую к указанной точке вашу планету.

getNearestJumpable($X,$Y) – возвращает ближайшую к указанной точке планету, открытую для прыжков.

getRectangle($left, $top, $right, $bottom) - возвращает массив с планетами из заданного прямоугольника. Область не должна пересекать границ вселенной. Область включает в себя указанные координаты ($X >= $left && $X <= $right). Возвращаемые объекты имеют свойства x, y, o, e, m, t, s, name, owner_id, owner_name, fake_info, img_surface, age, jumpable, my.

Planet

my $Planets=$Empire->planets();
my $Home=$Planets->get(500,500);
$Empire->log(1,"Population on the HW is ".$Home->getProp('population'));
$Empire->log(1,"Free people left on the HW ".$Home->getProp('free_pepl'));

Открывает доступ к информации по планетам. Вы можете узнать, ваша ли это планета, была ли она исследована, какова температура поверхности и актуальна ли информация о текущем владельце. Объект доступен только в расширенной подписке.

Методы:

getProp($propName) – возвращает одно из свойств планеты. Возможные значения $propName:

o, e, m, t, s – характеристики планеты. Если планета не была вами исследована и вы вручную не указали ее свойства, все значения будут undef.

name – имя планеты, зарегистрированное при вашем последнем посещении.

image – номер картинки планеты.

img_surface – номер размера планеты (получается округлением вниз значения s). Сложив значения image и img_surface получаем полное имя картинки (25 + 4='254.gif').

fake_info – если информация о планете получена вашим собственным зондом, содержит 0. Если вы вручную ввели свойства планеты и не владеете достоверной информацией, содержит 1.

population – население на планете. Содержит информацию только по вашим мирам и по мирам, на которых вы произвели разведку населения.

free_pepl – свободное население на планете. Содержит информацию только по вашим мирам и по мирам, на которых вы произвели разведку населения.

x, y – координаты планеты.

jumpable – открыта ли для вас планета, можете ли вы стартовать с нее при гиперпрыжках.

owner_id – ID владельца планеты.

owner_name – имя владельца планеты.

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

my – установлено в 1 для ваших планет.

popgrowth – Скорость прироста населения на планете для вашей расы. Для ваших планет показывает текущий прирост с учетом степени заселенности. Для не-ваших планет показывает базовый прирост населения. Возвращает число процентов.

main_mining, second_mining, money_mining – прибыль от планеты в основном ресурсе, вторичном и в деньгах соответственно.

coment – назначенный планете комментарий.

icon – назначенная планете иконка.

Queue

my $q=$Empire->queue(500,500);
$Empire->log(1,$q->itemsCount()." items in queue");

my $Item=$q->itemData($q->itemsCount()-1);
my $ItemID=$Item->{'id'};
$q->dropJob($ItemID);
$q->addPackingTask('main',500);

Позволяет манипулировать очередью заданий на планете. Объект доступен только в расширенной подписке.

Методы:

itemsCount – возвращает длину очереди построек на планете.

itemData($ItemN) – возвращает ссылку на хэш, содержащий информацию о задаче в очереди построек. Хэш содержит следующие ключи:

class – класс здания. 11 – это зонд.

is_war – является ли постройка военной.

take_turns – число ходов, требующееся на этой планете для постройки данного здания. Для первого в очереди здания это число уже учитывает проделанную работу, то есть если у вас корвет строится за 5 ходов и четыре хода уже прошло, здесь будет что-то вроде 0.568006.

turns_left – количество ходов оставшихся до постройки данного элемента очереди, сумма take_turns по всем элементам очереди включая данный.

building_points_done – число человеко-часов, затраченных на здание. Учитывает бонусы на скорость постройки.

build_speed – число не-бонусных человеко-часов, требуемое для этого здания. Можно подсмотреть в свойствах юнита в столбце "Прототип", но для наместника тут поправка уже учтена.

id – ID этого задания. На него нужно ссылаться, в частности, если вы хотите удалить свое задание из очереди.

lvl – прогнозируемый уровень производимого юнита. При смене вашего тех. уровня тоже может измениться.

tag – поле, содержащее информацию о содержимом контейнера/задания на оприходование контейнера.

dropJob($JobID) – удаление задания из очереди. Принимает ID задания, который следует получать из поля id хэша, возвращаемого методом itemData.

addJob($Class) – добавляет новое задание в конец очереди построек. В качестве параметра требует ID класса юнитов, addJob(11) добавит в очередь зонд.

addCustomizeTask($ItemID) – добавляет в очередь задание на оприходование чужого контейнера. В качестве параметра принимает ID юнита-контейнера.

addPackingTask($WhatToPack[,$HowManyToPack]) – добавляет задание на упаковку юнита/ресурса. Если первый параметр $WhatToPack равен main, second или money то будут упакованы основной ресурс, вторичный и кредиты соответственно. В этом случае будет упаковано $HowManyToPack ресурса. В противном случае второй параметр игнорируется, а первый должен быть ID юнита, уже расположенного в гарнизоне, который вы хотите упаковать.

addPartsPackingTask($PartID,$Lvl,$PartsNumber) – добавляет задание на упаковку контейнера, содержащего $PartsNumber деталей типа $PartID и уровня $Lvl. Посмотреть значения для $PartID можно в окне выбрра деталей для упаковки.

DesignHouse

my @Protos=$Empire->designHouse()->getPrototypes();
$Empire->log(0,'Dumping HP/Price for all units...');
for (@Protos){
  my $Price=$_->getProp('support_main')+
		$_->getProp('support_second')*2;
  my $PriceToHPRate=$Price?sprintf('%1.2f',
		$_->getProp('hit_points')/$Price):'!!!';
  $Empire->log(1,$_->getProp('building_id').': '.
		$PriceToHPRate);
}

Позволяет получать информацию об имеющихся прототипах. Объект доступен только в расширенной подписке.

Методы:

getPrototypes – возвращает все доступные вам в данный момент к постройке прототипы а так же все имеющиеся у вас на вооружении прототипы как массив, состоящий из объектов типа Prototype. Помимо прочего, возвращает доступные вам стандартные здания и юниты (шахта, наместник, etc.) с ID меньше 1000.

Prototype

Объект, выдающий информацию по одному из доступных вам типов юнитов.

Методы:

getProp($propName) – возвращает одно из свойств прототипа.

building_id – ID прототипа.

cost_main, cost_second, cost_money, cost_pepl – цена постройки юнита – основной ресурс, вторичный, кредиты и вычитаемое с планеты после постройки население.

support_main, support_second – стоимость поддержки юнита по этому прототипу.

requires_pepl – требуемое для поддержки население (актуально для зданий).

stealth_price, stealth_support - стоимость активации и поддержки невидимости для этого юнита.

hit_points – очки жизни.

bonus_o, bonus_e, bonus_m, bonus_production – влияние постройки на производительность планеты (органика, энергия, минералы, скорость строительства).

stealth_lvl – качество систем невидимости.

scan_strength – качество систем поиска невидимок.

detect_range – радиус сканирования гиперпространства.

build_speed – время постройки (в человеко-часах).

laser_damage, laser_number, bomb_damage, bomb_number - повреждение одним орудием и число орудий – лазеров и ракет.

is_building – 1 для зданий.

is_ground_unit – участвует в наземных сражениях.

is_space_ship – участвует в орбитальных сражениях.

is_transportable – юнит можно перевозить (1 – в ангарах для истребителей, 2 – в транспортных отсеках).

fly_range – радиус гиперпрыжка.

fly_speed – скорость гиперпрыжка.

maxcount – максимальное число таких зданий на планету.

weight – вес юнита.

class – тип юнита. 1 Boat, 3 Destroyer, 4 Battle-cruiser, 5 Carrier, 6 Transport, 7 Civil (Colony, Probe, Building), 8 infantry, 9 Mech.

offensive – это атакующий юнит.

laser_targets, bomb_targets - список приоритетных целей в виде строки. '31' будет означать, что юнит сперва целится в корветы (Destroyer), потом в катера (Boat).

laser_dr, bomb_dr – качество противолазерных и противоракетных защитных систем юнита.

laser_ar, build – качество систем наведения лазеров и ракет.

levelable – юнит может накачиваться.

s_name – название (заполнено только у пользовательских прототипов, стандартные прототипы, выдаваемые в начале игры, и стандартные игровые здания имеют s_name undef).

s_description – описание (заполнено только у пользовательских прототипов, стандартные прототипы, выдаваемые в начале игры, и стандартные игровые здания имеют s_description undef).

carapace – тип шасси, на основе которого собран прототип. undef для не-сборных юнитов типа наместника и зданий.

color – цвет прототипа.

buildingactions – список допустимых для данного юнита спецзаданий (геологоразведка, зачистка....) в виде строки, в которой id заданий разделены запятыми. Например '1' или '1,101,103'.

archived – показывает, актуален ли прототип, или уже находится в архиве.

carrier_capacity – число взлетных палуб для истребителей.

transport_capacity – число транспортных ячеек.



Copyright © 2004 — 2007  Грибов Дмитрий

Rambler's Top100