Вступление.
С последним бета-патчем БИСы ввели функциональное лобби-меню по выбору параметров игры - время, кол-во очков для победы и пр. Эта функция является весьма долгожданной для картотроителей, она позволяет добавлять множество описанных параметров для игры, так много, как вам того желается! На данный же момент большая часть MP-миссий ограничена всего двумя параметрами, и в 9 случаях из 10 одна из них была введением/отключением скриптов Norrins Revive оставляя для творчества всего один параметр. Старый метод:
Старая метОда также работает, и вы должны это учитывать при создании ваших новых массивов. Вот пример старого метода:
Code
titleParam1 = "Grass Options";
valuesParam1[] = {0, 1, 2};
defValueParam1 = 0;
textsParam1[] = {"NoGrass", "Medium", "Normal"};
Длее, параметры могут быть считаны из init.sqf, например так...
Code
[param1, "false"] execvm "Grass_Changer\grass_changer.sqf";
В новом методе будут присутствовать параметры param1 и param2 для достижения совместимости с уже существующими миссиями. Вы должны помнить об этом, потому что новый массив paramsArray использует 0 и 1 значения для "старых методов", вне зависимости, описаны они либо нет. Так что теоретически для добавления новых параметров при помощи массива paramsArray строка будет выглядеть так: paramsArray[param1,param2, thirdparam]
Новый метод.
Новый метод пользует класс из description.ext называемый Params. Описывается он так:
Code
class Params
{
class DayTime
{
//paramsArray[2]
title = "Time Of Day";
values[] = {0,16,8};
texts[] = {"Dusk","Midday","Dawn"};
default = 16;
};
class Revive
{
// paramsArray[3]
title = "Number of Revives:";
values[] = {2000,1000,20,10,7,5};
texts[] = {"No Revive","Infinite - Cadet","20 - Easy ","10 - Normal","7 - Hard","5 - Extreme"};
default = 20;
};
class Grass
{
// paramsArray[4]
title = "Grass Options";
values[] = {0, 1, 2};
texts[] = {"NoGrass", "Medium", "Normal"};
default = 0;
};
};
После его описания вы сможете его считать из init.sqf таким образом:
Code
skiptime (paramsArray select 2);
[(paramsArray select 4), "false"] execvm "Grass_Changer\grass_changer.sqf"
На самом деле, это достаточно просто. Самое главное - помнить, что старые param1 и param2 занимают первые 2 места в массиве paramsArray.
Пример миссии можете взять тут.
Обычно имея дело с установкой параметров запуска миссии вам надо сверять индексы до того, как задавать им значения. Этот метод кажется мне не очень удобным, и я решил разработать новый, который использует класс параметров и придаёт ему необходимое значение, а не делать выборку из длиннющего списка.
Достаточно просто привести уже существующие ваши наработки к моим массивам processParamsArray.
Самое основное что надо будет сделать - это, помимо копирования самого скрипта, ввести нужные и правильные значения для класса параметров:
Code
class ViewDistance // 0
{
title = "View Distance:";
values[] = { 1200, 1500, 2000, 2500, 3000 };
texts[] = { "1.2 km", "1.5 km", "2 km", "2.5 km", "3km" };
default = 2000;
code = "setViewDistance %1";
};
Как видно из этого примера, мы задаём для параметра setViewDistance значение %1. Знаете что такое %1? Это т.н. заполнитель - он будет подменён на соотв. параметр из массива values[].
Если параметры не меняются - то будет применено значение 2000, оно прописано по умолчанию.
После того, как скрипт получит значение %1 он компилируется и исполняется. Собственно говоря - это всё, остальные примеры смотрите в description.ext
ВНИМАНИЕ! Доступные для использования параметры - целые (integer), плавающие (float) и логические (boolean: true=1 и false=0). Arma2 1.04 имеет проблемы при использовании плавающих значений (значения с плавающей точкой, float) в качестве значения по умолчанию!!!
Качать отсюда по кнопочке download
За идею спасибо mikey, за перевод - мне. Оригинал тут.
Вольный перевод текста с сайта www.ofpec.com произведён мною.
Автор: Party3AH