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]
MaxClientRate=100000
NetServerMaxTickRate=65
EDM - Enchanced DeathMatch - dla mnie najlepszy mutator do votingu i wszystkiego na początek
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.