Coder Social home page Coder Social logo

roemer / ut99-server Goto Github PK

View Code? Open in Web Editor NEW
77.0 8.0 27.0 551.99 MB

A dockerfile for a fully functional and easy configurable Unreal Tournament 99 server.

License: MIT License

Dockerfile 6.45% Shell 0.85% Python 79.17% Batchfile 0.69% Go 12.85%

ut99-server's Introduction

ut99-server

A dockerfile for a fully functional and easy configurable Unreal Tournament 99 server. This image is based on the original linux server 436 with all four bonus packs and the OldUnreal 469c patch for linux. It also includes some famous maps and mutators. All data can be adjusted with a named volume (host bind won't work) (see Usage for details).

Usage

Just run the docker image with the following command:

docker run --name ut99 -p 5580:5580 -p 7777:7777/udp -p 7778:7778/udp -p 7779:7779/udp -p 7780:7780/udp -p 7781:7781/udp -p 8777:8777/udp -p 27900:27900 -p 27900:27900/udp -v ut99-data:/ut-data roemer/ut99-server:latest

Alternatively, you can use compose with the file docker-compose.yml and run it:

docker compose up

This will create and run the container, exposing the web-admin under port 5580 and the game under 7777. It will also create a docker volume named ut99-data which contains all the ini files and non-standard maps and mods. You can even add your own maps and mods there or edit all the ini files in that volume and restart the server to load the new files or configs. This basically works by having this files in this volume and on start of the server, all files in the volume are symlinked into the corresponding ut-server folder.

Environment Variables

Variable Mandatory Description
UT_SERVERURL Yes This is the default uri for the server startup. By default, it looks like: CTF-Face?game=BotPack.CTFGame?mutator=BotPack.InstaGibDM,MVES.MapVote,FlagAnnouncementsV2.FlagAnnouncements
UT_SERVERNAME No If this variable is set, it will always override the server name in UnrealTournament.ini with this on startup.
UT_ADMINNAME No If this variable is set, it will always override the admin name in UnrealTournament.ini with this on startup.
UT_ADMINEMAIL No If this variable is set, it will always override the admin email in UnrealTournament.ini with this on startup.
UT_MOTD1 No If this variable is set, it will always override the MOTD1 in UnrealTournament.ini with this on startup.
UT_DOUPLINK No If this variable is set, it will always override the DoUpLink in UnrealTournament.ini with this on startup. Default is true.
UT_ADMINPWD No If this variable is set, it will always override the admin password in UnrealTournament.ini with this on startup.
UT_GAMEPWD No If this variable is set, it will always override the game password in UnrealTournament.ini with this on startup.
UT_WEBADMINUSER No If this variable is set, it will always override the web admin username in UnrealTournament.ini with this on startup.
UT_WEBADMINPWD No If this variable is set, it will always override the web admin password in UnrealTournament.ini with this on startup.
UT_MINPLAYERS_DM No Set the minimum number of players in DeathMatchPlus.
UT_MINPLAYERS_CTF No Set the minimum number of players in CTF.
UT_INITIALBOTS_DM No Set the initial number of bots in DeathMatchPlus.
UT_INITIALBOTS_CTF No Set the initial number of bots in CTF.

Volumes

As mentioned above, there is one named volume that should point to /ut-data in the container. This folder contains all important folders (Maps, Music, Sounds, System, Textures) where any non-standard files can be placed and will be loaded on the next restart of the server/container. Also all ini files can be found there in the System folder so they can be adjusted as well.

Included Mods and Mutators

BunnyTrack

BunnyTrack is ready to use. Change the GameType to it to use it.

ChaosUT

ChaosUT and a few maps are added. Change the GameType to it to use it.

CustomCrossHairScale

This mod is loaded permanently. It allows to scale the crosshair as it might be too big on some resolutions. Any player can just go to their console (tab) and execute the following command: mutate ch_scale 1 Note: Usually fails for weapons with a secondary crosshair like sniper, so it is mostly only usefull for InstaGib.

FlagAnnouncementsV2

This mod is added as a mutator. So it must be added to the mutators list to work. When this mod is enabled, there is a voice that tells if and which flag is taken/dropped/returned. Further configuration can be done in the System/FlagAnnouncements.ini file.

InstaGibPlus

Better InstaGib. Thanks to: https://github.com/utspect/InstaGibPlus

KickIdlePlayers2

This mod is added as a mutator. So it must be added to the mutators list to work. When this mod is enabled, inactive users will be kicked from the server. Further configuration can be done in the System/KickIdlePlayers2.ini file.

MonsterHunt

MonsterHunt and a few maps are added. Change the GameType to it to use it.

MVE - Map Vote Extended

This mod is added as a mutator. So it must be added to the mutators list to work. When this mode is enabled, a map vote / kick screen will come after each map so the users can vote for the next map. You can start a vote anytime by saying !v. IF you login as admin with adminlogin <password> you see an additional admin tab. Thanks to the author: https://github.com/peterekepeter/ut99-mves Further configuration can be done in the System/MVE_Config.ini file.

VoteSys

An alternative map voting. Still in testing phase. Thanks to the author: https://github.com/Deaod/VoteSys

NoSelfDamagev03

This mod is added as a mutator. So it must be added to the mutators list to work. When this mod is enabled, self damage (for example from rocket launchers) can be disabled. Further configuration can be done in the System/NoSelfDamage.ini file.

SLV - StrangeLove v2.05

SLV, or Strangelove, is a mod inspired by the film Dr. Strangelove where redeemers are replaced with missiles that a player can use to fly around a map.

WhoPushedMe

This mod is added as a mutator. So it must be added to the mutators list to work. When this mode is enabled, detects if someone is killed because someone else pushed/hit them and they fell to their death and grants the killer the corresponding points (or negative points when a teammate is killed).

ZeroPingPlus103

This mod is added as a mutator. So it must be added to the mutators list to work. When this mod is enabled, the clientside calculates if a hit was a hit or not and tells this the server, effectively leading to 0 ping.

ut99-server's People

Contributors

bymatej avatar dud1337 avatar rikiku avatar roemer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ut99-server's Issues

Update to 469b causes failed import error

Using the default build in this repo: docker-compose up on the docker-compose.yml allowing a new volume to be created.

  • docker-compose version: 1.29.2
  • docker version: 19.03.13
ut99-server_1  | =======================================
ut99-server_1  | ucc.exe: UnrealOS execution environment
ut99-server_1  | Copyright 1999 Epic Games Inc
ut99-server_1  | =======================================
ut99-server_1  | 
ut99-server_1  | Executing Class Engine.ServerCommandlet
ut99-server_1  | Unreal engine initialized
ut99-server_1  | Browse: CTF-Face?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.InstaGibDM,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements
ut99-server_1  | LoadMap: CTF-Face?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.InstaGibDM,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements
ut99-server_1  | Bound to Fire.so
ut99-server_1  | Bound to IpDrv.so
ut99-server_1  | Collecting garbage
ut99-server_1  | Purging garbage
ut99-server_1  | Garbage: objects: 17369->17369; refs: 229313
ut99-server_1  | Game class is 'CTFGame'
ut99-server_1  | Sockets: Socket queue 262144 / 262144
ut99-server_1  | Sockets: I am 8256334c83db (172.24.0.2)
ut99-server_1  | TcpNetDriver on port 7777
ut99-server_1  | Server Package: SoldierSkins
ut99-server_1  | Server Package: CommandoSkins
ut99-server_1  | Server Package: FCommandoSkins
ut99-server_1  | Server Package: SGirlSkins
ut99-server_1  | Server Package: BossSkins
ut99-server_1  | Server Package: Botpack
ut99-server_1  | Server Package: CCHS4
ut99-server_1  | Server Package: FlagAnnouncementsV2
ut99-server_1  | Server Package: DefaultAnnouncements
ut99-server_1  | Server Package: KickIdlePlayers2
ut99-server_1  | Server Package: MapVoteLAv2
ut99-server_1  | Server Package: EnhancedItems
ut99-server_1  | Bound to UWeb.so
ut99-server_1  | Failed import: BoolProperty BoolProperty Botpack.ChallengeHUD.bSmoothCrosshair (file Botpack.u)
ut99-server_1  | Failed to load "UTMenu": Can't find BoolProperty in file "BoolProperty Botpack.ChallengeHUD.bSmoothCrosshair"..
ut99-server_1  | Failed to load "EnhancedItems": Can't find BoolProperty in file "BoolProperty Botpack.ChallengeHUD.bSmoothCrosshair"..
ut99-server_1  | appError called:
ut99-server_1  | Failed to load "EnhancedItems": Can't find BoolProperty in file "BoolProperty Botpack.ChallengeHUD.bSmoothCrosshair"..
ut99-server_1  | Executing UObject::StaticShutdownAfterError
ut99-server_1  | Failed to load "EnhancedItems": Can't find BoolProperty in file "BoolProperty Botpack.ChallengeHUD.bSmoothCrosshair"..
ut99-server_1  | 
ut99-server_1  | History: UObject::SafeLoadError <- UObject::GetPackageLinker <- UGameEngine::BuildServerMasterMap <- ULevel::Listen <- Listen <- UGameEngine::LoadMap <- LocalMapURL <- UGameEngine::Browse <- UGameEngine::Init <- UServerCommandlet::Main
ut99-server_1  | 
ut99-server_1  | Exiting due to error
ut99-server_1  | Exiting.
ut99-server_ut99-server_1 exited with code 

Seems to be related to an error importing bSmoothCrosshair from Botpack.u
bSmoothCrosshair was not found in prior versions of Botpack or UTMenu, only 469b

https://github.com/OldUnreal/UnrealTournamentPatches does not appear to have issues mentioning this.

Can see just one weapon.

Hi, everything works fine but why i can see just one weapon in all maps? I have only the shock rifle with unlimited ammo.

Unable to add a ServerPackages

Hi !

i'm trying to add a "ServerPackages=" line in UnrealTournament.ini.

So I'm doing the following :

  • Turning off the docker
  • Adding my line
  • Turning it on

After the restart, the line I've added in UnrealTournament.ini is erased, and if I ssh into the container, I can't see it either in the UnrealTournament.ini file.

Am I doing something wrong ?

Thanks

Couple questions

I had dropped these questions over on reddit also, but I just got this up and going this morning, you're an absolute awesome fine individual for doing this!!!

Couple questions from someone that knows almost nothing about doing a server for UT99, and I'm more trying relive my favorite game that I played when it came out new.

In the webUI, there is a "current" setting section and "default" settings section. It would appear that the default settings live through a container reboot, but the current ones do not.

Where does the default settings live vs where does the current settings live?

Can I set it up so the current settings live through a reboot?

I'm basically trying to get mutators to live through a reboot.

I'm running into a map mismatch error on some maps when they load, which requires me to clear out the cache in my personal copy of UT. I swore I read about this was be addressed in the 469b update, is there thoughts on why this would still be happening?

Thanks for all the hard work!!

Enabling UT_DOUPLINK causes the server to crash on startup.

If UT_DOUPLINK is set to true, the server throws the following error. This also happens if "Advertise Server" is ticked in the web admin page.

Signal: SIGSEGV [segmentation fault]
Aborting.
Exiting.
Name subsystem shut down
Allocation checking disabled
/startup.sh: line 7:     7 Segmentation fault      (core dumped) /ut-server/ucc server $UT_SERVERURL ini=UnrealTournament.ini log=ut.log -nohomedir -lanplay

Missing weapons

Hey mate, just set this up to play with some mates, super easy to get up and going, much appreciated!

Having some trouble getting items to load into the game, currently only loading with the shock rifle, nothing else. Would you know how I can enable the rest of the weapons?

Using the default config in the README
CTF-Face?game=BotPack.CTFGame?mutator=BotPack.InstaGibDM,MapVoteLAv2.BDBMapVote,FlagAnnouncementsV2.FlagAnnouncements

Thanks again!

ucc-bin using 100% of available CPU

Lately I've noticed that after a few players join my server, the CPU usage will go to 100% and the server becomes unresponsive. I'm not sure how long they are connected for or what's going on to cause this as the logs that I've seen aren't amazing.
It does look like there's a number of people who have been able to join the server over the last few days without issue.

Can anyone give me any pointers in troubleshooting a UT server?

I'm using the latest version of the image.

I wonder if we could add a health check to the docker container to detect this and restart it?

Why broken with a host bind?

Hi

I'm trying to run this in my kubernetes cluster, and it keeps failing on prepare.py, something with the symlinking seems to fail miserably, and i can't pinpoint what exactly. You mention that in docker-land a host bind doesn't work, needs to be a named volume. And indeed, if I try to use a host bind, the fail looks the exact same way.

What's the additional thing that docker does here?

Arm compatibility

thank you for the great work, have already spent hours playing again with some friends.
is it somehow possible to get the whole thing running on an arm based docker machine?

Password Issues

For the life of me, including confirming UnrealTournament.ini variables match the containers variables. I cannot get the web login to login. I can get to the http auth prompt, however no combination of any of my passwords / UN log me in.

Any assistance?

a couple of questions

hi, thanks a lot for the great job, I'm living again some damn good old school fragging with friends thanks to this repo!

I have just some questions:

  1. there is any way to add some maps to package? ( especially the DM-Morbias][ )
  2. How to set bots difficulty?

cheers

ChaosUT?

Hi!

Is it possible to add ChaosUT to the server`?

Greetz Sam

Not Advertising

Hello, i see this used a bridged network not host. I can connect to the server via ip address but not see it in the LAN server lists. I have checked advertise server, restart etc but still no joy. Any idea please? is it s port?

Cheers
Mark

Mac Intel running docker container

When i try to run this command:

docker run --name ut99 -p 5580:5580 -p 7777:7777/udp -p 7778:7778/udp -p 7779:7779/udp -p 7780:7780/udp -p 7781:7781/udp -p 8777:8777/udp -p 27900:27900 -p 27900:27900/udp -v /Users/dfiles/ut99-data:/ut-data roemer/ut99-server:latest

the container exit and this is the log:

2023-04-14 12:25:24 [D] System/User.ini
2023-04-14 12:25:24 [D] System/UnrealTournament.ini
2023-04-14 12:25:25 WARNING: Not using preference directory
2023-04-14 12:25:25 WARNING: Using system ini file: /ut-server/System/UnrealTournament.ini
2023-04-14 12:25:25 WARNING: Using user ini file: /ut-server/System/User.ini
2023-04-14 12:25:25 Executing Class Engine.ServerCommandlet
2023-04-14 12:25:25 Unreal engine initialized
2023-04-14 12:25:25 Browse: CTF-Face?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.InstaGibDM,MVES.MapVote,FlagAnnouncementsV2.FlagAnnouncements
2023-04-14 12:25:25 LoadMap: CTF-Face?Name=Player?Class=Botpack.TMale2?team=255?skin=SoldierSkins.blkt?Face=SoldierSkins.Othello?game=BotPack.CTFGame?mutator=BotPack.InstaGibDM,MVES.MapVote,FlagAnnouncementsV2.FlagAnnouncements
2023-04-14 12:25:25 Bound to Fire.so
2023-04-14 12:25:25 Bound to IpDrv.so
2023-04-14 12:25:25 Collecting garbage
2023-04-14 12:25:25 Purging garbage
2023-04-14 12:25:25 Garbage: objects: 17552->17552; refs: 228538
2023-04-14 12:25:25 Game class is 'CTFGame'
2023-04-14 12:25:25 Failed to listen: WinSock: socket failed (-158096060)
2023-04-14 12:25:25 appError called:
2023-04-14 12:25:25 Dedicated server can't listen: WinSock: socket failed (-158096060)
2023-04-14 12:25:25 Executing UObject::StaticShutdownAfterError
2023-04-14 12:25:24 Traceback (most recent call last):
2023-04-14 12:25:24 File "/prepare.py", line 325, in
2023-04-14 12:25:24 main()
2023-04-14 12:25:24 File "/prepare.py", line 18, in main
2023-04-14 12:25:24 prepare()
2023-04-14 12:25:24 File "/prepare.py", line 149, in prepare
2023-04-14 12:25:24 for entry in os.listdir(folderPath):
2023-04-14 12:25:24 FileNotFoundError: [Errno 2] No such file or directory: '/ut-data/Maps'
2023-04-14 12:25:25 terminate called after throwing an instance of 'wchar_t*'
2023-04-14 12:25:25
2023-04-14 12:25:25 Developer Backtrace:
2023-04-14 12:25:25 [ 1] /ut-server/System/Core.so(_Z12HandleSignali+0x20b) [0xf78af78b]
2023-04-14 12:25:25 [ 2] linux-gate.so.1(__kernel_sigreturn+0) [0xf7f2f560]
2023-04-14 12:25:25 [ 3] linux-gate.so.1(__kernel_vsyscall+0x9) [0xf7f2f549]
2023-04-14 12:25:25 [ 4] /lib/i386-linux-gnu/libc.so.6(+0x88a37) [0xf751ea37]
2023-04-14 12:25:25 [ 5] /lib/i386-linux-gnu/libc.so.6(gsignal+0x25) [0xf74cd685]
2023-04-14 12:25:25 [ 6] /lib/i386-linux-gnu/libc.so.6(abort+0xee) [0xf74b63ac]
2023-04-14 12:25:25 [ 7] /ut-server/System/Core.so(_ZN9__gnu_cxx27__verbose_terminate_handlerEv+0x132) [0xf78c6382]
2023-04-14 12:25:25 [ 8] /ut-server/System/Core.so(_ZN10__cxxabiv111__terminateEPFvvE+0x14) [0xf78c3504]
2023-04-14 12:25:25 [ 9] /ut-server/System/Core.so(+0xe357d) [0xf78c357d]
2023-04-14 12:25:25 [10] /ut-server/System/Core.so(+0xe39bb) [0xf78c39bb]
2023-04-14 12:25:25 [11] /ut-server/System/Core.so(_Z9appThrowfPKwz+0x53) [0xf7889763]
2023-04-14 12:25:25 [12] ./ucc-bin() [0x804e3b5]
2023-04-14 12:25:25 [13] ./ucc-bin() [0x804da92]
2023-04-14 12:25:25 [14] /lib/i386-linux-gnu/libc.so.6(+0x21519) [0xf74b7519]
2023-04-14 12:25:25 [15] /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0x93) [0xf74b75f3]
2023-04-14 12:25:25 [16] ./ucc-bin() [0x804c0a1]
2023-04-14 12:25:25 Signal: SIGIOT [iot trap]
2023-04-14 12:25:25 Aborting.
2023-04-14 12:25:25
2023-04-14 12:25:25 Error reentered: Throwing C++ exception for error logging
2023-04-14 12:25:25 Signal: SIGIOT [iot trap]
2023-04-14 12:25:25
2023-04-14 12:25:25 History: (no backtrace available.)
2023-04-14 12:25:25
2023-04-14 12:25:25 Exiting due to error
2023-04-14 12:25:25 Exiting.

how can i solve?

Cannot start server

I've tried both the compose file and docker run but both get me
Commandlet server not found

I've removed the docker volume between the 2 methods to clean up, Any ideas?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.