<<<Назад <<< <<<Меню>>> >>> Далее>>>

Внешние файлы: Briefing, Overview и Description

Задание и описание можно написать, только выйдя из игры. Они оформляются в виде стандартных html-документов.

Задание – это то, что вы видите в блокноте на карте миссии. Описание – это текст (возможно, с картинкой), который отображается при выборе миссии справа (если это сингл) или сверху (если это сетевая игра).

Создайте в папке, где находится миссия, файлы briefing.html и overview.html. Для начала советую скопировать эти файлы из другой миссии и изменять их (образцы для редактирования лежат в папке "ПРИМЕРЫ", а также обязательно скачайте генератор этих файлов). Также можно добавить картинку: скопируйте какую-нибудь из другой миссии, переименуйте ее в pic.paa и поместите в папку с вашей миссией.

Когда вы полностью завершите и сохраните вашу миссию, она окажется в папке Flashpoint/Users/yourname/Missions, где yourname – это имя вашего игрока в игре (не любого, а под которым вы делали эту миссию). Чтобы поиграть в нее, перепишите ее в папку Flashpoint/Missions (если миссия для сингла), или в Flashpoint/MPMissions (если для сетевой игры). Кстати ни задание, ни описание миссии нельзя проверить в редакторе, единственный способ – это сохранить ее в нужной папке и поиграть.

В описании и задании можно использовать картинки формата .jpg. Пока не знаю как, наверно достаточно поместить ее в папку с миссией, а в файлах briefing.html и overview.html добавить ссылку на картинку.

Описание файла briefing.html

Файл briefing.html – это обычный html-документ, использующийся для описания целей и задач миссии. Он состоит из следующих секций:

Background

Здесь указывается общая информация. Также в эту секцию включена ссылка "file:///briefing.html#Intel" на руководство Not Getting Hit, кликнув на которой, отображаются советы по вышеуказанной тематике.

Not getting hit

Советы, как выжить в бою. В эту секцию включена обратная ссылка "file:///briefing.html#Main" на секцию Background с общей информацией.

Objectives

Здесь указываются цели и задачи миссии. В эту секцию также включены ссылки на различные типы маркеров, определенных при создании миссии в файле missions.sqm. Они имеют вид:
Текст ссылки в задании

Где markername – это имя того маркера, на который ссылается данный текст.

Mission Over

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


Где X – номер возможного варианта завершения миссии.

Использование начальных целей и результата в миссии

Ниже приводится описание того, как определять цели в миссии и как их достигать. Также приведено несколько советов по использованию результатов и основных и второстепенных задач.

Замысел

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

Определение целей для миссии

Если вы уже определили цели, укажите их на экране заданий миссии (они определяются почти в самом конце файла briefing.html). Начальная цель должна определяться строчкой:
<p><a name = "OBJ_START">You are here</a></p><hr>
Для каждой последующей цели в этот файл необходимо добавить строчку:
<p><a name = "OBJ_0">Kill all snipers</a></p><hr>
Где OBJ_0 определяет данную задачу как цель номер 0. Номера целей начинаются с 0 и увеличиваются на 1 для каждой новой цели. Если вы используете вышеуказанную строчку для определения цели, то на экране с задачами миссии (в блокноте) вы увидите строчку:
Objective 0: Kill all snipers

Выполненные задания

Если задание выполнено, на экране задач его необходимо пометить соответствующим образом. Для этого необходимо использовать команду OBJSTATUS, указываемую в поле Activation меню Triggers или Waypoints. Синтаксис команды следующий:
"objective_number" OBJSTATUS "DONE"
Где objective_number - реальный номер цели.
Например, используя нижеприведенный код, будет проверяться условие смерти всех снайперов и, если оно выполняется, задание 0 будет отмечено как выполненное (будет выделено зеленым кружком).
// Проверка смерти всех снайперов
class item2
{
  position[]={8165,8,3160}; //Не имеет значения
  age="UNKNOWN";
  expCond="count units sniperFodderGrp == ""not alive _x"" count units sniperFodderGrp";
  expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""";
  class Effects
    {
    };
  synchronizations[]={};
};

Завершение миссии, если выполнены все задания

Для каждого задания в нижеприведенной миссии определены переменные (objectiveX, где X – номер цели, однако вы можете использовать любые удобные вам имена). Если какое-то задание выполнено, то соответствующая переменная принимает значение TRUE:
// Проверка смерти всех снайперов
class item2
{
  position[]={8165,8,3160}; // Не имеет значения
  age="UNKNOWN";
  expCond="count units sniperFodderGrp == ""not alive _x"" count units sniperFodderGrp";
  expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""; objective1=true";
  class Effects
    {
    };
  synchronizations[]={};
};

Теперь, чтобы миссия завершилась (если требования выполнены) добавляем следующее:
// Завершение игры
class item5
{
 position[]={5583,8,4065};
  timeoutMin=6;
  timeoutMid=6;
  timeoutMax=6;
  age="UNKNOWN";
  type="END1";
  expCond="objective0 and objective1 and objective2";
  expActiv="aP sideChat ""Objectives all complete""";
  class Effects
    {
    };
  synchronizations[]={};
};

Конец END1 – это первый вариант завершения данной миссии (их может быть несколько). Поля тайм-аутов установлены в 6. Это означает, что миссия завершиться через 6 секунд после выполнения всех задач.

Использование результатов по завершении миссии

Для каждой цели можно добавить определенное количество очков, которое будет получать игра при ее достижении. Например, цель "Убить всех снайперов" в файле briefing.html может быть определена так:
<p><a name = "OBJ_0">Kill all snipers (1000 pts)</a></p><hr>
Хотя можно и не указывать на экране заданий количество получаемых очков.

Наконец, при выполнении задания игроку должны начисляться очки. Для этого используется команд addRating. Ее синтаксис:
"playerID" addRating "score"
Где "playerID" - обозначение игрока, указываемое в текстовом поле в редакторе, а "score" - количество добавляемых очков (оно также может быть и отрицательным числом, чтобы вычитать очки у игрока, например, за убийство своих или гражданских).
Например, вышеупомянутую миссию можно переделать так:
// Проверка смерти всех снайперов
class item2
{
  position[]={8165,8,3160}; // Не имеет значения
  age="UNKNOWN";
  expCond="count units sniperFodderGrp == ""not alive _x"" count units sniperFodderGrp";
  expActiv="aP globalChat ""Nice work Bravo, they are all dead." "; ""0"" objstatus ""DONE""; objective1=true; aP addRating 1000";
  class Effects
    {
    };
  synchronizations[]={};
};

Где aP - обозначение игрока, указываемое в текстовом поле в редакторе.
Последнее, что осталось сделать – определить поля результатов в файле description.ext, отображающие минимальный, средний и максимально возможный рейтинг.

Завершение миссии при провале

Иногда могут потребоваться условия, невыполнение которых приводит к провалу миссии и ее немедленному завершению. Например, можно определить условие: "Все грузовики должны добраться до Le Port". И если этого не произойдет (хотя бы один грузовик уничтожат), миссия должна завершиться с надписью о провале. Для этого потребуется переключатель, проверяющий наличие грузовиков и завершающий миссии при невыполнении вышеуказанного условия.

Основные и второстепенные задачи

Другим интересным моментом является определение основных и второстепенных задач. Основные задачи выполнять обязательно (только выполнив их все, вы сможете успешно завершить миссию), а второстепенные - лишь желательно, получая при этом какой-то бонус (дополнительные очки, техника и прочее).
Для этого в файле briefing.html необходимо определить, какие цели будут основными, а какие второстепенными, используя ключевые слова PRIMARY и SECONDARY.
Например, условие "Уничтожить БМП" может быть определено в файле briefing.html, как основная задача, а условие "Убить всех снайперов", как второстепенная:
<p><a name = "OBJ_0">Primary :Destroy the BMP (1000 pts)</a></p><hr>
<p><a name = "OBJ_1">Secondary : Kill all snipers (500 pts)</a></p><hr>
Переключатель не будет учитывать условие "Убить всех снайперов" для завершения миссии, т.к. оно второстепенное и его не обязательно выполнять (то есть миссия завершиться сразу же после выполнения основных задач).

Описание файла description.ext

Данный файл также необходимо создавать (в обычном блокноте) самостоятельно в папке с вашей миссией. В нем описываются различные детали, касающиеся миссии и игрока:
// Вид респауна (только юниты типа "playable" могут респауниться!):
//NONE - нет респауна.
//BIRD - игрок после смерти вселяется в чайку (устанавливается по умолчанию).
//INSTANT - игрок после смерти появляется в том же месте, где его убили.
//BASE - игрок после смерти появляется в указанном маркере. Для этого в самой миссии
// создайте маркер вида окружности (ellipse) и назовите его
// "Respawn_East" (для СССР), "Respawn_West" (для НАТО), "Respawn_Guer" (для Повстанцев)
//и "Respawn_Civi" (для Гражданских).
//SIDE - игрок после смерти вселяется в оставшихся в живых солдат его войск, при условии,
// что ими управляет компьютер (если это люди, то игрок вообще не оживает).
//GROUP - игрок после смерти вселяется в оставшихся в живых солдат его отряда, при условии,
// что ими управляет компьютер (если это люди, то игрок вообще не оживает).
respawn="INSTANT"

// Время (в секундах), по истечении которого игрок оживет
respawndelay=5

// Количество очков, которое может заработать игрок (минимальное,
// среднее и максимальное соответственно)
minScore=200
avgScore=2500
maxScore=6000

//Установка доступного времени для звершения игры в меню создания сервера.
//Работает только в сетевой игре.
titleParam1 = "Time:";
//Все возможные значения (в секундах)
valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2700, 3600, 7200};
//Значение по умолчанию
defValueParam1 = 1800;
//Описательный текст для каждого значения
textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "45 min", "1 hour", "2 hours"};

//Установка доступного счета для звершения игры в меню создания сервера.
//Работает только в сетевой игре.
titleParam2 = "Score to win:";
//Все возможные значения
valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30};
//Значение по умолчанию
defValueParam2 = 5;
//Описательный текст для каждого значения
textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};

// Данная надпись появляется на экране задания
onLoadIntro="Hi there"

// Данная надпись появляется на экране перед началом миссии
onLoadMission="Central part of Malden, near the camp in Lolisse"

// Отображать или нет экран результатов после миссии (0 = нет, 1 = да)
debriefing = 0

// Отображать или нет часы в игре (0 = нет, 1 = да)
showWatch = 1

// Отображать или нет компас в игре (0 = нет, 1 = да)
showCompass = 1

// Отображать или нет радио в игре (0 = нет, 1 = да)
showRadio = 1

// Отображать или нет приказы в игре (0 = нет, 1 = да)
showWarrant = 1

// Отображать или нет блокнот (где указывается само задание) в игре (0 = нет, 1 = да)
showNotepad = 1

// Отображать или нет GPS в игре (0 = нет, 1 = да)
showGPS = 1

// Отображать или нет карту в игре (0 = нет, 1 = да)
showMap = 1

// Отображать или нет время перед загрузкой заставки (false = нет, true = да)
onLoadIntroTime = true

// Данный класс позволяет определить уникальность игроков
class CfgIdentities
{
  // Имя данного класса ссылается на ID солдата, указанный в файле missions.sqm
  class Officer
  {
    // Имя, отображающееся в командах
    name = "My Soldier";

    // Лицо
    face = "Face33";

    // Наличие очков. Доступные значения:
    // "none" = без очков
    // "spectacles" = обычные очки
    // "sunglasses" = темные очки
    glasses = "none";

    // Голос. Доступные значения:
    // Adam
    // Dan
    // George
    // Greg
    // John
    // Jonah
    // Marc
    // Patrick
    // Paul
    // Peter
    // Rich
    // Rob
    // Ted
    // Tom
    speaker = "Adam";

    // Тональность голоса
    // 1.0 = обычный
    // < 1.0 = низкий
    // > 1.0 = высокий
    pitch = 1.00;
  };
};

// Дополнительные звуки
class CfgSounds
{
  // Здесь перечисляются все файлы формата .ogg (без расширения .ogg)
  sounds[] =
  {
    S02v01, S02v02
  };
  // Определение отдельного звука. Данное имя будет использоваться в
  // файле mission.sqm (например, say ""S02v01"")
  class S02v01
  {
    // Имя, которое будет отображаться в редакторе при выборе звуков
    name = "S02v01";

    // Звуковые файлы. Необходимо указать полное имя. Длаее указывается громкость
    // воспроизведения (db+10) и еще что-то
    sound[] = {"S02v01.ogg", db+10, 1.0};

    // Текст, который появляется во время воспроизведения данного звука.
    // Ссылается на файл stringtable.csv
    titles[] =
    {
      0, $STRM_S02v01
    };
  };
}

// Определение звуковых эффектов
class CfgSFX
{
  sounds[] = {};
};

// Определение звуков окружающей среды
class CfgEnvSounds
{
  sounds[] = {};
};

// Определение радио-команд
class CfgRadio
{
  // Здесь перечисляются все файлы формата .ogg (без расширения .ogg)
  sounds[] =
  {
    S02r16, S02r17
  };

  // Данное имя будет использоваться в файле mission.sqm (например, sideRadio ""S02r16"")
  class S02r16
  {
    // Имя, которое будет отображаться в редакторе при выборе радио-команд
    name = "S02r16";

    // Звуковые файлы. Необходимо указать полное имя. Далее указывается громкость
    //воспроизведения (db-10) и еще что-то
    sound[] = {"S02r16.ogg", db-10, 1.0};

    // Текст, который появляется во время воспроизведения данного звука.
    // Ссылается на файл stringtable.csv
    title = $STRM_S02r16;
 };
};

// Дополнительные аудиотрэки
class CfgMusic
{
  // Здесь перечисляются все файлы формата .ogg (без расширения .ogg)
  tracks[]=
  {
    01demo, 05demo
  };

  // Данное имя будет использоваться в файле mission.sqm (например, track="01demo")
  class 01demo
  {
    // Имя, которое будет отображаться в редакторе при выборе аудиотрэков
    name = "Demo 01";

    // Звуковые файлы. Необходимо указать полное имя. Далее указывается громкость
    // воспроизведения (db+0) и еще что-то
    sound[] = {\music\01demo.ogg, db+0, 1.0};
  };
};

// Определяет оружие, которое может выбрать игрок (для использования в миссии)
// на экране с заданием. count - количество единиц оружия
class Weapons
{
  class M16
  {
    count = 1;
  };
};

// Определяет боеприпасы (патроны, гранаты, заряды, мины и бомбы), которые может выбрать
// игрок(для использования в миссии) на экране с заданием. count - количество боеприпасов
class Magazines
{
  class M16
  {
    count = 10;
  };
};
<<<Назад <<< <<<Меню>>> >>> Далее>>>