Ultimate UT99 Server in Docker - Need your help

Discussions about Servers
Roemer
Novice
Posts: 3
Joined: Fri Jan 24, 2020 5:04 pm

Ultimate UT99 Server in Docker - Need your help

Post by Roemer »

Hello everyone

I am currently working on a Docker image for a Linux server for UT99.
My idea is to have a Docker image ready that is usable by anyone (beginner or pro) to setup their own server and adjust it with ease.
The base server should already contain a good set of default settings, maps, mutators and such but allow extending with additional files (via Docker volumes).

The project is of course open-source. The project is here: https://github.com/Roemer/ut99-server
The binary files are not yet there, I will add (all or at least most of them, depending on copyright risks) a bit later.

Now the server is already fully functional, I have implemented the method to extend the server via a volume with additional files. Also the inis can be editied with easy for advanced users and the most important settings can be controlled with environment variables (mostly for beginners).

Now as I haven't touched UT99 in many many years, I forgot (or never learned) a lot of things about UT99 servers, this is one part where I could need your help as I have some questions already which I cannot quite figure out:

Are there any important mods/mutators missing? Currently there are:
  • FlagAnnouncementsV2
  • KickIdlePlayers2
  • MapVoteLAv2
  • NoSelfDamagev03
  • WhoPushedMe
  • ZeroPingPlus103
What are the most important maps that should be added by default?

How to install/use Bunnytrack?
I have a hard time getting Bunnytrack to work. I am trying with BTPlusPlusv0994, I can see the mutator (and maps if I name them CTF-BT-Someting but cannot switch to that map (it then even looses the mutator).
Ideally, I would like to add a new GameType (Bunnytrack) and have the maps named BT-Something. How can I achieve this? What mods are the right ones for Bunnytrack?

Evergreen question: Difference between ServerPackages and ServerActors
I just don't get it. As far as I understood ServerActors are always loaded (for example the FlagAnnouncementsV2 is a server actor). But why are they then still selectable as Mutators when they are always loaded? ServerPackages are only loaded on demand (eg. when added as Mutators). Is it like that? The above mentioned BTPlusPlusv0994 allows both. I would always prefer ServerPackages so it can be configured if they should be loaded or not. What about such packages as FlagAnnouncementsV2 (which is acoording to readme a ServerActor)? Is there some way I can change that one to "on-demand" only? Please enlighten me here on that topic :)

What patches are needed?
Currently I have the stock UT99 436 Server with the UTPGPatch451LINUX patch. I also have a small patch that fixes the 3 maps that are 0 bytes because of their name in the original package. I also add all 4 bonus packs (except the DE.u from bonuspack 2). Are there any more needed?

It would be really great if some of you could help me with those questions (especially about ServerPackages/Actors) or even help me creating and building the greatest Ut99 server Docker image there is.

Many thanks
Roman
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Ultimate UT99 Server in Docker - Need your help

Post by sektor2111 »

Serverpackages are Common things for both Player and Server and are loaded ALL TIME - required when new things are used because must be noticed by players - meshes textures sounds music maps.
ServerActors are Server-Side - player doesn't know about them unless such an actor is a stock one natively replicated - Eg: UT_Eightball aka RocketLauncher.
I think I even forgot how many settings must be adjusted but I might list a few:
- replacing Credits.Utx with the one without mismatch error - and even other files if needed;
- editing/checking Core.int;
- replacing place-holders with normal files;
- setting up for 451b measures against abusing adminlogin;
- setting up time-stamp for logs - run-line stuff here;
- Optional automatic logs compression and moving into other place;
- Optional configuring automatic updates from a defined folder;
- Optional multiple INI files for various configurations;
- etc.

MapVoteLAv2 - it's crashing under 1800 maps due to iterations limit during sorting stage. This is a thing released before being well tested.

I did not tested the rest too much - as for 21th century I'm waiting that UT469 patch and during this time I'm using XC_Engine (some adjustments are required here)- an extension fixing way too many issues for being listed here, version 24 it's improving A.I. pawns navigation and not only for A.I. ( aka Artificial Intelligence - if we can use term intelligence at those 20 years old things ).
Roemer
Novice
Posts: 3
Joined: Fri Jan 24, 2020 5:04 pm

Re: Ultimate UT99 Server in Docker - Need your help

Post by Roemer »

Thanks for the information, I will try to find some things you mentioned.
About the FlagAnnouncementsV2, I found out that if I remove the "ServerActors" part, I can either add the mutator for it so it is enabled, or remove the mutator then the stock sounds come in. Pretty much what I wanted for that.

=MERGED=

Too early. I tried the same with CustomCrossHairScale (https://github.com/bunnytrack/CustomCrossHairScale). If I remove the ServerActors and add the mutator, it crashes with:

Code: Select all

CCHS CTF-Face.CCHS1 (Function Engine.Mutator.AlwaysKeep:0000) Infinite script recursion (250 calls) detected
Executing UObject::StaticShutdownAfterError
If I add the ServerActor and keep the mutator I get the same. If I keek the ServerActor but remove the mutator it works. Why is that?
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Ultimate UT99 Server in Docker - Need your help

Post by sektor2111 »

Note -> If two mutators are trying to setup their own HUD - that thing can be only one, they will cause a conflict, each of them wanting its own HUD and reacting against similar mutators.
User avatar
Barbie
Godlike
Posts: 2792
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: Ultimate UT99 Server in Docker - Need your help

Post by Barbie »

ServerPackages are loaded into memory on server and client, but they are not executed. Skins textures for example.
A ServerActor is automatically spawned only in server upon server startup (just prior to InitGame).
Roemer wrote: Fri Jan 24, 2020 5:27 pmWhat patches are needed?
Have a look at ServerCrashFix_v11.
Roemer wrote: Fri Jan 24, 2020 11:11 pmIf I remove the ServerActors and add the mutator ["CustomCrossHairScale"], it crashes
Don't put it as first mutator, because it uses "BaseMutator" which can be itself then.
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Ultimate UT99 Server in Docker - Need your help

Post by sektor2111 »

Barbie wrote: Sat Jan 25, 2020 12:42 am ServerPackages are loaded into memory on server and client, but they are not executed.
That depends on package. Game-Type it's an automated ServerPackage and it's one of things really executed and running all time. Level.Game it's part of this PACKAGE. Why does client needs it ? Because has Scoreboard and HUD and... others (Flags, ControlPoints, FortStandards, etc.).
User avatar
Feralidragon
Godlike
Posts: 5489
Joined: Wed Feb 27, 2008 6:24 pm
Personal rank: Work In Progress
Location: Liandri

Re: Ultimate UT99 Server in Docker - Need your help

Post by Feralidragon »

Just dropping in to clarify what ServerActors and ServerPackages actually are, since above I am seeing a lot of confusion and inaccuracy.


ServerActors
These are actor classes which are spawned (instantiated) server-side after a map has been initialized/loaded.
They are generally used when you want to spawn specific actors in the server, that's pretty much all there is to it.

Only because they spawn in the server, however, does not necessarily mean they will stay in the server only, since it will depend on the replication rules of the actor itself, but generally they are set to not replicate at all, and just stay in the server meant as an addon to the server alone.

These actors may or not be mutators, it actually doesn't matter what they are, meaning that as long an actor class is in this list, it will be spawned (if it's possible to spawn it).
However, mutators are not generally loaded this way, instead they are given to the game in a different fashion as a list of mutators to load, that has nothing to do with this list.

Many mods offer the choice to be loaded with mutators or server actors, depending on how you want to use them, but in general, if you load it as a normal mutator, you don't need (nor should) add it to this list, and vice-versa (if you add it to this list, then you generally don't add it as a mutator).
Whether to use one or another when given the choice, it's up to you, sometimes there is a difference, sometimes there isn't (depends on the mod itself).


ServerPackages
These are package names that you require the clients to have ready on their end to be able to play in your server.
As a matter of fact, the term "ServerPackages" is a misnomer, and should be called "ClientPackages" instead, which would make it clearer what this list represents.

Unlike what was said above, it has nothing to do with what's loaded into memory, nor it has anything specific to do with static resources such as meshes, textures, sounds, etc.
Essentially, when a client connects to a server, if the client does not have any of the packages listed here, the client will download them from that server.

Strictly speaking, the client may download them from a redirect server (an alternate server that the main server redirects to for file downloads, with larger bandwidth for faster downloads), but it's just a minor detail.

However, unlike what has been stated above, they are not loaded immediately into memory through this list, neither by the server, nor by the client, as a matter of fact.
This list only serves the purpose of making sure that the clients have all the needed package dependencies downloaded and ready to be used once they connect to the main server in order to play.

The type of packages that you need to include here are packages which the clients must have, and have their resources dynamically loaded in runtime, the dynamic loading part being the main driver in deciding on whether or not to include a package in this list, and not whether they have custom textures and the like.

The usual examples of this are things like mutators which are dynamically loaded by the game in the first place (from a list of mutators), and generally these mutators also load resources dynamically, such as custom weapons, custom inventory and other things like that (through DynamicLoadObject calls).
And it's during this dynamic loading, and only here, that they are actually loaded into memory, not before.

Since they are loaded dynamically, if their packages are not included in this list, then if a client connects without having these packages already installed, then the client will just load the closest classes (such as a blank weapon in case of a custom weapon, if I recall correctly) when it receives a replicated actor of a custom class from the server, or not load them at all making things invisible or soundless (in case of custom textures, meshes and sounds).

This is unlike things such as map package dependencies: any custom packages that a map uses are automatically downloaded by the client, because in that case the packages are hard dependencies of the map itself, and not dynamically loaded, that's why you don't need to include maps or their packages in this list (doing so would actually be a bad thing to do).

It's also worth mentioning that, as such, these packages do not necessarily have to loaded in the server (they only need to be physically there as files), as this list only represents the packages that clients are required to have, but doesn't mean that the server will actually use them, or that the clients will actually load them during the course of a match, although loading them in both sides is generally the case with most mods.



Hopefully this should clear up what these actually are and how they work.
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: Ultimate UT99 Server in Docker - Need your help

Post by sektor2111 »

Explained perfectly.
Roemer
Novice
Posts: 3
Joined: Fri Jan 24, 2020 5:04 pm

Re: Ultimate UT99 Server in Docker - Need your help

Post by Roemer »

Wow thanks for that description. That cleared a lot. I stil was unable to add `CustomCrossHairScale` as mutator-only, it always crashed. I added it as ServerActor for now.

I was now able to correctly use a Docker Named Volume and Symlinks to make the container fully customizable. It contains the default server and the 4 bonus packs by default and all the rest (the mutators I add by default) are in this docker volume. So they can be removed or others can be added. Also all the ini files can be edited directly in this volume!

The first fully functional version is now on github/docker. You can find more information in github or docker.io:
- https://github.com/Roemer/ut99-server
- https://hub.docker.com/r/roemer/ut99-server

Any feedback is greatly welcome!

I'm still trying to figure out how I can also add BunnyTrack correctly to the server. So any help there would be great too ;)
User avatar
papercoffee
Godlike
Posts: 10443
Joined: Wed Jul 15, 2009 11:36 am
Personal rank: coffee addicted !!!
Location: Cologne, the city with the big cathedral.
Contact:

Re: Ultimate UT99 Server in Docker - Need your help

Post by papercoffee »

@Roemer
Please avoid double posts within a 24 hour limit.
When no one after you has answered in that time use the edit button on the right to add more content.
Gee
Novice
Posts: 4
Joined: Wed Sep 09, 2020 9:45 pm

Re: Ultimate UT99 Server in Docker - Need your help

Post by Gee »

hi Roemer, i have problems starting your ut99 docker.
I get the following messages:

[D] System/UnrealTournament.ini
Traceback (most recent call last):
File "/prepare.py", line 190, in <module>
main()
File "/prepare.py", line 16, in main
prepare()
File "/prepare.py", line 101, in prepare
set_config_to_environment('UT_WEBADMINUSER', utIniFileServer, 'UTServerAdmin.UTServerAdmin', 'AdminUsername')
File "/prepare.py", line 123, in set_config_to_environment
set_config_value(filePath, section, key, os.environ.get(environmentKey))
File "/prepare.py", line 137, in set_config_value
f = open(filePath, "r")
FileNotFoundError: [Errno 2] No such file or directory: '//ut-server/System/UnrealTournament.ini'
Creating preferences directory...
Creating directory /root/.loki/ut/
Creating directory /root/.loki/ut/System
WARNING: Not using preference directory
Executing Class Engine.ServerCommandlet
Unreal engine initialized
Browse: CTF-Face?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.SniperArena,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements,ZeroPingPlus103.ZP_SniperArena,KickIdlePlayers2.KickIdlePlayers2
LoadMap: CTF-Face?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.SniperArena,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements,ZeroPingPlus103.ZP_SniperArena,KickIdlePlayers2.KickIdlePlayers2
Bound to Fire.so
Bound to IpDrv.so
Collecting garbage
Purging garbage
Garbage: objects: 17119->17118; refs: 226768
Game class is 'CTFGame'
Sockets: Socket queue 262144 / 262144
Sockets: I am 46b17b1182c8 (192.168.170.99)
TcpNetDriver on port 7777
Server Package: SoldierSkins
Server Package: CommandoSkins
Server Package: FCommandoSkins
Server Package: SGirlSkins
Server Package: BossSkins
Server Package: Botpack
Spawning: IpDrv.UdpBeacon
Spawning: IpServer.UdpServerQuery
Spawning: IpServer.UdpServerUplink
Spawning: IpServer.UdpServerUplink
Spawning: IpServer.UdpServerUplink
Spawning: UWeb.WebServer
Bound to UWeb.so
Level is Level CTF-Face.MyLevel
Bringing Level CTF-Face.MyLevel up for play (35)...
InitGame: ?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.SniperArena,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements,ZeroPingPlus103.ZP_SniperArena,KickIdlePlayers2.KickIdlePlayers2
Base Mutator is CTF-Face.DMMutator0
Mutators BotPack.SniperArena,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements,ZeroPingPlus103.ZP_SniperArena,KickIdlePlayers2.KickIdlePlayers2
Add mutator BotPack.SniperArena
Add mutator MapVoteLAv2.BDBMapVote
Failed to load 'MapVoteLAv2': Can't find file for package 'MapVoteLAv2'
Failed to load 'Class MapVoteLAv2.BDBMapVote': Can't find file for package 'MapVoteLAv2'
SniperArena CTF-Face.SniperArena0 (Function Botpack.Arena.AddMutator:0009) Accessed None
Add mutator FlagAnnouncementsV2.FlagAnnouncements
Failed to load 'FlagAnnouncementsV2': Can't find file for package 'FlagAnnouncementsV2'
Failed to load 'Class FlagAnnouncementsV2.FlagAnnouncements': Can't find file for package 'FlagAnnouncementsV2'
SniperArena CTF-Face.SniperArena0 (Function Botpack.Arena.AddMutator:0009) Accessed None
Add mutator ZeroPingPlus103.ZP_SniperArena
Failed to load 'ZeroPingPlus103': Can't find file for package 'ZeroPingPlus103'
Failed to load 'Class ZeroPingPlus103.ZP_SniperArena': Can't find file for package 'ZeroPingPlus103'
SniperArena CTF-Face.SniperArena0 (Function Botpack.Arena.AddMutator:0009) Accessed None
Add mutator KickIdlePlayers2.KickIdlePlayers2
Failed to load 'KickIdlePlayers2': Can't find file for package 'KickIdlePlayers2'
Failed to load 'Class KickIdlePlayers2.KickIdlePlayers2': Can't find file for package 'KickIdlePlayers2'
SniperArena CTF-Face.SniperArena0 (Function Botpack.Arena.AddMutator:0009) Accessed None
UdpServerQuery(crt): Port 7778 successfully bound.
DoUplink is not set. Not connecting to Master Server.
DoUplink is not set. Not connecting to Master Server.
DoUplink is not set. Not connecting to Master Server.
Webserver is not enabled. Set bEnabled to True in Advanced Options.
Initiating local logging...
Initiating world logging...
Game engine initialized
UDP recvfrom error: 11 from 0.0.0.0:0
Gee
Novice
Posts: 4
Joined: Wed Sep 09, 2020 9:45 pm

Re: Ultimate UT99 Server in Docker - Need your help

Post by Gee »

and i can not access the system folder inside the docker
User avatar
Barbie
Godlike
Posts: 2792
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: Ultimate UT99 Server in Docker - Need your help

Post by Barbie »

Gee wrote: Wed Sep 09, 2020 10:20 pmFileNotFoundError: [Errno 2] No such file or directory: '//ut-server/System/UnrealTournament.ini'
I guess this is the problem. Either put your UT installation to directory "/ut-server" or change the entries in "ut99-server/files/Scripts/prepare.py" to your needs:

Code: Select all

#!/usr/bin/python3

import sys, os

# Preparations
utServerPath = "/ut-server"
utDataPath = "/ut-data"
utServerPath should point to your UT installation.
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
Gee
Novice
Posts: 4
Joined: Wed Sep 09, 2020 9:45 pm

Re: Ultimate UT99 Server in Docker - Need your help

Post by Gee »

but i use the docker container from Roemer, i cant cange the paths
User avatar
asosed
Adept
Posts: 277
Joined: Fri May 15, 2020 2:36 pm
Location: Russia
Contact:

Re: Ultimate UT99 Server in Docker - Need your help

Post by asosed »

Roemer, you probably didn't notice (because you are using the Instagib weapon) that there is a bug in the CustomCrossHairScale mutator. The error is this. I type in the console the command to change the crosshair size. For example "mutate ch_scale 1". The command works correctly and the crosshair changes in size. But when I switch to the weapon: sniper rifle, rocket launcher and redeemer, the original crosshair appears. As a result, I see two crosshairs in one place: a modified one and an original one. Everything works correctly with the rest of the weapons. The bug happens in the weapons that all have a custom crosshair in some mode of each weapon. The redeemer has it's secondary fire mode remote pilot, the sniper of course with its zoom scope, and the rocket launcher has the red color custom crosshair when it locks onto a target.
Image
Post Reply