Skip to content

Pruvodce resenim problemu

Domu | Pruvodce resenim problemu


Kdyz se neco pokazi, zacnete zde. Tento pruvodce je organizovan podle toho, co vidite (symptomu), ne podle systemu. Najdete svuj problem, prectete pricinu, aplikujte opravu.


Obsah

  1. Mod se nenacte
  2. Chyby skriptu
  3. Problemy s RPC a siti
  4. Problemy s UI
  5. Problemy se sestavenim a PBO
  6. Problemy s vykonem
  7. Problemy s predmety, vozidly a entitami
  8. Problemy s konfiguraci a typy
  9. Problemy s perzistenci
  10. Rozhodovaci vyvojove diagramy
  11. Rychla reference ladici prikazu
  12. Umisteni log souboru
  13. Kde ziskat pomoc

1. Mod se nenacte

Problemy, kdy se mod nezobrazi, neaktivuje, nebo je hrou odmitnut pri spusteni.

SymptomPricinaOprava
Chyba "Addon requires addon X" pri spusteniChybejici nebo nesprávny zaznam requiredAddons[]Pridejte presny nazev tridy CfgPatches zavislosti do vaseho requiredAddons[]. Nazvy rozlisuji velka a mala pismena. Viz Kapitola 2.2.
Mod neni viditelny v launcheruSoubor mod.cpp chybi nebo ma syntakticke chybyVytvorte nebo opravte mod.cpp v koreni modu. Musi obsahovat pole name, author a dir. Viz Kapitola 2.3.
"Config parse error" pri spusteniSyntakticka chyba v config.cppZkontrolujte chybejici stredniky za zaviraci tridy (};), neuzavrene zavorky nebo neodpovidajici uvozovky. Kazde telo tridy konci };, kazda vlastnost konci ;.
Zadne zaznamy ve skriptovem loguBlok CfgMods defs ukazuje na spatnou cestuOverte, ze vas zaznam CfgMods v config.cpp ma spravny dir a ze definicni soubor skriptu odpovida vasi adresarove strukture. Engine tise ignoruje spatne cesty.
Mod se nacte, ale nic se nedejeSkripty se kompiluji, ale nikdy se nevykonajiZkontrolujte, ze vas mod ma vstupni bod: modded class MissionServer nebo MissionGameplay, registrovany modul nebo plugin. Skripty se samy od sebe nespousteji. Viz Kapitola 7.2.
"Cannot register cfg class X"Duplicitni nazev tridy CfgPatchesJiny mod jiz pouziva tento nazev tridy. Prejmenovejte vasi tridu CfgPatches na neco unikatniho s prefixem vaseho modu.
Mod funguje pouze v singleplayeruServer nema mod nainstalovanyUjistete se, ze spousteci parametr -mod= serveru obsahuje cestu k vasemu modu a PBO je ve slozce @VasMod/Addons/ serveru.
"Addon X is not signed"Server vyzaduje podepsane addonyPodepiste vase PBO vasim soukromym klicem a poskytnete .bikey do slozky keys/ serveru. Viz Kapitola 4.6.

2. Chyby skriptu

Tyto se objevi ve skriptovem logu jako radky SCRIPT (E): nebo SCRIPT ERROR:.

SymptomPricinaOprava
Null pointer accessPristup k promenne, ktera je nullPridejte kontrolu null pred pouzitim promenne: if (myVar) { myVar.DoSomething(); }. Toto je nejcastejsi chyba za behu.
Cannot convert type 'X' to type 'Y'Prime pretypovani mezi nekompatibilnimi typyPouzijte Class.CastTo() pro bezpecne pretypovani smerem dolu: Class.CastTo(result, source);. Nikdy nepredpokladejte, ze pretypovani uspeje. Viz Kapitola 1.9.
Undefined variable 'X'Prekep, spatny scope nebo spatna vrstvaZkontrolujte nejdrive pravopis. Pokud je promenna trida z jineho souboru, ujistete se, ze je definovana ve stejne nebo nizsi vrstve. 3_Game nemuze videt typy z 4_World. Viz Kapitola 2.1.
Method 'X' not foundVolani metody, ktera na dane tride neexistujeOverte nazev metody a zkontrolujte rodicovskou tridu. Mozna budete muset nejdrive pretypovat na specifictejsi typ. Zkontrolujte vanilla skripty v P:\DZ\scripts\ pro spravne API.
Division by zeroDeleni promennou, ktera se rovna 0Pridejte guard: if (divisor != 0) result = value / divisor;. Plati take pro modulo (%) operace.
Redeclaration of variable 'X'Stejny nazev promenne deklarovan v sourozeneckych blocich else ifDeklarujte promennou jednou pred retezem if/else a potom priradte uvnitr kazde vetvi. Viz Kapitola 1.12.
Member already definedDuplicitni nazev promenne nebo metody ve trideZkontrolujte chyby copy/paste. Kazdy nazev clena musi byt unikatni v ramci hierarchie trid (vcetne rodicovskych trid).
Stack overflowNekonecna rekurzeMetoda vola sama sebe bez zakladniho pripadu, nebo override modded class nema spravnou ochranu proti opetovnemu vstupu. Pridejte kontrolu hloubky nebo opravte rekurzivni volani.
Index out of rangePristup k poli s neplatnym indexemVzdy zkontrolujte array.Count() nebo pouzijte array.IsValidIndex(idx) pred pristupem podle indexu.
Syntakticka chyba bez jasne zpravyZpetne lomitko \ nebo escape uvozovky \" v retezcovem literaluCParser Enforce Scriptu nepodporuje \\ nebo \". Pouzijte lomitka pro cesty ("my/path/file"). Pro uvozovky pouzijte jednoduche uvozovky. Viz Kapitola 1.12.
JsonFileLoader vraci null dataPrirazeni navratove hodnoty JsonLoadFile()JsonLoadFile() vraci void. Prealokujte objekt a predejtej jej referenci: ref MyConfig cfg = new MyConfig(); JsonFileLoader<MyConfig>.JsonLoadFile(path, cfg);. Viz Kapitola 6.8.
Object.IsAlive() neexistujeVolani IsAlive() na zakladnim ObjectIsAlive() je pouze na EntityAI. Nejdrive pretypujte: EntityAI entity; if (Class.CastTo(entity, obj) && entity.IsAlive()) { ... }
Zadna podpora ternarniho operatoruPouziti syntaxe condition ? a : bEnforce Script nema ternarni operator. Pouzijte blok if/else. Viz Kapitola 1.12.
Chyba smycky do...whilePouziti do { } while(cond)Enforce Script nepodporuje do...while. Pouzijte smycku while s podminkou break. Viz Kapitola 1.12.

3. Problemy s RPC a siti

Problemy se vzdalenymi volanimi procedur a komunikaci klient-server.

SymptomPricinaOprava
RPC odeslano, ale nikdy neprijatoNesoulad registraceOdesilatel i prijemce musi zaregistrovat stejne RPC ID. Overte, ze ID presne odpovida na obou stranach. Viz Kapitola 6.9.
RPC prijato, ale data jsou poskozenaNesoulad parametru cteni/zapisuVolani Write() odesilatele a Read() prijemce musi mit stejne typy ve stejnem poradi. Jediny nesoulad povredi vsechna nasledna cteni.
RPC zpusobi pad serveruNull cilova entita nebo spatne typy parametruUjistete se, ze cilova entita existuje na obou stranach. Nikdy neposilejte null jako cil RPC. Validujte vsechny prectene parametry pred pouzitim.
Data se nesynchronizuji na klientyChybejici SetSynchDirty()Po zmene jakekoli promenne registrovane pro synchronizaci zavolejte SetSynchDirty() na entite. Bez toho engine neodvysila zmeny.
Funguje v singleplayeru/listen serveru, selhava na dedicatemRuzne cesty kodu pro listen vs. dedicatyNa listen serveru bezi klient i server v jednom procesu, coz skryva casove a null problemy. Vzdy testujte na dedicovanem serveru. Zkontrolujte guardy GetGame().IsServer() a GetGame().IsMultiplayer().
Zahlceni RPC a zpozdeni serveruOdesilani RPC kazdy frame nebo v tesnych smyckachOmezte volani RPC casovaci nebo akumulatory. Seskupte vice malych aktualizaci do jednoho RPC. Pro casto se menici data pouzijte Net Sync Variables.

4. Problemy s UI

Problemy s GUI layouty, widgety, menu a vstupem.

SymptomPricinaOprava
Layout se nacte, ale nic neni viditelneVelikost widgetu je nulaZkontrolujte hodnoty hexactsize a vexactsize. Obe musi byt vetsi nez nula. Nepouzivejte zaporne velikosti. Viz Kapitola 3.3.
CreateWidgets() vraci nullCesta k layout souboru je spatna nebo soubor chybiOverte cestu k .layout souboru (lomitka, zadne preklepy). Engine tise vraci null pri spatnych cestach, zadna chyba se nezaloguje.
Widgety existuji, ale nelze na ne kliknoutJiny widget zakryva tlacitkoZkontrolujte priority widgetu (z-porad). Widgety s vyssi prioritou se vykresluji navrch a zachytavaji vstup jako prvni.
Herní vstup je zaseknuty / nelze se pohybovat po zavreni UIVolani ChangeGameFocus() jsou nevyvazenaKazde GetGame().GetInput().ChangeGameFocus(1) musi byt sparovano s ChangeGameFocus(-1). Sledujte zmeny fokusu a zajistete, ze cleanup probehne i pri vynucenem zavreni.
Text zobrazuje #STR_some_key doslovaZaznam stringtable chybi nebo soubor neni nactenPridejte klic do vaseho stringtable.csv. Zkontrolujte, ze CSV je v koreni modu a ma spravny format hlavicky.
Kurzor mysi se neobjeviNezavolano ShowUICursor()Zavolejte GetGame().GetUIManager().ShowUICursor(true) pri otevreni vaseho UI. Zavolejte s false pri zavirani.
ScrollWidget obsah se nerolujeObsah neni uvnitr WrapSpacer nebo potomkovskeho widgetuScrollWidget potrebuje jednoho potomka (obvykle WrapSpacer nebo FrameWidget), ktery je vetsi nez oblast rolovani. Umistete sve widgety obsahu dovnitr tohoto potomka.

5. Problemy se sestavenim a PBO

Problemy s balenimm, binarizaci a nasazenim modu.

SymptomPricinaOprava
"Include file not found" behem binarizaceConfig odkazuje na soubor, ktery neexistujeZkontrolujte, ze vsechny cesty #include v konfiguraci modelu a rvmatech jsou spravne. Ujistete se, ze P: disk je pripojen.
PBO se uspesne sestavi, ale mod pada pri nacteniChyba binarizace config.cppZkuste sestavit s vypnutou binarizaci pro izolovani problemu.
"Signature check failed" pri pripojeni k serveruPBO neni podepsane nebo je podepsane spatnym klicemZnovu podepiste PBO vasim soukromym klicem. Ujistete se, ze server ma odpovidajici .bikey ve slozce keys/.
Zmeny file patchingu se neprojeviNepouziva se diagnosticky spustitelny souborFile patching funguje pouze s DayZDiag_x64.exe, ne s retail DayZ_x64.exe. Spustte s parametrem -filePatching.
Stara verze modu se nacita i presto zmenyCachovane PBO nebo verze z workshopu prepisujeSmazte stare PBO. Zkontrolujte, ze hra nenacita cachovanou verzi z workshopu. Overte, ze cesta -mod= ukazuje na vasi vyvojovou slozku.

6. Problemy s vykonem

Poklesy FPS serveru nebo klienta, problemy s pameti a pomale operace.

SymptomPricinaOprava
Nizke FPS serveru (pod 20)Tezke zpracovani v OnUpdate() nebo per-frame metodachPouzijte akumulator delta-casu pro omezeni prace: vykonavejte logiku pouze kazdych N sekund. Presunte nakladne operace do casovaci nebo planovanych callbacku. Viz Kapitola 7.7.
Pamet roste v case (unik pameti)Cykly ref referenci branici garbage collectionKdyz dva objekty drzi ref reference na sebe navzajem, ani jeden neni nikdy uvolnen. Udelejte jednu stranu raw (ne-ref) referenci. Prerusujte cykly v metodach cisteni. Viz Kapitola 1.8.
Pomaly start serveruTezka inicializace v OnInitOdlozte nekritickou inicializaci pomoci GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(). Nacitejte konfigurace line pri prvnim pouziti misto vsech pri startu.
Sitove prodlevyPrilis mnoho RPC nebo velke RPC datove zatezeSeskupte male aktualizace do mensich RPC. Pouzijte Net Sync Variables pro casto se menici hodnoty.
Log soubor velmi rychle rosteNadmerne Print() nebo debugovaci logovaniOdstrante nebo omezte debugovaci Print() volani za #ifdef DEVELOPER nebo debugovaci priznak.

7. Problemy s predmety, vozidly a entitami

Problemy s vlastnimi predmety, vozidly a svetovymi entitami.

SymptomPricinaOprava
Predmet se nespawni (admin nastroje hlasi "cannot create")scope=0 v konfiguraci nebo chybi v types.xmlNastavte scope=2 v konfiguraci CfgVehicles vaseho predmetu pro predmety, ktere by mely byt spawnovatelne. Pridejte zaznam do serveroveho types.xml.
Predmet se spawni, ale je neviditelnyCesta k modelu (.p3d) je spatna nebo chybiZkontrolujte cestu model ve vasi tride CfgVehicles. Pouzijte lomitka. Overte, ze .p3d soubor existuje a je zabalen ve vasem PBO.
Predmet nelze zvednoutNespravna geometrie nebo spatny inventorySlotOverte, ze predmet ma spravnou Fire Geometry v modelu. Zkontrolujte, ze itemSize[] je spravne nastavena.
Entita je ihned smazana po spawnulifetime je nula v types.xml nebo problem se scopeNastavte vhodnou hodnotu lifetime v types.xml. Zajistete scope=2 v konfiguraci.
Prilohy se nepripevni k predmetuSpatne nazvy inventorySlotNazvy slotu priloh musi presne odpovidat mezi polem attachments[] rodicovskeho predmetu a polem inventorySlot[] potomkovskeho predmetu. Nazvy rozlisuji velka a mala pismena.

8. Problemy s konfiguraci a typy

Problemy s config.cpp, types.xml a dalsimi konfiguracnimi soubory.

SymptomPricinaOprava
Konfiguracni hodnoty se neprojeviPouziti binarizovane konfigurace, ale editace zdrojePo zmenach konfigurace znovu sestavte vase PBO.
Zmeny types.xml jsou ignorovanyEditace spatneho souboru types.xmlServer nacita typy z mpmissions/your_mission/db/types.xml. Editace souboru types jinde nema zadny ucinek.
"Error loading types" pri startu serveruSyntakticka chyba XML v types.xmlZvalidujte vase XML. Caste problemy: neuzavrene tagy, chybejici uvozovky u hodnot atributu, nebo & misto &amp;.
JSON konfiguracni soubor se nenacitaPoskozeny JSON nebo spatna cestaZvalidujte syntaxi JSON (zadne carkky za poslednim prvkem, spravne uvozovky). Pouzijte prefix $profile: pro cesty profilu serveru.

9. Problemy s perzistenci

Problemy s ukladanim a nacitanim dat pres restarty serveru.

SymptomPricinaOprava
Data hrace ztracena pri restartuNeuklada se do adresare $profile:Pouzijte JsonFileLoader<T>.JsonSaveFile() s cestou $profile:. Ukladejte pri odpojeni hrace a periodicky behem hry.
Ulozeny soubor je prazdny nebo poskozenyPad behem zapisu nebo chyba serializaceZapisujte nejdrive do docasneho souboru a pak prejmenujte na finalni cestu. Validujte data pred ulozenim.
Nesoulad OnStoreSave/OnStoreLoadVerze se zmenila, ale zadna migraceVzdy nejdrive zapiste cislo verze. Pri nacteni prectete verzi a zpracujte stare formaty.
Predmety mizi z ulozistelifetime vyprsel v types.xmlZvyste lifetime pro persistentni predmety.

10. Rozhodovaci vyvojove diagramy

Krokove diagnosticke procesy pro caste situace "to nefunguje".

"Muj mod vubec nefunguje"

  1. Zkontrolujte skriptovy log pro chyby SCRIPT (E). Opravte prvni chybu, kterou najdete. (Sekce 2)
  2. Je mod uveden v launcheru? Pokud ne, zkontrolujte, ze mod.cpp existuje a je validni. (Sekce 1)
  3. Zminuje log vasi tridu CfgPatches? Pokud ne, zkontrolujte syntaxi config.cpp, requiredAddons[] a spousteci parametr -mod=.
  4. Kompiluji se skripty? Hledejte chyby kompilace v RPT. Opravte vsechny syntakticke chyby. (Sekce 2)
  5. Existuje vstupni bod? Potrebujete modded class MissionServer/MissionGameplay, registrovany modul nebo plugin.
  6. Stale nic? Pridejte Print("MY_MOD: Init reached"); na vas vstupni bod pro potvrzeni vykonavani.

"Funguje offline, ale ne na dedicovanem serveru"

  1. Je mod nainstalovany na serveru? Zkontrolujte, ze -mod= obsahuje cestu k vasemu modu a PBO je v @VasMod/Addons/.
  2. Kod pouze pro klienta na serveru? GetGame().GetPlayer() vraci null behem inicializace serveru. Pridejte guardy GetGame().IsServer() / GetGame().IsClient().
  3. Funguji RPC? Pridejte Print() na obe strany odeslani a prijmu. Zkontrolujte, ze RPC ID odpovida a cilova entita existuje na obou stranach. (Sekce 3)
  4. Synchronizuji se data? Overte, ze SetSynchDirty() je zavolano po zmenach.
  5. Casove problemy? Listen servery skryvaji race conditions, protoze klient a server sdili jeden proces. Dedicovane servery je odhali.

"Moje UI je rozbite"

  1. Vraci CreateWidgets() null? Cesta k layoutu je spatna nebo soubor chybi.
  2. Widgety existuji, ale jsou neviditelne? Zkontrolujte velikosti (musi byt > 0, zadne zaporne hodnoty). Zkontrolujte, ze je zavolano Show(true).
  3. Viditelne, ale neklikatelne? Zkontrolujte priority widgetu (z-porad). Overte, ze ScriptClass je prirazen.
  4. Vstup zaseknuty po zavreni UI? Volani ChangeGameFocus() jsou nevyvazena.

11. Rychla reference ladici prikazu

Pouzijte tyto v debug konzoli DayZDiag nebo admin nastrojich.

AkcePrikaz
Spawn predmetu na zemiGetGame().CreateObject("AKM", GetGame().GetPlayer().GetPosition());
Spawn vozidla (sestavene)EntityAI car = EntityAI.Cast(GetGame().CreateObject("OffroadHatchback", GetGame().GetPlayer().GetPosition())); if (car) car.OnDebugSpawn();
Spawn zombieGetGame().CreateObject("ZmbM_Normal_00", GetGame().GetPlayer().GetPosition());
Teleport na souradniceGetGame().GetPlayer().SetPosition("6543 0 2114".ToVector());
Plne vyleceniGetGame().GetPlayer().SetHealth("", "", 5000);
Nastavit poledneGetGame().GetWorld().SetDate(2024, 9, 15, 12, 0);
Nastavit nocGetGame().GetWorld().SetDate(2024, 9, 15, 2, 0);
Jasne pocasiGetGame().GetWeather().GetOvercast().Set(0,0,0); GetGame().GetWeather().GetRain().Set(0,0,0);
Tisknout poziciPrint(GetGame().GetPlayer().GetPosition());
Kontrola server/klientPrint("IsServer: " + GetGame().IsServer().ToString());

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

Spousteci parametry

ParametrUcel
-filePatchingNacteni rozbalenych souboru (vyzaduje DayZDiag)
-scriptDebug=truePovoleni funkci ladeni skriptu
-doLogsPovoleni podrobneho logovani
-adminLogPovoleni admin logu na serveru
-noSoundVypnuti zvuku (rychlejsi testovani)
-noPauseServer se nezastavi, kdyz je prazdny
-profiles=<cesta>Vlastni profilovy/logovy adresar
-connect=<ip>Auto-pripojeni k serveru pri spusteni
-port=<port>Port serveru (vychozi 2302)
-mod=@Mod1;@Mod2Nacteni modu (oddeleno strednikem)
-serverMod=@ModPouze serverove mody (neodesila se klientum)

12. Umisteni log souboru

Vedet, kam se divat, je pulka bitvy.

Klientske logy

LogUmisteniObsah
Skriptovy log%localappdata%\DayZ\ (nejnovejsi soubor .RPT)Chyby skriptu, varovani, vystup Print()
Dump padu%localappdata%\DayZ\ (soubory .mdmp)Data pro analyzu padu
Log WorkbenchVystupni panel Workbench IDEChyby kompilace behem vyvoje

Serverove logy

LogUmisteniObsah
Skriptovy log<server_root>\profiles\ (nejnovejsi soubor .RPT)Chyby skriptu, serverovy Print()
Admin log<server_root>\profiles\ (soubor .ADM)Pripojeni hracu, zabiti, chat
Dump padu<server_root>\profiles\ (soubory .mdmp)Data padu serveru

Efektivni cteni logu

  • Hledejte SCRIPT (E) pro nalezeni chyb skriptu
  • Hledejte SCRIPT ERROR pro nalezeni fatalnich problemu skriptu
  • Hledejte nazev vaseho modu nebo nazvy trid pro filtrovani relevntnich zaznamu
  • Chyby se casto kaskadovi -- opravte prvni chybu v logu, ne posledni

13. Kde ziskat pomoc

Kdyz tento pruvodce vase problem nevyresi, toto jsou nejlepsi zdroje.

Zdroje komunity

ZdrojURLNejlepsi pro
DayZ Modding Discorddiscord.gg/dayzmodsPomoc v realnem case od zkusenych modderu
Bohemia Interactive Foraforums.bohemia.net/forums/forum/231-dayz-modding/Oficialni fora, oznameni
DayZ Feedback Trackerfeedback.bistudio.com/tag/dayz/Oficialni hlaseni chyb
DayZ WorkshopSteam Workshop (DayZ)Prochazeni publikovanych modu jako reference

Reference zdrojoveho kodu

Studujte tyto mody pro nauceni vzoru od zkusenych modderu:

ModCo se naucite
Community Framework (CF)Zivotni cyklus modulu, sprava RPC, logovani
DayZ ExpansionVelkoformatova architektura modu, trzni system, vozidla
Community Online Tools (COT)Admin nastroje, opravneni, vzory UI
VPP Admin ToolsAdministrace serveru, opravneni, ESP
Dabs FrameworkVzor MVC, datove vazby, ramec UI komponent

Vanilla reference skriptu

Autoritativni reference pro vsechny tridy a metody enginu:

  • Pripojte P: disk pres DayZ Tools
  • Prejdete na P:\DZ\scripts\
  • Organizovano podle vrstev: 3_Game/, 4_World/, 5_Mission/
  • Pouzijte vyhledavani editoru pro nalezeni libovolne vanilla tridy, metody nebo enumu

Rychly rejstrik symptomu

Nemusite najit svuj problem ve vyse uvedenych sekcich? Zkuste tento abecedni rejstrik.

Symptom (co vidite)Prejdete na
Addon Builder selhavaSekce 5
Index pole mimo rozsahSekce 2
Tlacitka neklikatelnaSekce 4
Nelze prevest typSekce 2
Config parse errorSekce 1
Kurzor chybiSekce 4
Deleni nulouSekce 2
Data ztracena pri restartuSekce 9
File patching nefungujeSekce 5
Poklesy FPSSekce 6
Herni vstup zaseknutySekce 4
Predmet neviditelnySekce 7
Predmet se nespawniSekce 7
Layout vraci nullSekce 4
Unik pametiSekce 6
Mod neni v launcheruSekce 1
Null pointer pristupSekce 2
RPC neprijatoSekce 3
Pad serveru pri startuSekce 2
Nedefinovana promennaSekce 2
Funguje offline, selhava onlineSekce 3

Problem stale nevyresen? Podivejte se na FAQ pro dalsi odpovedi, Cheat Sheet pro referenci syntaxe, nebo se zeptejte na DayZ Modding Discordu.

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