               / \     / \
              {   }   {   }
              {   {   }   }
               \   \ /   /
                \   Y   /
                .-"`"`"-.
              ,`         `.
             /             \
            /               \      Why are you running away?
           {     ;"";,       }        Read this README!!!
           {  /";`'`,;       }
            \{  ;`,'`;.     /
            {  }`""`  }   /}
            {  }      {  // cyd
            {||}      {  /
            `"'       `"'

BTPlusPlus 0.97
Copyright (C) 2004-2006 Damian "Rush" Kaczmarek

This program is free software; you can redistribute and/or modify
it under the terms of the Open Unreal Mod License version 1.1.

--- by [es]Rush*bR

////
SECTIONS:
== ABOUT
== FEATURES
== INSTALLATION
== UPGRADING
== SETTINGS
== INGAME COMMANDS
== CHANGELOG
== COMPILATION
== EVENT SYSTEM
== RANDOM FUTURE IDEAS
== THX TO
== CONTACT & FEEDBACK
\\\\


##########
## ABOUT:
#
BTPlusPlus stands for BunnyTrack Plus Plus. It is a full blown addon for
servers running BunnyTrack mod and even a pure CTF game type with BT maps.
It tries to prevent n00bs from spoiling a good game while not limiting
the freedom of others. It also adds many useful improvements to the game
while still being compatible with the original BunnyTrack mod.
Read the next section for details.


##########
## FEATURES:
#
 - MultiFlags - Only a copy of the flag is given to a player, the original
   flag stays on its place allowing multiple players capping at the same time.

 - Flag Protection - To avoid cheating, dropped flags immediately disappear.

 - Multicap Protection - Multicapping means scoring two or more flags in one
   run, the trick can be performed only on some maps, and only with the help
   of some other player, also provided that no killing player after cap mod is
   enabled(like original BunnyTrack mod). Basically the Multicap Protection
   respawns players back on the spawn points just after capping, it tries to
   simulate original BunnyTrack's killing behaviour but WITHOUT killing,
   killing someone just because he/her capped a flag is IMO stupid, who would
   be stupid enough in the real world to score a flag just to be killed. :)

 - Timer - On top of the HUD you can see how fast and how well you are doing.
   Great for training in achieving World Records! The timer is compatible with
   the original BunnyTrack's implementation so the achieved records are
   comparable ones to the original BunnyTrack ones.

 - Verbose capping - After achieving a cap you will be able to see your
   current time, your best time and also a current server record! Also when
   someone beats a record, it will be announced to everyone in the same way.

 - Record saving - With this feature, your best caps won't disappear.
   The config file BTRecords.ini can store about 1500 separate records! Not
   only the records are being saved on the server, they are also being saved
   client-side so that you can somewhat compare your own records to the ones
   on other servers. The records file can easily be parsed and displayed
   in a readable form for example on a http server.

 - Kill protection - Blocks players from killing members of other team(except
   the Enemy Flag Carrier if MultiFlags are off). However, as there are some
   maps which must allow killing because of some fancy killing zones, there is
   a config var to provide a list of such maps.

 - Ghost mode - Players staying for some time in one place become translucent
   and one can walk through them, you may also force the ghost mode on
   everyone so that nobody interferes with each other.

 - Antiboost - n000bs can be reeaaally annoying on a public server, boosting
   and pushing others just to interfere! Imagine yourself rushing for a map
   record and when you're almost finished, you hear BAH, and you've been
   shot straight into the lava pit. Pitiful isn't it ? Here comes Antiboost
   into action, every player has control over his/her own Antiboost status and
   if you want a boost you can just say 'boost', your friend gives you one,
   and then you can disable it by saying 'noboost'. There are also mutate
   commands for it, and some global variables for admins.

 - Enhanced HUD - The Timer has already been mentioned, it is being displayed
   on top of the HUD, but there are also other goodies like current map
   records and Antiboost status being displayed.

 - Enhanced Scoreboard - BT++ incorporates a custom scoreboard which is
   designed specifically for Bunny Track, not only it displays cap times but
   also number of deaths, number of caps, efficiency and connection info. All
   is shown with a shadowed font and with mixed colors which should make it
   pleasant to read. The scoreboard also supports IpToCountry mod which allows
   to display a country flag near each player's nickname.

 - Auto Disabling - If you owe a clan server and you are playing also other
   game types besides BT, this feature is just for you. BT++ can automatically
   disable itself when a non-BT map is detected, it can also disable itself
   when bTournament mode is detected.

 - Possibility to disable most of the features if some are not desired.

 - And other useful features that didn't make up to this list.


##########
### INSTALLATION:
#
Alright, you can run it both as a ServerActor or as a Mutator. Choose one:

 - Running as a ServerActor:
  Copy all files EXCEPT BTPlusPlusv097.int to your System directory and add the below lines to the [Engine.GameEngine] section of UnrealTournament.ini
  ServerActors=BTPlusPlusv097.BTPlusPlus
  ServerPackages=BTPlusPlusv097

 - Running as a Mutator(sorta untested):
  Copy ALL files to your System directory and and add the below line to the [Engine.GameEngine] section of UnrealTournament.ini
  ServerPackages=BTPlusPlusv097
  You can add it to you server's startup script by putting BTPlusPlusv097.BTPlusPlus there. For example:
  ucc BT-Maverick.unr?game=BunnyTrack.BunnyTrackGame?mutator=BDBMapVote304.BDBMapVote,BTPlusPlusv097.BTPlusPlus
  Note: The int file gives you the advantage to select BTPlusPlus as a mutator in various lists, for example in webadmin


##########
### UPGRADING:
#
Backup your BTRecords.ini first!!
If you want to preserve old records, open the BTRecords.ini file and correct
the section name to contain a new version's name. As some of the config
variables might have changed between versions, you are advised to start
the server first and let it create a new config section in you BTPlusPlus.ini
Place the necessary corrections using the knowledge from this readme's
SETTINGS section.

About the changed BTRecords.ini format!!!!!!
Basically, it should be automatically converted, but some of the records
may need some manual corrections, like the ones with a nick containing
":" in the name previously, this character should be converted now to
a current separator, which is a character number 9 in ASCII! The other
separator is a simple TAB with a code of 11.


##########
### SETTINGS
#
Edit BTPlusPlus.ini to your needs or use a "mutate btpp" command while logged
as server admin to change the following variables..

bEnabled=True
 - Well, quite obvious, isn't it? :>

bBTScoreboard=True
 - Triggers the use of an enhanced scoreboard.

bAutoLoadInsta=True
 - Will autoload a customized instagib mutator, shooting blue rays when
   target is unaffected. It should also automatically unload all zeroping
   mods.
   Note: The last is sorta experimental, let me know whether it works.

bMultiFlags=True
 - Toggles the MultiFlags feature which makes the flags being copied instead
   of being given away to players. More than one player can carry the flag
   at the same time thanks to this. Dropped flags will automatically
   be destroyed.

bRespawnAfterCap=True
 - When set to true, players just after capping will be teleported back to
   the respawn points.

bAntiBoost=True
 - Toggles the AntiBoost usage, it also affects options bDefaultAllowBoost and
   bBlockBoostForGood. By default, AntiBoost funcion allows players to allow
   or disallow boosting for themselves.

bBlockBoostForGood=False
 - When bAntiBoost=True, it will simply disable all boosting just as the name
   says.

AllowBoostOn=
 - Here you can set maps which you would like to globally allow boosting on
   when it is forbidden by other settings. The maps should be separated by
   a comma ',', and the names should be set the way to match many variations
   of a map name. For example 'BT-TeamPlayMap' will also trigger this option
   on any maps containing this string, like for example on
   'CTF-BT-TeamPlayMap-xyz'. Note that is is case in-sensitive.

bNoKilling=True
 - Blocks players from killing members of other team. One exception is an
   Enemy Flag Carrier(but only when bMultiFlags=false). The reason for the
   exception is that on some buggy maps it may be possible to steal a flag
   from the other side making it impossible for that team to cap. And that's
   why I advice to use bMultiFlags=True.

AllowKillingOn=BT-Colors,BT-1point4megs,BT-i4games,BT-Abomination,BT-Allied
 - Here you can set maps which you would like to globally allow killing on
   when it is forbidden by bNoKilling. The maps should be separated by a
   comma ',', and the names should be set the way to match many variations of
   a map name. For example 'BT-Colors' will also trigger this option on any
   maps containing this string, like for example on 'CTF-BT-Colors-xyz'.
   Note that is case in-sensitive. The feature is useful for maps containing
   special frag zones, but make sure that these maps are bug-free to not allow
   shooting on any other zones.

bGhostWhenCamping=True
 - Players detected as campers will become translucent and others will be able
   to go through them. Useful for naughty players blocking the way.

CampTime=15
 - Setting for bGhostWhenCamping. Indicated after how much time player staying
   in CampRadius will be considered a camper.

CampRadius=300
 - Setting for bGhostWhenCamping. Size of the area player have to stay in to
   be considered a camper.

bEverybodyGhosts=False
 - When set to true the ghost mode will be forced on everyone.

bForceMoversKill=True
 - Toggles the use of ForceMoversKill[] list.

ForceMoversKill[0-9]
   (default for:)ForceMoversKill[0]=Mover0,Mover1,Mover2,Mover5:BT-Maverick
 - Forces specified movers to kill players encrouching/blocking them.
   Format=%Mover%,%Mover%,... :%Map%,%Map%
   Up to ten movers and maps in one setting.
   Note: You get mover names from UnrealEd. Edit the map, find a mover, right
   click on it, Object -> Name.
   Note2: When map is set to BT-Maverick it will work for CTF-BT-MaverickCB
   also cause it checks for the inclusion of one string in another, it is also
   case insensitive.

bSaveRecords=True
 - Best records will be saved to a config file "BTRecords.ini", remember to
   upgrade the BTPlusPlus version in this file while upgrading.

bNoCapSuicide=True
 - This option is mandatory for bRespawnAfterCap to work with BunnyTrack mod
   which kills every player who finishes a map, this option disables that
   behaviour allowing bRespawnAfterCap to work.

RecordsWithoutBoost=0
 - This option accepts three settings:
   0 - Records will be saved no matter whether a player has been boosted.
   1 - Records will be saved only when a player hasn't been boosted.
   2 - Same as 1, but it excludes teamplay maps(maps containing -II or -III).

bDisableInTournament=True
 - Useful when you use the same server for clanwars.

bDisableInNonBTMaps=True
 - Useful when you run a public server with other gametypes. Non-BT maps are
   maps without a prefix BT- and CTF-BT.

BoardLabel=BunnyTrack (BT++)
 - This is the text that appears on the top of the scoreboard. Change it
   to your liking.

CountryFlagsPackage=CountryFlags2
 - If you have IpToCountry installed, make sure that this variable is set to
   a real country flags package you have. Remember that the package has to be
   also in ServerPackages.


##########
## INGAME COMMANDS:
#
 - mutate ab_on  - Disallows others to boost you.
 - say noboost   - Same as above
 - mutate ab_off - Allows others to boost you
 - say boost     - Same as above
 - mutate bthelp - Prints out help.
 - mutate btpp - Configuration menu for admins. One has to be logged.
 - mutate btpp get <value> -
 - mutate records - Help for record searching.
 - mutate records map <mapname> - Searches record database by map name.
 - mutate records player <playername> - Searches record database by player name.

 *In sake of compatibility, old commands should still be working.


##########
## CHANGELOG:
#
v0.97(through all the pre versions)
 - Added a full blown new sexy Scoreboard with IpToCountry support!
 - Added option AllowBoostOn as requested by someone, see the SETTINGS section
   in the README for further details.
 - Changed bRecordsWithoutBoost to RecordsWithoutBoost in order to add a third
   setting which allows boost records with boosting only on teamwork maps.
 - Removed possibility to enable/disable BTPlusPlus ingame.(due to many
   complications)
 - Added more preeliminary checks whether BT++ can start.
 - Added bRespawnAfterCap which does a respawn instead of killing a player,
   with BunnyTrack mod it has to be used in conjunction with bRespawnAfterCap.
 - bMultiFlags=False is working and nothing is dependant on it now.
 - Changed the net/replication code again, should be more reliable now.
 - Timer on the HUD should be more exact now!
 - Added timestamp to newly saved records.(not used yet though),
 - Format of BTRecords.ini had to be changed because it didn't allow for some
   characters being used in nicknames.
 - Autoloaded instagib is now improved, it has a blue ray when shooting
   opponents or players with antiboost on. Also ray shouldn't cause the
   lockdown effect now.
 - Records are also saved clientside now, they are independant of
   the server ones though.
 - Added some clientside settings allowing to hide the hud or make BT++
   silent, AntiBoost status should also be saved between games.
 - Improved the quality of the sourcecode, anybody cares to read it ? :D
 - Changed searching for records by map behaviour, now it displays multiple
   records.
 - Fixed a lot of small bugs and done a lot of small tweaks.
 - I probably missed something, sorry. ;)

v0.96c
 - Fixed and reorganized replication code.
 - bRecordsWithoutBoost should really work

v0.96b (Internal version)
 - A secret :)

v0.96
 - Optimized a LOT of functions, record searching, timer updates and a few more.
 - Added option to not save records achieved with boosting.
 - Added option to totally block boost.
 - Added option to autoload instagib during map start, it also disabled all
   zeroping mods currently running. (tested with ZPPure)
 - Added option to make all players ghosts.

v0.95
 - Added feature to save map records and commands for doing database searches.
 - Fixed spectator's custom flags and BT++ logo not being showed.

v0.94:
 - Fixed bug which caused weird behaviour of antiboost status and best times
   on the hud ...

v0.93b:
 - Fixed best times on the HUD.

v0.93:
 - Hopefully fixed the bug with logo and flag icons not being shown sometimes
   ... or better to say most of the time.
 - Added some HUD goodies.

v0.92:
 - Added cap times incorporating. Will show the current time and best time
   after scoring the flag.
 - Cleaned up the code, made anticamper function more simple.
 - Improved player initializing functions. Previous version handled only
   32 player joins for one map.
 - Added nice logo and custom flag icons.

v0.91:
 - Fixed the bug with displaying Flag Icon on the HUD.
 - Fixed the bug(hope so) with flags being invisible sometimes.

v0.9:
 - First version. :)
Note: While BTPlusPlus is a direct successor of AntiBoost mutator, you can
check its changelog to get further back.


##########
## COMPILATION:
#
1) Well, firstly I have to say that while compiling this package, you MUST
change the name of source directories to something unique, otherwise you can
get into serious problem called 'Package mismatch' after publicing it!!!

2) BTPlusPlusvXXXX and BTPlusPlusvXXXX_C have to be in the main UT directory,
the same directory where System/, Textures/ etc. are located.

3) Edit your UnrealTournament.ini and find a section [Editor.EditorEngine],
add the following lines to the bottom of this section:
EditPackages=BTPlusPlusvXXXX_C
EditPackages=BTPlusPlusvXXXX
Note: The order IS NOT random, _C must be first, because the serverside part
relies on it.

4) Enter System/ subdirectory and execute a command 'ucc make', it should
compile the code now. To recompile, delete the old files and execute the
command again.
Note: It may be crucial to change some version references in source code.
Note2: XXXX is of course some random string of your own compilation.


##########
## EVENT SYSTEM:
#
BTPlusPlus can send out events to actors which are interested in them,
to request events by your actor, you have to the following things:

foreach AllActors(class'Actor', 'BTPlusPlus', A)
   A.Touch;

From this moment your actor will recieve various events through an overriden
GetItemName() function, here's a sample which you could include in your own
actor.

function string GetItemName(string S)
{
   local int index;
   local string EventName;

   index = InStr(S, chr(9));
   if(index != -1)
      EventName = Left(S, index);
   else
      EventName = S;

   switch(EventName)
   {
      case "btpp_started":
         log("BTPlusPlus has just started.");
           /* You can use this event to check whether BTPlusPlus is active
              or not, note that you have to Touch BEFORE PostBeginPlay. */
         break;
      case "cap":
         log("A cap has occured!");
         break;
      case "server_record":
         log("There's a new server record!");
         break;
      case "boost":
         log("A player has been boosted!");
         break;
      case "boost_record_prevent":
         log("A boost has prevented a player from beating a record!");
   }
   if(index != -1)
      log("This is further information about an event: "@log(Mid(S, index+1)));
}

For getting player IDs and cap times you have to parse the string on your
own. Look into  class'BTPlusPlus' in the source code and SendEvent() function
for more information.

BTPlusPlus also does event logging into the LocalLog, it uses the same names
and parameters as for the event notification. It can be used by statistics
collecting software such as UTStats.


##########
## RANDOM FUTURE IDEAS:
#
 - Make the ray fly through Ghost players if they have antiboost on.
 - Make use of the timestamp in the records database.
 - Add some UWindow tool for setting clientside options and for browsing
   clientside records.
 - Add records for 2nd and a 3rd and display them on some box on the
   scoreboard.
 - Maybe add an additional more precise timer accurate to 0.1 of a seconds.
 - Add a tournament mode, to make BTPlusPlus more pr0. :)


##########
### THX TO:
#
teleport[pl]*bR - (BIG THANKS) for testing, support, ideas
[es]muhomor - for a nice logo
AnthraX - for overall help over the whole time
ffs-Darkside - for help in the beginning of development
Cratos - for help with replication code
Everobody - for patience since I didn't have time to finish this release for a long time. ^^


##########
### CONTACT & FEEDBACK:
#
Email: rushpl@gmail.com
GG: 1930553
I'm also a member of unrealadmin.org site, username Rush.