Chapter 8.5: Using the DayZ Mod Template
Home | << Previous: Adding Chat Commands | Using the DayZ Mod Template | Next: Debugging & Testing >>
Содержание
- Что такое шаблон мода DayZ?
- Что предоставляет шаблон
- Шаг 1: Клонирование или скачивание шаблона
- Шаг 2: Структура файлов
- Шаг 3: Переименование мода
- Шаг 4: Обновление config.cpp
- Шаг 5: Обновление mod.cpp
- Шаг 6: Переименование папок и файлов скриптов
- Шаг 7: Сборка и тестирование
- Интеграция с DayZ Tools и Workbench
- Шаблон vs. ручная настройка
- Следующие шаги
Что такое шаблон мода DayZ?
Шаблон мода DayZ -- это открытый репозиторий, поддерживаемый InclementDab, который предоставляет полный, готовый к использованию каркас мода для DayZ:
Репозиторий: https://github.com/InclementDab/DayZ-Mod-Template
Вместо создания каждого файла вручную (как описано в Главе 8.1: Ваш первый мод), шаблон предоставляет готовую структуру каталогов со всем шаблонным кодом. Вы клонируете его, переименовываете несколько идентификаторов, и можете приступать к написанию игровой логики.
Это рекомендуемая отправная точка для тех, кто уже создал мод Hello World и хочет перейти к более сложным проектам.
Что предоставляет шаблон
Шаблон включает всё, что необходимо моду DayZ для компиляции и загрузки:
| Файл / Папка | Назначение |
|---|---|
mod.cpp | Метаданные мода (имя, автор, версия), отображаемые в лаунчере DayZ |
config.cpp | Объявления CfgPatches и CfgMods, регистрирующие мод в движке |
Scripts/3_Game/ | Заглушки скриптов слоя Game (перечисления, константы, классы конфигов) |
Scripts/4_World/ | Заглушки скриптов слоя World (сущности, менеджеры, взаимодействия с миром) |
Scripts/5_Mission/ | Заглушки скриптов слоя Mission (UI, хуки миссий) |
.gitignore | Предварительно настроенные исключения для разработки DayZ (PBO, логи, временные файлы) |
Шаблон следует стандартной 5-уровневой иерархии скриптов, документированной в Главе 2.1: 5-уровневая иерархия скриптов. Все три скриптовых слоя подключены в config.cpp, поэтому вы можете сразу размещать код в любом слое без дополнительной настройки.
Шаг 1: Клонирование или скачивание шаблона
Вариант A: Используйте функцию GitHub "Use this template"
- Перейдите на https://github.com/InclementDab/DayZ-Mod-Template
- Нажмите зелёную кнопку "Use this template" в верхней части репозитория
- Выберите "Create a new repository"
- Назовите свой репозиторий (напр.,
MyAwesomeMod) - Клонируйте новый репозиторий на диск P:
cd P:\
git clone https://github.com/YourUsername/MyAwesomeMod.gitВариант B: Прямое клонирование
Если вам не нужен свой репозиторий на GitHub, клонируйте шаблон напрямую:
cd P:\
git clone https://github.com/InclementDab/DayZ-Mod-Template.git MyAwesomeModВариант C: Скачивание как ZIP
- Перейдите на страницу репозитория
- Нажмите Code, затем Download ZIP
- Распакуйте ZIP в
P:\MyAwesomeMod\
Шаг 2: Структура файлов
После клонирования каталог вашего мода выглядит так:
P:\MyAwesomeMod\
mod.cpp
Scripts\
config.cpp
3_Game\
ModName\
(скрипты слоя game)
4_World\
ModName\
(скрипты слоя world)
5_Mission\
ModName\
(скрипты слоя mission)Как каждая часть встраивается в целое
mod.cpp -- это удостоверение вашего мода. Он определяет, что игроки видят в списке модов лаунчера DayZ. Все доступные поля описаны в Главе 2.3: mod.cpp и Workshop.
Scripts/config.cpp -- самый важный файл. Он сообщает движку DayZ:
- От чего зависит ваш мод (
CfgPatches.requiredAddons[]) - Где находится каждый скриптовый слой (
CfgMods.class defs) - Какие определения препроцессора установить (
defines[])
Полный справочник см. в Главе 2.2: config.cpp подробно.
Scripts/3_Game/ загружается первым. Размещайте здесь перечисления, константы, ID RPC, классы конфигурации и всё, что не ссылается на сущности мира.
Scripts/4_World/ загружается вторым. Размещайте здесь классы сущностей (modded class ItemBase), менеджеры и всё, что взаимодействует с игровыми объектами.
Scripts/5_Mission/ загружается последним. Размещайте здесь хуки миссий (modded class MissionServer), UI-панели и логику запуска. Этот слой может ссылаться на типы из всех нижележащих слоёв.
Шаг 3: Переименование мода
Шаблон поставляется с именами-заполнителями. Вам нужно заменить их на реальное имя вашего мода. Вот систематический подход.
Выберите имена
Перед внесением каких-либо изменений определитесь:
| Идентификатор | Пример | Используется в |
|---|---|---|
| Отображаемое имя мода | "My Awesome Mod" | mod.cpp, config.cpp |
| Имя каталога | MyAwesomeMod | Имя папки, пути config.cpp |
| Класс CfgPatches | MyAwesomeMod_Scripts | config.cpp CfgPatches |
| Класс CfgMods | MyAwesomeMod | config.cpp CfgMods |
| Подпапка скриптов | MyAwesomeMod | Внутри 3_Game/, 4_World/, 5_Mission/ |
| Определение препроцессора | MYAWESOMEMOD | config.cpp defines[], проверки #ifdef |
Правила именования
- Никаких пробелов или специальных символов в именах каталогов и классов. Используйте PascalCase или подчёркивания.
- Имена классов CfgPatches должны быть глобально уникальными. Два мода с одинаковым именем класса CfgPatches вступят в конфликт. Используйте имя своего мода как префикс.
- Имена подпапок скриптов внутри каждого слоя должны совпадать с именем вашего мода для единообразия.
Шаг 4: Обновление config.cpp
Откройте Scripts/config.cpp и обновите следующие разделы.
CfgPatches
Замените имя класса шаблона на своё:
class CfgPatches
{
class MyAwesomeMod_Scripts // <-- Ваше уникальное имя патча
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] =
{
"DZ_Data" // Зависимость от базовой игры
};
};
};Если ваш мод зависит от другого мода, добавьте его имя класса CfgPatches в requiredAddons[]:
requiredAddons[] =
{
"DZ_Data",
"CF_Scripts" // Зависит от Community Framework
};CfgMods
Обновите идентификацию мода и пути скриптов:
class CfgMods
{
class MyAwesomeMod
{
dir = "MyAwesomeMod";
name = "My Awesome Mod";
author = "YourName";
type = "mod";
dependencies[] = { "Game", "World", "Mission" };
class defs
{
class gameScriptModule
{
value = "";
files[] = { "MyAwesomeMod/Scripts/3_Game" };
};
class worldScriptModule
{
value = "";
files[] = { "MyAwesomeMod/Scripts/4_World" };
};
class missionScriptModule
{
value = "";
files[] = { "MyAwesomeMod/Scripts/5_Mission" };
};
};
};
};Ключевые моменты:
- Значение
dirдолжно точно совпадать с именем корневой папки вашего мода. - Каждый путь
files[]указан относительно корня мода. - Массив
dependencies[]должен перечислять, к каким ванильным скриптовым модулям вы подключаетесь. Большинство модов используют все три:"Game","World"и"Mission".
Определения препроцессора (опционально)
Если вы хотите, чтобы другие моды могли обнаруживать ваш мод, добавьте массив defines[]:
class MyAwesomeMod
{
// ... (остальные поля выше)
class defs
{
class gameScriptModule
{
value = "";
files[] = { "MyAwesomeMod/Scripts/3_Game" };
};
// ... другие модули ...
};
// Включить межмодовое обнаружение
defines[] = { "MYAWESOMEMOD" };
};Другие моды смогут использовать #ifdef MYAWESOMEMOD для условной компиляции кода, интегрирующегося с вашим.
Шаг 5: Обновление mod.cpp
Откройте mod.cpp в корневом каталоге и обновите его информацией о вашем моде:
name = "My Awesome Mod";
author = "YourName";
version = "1.0.0";
overview = "Краткое описание того, что делает ваш мод.";
picture = ""; // Опционально: путь к изображению предпросмотра
logo = ""; // Опционально: путь к логотипу
logoSmall = ""; // Опционально: путь к маленькому логотипу
logoOver = ""; // Опционально: путь к логотипу при наведении
tooltip = "My Awesome Mod";
action = ""; // Опционально: URL сайта вашего модаКак минимум установите name, author и overview. Остальные поля необязательны, но улучшают представление в лаунчере.
Шаг 6: Переименование папок и файлов скриптов
Переименуйте подпапки скриптов внутри каждого слоя в соответствии с именем вашего мода:
Scripts/3_Game/ModName/ --> Scripts/3_Game/MyAwesomeMod/
Scripts/4_World/ModName/ --> Scripts/4_World/MyAwesomeMod/
Scripts/5_Mission/ModName/ --> Scripts/5_Mission/MyAwesomeMod/Внутри этих папок переименуйте файлы-заполнители .c и обновите имена их классов. Например, если шаблон содержит файл ModInit.c с классом ModInit, переименуйте его в MyAwesomeModInit.c и обновите класс:
modded class MissionServer
{
override void OnInit()
{
super.OnInit();
Print("[MyAwesomeMod] Server initialized!");
}
};Шаг 7: Сборка и тестирование
Использование File Patching (быстрая итерация)
Самый быстрый способ тестирования во время разработки:
DayZDiag_x64.exe -mod=P:\MyAwesomeMod -filePatchingЭто загружает скрипты напрямую из исходных папок без упаковки PBO. Отредактируйте файл .c, перезапустите игру и сразу увидите изменения.
Использование Addon Builder (для распространения)
Когда вы готовы к распространению:
- Откройте DayZ Tools из Steam
- Запустите Addon Builder
- Установите Source directory на
P:\MyAwesomeMod\Scripts\ - Установите Output directory на
P:\@MyAwesomeMod\Addons\ - Установите Prefix на
MyAwesomeMod\Scripts - Нажмите Pack
Затем скопируйте mod.cpp рядом с папкой Addons:
P:\@MyAwesomeMod\
mod.cpp
Addons\
Scripts.pboПроверка в логе скриптов
После запуска проверьте лог скриптов на наличие ваших сообщений:
%localappdata%\DayZ\script_<date>_<time>.logИщите тег-префикс вашего мода (напр., [MyAwesomeMod]).
Интеграция с DayZ Tools и Workbench
Workbench
DayZ Workbench может открывать и редактировать скрипты вашего мода с подсветкой синтаксиса:
- Откройте Workbench из DayZ Tools
- Перейдите в File > Open и откройте папку
Scripts/вашего мода - Откройте любой файл
.cдля редактирования с базовой поддержкой Enforce Script
Workbench читает config.cpp, чтобы понять, какие файлы принадлежат каким скриптовым модулям, поэтому правильно настроенный config.cpp обязателен.
Настройка диска P:
Шаблон рассчитан на работу с диска P:. Если вы клонировали в другое место, создайте символическую ссылку:
mklink /J P:\MyAwesomeMod "D:\Projects\MyAwesomeMod"Это сделает мод доступным по адресу P:\MyAwesomeMod без перемещения файлов.
Автоматизация Addon Builder
Для повторных сборок вы можете создать batch-файл в корне вашего мода:
@echo off
set DAYZ_TOOLS="C:\Program Files (x86)\Steam\steamapps\common\DayZ Tools"
set SOURCE=P:\MyAwesomeMod\Scripts
set OUTPUT=P:\@MyAwesomeMod\Addons
set PREFIX=MyAwesomeMod\Scripts
%DAYZ_TOOLS%\Bin\AddonBuilder\AddonBuilder.exe %SOURCE% %OUTPUT% -prefix=%PREFIX% -clear
echo Сборка завершена.
pauseШаблон vs. ручная настройка
| Аспект | Шаблон | Вручную (Глава 8.1) |
|---|---|---|
| Время до первой сборки | ~2 минуты | ~15 минут |
| Все 3 скриптовых слоя | Предварительно настроены | Добавляете по мере необходимости |
| config.cpp | Полный со всеми модулями | Минимальный (только миссия) |
| Готов для Git | .gitignore включён | Создаёте свой |
| Учебная ценность | Ниже (файлы готовы) | Выше (строите всё сами) |
| Рекомендуется для | Опытных моддеров, новых проектов | Начинающих моддеров, осваивающих основы |
Рекомендация: Если это ваш самый первый мод DayZ, начните с Главы 8.1, чтобы разобраться в каждом файле. Освоившись, используйте шаблон для всех будущих проектов.
Следующие шаги
С вашим модом на основе шаблона можно:
- Добавить пользовательский предмет -- Следуйте Главе 8.2: Создание пользовательского предмета для определения предметов в config.cpp.
- Создать админ-панель -- Следуйте Главе 8.3: Создание админ-панели для UI управления сервером.
- Добавить команды чата -- Следуйте Главе 8.4: Добавление команд чата для текстовых команд в игре.
- Изучить config.cpp подробнее -- Прочитайте Главу 2.2: config.cpp подробно, чтобы понять каждое поле.
- Узнать опции mod.cpp -- Прочитайте Главу 2.3: mod.cpp и Workshop для публикации в Workshop.
- Добавить зависимости -- Если ваш мод использует Community Framework или другой мод, обновите
requiredAddons[]и смотрите Главу 2.4: Ваш первый мод.
Предыдущая: Глава 8.4: Добавление команд чата | Главная
