Приёмы программирования - Создание тестовых пакетов(
как быстро проверить работоспособность пакетов ОХР, создающих корабли в Игре - азбука для пилотов и конструкторов)
1. Создаём свой тестовый пакет с оригинальным названием, например "
vasig_test_ships.oxp", в пакете создаём папку "
Config", в этой папке создаём файл "
script.js", в этот файл записываем вот такой код:
Код:
//--- Главное событие: Корабль стартует из станции, ПОСЛЕ прохода туннеля
this.shipLaunchedFromStation = function( station ){
system.addShips("Роль корабля", 10, player.ship.position, 10000);
}
2. В проблемном пакете ОХР в папке "
Config" ищем файл "
shipdata.plist", в этом файле ищем тип корабля, который почему-либо не появляется в игре, и смотрим, какая задана роль у этого типа корабля, затем копируем название этой роли и подставляем в код, который написан выше, вместо "
Роль корабля".
Обычно в пакетах для корабля задаются несколько ролей - стандартные (например, "
pirate") и оригинальная, с особым именем. Нужно брать оригинальную роль. А если там есть только стандартные, то временно вместо "
pirate" пишем что-нибудь своё латинскими буквами, например, "
vasig_test_this_ship" и эту же фразу подставляем вместо "
Роль корабля" в коде.
Таким образом, сразу после вылета из любой орбитальной станции у нас в игре около корабля должно появиться сразу 10 таких кораблей именно этого типа, на расстоянии 10000 м от корабля. Такую шайку легко заметить.
Если они появляются, то, значит, в конструкциях корабля проблем нет, надо уже проверять скрипты из этого проблемного пакета - ошибка может быть уже в скриптах.
Будьте внимательны! Роль корабля и тип корабля - это две большие разницы, этот момент необходимо чётко уяснить.
Покажу на примере корабля-убийцы "Cobra3 XT".
Откройте в пакете "
Cobra3 XT.oxp" в папке "
Config" файл "
shipdata.plist"
Обратите внимание: сколько там типов этих кобр - "
cobra3XT-pirate", "
cobra3XT-black_knave", "
cobra3XT-alternate", "
cobra3XT-player" - это всё
ТИПЫ кораблей.
Тип корабля - это то название, которое открывает программную конструкцию объекта, вот код для примера с открывающей скобкой начала конструкции:
Код:
"cobra3XT-pirate" =
{
А роль корабля - это то, что этот тип корабля будет делать в игре: изображать пирата или изображать торговца, либо вообще выполнять свою индивидуальную задачу. Ищем в этой же конструкции следующие строчки кода
Код:
name = "Cobra Mk3-XT";
roles = "pirate";
Итак, что получается:
тип корабля - "
cobra3XT-pirate"
имя корабля - "
Cobra Mk3-XT", оно будет видно на маркере цели
роль корабля- "
pirate", это то, что будет делать корабль в игре.
Теперь, в зависимости от этих названий, можно вводить этот корабль в игру. Это можно сделать несколькими разными способами. Для справки лучше заглянуть на страничку "
Methods", вот по этой ссылке:
http://wiki.alioth.net/index.php/MethodsИщем там тему "
Looking for, and adding ships". Там полный перечень функций, каким образом это можно сделать.
Если мы посмотрим для примера, каким способом вводится в игру тот же корабль-убийца "Cobra3 XT", то в пакете "
Cobra3 XT.oxp" в папке "
Scripts" в файле "
spawnknave-script.js" увидим, что введение корабля задаётся непосредственно в выбранной позиции:
Код:
system.addShips(this.role1, this.count1, player.ship.position, 10000);
т.е. прямо около корабля игрока!
Этот код стоит показать полностью и прокомментировать:
Код:
this.role1 = "black_knave";
this.count1 = 1;
Итак, роль корабля в игре - "
black_knave". Такая необычная роль означает на практике, что в игре может появиться только один-единственный тип корабля, у которого эта роль записана в его конструкции - "
cobra3XT-black_knave". Думаю, что во всех пакетах нет больше кораблей, у которых есть эта роль. Ни Питон, ни Мамба, ни Боа - только кобра-убийца "
cobra3XT-black_knave"
Следующая строчка кода - это задаётся количество кораблей с этой ролью, которое должно появиться. Я уже писал в своих "Демонстрационных полётах", что пытался запустить в игру сразу 100 этих Кобр-убийц, но компилятор выдал ошибку: "
Error: System.addShips: Invalid arguments (100) -- expected number (positive count no greater than 64)."
Далее код такой:
Код:
this.shipWillExitWitchspace = function()
{
if (Math.random() >= 0.99 && player.score >= 128)
{
system.addShips(this.role1, this.count1, player.ship.position, 10000);
}
};
Это означает, что Кобра-убийца появится в системе в непосредственной близости от корабля игрока, в случайной точке пространства в пределах дальности 10000 м (
player.ship.position, 10000), сразу после того, как корабль игрока вынырнет из гипер-пространства (
this.shipWillExitWitchspace), при этом если игрок уже имеет достаточный боевой опыт (
player.score >= 128) и если представится удобный случай - один шанс из 100 (
Math.random() >= 0.99)
Обратите внимание - генератор случайного числа
Math.random() очень редко выдаёт число, которое более 0.99 (0.992674884, или 0.99868577 или т.п) - вот почему вероятность появления Кобры-убийцы будет здесь 1 процент.
А если мы хотим получить 100-процентную вероятность появления Кобры-убийцы, нам нужно изменить строчку кода вот так:
Math.random() >= 0 - и тогда, какое бы число не сгенерировал генератор, оно всегда будет больше 0 и поэтому Кобра появится гарантировано в 100 случаях из 100.