TitleMap-Vote 3
GameUnreal Tournament
Version3.00
Release Date4/16/2001
FilenamesBDBMapVote3.u, BDBMapVote3.int
AuthorBruce Bickar aka BDB
Email AddressBDB@planetunreal.com or BBickar@carolina.rr.com
Web Pagehttp://www.planetunreal.com/BDBUnreal
DescriptionThis mutator allows players to control what maps are played on a server through voting.
Features
- Graphical user interface. At the end of each game a Voting Window will pop up automatically,
  so no key binding is required and there are no console commands to remember.
  
- Screen-Shot preview. When a map is selected a screen-shot (picture) of the map will be displayed 
  along with information about the map such as the author and the recommended number of players. 
  If the player doesn't have the selected map file on their computer then it will indicate that 
  downloading is required.
  
- Mid game map change option. The players can vote for a map at any time during the course of the 
  game. If the required percentage of players place votes a Mid-Game vote will be initiated and all
  of the players voting windows will be opened. They will have a limited time to vote.
  
- Players can configure a keyboard key that can be used at any time during the game to open the 
  voting window. This is not required because the voting window can/will automatically open it 
  self at the end of each game. But if the players want to take advantage of the player kick voting
  or the early map voting features then this would be required. Also, the key configuration does not
  require any console commands or opening of the preferences menu. This key configuration is built 
  in to the voting window which makes it much easier to do. It also will work with-out a Mod Menu 
  INT file, this is important because INT files are not automatically downloaded from the server in 
  network play and Mod Menu configuration windows require an INT file.
  
- A KeyBinder window will automatically pop-up when a player joins to the server. This KeyBinder 
  will allow the player to select a keyboard key by pressing the key and then clicking the 
  "Set/Save" button. If a player joins a server and already has a key bound the window will pop up
  and remind him/her what the hot-key is and the close it self after 4 seconds. They can also 
  prevent the keybinder from poping up.
  
- Tie breaker feature. Each player can only vote for one map. If all of the players vote the votes
  will be counted and the map with the highest vote count will win. If there is a tie, then a map 
  will be choosen at random from the maps that tied for first place. 
  
- Player Kick feature. Players can place "kick" votes against other players. If the percentage of
  players that vote against a particular player reaches the configurable kick requirement 
  percentage then that player will be disconnected from the server. If the kicked player reconnects
  to the server during the same game that he was kicked from, he/she will be re-kicked automatically.
  To clairify, This kick/ban only lasts until the end of the current game, or until the map is 
  changed. Note: The server administrator can not be kicked. Also, kick votes are tracked by 
  PlayerID and not name so changing names will not affect it.  
  
- Remote dedicated server configuration window, which can be used by remote administrators to 
   configure Map-Vote. There are no console configuration commands to look up and remember.
  
- Works with all games types. The server administrator can configure which types of maps will be 
  loaded in to the map voting list. The following Map types can be turned on or off:
  - Auto Detect - Automatically detects the game type that the server was started with.
  - Death Match (DM)
  - Team Death Match (DM)
  - Last Man Standing (DM)
  - Assault (AS)
  - Capture The Flag (CTF)
  - Domination (DOM)
  - Other Game Type - This is a configurable game type. It can be used for Mods like Rocket-Arena,
    Tactical-Ops, Strike-Force and any other mod. (It has only been tested with Rocket-Arena 
    ,Tactical Ops, Strike-Force, and Unreal Fortress)
    
- Configurable message expiration time. Players can use this feature to change the amount of time
  that messages remain on their HUD/screen. This is good for people who can't speed read messages
  in 3 seconds.
  
- Voting status. The main window displays a list of maps that were voted for and the amount of 
  votes for each. It also shows player names that were had kick votes cast against them.
  You can now click the name of a map or player and it will select that map in the map list.
  
- Configurable End-Game voting time limit. At the end of a game the players have a set about of 
  time to place their votes. If all players have not voted with in this time limit then a map 
  change will be forced.
  
- MapVoteHistory - MapVote now keeps track of all winning maps and supplies a report that shows 
  how many times each map has been played. Note: running the report take a bit of time. It was 
  made to be slow on pupose to avoid adding lag to the server.
  
- Welcome Window - MapVote now has an optional welcome window the will open up when a player 
  joins the server. This welcome window can be used to communicate server specific information
  , schedules, rules, etc. Note: it requires an HTTP web server. (more details below)
  
- New Modes: MapVote now has 4 voting modes: 
  1. Majority - Each player gets to place 1 vote and the map with the most votes wins.
  2. Elimination - Maps are removed from the list until there are only X number of maps left.
  3. Accumulation - If the map that a player has voted for does not win that vote is carried 
     to the next game.
  4. Score - Player scores are used as the ammount of votes placed. So basically, the top 
     players get choose the map.
  
- Configurable No Repeat limit - You can now configure MapVote to remove the last X number 
  of maps that have been played. X being some number.
RequirementsRequired version 413 or better of Unreal Tournament. (This include the players as well as the server)
Installation Instruction Note: If you currently have a previous version of MapVote installed you may want to uninstall it by deleting BDBMapVote2.u and BDBMapVote2.int.
If you downloaded the UMOD version just double click it and it should install it self.
If you downloaded the ZIP version:
  1. Place BDBMapVote3.int in the \UnrealTournament\System directory.
  2. Place BDBMapVote3.u in the \UnrealTournament\System directory.
  3. ***Note: this if very important, it will not work without this.
    Add "ServerPackages=BDBMapVote3" to the \UnrealTournament\system\UnrealTournament.ini file under the "[Engine.GameEngine]" section.
Other files:
  • BDBMapVote3.u.uz - this is the compressed version for servers that have redirected downloads enabled.
  • ServerInfo.htm - this is an example server information file for the Welcome Window
Server Setup
  1. Set the settings that you want for each game type using the normal UT menus or edit the UnrealTournament.ini file.
  2. For example set the number of frags in deathmatch before the match ends and then change to CTF and change the number of flag capture's before the match ends. Close the Multiplayer window to save the settings.
  3. Select any mutators that you want plus the "Map-Vote" mutator.
  4. Start the game. (see dedicated server setup below for dedicated servers)
Configuration There are two ways to configure Map Vote on a server. Configuration Methods: (choose one and only one) Note: There is No MOD menu configuration menu with version 3.
A.
  1. Open the UnrealTournament.ini file, located in the \UnrealTournament\System directory, with any text editor.
  2. Modify the values for each parameter after the = to True or False. If you want only CTF maps to be loaded in the map list then change the value after bCTF= to True and the rest of the values to False.
Example UnrealTournament.ini file contents:
-----------------------------------------
[BDBMapVote3.BDBMapVote3]
bAutoDetect=True
bDM=False
bLMS=False
bTDM=False
bDOM=False
bCTF=False
bAS=False
bOther=False
MsgTimeOut=30
OtherClass=SFGame.SFTeamDM
VoteTimeLimit=70
KickPercent=51
bUseMapList=True
ScoreBoardDelay=10
bAutoOpen=True
bKickVote=True
bTOTieGameFix=True
bCheckOtherGameTie=False
... there are more
------------------------------------------
Note: This section will not be present until you run UT and save the configuration.
B. (This method is for configuring a remote dedicated server)
  1. Start the server with the "Map-Vote" mutator. (See decicated server setup instructions below)
  2. Connect to your server with UT.
  3. Login as Admin with the "ADMINLOGIN password" console command. Note: If you don't see a message like "YourPlayerName has become the administrator" then the password was wrong.
  4. Press you MapVote HotKey. You should have seen the KeyBinder window when you first joined the server.
  5. Click the "Admin" tab which should be all the way to the right. If there is No "Admin" tab then you have not successfully logged in as administrator, close the window and go back to step 3.
  6. Change the options in the scrolling Admin window. There is a second half of the page which does not show. Just use the scroll bar on the far right to scroll down.
  7. Click the "Save" button. This will save your selected options on the remote server and reload the maplist on the server.
  8. Now close and reopen the voting window to refresh the map list.
OtherGame Classes If you want to use Map-Vote with a MOD then you can just use the Auto Detect option. This will setup the game class automatically when the server is stared.
You still have the option of specifing the Other Game Class option and Check the Other Mod Game check box in the Configuration window. You would have to do this if you wanted to have a MOD and UT maps/games types available for voting in the same list at the same time.
Known Mod Game Classes:
-----------------------
Rocket-Arena      - RocketArena.RocketArenaGame
Tactical-Ops      - s_SWAT.s_SWATGame
Strike-Force      - SFGame.SFTeamDM
                    SFGame.SFDM
                    SFGame.SFHostageRescue
                    SFGame.SFEscape
                    SFGame.SFAssault
                    SFGame.SFJailBreak
Unreal-Fortress   - UnrealFortress.Game_UnrealFortress
Infiltration 2.85 - InfiltrationUT.InfilDeathMatchPlus
                    InfiltrationUT.InfilTeamGamePlus
                    InfiltrationUT.InfilCTFGame
                    InfiltrationUT.InfilDomination
                    InfiltrationUT.InfilAssault
                    InfiltrationUT.InfilLastManStanding
WeaponsFactory    - WFCode.WFGame 
Multi-CTF         - MultiCTF.MultiCTFGame
Advanced Server Setup For decicated server owners. Put the appropriate command and parameters (found below) in your server batch file.
Unreal-Tournament Game Types:
----------------------------
UCC server DM-Morpheus.unr?Game=Botpack.DeathMatchPlus?mutator=BDBMapVote3.BDBMapVote3 
UCC server DM-Morpheus.unr?Game=Botpack.TeamGamePlus?mutator=BDBMapVote3.BDBMapVote3 
UCC server DM-Morpheus.unr?Game=Botpack.LastManStanding?mutator=BDBMapVote3.BDBMapVote3 
UCC server AS-Guardia.unr.unr?Game=Botpack.Assault?mutator=BDBMapVote3.BDBMapVote3 
UCC server CTF-LavaGiant.unr?Game=Botpack.CTFGame?mutator=BDBMapVote3.BDBMapVote3
UCC server DOM-Cinder.unr?Game=Botpack.Domination?mutator=BDBMapVote3.BDBMapVote3 
Rocket-Arena:
-----------------------------
UCC server RA-Cliffyb.unr?Game=RocketArena.RocketArenaGame?mutator=BDBMapVote3.BDBMapVote3 
Note: There is a small conflict with the MapVote Welcome & KeyBinder windows and the 
      RocketArena Start Menu. So you will want to disable these windows in the Admin 
      configuration window under the Advanced section.
Tactical Ops: (as of Version 1.6)
-----------------------------
UCC server SW-OilRig.unr?Game=s_SWAT.s_SWATGame?mutator=BDBMapVote3.BDBMapVote3 
Strike-Force:
-----------------------------
UCC server SFTDM-Canal_140.unr?Game=SFGame.SFTeamDM?mutator=BDBMapVote3.BDBMapVote3 
    -userini=SFUser.ini -ini=StrikeForce.ini
***Note: Since StrikeForce uses it's own ini file you need to edit the StrikeForce.ini 
         file and add "ServerPackages=BDBMapVote3" under the "[Engine.GameEngine]" 
         section. It will not work with-out this.
Unreal-Fortress:
---------------------------
UCC server UNF-Cliffside.unr?Game=UnrealFortress.Game_UnrealFortress?mutator=BDBMapVote3.BDBMapVote3
***Note: UnrealFortress games can have Sudden Death OverTime during a tied game,
therefore you need to change the "Check Sudden Death Overtime" option in the configuration.
Or change bCheckOtherGameTie to True in the UnrealTournament.ini file.
Infiltration 2.85:
-----------------------------
UCC server CTF-Face.unr?Game=InfiltrationUT.InfilCTFGame?mutator=BDBMapVote3.BDBMapVote3
***Note: You must enable the "Check Sudden Death Overtime" option in the configuration
         for MapVote to work correctly with Infiltration. 
Weapons-Factory:
-----------------------------
UCC server CTF-Face.unr?Game=WFCode.WFGame?mutator=BDBMapVote3.BDBMapVote3
***Note: You must enable the "Check Sudden Death Overtime" option in the 
         configuration for MapVote to work correctly with Weapons-Factory. 
MapVoteHistory
MapVote now keeps a record of maps played , the number of times each was played 
and the sequence each was played. This information is stored separate from the default 
UT ini file because of the potental large size (up to 1020 maps). By default this
information is stored in the MapVoteHistory1.ini file. I do not recommend editing 
this file manually, but if you do here is the layout: 
Example: MapVoteHistory1.ini
------------------------------------------------------------------------------
[BDBMapVote3.MapVoteHistory1]
M[0]=                <== Note: this is left blank on purpose
M[1]=AS-Coldsteel    <== M = MapName, maintained in alphabetic order
M[2]=CTF-2symple                  
M[3]=CTF-4Faces
M[4]=CTF-AAhuNui
...etc.
M[1022]=
M[1023]=
P[0]=0
P[1]=1               <== P = PlayCount
P[2]=7
P[3]=11
P[4]=9
...etc.
P[1022]=0
P[1023]=0
S[0]=0
S[1]=41              <== S = Sequence
S[2]=197
S[3]=166
S[4]=10
S[1022]=0
S[1023]=0
LastMapIndex=251                 <== This is the index nuber of the last map
----------------------------------------------------------------------------
If you run multiple servers on the same computer and want to keep history 
information separated, you can do so by configuring the MapVoteHistory 
type in the Advanced section of the Admin configuration window.
You have 4 options:
- BDBMapVote3.MapVoteHistory1  - stores history info in MapVoteHistory1.ini
- BDBMapVote3.MapVoteHistory2  - stores history info in MapVoteHistory2.ini
- BDBMapVote3.MapVoteHistory3  - stores history info in MapVoteHistory3.ini
- BDBMapVote3.MapVoteHistory4  - stores history info in MapVoteHistory4.ini 

If you have the need for more contact me and I can build
an add-in file that will provide more.

Additional Feature:
-------------------
There are two in-game console command that you can use to set
the Play Count and Sequence of each map in the History.
You have to login as Admin with the ADMINLOGIN command first.
MUTATE BDBMAPVOTE SETPC mapname play_count
MUTATE BDBMAPVOTE SETSEQ mapname sequence_number
examples:
MUTATE BDBMAPVOTE SETPC CTF-FACE 10
MUTATE BDBMAPVOTE SETSEQ CTF-FACE -1

Note: Setting the Sequence of a map to -1 forces it to never show in the 
map list. This can come in handy if you discover have a bad or just 
ill conceived map on your server but don't want to actually delete the 
file.
Welcome Window
The Welcome Window is a new feature that allows server owners to post
information for the players to see when they join the server.
When configured the Welcome Window will open as soon as the player 
joins the server. The player can then read the inforamation or just close
the window by clicking the "Close" button. 
Note: The window also opens when joining after a map switch/travel, but
      the player has the option to disable this by unchecking the check box
      at the bottom of the window titled "Show this window on Connect".
      This option will persist as until the player exits UT. 
      For example: 
      1. The player connect to your server and the Welcome window shows.
      2. The player unchecks the "Show this window" option and closes 
         the window.
      3. The current game ends , everyone votes , the map is changed.
      4. Everyone rejoins the server after the new map is loaded.
      5. The player does not see the Welcome window.
      6. The player Exits UnrealTournament because he has to feed 
         his dog or cat (or whatever).
      7. The player comes back and restarts UT and reconnects to your server.
      8. The Welcome Window will show again.
      
      This was done on purpose so that server admins can post new information
      and be sure the players have the chance to see it. 

Requirements: 1. HTTP Web server (Micro$oft IIS, HTTP server, etc.)
              2. An HTML file.
      
Welcome Window Setup:
---------------------
First you need to make the Welcome Window HTML source file.

*** The in-game web browser is very very limited.
You can not use images,tables tags,java-script, style-sheets, etc.

So, What can you use ?
Here are the comments directly from the "UWindowHTMLTextArea" class 
that is used to render the HTML:
-------------------------------------------------------------------
HTML Currently Supported
========================
Parsed on add
-------------
<body bgcolor=#ffffff link=#ffffff alink=#ffffff>...</body>
<font color=#ffffff bgcolor=#ffffff>...</font>
<br>
<center>....</center>
<p>
<h1>...</h1>

Parsed on add and display
-------------------------
<nobr>...</nobr>
<a href="...">...</a>
<b>...</b>
<u>...</u>
<blink>...</blink>

Parsed only on display
----------------------
& gt;
& lt;
& amp;
& nbsp;

Planned improvements
--------------------
<ul><li>item 1<li>item 2...</ul>
<table>...</table>

Bugs
----
The parsing is pretty slack!
------------------------------------------------------------------ 

So create an HTML and place it on your HTTP web server.
Then goto the Admin configuration window in MapVote and scroll down to 
the Advanced section.
In the "Welcome Page Web Server URL" text box enter the web server address,
port, path, and filename.
Syntax:
webservername.domainname:port/path/filename.htm

Note: The port is not required, the default is 80. 
      Do Not include "http://" 

Example: www.planetunreal.com:80/BDBUnreal/serverinfo.htm

Note: Leaving the URL blank disables the Welcome Window.

Also, I have include an example ServerInfo.htm file in the zip file.

Map Info
Map Info is a new feature in MapVote that can be setup to provide 
players with information about about maps. There are two ways the player
can request information about a map.

1. Select a map in the Map List on the Map Voting window and click the
   "Info" button. This will cause the window to switch to the "Info" tab
   and then use the in game web browser to display information if 
   it is avaliable.
   
2. Select the "Info" tab window in the Map Voting window and click the 
   "Map Info" button. This will cause the in game web browser to display
   information about the current map if it is avaliable.  

Map Info Setup:
---------------
You will need an HTTP web server to provide the map information.
You will also need to take all the ReadMe text files that are were provided
with custom maps and convert them to HTML format.
I have ask someone to write a converter program that will do this for you
and will make it available for download when it is ready.
The name of the map information file has to follow this scheme:

MapName.htm

For example: If there was a readme file for CTF-Face.unr then the info file 
would be have to be named CTF-Face.htm

All of the map info files must be in the same directory on the web server.

To enable this go to the Admin configuration window in MapVote and scroll
down to the Advanced section.
Enter your web server URL and the path to the map info directory in the 
"Map Information Web Server URL" text box.
Note: do not use "http://" and end the path with a "/"
Example: www.myserver.com:80/MapInfoDirectory/
Known bugs
1. When tested with "DOM-LittleThings" map , it always played under 
   DeathMatch and dropped the mutator. I couldnt figure out the problem , 
   but it works fine with all the other maps. I might have a corrupted map file.

2. Strike-Force (version 1.55) disables auto downloading by defaulting the 
   AllowDownloads option to False in the StrikeForce.ini file. 
   (found under the [IpDrv.TcpNetDriver] section), Therefore; if you setup 
   a SF server players who do not have this mutator installed on their 
   computer will not be able to connect. 
   There are two ways to fix this:
   a. Edit the StrikeForce.ini files on both the Server and every Client 
      and change AllowDownloads to True. This is not practical considering 
      the ammount of Clients out there that wouldn't know how to open a file
      let alone change the value in one. 
   b. Require all Clients/Players to download and install this mutator.
      * I've been in contact with Gruff from StrikeForce and they are going 
      to include Map-Vote with the download of their next version (1.6).
      This will solve the AutoDownload problem.
        
3. Both the Welcome window and KeyBinder window hide the RocketArena and 
   the UnrealFortress Starting Menu Window when they are closed. 
   This is acceptable with UnrealFortress because the player just has to
   click his/her fire button to bring back the menu. But with RocketArena
   that doesnt work. To solve this problem you can turn off the welcome 
   window and keybinder windows in the MapVote Admin configuration window
   (option is at bottom).

4. During testing with Tactical Ops I got client side GPF crashes after a 
   map switch and during garbage collection if I connected to the server 
   directly using "UnrealTournament.exe unreal://servername" command. 
   (Error refers to "Ladder.LadderFont...") Weird thing is that I got the
   same results with MapVote version 2 and also once without MapVote. 
   So I don't think this was caused by MapVote, probably something buggy 
   with my server.
Version History
1.0 DM-MapVote.unr Map (3D Voting, cool idea but not practical)

2.0 Initial Testing Version (Dropped the Map and used UWindows and Mutator)

2.1 Fixed the Assault mid-game RestartWait problem. (game waited 5 minutes 
    before continuing to second half of match) Add a Config tab window to 
    the MapVote window for players who autodownloaded the mutator and do 
    not have the .int file. This will allow them to configure a keyboard 
    key to launch the voting window.
    
2.2 Added a 20 second voting restriction at the beginning of the game so 
    that the first player to enter the game after a level switch can not
    vote and force a level switch before the other players have joined the 
    game. Also changed the voting message type from critical to normal so 
    that others can see the message that tells which map you voted for.
    
2.3 Added a 20 second timer at the end of the game that when triggered 
    forces open the players voting window if they have not voted and the 
    window is not already open. This will help out any player who has 
    closed the window and dont have a key bound to reopen it.
    
2.4 a. Fixed the RestartWait-ini problem by setting bDontRestart to true
       instead of messing with the RestartWait.
    b. Add a configurable "Message Expiration Time" option. This allows 
       you to configure the amount of time a Say & TeamSay message stays 
       on your HUD. 
    c. Also added a little note at the bottom of the config screen that 
       explains that the Load Map options only apply on the server.
    d. Added "Download Required" text to the map screenshot window to 
       indicate when a player doesn't have the map that he/she selected.
    f. Add client message to tell the player that they can not kick 
       the server.
    g. Changed tie detection function so that it always returns false 
       for Domination games because once during testing I encountered
       a tie game and it did not go into over-time.
       
2.5 a. Added a configurable Kick Vote Requirement percentage.  
    b. Added a configurable voting time limit at game end. 
    c. Increased the size of the map list box and screen shot.
    d. Moved the game type configuration options to an "Admin" tab that
       only shows up for the player that is logged in as the admin. 
       (via adminlogin console command). This Admin tab can save the 
       configuration values to a remote server.
    e. Added LMS, Team Deathmatch, and an "Other" game type. The Other
       game type can be configured to work with custom Mods such as 
       Rocket-Arena,Tactical Ops, and Strike-Force. 
       (These are the only Mods that have been tested.)
    f. Added a "Status" tab that shows a report of the maps and players 
       that were voted for and the number of votes for each.
    k. Added an "About" tab and renamed the "Players" tab to "Kick" to 
       make more room for tabs.                          
       
2.6 Fixed the problem that prevented voting windows from opening when 
    connected to a listening server.                          
          
2.7 - Added an option to load map names from the map cycle list instead
      of all maps.
    - Added mouse wheel and keyboard (up,down,pageup,pagedown) scrolling
      support for list boxes.
    - Added a 1 second screen-shot loading delay to the map window. This
      reduces scrolling delays caused by the loading of the screen-shot image. 
    - Integrated message sender. Pops up when the Talk button is pressed.
    - After placing a vote the window will now switch to the "Status" tab.
    - Moved the configuration settings into UnrealTournament.ini instead of 
      MapVote.ini.
    - Add a configurable Score Board time Delay. This is the amount of time 
      that it waits before opening the voting windows after the end of the 
      game. This will allow players to look at the final scores before voting. 
    - Added an option to disable player kick voting.
    - Added an option to disable End-of-Game voting. Allows server to run as
      normal and cycle through the map list. Players can only vote during 
      the game. 
    - Added code that eliminates the currently played map from a tie. 
      This was requested by a user.
    - The "Remove Save" button on the "Admin" configuation window will now 
      reload the map list with the new configuation. In other words you can
      change game types and the map list will change right away.
      Note: Any open voting windows will have to be closed and reopened to
      refresh the map list on the player/client side.
    - Added a 3 second delay between the closing of all voting windows to 
      the switching of the level on the server. 
    - Fixed the "Failed to load 'NULL': Can't resolve package name" error 
      log message by preventing the loading of the Other game class if the
      Other Game type has not been checked.
    - Changed the WRI class back to the original code. This will break 
      compatiblity with V400 of UT.
    - Added a fix for the Tactical Ops v1.6 Tie Game problem where the 
      voting window would not open at game end because of sudden death 
      overtime. Also added a config option to disable this if needed.
    - Added an option that determines if a tie game is checked for when 
      using a Other Game type (Mods). This is used to tell Map-Vote if 
      the Mod game can go into OverTime so that it will not open the voting 
      windows during a sudden death overtime situation.

2.8 - Added an "Auto Detect" option that will automatically detect the game 
      type that the server was started with and load the appropriate maps. 
      This will make configuration incredibly easy, especially for MODs.
    - Fixed Spectator voting problem. Spectators can not vote now.

2.9 - Fix the 256 map limit bug. In network play the Unreal engine will not 
      replicate arrays that have more than 256 items in them. So, I created
      4 arrays. The limit is now 1020 maps. 
    - Removed the ".unr" from map names. 
    - The map list is now sorted correctly and NOT case sensitive. 
    - Client side GPF crash fix - Removed the MyWRI variable from the 
      MapVoteTabWindow to eliminate the GPF crash caused by garbage 
      collection and converted all Client-To-Server replicated function 
      into Mutate console commands. 
         
2.9a - Fixed the Map Rotation list problem that was introduced in 2.9

3.0 - Main Voting Window redesigned. Consolidated the Map, Kick, Status,
      and Message sending windows into one.(Thanks to Ouch for the idea.)
    - Added Welcome Window
    - Added KeyBinder Window
    - Moved code for detecting players entering the game from the 
      ModifyPlayer() fuction to Tick().
      This fixes StrikeForce,TactOps, and UnF Kick vote problems.
    - Added Accumulation,Scoring, and Elimination modes.                
    - Added MapPreFix OverRide. So that users playing MODs 
      can filter out maps.
    - Added Configurable Mid-Game voting percentage.               
    - Added Configurable Map Repeat limit. (Don't load previous X maps)
    - Added PlayerIDs to the KickVote player list.
    - Added MapVoteHistory which keeps track of how many times each map
      has been played.
    - Added Double Click voting. Just double click the name of the map 
      in the list.
    - Doesn't broadcast a message when the player votes for the same 
      map again. 
    - Fixed Spectator detection so that Dead Tactical Ops players can 
      still vote.
    - Added client side option to disable screen shot loading.
    - You can now click the name of a map or player in the voting 
      Status list and it will select the map or player for you in
      the main list.
    - Map Search option. Users can type the beginning of a maps name
      to find it faster.
    - Added the total map count to display on the window.
    - Spectators now show in the kick vote list box, (in gray) so 
      that you can kick them.
    - Player names are shown in Red or Blue to indicate which team 
      they are on.
    - Fixed Player Kick percentage detection. Had a rounding error
      in version 2.x.
    - Added Map Information viewer.
Thanks To:
Copyright / Permissions
-----------------------
Copyright Bruce D. Bickar 2000 - 2001
Authors may NOT use this code with out my permission.
You are NOT allowed to commercially exploit this release, i.e. put it on a CD
or any other electronic medium that is sold for money without my explicit
permission!
You MAY distribute this release through any electronic network (internet,
FIDO, local BBS etc.), provided you include this file and leave the archive
intact.
----------------------
UNREAL TOURNAMENT (c)1999 Epic Megagames, Inc.  All Rights Reserved.  
Distributed by GT Software, Inc. under license.  UNREAL TOURNAMENT and 
the UNREAL TOURNAMENT logo are registered trademarks of Epic Megagames, Inc. 
All other trademarks and trade names are properties of their respective owners.