Nexgen Auto Team Balancer (NexgenATB) is a completely rewritten version of nogginBasher's AutoTeamBalance for the Nexgen Server Controller.
The mod is is still in beta testing; you can access the latest version from GitHub. Please report any bugs, feedback or requests to me via GitHub or into this topic.
Improvements regarding the original AutoTeamBalance mod
- Players are identified using their Nexgen ID and no longer by nickname/IP adress. This prevents the system from accidently "forgetting" a players strength.
- Graceful database access. Locating a player inside the database is stretched over several game ticks which protects the gameserver's performance.
- Players joining mid-game are put into a waiting state before being assigned a team and being able to play. This way, several players joining can be considered together for fair team assignment.
- In case of uneven team sizes, NexgenATB waits a fair amount of time in case a player has lost connection / needs to reconnect.
- Players who leave before the game ends and the strengths are updated are also considered for the computation and their strength is updated as well.
- Only the real play time of player's are considered; i.e. when they go spectate for 5 minutes during a game, this time will not be considered in the final strength calculation. This also provides full compatibility with Nexgen's stats restoring functionality.
- The system fully utilizes Nexgen's game states and therefore the option `Let Nexgen handle the gamestart` can be enabled, including the corresponding countdown.
Click for full Documentation
Click for latest Beta Release + Download
Sp0ngeb0b, topic title:AutoTeamBalance 2020 wrote:The corona crisis has given me quite some time which I'm using to finally tackle several issues with the well known AutoTeamBalancer (ATB) from nogginBasher. Since my gameserver has returned, I've observed its behaviour and identified the (from my pov) main problems:
- Players are only identified using their nick/IP adress. This results in regular players suddently starting from the default value which can cause uneven teams.
- The event-driven nature of ATB requires the server to go through its database in a single pass. This can lag the server if the db is large.
- Players joining mid-game are immediately assigned to the weaker team. However, on my server clients tend to wait in spectator mode until another player joins. ATB doesn't recognize this situation which can uneven the teams in case the later joined player is stronger.
- Players reconnecting can cause rebalancing in case the team size difference temporarily exceeds two.
- Insufficient wait time at gamestart, players joining after the initial team sort is done.
Some of the issues might also be caused by insufficient configuration (most likely the last point); however, keeping an overview of the available ATB settings is not that easy (just open its default config file ).
Now, I've first considered modifiying ATB, but soon realized that it's probably best to give it a fresh start and rewrite it completely. I've decided to go with a server-side-only Nexgen Plugin, as it makes sense to use the (unique) Nexgen ID of the players to always recognize them. The above mentioned problems are solved in the following ways:
The original ATB contains a lot of additionals features which are only remotely related to team balancing, but rather for server management. I've stripped all of these and only implemented the core features I like to see on my server to provide fair teams. This does not include mid-game rebalance by strength difference or player request, but only by team size difference at the moment. I'm planning on putting a first Beta version on my server in the next days.
- Using the Nexgen ID as a unique identifier
- Since the Nexgen ID is not available server-side at the join event anyway, the system can now stretch the database search over several ticks and prevent the server from overloading
- Players joining mid-game will be put into a waiting state before being assigned to a team. This way, several new players can be considered in the team assignment.
- Teams are only rebalanced in case of a size difference after an appropriate wait time if a player just left.
- The system fully utilizes Nexgen's game states and therefore the option 'Let Nexgen handle the gamestart' can finally be enabled - this allows for configuring corresponding wait times.
What's the purpose of this thread?
Bragging rights Jking, I want to use this thread+poll to query the community if there is still interest for such an update. Depending on the response, I may readd missing features and put more focus on the "general applicability" and not only for my needs. There is one limitation whatsoever: Since I'm a Nexgen maniac, this whole rewrite will remain a Nexgen plugin and therefore require the gameserver to run it.
PS: I've finally managed to get most of my UT stuff to GitHub. You can check the ongoing development for NexgenATB here