# DayZSetManager 2.0.0 +

Сначала прочитайте статью [Установка модификации](https://workshop-guide.magicbyte.ru/workshop/ustanovka-modifikacii).

## Возможности мода

* Удобная и гибкая настройка снаряжения игрока.
* Игрок может сам собрать свой уникальный набор из доступных предметов.
* Игрок может сохранять собранный набор для быстрого выбора. Сохранённые наборы привязываются к серверу.
* Возможность настройки персонального снаряжения для игрока по SteamID 64.
* Блок "описание" для каждой вещи берется из конфигурации игры, а также информирует игрока о дополнительных предметах/аттачментах внутри или на предмете/оружии и т. д.&#x20;
* Блоке "содержимое" информирует игрока о всех предметах, которые он получит при появлении.
* Игрок может выбрать точку появления из набора, настроенного администраторами сервера.
* Есть возможность устанавливать к/д на появление в одной точке.
* При выборе точке мод проверит наличие появляющихся/находящихся у точки других игроков и предупредит игрока об их наличии.
* Если все точки находятся на к/д, игрок может выбрать случайную точку. Мод предпочтёт точку, у которой нет других игроков, при наличии такой, или предупредить игрока о наличии игроков.
* После появления игрока и выдачи ему снаряжения, функция StartingEquipSetup из init.c будет вызвана, что позволит дополнительно настроить процесс появления игрока.
* Мод поддерживает настраиваемую через файл на сервере локализацию.
* Имеет интеграцию с модом @DayZShop.

## Установка

Для установки мода:

* Установите DayZSetManager.pbo как клиентскую модификацию.
* Папку DZSM поместите в папку профиля вашего сервера.
* Папку MagicByte поместите в папку профиля вашего сервера. Если такая папка есть, объедините их содержимое.

## Конфигурация мода

В приведённых ниже файлах конфигурации используются комментарии (символ '//' и следующие после них слова). Используемый формат (JSON) не поддерживает комментарии, поэтому данные файлы не могут быть использованы в качестве файлов конфигурации.

### Файл конфигурации набора

Файл конфигурации набора размещается по пути DZSM/sets/{название набора}.json. Название файла должно соответствовать названию набора. Файл использует формат JSON. Ниже приведён пример файла конфигурации набора под названием "Example Set". Отметим, что в данном файле конфгурации в некоторых местах не указываются поля, поэтому система использует их стандартные значения (значение "count" - "1", значение "quantity" - "1", значение "content" - "\[]").&#x20;

```json
{
	"Definition": { //Обязательное поле, в котором описан сам набор
		"display": true, //Отображать ли набор в списке "сохранённые наборы"
		"slots": [ //Предметы, распределённые по категориям
			{
				"category": "Character", //Категория предмета. Может быть любым текстом.
				"classname": "SurvivorM_Mirek", //Класснейм предмета. В данном случае - персонаж.
				"content": //Что положить в предмет. В случае с персонажем - что выдать ему в инвентарь, если он будет выбран.
				[
					{
						"classname": "TShirt_Red", //Класснейм предмета
						"count": 1, //Сколько раз выдать предмет. Если поля нет, предмет будет выдан один раз.
						"quantity": 1, //Заполненность предмета/прочность/количество в стаке. Если поля нет, оно считается равным 1.
					        "UsePercentileQuantity": true // Процентное заполнение Quantity - true, точное заполнение Quantity - false.
                                         }
				]
			},
			{
				"category": "Bag", //Категория предмета. Может быть любым текстом.
				"count": 1, //Сколько раз выдать предмет. Если поля нет, предмет будет выдан один раз.
				"quantity": 1, //Заполненность предмета/прочность/количество в стаке. Если поля нет, оно считается равным 1.
			        "UsePercentileQuantity": true // Процентное заполнение Quantity - true, точное заполнение Quantity - false.
				"classname": "AssaultBag_Black", //Класснейм предмета
				"content": [ //Что положить в предмет
					{
						"classname": "CZ61", //Класснейм предмета
						"count": 2, //Сколько раз выдать предмет. Если поля нет, предмет будет выдан один раз.
						"content": [
							{
								"classname": "Mag_CZ61_20Rnd" //Класснейм предмета
							},
							{
								"classname": "PistolSuppressor" //Класснейм предмета
							}
						]
					}
				]
			}
		],
		"items": [ //Дополнительные предметы, которые игрок получит при появлении всегда, если у него есть доступ к этому набору
			{
				"count": 1, //Выдать предмет 1 раз
				"quantity": 1, //Заполненность предмета/прочность/количество в стаке. Если поля нет, оно считается равным 1.
			        "UsePercentileQuantity": true // Процентное заполнение Quantity - true, точное заполнение Quantity - false.
				"classname": "SodaCan_Cola", //Класснейм предмета
				"content": [] //Что положить в предмет. Если в предмет ничего не помещается, поле можно не указывать
			}
		], 
		"spawns": { //Настройки точек появления, которые игрок увидит, если у него есть доступ к этому набору
			"Example spawn": { //Точка под названием "Example spawn"
				"cooldown": 120, //К/д точки
				"points": [ //Набор реальных точек, среди которых будет выбрано место после выбора этой точки
					{
						"radius": 20, //Радиус проверки на игроков
						"position": "2500.000000 20.000000 2000.000000" //Координаты точки
					}
				],
				"position": "2500.000000 0.000000 2000.000000" //Отображаемая на карте позиция точки
			}
		},
	}
}
```

Если игрок имеет доступ к данному набору, то в меню у него в категории Character появится пункт с персонажем Mirek, на которого будет надета футболка, в категории "Bag" появится рюкзак, в котором будет лежать 2 CR-61 Skorpion, на каждом их которых будет закреплён глушитель и магазин на 20 патронов. Также игрок получит доступ к точке появления под названием "Example Set", расположенной на поверхности на координатах 2500 0 2000.

### Глобальный файл конфигурации

Глобальный файл конфигурации находится по пути DZSM/config.json. Файл использует формат JSON.

```json
{
        "UserSetsOverrideDefaultSets": true/false //Скрывать ли def наборы, если у игрока есть другие наборы. 
	"DefaultSets": [ //Список доступным всем наборов
		"Example Set", //Название набора
		"Test" //Название набора
	],
	"PreloadSets": [ //Список предзагружаемых наборов
		"Example Set" //Предзагружаемый набор
	]
	        "quickslots": { //Слоты быстродействия, работают в порядке очереди.
                "slot1": ["BandageDressing","Apple"], //В каждый слот вы можете назначить предмет.
                "slot2": [],
                "slot3": [],
                "slot4": [],
                "slot5": [],
                "slot6": [],
                "slot7": [],
                "slot8": [],
                "slot9": [],
                "slot0": []
        },
        "InterfaceColor": -16101938 //Цвет интерфейса, подробнее в разделе "форматы цветов"
}
```

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

Иначе говоря, предзагружаемые наборы замедляю загрузку сервера, но уменьшают время открытия меню у игроков.&#x20;

### Файл конфигурации игрока

Файл конфигурации игрока размещается по пути DZSM/users/{steamID64}.json. Файл использует формат JSON. Файл читается сервером при входе игрока, и обновляется при выходе игрока.

```json
{
	"Cooldowns": { //Список к/д точек появления игрока
		"Example Set": { //Набор, из которого взяты точки
			"Example spawn": 1692032832 //Точки, взятые из набора, и Unix-timestamp времени, когда к/д закончится
		}
	},
	"AvailableSets": [ //Список доступных игроку наборов
		"Test" //Название набора
	]
}
```

## Локализация

Файл локализации располагается по пути DZSM/locale.loc. Для инструкций по его изменению обратитесь к статье [Редактирование файлов локализации](https://workshop-guide.magicbyte.ru/mods/redaktirovanie-failov-lokalizacii). В файле локализации можно указывать id набора в качестве ключа (в таком случае оно не должно содержать пробелов), чтобы переводить названия наборов на клиенте.
