Injection Documentation v 0.3.15

Contents

Installation

To install Injection, you must first download the binary release, which will be in a file named 'injection-bin-*.zip', where '*' is the version number. Extract this into a new directory somewhere on your hard drive.

Although Injection is a plug-in for Ignition, you no longer need to download Ignition to use it. See the next section for instructions on using Injection Launcher. You should skip the rest of this section if you don't want to mess with Ignition.

However, if you just want to use Ignition as the launcher, download this file . If you don't feel confident with editing configuration files, you may wish to download Ignition from the Injection site here instead, so that Ignition.cfg will already be properly edited. Unzip the Ignition zip file into the same directory as Injection.

If you get Ignition from Beosil's website, you need to add a line in the file Ignition.cfg to tell Ignition to load Injection each time it is executed. Do the following:

Now when you run Ignition, the normal client should open, then another window titled "Injection" should open too. If you download a new version of Ignition.cfg, remember to edit it again in the same way.

Injection Launcher

Run ILaunch by double clicking on the 'ilaunch.exe' program. The window pictured below should be displayed:

Screenshot of Injection Launcher main window

This dialog allows you to select a server to play on and a client to execute, plus a few other things. To get up and running quickly, follow these steps:

  1. Look at the "Client dir:" displayed at the top of the window. If this setting is incorrect, or if you wish to run UO: Third Dawn , click on the "Change" button to select a new directory.
  2. The server drop-down box will not yet contain the server(s) that you want to play on. Click the "Edit List" button.
  3. In this new dialog, type the name of a server (just for description) and the address of that server into the text boxes. Note that the address should be the same as what appears in your login.cfg (e.g. "12.34.56.78,2593").
  4. Now click the "Add" button to add your server to the list. Then click the "OK" button to close the dialog.
  5. Select your newly added server from the drop-down server list.
  6. If you have more than one client version on your computer simultaneously, see the section on editing the client list . If not, just leave the "Default" client selected. However, if you changed the "Client dir" setting, you will need to edit the client list anyway.
  7. The "Ignition.cfg" setting can be left as is. Also, leave both the "Use Injection" and "Exit after launch" boxes checked.
  8. Click the "Launch" button. If no errors occur, the client should start and you may go on the the Connecting section. If an error occurs, see the Troubleshooting section.
The following sections describe the operation of Injection Launcher in more detail:

Client Directory

This setting is necessary so that ILaunch can create the correct "login.cfg" file for the server that you selected. If you wish to run UO: Third Dawn , you will need to change this setting. Clicking on the "Change" button will prompt you to choose a directory.

Server List

This list is designed to make it easy to play on more than one UO server. The "Local" option is only useful if you run a server on the same computer as your client. If you don't know what "Zulu Australia" is, don't worry :-). If you click the "Edit List" button, you will be presented with this dialog:

Screenshot of Editing Server List

Client List

This list is useful if you play on several servers that require different client versions, because you can easily switch between client executables. See also the Connecting section for information on what client to use with Injection.

If you click the "Edit List" button, you will be presented with this dialog:

Screenshot of Editing Client List

Ignition.cfg

Injection Launcher needs to have access to Ignition.cfg to be able to patch the client to remove encryption. The file Ignition.cfg contains a long list of different client versions, along with information on how to patch them. To run Injection, your client version must be present in this file.

If you auto-patch your UO and Injection no longer works, you may need to download a new Ignition.cfg from the Ignition website. If the client is a very recent patch, you may need to wait a few days for the new Ignition.cfg to be released.

Note that Ignition.cfg does not contain any clients earlier than version 2.0.0. Since Injection needs to run with older clients, the file "ilpatch.cfg" in the Injection directory contains some extra patch information. Currently only client version 1.26.4b is supported.

If you want Injection Launcher to use a different Ignition.cfg, click on the "Change" button and select a different file.

Use Injection box

The checkbox labeled "Use Injection" allows you to launch the UO client with or without the Injection plugin. If you play on a server that supports Ignition (such as UOX or Sphere 0.55i and later), you can use Injection Launcher to play on these servers even if you do not wish to use the features of Injection. However, if you play on a server such as POL that is not configured to support Ignition, you must run the client without ILaunch so that encryption is not removed from the client.

Exit after launch box

This box should remain checked for normal operation. If it is unchecked, Injection Launcher will continue running after launching the client. However, since Injection does not (yet) support running multiple clients at once, this feature is not very useful. However, you may still use this feature to launch one client with Injection, then launch another client without Injection (by unchecking the Use Injection box ).

Connecting to a Server

Before connecting to a server, and even before starting the client, you should know what sort of server emulator you are connecting to. To make it simpler, I have tried to list the possibilities below:

Once you have the client running, and have selected the appropriate Encryption setting in the Injection window, enter your account name and password to connect normally.

Features

Details on how to use most of the features of Injection are described in later sections. The major features are listed here to allow you to find what you want more quickly.

Main Window

The main window of Injection contains two tabs: 'Main' and 'Use'.

Main Tab

The Main tab contains some miscellaneous functions that don't fit elsewhere. Many of these are only useful for debugging Injection and would not be useful for players. The Main tab is pictured below:

Object Type

Object Types are kinds of things. The are referred to by their graphic and can be anything that matches that graphic. This tab allows you to customise the operation of the usetype and target commands. By default, only a few types of potions and bandages can be activated with the 'usetype' command. The window is pictured below:

Screenshot of Use Tab

The list shown in this tab contains the names that can be passed as arguments to the 'usetype' and 'targettype' commands. For example, when you want to quickly drink a heal potion with the 'usetype heal' command, Injection searches for items that have the graphic for a heal potion (which happens to be 0x0f0c). To test one of the items on the list, you can double click its name in the list box: this will have the same effect as typing the 'usetype' command.

If you click on 'heal' in the list box, you will see the graphic number displayed in the upper right text box. If you modify this value, you need to click the 'Save' button to update the list. The graphic number will always be displayed as hexadecimal, but you may enter a decimal value if you wish (simply omit the '0x' in front of the number to use decimal).

Object

This tab is similar to the Object Types, but in the Objects tab the items are specific things and are referred to by their serial number rather than their graphic. Items in tis list are used by the ' useobject ' and 'targetobject ' commands. See Object Type for more information on how to use this tab.

Display

In this tab you can select what appears at the top of your screen.

Commands

Many functions of Injection are activated by typing commands while you are playing UO. When you type some speech, commands are recognised by the first character being a comma (,). Please note that when this document refers to a specific command such as 'setarm', it really means ',setarm'.

Some commands have one or more arguments that are typed after the command name. You must type the command name (e.g. ',setdress') followed by a space, then followed by the arguments, with a space in between each argument. If you need to type an argument that CONTAINS a space, put single quotes (') around the argument. Currently there is no way to give an argument that really contains a single quote.

The following commands are available:


Equip commands

setarm (Identifier)

Before using the 'arm' command, you must use 'setarm' to remember the weapon that you want to use. When you type 'setarm', the weapon and/or shield currently in your hands will be remembered for the next time you use 'arm'.

Weapon settings are saved separately for each character.

setdress (identifier)

The 'setdress' command is very similar to the 'setarm' command but works for clothing and armour instead of weapons. Another major difference is that 'setdress' requires an argument called 'identifier'. This argument allows Injection to remember multiple sets of clothing so that, for example, you may quickly switch between a set of plate armour and a set of mage clothing. The 'identifier' argument may contain only letters, digits and underscores.

If the identifier you specify with 'setdress' is already used, the clothing will simply be overwritten with the new items. You do NOT need to first use 'unsetdress'.

unsetarm (Identifier)

The 'unsetarm' command is very similar to the 'setarm' command.

unsetdress (identifier)

The 'unsetdress' command does the opposite of the 'setdress' command. So if you typed ',setdress armour' but wanted to get rid of the settings, you may type ',unsetdress armour'. If you are wondering why you would need to 'unset' a clothing setting, I will admit that it is not necessary and this command was mostly added for completeness.

arm (Identifier)

The 'arm' command will remove whatever you currently have in your hands and put the preset weapon and/or shield into your hands. This means that you do NOT have to first 'disarm' before using 'arm'.

If one or both of the items that you set with 'setarm' are not in your backpack, you will most likely get errors saying something like "You cannot move that".

dress (identifier)

You use 'dress' to wear a set of clothing that was previously remembered using the 'setdress' command. The 'identifier' that you specify must have been already set using 'setdress'. This command will remove all of the clothing, armour and jewellery that you are currently wearing and put the preset clothing on your body.

disarm

This command will remove whatever you currently have in your hands and drop it into your backpack. This means weapons, shields, torches, etc. but not jewellery. Since it works exactly as if you had dragged the items from your paperdoll, 'disarm' does not allow you to remove cursed weapons from your hands.

If one or more of the items that you set with 'setdress' are not in your backpack, you will most likely get errors saying something like "You cannot move that".

undress

This command simply removes all clothing from your body and puts it in your backpack. Like 'disarm', you will not be able to remove cursed clothing this way.

Menu commands

In the context of Injection, a 'menu' (or menu gump) is one of the rectangular windows that usually appears in the top left of your screen when you are selecting an item to craft. The gumps that perform more complex actions such as rune books are not considered to be 'menus'. An example menu is:

Screenshot of Menu Gump (potions)

Please note: the commands in this section are experimental and have not been tested properly yet. Do not be surprised if they do not behave as expected.

An example of the use of the 'waitmenu' and 'choosemenu' commands to automatically choose a lesser heal potion from a menu is:

  1. Say: ,waitmenu potion
  2. Double click a mortar
  3. Target a reagent
  4. Say: ,choosemenu 'Lesser Heal'

See the descriptions of these commands (below) for an explanation.

waitmenu (partial prompt)

This is the first command you should use if you want to automatically select an option from a gump menu. In the above example, the word 'potion' after the 'waitmenu' command specifies part of the prompt string that is normally displayed at the top of the menu window. This is just used to make sure the correct menu is open. In this case, the actual prompt message might be "What sort of potion do you want to make?" but you need only specify a part of this string (but case sensitively).

Please be aware that after you target the reagent, the menu for selecting a type of potion will not appear on your screen. Instead, a message should be printed at the bottom of your screen saying "Menu open, waiting for choice.". At this point, you may type either the 'choosemenu' command or the 'cancelmenu' command.

choosemenu (partial description)

The 'choosemenu' command may be used only after successfully using the 'waitmenu' command specified above. If you can see a menu visible on the client screen, you may not use the 'choosemenu' command to select an option from it.

The 'partial description' argument specifies part of the description string normally displayed at the bottom of the menu window. In the example above, the string 'Lesser Heal' was used to identify which option to select from the menu. Note that if the partial description contains a space, you must enclose it in single quotes (as shown in the example).

If the description you specify cannot be found in the current menu, an error message will be displayed and the current menu will be cancelled. .

cancelmenu

The 'cancelmenu' command may be used only after successfully using the 'waitmenu' command specified above. It simply closes the (invisible) menu that is currently open.

Vendor commands

Please note: the commands in this section are experimental and have not been tested properly yet. Do not be surprised if they do not behave as expected.

shop

This command opens a window that allows you to create "shopping lists" that allow you to quickly buy a set of items from an NPC vendor. The first window is shown below:

Screenshot of first shop window

The top part shows the shopping lists that currently exist, and allows you to edit or delete a list, or shop using a list. The bottom part allows you to create a new list and give it a name.

If you create a new list, or choose to edit an existing list, you will see the dialog illustrated below:

Screenshot of shopping list editing window

The list on the left shows what items are currently on the shopping list, plus the quantities of each (or 'all'). The list on the right will be filled in if you go to a vendor and say "buy" while you have this window open. This allows you to quickly add one or more items to the shopping list without having to type in the exact names. To add an item to the shopping list from the right side list:

Or to do this more quickly, enter the quantity and double click the item in the right side list.

To add an item to the shopping list more manually, type the name and quantity of the item into the boxes at the bottom of the window, and click the "Add" button at the bottom left of the window.

After clicking "Done" in the editing dialog, or if you choose to shop using a list (and bypass editing), the Buy/Sell dialog will be opened:

Screenshot of Buy/Sell window

This dialog allows you to buy or sell items on the list. Once you have this window open, walk near a vendor and click the Buy button or the Sell button. If you are close to more than one NPC, you may type in the NPC's name at the top of the dialog to specify which one you want.

Your character will say "buy" or something similar, and if the vendor responds the results of the transaction should be displayed in the list box. If the vendor does not respond (such as if you are too far away), Injection will wait indefinitely so you should press the Cancel button.

buy (shopping list name) [npc name]
sell (shopping list name) [npc name]

This command is a shortcut for using the shop command to buy or sell using a shopping list. The first argument is the name of a shopping list that has already been defined. The optional second argument is the name of the NPC to trade with. If the NPC does not respond (such as if you are too far away), walk closer and use the command again.

Container Commands

setreceivingcontainer

The 'setreceivingcontainer' command allows you to set the container that will be used to place the items frem another container using the emptycontainer or grab command. When the command is used, a targeting cursor will come up so you target the container you want to use.

unsetreceivingcontainer

The 'unsetreceivingcontainer' command resets the receiving container to your backpack.

emptycontainer (speed)

The 'emptycontainer' command will move all items in targeted container to the container set by the setreceivingcontainer command or your backpack if the receiving container is not set. Where the 'speed' is the milliseconds to pause between moves.

Note: The client does not update until the 'emptycontainer' command is complete. However, the items are being moved, you just don't see the results until the client updates its view. I recommend a speed of 500-1000 on shards that frown on this feature. This will make it look realistic enough to do away with any concerns they may have. Before the 'emptycontainer' command can successfully run, you must first open the container you want to empty.

Targeting Commands

Please note: the commands in this section are experimental and have not been tested properly yet. Do not be surprised if they do not behave as expected.

An example of the use of the 'waittarget' and 'target' commands to automatically target a heal potion and place it in a keg:

  1. Say: ,waittarget
  2. Double click a heg
  3. Say: ,target 'Heal'

See the descriptions of these commands (below) for an explanation.

waittarget

This is the first command you should use if you want to automatically target an item. This tells injection you will be issuing a target command.

Please be aware that after you issue a command that would bring up a target cursor , the targeting cursor will not appear on your screen . Instead, a message should be printed at the bottom of your screen saying "Waiting for target.". At this point, you may type either the 'target' command or the 'canceltarget' command.

targettype (identifier) [color index]

The 'targettype' command is used like the usetype command except it targets the item type instead of double clicking it.. It's arguments are a registered object type name or index and optionally a color index.

targetobject (identifier or serial)

The 'targetobject' command is used like the useobject command except it targets the item instead of double clicking it.. It's arguments are a registered object name or serial number.

targetlast and targetself

Can be used to target the last target or yourself.

canceltarget

The 'canceltarget' command cancels a pending waittarget command.

Miscellaneous commands

usetype (name or graphic) [color index]

The 'usetype' command allows you to automatically double click on an item in your inventory by specifying its graphic. To specify a numeric graphic, type it as a hexadecimal number preceded by '0x'. The following names can be used to specify a few common types of items:

To differentiate between different colored items with the same graphic index, the usetype command now takes an optional color index argument. Example Lava bombs have the same graphic as stamina potions. To specifically use a lava instead of a stamina:

This will use a Lava Bomb (color 0x000e) instead of a stamina.

Note: To get the color of an item, use the info command.

You may add, modify and delete items on this list using the Object Type of the Main Window

useobject (name or serial)

The 'useobject' command allows you to automatically double click on an item in your inventory by specifying its serial. You would use this command to use a specific item like a unique weapon.

dismount

This command can be used while you are on a mount (horse, ostard, etc.) to pick up the 'mount item' and put it in your backpack. This will cause you to be dismounted and an item looking like the pack from a pack horse OR a piece of a ship will be in your backpack.

Please note:

Do not send me complaints about this command, because I know that it can be considered to be exploiting a bug. However it should be easy for emulator developers to fix, and may even be fixable through scripting.

mount

The mount command is useful only for getting back on a dismounted dark brown horse when on a POL or UOX server. As described in the dismount command above, types of mounts other than brown horses cannot be remounted on POL/UOX. On Sphere, any mount can be remounted by simply double clicking it.

light [level]

The 'light' command allows you to permanently fix the light level. By default, the light level you see in the client is dictated by the server. If you type the 'light' command with a numeric parameter (0 to 31), the light level will be fixed at that amount. Typing the command without parameters is equivalent to typing 'light 0' (which is the brightest). If the light level is already fixed, giving the command without parameters will change back to the normal (variable) lighting.

If you think this command is unfair, do not complain to me because I will not remove it. Injection is open source so anyone could add the command themself, or hack the client to achieve the same effect.

Light settings are saved separately for each character.

grab

The 'grab' command allows you to grab an object and place it in your backpack or the container set with the setreceivingcontainer command. When you issue the 'grab' command, a targeting curson will be displayed. Just target the object you want to grab and it will be placed into your backpack.

cast

The 'cast' command allows you cast a spell. When you use this command you need the exact 'spell name' that is in the spell book, this is also case sensitive. IE: ',cast Magic Arrow' You can also take advantage of the targetting system and put ',cast [spell name] target where target is ether last or self example:

,cast 'Magic Arrow' last

This will cast Magic Arrow at last target.

Compatibility commands

fixwalk

This command is a workaround for a bug in some versions of Sphere (e.g. 0.55i) where the server incorrectly interprets 'walk' messages. If you are trying to walk around and the movement is jumpy, this command may help. This behaviour also manifests as messages appearing in the server console every time you walk, saying something like "Bad msg, eat 4 bytes".

Please be aware that using this command on a server that does not have this problem will surely cause problems (probably just disconnection, nothing serious).

This setting applies to all characters in all accounts on the current server.

fixtalk

This command is a workaround for a bug in (at least) POL version 0.92 when speaking. Clients such as version 3.0.0 and higher use a different method to talk, and since POL does not understand, some of your speech may appear garbled. If this occurs, you may try this command and see if it helps. Unlike the 'fixwalk' command, using this command on servers that do not have the problem should be harmless.

If you find that you need to use this command, you will probably have more stable gameplay if you use an older client such as 2.0.0 instead.

This setting applies to all characters in all accounts on the current server.

Debugging commands

dump

Writes a list of the current known items in the world to the log file. This is for debugging only and would not be useful for most people.

flush

Flushes the currently buffered output to the log file. This is for debugging only.

saveconfig

Saves the current configuration data to the file 'injection.xml'. This is not necessary except for debugging, because the configuration is automatically saved when you exit the client. However, if the client crashes none of the configuration is saved, so your settings will revert to what they were before you started the client.

version

Prints the version number of Injection. This command is no longer necessary because the version number is displayed in the Main Tab .


Bugs and Troubleshooting

Some of the common problems you may encounter when installing and using Injection are:

The following error messages only appear when using Ignition: