Please contribute to perfecting this existing cleric bot

Macro requests from before the user variable changes that broke all macros

Moderator: MacroQuest Developers

VesperKnight
orc pawn
orc pawn
Posts: 29
Joined: Tue Jul 29, 2003 5:37 am

Please contribute to perfecting this existing cleric bot

Post by VesperKnight » Wed Jul 30, 2003 1:39 am

This is not my work. This is orignally scripted by Grimjack

What I did is I went to the thread where it was posted at and modified it with the additions posted in that same thread. I also added a few commands that were missing. I also removed a lot of /press esc that seemed to be messing things up but who knows maybe I've made it worse now by doing that.

Unfortunately there was also the mention of other very neat additions in that thread made by users that did not post their new code :( I really wish they did...

Anyway. I was hoping that some of you could help me fix and add a couple of things.

First thing I would like to see made possible is for the bot to automatically make room for a spell and mem a new spell when asked to cast it.

Second thing is with the moveto command.. it simply doesn't work very well at all.. it avoids obstacles very ackwardly and then runs straight unless issued a "stop" command.

And well that's it... There are of course many other things one could add to this macro to make it even better.. if some of you have already developped such additions. Please I urge you to share them here. Thank you so much!

Code: Select all

|supaheal.mac 
|Generic bot for Clerics. 
|Make sure you edit this macro.  I have marked where you should edit. 
|/tell botname cmds 
|This command will send a tell to the master with a list of commands. 
| 
|Version 2.06 
|Grimjack 

#turbo 75 
#Event Enraged "has become ENRAGED" 
#Event Offrage "is no longer enraged" 
#event Collapse "Your gate is too unstable, and collapses." 
#event FollowOff "You are no longer auto-following" 
#event RootOff "Your Immobilize spell has worn off." 
#event NoLOS "You cannot see your target." 
#Event CastStart "You begin casting" 
#Event CastFizzle "Your spell fizzles!" 
#Event CastInterrupt "Your spell is interrupted." 
#Event CastNoMana "Insufficient Mana to cast this spell" 
#Event CastTooFar "Your target is out of range, get closer!" 
#Event Recovered "You haven't recovered yet..." 
#Event CastResist "Your target resisted " 
#Event Distracted "You are too distracted to cast a spell now!" 
#Event NoTarget "You must first select a target for this spell!" 
#Event Sitting "You must be standing to cast a spell." 
#Event NoMem "You do not seem to have that spell memorized." 
#Event Stunned "You can't cast spells while stunned!" 
#define MasterName v50 
#define CmdArrayNum v51 
#define CmdArraySize v52 
#define GroupMember v53 
#define GroupMax v54 
#define ChatInput1 v55 
#define ChatInput2 v56 
#define ChatInput3 v57 
#define SitAfterCast v58 
#define MyXLoc v59 
#define MyYLoc v60 
#define IsHealer v61 
#define countdown v62 
#define CmdList v63 
#define RangeMin v70 
#define RangeMax v71 
#define FastRange v72 
#define Combatstatus v73 
#define Fail v94 
#define DoAgain v95 
#define StartCast v96 
#define SpellSlot v97 
#define SpellName v98 
#define CastTime v99 
#define CTimer t39 
#define HOTTimer0 t0 
#define HOTTimer1 t1 
#define HOTTimer2 t2 
#define HOTTimer3 t3 
#define HOTTimer4 t4 
#define HOTTimer5 t5 
#define hotspell "Supernal Elexir" 
#define healspell "Supernal Remedy" 
#define chspell "Complete Healing" 

#chat tell 

Sub Main 
   /if n $strlen("$p0")<=0 { 
     /echo Usage: /macro supaheal <Master Name> 
     /endmacro 
   } 
   /varset MasterName $p0 
   /varset IsHealer 0 
   /varset RangeMin 10 
   /varset RangeMax 12 
   /varset FastRange 15 
   /varset Combatstatus 0 
   /varset a(1,0) afk 
   /varset a(1,1) accept 
   /varset a(1,2) reject 
   /varset a(1,3) invite 
   /varset a(1,4) mana 
   /varset a(1,5) follow 
   /varset a(1,6) stop 
   /varset a(1,7) gate 
   /varset a(1,8) moveto 
   /varset a(1,9) sit 
   /varset a(1,10) stand 
   /varset a(1,11) dance 
   /varset a(1,12) camp 
   /varset a(1,13) duck 
   /varset a(1,14) run 
   /varset a(1,15) say 
   /varset a(1,16) tell 
   /varset a(1,17) group 
   /varset a(1,18) cmds 
   /varset a(1,19) autoheal 
   /varset a(1,20) target 
   /varset a(1,21) notarget 
   /varset a(1,22) assist 
   /varset a(1,23) saytarget 
   /varset a(1,24) attack 
   /varset a(1,25) noattack 
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
   /varset a(1,26) virtue 
   /varset a(1,27) heal 
   /varset a(1,28) ch 
   /varset a(1,29) hot 
   /varset a(1,30) nuke 
   /varset a(1,31) symbol 
   /varset a(1,32) ac 
   /varset a(1,33) root 
   /varset a(1,34) pet 
   /varset a(1,35) grpvirtue
   /varset a(1,36) grpsymbol
   /varset a(1,34) undeadnuke 
   /varset a(1,34) grpheal 
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
   /call CountArraySize 1 
   /varset CmdArraySize $int($return) 
   /varset CmdList "$a(1,0), $a(1,1), $a(1,2), $a(1,3), $a(1,4), $a(1,5) $a(1,6), $a(1,7), $a(1,8), $a(1,9), $a(1,10), $a(1,11), $a(1,12), $a(1,13), $a(1,14), $a(1,15), $a(1,16), $a(1,17), $a(1,18), $a(1,19), $a(1,20) $a(1,21), $a(1,22), $a(1,23), $a(1,24), $a(1,25), $a(1,26), $a(1,27), $a(1,28), $a(1,29), $a(1,30), $a(1,31), $a(1,32), $a(1,33), "$a(1,34), $a(1,35), $a(1,36), $a(1,37), $a(1,38), $a(1,39), $a(1,40)" 
   /varset CmdArrayNum 0 
   :MainLoop 
   /call CheckGrpHealth 
   /call Combatcheck 
   /if $Combatstatus=="1" /call RangeSub 
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
   /doevents 
   /varset CmdArrayNum 0 
   /goto :MainLoop 
/return 

sub CountArraySize 
   /varset l0 0 
   :CountArrayLoop 
    /if n $strlen("$a($p0,$l0)")<=0 { 
       /goto :CountArrayEnd 
   } 
   /varadd l0 1 
   /goto :CountArrayLoop 
   :CountArrayEnd 
/return $l0 

Sub CheckGrpHealth 
   /varset GroupMember 0 
   /varcalc GroupMax $group(count)-1 
   /if n "$IsHealer"==0 /return 
   :GroupLoop 
   /doevents 
   /if n $spawn($group($GroupMember),hp,pct)<41 { 
      /if n $spawn($group($GroupMember),hp,pct)>=1 { 
         /if "$spawn($group($GroupMember),class)"=="Warrior" /call Tankheal 
         /if "$spawn($group($GroupMember),class)"=="Paladin" /call Tankheal 
         /if "$spawn($group($GroupMember),class)"=="Shadow Knight" /call Tankheal 
         /if "$spawn($group($GroupMember),class)"=="Monk" /call Tankheal 
         /if "$spawn($group($GroupMember),class)"=="Ranger" /call Tankheal 
        
      } 
   } 
   /if n $spawn($group($GroupMember),hp,pct)>=1 { 
      /if n $spawn($group($GroupMember),hp,pct)<41 { 
         /call CasterHeal 
      } 
   } 
   /if n $GroupMember>=$GroupMax /return 
   /varadd GroupMember 1 
   /doevents 
   /goto :GroupLoop 
/return 

Sub Combatcheck 
   /if $EnrageVar=="1" { 
      /if $target()=="TRUE" { 
         /return 
      } else { 
         /varset EnrageVar 0 
         /varset Combatstatus 0 
      } 
   } 
   /if $target()=="FALSE" { 
      /varset Combatstatus 0 
      /if $combat=="TRUE" { 
         /attack off 
      } 
      /return 
   } 
   /if $target()=="TRUE" { 
      /if $combat=="TRUE" { 
         /varset Combatstatus 1 
         /return 
      } 
   } 
/varset Combatstatus 0 
/return 



Sub Rangesub 
   /face fast nopredict 
   /if n $target(distance)>=$FastRange /call Fastmove 
   /if n $target(distance)>$RangeMax { 
      /press up 
   } 
   /if n $target(distance)<$RangeMin { 
      /press down 
   } 
/return 

Sub Fastmove 
   :fastmoveloop 
   /doevents 
   /if $target()=="FALSE" { 
      /varset Combatstatus 0 
      /sendkey up up 
      /if $combat=="TRUE" { 
         /attack off 
         /return 
      } 
   } 
   /face fast nopredict 
   /if n $target(distance)>$FastRange { 
      /sendkey down up 
   } 
   /if n $target(distance)<=$FastRange { 
         /if $Combatstatus=="1" { 
            /if $EnrageVar=="0" { 
            } 
         } 
      /sendkey up up 
      /return 
   } 
   /goto :fastmoveloop 
/return 

Sub Event_Chat 
   /varset CmdArrayNum 0 
   /if "$MasterName"=="$p1" { 
      :ArrayTime 
      /if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" { 
         /call Do-$a(1,$CmdArrayNum) $p2 
         /return 
      } 
      /varadd CmdArrayNum 1 
      /if n $CmdArrayNum>=$CmdArraySize /return 
      /goto :ArrayTime 
   } else { 
       /tell $MasterName $p1 told me: $p2 
   } 
/return 

Sub Do-target 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /tell $MasterName my target is %t 
/return 

Sub Do-saytarget 
   /tell $MasterName my target is %t 
/return 

Sub Do-assist 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /assist "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /assist "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /assist "$p1 $p2 $p3" 
   } else /assist "$p1 $p2 $p3 $p4" 
   /tell $MasterName my target is %t 
/return 

Sub Do-attack 
   /sit off 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 5 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /tell $MasterName Attacking %t 
   /attack on 
/return 

Sub Do-noattack 
   /attack off 
/return 

Sub Do-sit 
   /sit off 
   /sit 
/return 

Sub Do-stand 
   /sit off 
/return 

Sub Do-notarget 
   /press esc 
   /press esc 
   /press esc 
/return 

Sub Do-dance
   /dance
/return 

Sub Do-afk 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /afk 
   } else /if n $strlen("$p2")<=0 { 
      /afk $p1 
   } else /if n $strlen("$p3")<=0 { 
      /afk $p1 $p2 
   } else /if n $strlen("$p4")<=0 { 
      /afk $p1 $p2 $p3 
   } else /if n $strlen("$p5")<=0 { 
      /afk $p1 $p2 $p3 $p4 
   } else /if n $strlen("$p6")<=0 { 
      /afk $p1 $p2 $p3 $p4 $p5 
   } else /if n $strlen("$p7")<=0 { 
      /afk $p1 $p2 $p3 $p4 $p5 $p6 
   } else /if n $strlen("$p8")<=0 { 
      /afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 
   } else /if n $strlen("$p9")<=0 { 
      /afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 
   } else { 
      /afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9 
   } 
   |/afk 
/return 

Sub Do-say 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /say $p1 
   } else /if n $strlen("$p3")<=0 { 
      /say $p1 $p2 
   } else /if n $strlen("$p4")<=0 { 
      /say $p1 $p2 $p3 
   } else /if n $strlen("$p5")<=0 { 
      /say $p1 $p2 $p3 $p4 
   } else /if n $strlen("$p6")<=0 { 
      /say $p1 $p2 $p3 $p4 $p5 
   } else /if n $strlen("$p7")<=0 { 
      /say $p1 $p2 $p3 $p4 $p5 $p6 
   } else /if n $strlen("$p8")<=0 { 
      /say $p1 $p2 $p3 $p4 $p5 $p6 $p7 
   } else /if n $strlen("$p9")<=0 { 
      /say $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 
   } else /if n $strlen("$p10")<=0 { 
   } else { 
      /say $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9 
   } 
/return 

Sub Do-group 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /g $p1 
   } else /if n $strlen("$p3")<=0 { 
      /g $p1 $p2 
   } else /if n $strlen("$p4")<=0 { 
      /g $p1 $p2 $p3 
   } else /if n $strlen("$p5")<=0 { 
      /g $p1 $p2 $p3 $p4 
   } else /if n $strlen("$p6")<=0 { 
      /g $p1 $p2 $p3 $p4 $p5 
   } else /if n $strlen("$p7")<=0 { 
      /g $p1 $p2 $p3 $p4 $p5 $p6 
   } else /if n $strlen("$p8")<=0 { 
      /g $p1 $p2 $p3 $p4 $p5 $p6 $p7 
   } else /if n $strlen("$p9")<=0 { 
      /g $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 
   } else /if n $strlen("$p10")<=0 { 
   } else { 
      /g "$p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9 
   } 
/return 

Sub Do-tell 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /return 
   } else /if n $strlen("$p3")<=0 { 
      /tell $p1 $p2 
   } else /if n $strlen("$p4")<=0 { 
      /t $p1 $p2 $p3 
   } else /if n $strlen("$p5")<=0 { 
      /t $p1 $p2 $p3 $p4 
   } else /if n $strlen("$p6")<=0 { 
      /t $p1 $p2 $p3 $p4 $p5 
   } else /if n $strlen("$p7")<=0 { 
      /t $p1 $p2 $p3 $p4 $p5 $p6 
   } else /if n $strlen("$p8")<=0 { 
      /t $p1 $p2 $p3 $p4 $p5 $p6 $p7 
   } else /if n $strlen("$p9")<=0 { 
      /t $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 
   } else { 
      /t $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9 
   } 
/return 


Sub Do-accept 
   /press esc 
   /press esc 
   /invite 
/return 

Sub Do-reject 
   /press esc 
   /press esc 
   /disband 
/return 

Sub Do-invite 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /tell $MasterName Inviting %t 
   /invite 
/return 

Sub Do-mana 
   /press F1 
   /tell $MasterName $char(mana,pct)m 
   /press esc 
/return 

Sub Do-follow 
   /target $MasterName 
   /stand 
   /face 
   /follow 
   /tell $MasterName Autofollow on %t. 
/return

Sub Do-stop 
   /tell $MasterName Stoping. 
   /sendkey up up 
   /varset Fail 1 
   /press d 
   /press d 
   /press esc 
   /press esc 
   /press esc 
   /press right 
/return 

Sub Do-gate
   /tell $MasterName Gating outta here 
   /call SpellSub "Gate" 
/return 

Sub Do-sit 
   /stand 
   /sit on 
/return 

Sub Do-stand 
   /stand 
/return 

Sub Do-camp 
   /tell $MasterName Camping out. 
   /stand 
   /dismount 
   /sit 
   /camp 
/return 

Sub Do-duck 
   /press z 
   /press z 
/return  

Sub Do-autoheal 
   /if n $strlen("$p1")<=0 { 
      /tell $MasterName Autoheal=$IsHealer 
      /return 
   } 
   /if $p1=="off" /varset IsHealer 0 
   /if $p1=="on" /varset IsHealer 1 
   /tell $MasterName Autoheal=$IsHealer 
/return 

Sub Do-cmds 
   /tell "$MasterName" Commands: "$CmdList" 
/return  

Sub Do-moveto 
   /sit off 
   /varset countdown 0 
   /varset MyXLoc $char(x) 
   /varset MyYLoc $char(y) 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /if $p1=="me" /target $MasterName 
   /tell $MasterName Moving to %t. 
   :gotopointloop 
   /doevents 
   /if $target()==FALSE { 
      /sendkey up up 
      /return 
   } 
   /face fast nopredict 
   /if n $target(distance)>15 /sendkey down up 
   /if n $target(distance)<=15 { 
      /sendkey up up 
      /return 
   } 
   /face fast nopredict 
   /if n $countdown>=3 { 
      /call Detectobst 
      /varset countdown 0 
   } 
   /varadd countdown 1 
   /doevents 
   /goto :gotopointloop 
   } 
   /sendkey up up 
   /face 
/return 

Sub Detectobst 
   /if n $MyXLoc==$char(x) /if $MyYLoc==$char(y) /call Hitobst 5 
   /varset MyXLoc $char(x) 
   /varset MyYLoc $char(y) 
/return 


sub Hitobst 
   /sendkey up up 
   /sendkey down down 
   /if n $rand(99)>50 { 
      /delay 2s 
      /sendkey up down 
      /sendkey down Right 
      /delay $p0 
      /sendkey up Right 
      /sendkey down up 
      /delay 2s 
      /sendkey up up 
   } else { 
      /delay 2s 
      /sendkey up down 
      /sendkey down left 
      /delay $p0 
      /sendkey up left 
      /sendkey down up 
      /delay 2s 
      /sendkey up up        
   } 
   /sendkey up down 
   /sendkey up Right 
   /sendkey up Left 
   /sendkey down up 
/return 

Sub SpellSub 
   /sendkey up up 
   /if n Combatstatus==1 /delay 3s 
   /varset Fail 0 
   /varset SpellName "$p0" 
   /varset SpellSlot "$char(gem,"$SpellName")" 
   /varset CastTime "$spell("$SpellName",casttime)" 
   :BeginCast 
   /varset DoAgain 0 
   /varset StartCast 0 
   /call WaitForStart 
   :TimerLoop 
   /doevents 
   /if n $DoAgain==1 /goto :BeginCast 
   /if n $Fail==1 /return 
   /doevents 
   /if n $DoAgain==1 /goto :BeginCast 
   /if n $Fail==1 /return 
   /if n $CTimer>0 /goto :TimerLoop 
   /delay 2 
   /doevents 
   /if n $DoAgain==1 /goto :BeginCast 
/return 


Sub WaitForStart 
   /cast $SpellSlot 
   :StartLoop 
   /doevents 
   /if n $Fail==1 /return 
   /if n $DoAgain==1 /return 
   /if n $StartCast==0 { 
      /goto :StartLoop 
   } 
   /varset CTimer "$CastTime"s 
/return 

Sub Event_Enraged 
   /if $target()=="TRUE" { 
      /if n $Combatstatus==1 { 
         /varset EnrageVar 1 
         /attack off 
      } 
      /varset EnrageVar 1 
   } 
/return 

Sub Event_Offrage 
   /if $target()=="TRUE" { 
      /if n $Combatstatus==1 { 
         /varset EnrageVar 0 
         /attack 
      
      } 
      /varset EnrageVar 0 
   } 
/return 

Sub Event_CastStart 
   /varset StartCast 1 
/return 

Sub Event_CastFizzle 
   /delay 2 
   /varset DoAgain 1 
/return 

Sub Event_CastInterrupt 
   /delay 2 
   /varset DoAgain 1 
/return 

Sub Event_FollowOff 
   /press esc 
   /press esc 
   /delay 5 
   /tell $MasterName Auto Follow Off. 
/return 

Sub Event_Sitting 
   /stand 
   /delay 2 
   /varset DoAgain 1 
/return 

Sub Event_CastTooFar 
   /varset Fail 1 
   /tell $MasterName Too far away. 
   /varset CTimer 0 
/return 

Sub Event_Distracted 
   /tell $MasterName I can't cast. I'm too distracted. 
   /varset Fail 1 
   /varset CTimer 0 
/return 

Sub Event_NoTarget 
   /varset Fail 1 
   /tell $MasterName I have no target to cast on. 
   /varset CTimer 0 
/return 

Sub Event_NoMem 
   /tell $MasterName That spell is not memed. 
   /varset Fail 1 
   /varset CTimer 0 
/return 

Sub Event_RootOff 
   /tell $MasterName Root has worn off. 
/return 

Sub Event_CastNoMana 
   /tell $MasterName OOM. Medding 16 seconds and trying again. 
   /sit off 
   /sit on 
   /delay 16s 
   /sit off 
   /varset DoAgain 1 
/return 

Sub Event_Stunned 
   /tell $MasterName Stunned waiting 3 seconds to try again. 
   /delay 3s 
   /varset DoAgain 1 
/return 

Sub Event_Recovered 
   /delay 2s 
   /varset DoAgain 1 
/return 

Sub Event_CastResist 
   /tell $MasterName Resisted. Trying again. 
   /varset DoAgain 1 
/return 

Sub Event_Collapse 
   /varset DoAgain 1 
/return 

Sub Event_NoLOS 
   /tell $MasterName I can't see my target. 
   /varset Fail 1 
   /varset CTimer 0 
/return 


Sub Tankheal 
          
    /if n $group($GroupMember)==$char(id) /press F1 
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
         /delay 4 
         /if n $spawn($group($GroupMember),hp,pct)<30 { 
    /stand 
    /call spellsub "healspell" 
    /delay 4 
    /return 
    } else 
         /g ( H 0/\/ %T  
         /sit off 
    /call SpellSub "chspell" 
         /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Casterheal 
    
         /if n $spawn($group($GroupMember),hp,pct)<50 { 
    /if n $group($GroupMember)==$char(id) /press F1 
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
    /stand 
    /call spellsub "healspell" 
    /delay 4 
    /press esc 
    /return 
    } else 
    /if n $t$v53!="0" /return  | Make sure you set the $v53 to the correct v## for $GroupMember 

    /if n $group($GroupMember)==$char(id) /press F1 
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
    /stand 
    /g Healing %T 
         /call SpellSub "hotspell" 
    /varset t$v53 24s 
         /if "$SitAfterCast"=="1" /sit on 
          
/return 



|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 


Sub Do-virtue
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Virtue on %T 
   /call SpellSub "Virtue" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-grpvirtue
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Hand of Virtue on %T's group 
   /call SpellSub "Hand of Virtue" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-symbol
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Symbol of Kazad on %T 
   /call SpellSub "Symbol of Kazad" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-grpsymbol
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Kazad's mark on %T's group
   /call SpellSub "Kazad's Mark" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-heal 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Quick Heal on %T 
   /call SpellSub "Supernal Remedy" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-ch 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Complete Heal on %T
   /call SpellSub "Complete Healing" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-hot 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Heal over time on %t. 
   /call SpellSub "Supernal Elixir" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-grpheal 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Group Heal Incoming
   /call SpellSub "Word of Replenishment" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-nuke 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Nuking the shit out of %t 
   /call SpellSub "Condemnation" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-undeadnuke 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Nuking the shit out of %t 
   /call SpellSub "Destroy Undead" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-pet 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Go-Go Gadget HammerPet on %t !
   /call SpellSub "Unswerving Hammer of Faith" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-ac 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting Ward of Gallantry on %t. 
   /call SpellSub "Ward of Gallantry" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return 

Sub Do-root 
   /varset CmdArrayNum 0 
   /if n $strlen("$p1")<=0 { 
      /assist $MasterName 
      /delay 3 
   } else /if n $strlen("$p2")<=0 { 
      /target "$p1" 
   } else /if n $strlen("$p3")<=0 { 
      /target "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /target "$p1 $p2 $p3" 
   } else /target "$p1 $p2 $p3 $p4" 
   /stand 
||||||||||||||||||||||||||||Begin Edit||||||||||||||||||||||||||||||||||||||| 
   /tell "$MasterName" Casting root on %t 
   /call SpellSub "Greater Immobilize" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
   /if "$SitAfterCast"=="1" /sit on 
/return