Chapter 8.5: Using the DayZ Mod Template
Home | << Previous: Adding Chat Commands | Using the DayZ Mod Template | Next: Debugging & Testing >>
Indice
- O Que E o Template de Mod para DayZ?
- O Que o Template Fornece
- Passo 1: Clonar ou Baixar o Template
- Passo 2: Entender a Estrutura de Arquivos
- Passo 3: Renomear o Mod
- Passo 4: Atualizar o config.cpp
- Passo 5: Atualizar o mod.cpp
- Passo 6: Renomear Pastas e Arquivos de Script
- Passo 7: Compilar e Testar
- Integracao com DayZ Tools e Workbench
- Template vs. Configuracao Manual
- Proximos Passos
O Que E o Template de Mod para DayZ?
O Template de Mod para DayZ e um repositorio open-source mantido pelo InclementDab que fornece um esqueleto de mod completo e pronto para uso no DayZ:
Repositorio: https://github.com/InclementDab/DayZ-Mod-Template
Em vez de criar cada arquivo manualmente (como abordado no Capitulo 8.1: Seu Primeiro Mod), o template fornece uma estrutura de diretorios pre-construida com todo o boilerplate ja no lugar. Voce clona, renomeia alguns identificadores e esta pronto para escrever logica de jogo.
Este e o ponto de partida recomendado para quem ja construiu um mod Hello World e quer avancar para projetos mais complexos.
O Que o Template Fornece
O template inclui tudo que um mod de DayZ precisa para compilar e carregar:
| Arquivo / Pasta | Proposito |
|---|---|
mod.cpp | Metadados do mod (nome, autor, versao) exibidos no launcher do DayZ |
config.cpp | Declaracoes CfgPatches e CfgMods que registram o mod no motor |
Scripts/3_Game/ | Stubs de script da camada Game (enums, constantes, classes de config) |
Scripts/4_World/ | Stubs de script da camada World (entidades, gerenciadores, interacoes com o mundo) |
Scripts/5_Mission/ | Stubs de script da camada Mission (UI, hooks de missao) |
.gitignore | Ignorar arquivos pre-configurados para desenvolvimento DayZ (PBOs, logs, arquivos temporarios) |
O template segue a hierarquia padrao de 5 camadas de script documentada no Capitulo 2.1: A Hierarquia de 5 Camadas de Script. Todas as tres camadas de script estao configuradas no config.cpp, entao voce pode imediatamente colocar codigo em qualquer camada sem configuracao adicional.
Passo 1: Clonar ou Baixar o Template
Opcao A: Usar o Recurso "Use this template" do GitHub
- Va para https://github.com/InclementDab/DayZ-Mod-Template
- Clique no botao verde "Use this template" no topo do repositorio
- Escolha "Create a new repository"
- Nomeie seu repositorio (ex:
MyAwesomeMod) - Clone seu novo repositorio para o drive P:
cd P:\
git clone https://github.com/YourUsername/MyAwesomeMod.gitOpcao B: Clone Direto
Se voce nao precisa do seu proprio repositorio no GitHub, clone o template diretamente:
cd P:\
git clone https://github.com/InclementDab/DayZ-Mod-Template.git MyAwesomeModOpcao C: Baixar como ZIP
- Va para a pagina do repositorio
- Clique em Code e depois em Download ZIP
- Extraia o ZIP para
P:\MyAwesomeMod\
Passo 2: Entender a Estrutura de Arquivos
Apos clonar, o diretorio do seu mod fica assim:
P:\MyAwesomeMod\
mod.cpp
Scripts\
config.cpp
3_Game\
ModName\
(scripts da camada game)
4_World\
ModName\
(scripts da camada world)
5_Mission\
ModName\
(scripts da camada mission)Como Cada Parte Se Encaixa
mod.cpp e o cartao de identidade do seu mod. Ele controla o que os jogadores veem na lista de mods do launcher do DayZ. Consulte o Capitulo 2.3: mod.cpp e Workshop para todos os campos disponiveis.
Scripts/config.cpp e o arquivo mais critico. Ele diz ao motor do DayZ:
- Do que seu mod depende (
CfgPatches.requiredAddons[]) - Onde cada camada de script esta localizada (
CfgMods.class defs) - Quais defines de preprocessador definir (
defines[])
Consulte o Capitulo 2.2: config.cpp a Fundo para uma referencia completa.
Scripts/3_Game/ carrega primeiro. Coloque enums, constantes, IDs de RPC, classes de configuracao e qualquer coisa que nao referencie entidades do mundo aqui.
Scripts/4_World/ carrega em segundo. Coloque classes de entidade (modded class ItemBase), gerenciadores e qualquer coisa que interaja com objetos do jogo aqui.
Scripts/5_Mission/ carrega por ultimo. Coloque hooks de missao (modded class MissionServer), paineis de UI e logica de inicializacao aqui. Esta camada pode referenciar tipos de todas as camadas inferiores.
Passo 3: Renomear o Mod
O template vem com nomes de placeholder. Voce precisa substitui-los pelo nome real do seu mod. Aqui esta uma abordagem sistematica.
Escolha Seus Nomes
Antes de fazer qualquer edicao, decida:
| Identificador | Exemplo | Usado Em |
|---|---|---|
| Nome de exibicao do mod | "My Awesome Mod" | mod.cpp, config.cpp |
| Nome do diretorio | MyAwesomeMod | Nome da pasta, caminhos no config.cpp |
| Classe CfgPatches | MyAwesomeMod_Scripts | config.cpp CfgPatches |
| Classe CfgMods | MyAwesomeMod | config.cpp CfgMods |
| Subpasta de script | MyAwesomeMod | Dentro de 3_Game/, 4_World/, 5_Mission/ |
| Define de preprocessador | MYAWESOMEMOD | config.cpp defines[], verificacoes #ifdef |
Regras de Nomenclatura
- Sem espacos ou caracteres especiais em nomes de diretorio e classe. Use PascalCase ou underscores.
- Nomes de classe CfgPatches devem ser globalmente unicos. Dois mods com o mesmo nome de classe CfgPatches vao conflitar. Use o nome do seu mod como prefixo.
- Nomes de subpasta de script dentro de cada camada devem corresponder ao nome do seu mod para consistencia.
Passo 4: Atualizar o config.cpp
Abra Scripts/config.cpp e atualize as seguintes secoes.
CfgPatches
Substitua o nome de classe do template pelo seu:
class CfgPatches
{
class MyAwesomeMod_Scripts // <-- Seu nome de patch unico
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] =
{
"DZ_Data" // Dependencia do jogo base
};
};
};Se seu mod depende de outro mod, adicione o nome de classe CfgPatches dele ao requiredAddons[]:
requiredAddons[] =
{
"DZ_Data",
"CF_Scripts" // Depende do Community Framework
};CfgMods
Atualize a identidade do mod e os caminhos dos scripts:
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" };
};
};
};
};Pontos importantes:
- O valor de
dirdeve corresponder exatamente ao nome da pasta raiz do seu mod. - Cada caminho em
files[]e relativo a raiz do mod. - O array
dependencies[]deve listar quais modulos de script vanilla voce utiliza. A maioria dos mods usa todos os tres:"Game","World"e"Mission".
Defines de Preprocessador (Opcional)
Se voce quer que outros mods detectem a presenca do seu mod, adicione um array defines[]:
class MyAwesomeMod
{
// ... (outros campos acima)
class defs
{
class gameScriptModule
{
value = "";
files[] = { "MyAwesomeMod/Scripts/3_Game" };
};
// ... outros modulos ...
};
// Habilitar deteccao entre mods
defines[] = { "MYAWESOMEMOD" };
};Outros mods podem entao usar #ifdef MYAWESOMEMOD para compilar condicionalmente codigo que integra com o seu.
Passo 5: Atualizar o mod.cpp
Abra mod.cpp no diretorio raiz e atualize-o com as informacoes do seu mod:
name = "My Awesome Mod";
author = "YourName";
version = "1.0.0";
overview = "Uma breve descricao do que seu mod faz.";
picture = ""; // Opcional: caminho para uma imagem de preview
logo = ""; // Opcional: caminho para um logo
logoSmall = ""; // Opcional: caminho para um logo pequeno
logoOver = ""; // Opcional: caminho para um logo em hover
tooltip = "My Awesome Mod";
action = ""; // Opcional: URL para o site do seu modNo minimo, defina name, author e overview. Os outros campos sao opcionais, mas melhoram a apresentacao no launcher.
Passo 6: Renomear Pastas e Arquivos de Script
Renomeie as subpastas de script dentro de cada camada para corresponder ao nome do seu mod:
Scripts/3_Game/ModName/ --> Scripts/3_Game/MyAwesomeMod/
Scripts/4_World/ModName/ --> Scripts/4_World/MyAwesomeMod/
Scripts/5_Mission/ModName/ --> Scripts/5_Mission/MyAwesomeMod/Dentro dessas pastas, renomeie quaisquer arquivos .c de placeholder e atualize seus nomes de classe. Por exemplo, se o template inclui um arquivo como ModInit.c com uma classe chamada ModInit, renomeie-o para MyAwesomeModInit.c e atualize a classe:
modded class MissionServer
{
override void OnInit()
{
super.OnInit();
Print("[MyAwesomeMod] Server initialized!");
}
};Passo 7: Compilar e Testar
Usando File Patching (Iteracao Rapida)
A forma mais rapida de testar durante o desenvolvimento:
DayZDiag_x64.exe -mod=P:\MyAwesomeMod -filePatchingIsso carrega seus scripts diretamente das pastas de codigo-fonte sem empacotar um PBO. Edite um arquivo .c, reinicie o jogo e veja as mudancas imediatamente.
Usando o Addon Builder (Para Distribuicao)
Quando voce estiver pronto para distribuir:
- Abra o DayZ Tools pelo Steam
- Inicie o Addon Builder
- Defina o Source directory para
P:\MyAwesomeMod\Scripts\ - Defina o Output directory para
P:\@MyAwesomeMod\Addons\ - Defina o Prefix para
MyAwesomeMod\Scripts - Clique em Pack
Depois copie mod.cpp ao lado da pasta Addons:
P:\@MyAwesomeMod\
mod.cpp
Addons\
Scripts.pboVerificar no Log de Scripts
Apos iniciar, verifique o log de scripts para suas mensagens:
%localappdata%\DayZ\script_<date>_<time>.logProcure pela tag de prefixo do seu mod (ex: [MyAwesomeMod]).
Integracao com DayZ Tools e Workbench
Workbench
O DayZ Workbench pode abrir e editar os scripts do seu mod com destaque de sintaxe:
- Abra o Workbench pelo DayZ Tools
- Va em File > Open e navegue ate a pasta
Scripts/do seu mod - Abra qualquer arquivo
.cpara editar com suporte basico a Enforce Script
O Workbench le o config.cpp para entender quais arquivos pertencem a qual modulo de script, entao ter um config.cpp corretamente configurado e essencial.
Configuracao do Drive P:
O template e projetado para funcionar a partir do drive P:. Se voce clonou para outro local, crie uma juncao:
mklink /J P:\MyAwesomeMod "D:\Projects\MyAwesomeMod"Isso torna o mod acessivel em P:\MyAwesomeMod sem mover arquivos.
Automacao do Addon Builder
Para compilacoes repetidas, voce pode criar um arquivo batch na raiz do seu mod:
@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 Build complete.
pauseTemplate vs. Configuracao Manual
| Aspecto | Template | Manual (Capitulo 8.1) |
|---|---|---|
| Tempo ate a primeira compilacao | ~2 minutos | ~15 minutos |
| Todas as 3 camadas de script | Pre-configuradas | Voce adiciona conforme necessario |
| config.cpp | Completo com todos os modulos | Minimo (apenas missao) |
| Pronto para Git | .gitignore incluido | Voce cria o seu |
| Valor de aprendizado | Menor (arquivos pre-feitos) | Maior (construir tudo do zero) |
| Recomendado para | Modders experientes, novos projetos | Modders iniciantes aprendendo os fundamentos |
Recomendacao: Se este e seu primeiro mod de DayZ, comece com o Capitulo 8.1 para entender cada arquivo. Uma vez que esteja confortavel, use o template para todos os projetos futuros.
Proximos Passos
Com seu mod baseado em template funcionando, voce pode:
- Adicionar um item personalizado -- Siga o Capitulo 8.2: Criando um Item Personalizado para definir itens no config.cpp.
- Construir um painel de admin -- Siga o Capitulo 8.3: Construindo um Painel de Admin para UI de gerenciamento de servidor.
- Adicionar comandos de chat -- Siga o Capitulo 8.4: Adicionando Comandos de Chat para comandos de texto no jogo.
- Estudar o config.cpp a fundo -- Leia o Capitulo 2.2: config.cpp a Fundo para entender cada campo.
- Aprender opcoes do mod.cpp -- Leia o Capitulo 2.3: mod.cpp e Workshop para publicacao no Workshop.
- Adicionar dependencias -- Se seu mod usa Community Framework ou outro mod, atualize
requiredAddons[]e consulte o Capitulo 2.4: Seu Primeiro Mod.
Anterior: Capitulo 8.4: Adicionando Comandos de Chat | Inicio
