There are two main settings files for RoM bot: settings.xml and your profile. Profiles contain character-specific settings, while settings.xml contains hotkey settings and general preferences.
- 1 Settings.xml
- 2 Character Profiles
- 3 In-Game Settings
- 4 Expert Settings
Here is an example settings file:
<settings> <hotkeys> <!-- Cannot use modifiers --> <hotkey description="MOVE_FORWARD" key="VK_W" modifier="" /> <hotkey description="MOVE_BACKWARD" key="VK_S" modifier="" /> <hotkey description="ROTATE_LEFT" key="VK_A" modifier="" /> <hotkey description="ROTATE_RIGHT" key="VK_D" modifier="" /> <hotkey description="STRAFF_LEFT" key="VK_Q" modifier="" /> <hotkey description="STRAFF_RIGHT" key="VK_E" modifier="" /> <hotkey description="JUMP" key="VK_SPACE" modifier="" /> <hotkey description="TARGET" key="VK_TAB" modifier="" /> <hotkey description="TARGET_FRIEND" key="VK_J" modifier="" /> </hotkeys> <options> <option name="ENABLE_FIGHT_SLOW_TURN" value="false" /> <option name="MELEE_DISTANCE" value="45" /> <option name="LANGUAGE" value="english" /> <option name="DEBUGGING" value="true" /> </options> </settings>
Settings - Hotkeys
The hotkey settings are mostly self-explanatory. MOVE_FORWARD, obviously, coresponds to the key that makes your character walk forward. This is "W" by default. Note that all keys must preceeded by 'VK_'.
You may also notice the 'modifier'. Modifiers are keys such as CONTROL, SHIFT, or ALT.
If your Runes of Magic bindings file (By default, is located at 'My Documents/Runes of Magic/bindings.txt') can be found and loaded, the RoM bot will instead use these settings so that you will not need to manually change your hotkey settings.
Settings - Options
|ENABLE_FIGHT_SLOW_TURN||Allows you to enable or disable "slow turning" in combat. If you have click-to-move on, you should not need this. It should be set to either "true" or "false". The default is "false".|
|MELEE_DISTANCE||The distance at which to conduct melee combat. A value of 45 is good and should not be changed unless you have problems with being either too close or too far away for melee combat. Default: "45".|
|LANGUAGE||Allows you to set your preferred language. Acceptable values are "english", "deutsch", "polish", "russian" and "french".|
|USE_CLIENT_LANGUAGE||After loading the bot, we will automatically use the game clients language as bot language.|
|DEBUGGING||This is a debugging option. When set to true, it will instantly exit on memory read errors and provide better debugging information. Default: "false".|
There are a few things you should know about character profiles first:
- They typically are named after the character that will use them
- They must be inside the 'rom/profiles' folder
- They must follow proper XML formatting
- They may contain custom Lua code
There are many profile options that can be set so it is highly recommended you make a copy of the default profile (Default.xml) and modify that to your character's needs instead of starting from scratch.
If you have extension hiding turned off, the .xml extension will not show on any of your files. If this is the case, do not add the .xml extension or you will end up with a file named something like Default.xml.xml. This may cause the profile to not be found and you may get errors. However, if you are able to see extensions, you should of course include the .xml extension when naming your profile.
Profile - Options
<options> <option name="HP_LOW" value="85" /> <option name="MP_LOW_POTION" value="50" /> <option name="HP_LOW_POTION" value="40" /> ...
|Healing and Potions|
|HP_LOW||The percentage of health to use heal skills at|
|HP_LOW_POTION||The percentage of health to use potions at|
|MP_LOW_POTION||The percentage of mana to use mana potions at|
|HP_REST||If health falls below this percentage, then rest.|
|MP_LOW||If mana falls below this percentage, then rest.|
|SIT_WHILE_RESTING||If value="true" bot sits down while resting.|
|HEALING_POTION||How many healing potions should we have in the inventory after visiting a merchant.|
|MANA_POTION||How many mana potions should we have in the inventory after visiting a merchant.|
|ARROW_QUIVER||How many arrow quivers should we have in the inventory after visiting a merchant.|
|THROWN_BAG||How many thrown bags should we have in the inventory after visiting a merchant.|
|POISON||How many poison should we have in the inventory after visiting a merchant.|
|EGGPET_HOE||How many Small Hoes should we have in the inventory after visiting a merchant. Only buys if the corresponding ratio value in 'EGGPET_CRAFT_RATIO' is not '0'|
|EGGPET_SPADE||How many small spades should we have in the inventory after visiting a merchant. Only buys if the corresponding ratio value in 'EGGPET_CRAFT_RATIO' is not '0'|
|EGGPET_HATCHET||How many small hatchets should we have in the inventory after visiting a merchant. Only buys if the corresponding ratio value in 'EGGPET_CRAFT_RATIO' is not '0'|
|RELOAD_AMMUNITION||Which kind of ammunition should we reload ( arrow | thrown | false) .|
|COMBAT_TYPE||Either "melee" or "ranged". Whichever best fits your character. Default: empty string (""). When unset (default), it will determine this automatically based on your class. There is no need to change this.|
|COMBAT_RANGED_PULL||Whether or not to attempt to "pull" enemies towards you with ranged skills while you are a melee-based class|
|COMBAT_DISTANCE||The distance to remain at when fighting. This only affects your character when COMBAT_TYPE is "ranged" or when you use COMBAT_RANGED_PULL as melee.|
|MAX_FIGHT_TIME||If you stop damaging a target within this amount of time, you will skip this target (prevents getting stuck).|
|DOT_PERCENT||Use DOTs on this target only if it has more than this percentage of HP.|
|ANTI_KS||Whether or not to avoid stealing other players' kills. true or false.|
|Waypoint and Movement|
|WAYPOINTS||The filename (including .xml extension) of the waypoint script to use. Must reside in the 'waypoints' folder!|
|RETURNPATH||The filename (including .xml extension) of the waypoint script to use for returning after death. Must reside in the 'waypoints' folder!|
|PATH_TYPE||The type of movement to use. Should be either 'waypoints' or 'wander'. See path types for more information.|
|WANDER_RADIUS||The distance that your character is allowed to "wander" freely when using wander mode.|
|WAYPOINT_DEVIATION||A 'random' offset applied to each waypoint in your path giving it less of a bot-like appearance; suggested value of 50. Lower value means you stick closer to your normal path; 0 means no deviation.|
|QUICK_TURN||Whether or not to use quick turn mode. Quick turn mode emulates a click-to-move type movement style. This means your character does not stop to slowly turn around.|
|TARGET_LEVELDIF_ABOVE||The maximum level of enemy above your own to engage in combat. i.e. a value of 5 means you will attack monsters up to 5 levels above your own.|
|TARGET_LEVELDIF_BELOW||The maximum level of enemy below your own to engage in combat. i.e. a value of 5 means you will attack monsters up to 5 levels below your own.|
|LOOT||Whether you want to loot enemies or not. True or false.|
|LOOT_ALL||Whether you want to loot all bodies nearby after combat. True or false.|
|LOOT_IGNORE_LIST_SIZE||By default, the bot will remember bodies it failed to loot and not try to loot them again. By default it remembers 10. If you want to change the number it remembers then set this value to the desired number.|
|LOOT_IN_COMBAT||Whether or not you want to pick up loot when other enemies are still attacking you.|
|LOOT_DISTANCE||The max distance away a corpse can be that you will attempt to loot.|
|LOOT_PAUSE_AFTER||A percentage probability to attempt a short "rest" (to look more human) after looting an enemy.|
|HARVEST_DISTANCE||The distance, in game units, that a harvestable must be from the player in order to engage harvesting it. Default: 120|
|HARVEST_WOOD||Whether or not to harvest wood nodes. True or false.|
|HARVEST_HERB||Whether or not to harvest herb nodes. True or false.|
|HARVEST_ORE||Whether or not to harvest ore nodes. True or false.|
|Log out & Resurrection Settings|
|LOGOUT_TIME||Log out after this amount of time (in minutes). A value of 0 means you will not use this setting. Default: 0|
|LOGOUT_SHUTDOWN||If you want to have the computer automatically shutdown after automatically logging out. Default: false|
|LOGOUT_WHEN_STUCK||If your character gets stuck and cannot unstuck himself, you can use this option to have him log off. Default: true|
|LOGOUT_SHUTDOWN||If you want to have the computer automatically shutdown after automatically logging out. Default: false.|
|RES_AUTOMATIC_AFTER_DEATH||Whether or not your character should attempt resurrecting when he dies. Default: true|
|Egg Pet Settings|
|EGGPET_ENABLE_CRAFT||Set to true if you want to craft with your pet. Default: false|
|EGGPET_CRAFT_SLOT||The pet slot to use if pet crafting is enabled. Default: nil|
|EGGPET_CRAFT_RATIO||The ratio at which you want to craft the different materials of ore, wood and herbs. eg. "3:1:0" will try to craft 3 times as much ore as wood but wont craft any herbs. Default: "1:1:1"|
|EGGPET_CRAFT_INDEXES||By default your pet will craft the highest materials possible. Use this option if you want it to craft lower level materials from the dropdown list. You can specify values for any or all material types. eg. "2,3,nil" will create level 2 ore, level 3 wood and the highest level herbs. If this option is used, all three values must be included, using 'nil' for the values you don't want to change. Default: Highest values.|
|EGGPET_ENABLE_ASSIST||Set to true if you want to summon your pet to assist you. Default: false|
|EGGPET_ASSIST_SLOT||The pet slot to use if pet assist is enabled. Default: nil|
Profile - Friends
The "Friends" list can be used to mark targets that you do not want to attack. This can be other players that may be marked for PVP, or targets that you want to ignore (ie. "Ystra Ferret"). You may also add players to your friend list to get the bot to assist them when it notices they are fighting something.
<friends> <!-- names of friends we help fighting or enemys we don't want to attack --> <friend name="Jack" /> <!-- A player, lets assist him --> <friend name="Jill" /> <!-- A player, do not attack her --> <friend name="Ambas" /> <!-- Elite, avoid him --> </friends>
If you want to use umlauts in your friends list, you have to use the escape character with the proper ascii code, since LUA can't handle umlauts (ü=\129, ä=\132, ö=\148, ...). For a mob named 'Kuhkäfer' if would look like
<friend name="Kuhk\132fer" />
For more ASCII character look at the extended ASCII table.
Profile - Mobs
The "Mobs" list can be used to limit the mobs we will attack. That can be helpful if you only want to attack one kind of mobs (e.g. for doing a daily). Leave the list empty if you don't want to restrict the bot.
<mobs> <!-- names of mobs we want to attack --> <mob name="Fungus" /> <mob name="" /> <mob name="" /> </mobs>
If you want to use umlauts in your list, you have to use the escape character with the proper ascii code, since LUA can't handle umlauts (ü=\129, ä=\132, ö=\148, ...). For a mob named 'Kuhkäfer' if would look like
<mob name="Kuhk\132fer" />
For more ASCII character look at the extended ASCII table.
Profile - Hotkeys
<hotkeys> <!-- to communicate with the RoM API / define ingame dummy macro at place 1 --> <hotkey name="MACRO" key="VK_0" /> </hotkeys>
As of revision 524, this option acts as a preference only. If the action key with this hotkey is available it will be used, otherwise it will automatically setup the first free available action key.
Although your main hotkeys are configured either through settings.xml or your bindings.txt files, hotkeys for action bars are character or profile specific.
We need only the hotkey to your ingame dummy macro.
|MACRO||The hotkey that we use to communicate with the ingame dummy macro. We will call RoM API functions that way|
If you used a former bot version before: You now can delete your 'old' hotkeys like RES_MACRO, LOGOUT_MACRO, ...) We don't need them anymore.
Profile - Skills
The bot will only attempt to use skills that are noted in your profile. There are two different ways to set skills up: using the 'skills' tag (does not depend on class) or using 'skills_class' (where class is an actual in-game class) tags.
When using the 'skills' tag, it does not mater which main class your character currently is. This works pretty well for non-class specific skills that you wish to use for either class combination. For example, MAGE_FIREBALL is usable as both a mage/priest and priest/mage. Placing MAGE_FIREBALL into this tag will allow it to be used as either mage or priest primary class.
<skills> <skill name="MAGE_FIREBALL" hotkey="VK_7" priority="110" hpper="30" inbattle="true" /> </skills>
You may often use different sets of skills for your two classes. This is when a class-specific skill tag is strongly suggested (that way you don't need to re-confgiure your profile every time you change classes). Skills placed inside this tag will only be used when it matches your primary class. For example, 'skills_mage' skills will only be used when mage is your primary class.
<skills_mage> <skill name="MAGE_FLAME" hotkey="VK_3" priority="80" /> </skills_mage> <skills_priest> <skill name="PRIEST_RISING_TIDE" hotkey="VK_3" priority="80" /> </skills_priest>
Hotkeys: You can only use hotkeys without modifiers. Normaly that are the keys 'a-z' and '0-9'. If you want to use special keys like MINUS, PLUS, ... take a look into the file '\micromacro\lib\mods\keyboard\en_uk.lua' to find the right virtual keyname. Alternately you can assign the hotkey "MACRO". In that case the skill will be cast by using the RoM API function 'CastSpellByName()' via the MACRO hotkey (it is not garanted, that all needed skill names are within the database file 'skills_local.xml').
Skill over-rides: You can over-ride a few options to your skills. Particularly, those skills you want to limit to only use in battle, or set to use at a certain health percent (such as heals).
|priority||Higher priority means it will use it before other skills. Use 100+ for your opening attacks.|
|hpper||Percentage of HP to use the skill at. Your HP % must be below that level (or above if using '!' eg. "!50") to use the skill. This will over-ride HP_LOW for heals!|
|manaper||Percentage of Mana to use the skill at. Your Mana % must be below that level (or above if using '!' eg. "!50") to use the skill.|
|inbattle||Either true or false. True means it only can be used in battle; false means if only can be used out of battle.|
|targethp||Targets HP in healthpoints has to be below this level to use the skill (or above if using '!' eg. "!2000").|
|targethpper||Targets HP in percentage has to be below this level to use the skill (or above if using '!' eg. "!50").|
|rebuffcut||Recast that skill x seconds before the cooldown/duration fades out. Thats usefull for your own buffs.|
|cooldown||Cooldown/duration value for that skill. If not set, we use the default value from the skill. You can overwrite that here for special situations.|
|pullonly||True/False. Can only be used in the pull phase at the begin of a fight. They will not be used during the rest of the fight (only for melee classes if option 'COMBAT_RANGED_PULL' is set to 'true').|
|maxuse||Skills with that option will only be used 'maxuse'-times within a fight.|
|autouse||Skills with autouse=false will not be automaticly casted from the Bot. Thats usefull if you want to cast a skill only in a event like '<onSkillCast>' .|
|reqbuffname||Used in conjunction with 'reqbufftarget' and 'reqbuffcount'. The target specified by 'reqbufftarget' requires this buff or debuff for this skill to be used. Can accept the buff name or id.|
|reqbufftarget||Used in conjunction with 'reqbuffname' and 'reqbuffcount'. This is the target that needs to have the buff for the skill to be used. Acceptable values are 'player' or 'target'.|
|reqbuffcount||Used in conjunction with 'reqbuffname' and 'reqbufftarget'. This is the minimum number of stacked buffs that need to be applied to use the skill. If not specified, the default is '1'.|
|nobuffname||Used in conjunction with 'nobufftarget' and 'nobuffcount'. The target specified by 'nobufftarget' needs to not have this buff or debuff for this skill to be used. Can accept the buff name or id.|
|nobufftarget||Used in conjunction with 'nobuffname' and 'nobuffcount'. This is the target that should not have the buff for the skill to be used. Acceptable values are 'player' or 'target'.|
|nobuffcount||Used in conjunction with 'nobuffname' and 'nobufftarget'. This is the number of stacked buffs that should not be applied to use the skill. If the buff exists but at a lower count, the skill will still be used.|
Profile - Events
While botting, several events may be triggered. When these events are triggered, you may have custom Lua code executed. This code is placed directly in the event-specific tags inside your profile.
- onLoad : When the profile is loaded
- onDeath: When your character dies
- onLeaveCombat: When leaving combat
- onSkillCast: Triggered after your character uses a skill
onSkillCast will, additionally, receive a Lua table ('arg1') that is a copy of the skill being cast. You can use this to query information about the skill. This can be useful in "skill chaining."
<onLoad> -- Load a waypoint path based on level if( player.Level > 10 ) then loadPaths("some_path"); else loadPaths("some_other_path"); end </onLoad> <onDeath> printf("\a\a\a"); -- BEEP BEEP BEEP! pauseOnDeath(); -- Wait for me. Do not continue script execution </onDeath> <onLeaveCombat> if( player.Level > player.free_counter1) then player.free_counter1 = player.Level; -- levelup skills -- 4 = third skill tab, 2 = mage flame if( player.Level == 2 ) then send_macro("SetSpellPoint( 4, 2 );"); yrest(1000); send_macro("SetSpellPoint( 4, 2 );"); else player.free_counter1 = player.Level; send_macro("SetSpellPoint( 4, 2 );"); end -- open giftbag and equipt content -- updates first 18 bag slots / update all if empty open_giftbag(player.Level, 18); end </onLeaveCombat> <onSkillCast> if( arg1.Name == "PRIEST_HOLY_AURA" ) then yrest(1000); player:cast("PRIEST_URGENT_HEAL"); end </onSkillCast>
In order for the bot to fully work, you will need to modify a few in-game settings. You should start with the Interface Settings and then set up your macro hotkey.
Bring up your interface settings under the System menu. Under control, make sure that Click-to-move and Self Cast are checked. Under Miscellaneous, also check Auto loot.
Settings up a Macro
Important: As of revision 524, this step is no longer necessary. The bot can now create its own macro in the first free available macro or find a previously setup macro. It will no longer accidentally over-write user macros either. It will also setup the actionbar key, using the user specified macro hotkey if available or the first empty key. ________________________________________________________________________________________________
This macro is how the bot will interface with RoM's API. You should type /macro into the game's chat to bring up the macro window. Select the top-left most box and click New, and in the new window that pops open click Save.
It should now look like this:
Now, all you need to do is click and drag this new icon in your macro window into your hotkey bar and set your MACRO hotkey in profile hotkeys to reflect this change.
Note that the macro slot directly to the right of the one you just created will also be used internally. Do not keep macros you intend to use there.
Expert Profile - Options
MAX_TARGET_DIST = 999, -- maximum distance to select a target (helpfull to limit at small places) AUTO_ELITE_FACTOR = 4, -- mobs with x * your HP value counts as 'Elite' and we will not target it SKILL_USE_PRIOR = 300, -- cast x ms before cooldown is finished PK_COUNTS_AS_DEATH = true, -- count playerkill's as death POTION_COOLDOWN = 15, -- allways 15 POTION_COOLDOWN_HP = 0, -- will only be used if not 0, if 0 POTION_COOLDOWN will be used POTION_COOLDOWN_MANA = 0, -- will only be used if not 0, if 0 POTION_COOLDOWN will be used WAYPOINTS_REVERSE = false, -- use the waypoint file in reverse order MAX_DEATHS = 10, -- maximal death if automatic resurrect befor logout WAIT_TIME_AFTER_RES = 8000, -- time to wait after resurrection, needs more on slow PCs RETURNPATH_SUFFIX = "_return", -- suffix for default naming of returnpath USE_SLEEP_AFTER_RESUME = false, -- enter sleep mode after pressing pause/resume key IGNORE_MACRO_ERROR = false, -- ignore missing MACRO hotkey error (only temporary option while beta) DEBUG_INV = false, -- to help to find the item use error (only temporary option while beta) INV_MAX_SLOTS = 60, -- maximum slots to update in the inventory:update()