Skip to content

Your First Mod (Hello World) ​


Sumário ​


Pré-requisitos ​

Antes de começar, tenha certeza de que você tem:

  • Steam instalado e logado
  • DayZ instalado (versão retail da Steam)
  • Um editor de texto (VS Code, Notepad++ ou até Notepad)
  • Aproximadamente 15 GB de espaço livre em disco para DayZ Tools

Isso é tudo. Nenhuma experiência de programação é necessária para este tutorial -- toda linha de código é explicada.


Passo 1: Instalar DayZ Tools ​

DayZ Tools é uma aplicação gratuita na Steam que inclui tudo que você precisa para construir mods: o editor de script Workbench, Addon Builder para empacotamento de PBO, Terrain Builder e Object Builder.

Como Instalar ​

  1. Abra a Steam
  2. Vá para Biblioteca
  3. No filtro dropdown no topo, mude Jogos para Ferramentas
  4. Procure por DayZ Tools
  5. Clique Instalar
  6. Aguarde o download completar (é aproximadamente 12-15 GB)

O que é Instalado ​

FerramentaPropósito
Addon BuilderEmpacota seus arquivos de mod em arquivos .pbo
WorkbenchEditor de script com syntax highlighting
Object BuilderVisualizador e editor de modelos 3D para arquivos .p3d
Terrain BuilderEditor de mapa/terreno
TexView2Visualizador/conversor de texturas (.paa, .edds)

Para este tutorial, você só precisa do Addon Builder. Os outros são úteis depois.


Passo 2: Configurar o Drive P: (Workdrive) ​

Modding DayZ usa uma letra de drive virtual P: como workspace compartilhado. Todos os mods e dados do jogo referenciam caminhos começando de P:, o que mantém os caminhos consistentes entre diferentes máquinas.

Criando o Drive P: ​

  1. Abra DayZ Tools pela Steam
  2. Na janela principal do DayZ Tools, clique em P: Drive Management
  3. Clique Create/Mount P: Drive
  4. Escolha uma localização para os dados do drive P: (padrão é ok)
  5. Aguarde o processo completar

Verificar que Funciona ​

Abra o Explorador de Arquivos e navegue até P:\. Você deve ver um diretório contendo dados do jogo DayZ. Se o drive P: existe e você pode navegar nele, está pronto para prosseguir.


Passo 3: Criar a Estrutura de Diretórios do Mod ​

Todo mod DayZ segue uma estrutura de pastas específica. Crie os seguintes diretórios e arquivos no seu drive P::

P:\MyFirstMod\
    mod.cpp
    Scripts\
        config.cpp
        5_Mission\
            MyFirstMod\
                MissionHello.c

Entendendo a Estrutura ​

CaminhoPropósito
MyFirstMod/Raiz do seu mod
mod.cppMetadata (nome, autor) mostrada no launcher DayZ
Scripts/config.cppDiz para a engine do que seu mod depende e onde os scripts ficam
Scripts/5_Mission/A camada de script de missão (UI, hooks de startup)
Scripts/5_Mission/MyFirstMod/Subpasta para scripts de missão do seu mod
Scripts/5_Mission/MyFirstMod/MissionHello.cSeu arquivo de script real

Você precisa exatamente de 3 arquivos. Vamos criá-los um por um.


Passo 4: Escrever mod.cpp ​

Crie o arquivo P:\MyFirstMod\mod.cpp no seu editor de texto e cole este conteúdo:

cpp
name = "My First Mod";
author = "YourName";
version = "1.0";
overview = "My very first DayZ mod. Prints Hello World to the script log.";

O que Cada Linha Faz ​

  • name -- O nome de exibição mostrado na lista de mods do launcher DayZ. Jogadores veem isso ao selecionar mods.
  • author -- Seu nome ou nome da equipe.
  • version -- Qualquer string de versão que você quiser. A engine não a parseia.
  • overview -- Uma descrição mostrada ao expandir os detalhes do mod.

Passo 5: Escrever config.cpp ​

Crie o arquivo P:\MyFirstMod\Scripts\config.cpp e cole este conteúdo:

cpp
class CfgPatches
{
    class MyFirstMod_Scripts
    {
        units[] = {};
        weapons[] = {};
        requiredVersion = 0.1;
        requiredAddons[] =
        {
            "DZ_Data"
        };
    };
};

class CfgMods
{
    class MyFirstMod
    {
        dir = "MyFirstMod";
        name = "My First Mod";
        author = "YourName";
        type = "mod";

        dependencies[] = { "Mission" };

        class defs
        {
            class missionScriptModule
            {
                value = "";
                files[] = { "MyFirstMod/Scripts/5_Mission" };
            };
        };
    };
};

O que Cada Seção Faz ​

CfgPatches declara seu mod para a engine DayZ. requiredAddons[] = { "DZ_Data" }; garante que seu mod carrega após os dados base do jogo.

CfgMods diz para a engine onde seus scripts ficam. class missionScriptModule diz para a engine compilar todos os arquivos .c encontrados em MyFirstMod/Scripts/5_Mission/.


Passo 6: Escrever Seu Primeiro Script ​

Crie o arquivo P:\MyFirstMod\Scripts\5_Mission\MyFirstMod\MissionHello.c e cole este conteúdo:

c
modded class MissionServer
{
    override void OnInit()
    {
        super.OnInit();
        Print("[MyFirstMod] Hello World! The SERVER mission has started.");
    }
};

modded class MissionGameplay
{
    override void OnInit()
    {
        super.OnInit();
        Print("[MyFirstMod] Hello World! The CLIENT mission has started.");
    }
};

Explicação Linha por Linha ​

A palavra-chave modded é o coração do modding DayZ. Ela diz: "Pegue a classe MissionServer existente do jogo vanilla e adicione minhas mudanças por cima." Você não está criando uma nova classe -- está estendendo a existente.

super.OnInit(); chama a implementação vanilla original. Esta linha é crítica. Se você pular, o código de inicialização de missão vanilla nunca roda e o jogo quebra. Sempre chame super primeiro.

Print() escreve uma mensagem no arquivo de log de script do DayZ. O prefixo [MyFirstMod] facilita encontrar suas mensagens no log.

Sobre Arquivos .c ​

Scripts DayZ usam a extensão .c. Apesar de parecer C, isso é Enforce Script, a linguagem de script própria do DayZ. Ela tem classes, herança, arrays e maps, mas não é C, C++ ou C#. Sua IDE pode mostrar erros de syntax -- isso é normal e esperado.


Passo 7: Empacotar o PBO com Addon Builder ​

DayZ carrega mods de arquivos .pbo (similar a .zip mas em um formato que a engine entende). Você precisa empacotar sua pasta Scripts em um PBO.

Usando Addon Builder (GUI) ​

  1. Abra DayZ Tools pela Steam
  2. Clique em Addon Builder
  3. Defina Source directory para: P:\MyFirstMod\Scripts\
  4. Defina Output/Destination directory para: P:\@MyFirstMod\Addons\
  5. Em Addon Builder Options: Defina Prefix para: MyFirstMod\Scripts
  6. Clique Pack

Alternativa: Testar Sem Empacotar (File Patching) ​

Durante o desenvolvimento, você pode pular o empacotamento PBO inteiramente usando o modo file patching:

DayZDiag_x64.exe -mod=P:\MyFirstMod -filePatching

File patching é mais rápido para iteração porque você edita um arquivo .c, reinicia o jogo e vê as mudanças imediatamente.


Passo 8: Carregar o Mod no DayZ ​

Opção A: Launcher DayZ ​

Abra o launcher, vá para a aba Mods, clique Add local mod, navegue até P:\@MyFirstMod\, habilite o mod e clique Play.

Opção B: Linha de Comando (Recomendado para Desenvolvimento) ​

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

Passo 9: Verificar no Log de Script ​

Após iniciar o DayZ com seu mod, a engine escreve toda saída de Print() em arquivos de log.

Encontrando os Arquivos de Log ​

Logs do DayZ ficam no diretório AppData local:

C:\Users\<SeuUsuarioWindows>\AppData\Local\DayZ\

Procure pelo arquivo mais recente com nome como: script_<data>_<hora>.log

O que Procurar ​

Abra o arquivo de log e procure por [MyFirstMod]. Você deve ver:

[MyFirstMod] Hello World! The SERVER mission has started.

Se você vê sua mensagem: parabéns. Seu primeiro mod DayZ está funcionando.


Passo 10: Resolução de Problemas Comuns ​

Problema: Sem Saída no Log (Mod Parece Não Carregar) ​

  • Verifique os parâmetros de lançamento. O caminho -mod= deve apontar para a pasta correta.
  • Verifique que config.cpp existe no nível correto: Scripts/config.cpp dentro da raiz do mod.
  • Verifique o nome da classe CfgPatches.

Problema: SCRIPT (E): Undefined variable ou Undefined type ​

  • Typo em um nome de classe. MisionServer ao invés de MissionServer.
  • Camada de script errada.
  • Chamada super.OnInit() faltando.

Problema: Mod Carrega Mas Script Nunca Executa ​

  • Extensão do arquivo: certifique-se que o arquivo de script termina em .c (não .c.txt).
  • Incompatibilidade de caminho de script.
  • Nome de classe é case-sensitive.

Referência Completa dos Arquivos ​

Arquivo 1: MyFirstMod/mod.cpp ​

cpp
name = "My First Mod";
author = "YourName";
version = "1.0";
overview = "My very first DayZ mod. Prints Hello World to the script log.";

Arquivo 2: MyFirstMod/Scripts/config.cpp ​

cpp
class CfgPatches
{
    class MyFirstMod_Scripts
    {
        units[] = {};
        weapons[] = {};
        requiredVersion = 0.1;
        requiredAddons[] =
        {
            "DZ_Data"
        };
    };
};

class CfgMods
{
    class MyFirstMod
    {
        dir = "MyFirstMod";
        name = "My First Mod";
        author = "YourName";
        type = "mod";

        dependencies[] = { "Mission" };

        class defs
        {
            class missionScriptModule
            {
                value = "";
                files[] = { "MyFirstMod/Scripts/5_Mission" };
            };
        };
    };
};

Arquivo 3: MyFirstMod/Scripts/5_Mission/MyFirstMod/MissionHello.c ​

c
modded class MissionServer
{
    override void OnInit()
    {
        super.OnInit();
        Print("[MyFirstMod] Hello World! The SERVER mission has started.");
    }
};

modded class MissionGameplay
{
    override void OnInit()
    {
        super.OnInit();
        Print("[MyFirstMod] Hello World! The CLIENT mission has started.");
    }
};

Próximos Passos ​

  1. Capítulo 8.2: Criando um Item Personalizado -- Definir um novo item no jogo com texturas e spawning.
  2. Adicionar mais camadas de script -- Criar pastas 3_Game e 4_World para organizar configuração, classes de dados e lógica de entidade.
  3. Adicionar keybindings -- Criar um arquivo Inputs.xml e registrar ações de tecla personalizadas.
  4. Criar UI -- Construir painéis no jogo usando arquivos de layout e ScriptedWidgetEventHandler.
  5. Usar um framework -- Integrar com Community Framework (CF) ou MyFramework para features avançadas como RPC, gerenciamento de config e painéis admin.

Próximo: Capítulo 8.2: Criando um Item Personalizado

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