Оглавление Сообщение об ошибках Ваше мнение о проекте E-Mail автору

ПРАКТИКУМ

 

v    Добавление новой команды в консоль.

            Как вы уже поняли ScE  Х2 позволяет пользователю добавлять новые команды в командное меню объектов. Также, существует некоторый алгоритм позволяющий сделать команду доступной лишь для определенного типа объектов и при возникновении определенных условий. Принцип добавления новой команды был рассмотрен в разделе «Языковые файлы», далее в этой главе мы детально рассмотрим весь процесс добавления команды и установке ее связи с назначенным скриптом. Всю последовательность действий можно разделить на несколько шагов:

 

Шаг 1. Определение пункта меню для новой команды.

Прежде всего следует определить в какой слот командного меню вы хотите добавить новую команду. ScE  позволяет добавить команду в один из 10 стандартных  пунктов командного меню.

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

 

Тип

ID

Меню

Мнемоническое имя

Navigation

200-231

Командное меню, Навигация

COMMAND_TYPE_NAV_00 to 31

Combat

300-331

Командное меню, Боевые

COMMAND_TYPE_FIGHT_00 to 31

Trade

400-431

Командное меню, Торговые

COMMAND_TYPE_TRADE_00 to 31

Special

500-531

Командное меню, Специальные

COMMAND_TYPE_SPECIAL_00 to 31

Piracy

600-631

Командное меню, Пиратские

COMMAND_TYPE_PIRACY_00 to 31

Custom

700-731

Командное меню, Выборочные

COMMAND_TYPE_CUSTOM_00 to 31

General

800-831

Командное меню, Общие

COMMAND_TYPE_GENERAL_00 to 31

Turret

900-931

Меню турелей (из основного меню)

COMMAND_TYPE_TURRET_00 to 31

Station

1100-1131

Командная консоль станций

COMMAND_TYPE_STATION_00 to 31

Ship

1200-1231

Дополнительные корабельные команды

COMMAND_TYPE_SHIP_00 to 31

Для того, чтобы продолжить изучение, давайте установим задачу и на ее примере рассмотрим все действия. Задача: Добавить в командное меню команду запускающую некий патрульный скрипт patrol.script.xml, на кораблях класса М6, М2 исключая запуск на кораблях других классов. Данная команда должна быть доступна только кораблям имеющим Боевой софт МК1.

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

Для каждого слота в ScE предусмотрено 32 команды. Обратите внимание на то что некоторые из них могут быть уже использованы самим Егософтом или другими скриптами. Мы остановимся на команде COMMAND_TYPE_FIGHT_15.  То есть, выбор слота в командном меню мы осуществляем из принципа логичности, а команду выбираем из тех, что не заняты.

 

Шаг 2. Определение имени команды.

Следующим шагом является определение имени команды, т.е. загрузка текста который будет отражаться в строке меню данной команды. Если этот шаг будет пропущен, то новая команда в меню, отразится как ReadText2010-315 и ReadText2011-315, выглядеть наглядно это будет приблизительно так:

Для того чтобы отразить имя команды в том виде, что нам нужно: мы должны создать языковой файл и ввести соответствующие значения на страницы и в идентификаторы соответствующие новой команде. В нашем случае это страницы 2010 и 2011, а идентификатор ID 315 соответствующий команде COMMAND_TYPE_FIGHT_15 . И не забывайте про краткое описание вашей команды вызываемое клавишей «i». Как произвести эти операции подробно описано в разделе «Языковые файлы XML в Х2» глава «Использование пользовательских языковых файлов при работе с командным меню».

Вот необходимый нам языковой файл назовем его 70005.XML для русскоязычной версии, и 440005.XML для англоязычной версии:

 

  <?xml version="1.0" encoding="UTF-8" ?>

- <language id="7">

- <page id="2010" title="Script Cmd Names" descr=" ">

  <t id="315">Мой патрульный скрипт</t>

  </page>

- <page id="2011" title="Script Cmd Shorts" descr=" ">

  <t id="315">МойПатруль</t>

  </page>

 - <page id="2022" title="Command Info" descr=" ">

  <t id="315">Эта команда запускает патрульный скрипт</t>

  </page>

</language>

 

Создав этот файл, нам необходимо обеспечить его загрузку при инициализации игры. Для этого мы должны написать инициализирующий скрипт, который выполнит все необходимые  подготовительные действия и добавит новую команду в меню. Назовем этот скрипт init.NewCommand. Теперь нам необходимо обеспечить загрузку созданного нами языкового файла. Соответственно первой строчкой в этом скрипте мы должны поставить команду load text: id=5

001   load text: id=5

Эта команда подгрузит созданный нами языковой файл 70005.XML и добавит изменения в основной языковой файл.

 

Шаг 3. Добавление в меню новой команды и установка связи со скриптом.

Этим шагом мы добавим в выбранное нами меню новую строку и установим ее связь со скриптом patrol.script.xml.

Первое, что нам нужно сделать, это установить связь между выбранной нами командой и нашим скриптом, делается это при помощи команды global script map: set. Далее, произвести установку класса объектов для которых эта команда будет доступна.

002   $command = COMMAND_TYPE_FIGHT_15
003   global script map: set: key=$command, class=Большой корабль, race=Player, script='patrol.script', prio=0

Команда в строке 003 установила связь между командой COMMAND_TYPE_FIGHT_15 и скриптом patrol.script и установила доступ к новой команде для кораблей класса большой корабль, но новая строка в командном меню еще не создана.

Теперь, следуя условиям задачи нам нужно настроить фильтр на некоторые типы классов кораблей. Точнее, т.к. мы установили доступ к команде COMMAND_TYPE_FIGHT_15 для кораблей класса «Большой корабль», то в него попали все большие корабли классов М6, М2, М1, TL, а по условиям нашей задачи создаваемая нами команда должна быть доступна только кораблям класса М6 и М2. Соответственно нам следует установить фильтр на корабли класса М1, TL. Сделать это можно при помощи команды global script map: ignore, добавив в инициализирующий скрипт следующие строки:

004   global script map: ignore: key=$command, class=Носитель M1, race=Player
005   global script map: ignore: key=$command, class=Тяжёлый транспорт TL, race=Player

Теперь, закрыв доступ к нашей команде кораблям класса М1, TL, нам остается выполнить последнее условие: обеспечить доступ к команде только для кораблей на которых установлен «Боевой программный модуль МК1». В этом нам поможет команда  set script command upgrade: command=<argupgrade=<arg> , именно после обработки этой команды ScE добавит новую командную строку в слот команд «Боевые». В нашем случае добавляем строку следующего содержания в инициализирующий скрипт:

006   set script command upgrade: command=$command  upgrade=Боевой программный модуль Мк.1

007   return null

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

Следует сказать, еще об одной команде подобной команде set script command upgrade: command=<argupgrade=<arg> имеющей гораздо более гибкие возможности и предоставляющей возможность установить более сложный фильтр или произвести еще какие либо проверки прежде чем активировать командную строку. Это команда set script command upgrade: command=<Object Command/Signal> upgrade <Var/Ware> script=<script name> , данная команда позволяет в момент открытия меню запустить проверочный скрипт и в зависимости от возвращаемого им флага разрешить или запретить доступ к новой командной строке. Подробное описание команды и возвращаемых флагов в разделе «Команды ScE» глава «Общие команды». Пример ее использования привожу из своего скрипта «Огненный заслон». Данный проверочный скрипт обеспечивает активацию команды в слоте станции в случае, если к данной станции пристыкован корабль на борту которого находиться «Заказ на установку комплекса «Огненный Заслон» или к станции пристыкован корабль с определенным именем. У данного скрипта обязательно должно быть заготовлено место под один аргумент, данный аргумент будет указывать на объект на котором запускается скрипт и будет передан ScE автоматически, т.ч. если ваш скрипт будет запускаться на станции то вы указываете Перем/Станция, как в примере. И соответственно Перем/Корабль если скрипт рассчитан для корабля и т.д. Автоаргументы мы обсуждали в разделе «ScE» глава «Сигналы».

Arguments

Source Text


001   
002   $name1 =  read text: page=1 id=1231
003   $ship.ar = $station -> get ship array from sector/ship/station
004   $count =  size of array $ship.ar
005   while $count
006    dec $count = 
007    $cur.ship = $ship.ar[$count]
008    $name = $cur.ship -> get name
009    $ware = $cur.ship -> get amount of ware Заказ на установку комплекса "ОГНЕННЫЙ ЗАСЛОН" in cargo bay
010    skip if $name == $name1 OR $ware > 0
011     continue
012    $flag = [CmdConCheck.Available]
013    return $flag
014   end
015   
016   $flag = [CmdConCheck.Disabled]
017   return $flag

Далее в строке 002 из языкового файла получается имя объекта для сравнения (естественно оно должно быть предварительно внесено в этот файл), в строке 003 мы получаем массив пристыкованных к нашей станции кораблей. А далее идут проверки пристыкован ли станции корабль имеющий на борту определенный товар (заказ на установку комплекса «ОГНЕННЫЙ ЗАСЛОН») или корабль имя которого соответствует тексту взятому со страницы 1 ID 1231. И возвращается соответствующий флаг, в соответствии с которым, пункт меню будет активирован или останется недоступным.

Последнее, что хотелось бы добавить к выше сказанному, это то, что количество команд в Х2 ограниченно и прежде чем вешать свой скрипт более чем одну команду хорошо продумайте, нет ли возможности реализовать его возможности использую одну командную строку (например использование разных аргументов при запуске.). А так же, не забывайте проверить какие команды используют скрипты уже запущенные в вашей игре, дабы избежать конфликтов скриптов.

 


Оглавление Сообщение об ошибках Ваше мнение о проекте E-Mail автору
Сайт создан в системе uCoz