
 ~ X-Battle a modification for Quake 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   Date:  January, 2006
   Url:   http://www.xbattle.de/
   Mail:  info@xbattle.de
   Wiki:  http://wiki.xbattle.de/

   Feel free to visit us at #BattleMod in QuakeNet :)

 ~ Log format specification ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Each log entry is in this format:
 
 	time [arena] identifier [arguments]
 
 time			Current game time in milliseconds. Note: Quake 4 seems to reset
 				game time only on map changes.
 				
 arena			Only in Tourney games: then arena id, where the event happened.
 
 identifier		Identifying the current event as described below. Each identifier
 				is finished with a colon (':'), except for the divider between
 				games, which consists of 40 minus ('-').
 
 arguments		Depending on the event there may be a variable ammount of
 				arguments, as described below.
 				
 ~ Identifiers according to events in game ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 ~ Game begin / end
 
 InitGame:			Followed by a list of important CVars and their values,
 					which are divided by two backslashes ('\\')
	 					\\CVar\\value
 
 ServerTime:		Shows the current server time in GMT.
 					Format yyyy-mm-dd hh:nn:ss
	 				yyyy	4 digits year, e.g. 2005
	 				mm		2 digits month number [1..12]
	 				dd		2 digits day of month [1..31]
	 				hh		2 digits hour in 24h format [0..23]
	 				nn		2 digits minutes of hour [0..59]
	 				ss		2 digits seconds of minute [0..59]
 
 EndGame:			<reason>
 					If the game is finished properly, this appears in log 
 					followed by the reason of endgame, which can currently be
	 					Timelimit_Hit
	 					Fraglimit_Hit
	 					Capturelimit_Hit
	 					Suddendeath
	 					Roundlimit_Hit
	 
 ShutdownGame:		No argument.
 
 ~ Gamestate
 
 GameStateChanged:	<gamestate>
 					This appears at the beginning of a new gamestate. The
 					gamestate is specified by the argument:
	 					Warmup
	 					Gameon
	 					Suddendeath
	 					Overtime
	 					Countdown
	 
 ~ Client connect / begin / disconnect / userinfos
 
 ClientConnect:		<clientNum>
 
 ClientBegin:		<clientNum>
 					This appears when the client enters the game.
 
 ClientDisconnect:	<clientNum>
 
 ClientUserInfoChanged:	<clientNum> <userinfo>
 					Everytime a client changes his userinfo, e.g. name but
 					also ready status or team, this is printed in log. The
 					argument <userinfo> has similar format as on InitGame:, 
 						\\Cvar\\value
 					Cvar "ci_flags" is a bitmask:
 						1	- players team (Strogg if set, else Marine)
 						2	- spectating
 						4	- ready status (ready if set)
 						8	- player is referee
 						16	- player is captain
 						32	- coach for team Marine
 						64	- coach for team Strogg
 					
 ~ Chatting
 
 Say:				<clientNum> "<chattext>"
 
 SayTeam:			<clientNum> "<chattext>"
 
 SaySpecs:			<clientNum> "<chattext>"
 
 ~ Item pickup / drop
 
 ItemPickup:		<clientNum> <item>
 					Please notice that flag pickups are handled as item
 					pickups internal.
 
 ItemDrop:			<clientNum> <item>
 
 ~ Flag capture / drop / return
 
 FlagCaptured:		<clientNum>
 
 FlagDropped:		<clientNum> [<clientNum>]
 					The first argument specifies the flag carrier, the second
 					one the attacker. The second argument may be omitted if
 					flag carrier is killed by world or suicide.
 
 FlagReturned:		<clientNum>
 
 ~ Damage / Kill
 
 WorldDamage:		<clientNum> <reason> <damage>
 					With <reason> specifying the damage reason, e.g.
 					'damage_hardfall' and <damage> the ammount of damage taken.
 
 SelfDamage:		<clientNum> <speed> <position> <reason> <damage>
 					Arguments <reason> and <damage> as above; <speed> is the
 					current movement speed in units per second, <position>
 					shows one of the following states:
	 					ground
	 					air
	 					water
	 
 TeamDamage:		<clientNum> <speed> <position> \
  					<clientNum> <weapon> <speed> <position> \
  					<distance> <reason> <damage>
  					The first three arguments specifiy attacker data, the next
  					four victim data. <weapon> is the current weapon hold,
  					<distance> the distance between attacker and victim in
  					units.
 
 Damage:			<clientNum> <speed> <position> \
  					<clientNum> <weapon> <speed> <position> \
  					<distance> <reason> <damage>
  
 WorldKill:			<clientNum> <weapon>
 					Even if <weapon> is not the best identifier here, it
 					represents how it is handled internal. Additionally to
 					real weapons this can be:
	 					telefragged
	 					fallingdeath
	 					triggerdeath
	 					paintriggerdeath
	 					drowning
	 					crushed
	 					burned
	 
 Suicide:			<clientNum> <weapon>
 
 TeamKill:			<clientNum> <clientNum> <weapon>
 					The first argument identifies the victim, the second one
 					the attacker.
 
 Kill:				<clientNum> <clientNum> <weapon>
 					The first argument identifies the victim, the second one
 					the attacker.
 
 ~ Awards
 
 InGameAward:		<clientNum> <award>
 					The second argument specifies the award given:
	 					capture
	 					humiliation
	 					impressive
	 					excellent
	 					assist
	 					defense
	 					combo_kill
	 					rampage
	 					holy_shit
	 				
 ~ Point (round based games like ClanArena)
 
 Point:				<teamName>
 					The argument shows the team gaining a point.
	 
 ~ Kick / ban
 
 Kick:				<clientNum>
 
 Ban:				<clientNum> <guid>
 					With <guid> being the internal guid, not the punkbuster
 					guid.
 
 RemoveBan:			<guid>
 
 - Voting
 
 Vote:				<clientNum> <vote>
 					Argument <vote> is printed similar to userinfo or init game:
	 					\\subject_to_vote\\new_value
 
 VoteResult:		<result> <yesNum> <noNum>
 					The first argument indicates the result of the vote, which may
 					be:
	 					PASSED
	 					ABORTED
	 					FAILED
 					The arguments two and three show the number of players voted
 					yes or no.
 
 VotePlayer:		<clientNum> <players_vote>
 					If a player takes part at a vote, his voting is shown here:
	 					YES
	 					NO
 
 ~ Powerups
 
 PowerUpBegin:		<clientNum> <powerup>
 					This indicates whenever a player gets a powerup, which can be:
	 					quaddamage
	 					haste
	 					regeneration
	 					invisibility
	 					ammoregen
 
 PowerUpEnd:		<clientNum> <powerup>
 
 ~ Timeout
 
 TimeOut:			<clientNum> [<team>] <command>
 						or
 					<command> <duration>
 					The first possibility shows the commands that can be called
 					by a player; <team> is the team number of the player
 					calling the command; <command> can be:
	 					TIMEOUT
	 					TIMEOUT_REFEREE
	 					TIMEIN
	 					TIMEIN_REFEREE
	 					GAMEON
 					The last value indicates the second possibility, that shows
 					server called timein finally and game goes on. Therefor
 					<duration> is the timeout length in milliseconds.
 