Skip to content

Chapter 9.10: Zarzadzanie modami ​


Podsumowanie: Instalacja, konfiguracja i utrzymanie modow firm trzecich na dedykowanym serwerze DayZ. Obejmuje parametry uruchomienia, pobieranie z Workshop, klucze sygnatur, kolejnosc ladowania, mody tylko serwerowe vs wymagane przez klienta, aktualizacje i najczestsze bledy powodujace awarie lub wyrzucanie graczy.


Spis tresci ​


Jak laduja sie mody ​

DayZ laduje mody przez parametr uruchomienia -mod=. Kazdy wpis to sciezka do folderu zawierajacego pliki PBO i config.cpp. Silnik odczytuje kazdy PBO w kazdym folderze moda, rejestruje jego klasy i skrypty, a nastepnie przechodzi do nastepnego moda na liscie.

Serwer i klient musza miec te same mody w -mod=. Jesli serwer wymienia @CF;@MyMod, a klient ma tylko @CF, polaczenie nie powiedzie sie z bledem niezgodnosci sygnatur. Mody tylko serwerowe umieszczone w -servermod= sa wyjatkiem -- klienci nigdy ich nie potrzebuja.


Format parametrow uruchomienia ​

Typowa komenda uruchomienia modowanego serwera:

batch
DayZServer_x64.exe -config=serverDZ.cfg -port=2302 -profiles=profiles -mod=@CF;@VPPAdminTools;@MyContentMod -servermod=@MyServerLogic -dologs -adminlog
ParametrPrzeznaczenie
-mod=Mody wymagane zarowno przez serwer jak i wszystkich laczacych sie klientow
-servermod=Mody tylko serwerowe (klienci ich nie potrzebuja)

Zasady:

  • Sciezki sa rozdzielone srednikami bez spacji wokol srednikow
  • Kazda sciezka jest wzgledna do glownego katalogu serwera (np. @CF oznacza <root_serwera>/@CF/)
  • Mozesz uzywac sciezek bezwzglednych: -mod=D:\Mods\@CF;D:\Mods\@VPP
  • Kolejnosc ma znaczenie -- zaleznosci musza pojawic sie przed modami, ktore ich wymagaja

Instalacja modow z Workshop ​

Krok 1: Pobranie moda ​

Uzyj SteamCMD z App ID klienta DayZ (221100) i ID Workshop moda:

batch
steamcmd.exe +force_install_dir "C:\DayZServer" +login your_username +workshop_download_item 221100 1559212036 +quit

Pobrane pliki trafiaja do:

C:\DayZServer\steamapps\workshop\content\221100\1559212036\

Krok 2: Utworzenie dowiazania symbolicznego lub kopii ​

Foldery Workshop uzywaja numerycznych ID, ktore sa nieuzyteczne w -mod=. Utworz nazwane dowiazanie symboliczne (zalecane) lub skopiuj folder:

batch
mklink /J "C:\DayZServer\@CF" "C:\DayZServer\steamapps\workshop\content\221100\1559212036"

Uzycie dowiazania oznacza, ze aktualizacje przez SteamCMD sa automatycznie stosowane -- nie trzeba ponownie kopiowac.

Krok 3: Skopiowanie .bikey ​

Zobacz nastepna sekcje.


Klucze modow (.bikey) ​

Kazdy podpisany mod jest dostarczany z folderem keys/ zawierajacym jeden lub wiecej plikow .bikey. Te pliki mowia BattlEye, ktore sygnatury PBO akceptowac.

  1. Otworz folder moda (np. @CF/keys/)
  2. Skopiuj kazdy plik .bikey do glownego katalogu keys/ serwera
DayZServer/
  keys/
    dayz.bikey              # Vanilia -- zawsze obecny
    cf.bikey                # Skopiowany z @CF/keys/
    vpp_admintools.bikey    # Skopiowany z @VPPAdminTools/keys/

Bez prawidlowego klucza kazdy gracz uruchamiajacy ten mod otrzyma: "Player kicked: Modified data".


Kolejnosc ladowania i zaleznosci ​

Mody laduja sie od lewej do prawej w parametrze -mod=. config.cpp moda deklaruje jego zaleznosci:

cpp
class CfgPatches
{
    class MyMod
    {
        requiredAddons[] = { "CF" };
    };
};

Jesli MyMod wymaga CF, to @CF musi pojawic sie przed @MyMod w parametrze uruchomienia:

-mod=@CF;@MyMod          ✓ poprawnie
-mod=@MyMod;@CF          ✗ awaria lub brakujace klasy

Ogolny wzorzec kolejnosci ladowania:

  1. Mody frameworkowe -- CF, Community-Online-Tools
  2. Mody biblioteczne -- BuilderItems, dowolny wspoldzielony pakiet zasobow
  3. Mody funkcjonalne -- dodatki map, bronie, pojazdy
  4. Mody zalezne -- cokolwiek co wymienia powyzsze jako requiredAddons

W razie watpliwosci sprawdz strone Workshop moda lub jego dokumentacje. Wiekszosc autorow modow publikuje wymagana kolejnosc ladowania.


Mody tylko serwerowe vs wymagane przez klienta ​

ParametrKto potrzebujeTypowe przyklady
-mod=Serwer + wszyscy klienciBronie, pojazdy, mapy, mody UI, ubrania
-servermod=Tylko serwerMenedzery ekonomii, narzedzia logowania, backendy administracyjne, skrypty planisty

Zasada jest prosta: jesli mod zawiera jakiekolwiek skrypty po stronie klienta, layouty, tekstury lub modele, musi isc do -mod=. Jesli uruchamia tylko logike serwerowa bez zasobow, ktore klient kiedykolwiek dotyka, uzyj -servermod=.

Umieszczenie moda tylko serwerowego w -mod= zmusza kazdego gracza do jego pobrania. Umieszczenie moda wymaganego przez klienta w -servermod= powoduje brakujace tekstury, uszkodzony UI lub bledy skryptow po stronie klienta.


Aktualizacja modow ​

Procedura ​

  1. Zatrzymaj serwer -- aktualizacja plikow podczas pracy serwera moze uszkodzic pliki PBO
  2. Pobierz ponownie przez SteamCMD:
    batch
    steamcmd.exe +force_install_dir "C:\DayZServer" +login your_username +workshop_download_item 221100 <modID> +quit
  3. Skopiuj zaktualizowane pliki .bikey -- autorzy modow czasami rotuja swoje klucze podpisywania. Zawsze kopiuj swiezy .bikey z folderu keys/ moda do katalogu keys/ serwera
  4. Zrestartuj serwer

Jesli uzyles dowiazañ symbolicznych (junctions), krok 2 aktualizuje pliki moda na miejscu. Jesli kopiowales pliki recznie, musisz je skopiowac ponownie.

Aktualizacje po stronie klienta ​

Gracze zasubskrybowani do moda na Steam Workshop otrzymuja aktualizacje automatycznie. Jesli zaktualizujesz mod na serwerze, a gracz ma stara wersje, otrzyma niezgodnosc sygnatur i nie bedzie mogl sie polaczyc, dopoki jego klient nie zostanie zaktualizowany.


Rozwiazywanie konfliktow modow ​

Sprawdz log RPT ​

Otworz najnowszy plik .RPT w profiles/. Szukaj:

  • "Cannot register" -- kolizja nazw klas miedzy dwoma modami
  • "Missing addons" -- zaleznos nie jest zaladowana (zla kolejnosc ladowania lub brakujacy mod)
  • "Signature verification failed" -- niezgodnosc .bikey lub brakujacy klucz

Sprawdz log skryptow ​

Otworz najnowszy script_*.log w profiles/. Szukaj:

  • Linie "SCRIPT (E)" -- bledy skryptow, czesto spowodowane kolejnoscia ladowania lub niezgodnoscia wersji
  • "Definition of variable ... already exists" -- dwa mody definiuja ta sama klase

Izoluj problem ​

Gdy masz wiele modow i cos sie psuje, testuj stopniowo:

  1. Zacznij od samych modow frameworkowych (@CF)
  2. Dodaj jeden mod naraz
  3. Uruchom i sprawdz logi po kazdym dodaniu
  4. Mod powodujacy bledy jest winowajca

Dwa mody edytujace ta sama klase ​

Jesli dwa mody oba uzywaja modded class PlayerBase, ten zaladowany ostatni (najdalej na prawo w -mod=) wygrywa. Jego wywolanie super prowadzi do wersji drugiego moda. To zwykle dziala, ale jesli jeden mod nadpisuje metode bez wywolywania super, zmiany drugiego moda sa tracone.


Typowe bledy ​

Zla kolejnosc ladowania. Serwer ulega awarii lub loguje "Missing addons", poniewaz zaleznosc nie byla jeszcze zaladowana. Rozwiazanie: przenies mod zaleznosci wczesniej na liscie -mod=.

Zapomnienie o -servermod= dla modow tylko serwerowych. Gracze sa zmuszeni do pobrania moda, ktorego nie potrzebuja. Rozwiazanie: przenies mody tylko serwerowe z -mod= do -servermod=.

Brak aktualizacji plikow .bikey po aktualizacji moda. Gracze sa wyrzucani z bledem "Modified data", poniewaz klucz serwera nie odpowiada nowym sygnaturom PBO moda. Rozwiazanie: zawsze ponownie kopiuj pliki .bikey przy aktualizacji modow.

Przepakowywanie PBO modow. Przepakowanie plikow PBO moda lamie jego cyfrowa sygnature, powoduje wyrzucanie BattlEye dla kazdego gracza i narusza warunki wiekszosci autorow modow. Nigdy nie przepakowuj moda, ktorego nie stworzylesz.

Mieszanie sciezek Workshop ze scieżkami lokalnymi. Uzywanie surowej numerycznej sciezki Workshop dla niektorych modow i nazwanych folderow dla innych powoduje zamieszanie przy aktualizacjach. Wybierz jedno podejscie -- dowiazania symboliczne sa najczystsze.

Spacje w sciezkach modow. Sciezka jak -mod=@My Mod psuje parsowanie. Zmien nazwy folderow modow, aby unikac spacji, lub otocz caly parametr cudzyslowami: -mod="@My Mod;@CF".

Przestarzaly mod na serwerze, zaktualizowany na kliencie (lub odwrotnie). Niezgodnosc wersji uniemozliwia polaczenie. Synchronizuj wersje serwera i Workshop. Aktualizuj wszystkie mody i serwer w tym samym czasie.

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