Skip to content

Chapter 8.5: Using the DayZ Mod Template

Home | << Previous: Adding Chat Commands | Using the DayZ Mod Template | Next: Debugging & Testing >>


Содержание


Что такое шаблон мода 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"

  1. Перейдите на https://github.com/InclementDab/DayZ-Mod-Template
  2. Нажмите зелёную кнопку "Use this template" в верхней части репозитория
  3. Выберите "Create a new repository"
  4. Назовите свой репозиторий (напр., MyAwesomeMod)
  5. Клонируйте новый репозиторий на диск P:
bash
cd P:\
git clone https://github.com/YourUsername/MyAwesomeMod.git

Вариант B: Прямое клонирование

Если вам не нужен свой репозиторий на GitHub, клонируйте шаблон напрямую:

bash
cd P:\
git clone https://github.com/InclementDab/DayZ-Mod-Template.git MyAwesomeMod

Вариант C: Скачивание как ZIP

  1. Перейдите на страницу репозитория
  2. Нажмите Code, затем Download ZIP
  3. Распакуйте 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
Класс CfgPatchesMyAwesomeMod_Scriptsconfig.cpp CfgPatches
Класс CfgModsMyAwesomeModconfig.cpp CfgMods
Подпапка скриптовMyAwesomeModВнутри 3_Game/, 4_World/, 5_Mission/
Определение препроцессораMYAWESOMEMODconfig.cpp defines[], проверки #ifdef

Правила именования

  • Никаких пробелов или специальных символов в именах каталогов и классов. Используйте PascalCase или подчёркивания.
  • Имена классов CfgPatches должны быть глобально уникальными. Два мода с одинаковым именем класса CfgPatches вступят в конфликт. Используйте имя своего мода как префикс.
  • Имена подпапок скриптов внутри каждого слоя должны совпадать с именем вашего мода для единообразия.

Шаг 4: Обновление config.cpp

Откройте Scripts/config.cpp и обновите следующие разделы.

CfgPatches

Замените имя класса шаблона на своё:

cpp
class CfgPatches
{
    class MyAwesomeMod_Scripts    // <-- Ваше уникальное имя патча
    {
        units[] = {};
        weapons[] = {};
        requiredVersion = 0.1;
        requiredAddons[] =
        {
            "DZ_Data"            // Зависимость от базовой игры
        };
    };
};

Если ваш мод зависит от другого мода, добавьте его имя класса CfgPatches в requiredAddons[]:

cpp
requiredAddons[] =
{
    "DZ_Data",
    "CF_Scripts"              // Зависит от Community Framework
};

CfgMods

Обновите идентификацию мода и пути скриптов:

cpp
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[]:

cpp
class MyAwesomeMod
{
    // ... (остальные поля выше)

    class defs
    {
        class gameScriptModule
        {
            value = "";
            files[] = { "MyAwesomeMod/Scripts/3_Game" };
        };
        // ... другие модули ...
    };

    // Включить межмодовое обнаружение
    defines[] = { "MYAWESOMEMOD" };
};

Другие моды смогут использовать #ifdef MYAWESOMEMOD для условной компиляции кода, интегрирующегося с вашим.


Шаг 5: Обновление mod.cpp

Откройте mod.cpp в корневом каталоге и обновите его информацией о вашем моде:

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 и обновите класс:

c
modded class MissionServer
{
    override void OnInit()
    {
        super.OnInit();
        Print("[MyAwesomeMod] Server initialized!");
    }
};

Шаг 7: Сборка и тестирование

Использование File Patching (быстрая итерация)

Самый быстрый способ тестирования во время разработки:

batch
DayZDiag_x64.exe -mod=P:\MyAwesomeMod -filePatching

Это загружает скрипты напрямую из исходных папок без упаковки PBO. Отредактируйте файл .c, перезапустите игру и сразу увидите изменения.

Использование Addon Builder (для распространения)

Когда вы готовы к распространению:

  1. Откройте DayZ Tools из Steam
  2. Запустите Addon Builder
  3. Установите Source directory на P:\MyAwesomeMod\Scripts\
  4. Установите Output directory на P:\@MyAwesomeMod\Addons\
  5. Установите Prefix на MyAwesomeMod\Scripts
  6. Нажмите Pack

Затем скопируйте mod.cpp рядом с папкой Addons:

P:\@MyAwesomeMod\
    mod.cpp
    Addons\
        Scripts.pbo

Проверка в логе скриптов

После запуска проверьте лог скриптов на наличие ваших сообщений:

%localappdata%\DayZ\script_<date>_<time>.log

Ищите тег-префикс вашего мода (напр., [MyAwesomeMod]).


Интеграция с DayZ Tools и Workbench

Workbench

DayZ Workbench может открывать и редактировать скрипты вашего мода с подсветкой синтаксиса:

  1. Откройте Workbench из DayZ Tools
  2. Перейдите в File > Open и откройте папку Scripts/ вашего мода
  3. Откройте любой файл .c для редактирования с базовой поддержкой Enforce Script

Workbench читает config.cpp, чтобы понять, какие файлы принадлежат каким скриптовым модулям, поэтому правильно настроенный config.cpp обязателен.

Настройка диска P:

Шаблон рассчитан на работу с диска P:. Если вы клонировали в другое место, создайте символическую ссылку:

batch
mklink /J P:\MyAwesomeMod "D:\Projects\MyAwesomeMod"

Это сделает мод доступным по адресу P:\MyAwesomeMod без перемещения файлов.

Автоматизация Addon Builder

Для повторных сборок вы можете создать batch-файл в корне вашего мода:

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, чтобы разобраться в каждом файле. Освоившись, используйте шаблон для всех будущих проектов.


Следующие шаги

С вашим модом на основе шаблона можно:

  1. Добавить пользовательский предмет -- Следуйте Главе 8.2: Создание пользовательского предмета для определения предметов в config.cpp.
  2. Создать админ-панель -- Следуйте Главе 8.3: Создание админ-панели для UI управления сервером.
  3. Добавить команды чата -- Следуйте Главе 8.4: Добавление команд чата для текстовых команд в игре.
  4. Изучить config.cpp подробнее -- Прочитайте Главу 2.2: config.cpp подробно, чтобы понять каждое поле.
  5. Узнать опции mod.cpp -- Прочитайте Главу 2.3: mod.cpp и Workshop для публикации в Workshop.
  6. Добавить зависимости -- Если ваш мод использует Community Framework или другой мод, обновите requiredAddons[] и смотрите Главу 2.4: Ваш первый мод.

Предыдущая: Глава 8.4: Добавление команд чата | Главная

Released under CC BY-SA 4.0 | Code examples under MIT License