Bindings always work for me. PLEASE FOLLOW EVERY STEP and it will work for you too.
We'll be altering the UTInput.ini file. Make a backup just in case. Just copy and paste the file in the same spot and it will name the new one "Copy of UTInput.ini".
First off, you MUST unbind the keys you want to use. All you have to do is open UT3. Open the Settings-->Input menu. Click "Keys" at the bottom of the screen. Set the "Fire" function to the key you wish to use, and then set "Fire" back to the left mouse button (LMB). Voila, the key is now unbound.
Open C:\Documents and Settings\*YourName*\My Documents\My Games\Unreal Tournament 3\UTGame\Config\UTInput.ini.
You must now make a binding for what you want to use. You make the changes in the section marked [Engine.PlayerInput]. There is a section marked [UTGame.UTPlayerInput] with all the same lines, but I'm not totally sure what it's for, and changes to it don't seem to do anything.
where X is the key you wish to use and Y is the command.
Multiple commands can be piped in, such as change to a weapon plus change mouse sensitivity.
Bindings=(Name="X",Command="Y | Z")
where X is the key you wish to use, Y is a command and Z is a command. There is a space before and after the pipe "|".
A command is what you enter in the console in game, from "Say" to "GOD" to "Screenshot".
If the key you wish to use isn't already on the list, you can add it. Letters are represented by the capital of said letter, e.g. "K". F keys are represented as such "F8" "F9". Symbols and numbers are represented by the written name of the key, e.g. "Minus" "Comma" "SpaceBar" "seven" "eight". Numpad keys are as such "NumPadZero" "NumPadFive" etc.
When binding a key for the first time I recommend binding a "Say" command because it's simple to test. Once you are sure it's working, you can use any command possible that you can enter in the console while in game.
I'm going to bind my "J" key to say "It works!" I made a backup already, so I open UT3 and in the Settings-->Input-->Keys menu I set my "Fire" function to "J". Then I set "Fire" back to LMB. My "J" key is now unbound.
I now open my UTInput.ini file found in My Documents. At the top of the file under [Engine.PlayerInput] I find Bindings=(Name="J",Command="Taunt 1"). Unbinding a key does not clear it's definition in this list for some reason, that's why it's still set to "Taunt 1".
I change the entry to this:
Bindings=(Name="J",Command="Say It works!")
Now I open UT3 and start an Instant Action match and test that bad boy out.
5. What else can I do?
"Say" and "TeamSay" macros are just the beginning. There are many things that can be done. Most popular would be binding weapons to keys.
Bindings=(Name="X",Command="GBA_SwitchWeapon1") where 1 can be any number 0-9 representing each weapon respectively.
You can bind ThrowWeapon, a command that is not in the game by default. WeaponsStay must be off for it to work:
Bindings=(Name="X",Command="ThrowWeapon | teamsay Weapon Dropped")
You can instantly connect to a favorite server:
Bindings=(Name="X",Command="Open xx.xx.xxx.xxx") where x is the IP.
You can bind mouse sensitivity:
Bindings=(Name="X",Command="setsensitivity 20.0") where 20.0 is actually 2000 in the in game settings. Whatever setting you want it to be in game, divide that number by 100 and use that.
You can bind field of view:
Bindings=(Name="X",Command="FOV 100") where 100 can be any number 80-100 which are the limits the game allows.
You can bind suicide:
You can combine multiple commands as explained above. For example:
Bindings=(Name="nine",Command="GBA_SwitchWeapon9 | FOV 80 | setsensitivity 7.5") Will change to sniper, zoom my FOV and set my sensitivity to 750.
Bindings=(Name="G",Command="GBA_SwitchToBestWeapon | FOV 100 | setsensitivity 15.0") will change to my best weapon, return to widescreen FOV and return my sensitivity to 1500.
The purpose of this binding is to increase my accuracy when sniping at a distance and when someone approaches me I instantly bust out a close range weapon and return my controls and view to normal.
You can bind a key to alternate between two weapons. In this example it will rotate between Flak and Rockets.
Bindings=(Name="PipeC",Command="switchweapon 8 | switchweapon 7 | setbind o PipeD")
Bindings=(Name="PipeD",Command="switchweapon 7 | switchweapon 8 | setbind o PipeC")
"o" is initially "PipeC" which has two switch weapon commands. One will take priority if you have both weapons, but if you only have one it will bring that one up. Then it changes "o" to "PipeD" which alternates the priority of the weapons, so that if you have both you will draw the other weapon. Then "o" is changed back to "PipeC".
"PipeC" and "PipeD" are names than are chosen by the user, and can be changed to anything not already in use. e.g. if you wanted to pipe bind another key then you could make them "PipeA" and "PipeB".
You can bind a hammer jump: (thanks go to Mr. Evil)
Bindings=(Name="StartHammer",Command="ToggleMelee | StartFire")
Bindings=(Name="StopHammer",Command="Jump | OnRelease StopFire | OnRelease ToggleMelee")
That's all I can think of right now. If someone has something they want to do, but aren't too savvy with this kind of thing, ask me and I'll see if I can write the lines for you.