sobota, 12 września 2020

Stawiamy serwer Unreal (OldUnreal 227i/j patch) na linuksie

Słowem wstępu

Gra wydana w 1998 roku z silnikiem obecnie rozwijanym przez społeczność portalu oldunreal.com.

Opiszę tutaj procedurę dla sytuacji gdy serwer znajduje się na maszynie do której nie macie fizycznego dostępu czyli logujecie się przez ssh i w taki sposób wszystkim zarządzacie.

Wymagania podstawowe

Przede wszystkim musimy mieć grę, i tutaj możemy mieć albo wersję Gold albo zwykłą - tj. bez dodatku Return to Na Pali. Jeśli macie golda będzie łatwiej bo wersja w której wyszedł Gold od razu nadaje się do nałożenia łatki ze strony oldunreal.com. Jeśli macie wersję bazową będziecie musieli nałożyć kilka łatek zanim łatka na 227i pozwoli się zainstalować.

Obecnie oficjalnie dostępnym patchem jest 227i - a co za tym idzie musicie upewnić się, że macie zainstalowane paczki pozwalające uruchamiać programy skompilowane dla architektury x86 bowiem tylko pod tą architekturę są skompilowane pliki wykonywalne w tej wersji. Jako osoba zaznajomiona z Unrealową społecznością korzystam z łatki 227j v47, która ma już binarki dla systemów 64-bitowych. Także gdy będziecie mieli publiczny dostęp do wersji 227j nie będzie trzeba się już o to martwić.

Zaczynamy stawiać serwer

Przyjmę, że pliki gry/serwera są już na maszynie na której będziecie wszystko budować. W katalogu z grą i podkatalogu System(lub System64 dla wersji 227j i dalszych) macie plik UCCLinux.bin, któremu musimy nadać prawa wykonywania:

chmod +x System/UCCLinux.bin

Ten plik pozwala nam na uruchomienie serwera, natomiast całkiem fajnie zrobić sobie prosty skrypt w bashu, który od ponownie uruchomi serwer w przypadku awarii. Skorzystamy tutaj z tego co mówi nam wiki OldUnreal. Ja tworzę go w głównym katalogu gry i zapisuję jako prosty skrypt basha:

#!/bin/sh

until ./System/UCCLinux.bin server DMDeck16?Game=Unrealshare.Deathmatchgame; do
        echo "Server 'UCCLinux.bin' crashed with exit code $?. Respawning.." >&2
        sleep 1
   done

I nadajemy mu prawa wykonywania za pomocą:

chmod +x nazwa_waszego_skryptu

 Teraz zadbajmy aby nasz serwer mógł być widoczny z poziomu gry, w tym celu musimy zaktualizować odniesienia do masterserwerów gry. Szukamy analogicznych wpisów do tych poniżej w pliku System/UnrealLinux.ini i je aktualizujemy:

ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.oldunreal.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hlkclan.net MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.333networks.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hypercoop.tk MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.newbiesplayground.net MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.errorist.tk MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.qtracker.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master2.oldunreal.com MasterServerPort=27900

Dla systemów linuksowych należy jeszcze włączyć UpLink serwera, ten sam plik:

[IpServer.UdpServerUplink]
DoUplink=True

I teraz drobne niedociągnięcie ze strony developerów(a raczej, dewelopera - no niestety), otóż plik konfiguracyjny UnrealLinux.ini nie posiada wszystkich wpisów, które posiada Unreal.ini. I tak oto, aby nadać nazwę naszemu serwerowi i poprawnie wyświetlać MOTD musimy przekopiować z Unreal.ini do UnrealLinux.ini(może być na końcu pliku) następujące linijki:

[Engine.GameReplicationInfo]
Region=0
ServerName=                       
ShortName=Unreal Server
AdminName=
AdminEmail=
MOTDLine1=
MOTDLine2=
MOTDLine3=
MOTDLine4=
ShowMOTD=False

I uzupełnić wedle własnych upodobań. Jeszcze należy oczywiście ustalić hasło administratora coby wszyscy nie mogli się bezkarnie panoszyć:

[Engine.GameInfo]
AdminPassword=twoje_haslo_adminstratora

Polecam jeszcze przypisać sobie klawisz do wywołujący menu administracyjne. Szukacie pliku System/User.ini (ew. System64/User.ini) i dokonujecie odpowiednich zmian, ja przypisalem np. do klawisza F8:

F8=UShowAdminMenu

Ostatnia rzecz na wstępie - dla własnej wygody warto zbindować sobie łączenie się z własnym serwerem z uprawnieniami administratora. Ja podpiąłem to pod klawisz F10:

F10=open adres_ip_waszego_serwera?password=wasze_haslo_administratora

Jako ze wersja 227 jest ciagle rozwijana na swoim serwerze odpuscilem sobie Enchanced DeathMatch(w skrócie EDM) jako, że ostatnia wersja jest dość stara; natomiast nad oficjalną wersją gry ciągle się pracuje. Podobnie ma się sprawa z anty-cheatem.

Ważne dodatki - mutatory

Tutaj jest panie i panowie sajgon jak diabli :/. No niestety, jeśli nie siedzicie w społeczności Unreala 1 będziecie mieć nie lada problemy ze znalezieniem pasujących paczek. A to nie ma nowszej wersji ogólnie dostępnej, a to jest na jakiejś stronie którą znają głównie ludzie ze społczności czy też plik README do mutatora ma literówkę przez co nie będzie poprawnie wywoływany. Ale, po kolei.

UMapVote(raczej słabe rozwiązanie, polecam przejść sekcję niżej, do EDM)

Bardzo istotny dodatek, odpowiadający za możliwość głosowania na mapy i tryby gry dostępne na serwerze. Należy go samemu skonfigurować a pliki mutatora - podobnie jak w przypadku każdego innego mutatora wrzucamy do katalogu System(lub System64). Oto mój konfig(plik UMamVote.ini) jakby ktoś miał problemy ze składnią:

[UMapVoteServer.VotingHandler]
MinVoters=1
RequiredMapsBeEnable=0
VotingTime=40
MapChangePrc=0.750000
MidGamePrc=0.510000
bBeginEndGameVotingOnEndGame=False)
bBeginEndGameVotingOnEndGame=False)
bBeginEndGameVotingOnEndGame=False
bAutoMaps=False
bDisplayVoteItem=True
Maps=(MapName="DmDeck16",GameIndex=-1)
Maps=(MapName="DmCurse",GameIndex=-1)
Maps=(MapName="DmDeathFan",GameIndex=-1)
Maps=(MapName="DmElsinore",GameIndex=-1)
Maps=(MapName="DmFith",GameIndex=-1)
Maps=(MapName="DmHealPod",GameIndex=-1)
Maps=(MapName="DmMorbias",GameIndex=-1)
Maps=(MapName="DmTundra",GameIndex=-1)
GameModes=(GameName="Vanilla|DeathMatch",ShortGameName="V_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="",AddedCmdLine="",Packages="",bKeepInventory=False)
GameModes=(GameName="Relics|DeathMatch",ShortGameName="R_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="Relics.RelicMutator2",AddedCmdLine="",Packages="",bKeepInventory=False)
GameModes=(GameName="Instagib|DeathMatch",ShortGameName="IGIB_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="UTWeapons.Instagib",AddedCmdLine="",Packages="",bKeepInventory=False)
GameModes=(GameName="LowGravity.Instagib|DeathMatch",ShortGameName="LG.IGIB_DeathMatch",GamePrefix="DM",GameTypeClass="UnrealShare.DeathMatchGame",Mutators="UTWeapons.Instagib,LowGrav.LowGrav",AddedCmdLine="",Packages="",bKeepInventory=False)

Teraz tak, jeśli stawiać będziecie server na wersji 227j koniecznie popytajcie o najnowszą wersję, gdyż w moim przypadku wersje 1.4 i 1.6 rozwalały interfejs gry; a raczej - czyniły go niefunkcjonalnym. Odsyłam też do pliku tekstowego dołączonego do mutatora, żebyście wiedzieli co wpisać w pliku UnrealLinux.ini jako ServerActors oraz Serverpackages. Pamiętajcie też aby wywołać mutator w poleceniu którym uruchamiacie sam server, jako że będzie on niezależny od wybranego trybu gry - pisze o wszystkim w pliku tesktowym dołączonym do mutatora.

Zasada jest generalnie taka, że każdy mutator z którego planujecie korzystać na serwerze dodajecie do ServerPackages. Tj. jeśli ma on plik np. zdzisiek1.u to dorzucacie ServerPackages=zdzisiek1 w odpowiedznim miejscu.

Przykładowo moja sekcja odpowiadająca za te wpisy z tego samego serwera z którego pochodzi plik UMapVote.ini:

[Engine.GameEngine]
CacheSizeMegs=8
UseSound=True
bServerSaveInventory=False
ServerActors=IpDrv.UdpBeacon
ServerActors=IpServer.UdpServerQuery
ServerActors=UBrowser.UBrowserUplink
;ServerActors=UWebAdmin.WebAdminManager
; Oldstyle way. If you dislike auto updates, then simply comment ServerActors=UBrowser.UBrowserUplink and uncomment below.
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.oldunreal.com MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hlkclan.net MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master2.oldunreal.com MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.hypercoop.tk MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.newbiesplayground.net MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.errorist.tk MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.noccer.de MasterServerPort=27900
;ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.qtracker.com MasterServerPort=27900
ServerPackages=Female1skins
ServerPackages=Female2skins
ServerPackages=Male1skins
ServerPackages=Male2skins
ServerPackages=Male3skins
ServerPackages=SkTrooperskins
ServerPackages=UnrealIntegrity
ServerPackages=UMapVote
ServerPackages=UTWeapons
ServerPackages=Relics

Podałem wam w zasadzie tylko mutator do głosowania bo nie jestem, w stanie przewidzieć co będziecie chcieli konkretnie mieć na waszych serwerach - ten natomiast był moim pierwszym wyborem - który ujdzie, ale zdecydowanie bardziej polecam EDM - omówiony później.

Aha, jakbyście szukali mutatora do trybu InstaGib - jest częścią paczki UTWeapons albo w EDM(zdecydowanie polecam to drugie rozwiązanie).

Optymalizacja serwera aby zmniejszyć lagi

Ponownie odnosimy się do pliku UnrealLinux.ini, z tym że interesuje nas sekcja:

[IpDrv.TcpNetDriver]

W niej natomiast pozycje MaxClientRate i NetServerMaxTickRate. Z tego co udało mi się dowiedzieć to klan DOG, za którym osobiście nie przepadam - używa takich wartości tych zmiennych:
 
MaxClientRate=100000
NetServerMaxTickRate=65
 
Przy czym weźcie pod uwagę, że zależą one od mocy maszyny i połączenia sieciowego z serwerem - także testujcie różne wartości drogą prób i błędów. Doradzam też zmienić szybkość w konfiguracji klienta na LAN - proste ale to najbardziej popularna porada jaka krąży po sieci - i chyba faktycznie działa.

EDM - Enchanced DeathMatch - dla mnie najlepszy mutator do votingu i wszystkiego na początek


Przed napisaniem tej części miałem już sprawdzone UMapVote, które jest bardzo średnie natomiast na początek daje radę, fajna jest też możliwość stworzenia sobie "własnych gamemodów" łącząc okreśłony tryb z wybranymi przez nas mutatorami. Później sprawdziłem UTeamFix, jeśli mnie pamięć nie myli - wersję 10H. Niby ok, ale jak dla mnie manual jest napisany tak czytelnie jak groch z kapustą. Jeśli jednak to wybierzecie(a jeśli stawiacie serwer na tryby Cooperative czy drużynowe może to nie być taki zły pomysł) zajrzyjcie sobie do pliku UTeamFix.int - od razu domyślicie się do jakiej sekcji w pliku UnrealLinux.ini co wpisywać - ja zanim tam zajrzałem długo nie wiedziałem gdzie np. ustawić hasło administratora - a moim skromnym zdaniem manual ma nas w tym przypadku w dupie.

Później przyszedł czas na EDM - i tu, dla mnie - stawiającego serwer DeathMatch'owy; pojawiło się autentyczne wytchnienie. Od pobrania paczki z EDM do uruchomienia bazowo skonfigurowanego pod niego serwera minęła niecała godzina. Dzięki przejrzystemu manualowi czułem się tak konfortowo, że praktycznie wszystkich zmian dokonałem jednym rzutem - później tylko start, test; wszystko działa - ok.

No ale po kolei. Instalacja jest prosta. Pobieracie sobie najnowszą wersję, tzn. z 2009 roku - witajcie w świecie retro - z tego miejsca. Interesuje was "Enhanced Deathmatch 6.0 (July 15th, 2009)". Powinniście otrzymać plik EDM6_PUBLIC-7-15-09.zip. U mnie poszła podstawa i dodatkowe mutator tj. z katalogu "Necessart Files" wszystko z "System" leci do "System64"(lub System), a z "Textures" do "Textures"(wow). Z "Extra Files" wszystko z "Mutators" też do "System64".

Rozpakowujecie też sobie ten plik u siebie na dysku i czytacie manual - krótki i czytelny. Na start serwera jako tryb gry wywołujecie "EDM6_Client.EnhancedDM".

Wszystko w zasadzie macie w manualu. Ale po krótce - mapki na które idzie głosować wpisujecie sobie do "EDMMAPS.ini", a główną konfigurację mutatora macie w "EnhancedDM.ini" - tam też macie odpowiednio sekcje do wpisania mutatorów, które będą zawsze ładowane z serwerem oraz te, na które mogą głosować gracze.

Dodatek, kolorowanie nazwy naszego serwera

Najlepiej poszukajcie sobie programiku UT2K4 Message Colourizer, ustawcie sobie wszystko co chcecie, tzn. nazwę waszego serwera z dopisanymi kolorami w odpowiednich miejscach i wklejcie jako nazwę serwera w pliku UnrealLinux.ini.

Osobiście jednak odradzam tego typu zabawy; sam skończyłem z plikiem którego ani notatnik(xed) ani Libre Office Writer nie mogło ruszyć - poradził sobie z tym natomiast jak podejrzewałem notatnik dostarczany z WINE(dodając spację po każdym znaku, ale chociaż treść została). Dla mnie natomiast dużo ważniejsza jest możliwość edycji konfiguracji na serwerze z poziomu terminala - nie polecam.

Zakończenie

Podziękowania dla Smirftsch, Dots, x21-(DOG)- oraz strategy-(DOG)-, ISV-GamesHarder, którzy niezwykle pomogli mi w znalezieniu potrzebnych plików oraz służyli wiedzą gdy jej potrzebowałem.

Brak komentarzy:

Prześlij komentarz

Kompilacja Fluxbox 1.3.7 kompilatorem C++ 17 (GCC 11)

Po aktualizacji systemu jakiś czas temu okazało się, że posiadając nową wersję gcc w systemie nie byłem w stanie poprawnie skompilować Fluxb...