Skip to content

Przewodnik rozwiazywania problemow

Strona glowna | Przewodnik rozwiazywania problemow


Gdy cos pojdzie nie tak, zacznij tutaj. Ten przewodnik jest zorganizowany wedlug tego co widzisz (objawu), nie wedlug systemu. Znajdz swoj problem, przeczytaj przyczyne, zastosuj rozwiazanie.


Spis tresci

  1. Mod sie nie laduje
  2. Bledy skryptow
  3. Problemy z RPC i siecia
  4. Problemy z UI
  5. Problemy z budowaniem i PBO
  6. Problemy z wydajnoscia
  7. Problemy z przedmiotami, pojazdami i encjami
  8. Problemy z konfiguracja i typami
  9. Problemy z persistencja
  10. Schematy decyzyjne
  11. Szybka referencja komend debugowania
  12. Lokalizacje plikow logow
  13. Gdzie uzyskac pomoc

1. Mod sie nie laduje

Problemy, gdy mod sie nie pojawia, nie aktywuje lub jest odrzucany przez gre przy starcie.

ObjawPrzyczynaRozwiazanie
Blad "Addon requires addon X" przy starcieBrakujacy lub niepoprawny wpis requiredAddons[]Dodaj dokladna nazwe klasy CfgPatches zaleznosci do requiredAddons[]. Nazwy rozrozniaja wielkosc liter. Patrz Rozdzial 2.2.
Mod nie jest widoczny w launcherzePlik mod.cpp brakuje lub ma bledy skladniUtworz lub napraw mod.cpp w katalogu glownym modu. Musi zawierac pola name, author i dir. Patrz Rozdzial 2.3.
"Config parse error" przy starcieBlad skladni w config.cppSprawdz brakujace sredniki po zamknieciach klas (};), niezamkniete nawiasy lub niezrownowaizone cudzystowy.
Brak wpisow w logu skryptowBlok CfgMods defs wskazuje na zla sciezkeZweryfikuj, ze wpis CfgMods w config.cpp ma poprawny dir i ze plik definicji skryptow pasuje do struktury folderow. Silnik cicho ignoruje zle sciezki.
Mod sie laduje, ale nic sie nie dziejeSkrypty kompiluja sie, ale nigdy nie uruchamiajaSprawdz, czy twoj mod ma punkt wejscia: modded class MissionServer lub MissionGameplay, zarejestrowany modul lub plugin. Patrz Rozdzial 7.2.
Mod dziala tylko w trybie jednego graczaSerwer nie ma zainstalowanego moduUpewnij sie, ze parametr -mod= serwera zawiera sciezke do twojego modu, a PBO jest w folderze @TwojMod/Addons/ serwera.

2. Bledy skryptow

Pojawiaja sie w logu skryptow jako linie SCRIPT (E): lub SCRIPT ERROR:.

ObjawPrzyczynaRozwiazanie
Null pointer accessDostep do zmiennej, ktora jest nullDodaj sprawdzenie null przed uzyciem zmiennej: if (myVar) { myVar.DoSomething(); }. To najczestszy blad runtime.
Cannot convert type 'X' to type 'Y'Bezposrednie rzutowanie miedzy niekompatybilnymi typamiUzyj Class.CastTo() do bezpiecznego rzutowania: Class.CastTo(result, source);. Patrz Rozdzial 1.9.
Undefined variable 'X'Literowka, zly zakres lub zla warstwaSprawdz najpierw pisownie. Jesli zmienna jest klasa z innego pliku, upewnij sie, ze jest zdefiniowana w tej samej lub nizszej warstwie. 3_Game nie moze widziec typow z 4_World. Patrz Rozdzial 2.1.
Method 'X' not foundWywolanie metody, ktora nie istnieje na tej klasieZweryfikuj nazwe metody i sprawdz klase nadrzedna. Sprawdz vanilla skrypty w P:\DZ\scripts\ pod katem poprawnego API.
Division by zeroDzielenie przez zmienna rowna 0Dodaj guard: if (divisor != 0) result = value / divisor;.
Redeclaration of variable 'X'Ta sama nazwa zmiennej zadeklarowana w sasiadujacych blokach else ifZadeklaruj zmienna raz przed lancuchem if/else. Patrz Rozdzial 1.12.
Stack overflowNieskonczona rekurencjaMetoda wywoluje sama siebie bez warunku bazowego. Dodaj sprawdzenie glebokosci lub napraw rekurencyjna wywolanie.
Index out of rangeDostep do tablicy z nieprawidlowym indeksemZawsze sprawdzaj array.Count() lub uzyj array.IsValidIndex(idx) przed dostepem po indeksie.
Blad skladni bez jasnego komunikatuUkosnik wsteczny \ lub cudzyslow w literale lancuchowymCParser Enforce Script nie obsluguje \\ ani \". Uzyj ukosnikow dla sciezek. Patrz Rozdzial 1.12.
JsonFileLoader zwraca nullPrzypisanie wartosci zwracanej JsonLoadFile()JsonLoadFile() zwraca void. Pre-alokuj obiekt i przekaz go przez referencje. Patrz Rozdzial 6.8.

3. Problemy z RPC i siecia

ObjawPrzyczynaRozwiazanie
RPC wyslane, ale nigdy nie odebraneNiezgodnosc rejestracjiNadawca i odbiorca musza zarejestrowac to samo ID RPC. Patrz Rozdzial 6.9.
RPC odebrane, ale dane sa uszkodzoneNiezgodnosc parametrow odczytu/zapisuWywolania Write() nadawcy i Read() odbiorcy musza miec te same typy w tej samej kolejnosci.
Dane nie synchronizuja sie do klientowBrakujacy SetSynchDirty()Po zmianie zmiennej zarejestrowanej do synchronizacji wywolaj SetSynchDirty() na encji.
Dziala w trybie jednego gracza, nie na dedykowanymRozne sciezki kodu dla listen vs. dedykowanyNa listen serwerze klient i serwer dzialaja w jednym procesie. Zawsze testuj na dedykowanym serwerze.
Zalewanie RPC i lag serweraWysylanie RPC co klatkeOronicuj wywolania RPC timerami. Grupuj male aktualizacje w jedno RPC.

4. Problemy z UI

ObjawPrzyczynaRozwiazanie
Layout laduje sie, ale nic nie jest widoczneRozmiar widgetu wynosi zeroSprawdz wartosci hexactsize i vexactsize. Bez ujemnych rozmiarow. Patrz Rozdzial 3.3.
CreateWidgets() zwraca nullSciezka do pliku layout jest zla lub plik brakujeZweryfikuj sciezke do pliku .layout (ukosniki, bez literowek). Silnik cicho zwraca null przy zlych sciezkach.
Widgety istnieja, ale nie mozna ich kliknacInny widget zaslania przyciskSprawdz priority widgetu (porzadek z). Wyzszy priorytet = renderowane na wierzchu i przechwytuja wejscie jako pierwsze.
Wejscie gry jest zablokowane po zamknieciu UIWywolania ChangeGameFocus() sa niezrownowazoneKazde ChangeGameFocus(1) musi miec odpowiadajace ChangeGameFocus(-1).
Tekst pokazuje #STR_some_key dosloownieWpis stringtable brakujeDodaj klucz do stringtable.csv.
Kursor myszy nie pojawia sieNie wywolano ShowUICursor()Wywolaj GetGame().GetUIManager().ShowUICursor(true) przy otwieraniu UI.

5. Problemy z budowaniem i PBO

ObjawPrzyczynaRozwiazanie
PBO buduje sie poprawnie, ale mod crashuje przy ladowaniuBlad binaryzacji config.cppSprobuj budowac z wylaczona binaryzacja.
"Signature check failed" przy laczeniu z serweremPBO niepodpisane lub podpisane zlym kluczemPonownie podpisz PBO swoim kluczem prywatnym. Upewnij sie, ze serwer ma odpowiedni .bikey.
Zmiany file patchingu nie sa widoczneNie uzywa sie pliku diagnostycznegoFile patching dziala tylko z DayZDiag_x64.exe, nie z retail DayZ_x64.exe.
Stara wersja modu sie laduje mimo zmianZcacheowane PBO lub wersja z warsztatu nadpisujeUsun stare PBO. Sprawdz sciezke -mod=.

6. Problemy z wydajnoscia

ObjawPrzyczynaRozwiazanie
Niskie FPS serwera (ponizej 20)Ciezkie przetwarzanie w OnUpdate()Uzyj akumulatora delta-czasu. Wykonuj logike co N sekund. Patrz Rozdzial 7.7.
Pamiec rosnie w czasie (wyciek pamieci)Cykle referencji refGdy dwa obiekty trzymaja ref na siebie, zaden nie jest zwalniany. Zrob jedna strone surowa (bez ref) referencja. Patrz Rozdzial 1.8.
Plik logu bardzo szybko rosnieNadmierne Print()Usun lub guard debugowe Print() za #ifdef DEVELOPER.

7. Problemy z przedmiotami, pojazdami i encjami

ObjawPrzyczynaRozwiazanie
Przedmiot nie spawnuje siescope=0 w konfiguracji lub brakuje w types.xmlUstaw scope=2. Dodaj wpis do types.xml serwera.
Przedmiot spawnuje sie, ale jest niewidocznySciezka modelu (.p3d) jest zlaSprawdz sciezke model w CfgVehicles. Uzywaj ukosnikow.
Przedmiot nie moze byc podniesionyNiepoprawna geometria lub zly inventorySlotZweryfikuj Fire Geometry w modelu. Sprawdz itemSize[].
Encja natychmiast usuwana po spawnielifetime wynosi zero w types.xmlUstaw odpowiednia wartosc lifetime.

8. Problemy z konfiguracja i typami

ObjawPrzyczynaRozwiazanie
Wartosci konfiguracji nie sa widoczneEdycja zrodla przy zbinaryzowanej konfiguracjiPrzebuduj PBO po zmianach konfiguracji.
Zmiany types.xml sa ignorowaneEdycja zlego pliku types.xmlSerwer laduje typy z mpmissions/twoja_misja/db/types.xml.
"Error loading types" przy starcie serweraBlad skladni XML w types.xmlZwaliduj XML. Czeste problemy: niezamkniete tagi, brakujace cudzyslow.
Plik konfiguracji JSON nie laduje sieNiepoprawny JSON lub zla sciezkaZwaliduj skladnie JSON. Uzyj prefiksu $profile:.

9. Problemy z persistencja

ObjawPrzyczynaRozwiazanie
Dane gracza stracone przy restarcieNie zapisuje do katalogu $profile:Uzyj JsonFileLoader<T>.JsonSaveFile() ze sciezka $profile:.
Zapisany plik jest pusty lub uszkodzonyCrash podczas zapisuZapisuj do pliku tymczasowego, potem zmien nazwe na docelowa sciezke.
Niezgodnosc OnStoreSave/OnStoreLoadWersja sie zmienila, ale brak migracjiZawsze zapisuj numer wersji jako pierwszy.

10. Schematy decyzyjne

"Moj mod w ogole nie dziala"

  1. Sprawdz log skryptow pod katem bledow SCRIPT (E). Napraw pierwszy znaleziony blad. (Sekcja 2)
  2. Czy mod jest wymieniony w launcherze? Jesli nie, sprawdz mod.cpp. (Sekcja 1)
  3. Czy log wspomina twoja klase CfgPatches? Jesli nie, sprawdz skladnie config.cpp i parametr -mod=.
  4. Czy skrypty sie kompiluja? Szukaj bledow kompilacji w RPT. (Sekcja 2)
  5. Czy jest punkt wejscia? Potrzebujesz modded class MissionServer/MissionGameplay.
  6. Nadal nic? Dodaj Print("MY_MOD: Init reached"); w punkcie wejscia.

"Dziala offline, ale nie na dedykowanym serwerze"

  1. Czy mod jest zainstalowany na serwerze? Sprawdz -mod= i lokalizacje PBO.
  2. Kod tylko dla klienta na serwerze? GetGame().GetPlayer() zwraca null przy inicjalizacji serwera. Dodaj guardy.
  3. RPC dzialaja? Dodaj Print() po obu stronach. Sprawdz zgodnosc ID. (Sekcja 3)
  4. Synchronizacja danych? Sprawdz SetSynchDirty().
  5. Problemy z timingiem? Listen servery ukrywaja race conditions.

"Moje UI jest zepsute"

  1. Czy CreateWidgets() zwraca null? Sciezka layoutu jest zla.
  2. Widgety istnieja, ale sa niewidoczne? Sprawdz rozmiary (> 0, bez ujemnych). Sprawdz Show(true).
  3. Widoczne, ale nieklikalne? Sprawdz priority widgetu.
  4. Wejscie zablokowane po zamknieciu UI? Wywolania ChangeGameFocus() sa niezrownowazone.

11. Szybka referencja komend debugowania

AkcjaKomenda
Spawn przedmiotu na ziemiGetGame().CreateObject("AKM", GetGame().GetPlayer().GetPosition());
Teleport na wspolrzedneGetGame().GetPlayer().SetPosition("6543 0 2114".ToVector());
Pelne leczenieGetGame().GetPlayer().SetHealth("", "", 5000);
Ustawienie poludniaGetGame().GetWorld().SetDate(2024, 9, 15, 12, 0);
Ustawienie nocyGetGame().GetWorld().SetDate(2024, 9, 15, 2, 0);
Czysta pogodaGetGame().GetWeather().GetOvercast().Set(0,0,0); GetGame().GetWeather().GetRain().Set(0,0,0);
Drukowanie pozycjiPrint(GetGame().GetPlayer().GetPosition());
Sprawdzenie serwer/klientPrint("IsServer: " + GetGame().IsServer().ToString());

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

Parametry uruchamiania

ParametrPrzeznaczenie
-filePatchingLadowanie rozpakowanych plikow (wymaga DayZDiag)
-scriptDebug=trueWlaczenie funkcji debugowania skryptow
-doLogsWlaczenie szczegolowego logowania
-profiles=<sciezka>Niestandardowy katalog profilu/logow
-connect=<ip>Automatyczne laczenie z serwerem
-port=<port>Port serwera (domyslnie 2302)
-mod=@Mod1;@Mod2Ladowanie modow (rozdzielone srednikiem)
-serverMod=@ModMody wylacznie serwerowe

12. Lokalizacje plikow logow

Logi klienckie

LogLokalizacjaZawartosc
Log skryptow%localappdata%\DayZ\ (najnowszy plik .RPT)Bledy skryptow, ostrzezenia, wynik Print()
Zrzuty crashow%localappdata%\DayZ\ (pliki .mdmp)Dane do analizy crashow

Logi serwerowe

LogLokalizacjaZawartosc
Log skryptow<server_root>\profiles\ (najnowszy plik .RPT)Bledy skryptow, serwerowe Print()
Log administratora<server_root>\profiles\ (plik .ADM)Polaczenia graczy, zabicia, chat

Efektywne czytanie logow

  • Szukaj SCRIPT (E) aby znalezc bledy skryptow
  • Szukaj nazwy swojego modu lub nazw klas aby filtrowac istotne wpisy
  • Bledy czesto sie kaskaduja -- napraw pierwszy blad w logu, nie ostatni

13. Gdzie uzyskac pomoc

Zasoby spolecznosci

ZasobURLNajlepszy do
DayZ Modding Discorddiscord.gg/dayzmodsPomoc w czasie rzeczywistym
Fora Bohemia Interactiveforums.bohemia.net/forums/forum/231-dayz-modding/Oficjalne fora
DayZ WorkshopSteam Workshop (DayZ)Przegladanie opublikowanych modow

Referencyjny kod zrodlowy

ModCzego sie nauczysz
Community Framework (CF)Cykl zycia modulow, zarzadzanie RPC, logowanie
DayZ ExpansionArchitektura duzych modow, system rynku, pojazdy
Community Online Tools (COT)Narzedzia administracyjne, uprawnienia, wzorce UI
VPP Admin ToolsAdministracja serwera, uprawnienia, ESP
Dabs FrameworkWzorzec MVC, wiazanie danych, framework komponentow UI

Vanilla referencja skryptow

  • Zamontuj dysk P: przez DayZ Tools
  • Przejdz do P:\DZ\scripts\
  • Zorganizowane wedlug warstw: 3_Game/, 4_World/, 5_Mission/

Problem nadal nierozwiazany? Sprawdz FAQ, Cheat Sheet, lub zapytaj na DayZ Modding Discord.

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