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:
#!module "Sniffy.dll"
!module "injection.dll"
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.
Run ILaunch by double clicking on the 'ilaunch.exe' program. The window pictured below should be displayed:
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:
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.
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:
This is the same format as appears in the "login.cfg" file in your UO client directory. Two examples are: "127.0.0.1,2593" and "shard.foo.org,5003".
The username and password boxes are used to pass your login information to the UO client. This is done by modifying your uo,cfg prior to launching. If the username is left blank, the uo.cfg will not be changed. If the username is set and the password is left blank, the uo.cfg will be updated with your username and you will have to enter a password in the client. If both the username and password are provided, the uo.cfg will be modified to include both your username and password and the client will have these fields filled in for you.
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:
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.
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.
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 ).
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:
There are at least three ways that a POL server can be configured, and this will affect the settings you need for Injection. The webpage for the shard should tell you the client version that is required.
If the server requires client version 1.26.4 (as Zulu Hotel does), the most stable way to play seems to be using client 1.26.4b. If you are using Injection Launcher, or if you downloaded Ignition_mod.zip from the Injection website, version 1.26.4b should work already. If you can't get Ignition to recognize 1.26.4b, try getting the client from here .
If you are using something else like 1.26.4i or non-T2A, you will not be able to use Injection unless you can find an appropriate patch line.
Once you can run Injection successfully, you will also need to set the Encryption option to "1.26.4 (OSI Client < 2.0.0)".
You can find many client versions at this site , or at Paigelore .
If the POL server requires client version 2.0.0 , you should be able to run the client without any problems. Once running, you need to set the Encryption option in Injection to "2.0.0 (OSI Client > 2.0.0)".
If the POL server requires Ignition, you are probably best running an older client version such as 2.0.0 rather than 3.0.0+ because POL does not fully support the newer clients (as of POL 0.93). The Encryption option in Injection should be set to "None (Ignition)".
To connect to a new Sphere server (version 0.55i or later), the simplest way should be to use the newest client version with an up-to-date Ignition.cfg. Set the Encryption option in Injection to "None (SphereClient)".
For newer versions of Sphere, you might try 2.0.0 encryption. This works for version 0.99x.
I have not tested Injection with Sphere servers other than version 0.55i, but to connect to an older Sphere version you can try following the instructions above for POL.
This is the simplest case, because you should be able to just run the latest version of the client, and use the default encryption setting in Injection. If you get a message from Ignition saying that "patching failed", download the latest version of Ignition.cfg.
Please note: I have done very little testing of Injection on a UOX server so I cannot guarantee that you will even be able to connect!
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.
In version 0.3.5 several resources have been added to the counters. These include rare reagents used in alchemy, heal, cure, mana, and lava potions. Also added are real time displays of your hitpoints/strength, mana/intellengence, stamina/dexterity, armor rating, weight and gold.
These various displays can be enabled/disabled in the injection.xml configuration file. After runing version 0.3.4 the first time, these new configuration lines are added. You may edit this file and change what is and isn't displayed.
Future enhancements to this feature may include gui panel to enable/disable the various displays (e.g. if you aren't a mage), the ability to customize it (e.g. to count potions, etc) or a 'count resources' command like UOAssist.
Future versions of Injection may allow this feature to be disabled.
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 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:
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).
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.
In this tab you can select what appears at the top of your screen.
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:
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.
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'.
The 'unsetarm' command is very similar to the 'setarm' command.
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.
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"
.
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.
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"
.
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.
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:
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:
,waitmenu potion
,choosemenu 'Lesser Heal'
See the descriptions of these commands (below) for an explanation.
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.
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. .
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.
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.
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:
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:
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:
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:
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.
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.
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.
The 'unsetreceivingcontainer' command resets the receiving container to your backpack.
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.
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:
,waittarget
,target 'Heal'
See the descriptions of these commands (below) for an explanation.
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.
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.
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.
Can be used to target the last target or yourself.
The 'canceltarget' command cancels a pending waittarget command.
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:
,usetype stamina 0x000e
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
Flushes the currently buffered output to the log file. This is for debugging only.
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.
Prints the version number of Injection. This command is no longer necessary because the version number is displayed in the Main Tab .
Some of the common problems you may encounter when installing and using Injection are:
This error means that ILaunch does not know about the client version you are using. Injection uses information from Ignition.cfg, which only supports clients 2.0.0 and later. The only other version supported by ILaunch is 1.26.4b.
If you are trying to use a new client (higher than 3.0.0 or UOTD), you may need to get an updated Ignition.cfg from the Ignition website. If the client is a very recent patch, you may need to wait a couple of days for the new Ignition.cfg to be released. In the mean time, you can try to get a previous client version from this site , or from Paigelore .
This probably means that the the client path you selected was not valid. Check that the path displayed in the Injection Launcher main window is correct.
This error may occur if you run ilaunch.exe from a directory that does not contain Injection. If you created a shortcut to run ILaunch, make sure that the working directory (the "Start in" field) is the directory containing injection.dll.
This may also be caused by an error while loading Injection. In particular, running two copies of Injection will cause the second client to exit immediately after starting. Injection does not (yet) support running two clients at once, but you can still run one client with Injection, and another without.
This may be caused by a bug in the client, or a bug in Injection (among other causes). Look in the "injection_log.txt" file for information about the possible causes of the crash. If you think the crash may be caused by a bug in Injection, please submit a bug report to the Bug Tracker . If you can figure out how to reproduce the bug, include steps to do so in your bug report, because this will greatly reduce the time it will take for the bug to be fixed.
PLEASE NOTE: since I do not have UO:TD, Injection has not been tested AT ALL with Third Dawn. It might work, but the chances are there will be problems.
The following error messages only appear when using Ignition:
This error means that the client version you are using is not supported by Ignition. If you are trying to use client version 1.26.4b, check that you entered the patch line correctly, as it appears in the Installation section. Remember that other clients older than version 2.0.0 will not work with Ignition.
If you are trying to use a new client (higher than 3.0.0 or UOTD), you may need to get an updated Ignition.cfg from the Ignition website. If the client is a very recent patch, you may need to wait a couple of days for the new Ignition.cfg to be released. In the mean time, you can try to get a previous client version from this site , or from Paigelore .
This error means that there was a problem finding the Injection DLL. Check to make sure the file "injection.dll" is in the same directory as Ignition, and that the line you added to Ignition.cfg is spelt correctly.
If you see this message it means that Injection was loaded but there was a problem initialising it. This could be caused by an old or corrupt configuration file, or a number of other things. Look in the Ignition directory for a file called "injection_log.txt". Open this file in a text editor and you should be able to see the cause of the error.