 Package: UTeamFix
  Author: }TCP{Wolf aka Mia_The_Chaotic
    Date: 2003-01-10
 Version: Release 9b
Feedback: ChaosWorx@gmx.net

Additional Credits:
  mouse@squirrelsoftware.com Teamskins, HUD base source code (RealCTF)
  Martin Davies              Teamskins (RealCTF)
  [SixPack]Shambler          Teamskins (Infiltration)
  Smartball                  Several Sourcecodes, ideas and enhancements, in
                             particular: Dual Mag, Awards (main code),
                             UTFSkaarjplayer

Additional Thanks to:
  {hLk}Havok, }TCP{Carnage   Testing...
  Spooky{COW}, =BAD=Rude=>   Testing...
  -|H2O|-WingZero            Ideas, Testing...


*** IMPORTANT NOTE FOR UPGRADERS FROM RELEASES 6 AND LOWER AND NEW INSTALLS
*** YOU MUST RESET YOUR ADMIN PASSWORD IN THE ADVANCED OPTIONS AT THE GAME
*** OPTIONS NOW, NOT IN GAMEENGINE - YOUR OLD PASSWORD WILL NOT WORK!
*** ALTERNATIVELY MODIFY UTEAMFIX.INI MANUALLY

*** RECOMMENDATION: ALSO USE SERVERDOG 0.95+ IN CONJUNCTION WITH THIS FIX
***                 IF YOU DON'T USE A 224 SERVER
*** RECOMMENDATION: ALSO USE A BANISHMENT TOOL IN CONJUNCTION WITH THIS FIX
***                 (IPLogger, SBab, KickBan)



I. What is this?
This is an all-round fix for Unreal-DM and Unreal-TeamGame. Lots of bugs fixed
which are unsolved in the original DM/Team modes, and lots of extra features
including cosmetics and admin maintenacne, like...

- The Gold skins will now be used correctly
- The Scoreboard has been fixed (it takes 32 players now btw -> see
    the screenshot)
- Optional SkaarjTrooper skins added, big thanks to squirrelsoftware,
  because they were taken from RealCTF and modified to include
  green and gold skin, so big thanks to both Mouse and Martin Davies at
  this point.
- Since release 9, the same thanks have to go to [SixPack]Shambler and all
  former developers of Infiltration, as the missing Teamskins were taken from
  Infiltration (with kind permission of Shambler)

Doesn't UCop(Lite) already fix the first?
-> yes... but it doesn't fix the 2nd. Also, people complain UCop causes
   lag. Now you have an alternative which won't cause any more lag than
   normal team game would.

But it doesn't provide the other features UCop has...
-> True, use "ServerDog" to compensate some if you feel you need...
   But this fix has grown larger and more powerful with time, and in
   combination with a good banishment tool and an admin who knows what he's
   doing you likely may not need UCop(Lite) at all.

What about UCop2?
Up to today (2003-01-10) UCop2 has not been finished. HbG and Swift have
decided to release it as it is up to the current state of development, but I
have no information on how well it performs what. I do know for sure, however,
that it is an unfinished work with a couple of problems remaining, which is
sad because UCop2 appeared to be the ultimate combination of bug fixing and
cheat protection.
Still, a number of features which are in this patch here were never planned
for UCop2 either. It is of course up to you to use the UCop2 beta and see if
it does better for you than this. UTeamFix is -NOT- a cheat protector at all
of course and requires you to run an external banishment tool to get
permanently rid of Llamas and punks (the internal autoban will work only
temporary).
However, the good part in having several different tools in combination
instead of one solve is, that other authors can work on their special tools
independantly from this patch.



II. Install
Copy all *.u files and "*.int" files to your Unreal\system directory. The
"utx" files go to your Unreal\textures directory, it contains the Skaarj
team skins and the alternate human skin pack.

Append this in the "Unreal.ini", section [Engine.GameEngine]:
ServerPackages=UTeamFix

Do NOT add other *.u files to serverpackages except "UTeamFix.u".

To make use of the SkaarjSkins and the Alternate Human Skinpack, add these
lines too:

ServerPackages=SKTrooperTeam
ServerPackages=UTeamSkins

Both skin packs are OPTIONAl and do not need to be installed to run this
patch. Especially low-bandwidth servers may prefer to work without these.

However, if you want to allow Skaarj players in your teamgames, you will need
to install the SKTrooperTeam skins, because if not all Skaarj players will use
a default skin by which you cannot tell which team they are on!! To allow
Skaarj players, you must set "bHumansOnly" in the advanced preferences for
the game mode to "false".

The Alternate Human Skinpack contains skins which are better to see than the
normal teamskins. If you install them you also have to set
"AlternateHumanSkins" to "True" in the advanced options of the new fixed
Teamgame game mode.



III. Run
You can run this like all other game modes "out of the box" by selecting it
from the Unreal game menu. But note that it looks identical to "team game"
so press F1 to see if you have the "fixed" version running or the "normal"
(the fixed has an extra line indicating it is the fixed one in the header).

To run a dedicated server in batch mode, this would be your command line:
Unreal.exe <startmap>.unr?game=UTeamFix.TeamGameFix -server

(Fixed DM since release 8:
 Unreal.exe <startmap>.unr?game=UTeamFix.DeathmatchGameFix -server)

Default admin password for this game type is "admin" (but usually the one of
your former game type will be taken), configuration is written into
"UTeamFix.ini" file.

SIDE NOTE:
Servers can also be run using the UCC server commandlet, here is the usage:
UCC server <startmap>?game=<game-mode> <additional parameters...>



IV. Extra features (Settings)

-) AlternateHumanSkins:
   (Team only) If true (and the alternate human skin package is
   properly installed) UTeamFix will use the better viewable human skins
   instead of the standard Unreal team skins.

-) CountSpecsAsPlayers  (Count Spectators as players)
   If you set "CountSpecsAsPlayers" to true, the Unreal UBrowser will always
   report all connected clients, not only actual players. The advantage of
   this is you see who REALLY is on, the disadvantage is if you only look at
   the "playercount" you might get a wrong impression of how many "players"
   are actually up and fragging :)
   This feature is no longer recommended for use, as it was meant as a
   workaround on a UBrowser bug. A complete bug-fix for that can be acquired
   using ServerDog's fixed UDP server query (may not run on 224)!

-) DisplayAwards
   Displays killing sprees, headshots...

-) DisplayKillnotify
   Display who you killed and who killed you...

-) FairPlayOptions:
   -)AddAutoMag
        off: No automag added
        AddNormalAutomag: A standard automag is added to each player at spawn
        AddOneAkimboMag: One dual mag is added to each player at spawn
                         (allowing to pick up a 2nd for akimbo fire...)
        ** NOTE ** you _might_ want to allow spawnkills if you start with an
                   additional gun, as most issues were just because of the
                   shitty DP you start with. But it's up to you... of course.
        ** NOTE ** Automags have 50 bullets ammo by default here
   -)AllowTypeKills (DM only): If this is false (default is true), all kills
     caused by players (or bots) towards someone who is typing at the moment
     getting killed will be ignored.
     ** NOTE that like with all features trying to serve a good purpose,
        malicious users _could_ misuse this... however, jumping off a cliff or
        into lava then pressing the talk key to avoid a frag to the opponent
        wont help them.
        Also note that if a player gets hurled off into something while typing
        by a shot, that kill won't be ignored either (so better go into a quiet
        corner to chat if you talk a lot, but then again ICQ, AIM or IRC might
        be what you're looking for!? :D)
     Typekills are ALWAYS allowed in team game, because team strategies depend
     on communication and are thus part of the game (and no, there is no way to
     tell if someone is just typing a teamsay or global say...)
   -)AllowSpawnkills: If false, renders players invulnerable for some time when
        they respawn. Invulnerability wears off, if...
             -they shoot too many shots with dispersion pistol
             -they pick up ANY item (except Ammo read "PickupAmmoOrientation")
             -they wait too long...
     ** NOTE ** people asked for a "harsh" option to kill spawnkillers, but
                this in turn could just have players run around invul and
                provoke to be shot at just to see players die around them
                (all good ideas can be misused :( so...)
   -)DestroyAmplier / Invisibility: Will remove those items when a map starts
     ** NOTE ** if you were using WMutator to do that (and ONLY for that) then
                you can safely turn off WMUtator.
   -)SpawnerVisibleEffect (only relevant if AllowSpawnkills=false):
       When someone respawns, you can have that player be specially displayed.
       -)No_Effect: well nothing at all...
       -)glow: Respawned players will have a golden glow around them while
               they are invulnerable.
       -)FireTexturing: Respawned players will have a fire texture similar but
               not equal to a shieldbelt effect.
   -)GunExpireDelay: The delay when your respawn-protection wears off should
       be a LITTLE longer if you pick up a GUN first, instead of anything else
       because some assholes actually run after you and spawnkill you just at
       the moment you pick up a gun (which is just the same as spawnkilling
       right away). A setting as low as "1" already gives the spawned player
       an edge to get the gun and dodge away unharmed...
       Of course if you set it higher you may allow spawners who get a gun to
       fire a few shots while invul (but that's also crap, isn't it!!!)
   -)MaxDPShots: (only relevant if AllowSpawnkills=false)
        the maximum number of shots someone may fire with DispersionPistol
        before invulnerability after respawn wears off.
   -)MaxTimeOrientation: (only relevant if AllowSpawnkills=false)
        the absolutely MAXIMUM number of seconds a respawner can stay
        invulnerable.
   -)PickupAmmoOrientation (only relevant if AllowSpawnkills=false)
     If true, picking up ammo does not end players' oritentation phases.
     Note however, that this could be blatantly abused to collect lots of
     ammo if the timer is large enough.

-) Fonts
   Admins can customize the look of some on-screen messages a little
   -) ScoreBoarddesign (Team only)
      Default: Very detailed scoreboard, numbers are explained in -STATS-
               field
      Simplified: no -STATS- field, teamkills and frags not displayed, titles
                  before each value (for the dummies out there who are too
                  stupid to understand shit...sorry had to say :/)
   -) ShowTeamColorBoxes (Team only)
      Team scores will receive a colored translucent background when on :-D
   -) YouAreNotReady
      The "You are not ready" message in tournaments can be "big" or
      "small"...

-) ForceRespawnSeconds
   If you enter a value bigger than zero, dead players will be forced to
   respawn automatically after the number of seconds entered here.

-) GoalTeamScore
   Team only ** USELESS OPTION ** Ignore it, Fraglimit is used instead

-) HardCoreDamage (OPTIONAL !!!!)
   In the advanced options, under game types where this game mode will also be
   listed, you will find one new variable called "bHardCoreDamage". This can
   be enabled if you want the hardcoredamage in team games. Note that this
   works INDEPENDANTLY from bHardCoremode, you could have hardcoredamage but
   classic game mode (if you wanted).
   This has just been included as a little extra in case you find classic
   damage too frustrating... It is off by default so that this team game
   behaves EXACTLY like normal teamgame in that matter by default.

-) IllegalStringResolve - put in some string you want all empty or totally
   illegal string-pair values to be set to. For example, if you set this to
   "ImAStoopidPunk" all people with an empty name will get that name when
   joining your server... This is a general bug-prevention mechanism to avoid
   empty key/value pairs not handled properly by Unreal.

-) LIELite (Advanced, only touch if you are bored!!)
   First off, what is "LIE"? Well "Local Internet Effects" is a full seperate
   mod written by me (}TCP{Wolf). However its functions can easily bring down
   even the FASTEST internet server to its knees. What it does is, it
   overrides replication rules, resulting in internet games looking much more
   than "local" games.
   The "Lite" version of LIE is embedded into this patch and has only minimal
   impact on server CPU and network load, though on large servers you may
   notice a real difference.
   You can set types of actors to be "always relevant". As a result, these
   actors (e.g. Players...) will be seen through glass walls and other
   transparent barriers (including teleporting portals!) as if you were
   playing a botmatch locally.
   So for example, you can see in DMRadikus if the 200 is actually behind the
   teleporter ready to be picked up or not. Normally you MUST enter the portal
   to find out :)
   The following actors can be set to be displayed correctly at all times:
      Ammo: All ammo crates
      Pickups: Everything you can pickup. This includes Ammo, but excludes
               Guns
      Players: Players AND Bots, but no monsters.
      Weapons: All Weapons.
   So to have all features enabled, set all except Ammo to true, since Pickups
   includes Ammo.
   For details on LIE, please download the full featured "LIE" mod. It goes
   without saying that you should leave all features turned off here in case
   you are using the full version of LIE already.

-) MuteSpectators
   If True, spectators cannot broadcast "say" and "teamsay" messages. But they
   can still talk to other spectators using the "specsay" command.
   If you set muting here, it will take one mapchange to take effect. To
   (un)mute spectators quickly in game, use the "admin mutespecs" command.
   Also, admin spectators are never muted.

-) Networking Settings
   -) AddWaitTimeMapChange:
      With all the extra infos or many people on the scoreboard, you may want
      to take a screenshot or just study it and take your time. Normally in
      Unreal the server will wait as many seconds as "ServerTravelPause" is
      set to, but setting that value too high causes clients to lose
      connection.
      So here it is, an added delay which takes effect when game ends. Enter
      any number to additionally wait at game end before the server starts the
      map-switch process.
   -) FastTimeOut:
           This is a convenience setting for lazy admins :-D If you
           want to know details, you will find a technical abbendum at the
           end of the document.
   -) IdlePlayers
      -) KickIdlePlayers: enable/disable kicking of idle players
      -) CheckInterval: Time in seconds player positions are checked...
      -) Lenience: Number of concurrent checks a player may have stayed in
                   onef position before being kicked.
   -) IPLoggerInterface
         See networking interfaces at end of document.
   -) MinTimeBetweenLogins
         To avoid lag and fun-rejoiners a player can only login again after
         some time has passed. The minimum setting is 10 seconds anything
         below is invalid and will be overriden for the server's own safety.
         This is the MINIMUM time in seconds that has to pass before a player
         can login AGAIN after he already had a login.
         I suggest values of 30 to 60 seconds, if players crash often on your
         server, lower it, otherwise a high value will piss off lamers you
         keep kicking, because it takes their time to rejoin just to be kicked
         again :-D
   -) SBabInterface
         See networking interfaces at end of document.

-) TeamBalance
   (Team only, not DM, you guessed that, didn't you :-D)
   If turned on, player team choices will be overriden when they first join
   and be assigned to the smallest team (unless they are admins...).

-) TournamentMinPlayers
   If you use the 'Tournament' setting at TournamentMode (see below) this is
   the minimum number of players required to make up a match. If there are
   less players the match will not start even if all present players have
   signalled "ready".

-) TournamentMinWaitTime
   After a mapchange, it takes people differently long to connect to a server
   usually. If the first few players to arrive all clicked ready immediately
   after join the game could think that the players are alltogether ready and
   may launch the (tournament) game.
   So, this option is for tournament mode to wait at least these number of
   seconds for additional people to arrive before even starting to count the
   players who are ready.
   ** NOTE ** you do not lose time, since in real tournament mode, the timer
   is reset the moment the match is launched!

-) Tournament Mode
     off: Normal Unreal play
     Simple: A player can fly around when first joining and needs to press
             fire to start to play. Force-Respawn is ignored at this first
             spawn.
     Tournament: Real Tournament, all players must signal ready before they
                 can spawn. A countdown will run down and then spawn all
                 players simultaniously.
                 Change Team will NOT spawn them and Telefrags right after the
                 "GO" (due to players spawning at same location) are ignored
                 at scores.
                 Players joining when the match is already in progress spawn
                 right into the game (like setting "off").
                 ** Side effect **
                 CountPlayersAsSpecs will be set to false automatically when
                 choosing Tournament.
                 ** Time limit notification **
                 When the match has not yet begun (waiting for players...) the
                 time limit can of course run out during that time and then
                 map changes. However, if a match actually starts the timer is
                 completely reset. So the moment the "GO" is given you will
                 have the FULL amount of time again for the map! So don't
                 wonder if you see your "online time" massively exceeding the
                 timelimit...
     UT_Style: After the first player enters, a timer will start the match
               after approximately 15 seconds. Should all players leave before
               the match is launched the timer is reset.
               (there is no bot-add-in support for missing players as in UT
               though...)



V. New Ingame Commands
-) admin adminpw <password>
   Immediately sets new admin password. Remember admin password for DM and
   Team are stored at 2 different locations, so by changing one pass you still
   have the other admin pw in the other game mode.

-) admin botteam <0-4>
   Team only, puts all bots in the desired team (if possible).

-) admin clean255
   Should you have summoned some bots (or there are some ghost players in an
   illegal team - as seen when a "gold" player shows up in the upper right
   corner of the scoreboard) a quick "admin clean255" will get rid of them.
   This function is automatically executed after each playerlogin in case
   playerlogin failed and leaves a ghost... But just in case...
   ** IMPORTANT NOTE FOR UNREAL 226 / GOLD USERS **
   ** the failing garbage collection of these Unreal versions will sometimes
      dublicate a player (or all players) after a rejoin on the same map, AND
      EVEN WORSE it can give the FALSE impression of additional ghosts being
      connected **
   R7: Admins will never be kicked by this command now.

-) admin dmgame
   Team game only... switches server to DM game.

-) admin friendlyfire <percentage>
   Team only, sets the friendly fire scale immediately. The <percentage>
   should be a value between 0 and 1. For example, 50% would be 0.5
   ** NOTE **
   You should not use the "simplified" scoreboard if you have friendly fire
   on, because only the "default" scoreboard in team shows you teamkills...

-) admin gamepw <password>
   Immediately sets the game password. Enter no password to clear the
   gamepassword and make the server public. Like with admin password, do
   not forget it only affects one game mode, not both.

-) admin getgamepw
   Displays the current game password to admins.

-) admin getip <id>
   Will show the IP Adress of the player whose ID you enter (as shown on
   scoreboard to all admins.

-) admin msgadmin <message>
   This is an internal messenger feature, which is NORMALLY used by internal
   functions to return the results of admin operations. However the function
   is "exec"utive so you can use it yourself as admin and send a message to
   all admins who are logged in. There will be no "name" in front of it.

-) admin killid <id>
   Kills the player... this is a "punishment" measurement before you kickban
   players. Maybe they understand the wink...

-) admin ktban <id> <time>
   Kicks and bans player <id> for <time> mapchanges. This is not totally
   efficient and is really only used for temporary banning. There are other
   tools for permanently banning people (e.g. IPLogger, hackbusta, any
   firewall etc...).
   ** NOTE ** it may take one network-timeout (usually 15 seconds) until a
              kick-banned player is removed from the scoreboard.

-) admin makeadmin <id> <yesno>
   Makes player <id> admin or takes away his admin privileges. <yesno> = 0
   means take away admin rights, <yesno> = 1 means give admin rights.

-) admin maxplayer <number>
   Immediately sets the number of allowed players to <number>. Be careful to
   write "maxplayer", not "maxplayers". This is due to am internal naming
   conflict.

-) admin maxspecs <number>
   Immediately sets the number of allowed spectators to <number>.

-) admin mutespecs
   toggles muting spectators on/off quickly during game... no effect towards
   spectators who are also admins...

-) admin privatesay <id> <msg>
   Send a message visible only to player <id>. There will be no name tag in
   front so you will have to tell the receipent who you are talking to him!
   Sorry there is no privatesay for non-admins :/

-) admin putteamid <id> <team>
   Team only. Puts a player number <id> to the team <team>, where <team> is:
     0: Red
     1: Blue
     2: Green
     3: Yellow / Gold   

-) admin resetscores
   Immediately resets all scores to 0

-) admin setfraglimit <new limit>
   immediately changes fraglimit to this new setting

-) admin settimelimit <new limit>
   immediately changes timelimit to this new setting

-) admin skip
   Ends the current map immediately and "skips" to next.

-) admin teamgame
   DM only. Switches server to teamgame...

-) admin teamsetup <maxteams> <maxteamsize>
   Teamgame only. Sets the number of allowed teams to <maxteams> and the
   maximum size of each team to <maxteamsize>.

-) specsay <message>
   Spectators only
   New type of "say", which is meant for communication between spectators
   only. It is always usable by spectators, even if they are muted. However,
   these messages can only be seen by other spectators. specsay appears as
   "yellow teamsay"...

-) viewid <playerid>
   Spectators only
   who wants to type names to view a specific player? tss tss tss



Revsion history
---------------

Release 2: 08/08/2002
           - bugfix: set gold teamskin if gold selected but maxteams<4

Release 3: 08/10/2002-08/11/2002
           - bugfix/enhancement: FAIL teamchange if not allowed and tell
             player - but normal "teamchange" at login time.
             Also, Spectators may freely change team.
           - "clean255" function added just in case bots or even players
             somehow still get the illegal team id, just type
             "admin clean255" to kick all "illegal team players" (including
             those "ghost" pawns...)
           - Spectators now shown in Scoreboard
           - PLAYERS have improved HUD  + better teamsay
                                        + better event display
             The HUD code was partly originally done by mouse from
             squirrelsoftware, since I have taken something from the RealCTF
             HUD code. Big thanks to mouse for allowing me to use any part
             of RealCTF for non-commercial use.             
           - Added SkaarjTrooper skins. As mentioned before, the original
             red and blue skins were done by squirrelsoftware. The green and
             gold skin were achieved by changing the palette of the existing
             ones...
           - bugfix: sortscores
           - bugfix: Gold Teamskin not shown when players login with "255"
                     team and are then assigned to gold team
           - DeathCounter added
           - Overrode addbot() function + corrected ReplicationInfo
                                        + corrected log- error-message if
                                          Skaarj-bots fail to spawn because
                                          "humans only" set

Release 4: 08/13/2002
           - bugfix: Spectators didn't show up correctly in scoreboard if more
                     than 1 spectator was present (silly bug pff...)
           - kicked one obsolete reference in the replicationinfo which I just
             oversaw after optimizing the code a bit :)

Release 5: 09/10/2002
           - enhancement: clarified "illegal" team code
           - autokill BOTS on illegal teams
           - ecplicit destruction of PlayerReplicationInfo of clean255() killed
             Players (and Bots)
           - Scoreboard now shows team of spectators in a colored "taint"
           - Scoreboard minor improvement when NOT to show header

Release 6: 10/07/2002
           - illegal option values will be resolved to <<critical>> now
           - server crash issue fixed

Release 7: 10/10/2002
           - Scoreboard cleanup
           - login completely overhauled
              > admins can join full server
              > admins can join full teams
              > admins can join non-existent teams(!!)
           - Spectators can join full servers if MaxSpecators not yet reached
             and CountSpecsAsPlayer=false
           - Admin / GamePW overriden - YOU NEED TO RESET THEM IF YOU UPGRADED

Release 8: 2002-11-09 (I'm now using ISO dates)
           - Scoreboard now displays ID on top of ping (a tribute to ServerDog)
           - Bots get ID correctly now
           - Start-ID is now 1, not 0
           - Fixed a ScriptWarning when bots are added
           - The "CRITICAL" text (when empty string in options) is now
             variable and you can set it whatever you want...
           - prelogin() greatly improved, new error messages
               (spectator spots used, or player spots used but can join as...)
           - hopefully fixed another server crash issue
           - rejoining of same players will be rejected if they rejoin too
             fast
           - alternate human skin package added
           - DM mode "DeathMatchGameFix"   hardcore damage mode
           - ScoreBoard bugfixes
           - int file was messed up LMAO!!

Release 9:
           - Scoreboard now shows Team Kills (not in DM mode)
           - Team Change does not influence scores
           - Typekills can be turned off (DM only, not team!)
           - Scoreboard now shows MOTD (Message Of The Day) if display bigger
             or equal to 800x600 and you're actually on a server
           - alternate human skin package replaced with the missing skins
             filled with Infiltration team skins. Big thanks to
             [Sixpack]Shambler and all people involved in Infiltration
             development (lol that would include even me haha)
           - FairPlay options added:
               > TypeKills can be turned off (ignored), DM only
               > Spawnkills can be turned off
           - added "admin mutespecs" command to quickly (un)mute spectators
             during game
           - all new spectator HUD
               > displays name and health of anyone in the display
               > displays name and health of player in chasecam
               > has the improved message display of the player HUDS :-D
           - Scoreboard now displays Timelimit and Fraglimit (with a delay of
             one mapchange in case it is changed during game)
           - Spectators can view players with new command "viewid <id>"
           - IP Address is logged AFTER a player enters (only as convenience)
             The logging BEFORE login is complete can be inaccurate :/
           - Added Networking settings
              > FastTimeOut: disconnects on initial connect after 30 seconds
              > MinTimeBetweenLogins: time delay before another login is
                                      allowed after one login
           - no eyeball / pawn joins (except for admins if they REALLY want 8)
           - admin messages
           - admins can see IPs manually in game (without ServerDog)
           - forced respawn (optional)
           - temporary kickban feature (based on mapchanges as "time")
           - automatical team balance (Team only)
           - setfraglimit / settimelimit for admins during game
           - BUGFIX on Unreal 224 in teamgame, suicides (killer==none)
             hurt wrong teamscore!
           - added "Local Internet Effects >lite<"
           - BUGFIX 224 team selecting standard skins (tss tss tss, Epic has
             LOUSY coders...)
           - added communication interfaces for Smartball's Antibot, BOZO's
             IPLogger and Lesser Talent's KickBan utility
           - added more admin commands
           - Scoreboard will now always show teamscores of existing teams,
             even if no players are on one of those teams
           - added invul delay for picking up a GUN first instead of other
             items

           Per request and/or idea of -|H2O|-WingZero
           - Scoreboard now shows Score and frags separated
           - Scoreboard now has titles
           - Scoreboard now shows online time of players
           - in DM when game ends, you now see the WINNER instead of yourself,
             (basic code idea by Smartball) this also works for bots :-D
             in TEAM game, you see the player with the highest score of the
             winning team. In all cases, if 2 players have the same score,
             the one with less deaths is assumed winner (no further breakdown
             on teamkills and frags...).
           - new spectator class
               > Spectators can use "specsay" to talk to other spectators
                 even when muted (messages not visible to players)
           - TournamentMode (Simple) added - players fly around and need to
             press fire before starting battle at first join
           - People will stay in "non ready mode" when changing team during
             "non ready" and will NOT be force-respawned
           - Real Tournament mode added - all players click to signal I am
             ready before match starts
           - killsprees etc added (main code by Smartball)
           - added Dual Automags (code by Smartball, based on Bane's Akimbo)
           - added UTFSkaarjPlayer (code by Smartball, sound problem fixed
               and made Skaarj SLIGHTLY more human like in size, collision
               etc...) - The UTFSkaarjPlayer is automatically used when
               players enter who have selected the (normal) Skaarj (and of
               course bHumansOnly must be false)
           - added "simplified" scoreboard version (Team Only)
           - added team color boxes
           - added "UT_Style" Tournament Mode
           - new Automags (if used) have all 50 ammo on pickup
Release 9b:
           - bugfix: resetscores now works in teamgame
           - bugfix: killtransit player (teamchange) corrected
           - added "kickidleplayer"
           - added firetexturing for respawners
           - added unban/showban for temporary banned players
           - added aircontrol
           - reordered special messages (again...)
           

Planned:
- possibly new PlayerClasses to make various new things...
  > could increase pings... ?!
- bots...



Known issues:
-------------
1) Some older functions which are still called (part of Unreal) will cause
   Scriptwarnings, e.g. when SkaarjTroopers enter or when anyone joins GOLD
   team. Don't worry, that's what would happen in a normal teamgame too.
   Just ignore it.
   Another thing is teamgame killed() function when killer is none...
2) When KTBanning people or when the system kicks people automatically it may
   have a time delay until the player disappears from scoreboard.
3) When respawning after death and if you have added automags to player
   inventories, the selected gun by default is still the DispersionPistol.
   Players do have the Automag then, but must select it!
4) If admins mess with some settings while the server is running they should
   really force a map change after that unless they want to have some
   unpredictable side effects. Especially tournament mode changes cry for a
   map restart...



Enjoy,

Wolf



-------------------------------------------------------------------------------

-= TECHNICAL ABBENDUM =-


Networking:
-----------   
Many server admins forget to properly configure their tcpnetdriver.

There are 2 very important settings which are totally set wrong by default,
I will explain what these settings do and why you should enable the
"FastTimeOut" option in the networking options from UTeamFix DM and TEAM.

ipdrv.tcpnetdriver InitialConnectTimeout
This setting is 500 by default (500 seconds = 8 minutes, 20 seconds).
It is the time that Unreal will keep up with clients which connect (prelogin)
and download files which do no longer have contact with the server. Since the
default value is by far too high, failed connections (or rejected players at
prelogin) will add to the "dead connections" list and also cause the client
count to go up and show a totally wrong number.
The longer the list, the more difficult it is to track IPs correctly (and the
longer it takes). Although the inbound IP tracking is highly efficient, there
is no need to cause unnecessary CPU cycles to be used up searching through a
ton of outdated data.
The "FastTimeOut" networking option will set this time to 30 seconds! You
will notice a much(!!) more accurate client count on your server console and
all dead connections being removed very quickly.

ipdrv.tcpnetdriver ConnectionTimeout
I first believed the other setting was responsible for the fact that clients
had problems connecting at times, either because the server lags OR the
clients have a slow harddisk.
But it is actually much easier once you understand it.
This setting comes into play when the client has already connected. That means
when the client has passed the prelogin (password, ban checks...) and
downloaded any files it was missing.
As you know, Unreal creates (spawns) the player before the player is able to
control it. The reason is this, that after the download the login is executed
immediately at the server, but the client at that moment is only starting to
load all the packages (something the server does not need to do, as it has all
packages in memory at this point of time), because of that, the client code
execution is BEHIND the server, and the connection timer starts ticking
because the server sees the client as being "connected".
Now what's the problem?
Quite simple, the default value for ConnectionTimeout is 5 seconds, so that
means a client has 5 seconds time to load all needed packages and take over
the player pawn spawned on the server! OUCH!!!
On fast machines, tihs is normally not a problem. Still graphic cards
"prefetching/precaching", slow harddisks or huge custom files can still
enlarge the time greatly the client needs to fetch up with the server. And if
that happens, the server thinks the client has timed out, although in reality
it was just not fast enough loading stuff.
And then the client cannot enter the game correctly. Often you can see
messages (without names) on your HUD, but you cannot move, shoot or see any
items. This is a very common problem especially on servers running large mods
like U4E and people downloading the mod directly from the server (damn lazy
punks can't install stuff beforehand...).

But the solve is easy... just give them some more time. 30 seconds are seen to
be enough nowadays for all clients to get into the game. ConnectionTimeout is
set to 5 seconds as a side effect.

** WARNING ** side effects may be possible... need more experiments.

ADDED:
It seems setting the servertravel pause above 10 seconds runs the risk of
clients losing connection at map change, regardless of timeout settings :(

!!SOLVE!! User Network.AddTimeMapChange and have a very small
ServerTravelPause :)



Networking (Communication) Interfaces
-------------------------------------
UTeamFix can log IPs (and will...) and can temporarily ban people by IP and
name, however, this is not effective over longer periods of time. This is not
a banishment tool!
However, other people have programmed such tools. These other tools can ban
people from within Unreal by kicking them once they have joined the server.
Since these tools have more abilities in data retrieval and are more
specialized at it, you should use them (or/and additionally a firewall :-D)

Now, the problem still is, these banishment tools can ban from Unreal only by
kicking joined players, with the downside that it causes more pressure on the
server and may annoy other players.
An external firewall is much better since banned IPs don't even see the server,
but need to be maintained separately...
UTeamFix's abilities to communicate with banishment programs is meant as a
bridge. It cannot talk to firewalls, but support can be made so that at least
permanently banned IPs (tracked by UTeamFix itself!) can be checked against
the settings and lists of these external tools, which in turn answer if the
respective IP is banned - and if it is, the player will be rejected even
BEFORE he joins :)

Communication is simple: UTeamFix gives PlayerName and IPAddress over the
interface to the external tools and expects the following answers:
"banned" means the player is banned (it does not care if this answer was
         made up by name or IP match)
"ok" means let the player in, though any other answer which is not "banned"
     would have the same result.

**NOT**
The external tools have more abilities than the interfaces, but the interfaces
can help rejecting players by certain criteria BEFORE they enter the server,
so please excuse it that the abilities of the external tools are not described
here, only the abilities the interface can draw from them.
Ideal is rejecting by name, ip and iprange.

The following interfaces are included, and can be activated in the game-modes'
networking settings:

IPLoggerInterface
    Supports <NDP>BOZO's IPLogger 0.3 beta, no other version! Stay tuned for
    updates. I recommend BOZO updates the interface himself since he writes
    the banishment tool.
    Can reject people by Name, IP and IP range before login (ideal).

SBabInterface
    Supports Smartball's AntiBot. SBab seems to be a bit lazy with updating
    its configuration and I am not sure how terribly efficient this tool is
    in its other disciplines, but with UTeamFix 2it can...
    ...reject people by IP and IP range before login, but not by name.
    ** IPRange-Ban Bug: an IP of: 192.168.202.2 will also ban 192.168.202.250
       by Range definition :(

LesserTalentsKickBanInterface
    Supprts LesserTalent's KickBan utility version 160. Highly recommended
    that interface updated by author of Kickban util.
    Supports ban by IP, IP-Range and Playername
    ** IPRange-Ban Bug: an IP of: 192.168.202.2 will also ban 192.168.202.250
       by Range definition :(
    ** The name-banning seems to be buggy :( The interface searches the name
       lists correctly, but the internal name banning doesn't seem to work.



IP Address logging
------------------
UTeamFix logs IP Addresses at 2 points of times: at the prelogin() and when
the login is complete.
The problem is, that in the rare circumstance that more than one player causes
a prelogin() event then the IP Address of ONE of them is recorded wrongly!
Why? This is a sychronisation problem. At prelogin, the new client is just
added at the end of the sockets list, if the last client cannot be correctly
read out in time before another client is added to the list (the 2nd joining
player) then both readouts will return the same IP Address.
Side note: the faster the server, the less often this will happen.
Because of this, the 2ndary routine called at the moment of login completion
is the only point of time where the IP Address can be determined with 100%
accuracy.
