[UOSteam] Balron Sacred journey and attack macro

If you make a Client-side script you can publish it here for other players to use
Post Reply
tester
Passer by
Posts: 1
Joined: Tue Feb 07, 2023 7:06 am

[UOSteam] Balron Sacred journey and attack macro

Post by tester »

Disclaimer:
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.
Model.JPG
Model.JPG (22.13 KiB) Viewed 8194 times
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
2) How do you move: You will need to use object inspector on your runebooks and change the codes underlined or you can just use record option and copy the action of opening 1 runebook and selecting sacred journey on the 1st location.

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
4) Now if a player is present, than you need to do something about it (move along):
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
5) But there may be a time when no bally nor player is present. So you would just stand there because the macro wouldn't know what to do. So you need to add this: (range may need to be adjusted)

Code: Select all

if not @inrange 'enemy' 6
  //travel location 2-------------------------------------
  useobject 0x40ef865e
  waitforgump 1431013363 15000
  replygump 0x554b87f3 7
endif
pause 2000
So 1 block of your macro should look like this:

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
This is the first block. So when UOSteam finishes reading this code you are already in the second location.

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
And now you travel again to the 3rd rune (which is the "3rd Brunebook 1st rune") code 4): Remember to change the codes according to your own UOSteam.

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
And repeat all process.

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.
Post Reply