Skip to content

Guida alla risoluzione dei problemi

Home | Guida alla risoluzione dei problemi


Quando qualcosa va storto, inizia qui. Questa guida e organizzata per cio che vedi (il sintomo), non per sistema. Trova il tuo problema, leggi la causa, applica la correzione.


Indice

  1. Il mod non si carica
  2. Errori di script
  3. Problemi RPC e di rete
  4. Problemi UI
  5. Problemi di build e PBO
  6. Problemi di prestazioni
  7. Problemi con oggetti, veicoli ed entita
  8. Problemi di configurazione e tipi
  9. Problemi di persistenza
  10. Diagrammi di flusso decisionali
  11. Riferimento rapido comandi di debug
  12. Posizioni dei file di log
  13. Dove ottenere aiuto

1. Il mod non si carica

SintomoCausaSoluzione
Errore "Addon requires addon X" all'avvioVoce requiredAddons[] mancante o errataAggiungi il nome esatto della classe CfgPatches della dipendenza al tuo requiredAddons[]. I nomi sono sensibili alle maiuscole. Vedi Capitolo 2.2.
Mod non visibile nel launcherFile mod.cpp mancante o con errori di sintassiCrea o correggi mod.cpp nella root del mod. Deve contenere i campi name, author e dir.
"Config parse error" all'avvioErrore di sintassi nel config.cppControlla punti e virgola mancanti dopo le chiusure delle classi (};), parentesi non chiuse o virgolette sbilanciate.
Nessuna voce nel log degli scriptIl blocco CfgMods defs punta al percorso sbagliatoVerifica che la voce CfgMods nel config.cpp abbia il dir corretto. Il motore ignora silenziosamente i percorsi errati.
Il mod si carica ma non succede nullaGli script compilano ma non vengono mai eseguitiControlla che il tuo mod abbia un punto di ingresso: modded class MissionServer o MissionGameplay. Vedi Capitolo 7.2.
Il mod funziona solo in giocatore singoloIl server non ha il mod installatoAssicurati che il parametro -mod= del server includa il percorso del tuo mod.

2. Errori di script

SintomoCausaSoluzione
Null pointer accessAccesso a una variabile che e nullAggiungi un controllo null prima dell'uso: if (myVar) { myVar.DoSomething(); }. E l'errore runtime piu comune.
Cannot convert type 'X' to type 'Y'Cast diretto tra tipi incompatibiliUsa Class.CastTo() per un cast sicuro: Class.CastTo(result, source);. Vedi Capitolo 1.9.
Undefined variable 'X'Errore di battitura, scope sbagliato o livello sbagliatoControlla prima l'ortografia. Se la variabile e una classe di un altro file, assicurati che sia definita nello stesso livello o inferiore. Vedi Capitolo 2.1.
Method 'X' not foundChiamata a un metodo che non esiste sulla classeVerifica il nome del metodo e controlla la classe genitore. Controlla gli script vanilla in P:\DZ\scripts\.
Division by zeroDivisione per una variabile uguale a 0Aggiungi una guardia: if (divisor != 0) result = value / divisor;.
Redeclaration of variable 'X'Stesso nome variabile dichiarato in blocchi else if fratelliDichiara la variabile una volta prima della catena if/else. Vedi Capitolo 1.12.
Stack overflowRicorsione infinitaUn metodo chiama se stesso senza caso base. Aggiungi un controllo di profondita.
Index out of rangeAccesso all'array con indice non validoControlla sempre array.Count() prima dell'accesso per indice.
Errore di sintassi senza messaggio chiaroBarra rovesciata \ o virgolette escapate nel letterale stringaIl CParser di Enforce Script non supporta \\ o \". Usa barre per i percorsi. Vedi Capitolo 1.12.
JsonFileLoader restituisce dati nullAssegnazione del valore di ritorno di JsonLoadFile()JsonLoadFile() restituisce void. Pre-alloca l'oggetto e passalo per riferimento. Vedi Capitolo 6.8.

3. Problemi RPC e di rete

SintomoCausaSoluzione
RPC inviato ma mai ricevutoMancata corrispondenza della registrazioneMittente e ricevente devono registrare lo stesso ID RPC. Vedi Capitolo 6.9.
RPC ricevuto ma dati corrottiMancata corrispondenza parametri lettura/scritturaLe chiamate Write() del mittente e Read() del ricevente devono avere gli stessi tipi nello stesso ordine.
Dati non sincronizzati ai clientSetSynchDirty() mancanteDopo aver modificato una variabile registrata per la sincronizzazione, chiama SetSynchDirty() sull'entita.
Funziona in giocatore singolo, fallisce su dedicatoPercorsi di codice diversi per listen vs. dedicatoSu un listen server, client e server funzionano nello stesso processo. Testa sempre su server dedicato.
Flood di RPC e lag del serverInvio di RPC ogni frameLimita le chiamate RPC con timer. Raggruppa piccoli aggiornamenti in un singolo RPC.

4. Problemi UI

SintomoCausaSoluzione
Il layout si carica ma nulla e visibileLa dimensione del widget e zeroControlla i valori hexactsize e vexactsize. Nessuna dimensione negativa. Vedi Capitolo 3.3.
CreateWidgets() restituisce nullIl percorso del file layout e sbagliato o il file mancaVerifica il percorso del file .layout (barre, nessun errore di battitura). Il motore restituisce silenziosamente null.
I widget esistono ma non sono cliccabiliUn altro widget copre il pulsanteControlla la priority del widget (ordine z). Priorita piu alta = renderizzato sopra e cattura l'input per primo.
L'input di gioco e bloccato dopo la chiusura dell'UILe chiamate ChangeGameFocus() sono sbilanciateOgni ChangeGameFocus(1) deve avere un corrispondente ChangeGameFocus(-1).
Il testo mostra #STR_some_key letteralmenteVoce stringtable mancanteAggiungi la chiave al tuo stringtable.csv.
Il cursore del mouse non appareShowUICursor() non chiamatoChiama GetGame().GetUIManager().ShowUICursor(true) aprendo la tua UI.

5. Problemi di build e PBO

SintomoCausaSoluzione
PBO si compila con successo ma il mod crasha al caricamentoErrore di binarizzazione config.cppProva a compilare con la binarizzazione disabilitata.
"Signature check failed" alla connessione al serverPBO non firmato o firmato con chiave sbagliataRifirma il PBO con la tua chiave privata. Assicurati che il server abbia il .bikey corrispondente.
Le modifiche del file patching non hanno effettoNon si sta usando l'eseguibile diagnosticoIl file patching funziona solo con DayZDiag_x64.exe, non con il retail DayZ_x64.exe.
La vecchia versione del mod si carica nonostante le modifichePBO in cache o versione workshop che sovrascriveElimina il vecchio PBO. Controlla il percorso -mod=.

6. Problemi di prestazioni

SintomoCausaSoluzione
FPS del server bassi (sotto 20)Elaborazione pesante in OnUpdate()Usa un accumulatore delta-tempo. Esegui la logica ogni N secondi. Vedi Capitolo 7.7.
La memoria cresce nel tempo (memory leak)Cicli di riferimento refQuando due oggetti mantengono ref l'uno sull'altro, nessuno viene mai liberato. Rendi un lato un riferimento raw (non-ref). Vedi Capitolo 1.8.
Il file di log cresce molto rapidamentePrint() eccessiviRimuovi o proteggi le chiamate Print() di debug dietro #ifdef DEVELOPER.

7. Problemi con oggetti, veicoli ed entita

SintomoCausaSoluzione
L'oggetto non si genera ("cannot create")scope=0 nella configurazione o mancante da types.xmlImposta scope=2. Aggiungi una voce al types.xml del server.
L'oggetto si genera ma e invisibileIl percorso del modello (.p3d) e sbagliatoControlla il percorso model nella tua classe CfgVehicles. Usa le barre.
L'oggetto non puo essere raccoltoGeometria errata o inventorySlot sbagliatoVerifica la Fire Geometry nel modello. Controlla itemSize[].
L'entita viene eliminata immediatamente dopo la generazionelifetime e zero in types.xmlImposta un valore lifetime appropriato.

8. Problemi di configurazione e tipi

SintomoCausaSoluzione
I valori di configurazione non hanno effettoModifica del sorgente con configurazione binarizzataRicompila il PBO dopo le modifiche alla configurazione.
Le modifiche a types.xml vengono ignorateModifica del file types.xml sbagliatoIl server carica i tipi da mpmissions/la_tua_missione/db/types.xml.
"Error loading types" all'avvio del serverErrore di sintassi XML in types.xmlValida il tuo XML. Problemi comuni: tag non chiusi, virgolette mancanti.
Il file di configurazione JSON non si caricaJSON malformato o percorso sbagliatoValida la sintassi JSON. Usa il prefisso $profile:.

9. Problemi di persistenza

SintomoCausaSoluzione
Dati giocatore persi al riavvioNon salva nella directory $profile:Usa JsonFileLoader<T>.JsonSaveFile() con un percorso $profile:.
Il file salvato e vuoto o corrottoCrash durante la scritturaScrivi prima in un file temporaneo, poi rinomina al percorso finale.
Mancata corrispondenza OnStoreSave/OnStoreLoadLa versione e cambiata ma nessuna migrazioneScrivi sempre prima il numero di versione.

10. Diagrammi di flusso decisionali

"Il mio mod non funziona affatto"

  1. Controlla il log degli script per errori SCRIPT (E). Correggi il primo errore trovato. (Sezione 2)
  2. Il mod appare nel launcher? Se no, controlla mod.cpp. (Sezione 1)
  3. Il log menziona la tua classe CfgPatches? Se no, controlla la sintassi di config.cpp e il parametro -mod=.
  4. Gli script compilano? Cerca errori di compilazione nell'RPT. (Sezione 2)
  5. C'e un punto di ingresso? Hai bisogno di modded class MissionServer/MissionGameplay.
  6. Ancora nulla? Aggiungi Print("MY_MOD: Init reached"); al tuo punto di ingresso.

"Funziona offline ma non su server dedicato"

  1. Il mod e installato sul server? Controlla -mod= e la posizione del PBO.
  2. Codice solo-client sul server? GetGame().GetPlayer() restituisce null durante l'init del server. Aggiungi guardie.
  3. Gli RPC funzionano? Aggiungi Print() su entrambi i lati. Controlla la corrispondenza degli ID. (Sezione 3)
  4. Sincronizzazione dati? Verifica SetSynchDirty().

"La mia UI e rotta"

  1. CreateWidgets() restituisce null? Il percorso del layout e sbagliato.
  2. I widget esistono ma sono invisibili? Controlla le dimensioni (> 0, nessun negativo). Controlla Show(true).
  3. Visibili ma non cliccabili? Controlla la priority del widget.
  4. Input bloccato dopo la chiusura dell'UI? Le chiamate ChangeGameFocus() sono sbilanciate.

11. Riferimento rapido comandi di debug

AzioneComando
Genera oggetto a terraGetGame().CreateObject("AKM", GetGame().GetPlayer().GetPosition());
Teletrasporto alle coordinateGetGame().GetPlayer().SetPosition("6543 0 2114".ToVector());
Cura completaGetGame().GetPlayer().SetHealth("", "", 5000);
Imposta mezzogiornoGetGame().GetWorld().SetDate(2024, 9, 15, 12, 0);
Imposta notteGetGame().GetWorld().SetDate(2024, 9, 15, 2, 0);
Tempo serenoGetGame().GetWeather().GetOvercast().Set(0,0,0); GetGame().GetWeather().GetRain().Set(0,0,0);
Stampa posizionePrint(GetGame().GetPlayer().GetPosition());
Verifica server/clientPrint("IsServer: " + GetGame().IsServer().ToString());

Posizioni comuni in Chernarus: Elektro "10570 0 2354", Cherno "6649 0 2594", NWAF "4494 0 10365", Tisy "1693 0 13575", Berezino "12121 0 9216"

Parametri di avvio

ParametroScopo
-filePatchingCarica file non impacchettati (richiede DayZDiag)
-scriptDebug=trueAbilita funzionalita di debug script
-doLogsAbilita logging dettagliato
-profiles=<percorso>Directory profilo/log personalizzata
-connect=<ip>Connessione automatica al server all'avvio
-port=<porta>Porta del server (predefinita 2302)
-mod=@Mod1;@Mod2Carica mod (separati da punto e virgola)
-serverMod=@ModMod solo server (non inviati ai client)

12. Posizioni dei file di log

Log del client

LogPosizioneContenuto
Log degli script%localappdata%\DayZ\ (file .RPT piu recente)Errori script, avvisi, output Print()
Dump dei crash%localappdata%\DayZ\ (file .mdmp)Dati per l'analisi dei crash

Log del server

LogPosizioneContenuto
Log degli script<root_server>\profiles\ (file .RPT piu recente)Errori script, Print() lato server
Log amministratore<root_server>\profiles\ (file .ADM)Connessioni giocatori, uccisioni, chat

Lettura efficace dei log

  • Cerca SCRIPT (E) per trovare errori di script
  • Cerca il nome del tuo mod o nomi di classi per filtrare le voci rilevanti
  • Gli errori spesso si cascadano -- correggi il primo errore nel log, non l'ultimo

13. Dove ottenere aiuto

Risorse della comunita

RisorsaURLMigliore per
DayZ Modding Discorddiscord.gg/dayzmodsAiuto in tempo reale
Forum Bohemia Interactiveforums.bohemia.net/forums/forum/231-dayz-modding/Forum ufficiali
DayZ WorkshopSteam Workshop (DayZ)Esplorare mod pubblicati

Codice sorgente di riferimento

ModCosa impari
Community Framework (CF)Ciclo di vita dei moduli, gestione RPC, logging
DayZ ExpansionArchitettura mod su larga scala, sistema di mercato
Community Online Tools (COT)Strumenti admin, permessi, pattern UI
Dabs FrameworkPattern MVC, data binding, framework componenti UI

Riferimento script vanilla

  • Monta il drive P: tramite DayZ Tools
  • Naviga a P:\DZ\scripts\
  • Organizzato per livelli: 3_Game/, 4_World/, 5_Mission/

Problema ancora irrisolto? Controlla le FAQ, il Cheat Sheet, o chiedi sul DayZ Modding Discord.

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