One script to farm them all

Here’s a little script that proved to be effective in Ultima Online, to farm gold from single monster spawns. It works on UOSteam. Before using it, you may want to adjust the threshold for calling divine fury on line 42, and to check the sum of gold on line 60. On my whammy template 20 to call divine fury is sufficient, and I’m strong enough to carry 55000 gold. If you have higher stamina, you may want to have divine fury earlier, and maybe you can carry a different sum of gold. So adjust if needed :)

Note that it uses chivalry spells, so make sure to have the right skill and book on you.
Optionally, it uses two items, namely curse weapon scrolls and bag of sending. They are just an add-on, so not important if you don’t have them.

The motivation for the script was to automate as much as possible, so that i could focus on strategy, stat changes and so on instead of hammering on my keyboard (and be able to have a drink while playing :) ).

When set in loop mode, here is how it works:

  1. Set warmode on, so that char is never in peace mode and can actually fight.
    This is useful, because when switching back and forth between Ultima and skype / browser, sometimes UO auto toggles to peace mode.
    This setting prevents this permanently, since it loops over it.
  2. Define monster list to watch out for and fight against.
    The monster list contains the beasts you want to focus on. In other words, the script will ignore all monsters that are not on this list.
    The list is based on monster graphic code: you can identify this on monsters by using UOSteam’s object inspector. Or maybe someone can google the code for you :)
    Two reasons why this list should focus on tough creatures that appear in 1:1 fights:

    1. The macro is pretty intense on mana. So this list prevents the macro to go wild at any mongbat, and keeps mana consumption efficient.
    2. It is designed to maximize damage and defense. This wouldn’t be the right strategy on spawns or other large groups of monsters. At spawns, speed and quick targeting are more important, which isn’t built into this macro.
  3. FIGHT if you find a monster from the list
    This is the more interesting part of the macro: it looks for one live monster from the list, and then calls all the magic.
    Note that it only starts all spell spamming if this monster is found and alive. Saving mana and keep focus, again.
    Motivation for all the spells are:

    1. Honor - Always use! It gains you honor, it adds damage.
    2. Curse Weapon – to leech mana, without having the need for necro. I’m human and so have Jack-of-all-trades, so if you’re an elve, check if it works for you.
    3. Primary Weapon Ability – in my case: double strike. Since it highly depends on weapon, you may want to switch to Secondary Weapon Ability, or switch it off.
    4. Couner Attack – Always use! Some extra damage now and then is a nice add on, but overall not so important.
    5. Enemy Of One – Always use! It adds all the nifty nice extras when dealing with one specific enemy.
    6. Divine Fury – this is a backup only: if your stamina falls too low, use this. It restores stamina, but at the cost of defence skills. Handle consciously.
    7. Lightning Strike – Always use! But note that primary and secondary weapon abilities may block this option. Observe closely, and maybe switch off if not useful.
    8. Consecrate Weapon – this is nice to have when your weapon does not hit the spot, i.e. when dealing out physical damage but your opponent has a weak spot on fire. Hence, if you have a 100% fire damage weapon in this example, switch this off.
  4. RECREATE if there is no monster from the list
    When the macro doesn’t find a listed monster, it helps you get back in shape:
    First, it checks wether you are poisoned and tries to heal you. Good one :)
    Second, it will attempt to send back gold to the bank, and use the bag of sending for this. This means that you can farm as long as you have the bag on you and charged, instead of having to go unload every 10 minutes.

And here is the actual script – havef fun!

warmode 'on'
if not listexists 'farmingMonsters'
createlist 'farmingMonsters'
pushlist 'farmingMonsters' 0x101 // Dread Horn
pushlist 'farmingMonsters' 0x100 // Chief Parox
pushlist 'farmingMonsters' 0x2e //Ancient Wyrm
pushlist 'farmingMonsters' 0x28 //Balron
pushlist 'farmingMonsters' 0xbd //Orc Brute
pushlist 'farmingMonsters' 0x30 //Scorpion (Miasma)
pushlist 'farmingMonsters' 0x95 //Succubus
// Counter Attack
// clearjournal
// while not @injournal 'respond immediately to the next blocked blow' 'system'
//   cast 'counter attack'
//   waitforjournal 'respond immediately to the next blocked blow' 500 'system'
//   if @injournal 'respond immediately to the next blocked blow' 'system'
//     waitforjournal 'attack with lightning' 5000 'system'
//   endif
// endwhile
for 0 in 'farmingMonsters'
while @findtype farmingMonsters[] 'any' and not dead farmingMonsters[] 'any'
getenemy 'found'
if hits 'found' == maxhits 'found'
virtue 'honor'
waitfortarget 500
target! 'found'
attack 'found'
if @findtype 0x2263 'any' 'backpack' and not buffexists 'curse weapon'
usetype! 0x2263
pause 500
@setability 'primary' 'on'
if @injournal 'attack with lightning!' or @injournal 'failure message'
cast "counter attack"
if not buffexists 'enemy of one'
cast 'enemy of one'
if stam < 20
cast 'divine fury'
if @injournal 'You attack with lightning precision!' or @injournal 'failure message'
cast "Lightning Strike"
if not buffexists 'consecrate weapon'
cast 'consecrate weapon'
if poisoned 'self'
cast "Cleanse by Fire"
waitfortarget 5000
target! 'self'
if gold >= 55000
if @findtype '0xe76' 'any' 'backpack'
@setalias 'BagOfSending' 'found'
if @findtype '0xeed' 'any' 'backpack'
useobject 'BagOfSending'
waitfortarget 500
target 'found' 500