Conta de Discord da Tecplay sob controle de terceiro. Atendimento só por WhatsApp (54) 98138-5754 (áudio) ou chamado no site.

Ler o comunicado

DayZ Build Guard, gratuito e de código aberto

O erro de compilação aponta a linha errada. A causa está em outro lugar.

Quando o Enforce Script não compila, a mensagem quase sempre cita uma linha acima da causa real. E o módulo que falha derruba todos os mods do servidor junto, então o que chega até você é "nenhum mod carregou", que não aponta pra ninguém.

O DayZ Build Guard é uma skill para agentes de IA como o Claude Code, com verificadores em Python que pegam esses erros antes de você compilar.

Can't compile "Game" script module!
myconfig.c(22): Syntax error
22class MyConfigo compilador acusa aqui
23{
24 int enabled;
25 int maxPlayers;
26 string prefix;
27 float radius;
28 bool announce;
29 int cooldown;
30 int debug;a causa está aqui
31}

Quatro armadilhas que custam um dia

São dez documentadas no repositório, cada uma com a mensagem exata que o jogo imprime, por que ela engana e a correção. Estas são as que mais aparecem.

Uma expressão continuada na linha de baixo

string msg = "first part "
             "second part";
Expected ',' or ')', not a '<a primeira string>'
Can't compile "Game" script module!

Por que engana: O erro sai na linha de cima e cita o primeiro pedaço, então parece um parêntese faltando. No C as duas strings se juntariam; no Enforce, não. E não é só com texto: uma conta que começa a linha seguinte com + ou * derruba do mesmo jeito.

Correção: Uma instrução por linha, montando numa variável local. Quebrar a chamada da função em várias linhas pode; o que quebra é partir a expressão.

debug é palavra reservada

class MyConfig
{
    int enabled;
    int debug;
}
Syntax error

Por que engana: O erro aparece na linha da class, não no membro. Qualquer identificador chamado debug (campo, variável local ou parâmetro) é recusado.

Correção: Renomeie para debugLog, verbose ou parecido.

Pasta de script dentro do PBO que o config.cpp nunca compila

class defs
{
    // sem gameScriptModule: Scripts/3_Game não é compilada por ninguém
    class worldScriptModule
    {
        value = "";
        files[] = { "MyMod/Scripts/4_World" };
    };
};
Can't find variable 'MY_CONSTANT'

Por que engana: O erro aparece em outro arquivo, o que usa o símbolo. A reação natural é caçar um erro de digitação, mas a causa está no config.cpp, que nem parece relacionado. Estar empacotado no PBO não basta: quem decide é o files[].

Correção: Confira o files[] do config.cpp: toda pasta de script com arquivos .c precisa estar listada num módulo.

Global repetida entre dois mods

mymanager.c(28): Multiple declaration of variable 'ROOT_DIR'
Multiple declaration of variable

Por que engana: Cada mod compila sozinho sem problema. A falha só aparece quando os dois estão no mesmo servidor, que é a máquina do cliente, nunca a sua bancada. modded class repetido entre mods não conta: isso é o mecanismo funcionando.

Correção: Prefixe toda global com a sigla do próprio mod. Um nome genérico também colide com mods de terceiros que você nunca viu.

Está com uma destas mensagens na tela?

O que cada uma costuma significar de verdade, medido no DayZ 1.29.163709.

Can't compile "Game" script module!
Um erro em um mod derrubou o módulo inteiro, e todos os mods do servidor caem juntos. A causa costuma estar acima da linha citada.
Expected ',' or ')', not a
Quase sempre é uma expressão quebrada em duas linhas, não um parêntese faltando.
Can't find variable
Pode ser uma pasta de script que nenhum módulo do config.cpp compila. O erro aparece no arquivo que usa o símbolo.
Multiple declaration of variable
A mesma global declarada por dois mods. Só quebra quando os dois estão instalados juntos.
Possible variable name conflict
É só um aviso: compila, o servidor sobe, e o campo fica vazio porque um parâmetro do construtor tem o mesmo nome dele. Trate como erro.
Bad type 'JsonFileLoader'
Quase nunca é sobre o JsonFileLoader. Um tipo genérico não resolveu por causa de um erro anterior. Corrija o primeiro erro do log e compile de novo.
No return statement in function returning non-void
Os dois return estão lá: a função foi escrita numa linha só. Abrir o corpo em várias linhas resolve.

E as falhas que não dão erro nenhum

Um PanelWidget com cor que não desenha nada e não registra nada. Texto cortado porque a proporção entre a caixa e a fonte estava errada. Um item sem entrada no types que a Central Economy apaga horas depois. Essas custam mais tempo que os erros de compilação justamente porque não existe mensagem para pesquisar, e a skill também cobre esses casos.

Os verificadores rodam sem a skill

São Python 3 puro, sem dependência, e funcionam em qualquer projeto de DayZ: os mods são encontrados procurando o config.cpp, sem convenção de nome. Pegam seis das dez armadilhas em menos de meio segundo, numa árvore de trinta mods.

  • check_split_expression.py
    expressão continuada na linha de baixo, a que mais derruba módulo
  • check_self_assignment.py
    campo = campo;, que deixa o campo vazio e só gera aviso
  • check_global_collision.py
    a mesma global declarada por dois mods (modded class é ignorado, como deve ser)
  • check_undeclared_folder.py
    pasta de script com arquivos .c que nenhum módulo do config.cpp lista
Rodar em todos os seus mods
python skills/dayz-build-guard/scripts/check_all.py ./mods --exclude backups
Conferir se funciona na sua máquina (deve relatar 4 problemas)
python skills/dayz-build-guard/scripts/check_all.py \
       skills/dayz-build-guard/tests/fixture_broken

Ele termina com código diferente de zero quando acha algo, então encaixa num script de build, num git hook ou na ação de salvar do editor. Rode a cada edição, em vez de lembrar de rodar. É isso que faz funcionar.

Como instalar no Claude Code

Copie a pasta da skill para a pasta de skills do seu agente.

Só para você
git clone https://github.com/TecPlayBR/TecplayDayZSkills.git
cp -r TecplayDayZSkills/skills/dayz-build-guard ~/.claude/skills/
Para a equipe, versionada junto com o código
cp -r TecplayDayZSkills/skills/dayz-build-guard <seu-projeto>/.claude/skills/

A segunda forma vale mais do que parece: uma skill que só existe na sua pasta pessoal não pode ser revisada, versionada nem melhorada por mais ninguém do projeto. Ela ativa sozinha quando você mexe com DayZ: arquivos .c, config.cpp, mod.cpp, types.xml, .layout, ou código que toca PlayerBase, ItemBase, modded class e CfgPatches.

Cada afirmação diz em qual build foi medida

Tudo foi medido num servidor dedicado de verdade, hoje no DayZ 1.29.163709. O DayZ atualiza e o comportamento do motor muda junto; uma nota técnica que nunca envelhece começa a mentir. Por isso o repositório diz com todas as letras: se o seu build discorda de algo aqui, o seu build está certo. Abra uma issue.

O que ela não é

Não é uma referência completa da API do DayZ, nem cobre modelagem 3D ou hospedagem de servidor. Para a assinatura de um método, leia os scripts vanilla: é a única fonte que nunca fica desatualizada. O foco é o que custa horas: erros que enganam, falhas silenciosas e as verificações que pegam isso cedo.

Ela cresce com o que você encontra

Achados são bem-vindos, principalmente os que custaram um dia inteiro para você. Uma boa contribuição traz o texto exato do erro (copiado, não resumido), o build do DayZ em que você viu, por que a mensagem engana e, se der, uma reprodução mínima. O repositório é em inglês, para alcançar modders do mundo inteiro.

Fora do escopo: referências completas de API e qualquer coisa sobre contornar a proteção de mods de outras pessoas. Licença MIT.

TecPlayBR/TecplayDayZSkills