We have detected that cookies are not enabled on your browser. Please enable cookies to ensure the proper experience.
Results 1 to 14 of 14

Threaded View

  1. #1
    Join Date
    Oct 2009

    Smile Lotro UI and keyboard bindings (aliases, shorcuts and custom keyboard bindings)

    I got some complaints that when the forums switched my old post was deleted and since I had a backup I figured I might repost.

    This is a guide on how to manually edit lotro.keymap in order
    to customize keybindings beyond what the standard user interface
    allows or supports.

    This guide does not cover the Lotro Client Alias/Shorcut abilities
    although they are very handy in combination with custom key bindings.
    You can find fine guides at the following websites:

    There is only one set of key bindings for all your characters in LOTRO and these bindings are loaded from lotro.keymap which is located in "My Documents/Lord of the Rings Online" folder.

    If you want to have different key bindings for each of your characters you can either use different operating system users for each character or you can replace/switch the file before starting the game and every time you want to change characters. The game will not reload the file or read any changes until it's restarted, it does however write to lotro.keymap straight away if changes are done through the options UI.

    If you load the client and it is unable to parse the lotro.keymap file it will be overwritten with a default file, for this reason you should always back up your changed file after any changes or risk loosing them.
    If you have changed the structure, order or made an invalid binding the client will attempt to "correct" the file, this means that any clean up is futile since it will be scrambled the next time the client loads.

    The basic structure of the file is:

    Devices - An ordered list of all input devices available, keyboard, mouse, etc
    MetaKeys - Function keys that work as modifiers on other keys, shift, alt, ctrl, etc
    Bindings - The part of the file that binds keys to actions
    Main - The main UI, all combat actions, selections, etc
    EditControls - Key bindings for editing text fields, like chat window and such
    SelectionUI - Bindings for instantly pointing your character in the direction of the view
    MusicUI - Bindings for playing music in game
    MapPanel - Bindings when in map view
    VendorBuyUI - Bindings when in vendor purchase view, stack purchase, volume purchase, etc
    ScrollableControls - Bindings connected to any scrollwheel?
    ScrollableControls_Mouse - Bindings connected to scrollwheel on mouse
    CopyAndPasteControls - Controls for copying/pasting text
    DialogBoxes - Controls for dialog boxes?
    DebugConsole - Bindings for the debug console
    StringTokenDebugger - Bindings for the String token debugger (only used by dev/test)
    The sections we are concerned with are Devices, MetaKeys, Main, SelectionUI and ScrollableControls_Mouse.

    Keys are represented by keyboard device constants as defined by Microsoft, for a full definition see:

    Typically this just means that it's prefixed with DIK_, examples:


    The more obscure keys are represented by their name such as:



    A list of all the devices used for input into lotro, typically you are only concerned with the first two entries and won't have to change this file at all. The first two entries define the keyboard and mouse as devices 0 and 1 as shown here:

    Keyboard [ GUID_SysKeyboard ]
    Mouse [ GUID_SysMouse ]

    This is where you define meta keys, you might already be familiar with some of the default meta keys used by Lotro like SHIFT and CTRL, by defining a key as a meta key it becomes
    possible to bind an action that is only performed if the meta key and another key are pressed
    at the same time. You can bind multiple keys to perform the same meta function, for example
    so that either left or right shift can be pressed and then another button. You can define up
    to 32 functions with multiple meta keys for each.

    Here is an example where both left and right shift are defined as meta keys for function 1:

    1 [ 0 DIK_LSHIFT ]
    1 [ 0 DIK_RSHIFT ]

    The First number in that example is the function ID, the second number is the device ID from
    the Devices section, the third parameter is the name of the key constant.

    You can also use mouse buttons as meta keys as shown here:

    1 [ 1 DIMOFS_BUTTON3 ]
    2 [ 1 DIMOFS_BUTTON4 ]
    3 [ 1 DIMOFS_BUTTON0 ]
    4 [ 1 DIMOFS_BUTTON1 ]

    Button 0 is the left mouse button
    Button 1 is the right mouse button
    Button 2 is the scrollwheel
    Button 3 is the back side button
    Button 4 is the front side button

    Each of the function id's is now enumerated in bits (binary) and represented in hex.
    What this means is that when using the function with key bindings you will be using their
    hex codes, here is an example config and the corresponding hex codes.

    1 [ 0 DIK_LSHIFT ]
    1 [ 0 DIK_RSHIFT ]
    2 [ 0 DIK_LCONTROL ]
    2 [ 0 DIK_RCONTROL ]
    3 [ 0 DIK_LMENU ]
    3 [ 0 DIK_RALT ]
    4 [ 0 DIK_LWIN ]
    4 [ 0 DIK_RWIN ]

    The corresponding hex codes for the functions, 1-4 and 0 by default being none:

    0x00000000 - None
    0x00000001 - Shift
    0x00000002 - Ctrl
    0x00000004 - Alt
    0x00000010 - Win

    The hex codes continue doubling as:


    What this means is that you can define key bindings which require multiple meta keys
    to be pressed by adding the hex codes, for example here is a binding that requires
    Ctrl, Alt and Shift to be pressed along with the "S" key.

    QUICKSLOT_1 [ User [ 0 DIK_S ] 0x0000007 ]

    Here is another binding that only requires the Win and S keys to be pressed togeather:

    QUICKSLOT_2 [ User [ 0 DIK_S ] 0x00000010 ]


    This is where most of the key bindings are located and almost all of the ones you will
    want to edit, there are a couple of things to keep in mind.
    The order of the key bindings is fixed, the client requires the keys to be defined
    in the default order and even if you are not using a key you still need to define it
    if it's one of the original keys.
    Key mappings come in two varieties, original "Old" ones and user created, example:

    MovementLongJump [ Old [ 0 DIK_SPACE ] ]
    ToggleJournalPanel [ User [ 0 DIK_P ] ]

    The first binding is a default binding and as such is marked "Old", the second one is
    a custom binding and is therefor marked "User", it's important to mark any changed lines
    to "User" or the client will overwrite them with the default binding.
    If you want to remove a default binding without replacing it with something else you
    need to put in a DoNothing line, example:

    DoNothing [ User [ 0 DIK_DOWNARROW ] ]

    Key bindings can also include a Meta Key defined in the MetaKeys section, here is an
    example of a default "Old" binding that uses function 1 as a MetaKey, in this case
    it's the LootAll binding which is by default bound to shift/right mouse button.

    AutoLootAll [ Old [ 1 DIMOFS_BUTTON1 ] 0x00000001 ]

    In addition to the Meta Key you can define a Modifier, a modifier enables you to
    define the type/part of a keypress to bind an action to, the common modifiers are:
    Up, Down, DblClick and Tap. Up and Down correspond to when the key is pressed and
    release, doubleclick means two clicks within about 200ms and tap means that the
    button is depressed for less than c.a. 100ms. You can also specify the keyword Nearby which
    blocks a doubleclick from being detected if the mouse moves to far between clicks.

    Each combination of Key, MetaKey and Modifier can only be bound to one action but
    by binding two separate actions to the Up and Down modifiers you can peform two
    actions in one keystroke. Here is an example:

    ChatModeReply [ User [ 0 DIK_LWIN ] 0x00000000 Tap ]
    VOICECHAT_TALK [ User [ 0 DIK_LWIN ] 0x00000000 Down ]

    Here is another handy example, this example performes activates two quickslots, one could
    for example be an ingame alias/shortcut to notify the group that ;target is being buffed
    and the other quickslot could perform the actual buff.

    QUICKSLOT_12 [ User [ 0 DIK_2 ] 0x00000040 Tap ]
    QUICKSLOT_62 [ User [ 0 DIK_2 ] 0x00000040 Down ]

    This example binds two actions to the Left Windows button, chat reply and voicechat talk,
    if the user just taps the key it's considered a chat reply, if the button is held down
    it's considered a voicechat push to talk button.

    I won't cover all the keys and bindings, these should all be present by default and the naming is self explanatory.


    All this section defines is a button that instantly points your character in the direction
    that the camera is facing, not that this is very handy when kiting mobs.

    This section deals with the scroll ability of the scroll wheel on your mouse, you can bind these
    to do custom actions, one good example would be bindings to use it for next/previous targets as
    shown in this example:

    SELECTION_NEXT_FOE [ User [ 1 DIMOFS_Z AxisPositive ] ]
    SELECTION_PREVIOUS_FOE [ User [ 1 DIMOFS_Z AxisNegative ] ]

    That's it, I recommend you also read the header of the default lotro.keymap, it's very useful when you have some background to understand it.

    For reference here is a link to my personal lotro.keymap that can be used as a template/reference along with a screenshot explaining it:

    If you have found this guide helpful you might want to check out my Logitech G15/G19 LotroLCD application and my Logitech G15 keyboard profile.

    http://dallur.com/fileadmin/user_upl...stallerX86.msi (32 bit)
    http://dallur.com/fileadmin/user_upl...stallerX64.msi (64 bit)

    Feel free to drop me an email or in game msg with comments or just to chat.
    Last edited by Vindalfur; Oct 06 2010 at 05:04 PM.
    Jarl Stefansson
    Vindalfur @ Brandywine



Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

This form's session has expired. You need to reload the page.