RunUO magery trainer
Posted: 2005-01-25 22:29:40
Its a pack of few subs.
This one just changes string type spell name to number.
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.
That sub stocks ur char, there are 4 arguments here:
- objtype of item to stock
- when to stock, quanity (if count of items in pack gets lower then this script stocks)
- how much items u want to have in ur pack after stock
- where from container
This fucks sometimes for me instead of grabing given amount of items, grabs whole stack. Dunno why, Ill test it someday maybe.
This function is tweaky.. Its called check_regs, but it also gives u mana usage of spell. Otherwise itll return true if there are enough regs. It can also stock regs, just put serial of secure container as ssecond argument.
Btw. Can i use multidimensional arrays in injection scripts?
3 args:
spell_name - self explaining
reg_bag - if you want
zwrocmane - if its set to true, sub will return mana need for spell.
This sub tells script what to cast on diffrent magery levels, its quite self explaining on how to modify
Next question : is there switch( ) in Injection script language?
Finally the main script:
You have to modify reg_bag variable to change container with regs. Or write get_reg_container sub sth like that. I was too lazy for it, since all my chars're macroing their magery from one bag
Ha.. its not end. Noticed those file operations? Ive put spell reg and mana usage in config file. It's called spells.cfg by default.
First column - spell_id
2nd - mana usage
next 8 ones.. to use reg or not, 8 columes - 8 reg types, in the same order, as they're on title bar (turn on reg counter in Display tab if u cant remember
)
So here is it:
This one just changes string type spell name to number.
Btw. Feel free to comment it. If I seem to dont know about sth, just tell me


Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
sub get_spell_id(spell_name)
dim names[64]
var i
names[ 1] = "Clumsy"
names[ 2] = "Create Food"
names[ 3] = "Feeblemind"
names[ 4] = "Heal"
names[ 5] = "Magic Arrow"
names[ 6] = "Night Sight"
names[ 7] = "Reactive Armor"
names[ 8] = "Weaken"
names[ 9] = "Agility"
names[10] = "Cunning"
names[11] = "Cure"
names[12] = "Harm"
names[13] = "Magic Trap"
names[14] = "Magic Untrap"
names[15] = "Protection"
names[16] = "Strength"
names[17] = "Bless"
names[18] = "Fireball"
names[19] = "Magic Lock"
names[20] = "Poison"
names[21] = "Telekinesis"
names[22] = "Teleport"
names[23] = "Unlock"
names[24] = "Wall of Stone"
names[25] = "Arch Cure"
names[26] = "Arch Protection"
names[27] = "Curse"
names[28] = "Fire Field"
names[29] = "Greater Heal"
names[30] = "Lightning"
names[31] = "Mana Drain"
names[32] = "Recall"
names[33] = "Blade Spirits"
names[34] = "Dispel Field"
names[35] = "Incognito"
names[36] = "Magic Reflection"
names[37] = "Mind Blast"
names[38] = "Paralyze"
names[39] = "Poison Field"
names[40] = "Summ. Creature"
names[41] = "Dispel"
names[42] = "Energy Bolt"
names[43] = "Explosion"
names[44] = "Invisibility"
names[45] = "Mark"
names[46] = "Mass Curse"
names[47] = "Paralize Field"
names[48] = "Reveal"
names[49] = "Chain Lightning"
names[50] = "Energy Field"
names[51] = "Flame Strike"
names[52] = "Gate Travel"
names[53] = "Mana Vampire"
names[54] = "Mass Dispel"
names[55] = "Meteor Swarm"
names[56] = "Polymorph"
names[57] = "Earthquake"
names[58] = "Energy Vortex"
names[59] = "Ressurection"
names[60] = "Air Elemental"
names[61] = "Summon Daemon"
names[62] = "Earth Elemental"
names[63] = "Fire Elemental"
names[64] = "Water Elemental"
for i = 1 to 64
if spell_name == names[i] then
return i
endif
next
end sub
That sub stocks ur char, there are 4 arguments here:
- objtype of item to stock
- when to stock, quanity (if count of items in pack gets lower then this script stocks)
- how much items u want to have in ur pack after stock
- where from container
This fucks sometimes for me instead of grabing given amount of items, grabs whole stack. Dunno why, Ill test it someday maybe.
Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
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
This function is tweaky.. Its called check_regs, but it also gives u mana usage of spell. Otherwise itll return true if there are enough regs. It can also stock regs, just put serial of secure container as ssecond argument.
Btw. Can i use multidimensional arrays in injection scripts?
3 args:
spell_name - self explaining
reg_bag - if you want
zwrocmane - if its set to true, sub will return mana need for spell.
Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
sub check_regs(spell_name,reg_bag,zwrocmane)
dim id[64], mana[64], reg_bm[64], reg_bp[64], reg_ga[64], reg_gs[64], reg_mr[64], reg_ns[64], reg_sa[64], reg_ss[64]
var graph_ss = 0x0F8D
var graph_sa = 0x0F8C
var graph_gs = 0x0F85
var graph_ga = 0x0F84
var graph_ns = 0x0F88
var graph_bp = 0x0F7A
var graph_bm = 0x0F7B
var graph_mr = 0x0F86
var flag = 1
var i
var f = file("spells.cfg")
if NOT f.open() then
return FALSE
endif
for i = 1 to 64
id[i] = f.ReadNumber()
mana[i] = f.ReadNumber()
reg_bm[i] = f.ReadNumber()
reg_bp[i] = f.ReadNumber()
reg_ga[i] = f.ReadNumber()
reg_gs[i] = f.ReadNumber()
reg_mr[i] = f.ReadNumber()
reg_ns[i] = f.ReadNumber()
reg_sa[i] = f.ReadNumber()
reg_ss[i] = f.ReadNumber()
next
f.close()
var spell_id = get_spell_id(spell_name)
# UO.Print(STR(spell_id) + spell_name)
if zwrocmane then
return (mana[spell_id])
endif
if reg_bm[spell_id] then
if NOT UO.Count(graph_bm) then
flag = 0
if reg_bag then
uzupelnij(graph_bm,50,50,reg_bag)
endif
endif
endif
if reg_bp[spell_id] then
if NOT UO.Count(graph_bp) then
flag = 0
if reg_bag then
uzupelnij(graph_bp,50,50,reg_bag)
endif
endif
endif
if reg_ga[spell_id] then
if NOT UO.Count(graph_ga) then
flag = 0
if reg_bag then
uzupelnij(graph_ga,50,50,reg_bag)
endif
endif
endif
if reg_gs[spell_id] then
if NOT UO.Count(graph_gs) then
flag = 0
if reg_bag then
uzupelnij(graph_gs,50,50,reg_bag)
endif
endif
endif
if reg_mr[spell_id] then
if NOT UO.Count(graph_mr) then
flag = 0
if reg_bag then
uzupelnij(graph_mr,50,50,reg_bag)
endif
endif
endif
if reg_ns[spell_id] then
if NOT UO.Count(graph_ns) then
flag = 0
if reg_bag then
uzupelnij(graph_ns,50,50,reg_bag)
endif
endif
endif
if reg_sa[spell_id] then
if NOT UO.Count(graph_sa) then
flag = 0
if reg_bag then
uzupelnij(graph_sa,50,50,reg_bag)
endif
endif
endif
if reg_ss[spell_id] then
if NOT UO.Count(graph_ss) then
flag = 0
if reg_bag then
uzupelnij(graph_ss,50,50,reg_bag)
endif
endif
endif
return flag
end sub
This sub tells script what to cast on diffrent magery levels, its quite self explaining on how to modify

Next question : is there switch( ) in Injection script language?
Code: Select all
#
# (c) ziemniaq - ziemni@risp.pl
#
sub get_spell()
var spell_name
var mag = UO.SkillVal("Magery")
spell_name = "Fireball"
if mag > 400 then
spell_name = "Lightning"
if mag > 550 then
spell_name = "Mind Blast"
if mag > 600 then
spell_name = "Energy Bolt"
if mag > 720 then
spell_name = "Mana Vampire"
endif
endif
endif
endif
return spell_name
end sub
Finally the main script:
You have to modify reg_bag variable to change container with regs. Or write get_reg_container sub sth like that. I was too lazy for it, since all my chars're macroing their magery from one bag

Code: Select all
sub mag_dfi()
#
# (c) ziemniaq - ziemni@risp.pl
#
var reg_bag = "0x11111111"
var spell
while TRUE
spell = get_spell()
while UO.Life > 40 AND UO.Mana > check_regs(spell,0,1) AND check_regs(spell,reg_bag,0)
UO.Exec("waittargetself")
UO.Cast(spell)
wait(4000)
wend
while UO.Life < 40 AND UO.Mana > check_regs("Greater Heal",0,1) AND check_regs("Greater Heal",reg_bag,0)
UO.Exec("waittargetself")
UO.Cast("Greater Heal")
wait(2500)
wend
if UO.Mana < check_regs(spell,0,1) then
UO.UseSkill("Meditation")
while UO.Mana < UO.Int
wait(100)
wend
endif
wend
Ha.. its not end. Noticed those file operations? Ive put spell reg and mana usage in config file. It's called spells.cfg by default.
First column - spell_id
2nd - mana usage
next 8 ones.. to use reg or not, 8 columes - 8 reg types, in the same order, as they're on title bar (turn on reg counter in Display tab if u cant remember

So here is it:
Code: Select all
1 4 1 0 0 0 0 1 0 0
2 4 0 0 1 1 1 0 0 0
3 4 0 0 0 1 0 1 0 0
4 4 0 0 1 1 0 0 0 1
5 4 0 0 0 0 0 0 1 0
6 4 0 0 0 0 0 0 1 1
7 4 0 0 1 0 0 0 1 1
8 4 0 0 1 0 0 1 0 0
9 6 1 0 0 0 1 0 0 0
10 6 0 0 0 0 1 1 0 0
11 6 0 0 1 1 0 0 0 0
12 6 0 0 0 0 0 1 0 1
13 6 0 0 1 0 0 0 1 1
14 6 1 0 0 0 0 0 1 0
15 6 0 0 1 1 0 0 1 0
16 6 0 0 0 0 1 1 0 0
17 9 0 0 1 0 1 0 0 0
18 9 0 1 0 0 0 0 0 0
19 9 1 0 1 0 0 0 1 0
20 9 0 0 0 0 0 1 0 0
21 9 1 0 0 0 1 0 0 0
22 9 1 0 0 0 1 0 0 0
23 9 1 0 0 0 0 0 1 0
24 9 1 0 1 0 0 0 0 0
25 11 0 0 1 1 1 0 0 0
26 11 0 0 1 1 1 0 1 0
27 11 0 0 1 0 0 1 1 0
28 11 0 1 0 0 0 0 1 1
29 11 0 0 1 1 1 0 0 1
30 11 0 0 0 0 1 0 1 0
31 11 0 1 0 0 1 0 0 1
32 11 1 1 0 0 1 0 0 0
33 14 0 1 0 0 1 1 0 0
34 14 0 1 1 0 0 0 1 1
35 14 1 0 1 0 0 1 0 0
36 14 0 0 1 0 1 0 0 1
37 14 0 1 0 0 1 1 1 0
38 14 0 0 1 0 1 0 0 1
39 14 0 1 0 0 0 1 0 1
40 14 1 0 0 0 1 0 0 1
41 20 0 0 1 0 1 0 1 0
42 20 0 1 0 0 0 1 0 0
43 20 1 0 0 0 1 0 0 0
44 20 1 0 0 0 0 1 0 0
45 20 1 1 0 0 1 0 0 0
46 20 0 0 1 0 1 1 1 0
47 20 0 1 0 1 0 0 0 1
48 20 1 0 0 0 0 0 1 0
49 40 1 1 0 0 1 0 1 0
50 40 0 1 0 0 1 0 1 1
51 40 0 0 0 0 0 0 1 1
52 40 0 1 0 0 1 0 1 0
53 40 1 1 0 0 1 0 0 1
54 40 0 1 1 0 1 0 1 0
55 40 1 0 0 0 1 0 1 1
56 40 1 0 0 0 1 0 0 1
57 50 1 0 0 1 1 0 1 0
58 50 1 1 0 0 1 1 0 0
59 50 1 0 1 1 0 0 0 0
60 50 1 0 0 0 1 0 0 1
61 50 1 0 0 0 1 0 1 1
62 50 1 0 0 0 1 0 0 1
63 50 1 0 0 0 1 0 1 1
64 50 1 0 0 0 1 0 0 1