|CastingSkillup.mac
|Version 0.3
|2010, August 14
|
| Description: This macro will automatically work on your five casting skills.
|
| Find a safe place (not too safe place if you want to work on evocation), target your pet
| or groupmate, then run this macro.
|
| Syntax: /mac CastingSkillup
#turbo
#include spell_routines.inc
#Event RaiseError "#*#Your spell did not take hold.#*#"
#Event RaiseError "#*#Your spell would not have taken hold on your target.#*#"
#Event RaiseError "#*#This spell only works on the undead.#*#"
Sub Main
/declare ErrorLevel int outer 0
/declare SkillName[5] string outer
/declare SkillActive[5] int outer 1
/declare PracticeSpell[16,5] string outer UNDEFINED
/declare DesiredSkillLevel int outer 0
/declare ActiveSkill int outer 1
/declare ActiveSkillLevelGoal int outer 10
/declare SumSpellsCast int outer 0
/echo **** CastingSkillup.mac ****
/if (${Me.Class.Name.Equal[Warrior]} || ${Me.Class.Name.Equal[Berserker]} || ${Me.Class.Name.Equal[Monk]} || ${Me.Class.Name.Equal[Rogue]} || ${Me.Class.Name.Equal[Bard]}) {
/echo You need to go buy a clue and a spell book.
}
/call Init
:MainLoop
| Start casting in chunks, first all skills to 20, then 30, 40, etc.
/for ActiveSkill 1 to 5
/if (${SkillActive[${ActiveSkill}]}) /call Do_Cast
/next ActiveSkill
/if (${ActiveSkillLevelGoal} < ${DesiredSkillLevel}) {
/call UpdateSkillgoal
/goto :MainLoop
}
/echo **** CastingSkillup Finished ****
/echo **** ${SumSpellsCast} spells cast ****
/beep
/beep
/return
Sub Do_Cast
/if (${Me.Skill[${SkillName[${ActiveSkill}]}]} >= ${ActiveSkillLevelGoal}) {
/return
}
/if (${PracticeSpell[${Me.Class.ID},${ActiveSkill}].Equal[UNDEFINED]}) {
| /echo Spell undefined, cancelling
/varset SkillActive[${ActiveSkill}] 0
/return
}
|echo Next goal: Abjuration to 250
/echo Next goal: ${SkillName[${ActiveSkill}]} to ${ActiveSkillLevelGoal}
/delay 3s
:Loop
/if (${Me.Skill[${SkillName[${ActiveSkill}]}]} >= ${ActiveSkillLevelGoal}) {
/echo Goal reached.
/return
}
/call cast "${PracticeSpell[${Me.Class.ID},${ActiveSkill}]}" gem7
/if (${Macro.Return.Equal[CAST_SUCCESS]}) /varset SumSpellsCast ${Math.Calc[${SumSpellsCast}+1]}
/if (${Macro.Return.Equal[CAST_OUTOFMANA]}) {
/echo OOM, resting a bit.
/sit
/delay 120s
}
/if (${Macro.Return.NotEqual[CAST_SUCCESS]} && ${Macro.Return.NotEqual[CAST_NOTREADY]} && ${Macro.Return.NotEqual[CAST_OUTOFMANA]}) {
/echo Unhandled exception: ${Macro.Return}
/varset SkillActive[${ActiveSkill}] 0
/return
}
/doevents
/if (${ErrorLevel} > 0) {
/echo Something went wrong.
/varset SkillActive[${ActiveSkill}] 0
/varset ErrorLevel 0
/return
}
/goto :Loop
/return
Sub Init
/echo Initializing...
/call Init_vars
/call UpdateSkillGoal
/declare i int local
/for i 1 to 5
/echo ${SkillName[${i}]}: ${Me.Skill[${SkillName[${i}]}]}/${DesiredSkillLevel}
| /if (${Me.Skill[${SkillName[${i}]}]} < ${DesiredSkillLevel}) {
| /echo ${SkillName[${i}]} practice will be Spell: ${PracticeSpell[${Me.Class.ID},${i}]}
| }
/next i
/return
Sub Init_vars
/varset SkillName[1] Abjuration
/varset SkillName[2] Alteration
/varset SkillName[3] Conjuration
/varset SkillName[4] Divination
/varset SkillName[5] Evocation
| WARRIOR = 1
| CLERIC = 2
/varset PracticeSpell[2,1] Endure Poison
/varset PracticeSpell[2,2] Minor Healing
/varset PracticeSpell[2,3] Halo of Light
/varset PracticeSpell[2,4] True North
/varset PracticeSpell[2,5] Strike
| PALADIN = 3
/varset PracticeSpell[3,1] UNDEFINED
/varset PracticeSpell[3,2] UNDEFINED
/varset PracticeSpell[3,3] UNDEFINED
/varset PracticeSpell[3,4] UNDEFINED
/varset PracticeSpell[3,5] UNDEFINED
| RANGER = 4
/varset PracticeSpell[4,1] UNDEFINED
/varset PracticeSpell[4,2] UNDEFINED
/varset PracticeSpell[4,3] UNDEFINED
/varset PracticeSpell[4,4] UNDEFINED
/varset PracticeSpell[4,5] UNDEFINED
| SHADOW KNIGHT = 5
/varset PracticeSpell[5,1] Endure Cold
/varset PracticeSpell[5,2] Shadow Step
/varset PracticeSpell[5,3] Spike of Disease
/varset PracticeSpell[5,4] Sense the Dead
/varset PracticeSpell[5,5] Ward Undead
| DRUID = 6
/varset PracticeSpell[6,1] Skin like Wood
/varset PracticeSpell[6,2] Minor Healing
/varset PracticeSpell[6,3] UNDEFINED
/varset PracticeSpell[6,4] UNDEFINED
/varset PracticeSpell[6,5] UNDEFINED
| MONK = 7
| BARD = 8
| ROGUE= 9
| SHAMAN = 10
/varset PracticeSpell[10,1] UNDEFINED
/varset PracticeSpell[10,2] UNDEFINED
/varset PracticeSpell[10,3] UNDEFINED
/varset PracticeSpell[10,4] UNDEFINED
/varset PracticeSpell[10,5] UNDEFINED
| NECROMANCER = 11
/varset PracticeSpell[11,1] Minor Shielding
/varset PracticeSpell[11,2] Lifetap
/varset PracticeSpell[11,3] Coldlight
/varset PracticeSpell[11,4] True North
/varset PracticeSpell[11,5] Ward Undead
| WIZARD = 12
/varset PracticeSpell[12,1] Minor Shielding
/varset PracticeSpell[12,2] Fade
/varset PracticeSpell[12,3] Halo of Light
/varset PracticeSpell[12,4] True North
/varset PracticeSpell[12,5] Strike
| MAGICIAN = 13
/varset PracticeSpell[13,1] Minor Shielding
/varset PracticeSpell[13,2] Renew Elements
/varset PracticeSpell[13,3] Summon Brass Choker
/varset PracticeSpell[13,4] True North
/varset PracticeSpell[13,5] Burst of Flame
| ENCHANTER = 14
/varset PracticeSpell[14,1] Minor Shielding
/varset PracticeSpell[14,2] Strengthen
/varset PracticeSpell[14,3] Pendril's Animation
/varset PracticeSpell[14,4] True North
/varset PracticeSpell[14,5] Chaotic Feedback
| BEASTLORD = 15
/varset PracticeSpell[15,1] UNDEFINED
/varset PracticeSpell[15,2] UNDEFINED
/varset PracticeSpell[15,3] UNDEFINED
/varset PracticeSpell[15,4] UNDEFINED
/varset PracticeSpell[15,5] UNDEFINED
| BERSERKER = 16
/return
Sub UpdateSkillGoal
/if (${Me.Level} <= 50) {
/call Min 255 ${Math.Calc[5 + ${Me.Level}*5]}
/varset DesiredSkillLevel ${Macro.Return}
} else /if (${Me.Level} <= 65) {
/varset DesiredSkillLevel ${Math.Calc[${Me.Level}*3 + 105]}
} else {
/varset DesiredSkillLevel ${Math.Calc[${Me.Level}*2 + 170]}
}
/call Min ${DesiredSkillLevel} ${Math.Calc[${ActiveSkillLevelGoal} + 10]}
/varset ActiveSkillLevelGoal ${Macro.Return}
/return
Sub Min(int A, int B)
/declare result int local
/if (${A} < ${B}) {
/varset result ${A}
} else {
/varset result ${B}
}
/return ${result}
Sub Event_RaiseError(Line, NewSkill)
/varset ErrorLevel 1
/return