• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

Spell skill-up macro? (1 Viewer)

sickfreak

New member
Joined
Dec 7, 2005
RedCents
i know theres macros for melee skill ups and what not, but was wondering if theres macros for spell skill ups? pretty much only need it to chain cast a spell while im afk. i havent attempted to write it yet, i did a search for it and came up with nothing so wondering if there is one in existance or if i need to take it into my own hands

tks :D
 
sickfreak said:
i know theres macros for melee skill ups and what not, but was wondering if theres macros for spell skill ups? pretty much only need it to chain cast a spell while im afk. i havent attempted to write it yet, i did a search for it and came up with nothing so wondering if there is one in existance or if i need to take it into my own hands

tks :D

Go over to the MQ site and do a search for YAST.. you should find several versions.

YAST = Yet Another Spell Trainer
 
This is what I have always used. Has always worked for me. I did not write it though. Just memorize whatever spells you want to use to train on (use lvl 1 spells or close to it for less mana use). Just mem one for each spell type starting in slot 1.

Rich (BB code):
#define MaxArcaneSkill 235 
#chat tell 
#event lang "tells you" 

#include SpellCast.inc 

Sub Main 

    /declare currentSpell 
    /declare maxSkill 
    /declare skillName 
    /declare spellName 
    
    /varset currentSpell 1 
    /varset maxSkill ${Math.Calc[${Me.Level}*5+5]} 
    /echo maxSkill=${maxSkill} 
    /if ( ${maxSkill} > 235 ) /varset maxSkill 235 

    /target myself 
    
    :nextSpell 
        /echo currentspell=${currentSpell} 
        /echo casting=${Me.Gem[${currentSpell}]} 
        
        /if ( ${Bool[${Me.Gem[${currentSpell}]}]} ) { 
            /varset skillName ${Me.Gem[${currentSpell}].Skill} 
            :castSpell 
                /doevents 
                /if ( ${Me.PctMana}<20) { 
                    /sit on 
                    /call MedBreak 
                } 
                /echo ${skillName}=${Me.Skill[${skillName}]} 
                /if ( ${Me.Skill[${skillName}]} >= ${maxSkill} ) { 
                    /varset currentSpell ${Math.Calc[${currentSpell}+1]} 
                    /goto :nextSpell 
                } 
                /call CheckGM 
                /call cast "${Me.Gem[${currentSpell}]}" 
                
                :checkCursor 
                /if (${Cursor.ID}) { 
                    /autoinv 
                    /goto :checkCursor 
                } 
            /goto :castSpell 
        } 
    
    /sit 
    /call MedBreak 
    /camp 
/return 

Sub CheckGM 
    :GMCheck 
    /if (${Bool[${Spawn[gm].ID}]}) { 
       /echo 'Cast Macro' A GM or Guide has been detected in the zone,  the macro will resume  when the zone is clear of GM/Guides 
       /delay 600s 
       /goto :GMCheck 
    } 
/return 

Sub Event_Chat 
  /echo Got a tell, pausing for 10 minutes 
  /delay 600s 
/return 

Sub Event_Lang 
  /echo Got a tell, pausing for 10 minutes 
  /delay 600s 
/return 

Sub MedBreak 
    /stand 
    /sit 
    :MedMore 
        /delay 2s 
        /if (${Me.CurrentMana}<${Me.MaxMana}) /goto :MedMore 
/return
 
shadowman33 said:
This is what I have always used. Has always worked for me. I did not write it though. Just memorize whatever spells you want to use to train on (use lvl 1 spells or close to it for less mana use). Just mem one for each spell type starting in slot 1.

Course.. if you use this one, you might want to watch it when casting evoc spells.. ;) Or atleast do it in the guild hall or PoK.. hehe
 
Last edited:
Mochila said:
Spells that are detri no longer even start to cast in Hall/PoK/Nexus....So imposs to skill them there

i planned on grouping with my bard when working on skill ups for mana song, so i figure ill just go to freeport or whatever and duel my bard for evoc spells. and thanks for hastely response ill give it a shot tomorrow :)
 
They did it for a lot of reasons...namely the one you said you did...other skills could go up on guards too....they didnt like that

Edit: Tone posted this. *IF IT DOES NOT WORK FOR YOUR CLASS OR SKIPS A SPELL SET (Suchas moving from Alter to Div without working Abjure) Check for a capital letter where it shouldn't be in the Maxskill variable in that set. It automatically gets the lowest level spells to work that skill memorized, meds when you're low.

Just edit the /varset Maxskill ### to one below your max. Suchas if your max is 235 set it at 234

Rich (BB code):
Sub Main 
  
  /declare Maxskill int outer 
  /declare AlterationSpell outer 
  /declare AbjurationSpell outer 
  /declare EvocationSpell outer 
  /declare DivinationSpell outer 
  /declare ConjurationSpell outer 
  /declare SingSong outer 
  /declare DrumSong outer 
  /declare StringSong outer 
  /declare WindSong outer 
  /declare BrassSong outer 

  /varset Maxskill 234
  
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /goto :Skspells 
  /if (${Me.Class.Name.Equal[Bard]}) /goto :Brdspells 
  /if (${Me.Class.Name.Equal[Beastlord]}) /goto :Bstspells 
  /if (${Me.Class.Name.Equal[Cleric]}) /goto :Clrspells 
  /if (${Me.Class.Name.Equal[Druid]}) /goto :Druspells 
  /if (${Me.Class.Name.Equal[Enchanter]}) /goto :Encspells 
  /if (${Me.Class.Name.Equal[Magician]}) /goto :Magspells 
  /if (${Me.Class.Name.Equal[Necromancer]}) /goto :Necspells 
  /if (${Me.Class.Name.Equal[Paladin]}) /goto :Palspells 
  /if (${Me.Class.Name.Equal[Ranger]}) /goto :Rngspells 
  /if (${Me.Class.Name.Equal[Shaman]}) /goto :Shmspells 
  /if (${Me.Class.Name.Equal[Wizard]}) /goto :Wizspells 

:Brdspells 
  /varset SingSong Jonthan's Whistling Warsong 
  /varset DrumSong Anthem de Arms 
  /varset StringSong Hymn of Restoration 
  /varset WindSong Tarew`s Aquatic Ayre 
  /varset BrassSong Denon`s Disruptive Discord 
 /if (${Me.Level}<18) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 18. 
    /endmacro 
  } 
/goto :Songreqs 

:Bstspells 
  /varset AlterationSpell Minor Healing 
  /varset AbjurationSpell Inner Fire 
  /varset EvocationSpell Blast of Frost 
  /varset DivinationSpell Flash of Light 
  /varset ConjurationSpell Sicken 
 /if (${Me.Level}<15) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 15. 
    /endmacro 
  } 
/goto :Prereqs 

:Clrspells 
  /varset AlterationSpell Minor Healing 
  /varset AbjurationSpell Courage 
  /varset EvocationSpell Strike 
  /varset DivinationSpell Flash of Light 
  /varset ConjurationSpell Summon Drink 
 /if (${Me.Level}<5) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 5. 
    /endmacro 
  } 
/goto :Prereqs 

:Druspells 
  /varset AlterationSpell Minor Healing 
  /varset AbjurationSpell Skin like Wood 
  /varset EvocationSpell Burst of Flame 
  /varset DivinationSpell See Invisible
  /varset ConjurationSpell Stinging Swarm 
 /if (${Me.Level}<5) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 5. 
    /endmacro 
  } 
/goto :Prereqs 

:Encspells 
  /varset AlterationSpell Strengthen 
  /varset AbjurationSpell Minor Shielding 
  /varset EvocationSpell Chaotic Feedback 
  /varset DivinationSpell True North 
  /varset ConjurationSpell Mesmerize 
 /if (${Me.Level}<8) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 8. 
    /endmacro 
  } 
/goto :Prereqs 

:Magspells 
  /varset AlterationSpell Renew Elements 
  /varset AbjurationSpell Minor Shielding 
  /varset EvocationSpell Burst of Flame 
  /varset DivinationSpell True North 
  /varset ConjurationSpell Summon Drink 
 /if (${Me.Level}<8) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 8. 
    /endmacro 
  } 
/goto :Prereqs 

:Necspells 
  /varset AlterationSpell Lifetap 
  /varset AbjurationSpell Minor Shielding 
  /varset EvocationSpell Ward Undead 
  /varset DivinationSpell True North 
  /varset ConjurationSpell Disease Cloud 
 /if (${Me.Level}<4) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 4. 
    /endmacro 
  } 
/goto :Prereqs 

:Palspells 
  /varset AlterationSpell Minor Healing 
  /varset AbjurationSpell Courage 
  /varset EvocationSpell Cease 
  /varset DivinationSpell Flash of Light 
  /varset ConjurationSpell Hammer of Wrath 
 /if (${Me.Level}<15) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 15. 
    /endmacro 
  } 
/goto :Prereqs 

:Rngspells 
  /varset AlterationSpell Minor Healing 
  /varset AbjurationSpell Skin like Wood 
  /varset EvocationSpell Flame lick 
  /varset DivinationSpell Camouflage 
  /varset ConjurationSpell Dance of the fireflies 
 /if (${Me.Level}<15) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 15. 
    /endmacro 
  } 
/goto :Prereqs 

:Skspells 
  /varset AlterationSpell Lifetap 
  /varset AbjurationSpell Numb the dead 
  /varset EvocationSpell Ward Undead 
  /varset DivinationSpell Sense the Dead 
  /varset ConjurationSpell Disease Cloud 
 /if (${Me.Level}<22) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 22. 
    /endmacro 
  } 
/goto :Prereqs 

:Shmspells 
  /varset AlterationSpell Minor Healing 
  /varset AbjurationSpell Inner Fire 
  /varset EvocationSpell Burst of Flame 
  /varset DivinationSpell Flash of Light 
  /varset ConjurationSpell Tainted Breath 
 /if (${Me.Level}<9) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 9. 
    /endmacro 
  } 
/goto :Prereqs 

:Wizspells 12 
  /varset AlterationSpell Fade 
  /varset AbjurationSpell Minor Shielding 
  /varset EvocationSpell Shock of Frost 
  /varset DivinationSpell True North 
  /varset ConjurationSpell Halo of Light 
  /if (${Me.Level}<12) { 
    /echo This macro won't function correctly until your ${Me.Class} is level 12. 
    /endmacro 
  } 
/goto :Prereqs 
:Songreqs 
 /if (${Bool[${Me.Book[${SingSong}]}]}==FALSE) { 
    /echo You don't have ${SingSong}.  
    /echo Please check the songs listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${DrumSong}]}]}==FALSE) { 
    /echo You don't have ${DrumSong}.  
    /echo Please check the songs listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${StringSong}]}]}==FALSE) { 
    /echo You don't have ${StringSong}.  
    /echo Please check the songs listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${WindSong}]}]}==FALSE) { 
    /echo You don't have ${WindSong}.  
    /echo Please check the songs listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${BrassSong}]}]}==FALSE) { 
    /echo You don't have ${BrassSong}.  
    /echo Please check the songs listed in the macro for what you need. 
    /endmacro 
  } 
/goto :Bardsongprep 
:Prereqs 


  

  /if (${Bool[${Me.Book[${AlterationSpell}]}]}==FALSE) { 
    /echo You don't have ${AlterationSpell}.  
    /echo Please check the spells listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${AbjurationSpell}]}]}==FALSE) { 
    /echo You don't have ${AbjurationSpell}.  
    /echo Please check the spells listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${EvocationSpell}]}]}==FALSE) { 
    /echo You don't have ${EvocationSpell}.  
    /echo Please check the spells listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${DivinationSpell}]}]}==FALSE) { 
    /echo You don't have ${DivinationSpell}.  
    /echo Please check the spells listed in the macro for what you need. 
    /endmacro 
  } 

  /if (${Bool[${Me.Book[${ConjurationSpell}]}]}==FALSE) { 
    /echo You don't have ${ConjurationSpell}.  
    /echo Please check the spells listed in the macro for what you need. 
    /endmacro 
  } 
      
  /if (${Me.Class.Name.Equal[Magician]}) /goto :Getpet 
  /if (${Me.Class.Name.Equal[Shadowknight]}) /goto :Getpet 
  /if (${Me.Class.Name.Equal[Necromancer]}) /goto :Getpet 
  
/goto :Castingprep 

:Getpet 
  /notify CastSpellWnd CSPW_Spell5 rightmouseup  
  /if (${Me.Class.Name.Equal[Magician]}) { 
    /call Cast "Elementalkin: Water" gem6 
  } Else { 
    /call Cast "Leering Corpse" gem6 
  } 
  /goto :Castingprep 
:Bardsongprep 
  /mem 1 "${SingSong}" 
  /delay 5s 
  /mem 2 "${DrumSong}" 
  /delay 5s 
  /mem 3 "${StringSong}" 
  /delay 5s 
  /mem 4 "${WindSong}" 
  /delay 5s 
  /mem 5 "${BrassSong}" 
  /delay 5s 
  /goto :Singing 

:Singing 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Skill[Sing]}>=${MaxSkill}) /goto :Percussion 
  /if (${Me.SpellReady[${SingSong}]})   /Cast "${SingSong}" 
  /goto :Singing 

:Percussion 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Skill[Percussion Instruments]}>=${MaxSkill}) /goto :Stringed 
  /if (${Me.SpellReady[${DrumSong}]})   /Cast "${DrumSong}" 
  /goto :Percussion 

:Stringed 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Skill[Stringed Instruments]}>=${MaxSkill}) /goto :Wind 
  /if (${Me.SpellReady[${StringSong}]})   /Cast "${StringSong}" 
  /goto :Stringed 

:Wind 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Skill[Wind Instruments]}>=${MaxSkill}) /goto :Wind 
  /if (${Me.SpellReady[${WindSong}]})   /Cast "${WindSong}" 
  /goto :Wind 

:Brass 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Skill[Brass Instruments]}>=${MaxSkill}) { 
    /echo Skills are all at max! 
    /endmacro 
  } 
  /if (${Me.SpellReady[${BrassSong}]})   /Cast "${BrassSong}" 
  /goto :Brass 

:Castingprep 
  
  /memspell 1 "${AlterationSpell}" 
  /delay 5s 
  /memspell 2 "${AbjurationSpell}" 
  /delay 5s 
  /memspell 3 "${EvocationSpell}" 
  /delay 5s 
  /memspell 4 "${DivinationSpell}" 
  /delay 5s 
  /memspell 5 "${ConjurationSpell}" 
  /delay 5s 
  /goto :Alteration 


:Manacheck 
  /if (${Me.CurrentMana}>=100) { 
    /goto :Alteration 
  } Else { 
    /goto :Medup 
  }  

:Medup 
  /if (${Me.Sitting}) { 
  } Else { 
    /sit 
  } 
  /if (${Me.CurrentMana}==${Me.MaxMana}) /goto :Manacheck 
  /goto :Medup 



:Alteration 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}  
  /if (${Me.Skill[Alteration]}>=${MaxSkill}) /goto :Abjuration 
  /if (${Me.SpellReady[${AlterationSpell}]})   /Cast "${AlterationSpell}" 
  /goto :Manacheck 

:Abjuration 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet} 
  /if (${Me.Skill[Abjuration]}>=${Maxskill}) /goto :Evocation 
  /if (${Me.SpellReady[${AbjurationSpell}]})   /Cast "${AbjurationSpell}" 
  /goto :Manacheck 

:Evocation 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet} 
  /if (${Me.Skill[Evocation]}>=${Maxskill}) /goto :Divination 
  /if (${Me.SpellReady[${EvocationSpell}]})   /Cast "${EvocationSpell}" 
  /goto :Manacheck 
    
:Divination 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet} 
  /if (${Me.Skill[Divination]}>=${Maxskill}) /goto :Conjuration 
  /if (${Me.SpellReady[${DivinationSpell}]})   /Cast "${DivinationSpell}" 
  /goto :Manacheck 

:Conjuration 
  /if (${Me.Sitting}) /sit off 
  /targ ${Me} 
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet} 
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet} 
  /if (${Me.Skill[Conjuration]}>=${Maxskill}) { 
    /echo All spellcasting skills are at max! 
    /endmacro 
  } 
  /if (${Me.Class.Name.Equal[Ranger]}) { 
    /if (${Time.Night}) { 
    } Else { 
      /echo It's daytime and you can't summon globes now. 
      /echo Try again when it's nighttime, 
      /echo or get level 30 and use stinging swarm as your conjuration spell. 
      /endmacro 
    } 
  } 
  /if (${Me.SpellReady[${ConjurationSpell}]}) { 
    /Cast "${ConjurationSpell}" 
    /delay 1s 
  } 
  /if (${Cursor.Name.Find[Halo of Light]}) /destroy 
  /if (${Cursor.Name.Find[Globe of Water]}) /destroy 
  /if (${Cursor.Name.Find[Firefly Globe]}) /destroy 
  /if (${Cursor.Name.Find[Hammer of Wrath]}) /destroy 
  
  /goto :Manacheck 
  
/Endmacro
 
True, the evoc spells no longer work on yourself or others in the GH anymore. That is the one spell set I did not use this macro for in the GH. When I had to work that set up, I would just go to a vacant or obscure zone, work the macro for a bit, then switch macro's to the bandage skill macro and kill 2 birds with one stone. You could incorporate a potion use into the macro to keep yourself healed, or like me, I use my Druid on another account running a macro to keep regen and nature's recovery on me if need be.
 
Crypto said:
Go over to the MQ site and do a search for YAST.. you should find several versions.

YAST = Yet Another Spell Trainer

Ok total noob question... where can I find a walk through of how to take the YAST code and get it working with MQ? I'm running a build I got off redguides but I have no idea how to plug new macros into it. Any help would be greatly appreciated.

Loki
 
shadowman33 said:
This might help ya get started.

http://www.redguides.com/community/showthread.php?t=7258
Quick Reference quide to Starting MQ

Ok I copied the code you posted above and saved it as yast.mac. Then I go into the game and type /mac yast in the MQ window and I get this message:

Couldn't open include file:
C:\MQ2\SpellCast.inc
The current macro has ended.
Unable to add macro line

Does that tell you what I did wrong? Thanks!
 
search is your friend :)

Copy and paste this, then save it as SpellCast.inc

Rich (BB code):
|
| SpellCast.inc
|
| Last Modified: 5/14/2004 9:30pm
| This will cast a spell reliably for you...
|
| Usage:
|       /call Cast "spellname|itemname|AA#|AAskillname" [item|activate|gem#] [nocheck|dismount|nodismount]
|
| If no dismount or nodismount is provided it defaults to nodismount.
|
| This would essentially: /cast "Death Peace"
| example: /call Cast "Death Peace"
|
| This would essentially: Check for the spell in your spell slots, if not there mem it to spell
|                         gem slot 7 and then /cast "Death Peace"
| example: /call Cast "Death Peace" gem7
|
| This would essentially: /cast item "White Rope Bridle"
| example: /call Cast "White Rope Bridle" item
|
| This would essentially: /alt activate 169
| example: /call Cast "169" activate
|  or...
| example: /call Cast "Divine Arbitration" activate
|
| This would dismount if your target was lost or dies mid-cast, cast Burn and mem it to spell
| slot 3 if it wasn't already memmed:
| example: /call Cast "Burn" gem3 dismount
|
| This would not dismount but would move you back and forth if your target was lost or dies mid-cast, cast Burn and mem
| it to spell slot 3 if it wasn't already memmed:
| example: /call Cast "Burn" gem3 nodismount
|
| 'nocheck' is the default for the "loss of target/target dying" value.  If nocheck is specified (Or nothing was specified)
| no target checking will be performed and spellcast.inc should act like the spellcast.inc of the past.
|
| It will return the following values:
| CAST_SUCCESS
| CAST_UNKNOWNSPELL
| CAST_OUTOFMANA
| CAST_OUTOFRANGE
| CAST_CANNOTSEE
| CAST_STUNNED
| CAST_RESISTED
| CAST_TOOK2LONG
| CAST_ABILITYNOTREADY
| CAST_IMMUNESLOW
| CAST_LOSTTARGET
|
| New Vars Modification
| Plazmic's no globals needed version
|
| Oct 09, 2003 - Updated to work with new vars and $char(casting) -gf
| Oct 11, 2003 - switched some logic, removed defines -gf
| Oct 15, 2003 - Item support added by -EqMule
| XXX xx, xxxx - Modified to add automeming of spells. -Goofmester1
| Dec 26, 2003 - fd fail 1 added -m0nk
| Jan 01, 2004 - timeout(5s) added to stop "dead-time" -m0nk
| Jan 01, 2004 - switchd fdfail to a standing check. -m0nk
| Jan 01, 2004 - added silence checking as a stun check -m0nk
| Feb 17, 2004 - added AA activate capabilities -ml2517
| Apr 11, 2004 - Updated for new Parm system -ml2517
| Apr 12, 2004 - Will spit out a different message on immune to slows. -ml2517
| Apr 16, 2004 - Removed /sendkeys and replaced with /keypress. -ml2517
| Apr 17, 2004 - Various code enhancements. -Wassup
| Apr 20, 2004 - Updated all of the /if's to have parenthesis. -ml2517
| Apr 25, 2004 - Updated to new variable system. -ml2517
| Apr 29, 2004 - Fixed Item problem -ml2517
| Apr 29, 2004 - Changed the alt ability to use AltAbilityReady instead of an event. -ml2517
| May 02, 2004 - Added the ability to specify a gem slot to mem spells to. -ml2517
| May 10, 2004 - Updated for new event system.
| May 12, 2004 - Added suggestions for loss of target and stun handling change. -ml2517
| May 13, 2004 - Activate now accepts AA skill by name or number. -ml2517
| May 14, 2004 - Added the nocheck value, it is the default. This bypasses the target checking code. -ml2517
|

#event Fizzle "#*#Your spell fizzles#*#"
#event Interrupt "#*#Your casting has been interrupted#*#"
#event Interrupt "#*#Your spell is interrupted.#*#"
#event Recover "#*#You haven't recovered yet...#*#"
#event Recover "#*#Spell recovery time not yet met.#*#"
#event Resisted "#*#Your target resisted the #*#"
#event OutOfMana "#*#Insufficient Mana to cast this spell!#*#"
#event OutOfRange "#*#Your target is out of range, get closer!#*#"
#event NoLOS "#*#You cannot see your target.#*#"
#event Stunned "#*#You cannot cast while stunned#*#"
#event Stunned "#*#You *CANNOT* cast spells, you have been silenced!#*#"
#event Standing "#*#You must be standing to cast a spell#*#"
#event Standing "#*#has fallen to the ground.#*#"
#event Collapse "#*#Your gate is too unstable, and collapses.#*#"
#event ImmuneSlow "#*#Your target is immune to changes in its attack speed.#*#"


Sub Cast(SpellName,ItemFlag,DismountFlag)
   /declare HaveTarget int local 0
   /declare CastBarTime timer local
   /declare CastCurrLocY float local 0
   /declare CastCurrLocX float local 0
   /varset CastCurrLocY ${Me.Y}
   /varset CastCurrLocX ${Me.X}
   /if (${Target.ID}>0) /varset HaveTarget 1
   /if (!${Defined[CastGiveUpTime]}) /declare CastGiveUpTime timer local
   /if (!${Defined[ItemFlag]}) /declare ItemFlag string local
   /if (!${Defined[DismountFlag]}) {
       /declare DismountFlag string local nocheck
       /if (${ItemFlag.Find["dismount"]}) /varset DismountFlag ${ItemFlag}
   }
   /if (!${Me.Standing} && !${Me.Mount.ID}>0) /stand
   /if (${Me.Moving}) {
       /keypress forward
       /keypress back
       /delay 8
   } else {
       /delay 4
   }
   /if (${ItemFlag.Equal["Item"]} || ${ItemFlag.Equal["Activate"]}) /goto :StartCast

   /if (!${Me.Gem["${SpellName}"]}) {
       /if (${ItemFlag.Find[gem]}) {
           /if (${Int[${ItemFlag.Right[1]}]}>0 && ${Int[${ItemFlag.Right[1]}]}<9) {
               /memspell ${ItemFlag.Right[1]} "${SpellName}"
               /delay 5s
           } else {
               /goto :GenericMem
           }
       } else {       
           :GenericMem
           /memspell 5 "${SpellName}"
           /delay 5s
       }

   }
   :StartCast
      /varset CastGiveUpTime 5s
   :CastNow
      /if (${ItemFlag.Equal["Item"]}) {
         /call ClearReturnValue
         /cast item "${SpellName}"
      } else /if (${ItemFlag.Equal["Activate"]}) {
         /call ClearReturnValue
         /if (!${Me.AltAbilityReady[${SpellName}]}) /return CAST_ABILITYNOTREADY
         /alt activate ${AltAbility[${SpellName}].ID}
         /varset CastBarTime ${Me.Casting.CastTime}
      } else {
         /if (!${Me.Gem["${SpellName}"]}) /return CAST_UNKNOWNSPELL
         /call ClearReturnValue
         /if (!${Me.SpellReady["${SpellName}"]}) {
            /if (${CastGiveUpTime}==0) /return CAST_TOOK2LONG
            /delay 1
            /goto :CastNow
         }
         /cast "${SpellName}"
         /varset CastBarTime ${Math.Calc[${Me.Casting.CastTime}*10]}
      }
   :WaitCast
      /if (${Me.Casting.ID}) {
         /if ((!${Target.ID}>0 || ${Target.Type.Equal[CORPSE]}) && !${DismountFlag.Find[nocheck]} && ${HaveTarget}==1) {
             /if (${Me.Mount.ID}>0) {
                 /if (${DismountFlag.Equal[dismount]}) {
                     /dismount
                 } else {
                     /if (!${ItemFlag.Equal["Item"]}) {
                         /if (${CastBarTime}<7) {
                             :Interrupt
                             /keypress FORWARD hold
                             /delay 6
                             /keypress FORWARD
                             /keypress BACK hold
                             /delay 8
                             /keypress BACK
                         } else {
                             :HoldForSpell
                             /delay 1
                             /if (${CastBarTime}<7) /goto :Interrupt
                             /goto :HoldForSpell
                         }
                     } else {
                         /keypress FORWARD hold
                         :Forward
                         /delay 1
                         /if (${Math.Distance[${CastCurrLocY},${CastCurrLocX}]}<6) /goto :Forward
                         /keypress FORWARD
                         /keypress BACK hold
                         :Backward
                         /delay 1
                         /if (${Math.Distance[${CastCurrLocY},${CastCurrLocX}]}>4) /goto :Backward
                         /keypress BACK
                         /if (!${Me.Casting.ID}>0) /goto :DuckTime
                     }
                 }
             }
             :DuckTime
             /keypress FORWARD
             /keypress BACK
             /if (!${Me.Ducking}) /keypress DUCK
             /delay 1
             /if (${Me.Ducking}) /keypress DUCK
             /return CAST_LOSTTARGET
         }
         /delay 1
         /goto :WaitCast
      }
   /delay 1
   /doevents Fizzle
   /doevents Interrupt
   /doevents Interrupt
   /doevents Recover
   /doevents Standing
   /doevents OutOfRange
   /doevents OutOfMana
   /doevents NoLOS
   /doevents Resisted
   /doevents ImmuneSlow
   /doevents Stunned
   /doevents Collapse
   /if (${Macro.Return.Equal["CAST_RESTART"]}) /goto :StartCast
   /if (!${Macro.Return.Equal["NULL"]}) /return ${Macro.Return}
/return CAST_SUCCESS

Sub ClearReturnValue
/return NULL

Sub Event_Fizzle
/return CAST_RESTART

Sub Event_Interrupt
/return CAST_RESTART

Sub Event_Recover
   /delay 5
/return CAST_RESTART

Sub Event_Standing
   /stand
/return CAST_RESTART

Sub Event_Collapse
/return CAST_RESTART

Sub Event_OutOfMana
/return CAST_OUTOFMANA

Sub Event_OutOfRange
/return CAST_OUTOFRANGE

Sub Event_NoLOS
/return CAST_CANNOTSEE

Sub Event_Stunned
   /delay 2s !${Me.Stunned}
/return CAST_RESTART

Sub Event_Resisted
/return CAST_RESISTED

Sub Event_ImmuneSlow
/return CAST_IMMUNESLOW
 
I've been using this simple one I got on the mq2 forums for sometime.

It works great for me

Simply /mac practice <spellgemnumber>

Rich (BB code):
|Usage: /macro practice (gem#) 
| 
|The spell you choose will be cast on yourself. If it is a DD spell, 
|  make sure to use it in a zone like PoK, nexus, or PoTranq. 
| 
|If you are enchanter level 29 or above, it will recast clarity 
|  if you have it mem'd 
| 
|When your skill is maxed in the skill of the spell you are practicing, 
|  the macro will give a report on number of skillups. If you had 
|  skillups in other areas.. such as medding, or specialize alteration, 
|  it will give a report with those skillups as well. 
| 
|Once you are oom, you will sit, med to FM, then start over. 



#event ClarityFades "The cool breeze fades." 
#event SkillUp "You have become better at #1#! (#2#)" 


Sub Main 
/declare GemNumber int outer 

/if (${Defined[Param0]}) { 
  /varset GemNumber ${Param0} 
  /echo Practicing ${Spell[${Me.Gem[${GemNumber}]}].Skill} 
  } else { 
  
  /echo Usage: /macro practice (gem#) 
  /echo Which spell would you like to practice? 
  /endmacro 
  } 

/declare MainSkillUp int outer 0 
/declare SecSkillUp int outer 0 

:start 
/stand 
|remove following line if you want to cast spell on target, not yourself 


:bleh 
/if (${Me.SpellReady[${GemNumber}]}) { 
/doevents 
/if (${Me.Gem[${GemNumber}].Mana} > ${Me.CurrentMana}) { 
  /sit 
  /goto :medup 
  } 
/if (${Me.PctHPs}<20) { 
  /echo Ending macro because your HPs are too low. Don't want to kill yourself. 
  /endmacro 
  } 
/if (${Me.State.Equal[SIT]}) { 
  /stand 
  } 
/if (${Math.Calc[${Me.Level}*5+5]}==${SkillValue}) { 
  /call Results 
  } 
  /goto :cast 
  } else { 
  /goto :bleh 
} 
:cast 
|comes from :bleh if the spell is ready 
  /cast ${GemNumber} 
  /goto :bleh 

:medup 
|comes from Sub Checks 
/doevents 
/if (${Me.State.NotEqual[SIT]}) { 
  /sit 
  } 
/if (${Me.CurrentMana}==${Me.MaxMana}) { 
  /goto :start 
  } else { 

  /goto :medup 
  } 

/return 

Sub Event_ClarityFades 
/stand 
/keypress D 
/keypress D 
/cast Clarity 
/return 

Sub Event_SkillUp(string Line, string SkillType, int SkillValue) 
|This part aids the end-macro results. 
/if (${Spell[${Me.Gem[${GemNumber}]}].Skill.Equal[${SkillType}]}) { 
  /varcalc MainSkillUp ${MainSkillUp}+1 
  } 
/if (${Spell[${Me.Gem[${GemNumber}]}].Skill.NotEqual[${SkillType}]}) { 
  /varcalc SecSkillUp ${SecSkillUp}+1 
  } 
|checking if skill is maxed.. if it is you're done! 
/if (${Math.Calc[${Me.Level}*5+5]}==${SkillValue}) { 
  /call Results 
  } 

/return 


Sub Results 
/echo You have finished skilling up ${Spell[${Me.Gem[${GemNumber}]}].Skill} ! 
/echo Results: ${Spell[${Me.Gem[${GemNumber}]}].Skill} (${Math.Calc[${Me.Level}*5+5]}) -- Total of ${MainSkillUp} skillups! 
/echo Total other skillups (not ${Spell[${Me.Gem[${GemNumber}]}].Skill}) -- ${SecSkillUp}. 
/endmacro

Sad to hear you can't nuke your self anymore. But if you've got another toon you can controll you should consider using this same macro to heal them.
 
If you have access to a pet class toon with pet hold, it works great. I just take my toon i am working skills on, duel him with my bst. I work on melee skills and nuke spell skills all at once fighting the pet. Pet hold is good in case you just want to nuke away on the toon and not melee.
 
They did it for a lot of reasons...namely the one you said you did...other skills could go up on guards too....they didnt like that

Edit: Tone posted this. *IF IT DOES NOT WORK FOR YOUR CLASS OR SKIPS A SPELL SET (Suchas moving from Alter to Div without working Abjure) Check for a capital letter where it shouldn't be in the Maxskill variable in that set. It automatically gets the lowest level spells to work that skill memorized, meds when you're low.

Just edit the /varset Maxskill ### to one below your max. Suchas if your max is 235 set it at 234

Rich (BB code):
Sub Main
 
  /declare Maxskill int outer
  /declare AlterationSpell outer
  /declare AbjurationSpell outer
  /declare EvocationSpell outer
  /declare DivinationSpell outer
  /declare ConjurationSpell outer
  /declare SingSong outer
  /declare DrumSong outer
  /declare StringSong outer
  /declare WindSong outer
  /declare BrassSong outer

  /varset Maxskill 234
 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /goto :Skspells
  /if (${Me.Class.Name.Equal[Bard]}) /goto :Brdspells
  /if (${Me.Class.Name.Equal[Beastlord]}) /goto :Bstspells
  /if (${Me.Class.Name.Equal[Cleric]}) /goto :Clrspells
  /if (${Me.Class.Name.Equal[Druid]}) /goto :Druspells
  /if (${Me.Class.Name.Equal[Enchanter]}) /goto :Encspells
  /if (${Me.Class.Name.Equal[Magician]}) /goto :Magspells
  /if (${Me.Class.Name.Equal[Necromancer]}) /goto :Necspells
  /if (${Me.Class.Name.Equal[Paladin]}) /goto :Palspells
  /if (${Me.Class.Name.Equal[Ranger]}) /goto :Rngspells
  /if (${Me.Class.Name.Equal[Shaman]}) /goto :Shmspells
  /if (${Me.Class.Name.Equal[Wizard]}) /goto :Wizspells

:Brdspells
  /varset SingSong Jonthan's Whistling Warsong
  /varset DrumSong Anthem de Arms
  /varset StringSong Hymn of Restoration
  /varset WindSong Tarew`s Aquatic Ayre
  /varset BrassSong Denon`s Disruptive Discord
/if (${Me.Level}<18) {
    /echo This macro won't function correctly until your ${Me.Class} is level 18.
    /endmacro
  }
/goto :Songreqs

:Bstspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Inner Fire
  /varset EvocationSpell Blast of Frost
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Sicken
/if (${Me.Level}<15) {
    /echo This macro won't function correctly until your ${Me.Class} is level 15.
    /endmacro
  }
/goto :Prereqs

:Clrspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Courage
  /varset EvocationSpell Strike
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Summon Drink
/if (${Me.Level}<5) {
    /echo This macro won't function correctly until your ${Me.Class} is level 5.
    /endmacro
  }
/goto :Prereqs

:Druspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Skin like Wood
  /varset EvocationSpell Burst of Flame
  /varset DivinationSpell See Invisible
  /varset ConjurationSpell Stinging Swarm
/if (${Me.Level}<5) {
    /echo This macro won't function correctly until your ${Me.Class} is level 5.
    /endmacro
  }
/goto :Prereqs

:Encspells
  /varset AlterationSpell Strengthen
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Chaotic Feedback
  /varset DivinationSpell True North
  /varset ConjurationSpell Mesmerize
/if (${Me.Level}<8) {
    /echo This macro won't function correctly until your ${Me.Class} is level 8.
    /endmacro
  }
/goto :Prereqs

:Magspells
  /varset AlterationSpell Renew Elements
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Burst of Flame
  /varset DivinationSpell True North
  /varset ConjurationSpell Summon Drink
/if (${Me.Level}<8) {
    /echo This macro won't function correctly until your ${Me.Class} is level 8.
    /endmacro
  }
/goto :Prereqs

:Necspells
  /varset AlterationSpell Lifetap
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Ward Undead
  /varset DivinationSpell True North
  /varset ConjurationSpell Disease Cloud
/if (${Me.Level}<4) {
    /echo This macro won't function correctly until your ${Me.Class} is level 4.
    /endmacro
  }
/goto :Prereqs

:Palspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Courage
  /varset EvocationSpell Cease
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Hammer of Wrath
/if (${Me.Level}<15) {
    /echo This macro won't function correctly until your ${Me.Class} is level 15.
    /endmacro
  }
/goto :Prereqs

:Rngspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Skin like Wood
  /varset EvocationSpell Flame lick
  /varset DivinationSpell Camouflage
  /varset ConjurationSpell Dance of the fireflies
/if (${Me.Level}<15) {
    /echo This macro won't function correctly until your ${Me.Class} is level 15.
    /endmacro
  }
/goto :Prereqs

:Skspells
  /varset AlterationSpell Lifetap
  /varset AbjurationSpell Numb the dead
  /varset EvocationSpell Ward Undead
  /varset DivinationSpell Sense the Dead
  /varset ConjurationSpell Disease Cloud
/if (${Me.Level}<22) {
    /echo This macro won't function correctly until your ${Me.Class} is level 22.
    /endmacro
  }
/goto :Prereqs

:Shmspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Inner Fire
  /varset EvocationSpell Burst of Flame
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Tainted Breath
/if (${Me.Level}<9) {
    /echo This macro won't function correctly until your ${Me.Class} is level 9.
    /endmacro
  }
/goto :Prereqs

:Wizspells 12
  /varset AlterationSpell Fade
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Shock of Frost
  /varset DivinationSpell True North
  /varset ConjurationSpell Halo of Light
  /if (${Me.Level}<12) {
    /echo This macro won't function correctly until your ${Me.Class} is level 12.
    /endmacro
  }
/goto :Prereqs
:Songreqs
/if (${Bool[${Me.Book[${SingSong}]}]}==FALSE) {
    /echo You don't have ${SingSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${DrumSong}]}]}==FALSE) {
    /echo You don't have ${DrumSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${StringSong}]}]}==FALSE) {
    /echo You don't have ${StringSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${WindSong}]}]}==FALSE) {
    /echo You don't have ${WindSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${BrassSong}]}]}==FALSE) {
    /echo You don't have ${BrassSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }
/goto :Bardsongprep
:Prereqs


 

  /if (${Bool[${Me.Book[${AlterationSpell}]}]}==FALSE) {
    /echo You don't have ${AlterationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${AbjurationSpell}]}]}==FALSE) {
    /echo You don't have ${AbjurationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${EvocationSpell}]}]}==FALSE) {
    /echo You don't have ${EvocationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${DivinationSpell}]}]}==FALSE) {
    /echo You don't have ${DivinationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${ConjurationSpell}]}]}==FALSE) {
    /echo You don't have ${ConjurationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }
     
  /if (${Me.Class.Name.Equal[Magician]}) /goto :Getpet
  /if (${Me.Class.Name.Equal[Shadowknight]}) /goto :Getpet
  /if (${Me.Class.Name.Equal[Necromancer]}) /goto :Getpet
 
/goto :Castingprep

:Getpet
  /notify CastSpellWnd CSPW_Spell5 rightmouseup 
  /if (${Me.Class.Name.Equal[Magician]}) {
    /call Cast "Elementalkin: Water" gem6
  } Else {
    /call Cast "Leering Corpse" gem6
  }
  /goto :Castingprep
:Bardsongprep
  /mem 1 "${SingSong}"
  /delay 5s
  /mem 2 "${DrumSong}"
  /delay 5s
  /mem 3 "${StringSong}"
  /delay 5s
  /mem 4 "${WindSong}"
  /delay 5s
  /mem 5 "${BrassSong}"
  /delay 5s
  /goto :Singing

:Singing
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Sing]}>=${MaxSkill}) /goto :Percussion
  /if (${Me.SpellReady[${SingSong}]})   /Cast "${SingSong}"
  /goto :Singing

:Percussion
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Percussion Instruments]}>=${MaxSkill}) /goto :Stringed
  /if (${Me.SpellReady[${DrumSong}]})   /Cast "${DrumSong}"
  /goto :Percussion

:Stringed
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Stringed Instruments]}>=${MaxSkill}) /goto :Wind
  /if (${Me.SpellReady[${StringSong}]})   /Cast "${StringSong}"
  /goto :Stringed

:Wind
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Wind Instruments]}>=${MaxSkill}) /goto :Wind
  /if (${Me.SpellReady[${WindSong}]})   /Cast "${WindSong}"
  /goto :Wind

:Brass
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Brass Instruments]}>=${MaxSkill}) {
    /echo Skills are all at max!
    /endmacro
  }
  /if (${Me.SpellReady[${BrassSong}]})   /Cast "${BrassSong}"
  /goto :Brass

:Castingprep
 
  /memspell 1 "${AlterationSpell}"
  /delay 5s
  /memspell 2 "${AbjurationSpell}"
  /delay 5s
  /memspell 3 "${EvocationSpell}"
  /delay 5s
  /memspell 4 "${DivinationSpell}"
  /delay 5s
  /memspell 5 "${ConjurationSpell}"
  /delay 5s
  /goto :Alteration


:Manacheck
  /if (${Me.CurrentMana}>=100) {
    /goto :Alteration
  } Else {
    /goto :Medup
  } 

:Medup
  /if (${Me.Sitting}) {
  } Else {
    /sit
  }
  /if (${Me.CurrentMana}==${Me.MaxMana}) /goto :Manacheck
  /goto :Medup



:Alteration
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet} 
  /if (${Me.Skill[Alteration]}>=${MaxSkill}) /goto :Abjuration
  /if (${Me.SpellReady[${AlterationSpell}]})   /Cast "${AlterationSpell}"
  /goto :Manacheck

:Abjuration
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Abjuration]}>=${Maxskill}) /goto :Evocation
  /if (${Me.SpellReady[${AbjurationSpell}]})   /Cast "${AbjurationSpell}"
  /goto :Manacheck

:Evocation
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Evocation]}>=${Maxskill}) /goto :Divination
  /if (${Me.SpellReady[${EvocationSpell}]})   /Cast "${EvocationSpell}"
  /goto :Manacheck
   
:Divination
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Divination]}>=${Maxskill}) /goto :Conjuration
  /if (${Me.SpellReady[${DivinationSpell}]})   /Cast "${DivinationSpell}"
  /goto :Manacheck

:Conjuration
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Conjuration]}>=${Maxskill}) {
    /echo All spellcasting skills are at max!
    /endmacro
  }
  /if (${Me.Class.Name.Equal[Ranger]}) {
    /if (${Time.Night}) {
    } Else {
      /echo It's daytime and you can't summon globes now.
      /echo Try again when it's nighttime,
      /echo or get level 30 and use stinging swarm as your conjuration spell.
      /endmacro
    }
  }
  /if (${Me.SpellReady[${ConjurationSpell}]}) {
    /Cast "${ConjurationSpell}"
    /delay 1s
  }
  /if (${Cursor.Name.Find[Halo of Light]}) /destroy
  /if (${Cursor.Name.Find[Globe of Water]}) /destroy
  /if (${Cursor.Name.Find[Firefly Globe]}) /destroy
  /if (${Cursor.Name.Find[Hammer of Wrath]}) /destroy
 
  /goto :Manacheck
 
/Endmacro
Thanks very much for this macro, it works great!
 
They did it for a lot of reasons...namely the one you said you did...other skills could go up on guards too....they didnt like that

Edit: Tone posted this. *IF IT DOES NOT WORK FOR YOUR CLASS OR SKIPS A SPELL SET (Suchas moving from Alter to Div without working Abjure) Check for a capital letter where it shouldn't be in the Maxskill variable in that set. It automatically gets the lowest level spells to work that skill memorized, meds when you're low.

Just edit the /varset Maxskill ### to one below your max. Suchas if your max is 235 set it at 234

Rich (BB code):
Sub Main
 
  /declare Maxskill int outer
  /declare AlterationSpell outer
  /declare AbjurationSpell outer
  /declare EvocationSpell outer
  /declare DivinationSpell outer
  /declare ConjurationSpell outer
  /declare SingSong outer
  /declare DrumSong outer
  /declare StringSong outer
  /declare WindSong outer
  /declare BrassSong outer

  /varset Maxskill 234
 
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /goto :Skspells
  /if (${Me.Class.Name.Equal[Bard]}) /goto :Brdspells
  /if (${Me.Class.Name.Equal[Beastlord]}) /goto :Bstspells
  /if (${Me.Class.Name.Equal[Cleric]}) /goto :Clrspells
  /if (${Me.Class.Name.Equal[Druid]}) /goto :Druspells
  /if (${Me.Class.Name.Equal[Enchanter]}) /goto :Encspells
  /if (${Me.Class.Name.Equal[Magician]}) /goto :Magspells
  /if (${Me.Class.Name.Equal[Necromancer]}) /goto :Necspells
  /if (${Me.Class.Name.Equal[Paladin]}) /goto :Palspells
  /if (${Me.Class.Name.Equal[Ranger]}) /goto :Rngspells
  /if (${Me.Class.Name.Equal[Shaman]}) /goto :Shmspells
  /if (${Me.Class.Name.Equal[Wizard]}) /goto :Wizspells

:Brdspells
  /varset SingSong Jonthan's Whistling Warsong
  /varset DrumSong Anthem de Arms
  /varset StringSong Hymn of Restoration
  /varset WindSong Tarew`s Aquatic Ayre
  /varset BrassSong Denon`s Disruptive Discord
/if (${Me.Level}<18) {
    /echo This macro won't function correctly until your ${Me.Class} is level 18.
    /endmacro
  }
/goto :Songreqs

:Bstspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Inner Fire
  /varset EvocationSpell Blast of Frost
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Sicken
/if (${Me.Level}<15) {
    /echo This macro won't function correctly until your ${Me.Class} is level 15.
    /endmacro
  }
/goto :Prereqs

:Clrspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Courage
  /varset EvocationSpell Strike
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Summon Drink
/if (${Me.Level}<5) {
    /echo This macro won't function correctly until your ${Me.Class} is level 5.
    /endmacro
  }
/goto :Prereqs

:Druspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Skin like Wood
  /varset EvocationSpell Burst of Flame
  /varset DivinationSpell See Invisible
  /varset ConjurationSpell Stinging Swarm
/if (${Me.Level}<5) {
    /echo This macro won't function correctly until your ${Me.Class} is level 5.
    /endmacro
  }
/goto :Prereqs

:Encspells
  /varset AlterationSpell Strengthen
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Chaotic Feedback
  /varset DivinationSpell True North
  /varset ConjurationSpell Mesmerize
/if (${Me.Level}<8) {
    /echo This macro won't function correctly until your ${Me.Class} is level 8.
    /endmacro
  }
/goto :Prereqs

:Magspells
  /varset AlterationSpell Renew Elements
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Burst of Flame
  /varset DivinationSpell True North
  /varset ConjurationSpell Summon Drink
/if (${Me.Level}<8) {
    /echo This macro won't function correctly until your ${Me.Class} is level 8.
    /endmacro
  }
/goto :Prereqs

:Necspells
  /varset AlterationSpell Lifetap
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Ward Undead
  /varset DivinationSpell True North
  /varset ConjurationSpell Disease Cloud
/if (${Me.Level}<4) {
    /echo This macro won't function correctly until your ${Me.Class} is level 4.
    /endmacro
  }
/goto :Prereqs

:Palspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Courage
  /varset EvocationSpell Cease
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Hammer of Wrath
/if (${Me.Level}<15) {
    /echo This macro won't function correctly until your ${Me.Class} is level 15.
    /endmacro
  }
/goto :Prereqs

:Rngspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Skin like Wood
  /varset EvocationSpell Flame lick
  /varset DivinationSpell Camouflage
  /varset ConjurationSpell Dance of the fireflies
/if (${Me.Level}<15) {
    /echo This macro won't function correctly until your ${Me.Class} is level 15.
    /endmacro
  }
/goto :Prereqs

:Skspells
  /varset AlterationSpell Lifetap
  /varset AbjurationSpell Numb the dead
  /varset EvocationSpell Ward Undead
  /varset DivinationSpell Sense the Dead
  /varset ConjurationSpell Disease Cloud
/if (${Me.Level}<22) {
    /echo This macro won't function correctly until your ${Me.Class} is level 22.
    /endmacro
  }
/goto :Prereqs

:Shmspells
  /varset AlterationSpell Minor Healing
  /varset AbjurationSpell Inner Fire
  /varset EvocationSpell Burst of Flame
  /varset DivinationSpell Flash of Light
  /varset ConjurationSpell Tainted Breath
/if (${Me.Level}<9) {
    /echo This macro won't function correctly until your ${Me.Class} is level 9.
    /endmacro
  }
/goto :Prereqs

:Wizspells 12
  /varset AlterationSpell Fade
  /varset AbjurationSpell Minor Shielding
  /varset EvocationSpell Shock of Frost
  /varset DivinationSpell True North
  /varset ConjurationSpell Halo of Light
  /if (${Me.Level}<12) {
    /echo This macro won't function correctly until your ${Me.Class} is level 12.
    /endmacro
  }
/goto :Prereqs
:Songreqs
/if (${Bool[${Me.Book[${SingSong}]}]}==FALSE) {
    /echo You don't have ${SingSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${DrumSong}]}]}==FALSE) {
    /echo You don't have ${DrumSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${StringSong}]}]}==FALSE) {
    /echo You don't have ${StringSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${WindSong}]}]}==FALSE) {
    /echo You don't have ${WindSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${BrassSong}]}]}==FALSE) {
    /echo You don't have ${BrassSong}. 
    /echo Please check the songs listed in the macro for what you need.
    /endmacro
  }
/goto :Bardsongprep
:Prereqs


 

  /if (${Bool[${Me.Book[${AlterationSpell}]}]}==FALSE) {
    /echo You don't have ${AlterationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${AbjurationSpell}]}]}==FALSE) {
    /echo You don't have ${AbjurationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${EvocationSpell}]}]}==FALSE) {
    /echo You don't have ${EvocationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${DivinationSpell}]}]}==FALSE) {
    /echo You don't have ${DivinationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }

  /if (${Bool[${Me.Book[${ConjurationSpell}]}]}==FALSE) {
    /echo You don't have ${ConjurationSpell}. 
    /echo Please check the spells listed in the macro for what you need.
    /endmacro
  }
     
  /if (${Me.Class.Name.Equal[Magician]}) /goto :Getpet
  /if (${Me.Class.Name.Equal[Shadowknight]}) /goto :Getpet
  /if (${Me.Class.Name.Equal[Necromancer]}) /goto :Getpet
 
/goto :Castingprep

:Getpet
  /notify CastSpellWnd CSPW_Spell5 rightmouseup 
  /if (${Me.Class.Name.Equal[Magician]}) {
    /call Cast "Elementalkin: Water" gem6
  } Else {
    /call Cast "Leering Corpse" gem6
  }
  /goto :Castingprep
:Bardsongprep
  /mem 1 "${SingSong}"
  /delay 5s
  /mem 2 "${DrumSong}"
  /delay 5s
  /mem 3 "${StringSong}"
  /delay 5s
  /mem 4 "${WindSong}"
  /delay 5s
  /mem 5 "${BrassSong}"
  /delay 5s
  /goto :Singing

:Singing
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Sing]}>=${MaxSkill}) /goto :Percussion
  /if (${Me.SpellReady[${SingSong}]})   /Cast "${SingSong}"
  /goto :Singing

:Percussion
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Percussion Instruments]}>=${MaxSkill}) /goto :Stringed
  /if (${Me.SpellReady[${DrumSong}]})   /Cast "${DrumSong}"
  /goto :Percussion

:Stringed
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Stringed Instruments]}>=${MaxSkill}) /goto :Wind
  /if (${Me.SpellReady[${StringSong}]})   /Cast "${StringSong}"
  /goto :Stringed

:Wind
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Wind Instruments]}>=${MaxSkill}) /goto :Wind
  /if (${Me.SpellReady[${WindSong}]})   /Cast "${WindSong}"
  /goto :Wind

:Brass
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Skill[Brass Instruments]}>=${MaxSkill}) {
    /echo Skills are all at max!
    /endmacro
  }
  /if (${Me.SpellReady[${BrassSong}]})   /Cast "${BrassSong}"
  /goto :Brass

:Castingprep
 
  /memspell 1 "${AlterationSpell}"
  /delay 5s
  /memspell 2 "${AbjurationSpell}"
  /delay 5s
  /memspell 3 "${EvocationSpell}"
  /delay 5s
  /memspell 4 "${DivinationSpell}"
  /delay 5s
  /memspell 5 "${ConjurationSpell}"
  /delay 5s
  /goto :Alteration


:Manacheck
  /if (${Me.CurrentMana}>=100) {
    /goto :Alteration
  } Else {
    /goto :Medup
  } 

:Medup
  /if (${Me.Sitting}) {
  } Else {
    /sit
  }
  /if (${Me.CurrentMana}==${Me.MaxMana}) /goto :Manacheck
  /goto :Medup



:Alteration
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet} 
  /if (${Me.Skill[Alteration]}>=${MaxSkill}) /goto :Abjuration
  /if (${Me.SpellReady[${AlterationSpell}]})   /Cast "${AlterationSpell}"
  /goto :Manacheck

:Abjuration
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Abjuration]}>=${Maxskill}) /goto :Evocation
  /if (${Me.SpellReady[${AbjurationSpell}]})   /Cast "${AbjurationSpell}"
  /goto :Manacheck

:Evocation
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Evocation]}>=${Maxskill}) /goto :Divination
  /if (${Me.SpellReady[${EvocationSpell}]})   /Cast "${EvocationSpell}"
  /goto :Manacheck
   
:Divination
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Divination]}>=${Maxskill}) /goto :Conjuration
  /if (${Me.SpellReady[${DivinationSpell}]})   /Cast "${DivinationSpell}"
  /goto :Manacheck

:Conjuration
  /if (${Me.Sitting}) /sit off
  /targ ${Me}
  /if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
  /if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
  /if (${Me.Skill[Conjuration]}>=${Maxskill}) {
    /echo All spellcasting skills are at max!
    /endmacro
  }
  /if (${Me.Class.Name.Equal[Ranger]}) {
    /if (${Time.Night}) {
    } Else {
      /echo It's daytime and you can't summon globes now.
      /echo Try again when it's nighttime,
      /echo or get level 30 and use stinging swarm as your conjuration spell.
      /endmacro
    }
  }
  /if (${Me.SpellReady[${ConjurationSpell}]}) {
    /Cast "${ConjurationSpell}"
    /delay 1s
  }
  /if (${Cursor.Name.Find[Halo of Light]}) /destroy
  /if (${Cursor.Name.Find[Globe of Water]}) /destroy
  /if (${Cursor.Name.Find[Firefly Globe]}) /destroy
  /if (${Cursor.Name.Find[Hammer of Wrath]}) /destroy
 
  /goto :Manacheck
 
/Endmacro
Your script worked fine except that it was skipping over the Alteration section:


:Alteration
/if (${Me.Sitting}) /sit off
/targ ${Me}
/if (${Me.Class.Name.Equal[Magician]}) /target ${Me.Pet}
/if (${Me.Class.Name.Equal[Shadow Knight]}) /target ${Me.Pet}
/if (${Me.Class.Name.Equal[Necromancer]}) /target ${Me.Pet}
/if (${Me.Skill[Alteration]}>=${MaxSkill}) /goto :Abjuration
/if (${Me.SpellReady[${AlterationSpell}]}) /Cast "${AlterationSpell}"
/goto :Manacheck

I got it to work when I replaced "MaxSkill" with "Maxskill" (ie. IdentifierNames are CaseSensitive)
 
Spell skill-up macro?

Users who are viewing this thread

Back
Top