First of all, reminder that AFK macroing is not allowed .
Secondly, I have zero knowledge of macroing.
Thirdly, If IRL skills or expertise are to play a role in this game "monetarily" than lets break this idea
So I gathered some info and code samples and built this macro which is somewhat functional to this purpose of reducing boredom but not making you go to bed while farming. It is built in UOSteam which is a fairly simple to use and you can get all the info you need by just using its resources.
This is a tutorial for an average Joe so I will try to explain every step of the way.
If something is not working: use object inspector or record what you want the macro to use, and copy to a txt. file. Add "//" and leave notes on the code so you don't get lost while building it. Run it and be ready to press pause if anything goes wrong (like attacking in the presence of another player)
_________________________________________________Lets begin______________________________________________
The first step is getting 3 runebooks. Since they have charging time you will need to jump between them to fasten the speed of recalls.
Step 1: get 3 runebooks
Step2: mark 3 identical runes for each location (I will use 7 for this example)
Step3: place the runes in your runebook following the order in the attached picture. Now the script will be quite large so to help you building it I will drop it in blocks:
1st block) is creating the list of targets (you will only insert it once in the macro)
2nd block) will take you to the first location - Runebook 1 1st rune (will also only be used once)
3rd block) will check for players and balrons present (this will be the first block of every cycle)
4th and 5th blocks) will take you to the next locations (this will also be repeated)
1) First lets create the list of monsters you may find. You can add other monsters by using "object inspector" in your UOSteam.
Code: Select all
//Enemy list
if not listexists 'farmingMonsters'
createlist 'farmingMonsters'
pushlist 'farmingMonsters' 0x3d // drake
pushlist 'farmingMonsters' 0x98 // therathan warrior
pushlist 'farmingMonsters' 0xcc // nightmare
pushlist 'farmingMonsters' 0x16 // gazer
pushlist 'farmingMonsters' 0x4 // Gargoyle
endif
useobject 0x40ef83d6 <- Runebook code
waitforgump 1431013363 15000
replygump 0x554b87f3 7 <- This will change for every rune so you need to record every movement of all runes in a cycle.
pause 2000
3) You need to check conditions to safeguard that you will not steal the mob of another player. so the first part will make sure of it. the second part will follow the balron and attack every monster of the list. (This will only trigger if the balron is present)
Note: if you by any chance attack a mob of another player increase the value of "if not @inrange 'friend' '10'" from 10 to more (this is value in tiles on all directions)
Code: Select all
//checking conditions
@getfriend 'innocent''criminal''murderer''friend''gray''invulnerable''any''humanoid''closest'
if not @inrange 'friend' '10'
for 0 in 'farmingMonsters'
while @findtype 0x28 'any' and not dead farmingMonsters[] 'any'
@getenemy! 'murderer' 'enemy' 'criminal' 'gray' 'closest'
if @findobject! 'enemy'
endif
@attack 'enemy'
pause 1000
@clearusequeue
@cancelautotarget
@canceltarget
while @findobject! 'enemy' and @distance 'enemy' <= 5
while @distance 'enemy' >= 2 and @distance 'enemy' <= 5
@attack 'enemy'
if @x 'enemy' > x 'self' and @y 'enemy' > y 'self'
walk 'Southeast'
elseif @x 'enemy' < x 'self' and @y 'enemy' > y 'self'
walk 'Southwest'
elseif @x 'enemy' > x 'self' and @y 'enemy' < y 'self'
walk 'Northeast'
elseif @x 'enemy' < x 'self' and @y 'enemy' < y 'self'
walk 'Northwest'
elseif @x 'enemy' > x 'self' and @y 'enemy' == y 'self'
walk 'East'
elseif @x 'enemy' < x 'self' and @y 'enemy' == y 'self'
walk 'West'
elseif @x 'enemy' == x 'self' and @y 'enemy' > y 'self'
walk 'South'
elseif @x 'enemy' == x 'self' and @y 'enemy' < y 'self'
walk 'North'
endif
endwhile
endwhile
endwhile
endfor
endif
Note: Again, you need to change the code of "useobject" to the value of your runebook and the "replygump" to match moving to the 2 rune. (In this case you will be moving from: "Runebook 1 - 1st rune" to "runebook 2 - 1st rune".
Code: Select all
if @inrange '0x190' 10
//travel due to player present 1 to 2---------------------
useobject 0x40ef865e
waitforgump 1431013363 15000
replygump 0x554b87f3 7
endif
Code: Select all
if not @inrange 'enemy' 6
//travel location 2-------------------------------------
useobject 0x40ef865e
waitforgump 1431013363 15000
replygump 0x554b87f3 7
endif
pause 2000
Code: Select all
//Enemy list
if not listexists 'farmingMonsters'
createlist 'farmingMonsters'
pushlist 'farmingMonsters' 0x28 //Balron
pushlist 'farmingMonsters' 0x3d // drake
pushlist 'farmingMonsters' 0x98 // therathan warrior
pushlist 'farmingMonsters' 0xcc // nightmare
pushlist 'farmingMonsters' 0x16 // gazer
pushlist 'farmingMonsters' 0x4 // Gargoyle
endif
//Moving to the first spot
useobject 0x40ef83d6
waitforgump 1431013363 15000
replygump 0x554b87f3 7
pause 2000
//checking conditions
@getfriend 'innocent''criminal''murderer''friend''gray''invulnerable''any''humanoid''closest'
if not @inrange 'friend' '10'
for 0 in 'farmingMonsters'
while @findtype 0x28 'any' and not dead farmingMonsters[] 'any'
@getenemy! 'murderer' 'enemy' 'criminal' 'gray' 'closest'
if @findobject! 'enemy'
endif
@attack 'enemy'
pause 1000
@clearusequeue
@cancelautotarget
@canceltarget
while @findobject! 'enemy' and @distance 'enemy' <= 5
while @distance 'enemy' >= 2 and @distance 'enemy' <= 5
@attack 'enemy'
if @x 'enemy' > x 'self' and @y 'enemy' > y 'self'
walk 'Southeast'
elseif @x 'enemy' < x 'self' and @y 'enemy' > y 'self'
walk 'Southwest'
elseif @x 'enemy' > x 'self' and @y 'enemy' < y 'self'
walk 'Northeast'
elseif @x 'enemy' < x 'self' and @y 'enemy' < y 'self'
walk 'Northwest'
elseif @x 'enemy' > x 'self' and @y 'enemy' == y 'self'
walk 'East'
elseif @x 'enemy' < x 'self' and @y 'enemy' == y 'self'
walk 'West'
elseif @x 'enemy' == x 'self' and @y 'enemy' > y 'self'
walk 'South'
elseif @x 'enemy' == x 'self' and @y 'enemy' < y 'self'
walk 'North'
endif
endwhile
endwhile
endwhile
endfor
endif
if @inrange '0x190' 10
//travel due to player present 1 to 2---------------------
useobject 0x40ef865e
waitforgump 1431013363 15000
replygump 0x554b87f3 7
endif
if not @inrange 'enemy' 6
//travel location 2-------------------------------------
useobject 0x40ef865e
waitforgump 1431013363 15000
replygump 0x554b87f3 7
endif
pause 2000
So now you add the code from 3):
Code: Select all
//checking conditions
@getfriend 'innocent''criminal''murderer''friend''gray''invulnerable''any''humanoid''closest'
if not @inrange 'friend' '10'
for 0 in 'farmingMonsters'
while @findtype 0x28 'any' and not dead farmingMonsters[] 'any'
@getenemy! 'murderer' 'enemy' 'criminal' 'gray' 'closest'
if @findobject! 'enemy'
endif
@attack 'enemy'
pause 1000
@clearusequeue
@cancelautotarget
@canceltarget
while @findobject! 'enemy' and @distance 'enemy' <= 5
while @distance 'enemy' >= 2 and @distance 'enemy' <= 5
@attack 'enemy'
if @x 'enemy' > x 'self' and @y 'enemy' > y 'self'
walk 'Southeast'
elseif @x 'enemy' < x 'self' and @y 'enemy' > y 'self'
walk 'Southwest'
elseif @x 'enemy' > x 'self' and @y 'enemy' < y 'self'
walk 'Northeast'
elseif @x 'enemy' < x 'self' and @y 'enemy' < y 'self'
walk 'Northwest'
elseif @x 'enemy' > x 'self' and @y 'enemy' == y 'self'
walk 'East'
elseif @x 'enemy' < x 'self' and @y 'enemy' == y 'self'
walk 'West'
elseif @x 'enemy' == x 'self' and @y 'enemy' > y 'self'
walk 'South'
elseif @x 'enemy' == x 'self' and @y 'enemy' < y 'self'
walk 'North'
endif
endwhile
endwhile
endwhile
endfor
endif
Code: Select all
if @inrange '0x190' 10
//travel due to player present 2 to 3-------------------
useobject 0x40ef5bdd
waitforgump 1431013363 15000
replygump 0x554b87f3 7
pause 2000
endif
if not @inrange 'enemy' 6
//travel location 3-----------------------------------
useobject 0x40ef5bdd
waitforgump 1431013363 15000
replygump 0x554b87f3 7
pause 2000
endif
pause 2000
It should look like this:
1st block) is creating the list of targets
2nd block) will take you to the first location - Runebook 1 1st rune
3rd block) will check for players and balrons present
4th and 5th blocks) will take you to the next locations ------ location 1 to 2
3rd block) checking and attacking
4th and 5th blocks) traveling------ location 2 to 3
3rd block) checking and attacking
4th and 5th blocks) traveling------ location 3 to 4
3rd block) checking and attacking
4th and 5th blocks) traveling------ location 4 to 5
...
Now you can either loot the mobs using UOSteam loot (which will require you to give more pauses) or use EASYUO - claim macro.
Have fun, and if you upgrade this simple code, please update it to this thread to give it to other players too.