Backend and plugin made by Higor.
This is supposed to run with the MVLA14UUb13C frontend by Gust.
I will not distribute the above file as it hasn't been officially released, you may
ask Gust for it or join one of the servers running this mapvote and retrieve it from the
If you have a different version of the file, it may end up working with a bit of bytehacking.
=== Installation ===
In /System folder(s):
- MVLA14UUb13C.u (frontend by Gust, not provided here)
- CacusMapVote.int (if you wish to run and setup the mutator within the UT client)
If you're not using the INT file (dedicated server?), you may start/shutdown the server
with said mutator loaded to autogenerate the CacusMapVote.ini configuration file.
Add to [GameEngine]'s ServerPackages list the frontend MVLA14UUb13C, unless you're running
XC_GameEngine version 11 or above.
=== Setting up the basic options ==
Can be done on the INI file (shut down server first), or on the Advanced Options dialog (Preferences command).
Any unmentioned settings should never be changed from their defaults as they're not
entirely functional or simply require them to stay on these values.
The value displayed first is always the default one.
Allow transferring the map list using an internal HTTP webserver
Base address for HTTP map list transfer protocol (ex: 192.168.1.2:27011)
HTTP port, for internal usage, must match the one specified above (ex:27011)
- ServerCodeName= [autogenerated on first map reload if empty]
Customize server name for client cache entries, only simple chars/numbers (ex: SuperDuperServer)
Time left for voting after map ends, in seconds
PID_Default > ID players by IP (kickvoting fails on online players in same LAN)
PID_NexGen > ID players using NexGen (1 match ban issued when kickvoting occurs, NexGen MUST be running)
Annoying welcome keybinder window
Allow specs to vote maps?
Auto open vote window on map end
Let CacusMapVote handle ALL the ServerPackages list setup every map
Doesn't need to be enabled if XC_GameEngine version 11 or above is running.
One-time switch, saves current ServerPackages list as default CMV Packages list
Requires bOverrideServerPackages=True, resets itself to false once finished.
List of base ServerPackages
Never run with bOverrideServerPackages if empty unless bResetServerPackages=True
It's recommended to autogenerate it and then change it to convenience.
If you're running XC_GameEngine version 11 or greater ignore this setting.
Do not allow maps with more accumulated points than specified here to be voted
Accumulate these points on a map once it wins a votation
All maps that accumulate points will have -1 point substracted on each map switch.
Internal index for the default gametype to apply when server starts up
- CustomGame[0 - 47]
CMV does not use default game types, all gametypes must be registered as custom games.
-- bEnabled (bool)
Consider it during map list generation.
-- GameName (string)
Give it a name.
-- RuleName (string)
Give it a category name
-- GameClass (string, Package.Class)
Game class to load.
-- FilterCode (short string, no spaces)
Use all map filters with the above tag during list generation.
Maps of any name/prefix may be used with your gametype!
-- bHasRandom (bool)
Add a 'random' map option to the map list
-- bNoCooldown (bool)
Maps don't become unavailable after being voted.
-- VotePriority (float)
Make maps from this gametype require more votes.
If negative, all players must vote in order for mid game voting to kick-off.
-- MutatorList (string, "Package.Class,Package.Class,etc")
Load and setup these mutators AFTER GameInfo Init, before map actor BeginPlay events
-- Settings (string, "Setting=Value,Setting2=Value,etc")
Apply these settings AFTER GameInfo Init, before map actor BeginPlay events
-- Packages (string, "Package,Package,etc")
Add these extra ServerPackages (to the base list) for this gametype.
Requires [XC_GameEngine version 11] or [bOverideServerPackages=True and a MainServerPackages list].
WARNING: The whole line must have less than 1024 characters!!
- MapFilters[0 - 255]
String, format is "FilterCode FilterRule" (one space between)
FilterCode is the tag used by gametypes
FilterRule may go as "PREFIX*" or "EXACTNAME" (CTF-*, CTF-Niven, MapWithoutPrefix)
- ExcludeFilters[0 - 255]
Same as above, applied after MapFilters to negate certain results
=== Startup ===
CacusMapVote runs as a mutator (CacusMapVote.CacusMapVote) and will take most of BDBMapVote's mutate commands.
Initially setting up the game mode list should be done before reloading the map lists but
it can be done for testing the mapvote's functionality.
Reloading the map list may be a slow process and can cause all players to disconnect if it takes more than 10 seconds.
The map list can be manually reloaded by logging in as administrator and entering the following command:
- MUTATE BDBMAPVOTE RELOAD
=== Maintenance ===
The admin panel is almost entirely inoperative, map list reloading is the only thing that works.
The server should be shut down before doing setting changes.
The history setting file isn't suited for manual editing.
The map list setting file must have matching real and 'counted' map count or will fail to display on clients.
=== Usage ===
The following say commands are identified as mapvote window openers:
!v, !vote, !mapvote, !kickvote
Map vote only operates in majority mode.
Kick vote requires at least 4 votes to kick in, this has be done to prevent kicking players when
player count is too small, players may not kick NexGen moderators (NexGen mode), admins or themselves.
Casting a kickvote on an invalid target resets the kick vote to none.
You may cast a kick vote on yourself to clear your vote.
Admins may force maps and kickvotes.
During NexGen mode, kickvoting a player will issue a 1 match NexGen ban instead.
=== HTTP webserver ===
There has not been done extensive testing on security and reliability, therefore it is disabled by default.
The webserver will reject queries from IP's that don't match any of the ingame players as a security measure.
The webserver will reject queries with invalid parameters (known only to the mapvote frontend).
You do not need to edit or activate the default webserver module.
An alternate one is created with the map list sender as it's only WebApp.
If you do have default webserver running, make sure to use a different port.
Don't forget to forward said ports.
=== Premade map lists ===
Premade map lists are created via filters, all it takes is a filter starting with "premade".
Premade list is useful to force a specific order on an arbitary map set.
The default config has "premadesp" as an example in filter slots 100-138.
Premade lists do not do map checks! So make sure every single map in the list loads.
You cannot add wildcards to premade filters, they do exact map name checks.
Map names in premade lists must not contain extension.
Obviously, premade lists do not work at all in 'Exclude' lists.
=== Aliasing ===
You may alias a text into a smaller wildcard within the characters <,>
This is useful for readability, and quick updates of multiple gametypes that share mutators/packages.
Aliasing can be used on the following settings:
=== Dynamic Package Loading ===
If your server is running XC_GameEngine version 11 or above, you don't need to use the old
and unsafe dynamic package loader, simply specify the optional packages that don't implement
this themselves and CacusMapVote will add them so that clients may download them!
Just specify in 'ServerPackages' a common base list of packages and add to each game mode's
Package variable the packages you want to be loaded.
The XC_GameEngine package loader occurs at map start instead of before map switch, making
it work on servers with a properly setup Crash map and default gametype!!
Regarding the MVLA14UUb13C, this is also covered by this feature.
=== Contact ===
Higor - UT99.org