Extra credits and thanks: Wormbo for the RadioBox class.

Added:

Much better alias system, which allows unlimited, multiple commands aliases
and menus.
New console settings panel accessible with alt-p.
New spectating modes (see commands.txt): nukers, xspec.
IP address of server in status bar.
IRC commands for admins/moderators to use with IRC bots.
Dynamically coloured console text, switchable with colours/colors commands.
Console colours can be set in XConsole.ini [XConsole.XConsole_ConsoleTextArea]
section.
Clickable links and IPs in console (can turn off with 'links' command).
Variables that are usable in a bind/alias.
Support for bExtra button binds to take UT or XConsole commands/aliases.
Extra HUD info about people removing buildings in Siege.
Console tabs can be traversed using alt+PageUp/PageDown keys.
Console scrolls 20 lines with PageUp/PageDown.
Font settings for scrollback, input box, IRC and player list.
MaxLines setting for console auto-adjusted depending on which logging
mode is used.
Siege stats in HUD while spectating.
Added second custom buttons page.
Added a fixed width console/irc font in separate XFonts package.
Added TabComplete[] list to ini to add custom commands to.

Notes:

bExtra buttons will probably not work as a player on most servers and is
not designed to.

Bugs fixed:

If UT is minimised, then maximised and there is a link in the console
it may open the link automatically. If you are having problems with
this you can toggle on/off links with the 'links' command. This is not
really a bugfix, it's a workaround and is a Windows problem only.
Fixed console position saving. Saves in FullScreen *only*.
Fixed Pure logging in non-safemode (safe mode is only needed for
LeagueAssault servers now).

Log files generated by UT are in UTF-8, but in some editors/browsers
the files will look scrambled. I've fixed this for Windows users
(thanks to Higor), but there is a problem in Linux UT that can't
be fixed (at least we haven't found how yet).

For Linux, it's fixable in Vim with the following 
in ~/.vimrc:

autocmd BufRead ~/.loki/ut/XLogs/*.log :call ProcessUTLog()
autocmd BufRead ~/.loki/ut/XLogs/*.html :call ProcessUTLog()

function ProcessUTLog()
    :silent %s/\%x00//g
    :silent %s/\%x0D//g
endfun

That should allow you to view logs on a *nix box directly with
Vim if it's installed. Other editors may allow you to do something
similar. Some unmentionable editors take a best guess at wtf the
file is and sometimes get lucky, or not.




Bugs not fixed:

There is a bug in UT's ViewPlayerNum command. It was fixed by UTPure
but on servers without Pure running the command may not work and 
you may find that double-clicking a name in player list may not
change to that player. Unfortunately, this can only be fixed
server-side as far as I know. This is more a problem for linux users
than windows.

I've added two commands to workaround this: viewbynum and viewbyname.
One of those ought to work, but unicode characters in player names
can break things when using viewbyname.

There's a bug in UT's IRC Link class that refuses to print a : or ! if a
line of chat starts with those characters. I did make a custom Link
class which addresses this problem but CSHP will block it running or
even kick you for using it.

If you close XConsole by clicking the X while the UT menu is showing it
will hide the menu too. This is on the todo list.


Help                                    Help Menu
help pages                              Help on tabs/pages
help commands                           Help on commands
help aliases                            Help on aliases
help irc                                Help on irc

log                                     Toggle logging chat
lock                                    Make logging sticky (start when UT starts)
spec                                    Spectate
play                                    Play
spectate                                Ditto
follow  <ID>                            Follow player with ID. It saves their name and will work over each map change until they leave or you use 'stopfollow'
stopfollow                              Stop following a player
loadtimer                               Loads the log timer (can cause kick)
killtimer                               Kill the log timer
safemode                                Switch logging mode to safemode (no kick)
timeon                                  Turn on time in console status bar
timeoff                                 Turn off time
showdemowin                             Make the demo recording window visible
modlogin                                Moderator login (LAS only)
modlogout                               Moderator logout (LAS)
login [password]                        Admin login with saved password. If password is given it is saved so you only need use 'login' alone next time (saves on server IP basis) *Only works with saved passwords when the 'Admin' page is showing.
logout                                  Admin logout
dump                                    Save chat log to file save in XLogs/
info                                    Various info on level, time etc
load                                    Load saved settings (obsolete)
save                                    Manually save settings
trans                                   Toggle transparent console background
beep                                    Make a beep!
playbeep                                Ditto but with a different method
time                                    Echo time to console
saytime                                 Say the time in game
saydate                                 Say the date in game
sticky                                  Makes the console stick to the screen so that you can move in game while watching output (meant for debugging really. Esc closes it)
blue/red/green/gold                     Change teams to whichever
alias                                   Work with command aliases (see below)
rememberpos                             Remember console position
freeze                                  Freeze console scrolling
close                                   Close console
viewmode  <0/1>                         Save behindview mode for use with other commands that use it
setadminpass  <pass>                    Set and save the admin pass
setmodpass  <pass>                      Set and save the moderator pass (LAS)
adminlogin  <pass>                      Admin login and save pass for server IP
login <pass>                            Ditto
moderatorlogin <pass>                   Moderator login (LAS)
echo <text>                             Echo text to console
exo <text>                              Echo text to console and chat area in HUD
font <1,2,3,4>                          Adjust console font
listfont <1,2,3,4>                      Adjust font in player list (1-4)
inputfont <1,2,3,4>                     Adjust font in input box (1-4) (not on IRC page yet)
keys <N>                                Load key macros number N
list <class>                            List actors in game
scan                                    Scan all players for hitbox, hitradius misuse
spy <ID>                                Scan single player for hitbox, hitradius etc
xsummon                                 Summon actor using current gametype as package name if no other package is given (Botpack etc)
chatonly                                Toggle on/off only seeing chat in the console
timestamps                              Toggle on/of timesstamps in the console (not game time, real time.)
colours                                 Toggle on/off coloured nicks in console
colors                                  Ditto
links                                   Toggle on/off clickable links
xspec                                   Toggle new spectator mode that follows player in 3rd person and auto-aligns to their direction
xspec on                                XSpec on
xspec off                               XSpec off
stats on/off                            Show Siege Stats for specced player in HUD
stats <colour1> <colour2>               Set stats text colours. Colours can be red, blue, green, gold or cyan.
viewbyname                              When doubleclicking on name in player list, it will execute 'viewplayer <name>' command.
viewbynum                               Like above but uses 'viewplayernum <id>' (default).

*UT99's ViewPlayerNum command doesn't always work. UTPure fixed it, but on servers where it just work use viewbyname.
=========================================================

Aliases:

Aiases are a way to make shortcuts for long commands (or any command really). There can be more than one command in an alias and they will be run one after the other.

Alias commands:

alias                                   List aliases
alias add <alias name> <command(s)>     Add or update and alias. Commands should be separated by a ; semi-colon
alias del <alias name>                  Delete an alias

Example:

alias add 0 behindview 0; close

Now when you type '0' in the console it will execute a behindview 0, followed by the close command which closes the console. You can have as many commands in an alias as UT will allow (not totally sure how long a command string can be before it complains!). You cannot however put one alias inside another.

Some aliases are already made for you as examples (on install for first time only!):

s = spec (go from player to spectator)
p = play (go from spectator to player)
r = red  (change team to red)
b = blue (change team to blue)

The were made by these commands:
alias add s spec
alias add p play
.. etc

=========================================================

Binds:

Middlemouse                             Toggle first person, third person view and sets ViewMode variable.
Ctrl-k                                  Open console settings panel.

=========================================================

Variables:

%GAME%                                  Will be replaced by current gametype (summon %GAME%.class for example)

=========================================================

IRC commands (for the console, not IRC page):

IRC commands are aimed at sending commands to IRC bots, rather than general IRC use, but can be used for pretty much anything. They were built for the admin bot on uK servers. In game you can ':target' a player, which saves that players ID, then send the IRC bot a command to moderate that player via private message to the bot. The ID of course changes each level, so you need to set it again after each map change. Example:

First set your IRC bot's nick as %IRCBOTNICK%:
:ircbotnick IRCInstaGibBot

Then add a 'kick' command:
:add kick PRIVMSG %IRCBOTNICK% kickid %TARGET% %PASSWORD%

to add the kick command, then after that ':target' a player and just use
:kick

to kick him or her. You can target by spectating the player and typing 'target' or alternatively use 'target N' where N is the player ID in the player list box. You can also set up a kickid command to kick by name by ommiting the %TARGET% and using %MSG% instead:
:add kickid PRIVMSG %IRCBOTNICK% kickid %MSG% %PASSWORD%

Then you'd use ':kickid N' where N is the player's ID from player list box.

Commands:

:add <aliasname> <aliascommand>         Add an IRC command
:del <aliasname>                        Delete an IRC command
:list                                   List custom IRC commands
:irc <command>                          Send  a  command  to  IRC
:connect <netname|server>               Connect to name network name or server
:disconnect                             Disconnect
:target [stop]                          Set current spectated player as %TARGET%
:ircbotnick <irc bot nick>              Set IRC nick/channel for privmsg (saves in UnrealTourname.ini)
:ircbotpass <password>                  Set IRC bot password (saves in UnrealTournament.ini)

Variables:

%TARGET%                                Variable that gets replaced by game nick targetted (':target' command on player)
%IRCBOTNICK%                            Variable that gets replaced by IRC nick targetted (':nicktarget' command)
%PASSWORD%                              Variable that gets replaced by the IRCBotPass variable set by ':ircbotpass'
%MSG%                                   Variable that is replaced by all text following a command. Useful for 'say' or 'admin say'

Note that IRC commands use raw IRC commands, where PRIVMSG is used instead of /msg that you'd normally use in a client. See the IRC RFC for details. MSG command is automatically converted to PRIVMSG by UT's IRC Link so it can be used instead of PRIVMSG.

RightMouse                             Toggles between target and own camera.

=========================================================

Nukers stuff (Siege spectator mode):

nukers <team/all/stop> [weapon]         Follow nukers in Siege. Weapon defaults to sgNukeLauncher. Team means red, blue, green or gold.
prevnuker                               Previous Nuker
nextnuker                               Next  nuker
togglehud                               Toggle on/off the nukers/remover hud functions
extrabuttons                            Toggle on/off reading the nukers buttons
autoswitch                              Toggle on/off autoswitching viewing nukers
Mousesheel                              Cycle nukers list
nukedelay                               Sets the time to remain on nuker after he/she has died (default 200)

While spectating with nukers activated left mouse cycles players and sets normal (non-nuker) spectatee, mouse wheel cycles up and down nukers list. Note that nukers are found when they switch  to a nuke so that they are holding it.

=========================================================
Buttons:

There are 4 buttons that XConsole will scan for if bExtraButtons=True
(Use the ExtraButtons command)

Since there are 4 buttons this gives us 15 possible combinations in a
binary formation reading right to left:
0001 0010 0011 ... etc 

The buttons are bExtra3, bExtra2, bExtra1, bExtra0

So then the mapping looks like this: 3210

A button is activated by the keybind 'button bExtraN' where N is the number

Example in User.ini:
PageUp=button bExtra0
PageDown=button bExtra1

For a combination just specify the ones that should be ON with a | divider:
Delete=button bExtra1 | button bExtra0

This corresponds to Button0011 in your UnrealTournament.ini
[XConsole.XConsole] section:
Button0011=ToggleHud
which by default is set to toggle the XConsole HUD 

The first time you open the console the defaults are saved in
UnrealTournament.ini

So setting these binds up is a twofold action: you need to set the keybind
and set the ButtonNNNN in UnrealTournament.ini for the command you want

You can put any command on these keys, but they were intended for nukers things so the defaults are:

    Button0001=PrevNuker
    Button0010=NextNuker
    Button0011=ToggleHud
    Button0100=ViewNormal
    Button0101=ViewTargetted
    Button0110=RemoversHud

The Buttonlist command will list Button commands in console.

See 'help buttons' for more info.

=========================================================

Removers stuff (Siege moderator commands):

removers                                Follow  team removers  in  Siege
removershud                             Toggle on/off removers in the hud
