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