Paladin macro. Getting ideas, and showing what i have.

Help section from before the user variable changes that broke all macros

Moderator: MacroQuest Developers

macrotoon
a ghoul
a ghoul
Posts: 106
Joined: Wed Sep 18, 2002 4:38 pm

Paladin macro. Getting ideas, and showing what i have.

Post by macrotoon » Wed Jul 09, 2003 5:35 pm

Code: Select all

|pal-bot.mac  By MacroToon.  Ripped from Grimjacks genbot.mac
|Generic bot for casters and melee. 
|Make sure you edit this macro to add the commands you want. 
|Use the generic spell1 and spell2 commands and subs as examples. 
|for the most part you can copy/paste those and change the name of the spell 
|you want it to cast.  Also update AssHealer to 1 if you want it to do heals, and 
|update the spells used for Tankheal and Casterheal subs at the bottom. 
|I hope this explains enough. 
|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 AssHealer v61 
#define countdown v62 
#define CmdList v63 
#define MainTank v64
#define RangeMin v70 
#define RangeMax v71 
#define FastRange v72 
#define Combatstatus v73
#define LowHealthCheck v74
|**  LowHealthCheck keeps a tally of the number of members in a group
 below a %.  Then does Group Heal when needed.  **|
#define Fail v94 
#define DoAgain v95 
#define StartCast v96 
#define SpellSlot v97 
#define SpellName v98 
#define CastTime v99 
#define CTimer t39 
#chat tell 

Sub Main 
   /if n $strlen("$p0")<=0 { 
     /echo Usage: /macro generic <Master Name> 
     /endmacro 
   } 
   /varset MasterName $p0 
   /varset AssHealer 0 
   /varset RangeMin 10 
   /varset RangeMax 12 
   /varset FastRange 15 
   /varset Combatstatus 0 
   /varset IsMT 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) evac 
   /varset a(1,8) moveto 
   /varset a(1,9) sit 
   /varset a(1,10) stand 
   /varset a(1,11) sn 
   /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
   /varset a(1,26) mtank
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
|||||||||||||||||||||||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
   /if $MainTank=="1" /call KeepAgro
   }
|||||||||||||||||||||||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
   /varset LowHealthCheck 0
   /varcalc GroupMax $group(count)-1 
   /if n "$AssHealer"==0 /return 
   :GroupLoop 
   /doevents 
   /if n $spawn($group($GroupMember),hp,pct)<5 {
   /call LOH
   /delay 2s
   }
     /if n $spawn($group($GroupMember),hp,pct)<81 { 
       /if n $spawn($group($GroupMember),hp,pct)>=1 { 
     	/varadd LowHealthCheck 1
     	  /varset a(2,$LowHealthCheck) $spawn(group($GroupMember))
      	 /if n $LowHealthCheck>=3 /call Groupheal
      } 
   }
   /if n $GroupMember>=$GroupMax {
   	/if n $LowHealthCheck>=1 {
   	/for v80 1 $LowHealthCheck
   	     /if n $spawn($group($a(2,$v80),hp,pct))<81 { 
       /if n $spawn($group($a(2,$v80),hp,pct))>=1 {
   	/call PallyHeal }
   	/next v80
   	}
     }
   	/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 GetAgro
    /if n $char(ability,"taunt")==1 /doability "taunt"
    /if n $target(hp,pct)<5 /return
    /delay 25
    /call spellsub "cease"
    	/delay 2s
    	/call spellsub "desist"
    	/delay 5
	/if n $char(ability,"taunt")==1 /doability "taunt"
/return

Sub KeepAgro
|Check Health of mob if less than 5% return
     /if n $char(ability,"taunt")==1 /doability "taunt"    
     /if n $target(hp,pct)<5 /return
    /delay 25
| See if you are still the mobs target. Then press tab go to the last target.
    /assist
    /if $target()!=$char(id) {
	/sendkey tab down
	/sendkey tab up
	/delay 5
	/call spellsub "cease"
	/delay 2s
	/call spellsub "desist"
	/delay 5
        /if n $char(ability,"taunt")==1 /doability "taunt"
      }
/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 
   /if "$MainTank"=="1" /call GetAgro
/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-mtank
   /if n $strlen("$p1")<=0 /tell $MasterName Specify MT ON or OFF
   /if "$p1"=="on" /varset $maintank 1
   /if "$p1"=="off" /varset $maintank 0
/return

Sub Do-sn 
   /assist $MasterName 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /tell "$MasterName" Casting $p1 on %T 
      /call SpellSub $p1 
   } else /if n $strlen("$p3")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 on %T 
      /call SpellSub "$p1 $p2" 
   } else /if n $strlen("$p4)<=0 { 
      /tell "$MasterName" Casting $p1 $p2 $p3 on %T 
      /call SpellSub "$p1 $p2 $p3" 
   } else { 
      /tell "$MasterName" Casting $p1 $p2 $p3 $p4 on %T 
      /call SpellSub "$p1 $p2 $p3 $p4" 
   /stand 
   /if "$SitAfterCast"=="1" /sit on 
   /press esc 
/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 
   /dismount 
   /press F1 
   /tell $MasterName $char(mana,pct)m 
   /press esc 
/return 

Sub Do-follow 
   /target $MasterName 
   /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-evac 
   /tell $MasterName Moving to you and casting Evac! 
   /call Do-moveto evac $MasterName 
   /delay 2s 
   /call SpellSub "Evacuate" 
/return 

Sub Do-sit 
   /stand 
   /sit on 
/return 

Sub Do-stand 
   /stand 
/return 

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

Sub Do-duck 
   /press d 
   /varset Fail 1 
   /varset CTimer 0 
   /press d 
/return  

Sub Do-autoheal 
   /if n $strlen("$p1")<=0 { 
      /tell $MasterName Autoheal=$AssHealer 
      /return 
   } 
   /if $p1=="off" /varset AssHealer 0 
   /if $p1=="on" /varset AssHealer 1 
   /tell $MasterName Autoheal=$AssHealer 
/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 Groupheal 
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==1 /g Attempting GROUP HEAL for 660 Pt heal 
         /if n $Combatstatus==0 /g GROUP HEAL COMING
         /call SpellSub "Healing Wave of Prexus" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub PallyHeal 
         /if n $Combatstatus==1 /return
         /if n $group($a(2,$v80))==$char(id) /press F1 
         /if n $group($a(2,$v80))!=$char(id) /target id $group($a(2,$v80))
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==0 /g Celestial Cleansing on %t
         /call SpellSub "Celestial Cleansing" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub LOH
	 /if n $Combatstatus==0 /return
	 /if n $char(ability,"Lay On Hands")==0 {
	 /g "LOH DOWN 8("
	 /return
	 }
         /if n $group($GroupMember)==$char(id) /press F1 
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
         /stand 
         /g Tunare has given me the ability to Lay Hands On %t NOW I hope %S doesnt splat!
         /doability "Lay On Hands"
         /sendkey tab down
         /sendkey tab up
         /return
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||

Ive added some things like casting Group heals. Casting CC when down time is there. Also added get agro and keep agro subs. These will cast stun and taunt when needed, I hope. The idea is to check the mobs target. IF it isnt you then use stun. Taunt goes on all the time.

I havnt tested it yet, but hope to see it in action soon. Im waiting on getting my 2nd box up and going.

If anyone sees some mistakes(im sure theres plenty.) Please let me know.

Thanks,

MacroToon

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

I like it.

Post by grimjack » Thu Jul 10, 2003 12:45 am

It's looking good. I can't test it from where I am at the moment but I really like what you did for group heals.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

Call me a mercenary. Call me an assassin. Call me a villain. I am all that and more.

My name's John Gaunt, but out on the streets of Cynosure, I am called...
GrimJack

macrotoon
a ghoul
a ghoul
Posts: 106
Joined: Wed Sep 18, 2002 4:38 pm

Post by macrotoon » Sun Jul 13, 2003 10:17 pm

I found lots of errors when i finally got to test this out yesterday.

I had to re-write the part that checks peoples health. I just couldnt get it to work the other way.

Anyways. Heres what i have so far.

Im getting dumped to desktop when celestial cleansing is cast. any help would be appreciated

Thanks.

Code: Select all

|pal-bot.mac 
|Generic bot for casters and melee. 
|Make sure you edit this macro to add the commands you want. 
|Use the generic spell1 and spell2 commands and subs as examples. 
|for the most part you can copy/paste those and change the name of the spell 
|you want it to cast.  Also update AssHealer to 1 if you want it to do heals, and 
|update the spells used for Tankheal and Casterheal subs at the bottom. 
|I hope this explains enough. 
|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 AssHealer v61 
#define countdown v62 
#define CmdList v63 
#define MainTank v64
#define RangeMin v70 
#define RangeMax v71 
#define FastRange v72 
#define Combatstatus v73
#define LowHealthCheck v74
|  LowHealthCheck keeps a tally of the number of members in a group below a %.  Then does Group Heal when needed.
#define Fail v94 
#define DoAgain v95 
#define StartCast v96 
#define SpellSlot v97 
#define SpellName v98 
#define CastTime v99 
#define CTimer t39 
#chat tell 

Sub Main 
	/spewfile on
   /if n $strlen("$p0")<=0 { 
     /echo Usage: /macro generic <Master Name> 
     /endmacro 
   } 
   /varset MasterName $p0 
   /varset AssHealer 0 
   /varset RangeMin 10 
   /varset RangeMax 12 
   /varset FastRange 15 
   /varset Combatstatus 0 
   /varset IsMT 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) evac 
   /varset a(1,8) moveto 
   /varset a(1,9) sit 
   /varset a(1,10) stand 
   /varset a(1,11) sn 
   /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
   /varset a(1,26) mtank
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
|||||||||||||||||||||||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
   /if $MainTank=="1" /call KeepAgro
   }
|||||||||||||||||||||||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
   /varset LowHealthCheck 0
   /varcalc GroupMax $group(count)-1 
   /if n "$AssHealer"==0 /return 
   :GroupLoop 
   /doevents 
   /if n $spawn($group($GroupMember),hp,pct)<5 {
   /call LOH
   /delay 2s
   }
     /if n $spawn($group($GroupMember),hp,pct)<81 /if n $spawn($group($GroupMember),hp,pct)>=1 {
     /varset a(2,$LowHealthCheck) $spawn($group($GroupMember),name)  
     /varadd LowHealthCheck 1
     /echo 1
     }
     /if n $LowHealthCheck>=3 /call Groupheal
   /if n $GroupMember>=$GroupMax /if n $LowHealthCheck>=1 {
   	/for v80 0 $LowHealthCheck
   	/g "$a(2,$v80) getting healing"
   	/delay 3s
   	     /if n $spawn($id($a(2,$v80)),hp,pct)<81 /if n $spawn($id($a(2,$v80)),hp,pct))>=1 /call PallyHeal "$a(2,$v80)"
  	/next v80
   	}
     /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 GetAgro
    /if n $char(ability,"taunt")==1 /doability "taunt"
    /if n $target(hp,pct)<5 /return
    /delay 25
    /call spellsub "cease"
    	/delay 2s
    	/call spellsub "desist"
    	/delay 5
	/if n $char(ability,"taunt")==1 /doability "taunt"
/return

Sub KeepAgro
|Check Health of mob if less than 5% return
     /if n $char(ability,"taunt")==1 /doability "taunt"    
     /if n $target(hp,pct)<5 /return
    /delay 25
| See if you are still the mobs target. Then press tab go to the last target.
    /assist
    /if $target()!=$char(id) {
	/sendkey down tab
	/sendkey up tab
	/delay 5
	/call spellsub "cease"
	/delay 2s
	/call spellsub "desist"
	/delay 5
        /if n $char(ability,"taunt")==1 /doability "taunt"
    } else  /sendkey down tab
    /sendkey up tab
/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 
   /if "$MainTank"=="1" /call GetAgro
/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-mtank
   /if n $strlen("$p1")<=0 /tell $MasterName Specify MT ON or OFF
   /if "$p1"=="on" /varset $maintank 1
   /if "$p1"=="off" /varset $maintank 0
/return

Sub Do-sn 
   /assist $MasterName 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /tell "$MasterName" Casting $p1 on %T 
      /call SpellSub $p1 
   } else /if n $strlen("$p3")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 on %T 
      /call SpellSub "$p1 $p2" 
   } else /if n $strlen("$p4")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 $p3 on %T 
      /call SpellSub "$p1 $p2 $p3" 
   } else { 
      /tell "$MasterName" Casting $p1 $p2 $p3 $p4 on %T 
      /call SpellSub "$p1 $p2 $p3 $p4" 
   /stand 
   /if "$SitAfterCast"=="1" /sit on 
   /press esc 
/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 
   /dismount 
   /press F1 
   /tell $MasterName $char(mana,pct)m 
   /press esc 
/return 

Sub Do-follow 
   /target $MasterName 
   /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-evac 
   /tell $MasterName Moving to you and casting Evac! 
   /call Do-moveto evac $MasterName 
   /delay 2s 
   /call SpellSub "Evacuate" 
/return 

Sub Do-sit 
   /stand 
   /sit on 
/return 

Sub Do-stand 
   /stand 
/return 

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

Sub Do-duck 
   /press d 
   /varset Fail 1 
   /varset CTimer 0 
   /press d 
/return  

Sub Do-autoheal 
   /if n $strlen("$p1")<=0 { 
      /tell $MasterName Autoheal=$AssHealer 
      /return 
   } 
   /if $p1=="off" /varset AssHealer 0 
   /if $p1=="on" /varset AssHealer 1 
   /tell $MasterName Autoheal=$AssHealer 
/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 Groupheal 
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==1 /g Attempting GROUP HEAL for 660 Pt heal 
         /if n $Combatstatus==0 /g GROUP HEAL COMING
         /call SpellSub "Healing Wave of Prexus" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub PallyHeal 
	/echo got to pally heal
         /if n $Combatstatus==1 /return
         /if "$p1"=="$char(name)" /press F1 
         /if "$p1"=="$char(name)" /target "$a(2,$v80)"
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==0 /g Celestial Cleansing on %t
         /call SpellSub "Celestial Cleansing" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub LOH
	 /if n $Combatstatus==0 /return
	 /if n $char(ability,"Lay Hands")==0 {
	 /g "LOH DOWN 8("
	 /return
	 }
         /if n $group($GroupMember)==$char(id) /press F1 
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
         /stand 
         /g Tunare has given me the ability to Lay Hands On %t NOW I hope %S doesnt splat!
         /doability "Lay Hands"
         /sendkey tab down
         /sendkey tab up
         /return
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Smilies.

Post by grimjack » Mon Jul 14, 2003 12:46 am

If you could edit the post and disable smilies it would be a great help. Also, I posted a new version of the generic bot code recently that has automatic spell switching and is a bit easier to edit than the old one. If you don't mind I may use some of your ideas for group heals in a future version of the healer include. Eventualy I plan on having the bot figure out the class of the player and maybe even the level and use abilities and spells based off of that (If I ever get time). I only play a rogue and a wizard , however, and ideas I can get for other classes would be great. With a few of us working togather I think we could come up with one hell of a bot that can do just about anything.

Thanks
GrimJack
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

Call me a mercenary. Call me an assassin. Call me a villain. I am all that and more.

My name's John Gaunt, but out on the streets of Cynosure, I am called...
GrimJack

macrotoon
a ghoul
a ghoul
Posts: 106
Joined: Wed Sep 18, 2002 4:38 pm

Post by macrotoon » Mon Jul 14, 2003 1:17 am

Sorry about the smilies..>I Always for get to disable them.

:? 8) 8) :twisted: :cry: :cry: :cry: :oops: :) :) :D :shock:


I would love to work with you on the bot.

My accounts right now include a paladin 60.
both a shaman, and a chanter in the mid 50's.
The chanter is not an original char of mine. So actually not able to help much with the spell line up, but will be more than willing to help with the pally and shammy.

I'll take a look at your new format.

I have pretty much got this one working so far. Done some more tweaking and such. Heres waht i have now.

macrotoon
a ghoul
a ghoul
Posts: 106
Joined: Wed Sep 18, 2002 4:38 pm

Post by macrotoon » Mon Jul 14, 2003 1:18 am

Code: Select all


|pal-bot.mac 
|Generic bot for casters and melee. 
|Make sure you edit this macro to add the commands you want. 
|Use the generic spell1 and spell2 commands and subs as examples. 
|for the most part you can copy/paste those and change the name of the spell 
|you want it to cast.  Also update AssHealer to 1 if you want it to do heals, and 
|update the spells used for Tankheal and Casterheal subs at the bottom. 
|I hope this explains enough. 
|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 AssHealer v61 
#define countdown v62 
#define CmdList v63 
#define MainTank v64
#define RangeMin v70 
#define RangeMax v71 
#define FastRange v72 
#define Combatstatus v73
#define LowHealthCheck v74
|  LowHealthCheck keeps a tally of the number of members in a group below a %.  Then does Group Heal when needed.
#define Fail v94 
#define DoAgain v95 
#define StartCast v96 
#define SpellSlot v97 
#define SpellName v98 
#define CastingTime v99 
#define HealTimer t38
#define CTimer t39 
#chat tell 

Sub Main 
	/spewfile on
   /if n $strlen("$p0")<=0 { 
     /echo Usage: /macro generic <Master Name> 
     /endmacro 
   } 
   /varset MasterName $p0 
   /varset AssHealer 0 
   /varset RangeMin 10 
   /varset RangeMax 12 
   /varset FastRange 15 
   /varset Combatstatus 0 
   /varset MainTank 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) evac 
   /varset a(1,8) moveto 
   /varset a(1,9) sit 
   /varset a(1,10) stand 
   /varset a(1,11) sn 
   /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
   /varset a(1,26) mtank
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
|||||||||||||||||||||||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
   /if $MainTank=="1" /call KeepAgro
   }
|||||||||||||||||||||||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
   /varset LowHealthCheck 0
   /varcalc GroupMax $group(count)-1 
   /if n "$AssHealer"==0 /return 
   :GroupLoop 
   /doevents 
   /if n $spawn($group($GroupMember),hp,pct)<5 {
   /call LOH
   /delay 2s
   }
     /if n $spawn($group($GroupMember),hp,pct)<81 /if n $spawn($group($GroupMember),hp,pct)>=1 {
     /varset a(2,$LowHealthCheck) $spawn($group($GroupMember),name)  
     /varadd LowHealthCheck 1
     /echo 1
     }
     /if n $LowHealthCheck>=3 /call Groupheal
   /if n $GroupMember>=$GroupMax /if n $LowHealthCheck>=1 {
   	/varset v80 $LowHealthCheck
   	/varcalc v80 $v80-1
   	:pallyloop
   	/delay 3s
   	     /if n $spawn($id($a(2,$v80)),hp,pct)<81 /if n $spawn($id($a(2,$v80)),hp,pct))>=1 /call PallyHeal "$a(2,$v80)"
  	/echo done 2
  	/varcalc v80 $v80-1
  	/if n $v80<=0 /return 
  	/goto :pallyloop
  	/echo done 3 doing return
  	/return
   	}
     /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 GetAgro
    /if n $char(ability,"taunt")==1 /doability "taunt"
    /if n $target(hp,pct)<5 /return
    /delay 25
    /call spellsub "cease"
    	/delay 2s
    	/call spellsub "desist"
    	/delay 5
	/if n $char(ability,"taunt")==1 /doability "taunt"
/return

Sub KeepAgro
|Check Health of mob if less than 5% return
     /if n $char(ability,"taunt")==1 /doability "taunt"    
     /if n $target(hp,pct)<5 /return
    /delay 25
| See if you are still the mobs target. Then press tab go to the last target.
    /assist
    /if $target()!=$char(id) {
	/sendkey down tab
	/sendkey up tab
	/delay 5
	/call spellsub "cease"
	/delay 2s
	/call spellsub "desist"
	/delay 5
        /if n $char(ability,"taunt")==1 /doability "taunt"
    } else  /sendkey down tab
    /sendkey up tab
/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 
   /if "$MainTank"=="1" /call GetAgro
/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-mtank
   /if n $strlen("$p1")<=0 /tell $MasterName Specify MT ON or OFF
   /if "$p1"=="on" /varset $maintank 1
   /if "$p1"=="off" /varset $maintank 0
/return

Sub Do-sn 
   /assist $MasterName 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /tell "$MasterName" Casting $p1 on %T 
      /call SpellSub $p1 
   } else /if n $strlen("$p3")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 on %T 
      /call SpellSub "$p1 $p2" 
   } else /if n $strlen("$p4")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 $p3 on %T 
      /call SpellSub "$p1 $p2 $p3" 
   } else { 
      /tell "$MasterName" Casting $p1 $p2 $p3 $p4 on %T 
      /call SpellSub "$p1 $p2 $p3 $p4" 
   /stand 
   /if "$SitAfterCast"=="1" /sit on 
   /press esc 
/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 
   /dismount 
   /press F1 
   /tell $MasterName $char(mana,pct)m 
   /press esc 
/return 

Sub Do-follow 
   /target $MasterName 
   /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-evac 
   /tell $MasterName Moving to you and casting Evac! 
   /call Do-moveto evac $MasterName 
   /delay 2s 
   /call SpellSub "Evacuate" 
/return 

Sub Do-sit 
   /stand 
   /sit on 
/return 

Sub Do-stand 
   /stand 
/return 

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

Sub Do-duck 
   /press d 
   /varset Fail 1 
   /varset CTimer 0 
   /press d 
/return  

Sub Do-autoheal 
   /if n $strlen("$p1")<=0 { 
      /tell $MasterName Autoheal=$AssHealer 
      /return 
   } 
   /if $p1=="off" /varset AssHealer 0 
   /if $p1=="on" /varset AssHealer 1 
   /tell $MasterName Autoheal=$AssHealer 
/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 CastingTime "$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 "$CastingTime"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 Groupheal 
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==1 /g Attempting GROUP HEAL for 660 Pt heal 
         /if n $Combatstatus==0 /g GROUP HEAL COMING
         /call SpellSub "Healing Wave of Prexus" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub PallyHeal 
         /if n $Combatstatus==1 /return
         /if n $HealTimer>=1 /return
         /if "$p1"=="$char(name)" /press F1 
         /if "$p1"!="$char(name)" /target "$p1"
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==0 /g Celestial Cleansing on %t
         /call SpellSub "Celestial Cleansing" 
         /varset HealTimer 300
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub LOH
	 /if n $Combatstatus==0 /return
	 /if n $char(ability,"Lay Hands")==0 {
	 /g "LOH DOWN 8("
	 /return
	 }
         /if n $group($GroupMember)==$char(id) /press F1 
         /if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
         /stand 
         /g Tunare has given me the ability to Lay Hands On %t NOW I hope %S doesnt splat!
         /doability "Lay Hands"
         /sendkey tab down
         /sendkey tab up
         /return
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||


macrotoon
a ghoul
a ghoul
Posts: 106
Joined: Wed Sep 18, 2002 4:38 pm

Post by macrotoon » Mon Jul 14, 2003 1:22 am

Another thing i did was during the cast of celestial cleansing. I put a 30 second timer in there. If it calls for it to be cast again you wont spam the group because of the recast time not being met.

GoatFoot
a lesser mummy
a lesser mummy
Posts: 68
Joined: Fri Jan 17, 2003 1:48 am

Post by GoatFoot » Mon Jul 14, 2003 1:48 am

might want to edit the original post with indications of what you changed - diff is your friend - rather than adding new posts.

just a suggestion

User avatar
grimjack
Macro Author
Macro Author
Posts: 525
Joined: Thu Nov 07, 2002 6:51 am
Contact:

Update

Post by grimjack » Mon Jul 14, 2003 2:19 am

I just updated my genbot again with a variation on your paladin code for heals/group heals. Let me know what you think. I'll update the spell code soon to make it check that the gem is ready before using it. It should not spam the group as it is but it will spam the bot screen with not ready messages.

Just change /varset IsPally 0 to /varset IsPally 1.

Thanks
GrimJack
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

Call me a mercenary. Call me an assassin. Call me a villain. I am all that and more.

My name's John Gaunt, but out on the streets of Cynosure, I am called...
GrimJack

macrotoon
a ghoul
a ghoul
Posts: 106
Joined: Wed Sep 18, 2002 4:38 pm

Post by macrotoon » Mon Jul 14, 2003 9:01 am

The reason i post them in progression is so i have a reference of where i started. Once we get it nailed down i'll post in the depot forum, and add the finished code to the first post. Thanks for the tip though.

I got LOH working i think. Also fixed a few bugs in there that was causing different issues.

I do have one issue with attack mode.

When im attacking i get an error something like "cannot find a differentiator in "tell," . Any ideas?

Code: Select all

|pal-bot.mac 
|Generic bot for casters and melee. 
|Make sure you edit this macro to add the commands you want. 
|Use the generic spell1 and spell2 commands and subs as examples. 
|for the most part you can copy/paste those and change the name of the spell 
|you want it to cast.  Also update AssHealer to 1 if you want it to do heals, and 
|update the spells used for Tankheal and Casterheal subs at the bottom. 
|I hope this explains enough. 
|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 AssHealer v61 
#define countdown v62 
#define CmdList v63 
#define MainTank v66
#define RangeMin v70 
#define RangeMax v71 
#define FastRange v72 
#define Combatstatus v73
#define LowHealthCheck v74
|  LowHealthCheck keeps a tally of the number of members in a group below a %.  Then does Group Heal when needed.
#define Fail v94 
#define DoAgain v95 
#define StartCast v96 
#define SpellSlot v97 
#define SpellName v98 
#define CastingTime v99 
#define LOHTimer t37
#define HealTimer t38
#define CTimer t39 
#chat tell 

Sub Main 
	/spewfile on
   /if n $strlen("$p0")<=0 { 
     /echo Usage: /macro generic <Master Name> 
     /endmacro 
   } 
   /varset MasterName $p0 
   /varset AssHealer 0 
   /varset RangeMin 10 
   /varset RangeMax 12 
   /varset FastRange 15 
   /varset Combatstatus 0 
   /varset MainTank 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) evac 
   /varset a(1,8) moveto 
   /varset a(1,9) sit 
   /varset a(1,10) stand 
   /varset a(1,11) sn 
   /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
   /varset a(1,26) mtank
   /varset a(1,27) bmb
|||||||||||||||||||||||Personal Commands||||||||||||||||||||||||||||||||| 
|||||||||||||||||||||||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
   /if $MainTank=="1" /call KeepAgro
   }
|||||||||||||||||||||||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
   /varset LowHealthCheck 0
   /varcalc GroupMax $group(count)-1 
   /if n "$AssHealer"==0 /return 
   :GroupLoop 
   /doevents 
   /if n $spawn($group($GroupMember),hp,pct)<5 {
   /varset a(2,$LowHealthCheck) $spawn($group($GroupMember),name)
   /call LOH $a(2,$LowHealthCheck)
   /delay 2s
   }
     /if n $spawn($group($GroupMember),hp,pct)<81 /if n $spawn($group($GroupMember),hp,pct)>=1 {
     /varset a(2,$LowHealthCheck) $spawn($group($GroupMember),name)  
     /varadd LowHealthCheck 1
     /echo 1
     }
     /if n $LowHealthCheck>=3 /call Groupheal
   /if n $GroupMember>=$GroupMax /if n $LowHealthCheck>=1 {
   	/varset v80 $LowHealthCheck
   	/varcalc v80 $v80-1
   	:pallyloop
   	/delay 3s
   	     /if n $spawn($id($a(2,$v80)),hp,pct)<81 /if n $spawn($id($a(2,$v80)),hp,pct))>=1 /call PallyHeal "$a(2,$v80)"
  	/echo done 2
  	/varcalc v80 $v80-1
  	/if n $v80<=0 /return 
  	/goto :pallyloop
  	/echo done 3 doing return
  	/return
   	}
     /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 GetAgro
    /if n $char(ability,"taunt")!=-2 /doability "taunt"
    /if n $target(hp,pct)<5 /return
    /delay 25
    /call spellsub "cease"
    	/delay 2s
    	/call spellsub "desist"
    	/delay 5
    /if n $char(ability,"taunt")!=-2 /doability "taunt"
/return

Sub KeepAgro
|Check Health of mob if less than 5% return
    /if n $char(ability,"taunt")!=-2 /doability "taunt"
     /if n $target(hp,pct)<5 /return
    /delay 25
| See if you are still the mobs target. Then press tab go to the last target.
    /assist
    /if $target()!=$char(id) {
	/press tab
	/delay 5
	/call spellsub "cease"
	/delay 2s
	/call spellsub "desist"
	/delay 5
           /if n $char(ability,"taunt")!=-2 /doability "taunt"
    } else  /press tab
/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 
   /if "$MainTank"=="1" /call GetAgro
/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-mtank
   /if n $strlen("$p1")<=0 /tell $MasterName Specify MT ON or OFF
   /if "$p1"=="on" /varset MainTank 1
   /if "$p1"=="off" /varset MainTank 0
/return

Sub Do-sn 
   /assist $MasterName 
   /if n $strlen("$p1")<=0 { 
      /return 
   } else /if n $strlen("$p2")<=0 { 
      /tell "$MasterName" Casting $p1 on %T 
      /call SpellSub $p1 
   } else /if n $strlen("$p3")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 on %T 
      /call SpellSub "$p1 $p2" 
   } else /if n $strlen("$p4")<=0 { 
      /tell "$MasterName" Casting $p1 $p2 $p3 on %T 
      /call SpellSub "$p1 $p2 $p3" 
   } else { 
      /tell "$MasterName" Casting $p1 $p2 $p3 $p4 on %T 
      /call SpellSub "$p1 $p2 $p3 $p4" 
   /stand 
   /if "$SitAfterCast"=="1" /sit on 
   /press esc 
/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 
   /dismount 
   /press F1 
   /tell $MasterName $char(mana,pct)m 
   /press esc 
/return 

Sub Do-follow 
   /target $MasterName 
   /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-evac 
   /tell $MasterName Moving to you and casting Evac! 
   /call Do-moveto evac $MasterName 
   /delay 2s 
   /call SpellSub "Evacuate" 
/return 

Sub Do-sit 
   /stand 
   /sit on 
/return 

Sub Do-stand 
   /stand 
/return 

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

Sub Do-duck 
   /dismount
   /delay 5
   /press d 
   /varset Fail 1 
   /varset CTimer 0 
   /press d 
/return  

Sub Do-autoheal 
   /if n $strlen("$p1")<=0 { 
      /tell $MasterName Autoheal=$AssHealer 
      /return 
   } 
   /if $p1=="off" /varset AssHealer 0 
   /if $p1=="on" /varset AssHealer 1 
   /tell $MasterName Autoheal=$AssHealer 
/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 Do-bmb

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 CastingTime "$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 "$CastingTime"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 Groupheal 
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==1 /g Attempting GROUP HEAL for 660 Pt heal 
         /if n $Combatstatus==0 /g GROUP HEAL COMING
         /call SpellSub "Healing Wave of Prexus" 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub PallyHeal 
         /if n $Combatstatus==1 /return
         /if n $HealTimer>=1 /return
         /if "$p1"=="$char(name)" /press F1 
         /if "$p1"!="$char(name)" /target "$p1"
         /stand 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
||| Edit Edit heal message 
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if n $Combatstatus==0 /g Celestial Cleansing on %t
         /call SpellSub "Celestial Cleansing" 
         /varset HealTimer 300
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
         /if "$SitAfterCast"=="1" /sit on 
         /press esc 
/return 

Sub LOH
	 /if n $Combatstatus==0 /return
	 /if n $char(ability,"107")==-2 {
	 /if n $LOHTimer>=1 /return
	 /g "LOH DOWN 8("
	 /varset LOHTimer 6000
	 /return
	 }
         /if "$p1"=="$char(name)" /press F1 
         /if "$p1"!=$char(id) /target "$p1"
         /stand 
         /g Tunare has given me the ability to Lay Hands On %t NOW I hope %S doesnt splat!
         /doability "107"
         /sendkey tab down
         /sendkey tab up
         /return
|||||||||||||||||||||||Personal Commands|||||||||||||||||||||||||||||||||



SMILES DISABLED 8)