• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Macro - cskillup

Maskoi

old and salty
Joined
Sep 28, 2005
RedCents
82,796¢
Cskillup.mac v1.8 12/14/2018 Released
~Added alynel's pet additions


Cskillup.mac v1.7 09/28/2017 Released
~Converted to MQ2Cast
~Fixed for #warning


Spell Casting Skillup Trainer v1.6 09/27/2012
~ NEW! Specialization Check added. CSkillUp will now cast your classes main spell until you break the 50 point Specialization cap in that skill. Auto detect if a Specialization is already above 50

  • Alteration - Cleric, Druid, Shaman & Necromancer
  • Evocation - Wizard
  • Conjuration - Enchanter & Magician
~Shadow Knight Spells changed. Spike of Disease changed to Disease Cloud & Shadow Step changed to Siphon Strength.
~Fixed an error causing toon to dismount while medding.

Cskillup.mac v1.4 11/02/2012 Released
~ Wizzie spell fade change to root to prevent shadow steping all over the zone
~ Wizzie familiar get lost added because damage spells don't work on familiars.

Cskillup.mac v1.3 05/17/2012 Released ~ MAJOR UPDATE
~ Will now only delete the summoned items from practice spell. Fixes deleting any item on your cursor!!

cskillup v1.2 2/28/2011
~ Improved error control including zone check, pet, and summoned items.
~ Fixed bad loop on skill max check.
~ Changed chanter conjuration spell from pet to mesmerize to save material components.
~ Tweaked spell casting loop. It was skipping spells not refreshing fast enough

I wrote a new macro Based on Arneweise's CastingSkillup.mac because people were having issues with it.

Will mem basic low level spells for each class in gems 1-5 and cast them until your skills maxed.

Check spell lists for your class spells

Rich (BB code):
| Cskillup.mac by Maskoi v1.8 12/14/2018
| Based on Arneweise's CastingSkillup.mac
| Pet additions by alynel
|
| Description: This macro will automatically work on your five casting skills.
|
| Find a safe place in zone other than Pok, Guild Lobby, Guild Hall or Bazaar,
|
| Requires MQ2Cast
|
| Syntax: /mac cskillup
#warning
#turbo 80

#Event SkillUp "You have become better at #1#! (#2#)"
#Event MedUp "Insufficient Mana to cast this spell!#*#"

Sub Main

    | Send a gmail message on completion, NOTE: You must configure mq2gmail before enabling or it will not work.  Once configured, change from 0 to 1 to get an email when training complete.
    /declare sendgmail                int                outer    0
    /declare SkillName[5]           string          outer
    /declare PracticeSpell[16,8]    string          outer   
    /declare CurrentZone            int             outer   ${Zone.ID}
    /declare SpecSpam               int             outer   1
    /declare SpecIgnore             int             outer   0

    /varset SkillName[1]            Abjuration
    /varset SkillName[2]            Alteration
    /varset SkillName[3]            Conjuration
    /varset SkillName[4]            Divination
    /varset SkillName[5]            Evocation

|    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
    /varset PracticeSpell[2,6]      Summoned: Halo of Light
    /varset PracticeSpell[2,7]      Alteration

|    PALADIN = 3
    /varset PracticeSpell[3,1]      Courage
    /varset PracticeSpell[3,2]      Salve
    /varset PracticeSpell[3,3]      Hammer of Wrath
    /varset PracticeSpell[3,4]      True North
    /varset PracticeSpell[3,5]      Cease
    /varset PracticeSpell[3,6]      Summoned: Hammer of Wrath

|    RANGER = 4
    /varset PracticeSpell[4,1]      Endure Fire
    /varset PracticeSpell[4,2]      Salve
    /varset PracticeSpell[4,3]      Dance of the Fireflies
    /varset PracticeSpell[4,4]      Glimpse
    /varset PracticeSpell[4,5]      Burst of fire
    /varset PracticeSpell[4,6]      Summoned: Firefly Globe
  
|    SHADOW KNIGHT = 5
    /varset PracticeSpell[5,1]      Endure Cold
    /varset PracticeSpell[5,2]      Siphon Strength
    /varset PracticeSpell[5,3]      Disease Cloud 
    /varset PracticeSpell[5,4]      Sense the Dead
    /varset PracticeSpell[5,5]      Ward Undead
    /varset PracticeSpell[5,8]      Leering Corpse
  
|    DRUID = 6
    /varset PracticeSpell[6,1]      Skin like Wood
    /varset PracticeSpell[6,2]      Minor Healing
    /varset PracticeSpell[6,3]      Summon Food
    /varset PracticeSpell[6,4]      Sense Animals
    /varset PracticeSpell[6,5]      Burst of Fire
    /varset PracticeSpell[6,6]      Summoned: Black Bread
    /varset PracticeSpell[6,7]      Alteration
  
|    SHAMAN = 10
    /varset PracticeSpell[10,1]     Endure Cold
    /varset PracticeSpell[10,2]     Minor Healing
    /varset PracticeSpell[10,3]     Summon Drink
    /varset PracticeSpell[10,4]     True North
    /varset PracticeSpell[10,5]     Burst of Flame
    /varset PracticeSpell[10,6]     Summoned: Globe of Water
    /varset PracticeSpell[10,7]     Alteration
  
|    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
    /varset PracticeSpell[11,6]     Summoned: Coldlight
    /varset PracticeSpell[11,7]     Alteration
    /varset PracticeSpell[11,8]     Cavorting Bones
  
|    WIZARD = 12
    /varset PracticeSpell[12,1]     Minor Shielding
    /varset PracticeSpell[12,2]     Root
    /varset PracticeSpell[12,3]     Halo of Light
    /varset PracticeSpell[12,4]     True North
    /varset PracticeSpell[12,5]     Blast of Cold
    /varset PracticeSpell[12,6]     Summoned: Halo of Light
    /varset PracticeSpell[12,7]     Evocation
  
|    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
    /varset PracticeSpell[13,6]     Jedah's Brass Choker
    /varset PracticeSpell[13,7]     Conjuration
    /varset PracticeSpell[13,8]     Elementalkin: Water
  
|    ENCHANTER = 14
    /varset PracticeSpell[14,1]     Minor Shielding
    /varset PracticeSpell[14,2]     Strengthen
    /varset PracticeSpell[14,3]     Mesmerize
    /varset PracticeSpell[14,4]     True North
    /varset PracticeSpell[14,5]     Chaotic Feedback
    /varset PracticeSpell[14,6]     Summoned: Globe of Water
    /varset PracticeSpell[14,7]     Conjuration
    /varset PracticeSpell[14,8]     Pendril's Animation
  
|    BEASTLORD = 15
    /varset PracticeSpell[15,1]     Endure Cold
    /varset PracticeSpell[15,2]     Salve
    /varset PracticeSpell[15,3]     Summon Drink
    /varset PracticeSpell[15,4]     Sense Animals
    /varset PracticeSpell[15,5]     Blast of Frost
    /varset PracticeSpell[15,6]     Summoned: Globe of Water
    /varset PracticeSpell[15,8]     Spirit of Sharik
  
  
| - Check Class
     /if (${Select[${Me.Class.Name},Warrior,Berserker,Monk,Rogue,Bard]}>=1) {
        /echo You need to go buy a clue and a spell book.
        /end
    }
  
    /call Init
    /call MemSpells
    /call SpecializationCheck
  
    :MainLoop
        /call DoCast
         /if (${Me.PctMana}<=1 || ${Me.PctHPs}<50) /call Event_MedUp
        /call AreWeDone
        /doevents
    /goto :MainLoop
  
/return

Sub Init
    /echo Skill Level/Skill Cap
    /declare i int local
    /for i 1 to 5
        /echo ${SkillName[${i}]}: ${Me.Skill[${SkillName[${i}]}]}/${Me.SkillCap[${SkillName[${i}]}]} - Casting: * ${PracticeSpell[${Me.Class.ID},${i}]} *
    /next i
    /if (${sendgmail}) {
        /if (!${Plugin[MQ2Gmail].Name.Length}) {
            /plugin mq2gmail noauto
        }
        /echo "Gmail notification is configured, it will send you an email when complete"
    } else /echo "Gmail notification is not configured"
/return

| - Sub MemSpells
Sub MemSpells
    /declare i int local
    /for i 1 to 5
        /if (!${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}) {
            /echo Memorizing Spell >> ${PracticeSpell[${Me.Class.ID},${i}]} <<
            /memspell ${i} "${PracticeSpell[${Me.Class.ID},${i}]}"
            /delay 30s ${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}
        }
    /next i
/return

Sub DoCast
    /declare i int local
    | - Zone check to turn end macro if zoning
    /if (${Zone.ID}!=${CurrentZone}) {
        /echo You have zoned ending macro.
        /end
    }
    | IF wizzie ditch familiar can't cast on them
    /if (${Me.Pet.CleanName.Equal[${Me.Name}`s familiar]} && ${Me.Class.ShortName.Equal[Wiz]}) /pet get lost
    | - Check for pet class and target pets for spell casting.
    /if (${Me.Pet.ID}) {
        /target ${Me.Pet}
        /delay 10
    } else /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]}>=1 && !${Me.Pet.ID}) {
        /casting "${PracticeSpell[${Me.Class.ID},8]}" gem6
        /delay 15s !${Me.Casting.ID}
        /if (!${Me.Pet.ID}) {
            /echo Failed to summon a pet, ending macro
        /end
        }
        /target ${Me.Pet}
        /delay 10
    } else /if (!${Me.Pet.ID}) {
        /target id ${Me.ID}
    }

    /delay 10
    /for i 1 to 5
        :SpecializeCap
        /doevents
        /if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /goto :NextSpell
      
        /if (${Spell[${Me.Gem[${i}]}].Name.Equal[Dance of the Fireflies]} && !${GameTime.Night}) /goto :NextSpell
        /delay 3s !${Me.SpellInCooldown}
        /if (!${Me.SpellReady[${Me.Gem[${i}]}]}) /goto :NextSpell
      
        /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]} && ${Me.Pet.ID} && ${i}==5 && ${Target.ID}!=${Me.Pet.ID}) {
            /target pet ${Me.Pet}
            /delay 1s
        } else /if (!${Me.Pet.ID} && ${Target.ID}!=${Me.ID} && ${i}==5) {
            /target id ${Me.ID}
            /delay 1s
        }

        /if (${Me.Skill[${SkillName[${i}]}]} < ${Me.SkillCap[${SkillName[${i}]}]}) {
            /casting "${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}
            | /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} ${i}
            /delay 5s !${Me.Casting.ID}
        }
        | - Check cursor for summoned items and destroy them.
        /if (${Cursor.Name.Equal[${PracticeSpell[${Me.Class.ID},6]}]}) {
            /destroy
            /delay 5s !${Cursor.ID}
        }
        /if (${Me.Skill[Specialize ${PracticeSpell[${Me.Class.ID},7]}]}<=100 && ${SkillName[${i}].Equal[${PracticeSpell[${Me.Class.ID},7]}]} && ${Select[${Me.Class.ShortName},CLR,DRU,ENC,MAG,NEC,SHM,WIZ]} && !${SpecIgnore}) {
            /if (${SpecSpam}) {
                /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} until we BREAK 100 in Specialize ${SkillName[${i}]}
                /varset SpecSpam 0
                /timed 300 /varset SpecSpam 1
            }
            /goto :SpecializeCap
        }
        :NextSpell
    /next i
/return

Sub Event_SkillUp(S0,S1,S2)
    /echo >> Your ${S1} skill is now ${S2}. <<
/return

Sub Event_MedUp
    /echo Out of mana medding up.
    /if (!${Me.Mount.ID} && !${Me.Sitting}) /sit
    :med
        /delay 10
    /if (${Me.PctMana}<100 || ${Me.PctHPs}<100) /goto :med
    /if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
/return

Sub AreWeDone
    /declare i int local
    /declare j int local 0
    /for i 1 to 5
        /if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /varcalc j ${j}+1
        /if (${j}==5) {
            /echo All skills are currently maxed. Ending macro.
            /if (${sendgmail}) {
                /gmail "${Me.Name} has finished skilling up!"
            }
            /end
        }
    /next i
/return

Sub SpecializationCheck
    /declare i int local
    /for i 1 to 5
        /if (${Me.Skill[Specialize ${SkillName[${i}]}]}>100) {
            /echo Detected Specialize ${SkillName[${i}]} is over 100 TURNING OFF Break Specialiazion Cap
            /varset SpecIgnore 1
            /return
        }
    /next i
/return
 
Last edited:
Re: Spell Casting Skillup Trainer v1.7 09/27/0212

If I want my Mage to spec in Evocation, instead of Conjuration, can I just change that part of the macro that says "Conjuration" to "Evocation" under the mage section? If yes, I presume this should work for any class whose spec you want to change.

Edit: PS - Thanks for this macro - very handy!
 
Last edited:
Re: Spell Casting Skillup Trainer v1.7 09/27/0212

That is correct.
 
Love the Macro.

Of note: if you have a spell blocking one of your skillup paths you won't get skillups in that skill or specialization (as far as I am aware), and the macro won't remove the blocking spell, but keeps trying to cast the low level spell for skillups ad-nauseum to no effect.

Also, I'm not sure if specialization works the way it was intended at low levels. Having just obtained specializations on my druid at lvl 31 or so, I ran the macro, but as soon as alteration capped at 160, he no longer cast alteration spells, even though his specialization wasn't 50 yet. I had to manually go in and cast until he passed the spec of 50 mark to make sure something else didn't pass the cap before I wanted it to. Again, not sure how that was intended to work if you wanted to focus on a specific specialization.

Would be handy to pass a variable to cskillup such as /mac cskillup alteration and have the macro keep casting your alteration spell until both alteration and specialization are capped for your level? I'm tempted to try and edit the macro, and may yet, but not sure if my coding skills are all there.
 
Love the Macro.

Of note: if you have a spell blocking one of your skillup paths you won't get skillups in that skill or specialization (as far as I am aware), and the macro won't remove the blocking spell, but keeps trying to cast the low level spell for skillups ad-nauseum to no effect.

Also, I'm not sure if specialization works the way it was intended at low levels. Having just obtained specializations on my druid at lvl 31 or so, I ran the macro, but as soon as alteration capped at 160, he no longer cast alteration spells, even though his specialization wasn't 50 yet. I had to manually go in and cast until he passed the spec of 50 mark to make sure something else didn't pass the cap before I wanted it to. Again, not sure how that was intended to work if you wanted to focus on a specific specialization.

Would be handy to pass a variable to cskillup such as /mac cskillup alteration and have the macro keep casting your alteration spell until both alteration and specialization are capped for your level? I'm tempted to try and edit the macro, and may yet, but not sure if my coding skills are all there.

Interesting we both stumbled on this at the same time. Here are some thoughts on this handy little routine. I just ran this last night on some level 20 mages...

1) If you're using the 11 series of KISS you will not have MQ2Cast loaded and this macro will fail. You will need to manually /plugin MQ2Cast load before running this.
2) This macro will stop long before you reach your Specialization Cap. It would be nice if it kept running and max'd the specialization while it was running. So the line where it says it's going to run until you break 100 specialization is not true. Once your base skill reaches the skill cap this macro exits.
3) As the previous poster noticed, it will not check and remove higher level buffs. Best to strip yourself of all buffs before running this. Might as well ensure you have a pet at the same time and click off all your loaded spells too.
 
Couple of minor changes in the attached, it will now med up if your HP gets below 50%, and summon a pet for you. Untested on necro but works on the others.
 

Attachments

this macro so bugged, it let my enc , wiz , clr all going Wrong Specialization !!

My ENC goes alteration, My Wiz goes abjure, My cle goes abjure, WTF !!!
 
this macro so bugged, it let my enc , wiz , clr all going Wrong Specialization !!

My ENC goes alteration, My Wiz goes abjure, My cle goes abjure, WTF !!!

Well, you can reset that and have another go at it.
 
Hi,
I have used this on a few toons and it works great. Just curious as to why it would not work on a Paladin. I get the error:

DoCommand - Couldn't parse '/casting
"${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}'
cskillup.mac@224 (DoCast): /casting
"${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}
cskillup.mac@145 (Main): /call DoCast

Again, this is weird since it works on my other toons and is supposed to work on a Pally. Is there some setting I need to change somewhere on my toon? Thanks for any help, AnotherJohn
 
Hi,
I have used this on a few toons and it works great. Just curious as to why it would not work on a Paladin. I get the error:

DoCommand - Couldn't parse '/casting
"${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}'
cskillup.mac@224 (DoCast): /casting
"${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}
cskillup.mac@145 (Main): /call DoCast

Again, this is weird since it works on my other toons and is supposed to work on a Pally. Is there some setting I need to change somewhere on my toon? Thanks for any help, AnotherJohn
do a /plugin mq2cast
 
Sic,
Thanks. That worked. Just odd the other toons didnt need me to do that so didnt think that applied to me when I read about mq2cast in older posts. Thanks for your help. AnotherJohn
 
Sic,
Thanks. That worked. Just odd the other toons didnt need me to do that so didnt think that applied to me when I read about mq2cast in older posts. Thanks for your help. AnotherJohn
you're welcome!
experiencing this type of thing myself has helped me understand the importance of including a sub routine in my macros to ensure that the proper plugins are loaded--- anyhow, glad you're working again
 
I used it yesterday on a clean mage at around level 100 when it ended mage was specialized in Alteration! :o ....what went wrong? any explanation?
 
my divination maxed out which is nice, but I have specializations which need to be maxed and since they are "over 100" it won't do anything.... annoying.

I need to raise the cap on specialization to 290 and the fact I got 5 specializations that cap at 290. Anyway to make specialization check just like regular casting skills? Check the cap and cast until you reach it? It doesn't check to see if you're at 400 for regular skills, it checks to see if you're at your max and stops when you hit that point.

It really could just do the same loop for specialization as it does for regular but with different variable declarations at worst.
 
Last edited:
So, I have this thread on "watch" is there something I need to do to get it to show up on the RG Launcher - Macros tab ? Or are some just not eligible to be "watched" and added to the Macros section ?
 
So, I have this thread on "watch" is there something I need to do to get it to show up on the RG Launcher - Macros tab ? Or are some just not eligible to be "watched" and added to the Macros section ?
you have to watch the "overview" and not the "thread". watching the discussion thread would just make you get notifications if there were more replies to the discussion.
watching the overview is the actual resource and that will then show on your launcher.
 
So, I have this thread on "watch" is there something I need to do to get it to show up on the RG Launcher - Macros tab ? Or are some just not eligible to be "watched" and added to the Macros section ?

as this one is marked as included on the overview of the resource I also don't think you will have to watch it, it should already be downloaded and ready to run.
 
as this one is marked as included on the overview of the resource I also don't think you will have to watch it, it should already be downloaded and ready to run.
good catch,

i just confirmed that it is included and the dec 2018 most recent update is the included file on the server
1634153821530.png
 
Used to be the way for getting notifications, mq2discord is the better way now. I've never bothered to set that, works fine.
 
v1.8 do not check Specialize any more.
Code:
| Cskillup.mac by Maskoi v1.8 12/14/2018
| Based on Arneweise's CastingSkillup.mac
| Pet additions by alynel
|
| Description: This macro will automatically work on your five casting skills.
|
| Find a safe place in zone other than Pok, Guild Lobby, Guild Hall or Bazaar,
|
| Requires MQ2Cast
|
| Syntax: /mac cskillup
#warning
#turbo 80

#Event SkillUp "You have become better at #1#! (#2#)"
#Event MedUp "Insufficient Mana to cast this spell!#*#"

Sub Main

    | Send a gmail message on completion, NOTE: You must configure mq2gmail before enabling or it will not work.  Once configured, change from 0 to 1 to get an email when training complete.
    /declare sendgmail                int                outer    0
    /declare SkillName[5]           string          outer
    /declare PracticeSpell[16,8]    string          outer   
    /declare CurrentZone            int             outer   ${Zone.ID}
    /declare SpecSpam               int             outer   1
    /declare SpecIgnore             int             outer   0

    /varset SkillName[1]            Abjuration
    /varset SkillName[2]            Alteration
    /varset SkillName[3]            Conjuration
    /varset SkillName[4]            Divination
    /varset SkillName[5]            Evocation

|    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
    /varset PracticeSpell[2,6]      Summoned: Halo of Light
    /varset PracticeSpell[2,7]      Alteration

|    PALADIN = 3
    /varset PracticeSpell[3,1]      Courage
    /varset PracticeSpell[3,2]      Salve
    /varset PracticeSpell[3,3]      Hammer of Wrath
    /varset PracticeSpell[3,4]      True North
    /varset PracticeSpell[3,5]      Cease
    /varset PracticeSpell[3,6]      Summoned: Hammer of Wrath

|    RANGER = 4
    /varset PracticeSpell[4,1]      Endure Fire
    /varset PracticeSpell[4,2]      Salve
    /varset PracticeSpell[4,3]      Dance of the Fireflies
    /varset PracticeSpell[4,4]      Glimpse
    /varset PracticeSpell[4,5]      Burst of fire
    /varset PracticeSpell[4,6]      Summoned: Firefly Globe
 
|    SHADOW KNIGHT = 5
    /varset PracticeSpell[5,1]      Endure Cold
    /varset PracticeSpell[5,2]      Siphon Strength
    /varset PracticeSpell[5,3]      Disease Cloud
    /varset PracticeSpell[5,4]      Sense the Dead
    /varset PracticeSpell[5,5]      Ward Undead
    /varset PracticeSpell[5,8]      Leering Corpse
 
|    DRUID = 6
    /varset PracticeSpell[6,1]      Skin like Wood
    /varset PracticeSpell[6,2]      Minor Healing
    /varset PracticeSpell[6,3]      Summon Food
    /varset PracticeSpell[6,4]      Sense Animals
    /varset PracticeSpell[6,5]      Burst of Fire
    /varset PracticeSpell[6,6]      Summoned: Black Bread
    /varset PracticeSpell[6,7]      Alteration
 
|    SHAMAN = 10
    /varset PracticeSpell[10,1]     Endure Cold
    /varset PracticeSpell[10,2]     Minor Healing
    /varset PracticeSpell[10,3]     Summon Drink
    /varset PracticeSpell[10,4]     True North
    /varset PracticeSpell[10,5]     Burst of Flame
    /varset PracticeSpell[10,6]     Summoned: Globe of Water
    /varset PracticeSpell[10,7]     Alteration
 
|    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
    /varset PracticeSpell[11,6]     Summoned: Coldlight
    /varset PracticeSpell[11,7]     Alteration
    /varset PracticeSpell[11,8]     Cavorting Bones
 
|    WIZARD = 12
    /varset PracticeSpell[12,1]     Minor Shielding
    /varset PracticeSpell[12,2]     Root
    /varset PracticeSpell[12,3]     Halo of Light
    /varset PracticeSpell[12,4]     True North
    /varset PracticeSpell[12,5]     Blast of Cold
    /varset PracticeSpell[12,6]     Summoned: Halo of Light
    /varset PracticeSpell[12,7]     Evocation
 
|    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
    /varset PracticeSpell[13,6]     Jedah's Brass Choker
    /varset PracticeSpell[13,7]     Conjuration
    /varset PracticeSpell[13,8]     Elementalkin: Water
 
|    ENCHANTER = 14
    /varset PracticeSpell[14,1]     Minor Shielding
    /varset PracticeSpell[14,2]     Strengthen
    /varset PracticeSpell[14,3]     Mesmerize
    /varset PracticeSpell[14,4]     True North
    /varset PracticeSpell[14,5]     Chaotic Feedback
    /varset PracticeSpell[14,6]     Summoned: Globe of Water
    /varset PracticeSpell[14,7]     Conjuration
    /varset PracticeSpell[14,8]     Pendril's Animation
 
|    BEASTLORD = 15
    /varset PracticeSpell[15,1]     Endure Cold
    /varset PracticeSpell[15,2]     Salve
    /varset PracticeSpell[15,3]     Summon Drink
    /varset PracticeSpell[15,4]     Sense Animals
    /varset PracticeSpell[15,5]     Blast of Frost
    /varset PracticeSpell[15,6]     Summoned: Globe of Water
    /varset PracticeSpell[15,8]     Spirit of Sharik
 
 
| - Check Class
     /if (${Select[${Me.Class.Name},Warrior,Berserker,Monk,Rogue,Bard]}>=1) {
        /echo You need to go buy a clue and a spell book.
        /end
    }
 
    /call Init
    /call MemSpells
    /call SpecializationCheck
 
    :MainLoop
        /call DoCast
         /if (${Me.PctMana}<=1 || ${Me.PctHPs}<50) /call Event_MedUp
        /call AreWeDone
        /doevents
    /goto :MainLoop
 
/return

Sub Init
    /echo Skill Level/Skill Cap
    /declare i int local
    /for i 1 to 5
        /echo ${SkillName[${i}]}: ${Me.Skill[${SkillName[${i}]}]}/${Me.SkillCap[${SkillName[${i}]}]} - Casting: * ${PracticeSpell[${Me.Class.ID},${i}]} *
    /next i
    /if (${sendgmail}) {
        /if (!${Plugin[MQ2Gmail].Name.Length}) {
            /plugin mq2gmail noauto
        }
        /echo "Gmail notification is configured, it will send you an email when complete"
    } else /echo "Gmail notification is not configured"
/return

| - Sub MemSpells
Sub MemSpells
    /declare i int local
    /for i 1 to 5
        /if (!${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}) {
            /echo Memorizing Spell >> ${PracticeSpell[${Me.Class.ID},${i}]} <<
            /memspell ${i} "${PracticeSpell[${Me.Class.ID},${i}]}"
            /delay 30s ${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}
        }
    /next i
/return

Sub DoCast
    /declare i int local
    | - Zone check to turn end macro if zoning
    /if (${Zone.ID}!=${CurrentZone}) {
        /echo You have zoned ending macro.
        /end
    }
    | IF wizzie ditch familiar can't cast on them
    /if (${Me.Pet.CleanName.Equal[${Me.Name}`s familiar]} && ${Me.Class.ShortName.Equal[Wiz]}) /pet get lost
    | - Check for pet class and target pets for spell casting.
    /if (${Me.Pet.ID}) {
        /target ${Me.Pet}
        /delay 10
    } else /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]}>=1 && !${Me.Pet.ID}) {
        /casting "${PracticeSpell[${Me.Class.ID},8]}" gem6
        /delay 15s !${Me.Casting.ID}
        /if (!${Me.Pet.ID}) {
            /echo Failed to summon a pet, ending macro
        /end
        }
        /target ${Me.Pet}
        /delay 10
    } else /if (!${Me.Pet.ID}) {
        /target id ${Me.ID}
    }

    /delay 10
    /for i 1 to 5
        :SpecializeCap
        /doevents
        /if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /goto :NextSpell
      
        /if (${Spell[${Me.Gem[${i}]}].Name.Equal[Dance of the Fireflies]} && !${GameTime.Night}) /goto :NextSpell
        /delay 3s !${Me.SpellInCooldown}
        /if (!${Me.SpellReady[${Me.Gem[${i}]}]}) /goto :NextSpell
      
        /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]} && ${Me.Pet.ID} && ${i}==5 && ${Target.ID}!=${Me.Pet.ID}) {
            /target pet ${Me.Pet}
            /delay 1s
        } else /if (!${Me.Pet.ID} && ${Target.ID}!=${Me.ID} && ${i}==5) {
            /target id ${Me.ID}
            /delay 1s
        }

        /if (${Me.Skill[${SkillName[${i}]}]} < ${Me.SkillCap[${SkillName[${i}]}]}) {
            /casting "${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}
            | /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} ${i}
            /delay 5s !${Me.Casting.ID}
        }
        | - Check cursor for summoned items and destroy them.
        /if (${Cursor.Name.Equal[${PracticeSpell[${Me.Class.ID},6]}]}) {
            /destroy
            /delay 5s !${Cursor.ID}
        }
        /if (${Me.Skill[Specialize ${PracticeSpell[${Me.Class.ID},7]}]}<=100 && ${SkillName[${i}].Equal[${PracticeSpell[${Me.Class.ID},7]}]} && ${Select[${Me.Class.ShortName},CLR,DRU,ENC,MAG,NEC,SHM,WIZ]} && !${SpecIgnore}) {
            /if (${SpecSpam}) {
                /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} until we BREAK 100 in Specialize ${SkillName[${i}]}
                /varset SpecSpam 0
                /timed 300 /varset SpecSpam 1
            }
            /goto :SpecializeCap
        }
        :NextSpell
    /next i
/return

Sub Event_SkillUp(S0,S1,S2)
    /echo >> Your ${S1} skill is now ${S2}. <<
/return

Sub Event_MedUp
    /echo Out of mana medding up.
    /if (!${Me.Mount.ID} && !${Me.Sitting}) /sit
    :med
        /delay 10
    /if (${Me.PctMana}<100 || ${Me.PctHPs}<100) /goto :med
    /if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
/return

Sub AreWeDone
    /declare i int local
    /declare j int local 0
    /for i 1 to 5
        /if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /varcalc j ${j}+1
        /if (${j}==5) {
            /echo All skills are currently maxed. Ending macro.
            /if (${sendgmail}) {
                /gmail "${Me.Name} has finished skilling up!"
            }
            /end
        }
    /next i
/return

Sub SpecializationCheck
    /declare i int local
    /for i 1 to 5
        /if (${Me.Skill[Specialize ${SkillName[${i}]}]}>100) {
            /echo Detected Specialize ${SkillName[${i}]} is over 100 TURNING OFF Break Specialiazion Cap
            /varset SpecIgnore 1
            /return
        }
    /next i
/return
 
Made minor change on Conjuration spell. Choker has a timer and is lore so it casts other spells while waiting on timer potentially causing you to gain spec in those first.

Conjuration spell changed to Summon Drink which is level 1 as well.

Code:
|    MAGICIAN = 13
    /varset PracticeSpell[13,1]     Minor Shielding
    /varset PracticeSpell[13,2]     Renew Elements
    /varset PracticeSpell[13,3]     Summon Drink
    /varset PracticeSpell[13,4]     True North
    /varset PracticeSpell[13,5]     Burst of Flame
    /varset PracticeSpell[13,6]     Summoned: Globe of Water
    /varset PracticeSpell[13,7]     Conjuration
    /varset PracticeSpell[13,8]     Elementalkin: Water
 
Here's what is happening when I am running this on my wizard.
Spells loaded: Minor shielding, root, halo of light, true north, blast of cold.
When there's a fizzle, it starts back at Minor shielding.... it doesn't try to recast and does not move on to the next spell so they all are getting practiced at the same time.

Is this how it's intended?
 
When I run /mac cskillup I am getting this... Am I doing something wrong? I am on an EMU.
1693833639943.png
NVM I fixed it forgot mq2cast.
 
Last edited:
Cskillup.mac v1.8 12/14/2018 Released
~Added alynel's pet additions

Cskillup.mac v1.7 09/28/2017 Released
~Converted to MQ2Cast
~Fixed for #warning

Spell Casting Skillup Trainer v1.6 09/27/2012
~ NEW! Specialization Check added. CSkillUp will now cast your classes main spell until you break the 50 point Specialization cap in that skill. Auto detect if a Specialization is already above 50

  • Alteration - Cleric, Druid, Shaman & Necromancer
  • Evocation - Wizard
  • Conjuration - Enchanter & Magician
~Shadow Knight Spells changed. Spike of Disease changed to Disease Cloud & Shadow Step changed to Siphon Strength.
~Fixed an error causing toon to dismount while medding.

Cskillup.mac v1.4 11/02/2012 Released
~ Wizzie spell fade change to root to prevent shadow steping all over the zone
~ Wizzie familiar get lost added because damage spells don't work on familiars.

Cskillup.mac v1.3 05/17/2012 Released ~ MAJOR UPDATE
~ Will now only delete the summoned items from practice spell. Fixes deleting any item on your cursor!!

cskillup v1.2 2/28/2011
~ Improved error control including zone check, pet, and summoned items.
~ Fixed bad loop on skill max check.
~ Changed chanter conjuration spell from pet to mesmerize to save material components.
~ Tweaked spell casting loop. It was skipping spells not refreshing fast enough

I wrote a new macro Based on Arneweise's CastingSkillup.mac because people were having issues with it.

Will mem basic low level spells for each class in gems 1-5 and cast them until your skills maxed.

Check spell lists for your class spells

Rich (BB code):
| Cskillup.mac by Maskoi v1.8 12/14/2018
| Based on Arneweise's CastingSkillup.mac
| Pet additions by alynel
|
| Description: This macro will automatically work on your five casting skills.
|
| Find a safe place in zone other than Pok, Guild Lobby, Guild Hall or Bazaar,
|
| Requires MQ2Cast
|
| Syntax: /mac cskillup
#warning
#turbo 80

#Event SkillUp "You have become better at #1#! (#2#)"
#Event MedUp "Insufficient Mana to cast this spell!#*#"

Sub Main

    | Send a gmail message on completion, NOTE: You must configure mq2gmail before enabling or it will not work.  Once configured, change from 0 to 1 to get an email when training complete.
    /declare sendgmail                int                outer    0
    /declare SkillName[5]           string          outer
    /declare PracticeSpell[16,8]    string          outer  
    /declare CurrentZone            int             outer   ${Zone.ID}
    /declare SpecSpam               int             outer   1
    /declare SpecIgnore             int             outer   0

    /varset SkillName[1]            Abjuration
    /varset SkillName[2]            Alteration
    /varset SkillName[3]            Conjuration
    /varset SkillName[4]            Divination
    /varset SkillName[5]            Evocation

|    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
    /varset PracticeSpell[2,6]      Summoned: Halo of Light
    /varset PracticeSpell[2,7]      Alteration

|    PALADIN = 3
    /varset PracticeSpell[3,1]      Courage
    /varset PracticeSpell[3,2]      Salve
    /varset PracticeSpell[3,3]      Hammer of Wrath
    /varset PracticeSpell[3,4]      True North
    /varset PracticeSpell[3,5]      Cease
    /varset PracticeSpell[3,6]      Summoned: Hammer of Wrath

|    RANGER = 4
    /varset PracticeSpell[4,1]      Endure Fire
    /varset PracticeSpell[4,2]      Salve
    /varset PracticeSpell[4,3]      Dance of the Fireflies
    /varset PracticeSpell[4,4]      Glimpse
    /varset PracticeSpell[4,5]      Burst of fire
    /varset PracticeSpell[4,6]      Summoned: Firefly Globe
 
|    SHADOW KNIGHT = 5
    /varset PracticeSpell[5,1]      Endure Cold
    /varset PracticeSpell[5,2]      Siphon Strength
    /varset PracticeSpell[5,3]      Disease Cloud
    /varset PracticeSpell[5,4]      Sense the Dead
    /varset PracticeSpell[5,5]      Ward Undead
    /varset PracticeSpell[5,8]      Leering Corpse
 
|    DRUID = 6
    /varset PracticeSpell[6,1]      Skin like Wood
    /varset PracticeSpell[6,2]      Minor Healing
    /varset PracticeSpell[6,3]      Summon Food
    /varset PracticeSpell[6,4]      Sense Animals
    /varset PracticeSpell[6,5]      Burst of Fire
    /varset PracticeSpell[6,6]      Summoned: Black Bread
    /varset PracticeSpell[6,7]      Alteration
 
|    SHAMAN = 10
    /varset PracticeSpell[10,1]     Endure Cold
    /varset PracticeSpell[10,2]     Minor Healing
    /varset PracticeSpell[10,3]     Summon Drink
    /varset PracticeSpell[10,4]     True North
    /varset PracticeSpell[10,5]     Burst of Flame
    /varset PracticeSpell[10,6]     Summoned: Globe of Water
    /varset PracticeSpell[10,7]     Alteration
 
|    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
    /varset PracticeSpell[11,6]     Summoned: Coldlight
    /varset PracticeSpell[11,7]     Alteration
    /varset PracticeSpell[11,8]     Cavorting Bones
 
|    WIZARD = 12
    /varset PracticeSpell[12,1]     Minor Shielding
    /varset PracticeSpell[12,2]     Root
    /varset PracticeSpell[12,3]     Halo of Light
    /varset PracticeSpell[12,4]     True North
    /varset PracticeSpell[12,5]     Blast of Cold
    /varset PracticeSpell[12,6]     Summoned: Halo of Light
    /varset PracticeSpell[12,7]     Evocation
 
|    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
    /varset PracticeSpell[13,6]     Jedah's Brass Choker
    /varset PracticeSpell[13,7]     Conjuration
    /varset PracticeSpell[13,8]     Elementalkin: Water
 
|    ENCHANTER = 14
    /varset PracticeSpell[14,1]     Minor Shielding
    /varset PracticeSpell[14,2]     Strengthen
    /varset PracticeSpell[14,3]     Mesmerize
    /varset PracticeSpell[14,4]     True North
    /varset PracticeSpell[14,5]     Chaotic Feedback
    /varset PracticeSpell[14,6]     Summoned: Globe of Water
    /varset PracticeSpell[14,7]     Conjuration
    /varset PracticeSpell[14,8]     Pendril's Animation
 
|    BEASTLORD = 15
    /varset PracticeSpell[15,1]     Endure Cold
    /varset PracticeSpell[15,2]     Salve
    /varset PracticeSpell[15,3]     Summon Drink
    /varset PracticeSpell[15,4]     Sense Animals
    /varset PracticeSpell[15,5]     Blast of Frost
    /varset PracticeSpell[15,6]     Summoned: Globe of Water
    /varset PracticeSpell[15,8]     Spirit of Sharik
 
 
| - Check Class
     /if (${Select[${Me.Class.Name},Warrior,Berserker,Monk,Rogue,Bard]}>=1) {
        /echo You need to go buy a clue and a spell book.
        /end
    }
 
    /call Init
    /call MemSpells
    /call SpecializationCheck
 
    :MainLoop
        /call DoCast
         /if (${Me.PctMana}<=1 || ${Me.PctHPs}<50) /call Event_MedUp
        /call AreWeDone
        /doevents
    /goto :MainLoop
 
/return

Sub Init
    /echo Skill Level/Skill Cap
    /declare i int local
    /for i 1 to 5
        /echo ${SkillName[${i}]}: ${Me.Skill[${SkillName[${i}]}]}/${Me.SkillCap[${SkillName[${i}]}]} - Casting: * ${PracticeSpell[${Me.Class.ID},${i}]} *
    /next i
    /if (${sendgmail}) {
        /if (!${Plugin[MQ2Gmail].Name.Length}) {
            /plugin mq2gmail noauto
        }
        /echo "Gmail notification is configured, it will send you an email when complete"
    } else /echo "Gmail notification is not configured"
/return

| - Sub MemSpells
Sub MemSpells
    /declare i int local
    /for i 1 to 5
        /if (!${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}) {
            /echo Memorizing Spell >> ${PracticeSpell[${Me.Class.ID},${i}]} <<
            /memspell ${i} "${PracticeSpell[${Me.Class.ID},${i}]}"
            /delay 30s ${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}
        }
    /next i
/return

Sub DoCast
    /declare i int local
    | - Zone check to turn end macro if zoning
    /if (${Zone.ID}!=${CurrentZone}) {
        /echo You have zoned ending macro.
        /end
    }
    | IF wizzie ditch familiar can't cast on them
    /if (${Me.Pet.CleanName.Equal[${Me.Name}`s familiar]} && ${Me.Class.ShortName.Equal[Wiz]}) /pet get lost
    | - Check for pet class and target pets for spell casting.
    /if (${Me.Pet.ID}) {
        /target ${Me.Pet}
        /delay 10
    } else /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]}>=1 && !${Me.Pet.ID}) {
        /casting "${PracticeSpell[${Me.Class.ID},8]}" gem6
        /delay 15s !${Me.Casting.ID}
        /if (!${Me.Pet.ID}) {
            /echo Failed to summon a pet, ending macro
        /end
        }
        /target ${Me.Pet}
        /delay 10
    } else /if (!${Me.Pet.ID}) {
        /target id ${Me.ID}
    }

    /delay 10
    /for i 1 to 5
        :SpecializeCap
        /doevents
        /if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /goto :NextSpell
     
        /if (${Spell[${Me.Gem[${i}]}].Name.Equal[Dance of the Fireflies]} && !${GameTime.Night}) /goto :NextSpell
        /delay 3s !${Me.SpellInCooldown}
        /if (!${Me.SpellReady[${Me.Gem[${i}]}]}) /goto :NextSpell
     
        /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]} && ${Me.Pet.ID} && ${i}==5 && ${Target.ID}!=${Me.Pet.ID}) {
            /target pet ${Me.Pet}
            /delay 1s
        } else /if (!${Me.Pet.ID} && ${Target.ID}!=${Me.ID} && ${i}==5) {
            /target id ${Me.ID}
            /delay 1s
        }

        /if (${Me.Skill[${SkillName[${i}]}]} < ${Me.SkillCap[${SkillName[${i}]}]}) {
            /casting "${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}
            | /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} ${i}
            /delay 5s !${Me.Casting.ID}
        }
        | - Check cursor for summoned items and destroy them.
        /if (${Cursor.Name.Equal[${PracticeSpell[${Me.Class.ID},6]}]}) {
            /destroy
            /delay 5s !${Cursor.ID}
        }
        /if (${Me.Skill[Specialize ${PracticeSpell[${Me.Class.ID},7]}]}<=100 && ${SkillName[${i}].Equal[${PracticeSpell[${Me.Class.ID},7]}]} && ${Select[${Me.Class.ShortName},CLR,DRU,ENC,MAG,NEC,SHM,WIZ]} && !${SpecIgnore}) {
            /if (${SpecSpam}) {
                /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} until we BREAK 100 in Specialize ${SkillName[${i}]}
                /varset SpecSpam 0
                /timed 300 /varset SpecSpam 1
            }
            /goto :SpecializeCap
        }
        :NextSpell
    /next i
/return

Sub Event_SkillUp(S0,S1,S2)
    /echo >> Your ${S1} skill is now ${S2}. <<
/return

Sub Event_MedUp
    /echo Out of mana medding up.
    /if (!${Me.Mount.ID} && !${Me.Sitting}) /sit
    :med
        /delay 10
    /if (${Me.PctMana}<100 || ${Me.PctHPs}<100) /goto :med
    /if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
/return

Sub AreWeDone
    /declare i int local
    /declare j int local 0
    /for i 1 to 5
        /if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /varcalc j ${j}+1
        /if (${j}==5) {
            /echo All skills are currently maxed. Ending macro.
            /if (${sendgmail}) {
                /gmail "${Me.Name} has finished skilling up!"
            }
            /end
        }
    /next i
/return

Sub SpecializationCheck
    /declare i int local
    /for i 1 to 5
        /if (${Me.Skill[Specialize ${SkillName[${i}]}]}>100) {
            /echo Detected Specialize ${SkillName[${i}]} is over 100 TURNING OFF Break Specialiazion Cap
            /varset SpecIgnore 1
            /return
        }
    /next i
/return
loved this. thank u very much. it wouldnt work for me at first because it didnt like the word casting so i changed them to /cast and now it worked perfectly for my lvl 20 wizzy. i practiced in the mushroom cave in crescent .

When I run /mac cskillup I am getting this... Am I doing something wrong? I am on an EMU.
View attachment 50611
NVM I fixed it forgot mq2cast.
change the word casting in the code to cast so it looks like this /cast "${PracticeSpell[${Me.Class.ID},8]}" gem6
it is easier if u do a ctrl + f and search for the word casting and change to cast not the casting that looks like this /delay 15s !${Me.Casting.ID} but like the one above. i did this and it works fine now.

i tweeked this code a little to add specialized abjure and the rest of them. when i used this on my level 20 wiz it would stop working once my main skills were maxed out. i went into a cave and sat on my mount and let it run on myself as the target. please let me know if there is a better way i could have done this code. i just started to learn this by looking at the code and i understand very little. it took me hours to get it to work.
[CODE title="skillup"]| Cskillup.mac by Maskoi v1.8 12/14/2018
| Based on Arneweise's CastingSkillup.mac
| Pet additions by alynel
|
| Description: This macro will automatically work on your five casting skills.
|
| Find a safe place in zone other than Pok, Guild Lobby, Guild Hall or Bazaar,
|
| Requires MQ2Cast
|
| Syntax: /mac cskillup
#warning
#turbo 80

#Event SkillUp "You have become better at #1#! (#2#)"
#Event MedUp "Insufficient Mana to cast this spell!#*#"

Sub Main

| Send a gmail message on completion, NOTE: You must configure mq2gmail before enabling or it will not work. Once configured, change from 0 to 1 to get an email when training complete.
/declare sendgmail int outer 0
/declare SkillName[10] string outer
/declare PracticeSpell[16,12] string outer
/declare CurrentZone int outer ${Zone.ID}
/declare SpecSpam int outer 1
/declare SpecIgnore int outer 0

/varset SkillName[1] Abjuration
/varset SkillName[2] Alteration
/varset SkillName[3] Conjuration
/varset SkillName[4] Divination
/varset SkillName[5] Evocation
/varset SkillName[6] Specialize Abjure
/varset SkillName[7] Specialize Alteration
/varset SkillName[8] Specialize Conjuration
/varset SkillName[9] Specialize Divination
/varset SkillName[10] Specialize Evocation

| 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
/varset PracticeSpell[2,6] Summoned: Halo of Light
/varset PracticeSpell[2,7] Alteration

| PALADIN = 3
/varset PracticeSpell[3,1] Courage
/varset PracticeSpell[3,2] Salve
/varset PracticeSpell[3,3] Hammer of Wrath
/varset PracticeSpell[3,4] True North
/varset PracticeSpell[3,5] Cease
/varset PracticeSpell[3,6] Summoned: Hammer of Wrath

| RANGER = 4
/varset PracticeSpell[4,1] Endure Fire
/varset PracticeSpell[4,2] Salve
/varset PracticeSpell[4,3] Dance of the Fireflies
/varset PracticeSpell[4,4] Glimpse
/varset PracticeSpell[4,5] Burst of fire
/varset PracticeSpell[4,6] Summoned: Firefly Globe

| SHADOW KNIGHT = 5
/varset PracticeSpell[5,1] Endure Cold
/varset PracticeSpell[5,2] Siphon Strength
/varset PracticeSpell[5,3] Disease Cloud
/varset PracticeSpell[5,4] Sense the Dead
/varset PracticeSpell[5,5] Ward Undead
/varset PracticeSpell[5,8] Leering Corpse

| DRUID = 6
/varset PracticeSpell[6,1] Skin like Wood
/varset PracticeSpell[6,2] Minor Healing
/varset PracticeSpell[6,3] Summon Food
/varset PracticeSpell[6,4] Sense Animals
/varset PracticeSpell[6,5] Burst of Fire
/varset PracticeSpell[6,6] Summoned: Black Bread
/varset PracticeSpell[6,7] Alteration

| SHAMAN = 10
/varset PracticeSpell[10,1] Endure Cold
/varset PracticeSpell[10,2] Minor Healing
/varset PracticeSpell[10,3] Summon Drink
/varset PracticeSpell[10,4] True North
/varset PracticeSpell[10,5] Burst of Flame
/varset PracticeSpell[10,6] Summoned: Globe of Water
/varset PracticeSpell[10,7] Alteration

| 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
/varset PracticeSpell[11,6] Summoned: Coldlight
/varset PracticeSpell[11,7] Alteration
/varset PracticeSpell[11,8] Cavorting Bones

| WIZARD = 12
/varset PracticeSpell[12,1] Minor Shielding
/varset PracticeSpell[12,2] Root
/varset PracticeSpell[12,3] Halo of Light
/varset PracticeSpell[12,4] True North
/varset PracticeSpell[12,5] Blast of Cold
/varset PracticeSpell[12,6] Minor Shielding
/varset PracticeSpell[12,7] Root
/varset PracticeSpell[12,8] Halo of Light
/varset PracticeSpell[12,9] True North
/varset PracticeSpell[12,10] Blast of Cold
/varset PracticeSpell[12,11] Summoned: Halo of Light
/varset PracticeSpell[12,12] Evocation

| 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
/varset PracticeSpell[13,6] Jedah's Brass Choker
/varset PracticeSpell[13,7] Conjuration
/varset PracticeSpell[13,8] Elementalkin: Water

| ENCHANTER = 14
/varset PracticeSpell[14,1] Minor Shielding
/varset PracticeSpell[14,2] Strengthen
/varset PracticeSpell[14,3] Mesmerize
/varset PracticeSpell[14,4] True North
/varset PracticeSpell[14,5] Chaotic Feedback
/varset PracticeSpell[14,6] Summoned: Globe of Water
/varset PracticeSpell[14,7] Conjuration
/varset PracticeSpell[14,8] Pendril's Animation

| BEASTLORD = 15
/varset PracticeSpell[15,1] Endure Cold
/varset PracticeSpell[15,2] Salve
/varset PracticeSpell[15,3] Summon Drink
/varset PracticeSpell[15,4] Sense Animals
/varset PracticeSpell[15,5] Blast of Frost
/varset PracticeSpell[15,6] Summoned: Globe of Water
/varset PracticeSpell[15,8] Spirit of Sharik


| - Check Class
/if (${Select[${Me.Class.Name},Warrior,Berserker,Monk,Rogue,Bard]}>=1) {
/echo You need to go buy a clue and a spell book.
/end
}

/call Init
/call MemSpells
/call SpecializationCheck

:MainLoop
/call DoCast
/if (${Me.PctMana}<=1 || ${Me.PctHPs}<50) /call Event_MedUp
/call AreWeDone
/doevents
/goto :MainLoop

/return

Sub Init
/echo Skill Level/Skill Cap
/declare i int local
/for i 1 to 10
/echo ${SkillName[${i}]}: ${Me.Skill[${SkillName[${i}]}]}/${Me.SkillCap[${SkillName[${i}]}]} - Casting: * ${PracticeSpell[${Me.Class.ID},${i}]} *
/next i
/if (${sendgmail}) {
/if (!${Plugin[MQ2Gmail].Name.Length}) {
/plugin mq2gmail noauto
}
/echo "Gmail notification is configured, it will send you an email when complete"
} else /echo "Gmail notification is not configured"
/return

| - Sub MemSpells
Sub MemSpells
/declare i int local
/for i 1 to -5
/if (!${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}) {
/echo Memorizing Spell >> ${PracticeSpell[${Me.Class.ID},${i}]} <<
/memspell ${i} "${PracticeSpell[${Me.Class.ID},${i}]}"
/delay 30s ${Me.Gem[${PracticeSpell[${Me.Class.ID},${i}]}]}
}
/next i
/return

Sub DoCast
/declare i int local
| - Zone check to turn end macro if zoning
/if (${Zone.ID}!=${CurrentZone}) {
/echo You have zoned ending macro.
/end
}
| IF wizzie ditch familiar can't cast on them
/if (${Me.Pet.CleanName.Equal[${Me.Name}`s familiar]} && ${Me.Class.ShortName.Equal[Wiz]}) /pet get lost
| - Check for pet class and target pets for spell casting.
/if (${Me.Pet.ID}) {
/target ${Me.Pet}
/delay 10
} else /if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]}>=1 && !${Me.Pet.ID}) {
/cast "${PracticeSpell[${Me.Class.ID},12]}" gem6
/delay 15s !${Me.Casting.ID}
/if (!${Me.Pet.ID}) {
/echo Failed to summon a pet, ending macro
/end
}
/target ${Me.Pet}
/delay 10
} else /if (!${Me.Pet.ID}) {
/target id ${Me.ID}
}

/delay 10
/for i 1 to 10
:SpecializeCap
/doevents
/if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /goto :NextSpell

/if (${Spell[${Me.Gem[${i}]}].Name.Equal[Dance of the Fireflies]} && !${GameTime.Night}) /goto :NextSpell
/delay 3s !${Me.SpellInCooldown}
/if (!${Me.SpellReady[${Me.Gem[${i}]}]}) /goto :NextSpell

/if (${Select[${Me.Class.ShortName},BST,ENC,MAG,NEC,SHD]} && ${Me.Pet.ID} && ${i}==5 && ${Target.ID}!=${Me.Pet.ID}) {
/target pet ${Me.Pet}
/delay 1s
} else /if (!${Me.Pet.ID} && ${Target.ID}!=${Me.ID} && ${i}==5) {
/target id ${Me.ID}
/delay 1s
}

/if (${Me.Skill[${SkillName[${i}]}]} < ${Me.SkillCap[${SkillName[${i}]}]}) {
/cast "${PracticeSpell[${Me.Class.ID},${i}]}" gem${i}
| /echo Casting ${PracticeSpell[${Me.Class.ID},${i}]} ${i}
/delay 5s !${Me.Casting.ID}
}
| - Check cursor for summoned items and destroy them.
/if (${Cursor.Name.Equal[${PracticeSpell[${Me.Class.ID},6]}]}) {
/destroy
/delay 5s !${Cursor.ID}
}
/if (${Me.Skill[Specialize ${PracticeSpell[${Me.Class.ID},7]}]}<=100 && ${SkillName[${i}].Equal[${PracticeSpell[${Me.Class.ID},7]}]} && ${Select[${Me.Class.ShortName},CLR,DRU,ENC,MAG,NEC,SHM,WIZ]} && !${SpecIgnore}) {
/if (${SpecSpam}) {
/echo Cast ${PracticeSpell[${Me.Class.ID},${i}]} until we BREAK 100 in Specialize ${SkillName[${i}]}
/varset SpecSpam 0
/timed 300 /varset SpecSpam 1
}
/goto :SpecializeCap
}
:NextSpell
/next i
/return

Sub Event_SkillUp(S0,S1,S2)
/echo >> Your ${S1} skill is now ${S2}. <<
/return

Sub Event_MedUp
/echo Out of mana medding up.
/if (!${Me.Mount.ID} && !${Me.Sitting}) /sit
:med
/delay 10
/if (${Me.PctMana}<100 || ${Me.PctHPs}<100) /goto :med
/if (!${Me.Mount.ID} && ${Me.Sitting}) /stand
/return

Sub AreWeDone
/declare i int local
/declare j int local 0
/for i 1 to 10
/if (${Me.Skill[${SkillName[${i}]}]} == ${Me.SkillCap[${SkillName[${i}]}]}) /varcalc j ${j}+1
/if (${j}==10) {
/echo All skills are currently maxed. Ending macro.
/if (${sendgmail}) {
/gmail "${Me.Name} has finished skilling up!"
}
/end
}
/next i
/return

Sub SpecializationCheck
/declare i int local
/for i 1 to 10+
/if (${Me.Skill[Specialize ${SkillName[${i}]}]}>100) {
/echo Detected Specialize ${SkillName[${i}]} is over 100 TURNING OFF Break Specialiazion Cap
/varset SpecIgnore 1
/return
}
/next i
/return[/CODE]
 
Macro - cskillup

Users who are viewing this thread

Back
Top
Cart