If you have an enchanter it now maintains minor illusion to camouflage you as people walk by. If you're a druid it does the tree illusion (extra 2 mana bonus as well.) Stand someplace appropriate for the illusions.
For any evocation spell it targets the nearest corpse. I took an alt character and killed it where I wanted to stand. That gave me 7 days in a quiet place to work on evocation.
I added "/filter macros all" to make the script completely silent. No MQ messages were displayed at all if a GM took interest in me. If you are trying to use the script and it isn't behaving you can see all the messages by either typing "/filter macros none" while the script is running or commenting out the filter line.
And one final note, make sure you have your spells memmed before starting. Or if you are using the old UI uncomment the lines for memming spells. I forgot to do this twice and sat there puzzled...
Enjoy!
Code: Select all
| Filename : TrainSpell.mac
| Brought to you by SingleServing and JoeBloe
#turbo 40
#include spellcast.mac
#include spellbook.mac
#event LostClarity "The cool breeze fades."
#event LostIllusion "Your illusion fades."
#event LostTree "You are no longer a tree."
#chat tell
#chat say
| in game type /macro TrainSpell "Spell Name" ["skill name" "target skill value"]
Sub Main
|Paranoia.
/filter macros none
|AFK really cuts back on the tells from beggars.
/afk
|/call ForgetSpellByNumber 1
|/call MemorizeSpell "$p0" 1
|Find out and remember who we are for targetting and spells
/target myself
/varset v3 $char(name)
/varset v4 $char(class)
/if $v4=="enchanter" {
/call cast "clarity"
/call cast "minor illusion"
|/call ForgetSpellByNumber 2
|/call MemorizeSpell "clarity" 2
|Adds a bit of camouflage to disguise your character from passersby
|/call ForgetSpellByNumber 3
|/call MemorizeSpell "minor illusion" 3
}
/if $v4=="druid" {
/call cast "spirit of ash"
|Adds a bit of camouflage to disguise your character from passersby
|/call ForgetSpellByNumber 2
|/call MemorizeSpell "spirit of ash" 2
}
:Loop
/if $gm==TRUE {
/echo Stopping. GM in zone.
/beep
/call StopPlaying
}
/target myself |Untarget corpse with evocation
/target pc
/echo Closest pc distance is: "$target(distance)"
/if n $target(distance)<=300 {
/if n $target(distance)!=0 /delay 6s
/if n $target(distance)!=0 /echo Someone is too close pausing...
/if n $target(distance)!=0 /goto :Loop
}
/doevents
/target myself
/if "$p1"=="evocation" {
/echo Casting evocation so target nearest corpse.
/target corpse
/if n $target(distance)==0 /goto :ManaLoop
}
/call cast "$p0"
/if n $return!=0 /echo Casting failed for some reason (spell memmed?)....
/delay 5 |recasting too fast.
/if "$p0"=="chaotic feedback" /delay 53 |recast time is reported wrong.
/if n $char(mana,pct)<10 {
/sit off
/sit on
:ManaLoop
/if n $char(mana,pct)>90 /goto :Loop
/delay 6s
/goto :ManaLoop
}
|Did we make it to our skill level?
/if "$p1"!="" {
| /echo "$p0" "$p1":"$p2"
/varset v1 $char(skill,$p1)
/if n $v1>=$p2 /echo Skill level achieved.
|no nested {} so repeat
/if n $v1>=$p2 /call StopPlaying
}
/goto :Loop
/return
Sub Event_LostClarity
/if $v4=="enchanter" {
/target myself
/call cast "clarity"
}
/return
Sub Event_LostIllusion
/if $v4=="enchanter" {
/target myself
/call cast "minor illusion"
}
/return
Sub Event_LostTree
/if $v4=="druid" {
/target myself
/call cast "spirit of ash"
}
/return
Sub Event_Chat
|massively paranoid leave if anyone talks to us
/cleanup
/sit off
/sit on
/delay 20
/beep
/camp
/endmacro
/return
Sub StopPlaying
/cleanup
/sit off
/sit on
/delay 20
/beep
/camp
/endmacro
/return
