<<<Назад <<< | <<<Меню>>> | >>> Далее>>> |
Файл briefing.html – это обычный html-документ, использующийся для описания целей и задач миссии. Он состоит из следующих секций:
Здесь указывается общая информация. Также в эту секцию включена ссылка "file:///briefing.html#Intel" на руководство Not Getting Hit, кликнув на которой, отображаются советы по вышеуказанной тематике.
Советы, как выжить в бою. В эту секцию включена обратная ссылка "file:///briefing.html#Main" на секцию Background с общей информацией.
Здесь указываются цели и задачи миссии. В эту секцию также включены ссылки на различные типы маркеров, определенных при создании миссии в файле missions.sqm. Они имеют вид:
Текст ссылки в задании
Где markername – это имя того маркера, на который ссылается данный текст.
Самой последней секцией является определение страничка отчета о результатах миссии, содержащее текст для различных концовок (например, для успешного выполнения миссии и для провала). Ссылки каждую из концовок выглядят так:
Где 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>
Данный файл также необходимо создавать (в обычном блокноте) самостоятельно в папке с вашей миссией. В нем описываются различные детали, касающиеся миссии и игрока:
// Вид респауна (только юниты типа "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;
};
};
<<<Назад <<< | <<<Меню>>> | >>> Далее>>> |