Инструкция по установке и настройке модификации YMCA C4 из workshop’a.
Установка
Модификация YMCA_C4 устанавливается как обычный клиентский mod для DayZ. Гайд по установке можно прочитать тут. Дополнительных действий производить не нужно.
Настройка
Файл со всеми настройками модификации расположен в папке [profiles]/YMCA_C4
(где [profiles]
-папка profiles вашего сервера) и называется config.json
.
{
"AvailiableTargets": [
{
"Type": "Fence",
"MaxHP": 1,
"RequiredAttachments": []
},
],
"WeekTimetable": [
{
"Day":"Sunday",
"StartH":0,
"StartM":0,
"EndH":24,
"EndM":0
},
],
"State": 1,
"C4InitTime": 120,
"C4DisarmTime": 30.0,
"C4Distance": 1.0
}
Рассмотрим какие параметры он позволяет настраивать:
Описание параметров “AvailiableTargets” и “WeekTimetable” будет дано после остальных.
“State” – позволяет выключать (значение 0) и включать (значение 1) взрывчатку. Удобен в случаях когда вам необходимо временно отключить взрывы, но при этом вы не хотите отключать модификацию.
Пример: "State": 1,
– взрывы не запрещены.
“C4InitTime” – параметр отвечающий за время от момента установки взрывчатки до детонации. Устанавливается в целых секундах без дробной части (нельзя писать 12.3 или 12.0).
Пример: "C4InitTime": 120,
– взрыв произойдет через 2 минуты после установки взрывчатки.
“C4DisarmTime” – параметр отвечающий за время раминирования установленной взрывчатки. Устанавливается в секундах с дробной частью.
Пример: "C4DisarmTime": 30.0,
– для разминирования понадобится 30 секунд.
“C4Distance” – Параметр отвечающий за радиус сферы вокруг взрывчатки в переделах которой будет наноситься урон постройкам. Устанавливается в метрах с дробной частю. Если вы используете аддон на установку взрывчатки на конкретную постройку, то этот параметр не учитывается.
Пример: "C4Distance": 1.5,
– постройкам находящимся на расстоянии менее 1 метра 50 сантиметров при взрыве будет нанесен урон.
“WeekTimetable”
“WeekTimetable” – отвечает за настройку расписания периодов разрешенного использования взрывчатки (рейд-таймов). Но это не простой параметр. Он содержит в себе набор элементов со своими параметрами. Каждый элемент отвечает за один период. Пример такого элемента:
{
"Day":"Friday",
"StartH":0,
"StartM":0,
"EndH":24,
"EndM":0
},
Рассмотрим параметры такого элемента подробнее:
“Day” – день недели для которого устанавливается время рейд-тайм. Обязательно на английском, с большой буквы и в двойных кавычках. Напоминаю дни недели: Monday Tuesday Wednesday Thursday Friday Saturday Sunday.
“StartH” и “StartM” – время начала, часы и минуты соответственно. Вводить необходимо в 24-х часовом формате, без первыми идущих нулей. То есть для 8 часов утра вместо
, пишем "StartH":08"StartH":8,
.
“EndH” и “EndM” – время окончания, настраиваемое аналогично предыдущим параметрам.
Параметр “WeekTimetable” должен содержать столько элементов – сколько дней вы хотите чтобы был доступен рейд с помощью взрывчатки. В дни которые не указаны в списке рейд-тайм выключен. Например если вы хотите, чтобы взрывать было можно в любое время – элементов должно быть 7 (на каждый день недели) и в каждом время начала 0:0, а время окончания 24:0. Если рейд тайм у вас только по выходным с 8 вечера и до 11, то тогда вам подойдет такой вариант:
"WeekTimetable": [
{
"Day":"Sunday",
"StartH":8,
"StartM":0,
"EndH":11,
"EndM":0
},
{
"Day":"Saturday",
"StartH":8,
"StartM":0,
"EndH":11,
"EndM":0
}
],
Но устанавливая время начала и время окончания периодов – удостоверьтесь, что на них приходится и рестарт вашего сервера. Поскольку расписание в модификации YMCA_C4 проверяется только при запуске сервера и после не используется. Смена состояния возможности установки взрывчатки происходит только при рестарте. (Делайте рестарт перед каждым рейд-таймом)
“AvailiableTargets”
Этот параметр самый сложный в настройке. С его помощью можно настроить какие постройки будут взрываться, а какие нет и сколько каждой из них будет необходимо взрывчатки.
Как и предыдущий параметр, “AvailiableTargets” содержит в себе набор элементов. ВНИМАНИЕ: порядок элементов важен – причины этого будут описаны ниже.
Если ни один элемент из списка не подойдет к постройке, то она не может быть уничтожена взрывчаткой.
Пример такого элемента:
{
"Type": "Fence",
"MaxHP": 1,
"RequiredAttachments": [
"wall_base_down",
"wall_wood_down",
]
}
Каждый элемент отвечает за отдельное состояние постройки. Пример выше – устанавливает ванильному забору с построенными нижними основанием и деревянной обшивкой 1 hp – то есть такой забор может быть уничтожен одним взрывом. Рассмотрим параметры подробнее:
“Type” – это название класса постройки. Ванильные постройки: "Fence"
– забор, "ShelterSite"
– импровизированное укрытие, "TerritoryFlag"
– флагшток.
“MaxHP” – параметр отвечающий за количество взрывчатки необходимой для уничтожение таких построек. Устанавливается в целых числах без дробной части.
“RequiredAttachments” – список частей которые должны быть у постройки, чтобы для нее применялся этот элемент. Найти эти названия можно, либо в конфигурационных файлах в репозитории на гитхабе, либо в config.cpp
файле модификации этой постройки.
Для того, чтобы найти названия частей из config.cpp
файла необходимо изучить класс Construction
у постройки. В его подклассе (название может быть абсолютно любым) будут находится классы частей постройки. Для примера рассмотрим код "TerritoryFlag"
– ванильного флагштока.
class TerritoryFlag: BaseBuildingBase
{
scope = 2;
displayName = "$STR_CfgVehicles_TerritoryFlag0";
...
class Construction
{
class totem
{
class base{...};
class support{...};
class pole{...};
};
};
};
На месте многоточий в оригинале находится дополнительный код, который был опущен для упрощения повествования.
В выше приведенном коде можно увидеть что у класса Construction
есть подкласс totem
. В последнем есть три класса: "base"
, "support"
, "pole"
– они и являются частями постройки для флагштока. Опустим шаги по выявлению соответствий между названиями классов и внутриигровых объектов: "base"
– это установленное вертикально бревно, "support"
– каменное основание, "pole"
сам флагшток.
Теперь перейдем к настройке “RequiredAttachments” для флагштока. Предположим, что мы хотим чтобы любой недостроенный флагшток можно было уничтожить за один взрыв, а полностью построенный – за три. Начнем с настройки полностью построенного флагштока:
Полностью построенный флагшток – это флагшток у которого построены все три части – соответственно код элемента для “AvailiableTargets”:
{
"Type": "TerritoryFlag",
"MaxHP": 3,
"RequiredAttachments": [
"base",
"support",
"pole",
]
}
Заметим, что поскольку в игре "pole"
может быть построен только если уже есть "base"
и "support"
, то их можно опустить (все флагштоки с "pole"
их и так обязательно имеют) и код станет меньше:
{
"Type": "TerritoryFlag",
"MaxHP": 3,
"RequiredAttachments": [
"pole",
]
}
Так можно поступать и с другими постройками: у ванильного забора нельзя построить отделку (и деревянную и металлическую)
Перейдем теперь к описанию недостроенного флагштока. Поскольку мы хотим учесть флагштоки на любом этапе их постройки (и даже те, которые еще только разместили на земле и ничего не построили), указывать в “RequiredAttachments” ничего не нужно – оставляем список пустым (не забыть квадратные скобки):
{
"Type": "TerritoryFlag",
"MaxHP": 1,
"RequiredAttachments": []
}
Однако теперь под такой элемент подпадает даже полностью построенный флагшток (у него построены все части из списка “RequiredAttachments”) и теперь его HP может стать не 3 а 1.
Чтобы этого избежать, необходимо вписывать элементы “AvailiableTargets” в правильном порядке. Если элемент для полностью построенного флагштока будет находится в списке раньше элемента для недостроенного флагштока, то все будет работать как нужно (у частичного HP=1, у полного – 3). В ином случае (сначала недостроенный, потом полный) – для всех флагштоков HP=1.
Полный код “AvailiableTargets” для флагштоков должен выглядеть так:
"AvailiableTargets": [
{
"Type": "TerritoryFlag",
"MaxHP": 3,
"RequiredAttachments": [
"pole",
]
},
{
"Type": "TerritoryFlag",
"MaxHP": 1,
"RequiredAttachments": []
},
],
Для упрощения рассуждений: какой элемент поставить выше, а какой ниже, можно пользоваться простым правилом:
Чем больше параметр “MaxHP” у элемента, тем выше он должен быть.
Для закрепления вышесказанного рассмотрим такое изменение в настройках – для взрыва флагштока нужно:
- Если еще нет камней – нужен 1 взрыв
- Если еще не достроен, но камни уже есть – 2
- Если полностью построен – 3
Исходя из правила порядок элементов в списке должен быть такой:
- Полностью построенный флагшток
- Флагшток с камнями
- Недостроенный флагшток
Опустим рассуждения и запишем сразу готовый код для этого случая:
"AvailiableTargets": [
{
"Type": "TerritoryFlag",
"MaxHP": 3,
"RequiredAttachments": [
"pole",
]
},
{
"Type": "TerritoryFlag",
"MaxHP": 2,
"RequiredAttachments": [
"support",
]
},
{
"Type": "TerritoryFlag",
"MaxHP": 1,
"RequiredAttachments": []
},
],
Аддоны
При покупке репака модификации в комплекте так же идут две дополнительные модификации: YMCA_C4Addon_Action и YMCA_C4Addon_Notifications. Обе модификации являются клиентскими и после установки не требуют дополнительных действий.
Ошибки
После изменения настроек всегда проверяйте config.json
файл на наличие ошибок в синтаксисе json. Для этого можно воспользоваться встроенным в редактор кода инструментом или например таким онлайн сервисом.
Если после запуска вы не можете устанавливать взрывчатку – проверьте:
- Файл настроек должен быть в папке
[profiles]/YMCA_C4
- В параметре “State” должно быть установлено значение 1
- В параметре “WeekTimetable” должен быть элемент с сегодняшним днем недели
- День недели должен быть написан с большой буквы и на английском языке
- Текущее время должно быть в пределах указанного в элементе периода
Полностью функционирующий пример настроек для сервера с ванильным забором и рейд-таймом по пятницам-субботам с 12:00 до 18:00 можно посмотреть тут.
Для добавления модификации в состав своего серверного мода необходимо приобрести её репак.