This is the
Ultimate Mining Macro written by
Hephaisto from the Yoko Forums NOW with fixes by
Thdin and
Genocide
If you need directions
Click here is the original version. but take note you won't have to set up the oresBag, nor the pickaxe so you may skip those steps
It now recalls! and unloads your oresBag in to a container (oresChest)....
I have
simplified the script so it asks you question alls you need to set up is the oreChest (container to drop ores off in) and the recall part.
use
,addobject oresChest and target your container!
oreChest should be a secure container in front out your house where you recall in or I use my UID chest in the WarehouseW.
you will need a rune, a pick axe and a bag in your pack to start
knowledge of how to use the recall function of injection is a must
basically to use the recall function you use the runebook as normal then type
,infogump and then you should get a new
text window... scroll down and find
Quote:
Reply: ___________
[0004] primary reply
Checks&Radios (0)
Entryes (0)
a simple conversion of the
[0004] to
0x04 (binary) is what we use in our scripts
more examples : 0001 = 0x01, 0023 = 0x23, NOTICE THE PATTERN... even my 5 year old gets it
Change the second "0" to an "x"...
go over the comments and set macro up to suit your character & settings
Code:
### Ultimat Mining Macro w/fixes
sub go_mining()
var cycle=1
var path="7oi7ki" #change this from your exec record_path text
var test=0
var i=0
var j
uo.print('Target the bag for your ingots to go into')
uo.exec('addobject oresBag')
while uo.targeting()
wait(100)
wend
uo.print('Target your Pickaxe')
uo.exec('addtype pickaxe')
while uo.targeting()
wait(100)
wend
uo.print('Target your rune')
uo.exec('addobject temprune')
while uo.targeting()
wait(100)
wend
UO.SetCatchBag("oresBag")
While i<LEN(path)
if VAL(path[i]) then
j=VAL(path[i])
i=i+1
else
j=1
endif
Repeat
if test<>1 then
UO.DeleteJournal()
mine_spot()
end if
UO.Print("New Location!")
if not make_step(path[i]) then
UO.Print("Probably Stuck!")
UO.Print("Hope it is a Worldsave")
endif
j=j-1
Until j==0
i = i + 1
if cycle && i==LEN(path) then
i=0
endif
Wend
end sub
sub mine_spot()
var maxMineTime=9000
var times=0
var timeout=0
If UO.Weight>2000 Then #Set this weight according to your strength or server settings (2000 stone = about 500 str)
Oredroppings()
Endif
UO.DeleteJournal()
ToHide()
While (UO.InJournal("There is no") OR UO.InJournal("Try mining"))==0
UO.Print("Mining time!")
UO.DeleteJournal()
#UO.WaitTargetTile("1339",STR(UO.GetX()),STR(UO.GetY()),"0") ; edited out to work on Dominaira
UO.Exec("waittargetself")
UO.UseType("pickaxe")
timeout=0
times = times +1
if times>20 then
wait(maxMineTime)
times = 0
endif
Repeat
timeout=timeout+20
Wait(20)
#UO.Print("Waiting...")
Until UO.InJournal("You loosen") OR UO.InJournal("You put the") OR UO.InJournal("There is no") OR UO.InJournal("Try mining") OR UO.InJournal("That is too") OR UO.InJournal("You are starving") OR UO.InJournal("World save") OR timeout>maxMineTime
If UO.InJournal("World save") Then
Wait(5000)
UO.DeleteJournal()
Endif
Wend
return 0
end sub
sub record_path()
var x
var y
var path=""
UO.DeleteJournal()
Repeat
x=UO.GetX()
y=UO.GetY()
if waitNewPos(x,y) then
path=path+extract_dir(x,y,UO.GetX(),UO.GetY())
endif
Until UO.InJournal("stop")
path = compressPath(path)
UO.TextClear()
UO.TextOpen()
UO.TextPrint("Your path is:")
UO.TextPrint(path)
end sub
sub send_step(keycode,dir)
var x = UO.GetX()
var y = UO.GetY()
var timeout = 0
if UO.GetDir()<>dir then
UO.Press(keycode)
Repeat
wait(50)
Until UO.GetDir()==dir
endif
UO.Press(keycode)
Repeat
timeout=timeout+50
wait(50)
Until x<>UO.GetX() || y<>UO.GetY() || timeout>2000
if timeout>2000 then
return 0
endif
return 1
end sub
sub waitNewPos(x,y)
while x==UO.GetX() && y==UO.GetY()
if UO.InJournal("stop") then
return 0
endif
wend
return 1
end sub
sub compressPath(path)
Var i=0
Var j=0
Var newPath=""
while i<LEN(path)
j=1
while path[i]==path[i+1] AND j<9
i=i+1
j=j+1
wend
if j==1 then
newPath=newPath+path[i]
else
newPath=newPath+STR(j)+path[i]
endif
i=i+1
wend
return newPath
end sub
sub extract_dir(x,y,a,b)
if x>a then
if y==b then
return "i"
else
if y>b then
return "n"
else
return "w"
endif
endif
else
if x<a then
if y==b then
return "l"
else
if y>b then
return "e"
else
return "s"
endif
endif
else
if y>b then
return "o"
else
return "k"
endif
endif
endif
end sub
sub make_step(dir)
if dir=="e" then
send_step(39,1)
return 1
endif
if dir=="l" then
send_step(34,2)
return 1
endif
if dir=="s" then
send_step(40,3)
return 1
endif
if dir=="k" then
send_step(35,4)
return 1
endif
if dir=="w" then
send_step(37,5)
return 1
endif
if dir=="i" then
send_step(36,6)
return 1
endif
if dir=="n" then
send_step(38,7)
return 1
endif
if dir=="o" then
send_step(33,0)
return 1
endif
if dir=="d" then
While UO.Count("0x19b9")
UO.Drop("0x19b9")
wait(1000)
Wend
wait(200)
return 1
endif
UO.Print("Recall Time!")
return 0
end sub
sub Oredroppings()
UO.DeleteJournal()
Checkmana()
UO.UnSetCatchBag()
UO.DeleteJournal()
UO.Cast('Mark','temprune') #Keep an extra rune loose inside your backpack
Wait(5000)
While UO.InJournal("spell fizzle")==1
UO.Cast('Mark','temprune')
Wait(5000)
Wend
Checkmana()
UO.warmode(0)
UO.Exec("recall Runebook 0x03") #Change 0x03 to match the slot of your house in your runebook
Wait(2000)
While UO.InJournal("spell fizzle")==1
UO.warmode(0)
UO.Exec("recall Runebook 0x03")
Wait(2000)
Wend
ToHide()
Wait(200)
UO.Exec("emptycontainer 100 oresBag oreChest") # use ",addobject oreChest" then target your chest you want to drop off the ore in (a secure container in front of your house)
Wait(100)
Checkmana()
UO.warmode(0)
UO.Cast('Recall','temprune') #Then it recalls back to where you were last and continues mining with the path you recorded!
Wait(3000)
While UO.InJournal("spell fizzle")==1
UO.Cast('Recall','temprune')
Wait(3000)
Wend
UO.SetCatchBag("oresBag")
endsub
sub CheckLag() #Simple lag checking function so that you don't mess up marking or recalling
UO.DeleteJournal()
UO.Click('backpack')
Repeat
wait(200)
Until UO.InJournal('backpack')
end sub
sub Checkmana() #Another simple function so that in case you try to recall and don't have enough mana it will meditate instead of not doing the rest of the script (thusly never actually dropping off the ore :P) Genocide
if UO.Mana<100 then #rewritten by Genocide - set this amount to your chars INT value if not 100
while UO.Mana<UO.INT
UO.UseSkill("Meditation")
wait(3000)
wend
endif
endsub
sub ToHide()
while not UO.Hidden()
uo.print('Attempting to hide')
uo.deletejournal()
UO.UseSkill("Stealth")
wait(4100)
wend
wait(100)
end sub
Thank you to everyone who taken part of sharing....
I post this in our forums also along with many others
Edit: I forgot a Wend and I moved a deletejournal into the if statement so far so good, before it was minging one time and moving, it again mines till the spot is done then moves