Me again. Its rather proof of concept (well works well, but injection sucks when it comes to complicated unatended scripts for longer period, those dunno-what-from parser errors after 2 hours of script running).
Ok. That shit just use runebook to recall to mine, then it digs ore from around, drops at house, stocking with reg and shovel automatically.
U can use my stocking sub check_regs from other script ive posted 10 mins ago. Its not here for simple reason. Ive wrote it after mining

Vars:
mine_rb - whoa! thats runebook with runes to ore spots
mine_tool - guess?
ruda - ore obj type
home_rb - runebook with rune to home (to stock and drop ore)
ore_cont - where to drop ore? it has to be in range from home rune
home_x home_y - u really dont need, i was writing for fast ... btw. recall routing sucks here, so feel free to change it, and then u wont need those two vars.
Rest of vars are RunUO cliloc messages. Like "You've got ore" or sth. Dont take care of them ;P They're defined good.
Btw. Feel free to comment it. If I seem to dont know about sth, just tell me Im not posting it for ppl who cant script for theirselfs. I post for ppl who can script, so then I hope my scripts will help them, and theyll help me.
Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
sub mine_rb()
var mine_rb = 0x400F1322
var mine_tool = 0xF39
var ruda = 0x19B9
var action_delay = 650
var home_rb = 0x400F126F
var home_rune = 3
var ore_cont = "0x400D1A3F"
var home_x = 1000
var home_y = 1000
var reg_bm = 0x0F7B
var reg_bp = 0x0F7A
var reg_mr = 0x0F86
# Where do you wish to dig.
var mine_prompt = "cliloc# 0xACF9"
var mine_stop = "cliloc# 0xAD00"
var mine_fail = "cliloc# 0xAD03"
# You dig some iron ore.
var ore_types = 8
dim mine_ore[10]
mine_ore[1] = "cliloc# 0x5DE0" # iron
mine_ore[2] = "cliloc# 0x5DE2" # shadow
mine_ore[3] = "cliloc# 0x5DE1" # dull
mine_ore[4] = "cliloc# 0x5DE4" # bronze
mine_ore[5] = "cliloc# 0x5DE5" # gold
mine_ore[6] = "cliloc# 0x5DE3" # copper
mine_ore[7] = "cliloc# 0x5DE6" # agapite
mine_ore[8] = "cliloc# 0x5DE7" # verite
var i = 1,j,z
var max_spots = 64
var f = file("6.cfg")
if NOT f.open() then
UO.Print("Blad otwarcia pliku")
return FALSE
endif
dim runa[64],prop_x[64],prop_y[64],spot_type[64],spot_x[64],spot_y[64],spot_z[64]
for i = 1 to 64
runa[i] = f.ReadNumber()
prop_x[i] = f.ReadNumber()
prop_y[i] = f.ReadNumber()
spot_type[i] = f.ReadNumber()
spot_x[i] = f.ReadNumber()
spot_y[i] = f.ReadNumber()
spot_z[i] = f.ReadNumber()
next
f.close()
var akt_spot = 1
while TRUE
while UO.GetX('self') <> prop_x[akt_spot] OR UO.GetY('self') <> prop_y[akt_spot]
recaluj(mine_rb,runa[akt_spot])
i = 0
z = TRUE
while i < 7000 AND z
if UO.GetX('self') == prop_x[akt_spot] AND UO.GetY('self') == prop_y[akt_spot] then
z = false
endif
i = i + 50
wait(50)
wend
wend
remove_from_journal(mine_stop)
UO.Print("dupa")
while NOT UO.InJournal(mine_stop) AND UO.Weight < 370
if UO.Waiting() then
UO.CancelTarget()
endif
# UO.Print("Targetting.. " + STR(spot_type[akt_spot]) + " " + STR(spot_x[akt_spot] ) + " " + STR( spot_y[akt_spot]) + " " + STR( spot_z[akt_spot]) )
# UO.WaitTargetTile(spot_type[akt_spot],spot_x[akt_spot],spot_y[akt_spot],spot_z[akt_spot])
UO.Exec("waittargettile " + STR(spot_type[akt_spot]) + " " + STR(spot_x[akt_spot] ) + " " + STR( spot_y[akt_spot]) + " " + STR( spot_z[akt_spot]) )
UO.UseType(mine_tool)
remove_from_journal(mine_prompt)
j = 0
while j < 5000 AND NOT UO.InJournal(mine_prompt)
wait(50)
j = j + 50
wend
for j = 1 to ore_types
remove_from_journal(mine_ore[j])
next
remove_from_journal(mine_fail)
z = TRUE
j = 0
while z AND j < 5000 AND NOT UO.InJournal(mine_fail) AND NOT UO.InJournal(mine_stop)
for i = 1 to ore_types
if UO.InJournal(mine_ore[i]) then
z = FALSE
endif
next
j = j + 100
wait(100)
wend
if UO.InJournal(mine_stop) then
wait(action_delay)
endif
wend
if UO.Weight > 370 then
# recall
while UO.GetX('self') <> home_x OR UO.GetY('self') <> home_y
recaluj(home_rb,home_rune)
wait(5000)
wend
# przerzucenie rudy
while UO.Count(ruda) > 0
wait(action_delay)
UO.FindType(ruda)
# na wypadek jakby sie poruszylo przez te 650ms
if UO.Count(ruda) > 0 then
UO.MoveItem('finditem',-1,ore_cont)
endif
wend
#skoro w domciu to sprawdzamy regi
uzupelnij(reg_bm,20,50,ore_cont)
uzupelnij(reg_bp,20,50,ore_cont)
uzupelnij(reg_mr,20,50,ore_cont)
uzupelnij(mine_tool,2,2,ore_cont)
endif
akt_spot = akt_spot + 1
if akt_spot > max_spots then
akt_spot = 1
endif
wend
end sub
Well next thing. Thats a bad one. You have to own file. Mysterious file with some mysterious numbers. Ok. Ive made macro to record it. Its shitty u have to record it smoothly. Start it. It will recall to first rune from ur runebook. Click 4 tiles around u where u want to mine. Then wait. It should recall to next rune. Repeat for whole runebook.
Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
sub rec()
var mine_rb = 0x400F1322
var ile_run = 16
var akt_runa = 1
var my_x
var my_y
var f = file("6.cfg")
UO.Exec("set injectecho 1")
if NOT f.open() then
if NOT f.create() then
return FALSE
endif
endif
var i = 1
var last
# zerowac lasttile !
last = UO.LastTile()
while akt_runa < ile_run + 1
UO.Print("Dupa")
my_x = UO.GetX('self')
my_y = UO.GetY('self')
recaluj(mine_rb,akt_runa)
wait(3000)
i = 1
while i < 5
UO.InfoTile()
while UO.LastTile() == last
wait(10)
wend
last = UO.LastTile()
UO.Print("Last tile : " + STR(last))
f.Write(STR(akt_runa) + " " + STR(UO.GetX('self')) + " " + STR(UO.GetY('self')) + " ")
f.WriteLn(last)
i = i + 1
wend
akt_runa = akt_runa + 1
wend
f.close()
end sub
Forgotten: two subs u need... one for recalling to rune number x from runebook, second to stock (its described in other topic with magery trainer)
Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
sub recaluj(runebook, runa)
UO.Exec("recall " + STR(runebook) + " " + STR(( runa -1 )* 6 + 5))
end sub
sub uzupelnij(objtype, min_qty, do_ilu, container)
var i
var action_delay = 650
var old_qty
var grab_qty
while UO.Count(objtype) < min_qty
UO.UseObject(container)
while STR(container) <> STR(UO.GetSerial('lastcontainer'))
i = 0
while i < 3500 AND NOT STR(container) == STR(UO.GetSerial('lastcontainer'))
i = i + 100
wait(100)
wend
if STR(container) <> STR(UO.GetSerial('lastcontainer')) then
UO.UseObject(container)
endif
wend
wait(action_delay)
old_qty = UO.Count(objtype)
UO.FindType(objtype,"-1",container)
if UO.FindCount() > 0 then
grab_qty = do_ilu - old_qty
# UO.MoveItem('finditem', grab_qty, 'backpack')
#UO.Grab(do_ilu - old_qty,'finditem')
UO.Exec("grab " + STR(grab_qty) + " finditem" )
i = 0
while i < 1500 AND NOT UO.Count(objtype) == old_qty
i = i + 100
wait(100)
wend
wait(action_delay)
endif
UO.Print("po wszystkim")
wend
end sub