TEST: genbot.mac w/ 3D Follow

A forum for you to dump all the macros you create, allowing users to use, modify, and comment on your work.

Moderator: MacroQuest Developers

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

TEST: genbot.mac w/ 3D Follow

Post by ml2517 » Fri Jan 09, 2004 8:23 pm

This is a version of the popular genbot.mac with 3D Follow with Queueing built in. The 'follow' command was replaced (This was the crappy built in EQ follow command) with the 3D follow routines.

I also added a 'pause' command that will continue to track the person you are following even if you aren't with them. To unpause just issue another pause.

As always, issue a 'stop' to stop following completely.

Issuing a 'stay' will stop following.

I left the old 'afollow' command in the script.

Using the 'sit' command will currently stop following. I'm debating whether or not to do a pause instead and then unpause when you stand.

I'm going to leave the /echo verbosity from my script in at the moment so you can tell me if/when you see problems. It doesn't really spam anyways.

Setting this up in a different thread to get feedback from people how this is working. Please let me know of any problems you encounter. If/when this is given the thumbs up by a bunch of people I'll talk to Lasher about replacing the current genbot with this one.

** One special note that you will notice. Any /delay # that was currently in genbot was replaced with /call Delay #. The delay is the same but I use this sub to do things while you'd normally be waiting around doing nothing at all anyways. When/if you decide to integrate things into personal.inc make sure you /call Delay # instead of /delay # so that the follow tracking code can keep track of your follow target's movements.

*** Also the line in red below sets up three things in the advpath.inc script:
First parameter is 0 don't use fast look, 1 use fast look

Second parameter basically means "Take my character's speed and divide it by this # and if I am within that distance from the next follow location assume that I've made it there." This was used in hopes of scaling with your characters speed.

Third parameter is the distance you'd like to stay away from the followee.

In short: If you are getting the strange running back and forth thing try taking the second paramater a little lower.

In the future I'll have this added to the genbot ini file.

Thanks. :D

-----------------------------------------------------------

genbot.mac

Code: Select all

|genbot.mac 
|Generic bot macro for any class. 
|Version 9.0e
|Date:1/18/2004 5:00am 
| 
| 
| 
| 
#define personal-array 0 
#define botcore-array 1 
#define botcombat-array 2 
#define botspell-array 3 
#define bothealer-array 4 
#include botcore.inc 
#include botspell.inc 
#include botcombat.inc 
#include bothealer.inc 
#include personal.inc 
#include advpath.inc 
#turbo

Sub Main 
   /zapvars 
   /declare MasterCount global 
   /declare ArrayCore global 
   /declare ArraySpell global 
   /declare ArrayComb global 
   /declare ArrayHeal global 
   /declare ArrayPers global 
   /declare IniFile global 
   /varset IniFile "genbot_" 
   /varcat IniFile $char(name) 
   /varcat IniFile ".ini" 
   |Core variables 
   /call SetupCoreVars 
   |Spell Module Variables 
   /call SetupSpellVars 
   |Combat Module Variables. 
   /call SetupCombatVars 
   |Healer Module Variables. 
   /call SetupHealerVars 
   |Personal Module Variables. 
   /call SetupPersonalVars 
   /if $defined(Param0)==FALSE { 
      /echo Usage: /macro generic <Master Name1> <Master Name2>... 
      /endmacro 
   } 
   |Advanced Path Module Variables. 
   /call InitAPFVars 1 15 20
   /varset SilentFlag 0 

   /varset MasterCount 0 
   :MasterLoop 
   /if $defined(Param$int(@MasterCount))==TRUE { 
      /varset MName($int(@MasterCount)) @Param$int(@MasterCount) 
      /varadd MasterCount 1 
      /goto :MasterLoop 
   } 
   /varsub MasterCount 1 
   /varset MasterName @MName(0) 
|||This is where the commands the bot can take is set up 
   /call CoreCommands 
   /call SpellCommands 
   /call CombatCommands 
   /call HealerCommands 
   /call PersonalCommands 
   :MainLoop 
   /doevents

   |||Sub from bothealer.inc 
   /call CheckGrpHealth
   ||| Sub From bothealer.inc 
   /call PalGrpHealChk 
   ||| Sub From bothealer.inc 
   /call PalHealChk 
   |||Sub from botcombat.inc 
   /call Combatcheck 
   |||Sub from botcombat.inc 
   /if n @Combatstatus==0 { 
      /if n $DoTraps==1 /call TrapFinder 
   } 
   /if n @DoArchery!=1 { 
      /if n @Combatstatus==1 /call RangeSub 
   } 
   /if n @Combatstatus==1 /call MeleeAbility 
   /if n @Combatstatus!=1 { 
      /if n @Supportstatus!=1 { 
         /if n @IsAnchored==0 { 
            /if n @Afollow==1 { 
               /target @FollowTarget 
               /call Do-moveto foo @FollowTarget 
            } 
            /call AdvPathPoll
         } 
      } 
      /if n @IsAnchored==1 { 
         /if n $distance(@AnchorX,@AnchorY)>@AnchorRadius { 
            /call MoveToAnchor 
         } else /if n @SitAfterCast==1 { 
            /if $char(state)==STAND /sit 
         } 
      } 
   } 
   /if $combat==TRUE { 
      /if $target()==TRUE { 
         /if "$target(name,clean)"!="$char(name)" { 
            /if n @AutoEngage==1 {
                /if n @Combatstatus!=1 /if n @FollowFlag==1 /call Move 0
                /varset Combatstatus 1 
            }
         } 
      } 
   } 
   |||Sub from personal.inc 
   /call PersonalMain 
   |||Sub from advpath.inc 
   /if n @Combatstatus!=1 { 
       /if n @Supportstatus!=1 { 
           /if n @IsAnchored==0 { 
               /call AdvPathPoll
           }
       }
   }

   /doevents 
   /varset CmdArrayNum 0 
   /goto :MainLoop 
/return 
Last edited by ml2517 on Sun Jan 18, 2004 6:38 am, edited 13 times in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Fri Jan 09, 2004 8:25 pm

botcombat.inc

Code: Select all

|botcombat.inc 
|Bot combat module. 
|Version 9.0d
|Date:1/13/2004 10:00pm 
| 
| 
| 
| 

#Event Enraged "has become ENRAGED" 
#Event Offrage "is no longer enraged" 
#Event FoundFloorTrap "You sense a trap in this direction" 
#Event FoundBoxTrap "You are certain that" 
#Event DisarmTrap "You have disarmed" 
#Event GettingHit " YOU for " 
#Event AttackedMiss " YOU, but " 
#Event Slash "You slash" 
#Event Hit "You Hit" 
#Event Bash "You Bash" 
#Event Pierce "You pierce" 

Sub CombatCommands 
   /varset Commands(2,0) attack 
   /varset Commands(2,1) noattack 
   /varset Commands(2,2) backstab 
   /varset Commands(2,3) taunt 
   /varset Commands(2,4) evade 
   /varset Commands(2,5) slam 
   /varset Commands(2,6) bash 
   /varset Commands(2,7) getbehind 
   /varset Commands(2,8) kick 
   /varset Commands(2,9) flyingkick 
   /varset Commands(2,10) disarm 
   /varset Commands(2,11) traps 
   /varset Commands(2,12) beagg 
   /varset Commands(2,13) puller 
   /varset Commands(2,14) autoengage 
   /varset Commands(2,15) behind 
   /varset ArrayComb 15 
/return 

Sub TellCmds-combat 
   /declare counter local 
   /declare cmds local 
   /varset cmds "" 
   /for counter 0 to @ArrayComb 
      /varcat cmds "@Commands(2,@counter), " 
   /next counter 
   /call ChatOut 2 @MasterName "@cmds." 
/return 

||||||||||||||||||||||||||||||||||||| 
Sub SetupCombatVars 
   /declare CmdList-combat global 
   /declare DoTraps global 
   /declare DoKick global 
   /declare DoBackstab global 
   /declare DoTaunt global 
   /declare DoEvade global 
   /declare DoSlam global 
   /declare DoBash global 
   /declare DoFlyingKick global 
   /declare DoDisarm global 
   /declare DoArchery global 
   /declare EnrageVar global 
   /declare Aggressive global 
   /declare IsPuller global 
   /declare AutoEngage global 
   /varset DoBackstab $ini(@IniFile,"Combat",DoBackstab) 
   /if "@DoBackstab"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoBackstab 0 
      /varset DoBackstab 0 
   } 
   /varset DoTaunt $ini(@IniFile,"Combat",DoTaunt) 
   /if "@DoTaunt"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoTaunt 0 
      /varset DoTaunt 0 
   } 
   /varset DoEvade $ini(@IniFile,"Combat",DoEvade) 
   /if "@DoEvade"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoEvade 0 
      /varset DoEvade 0 
   } 
   /varset DoSlam $ini(@IniFile,"Combat",DoSlam) 
   /if "@DoSlam"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoSlam 0 
      /varset DoSlam 0 
   } 
   /varset DoBash $ini(@IniFile,"Combat",DoBash) 
   /if "@DoBash"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoBash 0 
      /varset DoBash 0 
   } 
   /varset DoKick $ini(@IniFile,"Combat",DoKick) 
   /if "@DoKick"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoKick 0 
      /varset DoKick 0 
   } 
   /varset DoFlyingKick $ini(@IniFile,"Combat",DoFlyingKick) 
   /if "@DoFlyingKick"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoFlyingKick 0 
      /varset DoFlyingKick 0 
   } 
   /varset DoDisarm $ini(@IniFile,"Combat",DoDisarm) 
   /if "@DoDisarm"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoDisarm 0 
      /varset DoDisarm 0 
   } 
   /varset DoTraps $ini(@IniFile,"Combat",DoTraps) 
   /if "@DoTraps"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoTraps 0 
      /varset DoTraps 0 
   } 
   /varset DoArchery $ini(@IniFile,"Combat",DoArchery) 
   /if "@DoArchery"=="NOTFOUND" { 
      /ini "@IniFile" Combat DoArchery 0 
      /varset DoArchery 0 
   } 
   /varset Aggressive $ini(@IniFile,"Combat",Aggressive) 
   /if "@Aggressive"=="NOTFOUND" { 
      /ini "@IniFile" Combat Aggressive 0 
      /varset Aggressive 0 
   } 
   /varset AutoEngage $ini(@IniFile,"Combat",AutoEngage) 
   /if "@AutoEngage"=="NOTFOUND" { 
      /ini "@IniFile" Combat AutoEngage 0 
      /varset AutoEngage 0 
   } 
   |Non ini vars 
   /varset IsPuller 0 
   /declare Oc global
   /declare Om global
   /declare dir global
   /declare dir1 global
   /declare dir2 global
   /declare dist1 global
   /declare dist2 global
   /declare GetBehindTry timer
   /declare GetBehindPause timer
   /varset GetBehindPause 0
/return 

|Combatcheck 
|Used to check if attack is on and should not be. 
|Usage /call Combatcheck. 
Sub Combatcheck 
   /if n @EnrageVar==1 { 
      /if $target()==TRUE { 
         /return 
      } else { 
         /varset EnrageVar 0 
         /varset Combatstatus 0 
         /attack off 
         /return 
      } 
   } 
   /if n @Supportstatus==1 { 
      /if $target()==FALSE { 
         /call Delay 5
         /if $target()==FALSE { 
            /varset Supportstatus 0 
         } 
      } 
   } 

   /if n @Combatstatus==1 { 
      /if $target()==FALSE { 
         /call Delay 5
         /if $target()==FALSE { 
            /varset Combatstatus 0 
            /varset Supportstatus 0 
            /attack off 
            /return 
         } 
      } 
      /if $char(casting)==TRUE /return 
      /if n @EnrageVAr==1 /return 
      /if n @DoArchery!=1 { 
         /if $combat==FALSE /attack on 
      } 
   } 
/return 

|MeleeAbility 
|Used to do melee abilities if vars are set to. 
|Usage /call MeleeAbility 
Sub MeleeAbility 
   /if $char(casting)==TRUE /return 
   /if n @DoBash==1 { 
      /if n $char(ability,"Bash")>0 { 
      /doability "Bash" 
      } 
   } 
   /if n @DoBackstab==1 { 
      /if n $distance($calc($target(y)-$cos($target(heading))*10),$calc($target(x)-$sin($target(heading))*10))<9 { 
         /if "$char(state)"=="SIT" /stand 
         /face fast 
         /call Delay 3 
         /doability "Backstab" 
      } 
   } 
   /if n @DoSlam==1 { 
      /if n $char(ability,"Slam")>0 { 
         /if "$char(state)"=="SIT" /stand 
         /face fast 
         /call Delay 2 
         /doability "Slam" 
      } 
   } 
   /if n @DoEvade==1 { 
      /if n $char(ability,"Hide")>0 { 
         /attack off 
         /doability "Hide" 
         /attack on 
      } 
   } 
   /if n @DoTaunt==1 { 
      /if n $char(ability,"Taunt")>0 { 
         /doability "Taunt" 
      } 
   } 
   /if n @DoKick==1 { 
      /if n $char(ability,"Kick")>0 { 
         /if "$char(state)"=="SIT" /stand 
         /face fast 
         /doability "Kick" 
      } 
   } 
   /if n @DoFlyingKick==1 { 
      /if n $char(ability,"Flying Kick")>0 { 
         /if "$char(state)"=="SIT" /stand 
         /face fast 
         /doability "Flying Kick" 
      } 
   } 
   /if n @DoDisarm==1 { 
      /if n $char(ability,"Disarm")>0 { 
         /if "$char(state)"=="SIT" /stand 
         /face fast 
         /doability "Disarm" 
      } 
   } 
   /if n @DoArchery==1 { 
      /if "$char(state)"=="SIT" /stand 
      /face fast 
      /call Delay 3 
      | ugly hack - would rather call direct 
      /press num_7 
   } 
/return 

|TrapFinder 
|Used to auto sence traps when DoTraps is set to 1 
|Usage /call TrapFinder 
Sub TrapFinder 
   /if n @DoTraps==1 { 
      /if n $char(ability,"Sense Traps")>0 { 
         /doability "Sense Traps" 
      } 
   } 
   /doevents 
/return 

Sub bssub 
   /if $target()==FALSE /return 
   /if n @DoBackstab==1 { 
       /if "$char(state)"=="SIT" /stand 
       /face fast 
       /doability "Backstab" 
   } 
   /if n $target(distance)>20 { 
      /if n @Debug>=1 /echo Calling RangeSub. 
      /call RangeSub 
      /return 
   } 
   /if n $target(distance)<4 { 
      /if n @Debug>=1 /echo Calling RangeSub. 
      /call RangeSub 
      /return 
   } 
   /if "$char(state)"=="SIT" /stand 
/return 


Sub CheckAggressive 
   /if $invpanel==TRUE /return 
   /call CheckPuller 
   /if n @Aggressive==0 /return 
   /if "@Param0"!~"say" { 
      /if  "@Param0"!="group" { 
         /if "@Param0"!="out of character" { 
            /if "@Param0"!="shout" { 
               /if "@Param0"!~"guild" { 
                  /if $target()==TRUE { 
                     /if "$target(type)"!="NPC" { 
                        /target clear 
                        /call Delay 2s 
                     } 
                  } 
                  /if $target()==TRUE { 
                     /if $combat==FALSE { 
                        /if $target(type)=="NPC" { 
                           /if n @Aggressive==1 { 
                              /call ChatOut 5 @MasterName "I am being attacked by $target(name,clean)." 
                              /call Delay 2 
                              /varset Combatstatus 1 
                              /attack on 
                           } 
                        } 
                     } 
                  } 
               } 
            } 
         } 
      } 
   } 
/return 

Sub CheckPuller 
   /declare AggTemp local 
   /if n @IsPuller==0 /return 
   /if n $distance(@AnchorX,@AnchorY)<=90 /return 
   /declare mobface local 
   /varset mobface $char(heading) 
   /varadd mobface 180 
   /varcalc mobface @mobface%360 
   /if n $target(heading)<=$calc(@mobface+10) { 
      /if n $target(heading)>=$calc(@mobface-10) { 
         /attack off 
         /varset Combatstatus 0 
         /varset AggTemp @Aggressive 
         /varset Aggressive 0 
         /call MoveToAnchor 
         /varset Aggressive @AggTemp 
      } 
   } 
/return 

Sub Event_Pierce 
   /call CheckPuller 
/return 

Sub Event_Slash 
   /call CheckPuller 
/return 

Sub Event_Bash 
   /call CheckPuller 
/return 

Sub Event_Hit 
   /call CheckPuller 
/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 on
      } 
      /varset EnrageVar 0 
   } 
/return 

Sub Event_FoundBoxTrap 
   /if n $char(ability,"Disarm Traps")>0 { 
      /call ChatOut 5 @MasterName "Trying to disarm a $target(name,clean) trap." 
      /doability "Disarm Traps" 
      /return 
   } 
/return 

Sub Event_FoundFloorTrap 
   /if n $char(ability,"Disarm Traps")>0 { 
      /call ChatOut 5 @MasterName "Trying to disarm a floor trap." 
      /doability "Disarm Traps" 
      /return 
   } 
/return 

Sub Event_DisarmTrap 
   /call Delay 2s 
   /call ChatOut 5 @MasterName "Trap disarmed." 
/return 

Sub Event_GettingHit 
   /call CheckAggressive @Param0 
/return 

Sub Event_AttackedMiss 
   /call CheckAggressive @Param0 
/return 

Sub Do-getbehind
/if n @GetBehindPause<=0 /varset GetBehindTry 5s
| From cronic's beastlord script.  Hacked up a bit to get it to play nice with genbot.
   /varset Combatstatus 1 
   /if $target()==FALSE { 
      /assist @MasterName 
      /call Delay 5 
   } 
   /if $target()==FALSE /return 
   /doevents 
   /face fast nolook
   /call RangeSub 
   :B2DoStrafe 
   /if n @GetBehindTry>0 {
       /varset Oc $if(n,$char(heading)=>180,$calc($char(heading)-180),$calc($char(heading)+180)) 
       /varset Om $if(n,$target(heading)=>180,$calc($target(heading)-180),$calc($target(heading)+180)) 
       /if n $abs($calc(@Om-@Oc))<80 /goto :B2End 
       /if n $abs($calc(@Om-@Oc))>280 /goto :B2End 
       /face fast nolook 
       /call BehindGetDirection 
       /sendkey down ctrl 
       /sendkey down @dir 
       /call RangeSub 
       /doevents
       /if $target()==FALSE /goto :B2End
       /if n @Combatstatus==0 /goto :B2End
       /goto :B2DoStrafe 
   }
   /if n @GetBehindTry<=0 /if n @GetBehindPause<=0 /varset GetBehindPause 10s   
   :B2End 
      /if $target()==TRUE /call bssub
      /sendkey up right 
      /sendkey up left
      /sendkey up ctrl 
      /face fast nolook 

/return 

Sub Do-behind 
    /call Do-getbehind
/return 

Sub BehindGetDirection 
| From cronic's beastlord script.  Hacked up a bit to get it to play nice with genbot.
   /if n @Om<180 { 
         /varset dir1 "right" 
         /varset dir2 "left" 
         /varset dist1 $calc(360-$calc(@Oc+@Om))
         } else { 
         /varset dir1 "left" 
         /varset dir2 "right" 
         /varset dist1 $calc(360-$calc(@Om+@Oc))
         } 
   /varset dist2 $calc(@Oc-@Om) 
   /varset dir $if(n,@dist1>@dist2,@dir2,@dir1) 
/return  

Sub Do-autoinv 
   /autoinventory 
/return 

Sub Do-kick 
   /if n @DoKick==1 { 
      /call ChatOut 5 @MasterName "Auto Kick is now off." 
      /varset DoKick 0 
      /return 
   } 
   /if n @DoKick==0 { 
      /call ChatOut 5 @MasterName "Auto Kick is now on." 
      /varset DoKick 1 
      /return 
   } 
/return 

Sub Do-flyingkick 
   /if n @DoFlyingKick==1 { 
      /call ChatOut 5 @MasterName "Auto FlyingKick is now off." 
      /varset DoFlyingKick 0 
      /return 
   } 
   /if n @DoFlyingKick==0 { 
      /call ChatOut 5 @MasterName "Auto FlyingKick is now on." 
      /varset DoFlyingKick 1 
      /return 
   } 
/return 

Sub Do-disarm 
   /if n @DoDisarm==1 { 
      /call ChatOut 5 @MasterName "Auto Disarm is now off." 
      /varset DoDisarm 0 
      /return 
   } 
   /if n @DoDisarm==0 { 
      /call ChatOut 5 @MasterName "Auto Disarm is now on." 
      /varset DoDisarm 1 
      /return 
   } 
/return 

Sub Do-traps 
   /if n @DoTraps==1 { 
      /call ChatOut 5 @MasterName "Auto Traps is now off." 
      /varset DoTraps 0 
      /return 
   } 
   /if n @DoTraps==0 { 
      /call ChatOut 5 @MasterName "Auto Traps is now on." 
      /varset DoTraps 1 
      /return 
   } 
/return 

Sub Do-taunt 
   /if n @DoTaunt==1 { 
      /call ChatOut 5 @MasterName "Auto Taunt is now off." 
      /varset DoTaunt 0 
      /return 
   } 
   /if n @DoTaunt==0 { 
      /call ChatOut 5 @MasterName "Auto Taunt is now on" 
      /varset DoTaunt 1 
      /return 
   } 
/return 

Sub Do-backstab 
   /if n @DoBackstab==1 { 
      /call ChatOut 5 @MasterName "Auto Backstab is now off." 
      /varset DoBackstab 0 
      /return 
   } 
   /if n @DoBackstab==0 { 
      /call ChatOut 5 @MasterName "Auto Backstab is now on." 
      /varset DoBackstab 1 
      /return 
   } 
/return 

Sub Do-evade 
   /if n @DoEvade==1 { 
      /call ChatOut 5 @MasterName "Auto Evade is now off." 
      /varset DoEvade 0 
      /return 
   } 
   /if n @DoEvade==0 { 
      /call ChatOut 5 @MasterName "Auto Evade is now on." 
      /varset DoEvade 1 
      /return 
   } 
/return 

Sub Do-slam 
   /if n @DoSlam==1 { 
      /call ChatOut 5 @MasterName "Auto Slam is now off." 
      /varset DoSlam 0 
      /return 
   } 
   /if n @DoSlam==0 { 
      /call ChatOut 5 @MasterName "Auto Slam is now on." 
      /varset DoSlam 1 
      /return 
   } 
/return 

Sub Do-bash 
   /if n @DoBash==1 { 
      /call ChatOut 5 @MasterName "Auto Bash is now off." 
      /varset DoBash 0 
      /return 
   } 
   /if n @DoBash==0 { 
      /call ChatOut 5 @MasterName "Auto Bash is now on." 
      /varset DoBash 1 
      /return 
   } 
/return 

Sub Do-attack 
   /varset Supportstatus 1 
   /varset Combatstatus 1 
   /if "$char(state)"=="SIT" /stand 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
      /call Delay 5 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /varset Combatstatus 0 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /varset Combatstatus 0 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-attackParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-attackParamLoop 
         } 
      /target "@ParamString"
   } 
   /call Delay 1 
   /if "$char(name)"=="$target(name,clean)" { 
      /varset Combatstatus 0 
      /return 
   } 
   /call ChatOut 5 @MasterName "Attacking $target(name,clean)." 
   /if n @DoArchery!=1 /attack on 
/return 

Sub Do-noattack 
   /attack off 
   /varset Combatstatus 0 
   /varset Supportstatus 0 
/return 

Sub Do-beagg 
   /if $defined(Param1)==FALSE { 
      /if @Aggressive==0 /call ChatOut 5 @MasterName "Aggressive is set to off." 
      /if @Aggressive==1 /call ChatOut 5 @MasterName "Aggressive is set to on." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset Aggressive 0 
      /call ChatOut 5 @MasterName "Aggressive is now set to off." 
   } 
   /if "@Param1"=="on" { 
      /varset Aggressive 1 
      /call ChatOut 5 @MasterName "Aggressive is now set to on." 
   } 
/return 

Sub Do-puller 
   /if $defined(Param1)==FALSE { 
      /if n @IsPuller==0 /call ChatOut 3 @MasterName "I'll am not the puller." 
      /if n @IsPuller==1 /call ChatOut 3 @MasterName "I'll am the puller." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset IsPuller 0 
      /call ChatOut 5 @MasterName "I'm not the puller anymore." 
   } 
   /if "@Param1"=="on" { 
      /if @IsAnchored==0 { 
         /call ChatOut 5 @MasterName "I Can't pull without an anchor." 
         /return 
      } 
      /varset IsPuller 1 
      /call ChatOut 5 @MasterName "I'm the puller now." 
   } 
/return 

Sub Do-autoengage 
   /if $defined(Param1)==FALSE { 
      /if n @AutoEngage==0 /call ChatOut 3 @MasterName "I will not engage when attack is on." 
      /if n @AutoEngage==1 /call ChatOut 3 @MasterName "I will engage when attack is on." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset AutoEngage 0 
      /call ChatOut 5 @MasterName "I will not engage when attack is on anymore." 
   } 
   /if "@Param1"=="on" { 
      /varset AutoEngage 1 
      /call ChatOut 5 @MasterName "I will now engage when attack is on." 
   } 
/return 

Sub Do-archery 
   /if $defined(Param1)==FALSE { 
      /if @DoArchery==0 /call ChatOut 5 @MasterName "Archery is set to off." 
      /if @DoArchery==1 /call ChatOut 5 @MasterName "Archery is set to on." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset DoArchery 0 
      /call ChatOut 5 @MasterName "Archery is now set to off." 
   } 
   /if "@Param1"=="on" { 
      /varset DoArchery 1 
      /call ChatOut 5 @MasterName "Archery is now set to on." 
   } 
/return 
Last edited by ml2517 on Tue Jan 13, 2004 11:45 pm, edited 2 times in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Fri Jan 09, 2004 8:27 pm

botcore.inc

Code: Select all

|botcore.inc 
|Bot core module. 
|Version 9.0b 
|Date:1/11/2004 2:00am 
| 
| 
| 

#chat group 
#chat tell 
#chat chat 

#Event CorpseTooFar "You are too far away to loot that corpse." 
#Event FollowOff "You are no longer auto-following" 
#Event Zoned "LOADING, PLEASE WAIT..." 
#Event Appear "You appear." 
#Event Appearing "You feel yourself starting to appear." 
#Event LosingLev "You feel as if you are about to fall" 

Sub CoreCommands 
   /varset Commands(1,0) afk 
   /varset Commands(1,1) accept 
   /varset Commands(1,2) reject 
   /varset Commands(1,3) invite 
   /varset Commands(1,4) follow 
   /varset Commands(1,5) stop 
   /varset Commands(1,6) moveto 
   /varset Commands(1,7) sit 
   /varset Commands(1,8) stand 
   /varset Commands(1,9) camp 
   /varset Commands(1,10) duck 
   /varset Commands(1,11) norelay 
   /varset Commands(1,12) say 
   /varset Commands(1,13) tell 
   /varset Commands(1,14) group 
   /varset Commands(1,15) cmds 
   /varset Commands(1,16) target 
   /varset Commands(1,17) notarget 
   /varset Commands(1,18) assist 
   /varset Commands(1,19) saytarget 
   /varset Commands(1,20) afollow 
   /varset Commands(1,21) itemcast 
   /varset Commands(1,22) lootup 
   /varset Commands(1,23) anchor 
   /varset Commands(1,24) trade 
   /varset Commands(1,25) yesres 
   /varset Commands(1,26) consent 
   /varset Commands(1,27) reportbuffs 
   /varset Commands(1,28) petattack 
   /varset Commands(1,29) petguard 
   /varset Commands(1,30) petback 
   /varset Commands(1,31) relay 
   /varset Commands(1,32) run 
   /varset Commands(1,33) door 
   /varset Commands(1,34) listengroup 
   /varset Commands(1,35) aona 
   /varset Commands(1,36) bona 
   /varset Commands(1,37) petona 
   /varset Commands(1,38) verbosity 
   /varset Commands(1,39) chatin 
   /varset Commands(1,40) lootall 
   /varset Commands(1,41) listenchat 
   /varset Commands(1,42) face 
   /varset Commands(1,43) autoinv 
   /varset Commands(1,44) anchorradius 
   /varset Commands(1,45) rmod 
   /varset Commands(1,46) rset 
   /varset Commands(1,47) stay 
   /varset Commands(1,48) pause 
   /varset Commands(1,49) ofollow
   /varset ArrayCore 49 
/return 

Sub TellCmds-core 
   /declare counter local 
   /declare cmds local 
   /varset cmds "" 
   /for counter 0 to @ArrayCore 
      /varcat cmds "@Commands(1,@counter), " 
   /next counter 
   /call ChatOut 2 @MasterName "@cmds" 
/return 

Sub SetupCoreVars 
|Arrays 
   /declare MName array 
   /declare Commands array2 
   /declare IgnGroup array 
|Globals 
   /declare tempvar global 
   /declare CmdList-core global 
   /declare AnchorX global 
   /declare AnchorY global 
   /declare IsAnchored global 
   /declare LootSlot global 
   /declare LootTooFar global 
   /declare BotName global 
   /declare MasterName global 
   /declare CmdArrayNum global 
   /declare MyXLoc global 
   /declare MyYLoc global 
   /declare countdown global 
   /declare RangeMin global 
   /declare RangeMax global 
   /declare FastRange global 
   /declare FastMin global 
   /declare Remem global 
   /declare MyClass global 
   /declare FollowTarget global 
   /declare Afollow global 
   /declare Fail global 
   /declare ArrayCounter global 
   /declare Relaytells global 
   /declare BreakOut global 
   /declare Combatstatus global 
   /declare ListenGroup global 
   /declare ListenChat global 
   /declare AttackOnAssist global 
   /declare BehindOnAssist global 
   /declare PetOnAssist global 
   /declare Verbosity global 
   /declare ChatIn global 
   /declare IgnGroupList global 
   /declare IgnGroupNum global 
   /declare DelayBeforeSit global 
   /declare ListenChan global 
   /declare AnchorRadius global 
   /declare Supportstatus global 
|Timers 
   /declare SitTimer timer 
   /declare StrafeTimer timer 
|------------------------------------- 
   /varset BotName $char(name) 
   /varset Afollow 0 
   /varset Combatstatus 0 

   /varset RangeMin $ini(@IniFile,"Core",RangeMin) 
   /if "@RangeMin"=="NOTFOUND" { 
      /ini "@IniFile" Core RangeMin 10 
      /varset RangeMin 9 
   } 
   /varset RangeMax $ini(@IniFile,"Core",RangeMax) 
   /if "@RangeMax"=="NOTFOUND" { 
      /ini "@IniFile" Core RangeMax 12 
      /varset RangeMax 12 
   } 
   /varset FastRange $ini(@IniFile,"Core",FastRange) 
   /if "@FastRange"=="NOTFOUND" { 
      /ini "@IniFile" Core FastRange 14 
      /varset FastRange 14 
   } 
   /varset FastMin $ini(@IniFile,"Core",FastMin) 
   /if "@FastMin"=="NOTFOUND" { 
      /ini "@IniFile" Core FastMin 6 
      /varset FastMin 6 
   } 
   /varset Relaytells $ini(@IniFile,"Core",Relaytells) 
   /if "@Relaytells"=="NOTFOUND" { 
      /ini "@IniFile" Core Relaytells 1 
      /varset Relaytells 1 
   } 
   /varset ListenGroup $ini(@IniFile,"Core",ListenGroup) 
   /if "@ListenGroup"=="NOTFOUND" { 
      /ini "@IniFile" Core ListenGroup 1 
      /varset ListenGroup 1 
   } 
   /varset ListenChat $ini(@IniFile,"Core",ListenChat) 
   /if "@ListenChat"=="NOTFOUND" { 
      /ini "@IniFile" Core ListenChat 1 
      /varset ListenChat 0 
   } 
   /varset ListenChan $ini(@IniFile,"Core",ListenChan) 
   /if "@ListenChan"=="NOTFOUND" { 
      /ini "@IniFile" Core ListenChan "Listen channel" 
      /varset ListenChan "Listen channel" 
   } 
   /varset AttackOnAssist $ini(@IniFile,"Core",AttackOnAssist) 
   /if "@AttackOnAssist"=="NOTFOUND" { 
      /ini "@IniFile" Core AttackOnAssist 0 
      /varset AttackOnAssist 0 
   } 
   /varset BehindOnAssist $ini(@IniFile,"Core",BehindOnAssist) 
   /if "@BehindOnAssist"=="NOTFOUND" { 
      /ini "@IniFile" Core BehindOnAssist 0 
      /varset BehindOnAssist 0 
   } 
   /varset PetOnAssist $ini(@IniFile,"Core",PetOnAssist) 
   /if "@PetOnAssist"=="NOTFOUND" { 
      /ini "@IniFile" Core PetOnAssist 0 
      /varset PetOnAssist 0 
   } 
   /varset Verbosity $ini(@IniFile,"Core",Verbosity) 
   /if "@Verbosity"=="NOTFOUND" { 
      /ini "@IniFile" Core Verbosity 9 
      /varset Verbosity 9 
   } 
   /varset ChatIn $ini(@IniFile,"Core",ChatIn) 
   /if "@ChatIn"=="NOTFOUND" { 
      /ini "@IniFile" Core ChatIn Tell 
      /varset ChatIn Tell 
   } 
   /varset IgnGroupList $ini(@IniFile,"Core",IgnoreInGroup) 
   /if "@IgnGroupList"=="NOTFOUND" { 
      /ini "@IniFile" Core IgnoreInGroup "duck|say|tell|group|cmds|trade|run|backstab|taunt|evade|slam|bash|kick|flyingkick|disarm|traps|puller||" 
      /varset IgnGroupList "duck|say|tell|group|cmds|trade|run|backstab|taunt|evade|slam|bash|kick|flyingkick|disarm|traps|puller||" 
   } 
   /varset DelayBeforeSit $ini(@IniFile,"Core",DelayBeforeSit) 
   /if "@DelayBeforeSit"=="NOTFOUND" { 
      /ini "@IniFile" Core DelayBeforeSit 3s 
      /varset DelayBeforeSit 3s 
   } 
   /varset AnchorRadius $ini(@IniFile,"Core",AnchorRadius) 
   /if "@AnchorRadius"=="NOTFOUND" { 
      /ini "@IniFile" Core AnchorRadius 6 
      /varset AnchorRadius 6 
   } 
   /declare IniPosition local 
   /varset IniPosition 1 
   :ParseIgnGroupList 
   /if "$arg($int(@IniPosition),"@IgnGroupList",|)"!="" { 
      /varset IgnGroup($int(@IniPosition)) "$arg($int(@IniPosition),"@IgnGroupList",|)" 
      |/echo IgnGroup($int(@IniPosition)) @IgnGroup($int(@IniPosition)) 
      /varadd IniPosition 1 
      /goto :ParseIgnGroupList 
   } 
   /varsub IniPosition 1 
   /varset IgnGroupNum $int(@IniPosition) 
   /varset IsAnchored 0 
/return 

Sub Event_Chat 
   /if "@Param0"!="GROUP" { 
      /if "@Param0"!="@ListenChan" { 
         /if "@Param0"!="TELL" { 
            /return 
         } 
      } 
   } 
   /if "@Param0"=="GROUP" { 
      /if n @ListenGroup==0 /return 
   } 
   /if "@Param0"=="@ListenChan" { 
      /if @ListenChat==0 /return 
   } 
   /for tempvar 0 to @MasterCount 
      /if @MName(@tempvar)==@Param1 /goto :SetupTime 
   /next tempvar 
   /if "@Param0"=="GROUP" /return 
   /if "@Param0"=="@ListenChan" /return 
   /if n @Relaytells==1 { 
      /if "@Param0"=="TELL" { 
         /call ChatOut 1 @MasterName "@Param1 told me: @Param2" 
      } 
   } 
   /return 
   :SetupTime 
   /varset MasterName @Param1 
   /if "@Param0"=="GROUP" { 
      /for tempvar 0 to @IgnGroupNum 
         /if "$arg(1,"@Param2")"=="@IgnGroup(@tempvar)" /return 
      /next tempvar 
   } 
   /if "@Param0"=="@ListenChan" { 
      /for tempvar 0 to @IgnGroupNum 
         /if "$arg(1,"@Param2")"=="@IgnGroup(@tempvar)" /return 
      /next tempvar 
   } 
   /if "$defined(ArrayCore)"=="TRUE" { 
      /for tempvar 0 to @ArrayCore 
         /if "$arg(1,"@Param2")"=="@Commands(botcore-array,@tempvar)" { 
            /call Do-@Commands(botcore-array,@tempvar) @Param2 
            /return 
         } 
      /next tempvar 
   } 
   /if "$defined(ArraySpell)"=="TRUE" { 
      /for tempvar 0 to @ArraySpell 
         /if "$arg(1,"@Param2")"=="@Commands(botspell-array,@tempvar)" { 
            /call Do-@Commands(botspell-array,@tempvar) @Param2 
            /return 
         } 
      /next tempvar 
   } 
   /if "$defined(ArrayComb)"=="TRUE" { 
      /for tempvar 0 to @ArrayComb 
         /if "$arg(1,"@Param2")"=="@Commands(botcombat-array,@tempvar)" { 
            /call Do-@Commands(botcombat-array,@tempvar) @Param2 
            /return 
         } 
      /next tempvar 
   } 
   /if "$defined(ArrayHeal)"=="TRUE" { 
      /for tempvar 0 to @ArrayHeal 
         /if "$arg(1,"@Param2")"=="@Commands(bothealer-array,@tempvar)" { 
            /call Do-@Commands(bothealer-array,@tempvar) @Param2 
            /return 
         } 
      /next tempvar 
   } 
   /if "$defined(ArrayPers)"=="TRUE" { 
         /for tempvar 0 to @ArrayPers 
         /if "$arg(1,"@Param2")"=="@Commands(personal-array,@tempvar)" { 
            /call Do-@Commands(personal-array,@tempvar) @Param2 
            /return 
         } 
      /next tempvar 
   } 
/return 

Sub ChatOut(ChatPriority,ChatTarget,ChatText) 
   /if n @ChatPriority>@Verbosity /return 
   /if "@ChatIn"=="IRC" { 
      /irc @ChatText 
      /return 
   } 
   /if @ChatTarget=="GROUP" { 
      /g @ChatText 
      /return 
   } 
   /if n @ChatPriority==1 { 
      /tell @ChatTarget @ChatText 
      /return 
   } 
   /if @ChatIn=="tell" { 
      /tell @ChatTarget @ChatText 
   } else /if @ChatIn=="Group" { 
      /g @ChatText 
   } else /if @ChatIn=="Raid" { 
      /rs @ChatText 
   } else /if @ChatIn=="Say" { 
      /say @ChatText 
   } else /if @ChatIn=="Channel" { 
      /1 @ChatText 
   } 
/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 { 
      /call Delay 2s 
      /sendkey up down 
      /sendkey down Right 
      /call Delay @Param0 
      /sendkey up Right 
      /sendkey down up 
      /call Delay 2s 
      /sendkey up up 
   } else { 
      /call Delay 2s 
      /sendkey up down 
      /sendkey down left 
      /call Delay @Param0 
      /sendkey up left 
      /sendkey down up 
      /call Delay 2s 
      /sendkey up up 
   } 
   /sendkey up down 
   /sendkey up Right 
   /sendkey up Left 
   /sendkey down up 
/return 

sub Loot 
   /declare counter local 
   /if $combat==TRUE /return 
   /if "$target()"=="FALSE" { 
      /target corpse radius 100 
   } 
   /if $target(state)!=DEAD /return 
   /press down 
   /press down 
   /call Rangesub 
   /varset LootTooFar 0 
   /varset LootSlot 0 
   /lootn never 
   /loot 
   /varset counter 0 
   :CoreWaitLoot 
      /call Delay 5 
      /doevents 
      /varadd counter 1 
      /if @BreakOut==1 /goto :donelooting 
      /if n @counter>12 /goto :donelooting 
   /if $corpse()!=TRUE /goto :CoreWaitLoot 
   /call ChatOut 5 @MasterName "Looting $target(name,clean)." 
   :lootloop 
   /if n @LootSlot==10 /goto :donelooting 
   /if n @LootTooFar==1 /goto :donelooting 
   /if $corpse(empty)==TRUE /goto :donelooting 
   /doevents 
   /click right corpse @LootSlot 
   /call Delay 1s 
   /varadd LootSlot 1 
   /doevents 
   /if @BreakOut==1 /goto donelooting2 
   /goto :lootloop 
   :donelooting 
   /lootn always 
   /varset LootSlot 0 
   /press esc 
   /press esc 
   /press esc 
/return 

sub LootAll 
   /declare counter local 
   :LootAllCycle 
   /if $combat==TRUE /return 
   /if "$target()"=="FALSE" { 
      /target corpse radius 100 
   } 
   /if $target(state)!=DEAD /return 
   /press down 
   /press down 
   /call Rangesub 
   /varset LootTooFar 0 
   /varset LootSlot 0 
   /lootn never 
   /loot 
   /varset counter 0 
   :CoreWaitLoot2 
      /call Delay 5 
      /doevents 
      /varadd counter 1 
      /if @BreakOut==1 /goto :donelooting2 
      /if n @counter>12 /goto :donelooting2 
   /if $corpse()!=TRUE /goto :CoreWaitLoot2 
   /call ChatOut 5 @MasterName "Looting $target(name,clean)." 
   :lootloop2 
   /if n @LootSlot==10 /goto :donelooting2 
   /if n @LootTooFar==1 /goto :donelooting2 
   /if $corpse(empty)==TRUE /goto :donelooting2 
   /click right corpse @LootSlot 
   /call Delay 1s 
   /varadd LootSlot 1 
   /doevents 
   /if @BreakOut==1 /goto donelooting2 
   /goto :lootloop2 
   :donelooting2 
   /lootn always 
   /varset LootSlot 0 
   /press esc 
   /press esc 
   /press esc 
   /goto :LootAllCycle 
/return 

|RangeSub 
|Used to keep bot in combat range. 
|Usage /call Rangesub 
|Vars Used: RangeMax, RangeMin, FastRange 
|RangeSub 
|Used to keep bot in combat range. 
|Usage /call Rangesub 
|Vars Used: RangeMax, RangeMin, FastRange, FastMin 
Sub Rangesub 
   /if $target()==FALSE /return 
   /if "$target(name,clean)"=="$char(name)" /return 
   /if "$char(state)"=="SIT" /stand 
   /face fast 
   /if n $target(distance)>=@FastRange /call Fastmove 
   /if n $target(distance)<=@FastMin /call FastBack 
   /if n $target(distance)>@RangeMax { 
      /press up 
   } 
   /if n $target(distance)<@RangeMin { 
      /press down 
   } 
/return 

Sub Fastback 
   /varset countdown 0 
   /varset MyXLoc $char(x) 
   /varset MyYLoc $char(y) 
   :fastbackloop 
   /doevents 
   /if $target()=="FALSE" { 
      /varset Combatstatus 0 
      /sendkey up down 
      /if $combat=="TRUE" { 
         /attack off 
      } 
      /return 
   } 
   /if "$char(state)"=="SIT" /stand 
   /face fast 
   /if n $target(distance)<@FastMin { 
      /sendkey down down 
   } 
   /if n $target(distance)>=@FastMin { 
      /sendkey up down 
      /return 
   } 
   /goto :fastbackloop 
   /if n @countdown>=3 { 
      /if n @MyXLoc==$char(x) { 
         /if @MyYLoc==$char(y) { 
            /sendkey up down 
            /return 
         } 
      } 
      /varset MyXLoc $char(x) 
      /varset MyYLoc $char(y) 
   } 
   /varadd countdown 1 
   /goto :fastbackloop 
/return 

|Fastmove 
|Called by Rangesub for when mob is more than /press distance away. 
|Usage: /call Fastmove 
Sub Fastmove 
   /varset countdown 0 
   /varset MyXLoc $char(x) 
   /varset MyYLoc $char(y) 
   :fastmoveloop 
   /doevents 
   /if $target()=="FALSE" { 
      /varset Combatstatus 0 
      /sendkey up up 
      /if $combat=="TRUE" { 
         /attack off 
      } 
      /return 
   } 
   /if "$char(state)"=="SIT" /stand 
   /face fast 
   /if n $target(distance)>@FastRange { 
      /sendkey down up 
   } 
   /if n $target(distance)<=@FastRange { 
      /sendkey up up 
      /return 
   } 
   /if n @countdown>=3 { 
      /call Detectobst 
      /varset countdown 0 
   } 
   /if n $target(distance)=>$calc(@FastRange*3) /varadd countdown 1 
   /goto :fastmoveloop 
/return 

Sub MoveToAnchor 
   /varset MyXLoc $char(x) 
   /varset MyYLoc $char(y) 
   /varset countdown 0 
   :AnchorMoveLoop 
   /if @IsAnchored==0 { 
      /sendkey up up 
      /return 
   } 
   /doevents 
   /if n @Combatstatus==1 { 
      /sendkey up up 
      /return 
   } 
   /if "$char(state)"=="SIT" /stand 
   /face nolook loc @AnchorX,@AnchorY 
   /if n $distance(@AnchorX,@AnchorY)>@AnchorRadius /sendkey down up 
   /if n $distance(@AnchorX,@AnchorY)<=@AnchorRadius { 
      /sendkey up up 
      /if "$char(state)"=="SIT" /stand 
      /face away nolook loc @AnchorX,@AnchorY 
      /return 
   } 
   /if n @countdown>=3 { 
      /call Detectobst 
      /varset countdown 0 
   } 
   /varadd countdown 1 
   /goto :AnchorMoveLoop 
/return 

Sub Event_CorpseTooFar 
   /call ChatOut 5 @MasterName "I'm not close enough to loot $target(name,clean)." 
   /varset LootTooFar 1 
/return 

Sub Event_Zoned 
   /varset IsAnchored 0 
   /sendkey up up 
/return 

Sub Event_FollowOff 
   /press esc 
   /press esc 
   /delay 5 
   /call ChatOut 5 @MasterName "Auto follow Off." 
/return 

Sub Event_timer 
   /if "@Param0"=="SitTimer" { 
      /if $char(state)==STAND /sit 
   } 
/return 

Sub Event_Appear 
   /call ChatOut 3 @MasterName "I'm no longer invis." 
/return 

Sub Event_Appearing 
   /call ChatOut 3 @MasterName "I'm starting to appear." 
/return 

Sub Event_LosingLev 
   /call ChatOut 3 @MasterName "I'm losing Levitate" 
/return 

||||||||||||Do-subs 

Sub Do-target 
   /varset Supportstatus 1 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /target myself 
   } else /if "@Param1"=="$char(name)" { 
      /target myself 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-targetParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-targetParamLoop 
         } 
      /target @ParamString 
   } 
   /call ChatOut 5 @MasterName "My target is now $target(name,clean)." 
/return 

Sub Do-saytarget 
   /call ChatOut 5 @MasterName "my target is $target(name,clean)." 
/return 

Sub Do-assist 
   /varset Supportstatus 1 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /assist @MasterName 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-assistParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-assistParamLoop 
         } 
      /assist @ParamString 
   } 
   /call Delay 5 
   /if $target()==FALSE { 
      /call ChatOut 5 @MasterName "I failed to get a target." 
   } else { 
      /call ChatOut 5 @MasterName "My target is now $target(name,clean)." 
      /if @AttackOnAssist==1 /varset Combatstatus 1 
      /if @BehindOnAssist==1 /call do-getbehind 
      /if @PetOnAssist==1 /pet attack 
   } 
/return 

Sub Do-sit 
   /varset Afollow 0
   /if n @FollowFlag==1 /call StopFunction    
   /varset FollowTarget "NULL" 
   /if $char(state)==STAND /sit 
/return 

Sub Do-stand 
   /sit off 
/return 

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

Sub Do-relay 
   /varset Relaytells 1 
/return 

Sub Do-norelay 
   /varset Relaytells 0 
/return 

Sub Do-afk 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /afk 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-afkParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-afkParamLoop 
         } 
      /afk @ParamString 
   } 
   /call ChatOut 3 @MasterName "Going afk." 
/return 

Sub Do-afollow 
   /varset CmdArrayNum 0 
   /if n @FollowFlag==1 /call StopFunction
   /if $defined(Param1)==FALSE { 
      /varset FollowTarget "@MasterName" 
      /varset Afollow 1 
   } else /if "@Param1"=="me" { 
      /varset FollowTarget "@MasterName" 
      /varset Afollow 1 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-afollowParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-afollowParamLoop 
         } 
      /varset FollowTarget "@ParamString"
      /varset Afollow 1 
   } 
   /target @FollowTarget 
   /call ChatOut 5 @MasterName "I am now following $target(name,clean)." 
/return 

Sub Do-say 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-sayParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-sayParamLoop 
         } 
      /say @ParamString 
   } 
/return 

Sub Do-group 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-groupParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-groupParamLoop 
         } 
      /g @ParamString 
   } 
/return 

Sub Do-tell 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-tellParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-tellParamLoop 
         } 
      /tell @ParamString 
   } 
/return 

Sub Do-accept 
   /target clear 
   /invite 
/return 

Sub Do-reject 
   /target clear 
   /disband 
/return 

Sub Do-invite 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-inviteParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-inviteParamLoop 
         } 
      /target pc @ParamString 
   } 
   /call ChatOut 3 @MasterName "Inviting $target(name,clean)." 
   /invite 
/return 

Sub Do-face 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-faceParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-faceParamLoop 
         } 
      /target @ParamString 
   } 
   /call ChatOut 5 @MasterName "Facing $target(name,clean)." 
   /stand 
   /call Delay 5 
   /if "$char(state)"=="SIT" /stand 
   /face 
/return 

Sub Do-follow 
   /if $char(state)==SIT /stand 
   /varset Afollow 0 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /varset FollowTarget "@MasterName" 
   } else /if "@Param1"=="me" { 
      /varset FollowTarget "@MasterName" 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-followParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-followParamLoop 
         } 
      /varset FollowTarget "@ParamString"
   } 
   /call FollowFunction "@FollowTarget"
   /call ChatOut 5 @MasterName "I am now following $target(name,clean)."
/return 

Sub Do-ofollow 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call StopFunction
   /varset Afollow 0 
   /varset FollowTarget "NULL" 
   /target pc @MasterName 
   /face 
   /follow 
   /call ChatOut 5 @MasterName "Autofollow on $target(name,clean)." 
/return 

Sub Do-stop 
   /dismount 
   /varset Supportstatus 0 
   /varset BreakOut 1 
   /varset LootTooFar 1 
   /varset Fail 1 
   /call ChatOut 5 @MasterName "Stopping." 
   /sendkey up up 
   /press d 
   /press d 
   /target clear 
   /press right
   /call StopFunction 
/return 

Sub Do-pause 
   /call ChatOut 5 @MasterName "Pausing." 
   /call PauseFunction 
/return 

Sub Do-stay 
   /varset Afollow 0 
   /if n @FollowFlag==1 /call StopFunction
   /varset FollowTarget "NULL" 
/return 

Sub Do-camp 
   /dismount 
   /varset Afollow 0
   /if n @FollowFlag==1 /call StopFunction 
   /varset FollowTarget "NULL" 
   /call ChatOut 3 @MasterName "Camping out." 
   /if $char(state)==STAND /sit 
   /camp desktop 
/return 

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

Sub Do-cmds 
   /if $defined(Param1)==TRUE { 
      /if @Param1!=core { 
         /if @Param1!=spell { 
            /if @Param1!=combat { 
               /if @Param1!=healer { 
                  /if @Param1!=personal { 
                     /return 
                  } 
               } 
            } 
         } 
      } 
      /call TellCmds-@Param1 
   } 
   /call ChatOut 3 @MasterName "Must specify core, healer, spell, combat, or personal." 
/return 

Sub Do-moveto 
   /sit off 
   /declare ParamString local 
   /declare ParamCount local 
   /varset countdown 0 
   /varset MyXLoc $char(x) 
   /varset MyYLoc $char(y) 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
      /call Delay 5 
      /varset ParamString $target(name,clean) 
   } else /if "@Param1"=="me" { 
      /target @MasterName 
      /varset ParamString @MasterName 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-movetoParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-movetoParamLoop 
         } 
      /target @ParamString 
   } 
   /if "$target(name,clean)"==$char(name) /return 
   /if "$target(name,clean)"!="@ParamString" /target "@ParamString" 
   /if "$target()"==FALSE /return 
   /doevents 
   /if n @Supportstatus==1 /return 
   /call RangeSub 
/return 

Sub Do-trade 
   /call ChatOut 5 @MasterName "Clicking trade." 
   /click left button npctrade_give 
   /call Delay 3 
/return 

Sub Do-yesres 
   /call ChatOut 5 @MasterName "Clicking yes for res." 
   /click left button confirm_yes 
   /call Delay 3 
/return 

Sub Do-lootup 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-lootupParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-lootupParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
/call Loot 
/return 

Sub Do-lootall 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-lootupParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-lootupParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
/call LootAll 
/return 


Sub Do-petattack 
   /assist @MasterName 
   /call Delay 1s 
   /if $target()==FALSE { 
      /call ChatOut 5 @MasterName "I failed to get a target." 
   } 
   /pet attack 
/return 

Sub Do-petguard 
   /pet guard here 
/return 

Sub Do-petback 
   /pet back off 
/return 

Sub Do-anchor 
   /if n @IsAnchored==0 { 
      /varset IsAnchored 1 
      /varset AnchorX $char(y) 
      /varset AnchorY $char(x) 
      /call ChatOut 5 @MasterName "Created anchor at Loc: @AnchorX,@AnchorY." 
      /return 
   } 
   /if n @IsAnchored==1 { 
     /varset IsAnchored 0 
     /call ChatOut 5 @MasterName "Removed Anchor." 
   } 
/return 

Sub Do-consent 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /call ChatOut 3 @MasterName "I'm giving you consent." 
      /consent @MasterName 
      /return 
   } else /if "@Param1"=="yourself" { 
      /return 
   } else /if "@Param1"=="$char(name)" { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-consentParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-consentParamLoop 
         } 
      /consent @ParamString 
   } 
   /call ChatOut 3 @MasterName "I gave consent to @ParamString" 
/return 

Sub Do-reportbuffs 
   /call ChatOut 1 @MasterName "Buffs: $char(buff,1), $char(buff,2), $char(buff,3), $char(buff,4), $char(buff,5), $char(buff,6), $char(buff,7), $char(buff,8), $char(buff,9), $char(buff,10), $char(buff,11), $char(buff,12), $char(buff,13), $char(buff,14), $char(buff,15)" 
/return 

Sub Do-run 
   /sendkey down ctrl 
   /press r 
   /sendkey up ctrl 
/return 

Sub Do-listengroup 
   /if $defined(Param1)==FALSE { 
      /if n @ListenGroup==0 /call ChatOut 3 @MasterName "I'll ignore group." 
      /if n @ListenGroup==1 /call ChatOut 3 @MasterName "I'll listen to group." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset ListenGroup 0 
      /call ChatOut 5 @MasterName "I will now ignore group." 
   } 
   /if "@Param1"=="On" { 
      /varset ListenGroup 1 
      /call ChatOut 5 @MasterName "I will now listen to group." 
   } 
/return 

Sub Do-listenchat 
   /if $defined(Param1)==FALSE { 
      /if n @ListenChat==0 /call ChatOut 3 @MasterName "I will ignore chat." 
      /if n @ListenChat==1 /call ChatOut 3 @MasterName "I will listen to chat." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset ListenChat 0 
      /call ChatOut 5 @MasterName "I will now ignore chat." 
   } 
   /if "@Param1"=="On" { 
      /varset ListenChat 1 
      /call ChatOut 5 @MasterName "I will now listen to chat." 
   } 
/return 

Sub Do-aona 
   /if $defined(Param1)==FALSE { 
      /if n @AttackOnAssist==0 /call ChatOut 3 @MasterName "I won't attack on assist." 
      /if n @AttackOnAssist==1 /call ChatOut 3 @MasterName "I will attack on assist." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset AttackOnAssist 0 
      /call ChatOut 5 @MasterName "I won't attack on assist anymore." 
   } 
   /if "@Param1"=="On" { 
      /varset AttackOnAssist 1 
      /call ChatOut 5 @MasterName "I will attack On assist now." 
   } 
/return 

Sub Do-bona 
   /if $defined(Param1)==FALSE { 
      /if n @BehindOnAssist==0 /call ChatOut 3 @MasterName "I won't move behind on assist." 
      /if n @BehindOnAssist==1 /call ChatOut 3 @MasterName "I will move behind on assist." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset BehindOnAssist 0 
      /call ChatOut 5 @MasterName "I won't get behind an assist anymore." 
   } 
   /if "@Param1"=="On" { 
      /varset BehindOnAssist 1 
      /call ChatOut 5 @MasterName "I will get behind On assist now." 
   } 
/return 

Sub Do-petona 
   /if $defined(Param1)==FALSE { 
      /if n @PetOnAssist==0 /call ChatOut 3 @MasterName "I won't send pet in on assist." 
      /if n @PetOnAssist==1 /call ChatOut 3 @MasterName "I will send pet in on assist." 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset PetOnAssist 0 
      /call ChatOut 5 @MasterName "I won't send pet in on assist anymore." 
   } 
   /if "@Param1"=="On" { 
      /varset PetOnAssist 1 
      /call ChatOut 5 @MasterName "I will send pet in on assist now."" 
   } 
/return 

Sub Do-verbosity 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 1 @MasterName "My Verbosity is set to @Verbosity." 
      /return 
   } 
   /varset Verbosity @Param1 
   /call ChatOut 1 @MasterName "My Verbosity is set to @Verbosity." 
/return 

Sub Do-chatin 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 1 @MasterName "My chat goes to @ChatIn." 
      /return 
   } 
   /varset ChatIn @Param1 
   /call ChatOut 1 @MasterName "My chat goes to @ChatIn." 
/return 

Sub Do-rmod 
   /if $defined(Param1)==FALSE /return 
   /varcalc RangeMin @RangeMin+@Param1 
   /varcalc RangeMax @RangeMax+@Param1 
   /varcalc FastRange @FastRange+@Param1 
   /varcalc FastMin @FastMin+@Param1 
   /call ChatOut 3 @MasterName "New Ranges: FastMin=@FastMin RangeMin=@RangeMin RangeMax=@RangeMax FastRange=@FastRange" 
/return 

Sub Do-rset 
   /if $defined(Param1)==FALSE /return 
   /if $defined(Param2)==FALSE /return 
   /if $defined(Param3)==FALSE /return 
   /if $defined(Param4)==FALSE /return 
   /if n @Param1>@Param2 /return 
   /if n @Param2>@Param3 /return 
   /if n @Param3>@Param4 /return 
   /varset FastMin @Param1 
   /varset RangeMin @Param2 
   /varset RangeMax @Param3 
   /varset FastRange @Param4 
   /call ChatOut 3 @MasterName "New Ranges: FastMin=@FastMin RangeMin=@RangeMin RangeMax=@RangeMax FastRange=@FastRange" 
/return 

Sub Do-anchorradius 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 3 @MasterName "My anchor radius is @AnchorRadius." 
   } 
   /if n @Param1<3 /return 
   /varset AnchorRadius @Param1 
   /call ChatOut 3 @MasterName "My new anchor radius is @AnchorRadius." 
/return 
Last edited by ml2517 on Sun Jan 11, 2004 3:20 am, edited 2 times in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Fri Jan 09, 2004 8:29 pm

bothealer.inc

Code: Select all

|bothealer.inc 
|Bot healer module. 
|Version 9.0c 
|Date:1/13/2004 10:00pm 
| 
| 
| 
|Requires botspell.inc 

Sub HealerCommands 
   /varset Commands(4,0) autoheal 
   /varset Commands(4,1) settankheal 
   /varset Commands(4,2) setcasterheal 
   /varset Commands(4,3) setdefaultheal 
   /varset Commands(4,4) heal 
   /varset Commands(4,5) togglehot 
   /varset Commands(4,6) setpetheal 
   /varset Commands(4,7) autohealpets 
   /varset Commands(4,8) watchtarget 
   /varset Commands(4,9) resetwatch 
   /varset Commands(4,10) patchheal 
   /varset Commands(4,11) setpatchheal 
   /varset ArrayHeal 11 
/return 

Sub TellCmds-healer 
   /declare counter local 
   /declare cmds local 
   /varset cmds "" 
   /for counter 0 to @ArrayHeal 
      /varcat cmds "@Commands(4,@counter), " 
   /next counter 
   /msg @MasterName @cmds 
/return 


Sub SetupHealerVars 
   /declare CmdList-healer global 
   /declare HealPetMsg global 
   /declare PetPctHeal global 
   /declare HealPets global 
   /declare PetSpell global 
   /declare CasterPctHeal global 
   /declare TankPctHeal global 
   /declare PalGrpPct global 
   /declare PalHealPct global 
   /declare PalHealGrpMsg global 
   /declare PalHealMsg global 
   /declare HealCasterMsg global 
   /declare HealTankMsg global 
   /declare HotDelay global 
   /declare ReportAutoHeal global 
   /declare PallyHealSpell global 
   /declare PallyGroupSpell global 
   /declare CasterHealIsHot global 
   /declare HealedId global 
   /declare DefaultHealSpell global 
   /declare TankSpell global 
   /declare CasterSpell global 
   /declare IsHealer global 
   /declare IsPally global 
   /declare TankList global 
   /declare CasterList global 
   /declare HOTWait timer 
   /declare CastMsgTimer1 timer 
   /declare CastMsgTimer2 timer 
   /declare CasterArray array 
   /declare TankArray array 
   /declare CasterArrayNum global 
   /declare TankArrayNum global 
   /declare GroupMax global 
   /declare WatchTargets Array 
   /declare WatchTargetIDs Array 
   /declare WatchTargetCount global 
   /declare WatchWaitCount global 
   /declare HealTargets Array 
   /declare PatchHealer global 
   /declare PatchSpell global 
   /declare PatchHealMsg global 

   /varset IsHealer $ini(@IniFile,"Healer",IsHealer) 
   /if "@IsHealer"=="NOTFOUND" { 
      /ini "@IniFile" Healer IsHealer 0 
      /varset IsHealer 0 
   } 
   /varset IsPally $ini(@IniFile,"Healer",IsPally) 
   /if "@IsPally"=="NOTFOUND" { 
      /ini "@IniFile" Healer IsPally 0 
      /varset IsPally 0 
   } 
   /varset ReportAutoHeal $ini(@IniFile,"Healer",ReportAutoHeal) 
   /if "@ReportAutoHeal"=="NOTFOUND" { 
      /ini "@IniFile" Healer ReportAutoHeal 1 
      /varset ReportAutoHeal 1 
   } 
   /varset CasterHealIsHot $ini(@IniFile,"Healer",CasterHealIsHot) 
   /if "@CasterHealIsHot"=="NOTFOUND" { 
      /ini "@IniFile" Healer CasterHealIsHot 0 
      /varset CasterHealIsHot 0 
   } 
   /varset HotDelay $ini(@IniFile,"Healer",HotDelay) 
   /if "@HotDelay"=="NOTFOUND" { 
      /ini "@IniFile" Healer HotDelay 60 
      /varset HotDelay 60 
   } 
   /varset HealPets $ini(@IniFile,"Healer",HealPets) 
   /if "@HealPets"=="NOTFOUND" { 
      /ini "@IniFile" Healer HealPets 0 
      /varset HealPets 0 
   } 
   /varset PatchHealer $ini(@IniFile,"Healer",PatchHealer) 
   /if "@PatchHealer"=="NOTFOUND" { 
      /ini "@IniFile" Healer PatchHealer 1 
      /varset PatchHealer 1 
   } 
   /varset TankSpell "$ini(@IniFile,"Healer",TankSpell)" 
   /if "@TankSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer TankSpell "Name of heal spell autoheal uses on Tanks" 
      /varset TankSpell "NA" 
   } 
   /varset CasterSpell "$ini(@IniFile,"Healer",CasterSpell)" 
   /if "@CasterSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer CasterSpell "Name of heal spell autoheal uses on Non Tanks" 
      /varset CasterSpell "NA" 
   } 
   /varset DefaultHealSpell "$ini(@IniFile,"Healer",DefaultHealSpell)" 
   /if "@DefaultHealSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer DefaultHealSpell "Name of Default Heal Spell" 
      /varset DefaultHealSpell "NA" 
   } 
   /varset PetSpell "$ini(@IniFile,"Healer",PetSpell)" 
   /if "@PetSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer PetSpell "Name of Pet Heal Spell" 
      /varset PetSpell "NA" 
   } 
   /varset PatchSpell "$ini(@IniFile,"Healer",PatchSpell)" 
   /if "@PatchSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer PatchSpell "Name of Patch Heal Spell" 
      /varset PatchSpell "NA" 
   } 
   /varset HealCasterMsg "$ini(@IniFile,"Healer",HealCasterMsg)" 
   /if "@HealCasterMsg"=="NOTFOUND" { 
      /ini "@IniFile" Healer HealCasterMsg "Healing %t" 
      /varset HealCasterMsg "Healing %t" 
   } 
   /varset HealTankMsg "$ini(@IniFile,"Healer",HealTankMsg)" 
   /if "@HealTankMsg"=="NOTFOUND" { 
      /ini "@IniFile" Healer HealTankMsg "Big Heal on %t" 
      /varset HealTankMsg "Big Heal on %t" 
   } 
   /varset HealPetMsg "$ini(@IniFile,"Healer",HealPetMsg)" 
   /if "@HealPetMsg"=="NOTFOUND" { 
      /ini "@IniFile" Healer HealPetMsg "Healing %t" 
      /varset HealPetMsg "Healing %t" 
   } 
   /varset PalHealMsg "$ini(@IniFile,"Healer",PalHealMsg)" 
   /if "@PalHealMsg"=="NOTFOUND" { 
      /ini "@IniFile" Healer PalHealMsg "Healing %t" 
      /varset PalHealMsg "Healing %t" 
   } 
   /varset PatchHealMsg "$ini(@IniFile,"Healer",PatchHealMsg)" 
   /if "@PatchHealMsg"=="NOTFOUND" { 
      /ini "@IniFile" Healer PatchHealMsg "Patch Healing %t" 
      /varset PatchHealMsg "Patch Healing %t" 
   } 
   /varset PallyGroupSpell "$ini(@IniFile,"Healer",PallyGroupSpell)" 
   /if "@PallyGroupSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer PallyGroupSpell "Name of Pally Group Heal Spell" 
      /varset PallyGroupSpell "NA" 
   } 
   /varset PallyHealSpell "$ini(@IniFile,"Healer",PallyHealSpell)" 
   /if "@PallyHealSpell"=="NOTFOUND" { 
      /ini "@IniFile" Healer PallyHealSpell "Name of Pally Heal Spell" 
      /varset PallyHealSpell "NA" 
   } 
   /varset CasterPctHeal $ini(@IniFile,"Healer",CasterPctHeal) 
   /if "@CasterPctHeal"=="NOTFOUND" { 
      /ini "@IniFile" Healer CasterPctHeal 70 
      /varset CasterPctHeal 70 
   } 
   /varset TankPctHeal $ini(@IniFile,"Healer",TankPctHeal) 
   /if "@TankPctHeal"=="NOTFOUND" { 
      /ini "@IniFile" Healer TankPctHeal 51 
      /varset TankPctHeal 51 
   } 
   /varset PalGrpPct $ini(@IniFile,"Healer",PalGrpPct) 
   /if "@PalGrpPct"=="NOTFOUND" { 
      /ini "@IniFile" Healer PalGrpPct 81 
      /varset PalGrpPct 81 
   } 
   /varset PetPctHeal $ini(@IniFile,"Healer",PetPctHeal) 
   /if "@PetPctHeal"=="NOTFOUND" { 
      /ini "@IniFile" Healer PetPctHeal 51 
      /varset PetPctHeal 51 
   } 
   /varset PalHealPct $ini(@IniFile,"Healer",PalHealPct) 
   /if "@PalHealPct"=="NOTFOUND" { 
      /ini "@IniFile" Healer PalHealPct 81 
      /varset PalHealPct 81 
   } 
   /declare IniPosition local 
   :reloadlist 
   /varset TankList "$ini(@IniFile,"Healer",TankList)" 
   /varset CasterList "$ini(@IniFile,"Healer",CasterList)" 
   |/echo TankList @TankList 
   |/echo CasterList @CasterList 
   /if @TankList==NOTFOUND { 
      /if @CasterList==NOTFOUND { 
         /ini "@IniFile" Healer TankList "Warrior|Shadow Knight|Paladin|Monk|Beastlord|Ranger|Shaman" 
         /ini "@IniFile" Healer CasterList "Necromancer|Wizard|Enchanter|Magician|Rogue|Druid|Cleric|Bard" 
         /ini "@IniFile" Healer 
         /goto :reloadlist 
      } 
   } 
   /varset IniPosition 1 
   :TankLoadList 
   /if "$arg($int(@IniPosition),"@TankList",|)"!="" { 
      /varset TankArray($int(@IniPosition)) "$arg($int(@IniPosition),"@TankList",|)" 
      |/echo TankArray($int(@IniPosition)) @TankArray($int(@IniPosition)) 
      /varadd IniPosition 1 
      /goto :TankLoadList 
   } 
   /varsub IniPosition 1 
   /varset TankArrayNum $int(@IniPosition) 
   /varset IniPosition 1 
   :CasterLoadList 
   /if "$arg($int(@IniPosition),"@CasterList",|)"!="" { 
      /varset CasterArray($int(@IniPosition)) "$arg($int(@IniPosition),"@CasterList",|)" 
      /varadd IniPosition 1 
      /goto :CasterLoadList 
   } 
   /varsub IniPosition 1 
   /varset CasterArrayNum $int(@IniPosition) 
   /varset IniPosition 0 
   /varset WatchTargetCount 0 
   /varset WatchWaitCount 0 
/return 

Sub CheckGrpHealth 
   /declare tankcount local 
   /declare castercount local 
   /declare HealCount local 
   /declare BadIDs local 
   /declare SaveCombatStat local 
   /declare SaveCombatID local 
   /varset BadIDs 0 
   /varset BreakOut 0 
   /if n "@IsHealer"==0 /return 
   /if n "@IsPally"==1 /return 
   /varset SaveCombatStat @Combatstatus 
   /varset SaveCombatID $target(id) 
   /varcalc GroupMax $group(count)-1 
   /varset HealCount @GroupMax 
   /for tempvar 0 to @GroupMax 
      /varset HealTargets(@tempvar) $group(@tempvar) 
   /next tempvar 
   /if n @WatchWaitCount>10 { 
      /if n @WatchTargetCount>0 { 
         /for tempvar 1 to @WatchTargetCount 
            /varadd HealCount 1 
            /varset HealTargets(@HealCount) @WatchTargetIDs(@tempvar) 
         /next tempvar 
         /varset WatchWaitCount 0 
      } 
   } 
   /varadd WatchWaitCount 1 
   /for tempvar 0 to @HealCount 
      /if n @tempvar>@GroupMax { 
         /if $target(id)!=@HealTargets(@tempvar) { 
            /if @Combatstatus==1 /attack off 
            /target id @HealTargets(@tempvar) 
            /if $target(id)!=@HealTargets(@tempvar) { 
               /varadd BadIDs 1 
            } 
         } 
      } 
      /doevents 
      /if n $spawn(@HealTargets(@tempvar),hp,pct)<@TankPctHeal { 
         /if $spawn(@HealTargets(@tempvar),state)!=DEAD { 
            /for tankcount 1 to @TankArrayNum 
               /if "$spawn(@HealTargets(@tempvar),class)"=="@TankArray(@tankcount)" { 
                  /if n $spawn(@HealTargets(@tempvar),hp,pct)<$calc(@TankPctHeal/2) { 
                     /if n @PatchHealer==1 {
                         /if n @FollowFlag==1 /call Move 0
                         /call PatchHeal @HealTargets(@tempvar) 
                     }
                  } 
                  /if @Combatstatus==1 /attack off 
                  /call Tankheal @HealTargets(@tempvar) 
               } 
               /if n @BreakOut==1 /return 
            /next tankcount 
         } 
      } 
      /if n $spawn(@HealTargets(@tempvar),hp,pct)<@CasterPctHeal { 
         /if $spawn(@HealTargets(@tempvar),state)!=DEAD { 
            /for castercount 1 to @CasterArrayNum 
               /if "$spawn(@HealTargets(@tempvar),class)"=="@CasterArray(@castercount)" { 
                  /if n $spawn(@HealTargets(@tempvar),hp,pct)<$calc(@CasterPctHeal/2) { 
                     /if n @PatchHealer==1 {
                         /if n @FollowFlag==1 /call Move 0
                         /call PatchHeal @HealTargets(@tempvar) 
                     }
                  } 
                  /if @Combatstatus==1 /attack off 
                  /if n @FollowFlag==1 /call Move 0
                  /call Casterheal @HealTargets(@tempvar) 
               } 
               /if n @BreakOut==1 /return 
            /next castercount 
         } 
      } 
      /if n @HealPets==1 { 
         /if n $spawn(@HealTargets(@tempvar),pet)>0 { 
            /if n $spawn($spawn(@HealTargets(@tempvar),pet),hp,pct)<@PetPctHeal { 
               /if @Combatstatus==1 /attack off 
               /call Petheal $spawn(@HealTargets(@tempvar),pet) 
               /if n @BreakOut==1 /return 
            } 
         } 
      } 
      /doevents 
   /next tempvar 
   /if @SaveCombatStat==1 { 
      /if $target(id)!=@SaveCombatID /target ID @SaveCombatID 
      /if $target()==True { 
         /if "$target(type)"=="NPC" { 
            /stand 
            /attack on 
            /varset Combatstatus 1 
         } 
      } 
   } 
   /if @BadIDs>0 /call ResetWatchTargets 
/return 

Sub Tankheal 
   /declare BadTarget local 
   /varset BadTarget 0 
   :TankhealTarget 
      /if n @Param0==$char(id) { 
         /if @Param0!=$target(id) /target myself 
      } 
      /if @Param0!=$char(id) { 
          /if n $target(id)!=@Param0 /target id @Param0 
       } 
      /call Delay 1 
      /if $target(id)!=@Param0 { 
         /if n BadTarget<10 { 
            /varadd BadTarget 1 
            /goto :TankhealTarget 
         } 
      } 
   /if $target(id)!=@Param0 /return 
   /stand 
   /if n @CastMsgTimer1<=0 { 
      /if n @ReportAutoHeal==1 /g @HealTankMsg 
      /varset CastMsgTimer1 50 
   } 
   /call SpellSub "@TankSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
   /press esc 
/return 

Sub CasterHeal 
   /declare BadTarget local 
   /varset BadTarget 0 
   :CasterHealTarget 
      /if n @Param0==$char(id) { 
         /if @Param0!=$target(id) /target myself 
      } 
      /if @Param0!=$char(id) { 
         /if $target(id)!=@Param0 /target id @Param0 
      } 
      /call Delay 1 
      /if $target(id)!=@Param0 { 
         /if n BadTarget<10 { 
            /varadd BadTarget 1 
            /goto :CasterHealTarget 
         } 
      } 
   /if $target(id)!=@Param0 /return 
   /if n @CasterHealIsHot==1 { 
      /if n @HOTWait>0 { 
         /if n @Param0==@HealedId /return 
      } 
   } 
   /stand 
   /if n @CastMsgTimer2<=0 { 
      /if n @ReportAutoHeal==1 /g @HealCasterMsg 
      /varset CastMsgTimer2 50 
   } 
   /call SpellSub "@CasterSpell" 
   /varset HealedId @Param0 
   /varset HOTWait @HotDelay 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
   /press esc 
/return 

Sub Petheal 
   /declare BadTarget local 
   /varset BadTarget 0 
   :PethealTarget 
      /if n $target(id)!=@Param0 /target id @Param0 
      /call Delay 1 
      /if $target(id)!=@Param0 { 
         /if n BadTarget<10 { 
            /varadd BadTarget 1 
            /goto :PethealTarget 
         } 
      } 
   /if $target(id)!=@Param0 /return 
   /stand 
   /if n @CastMsgTimer1<=0 { 
      /if n @ReportAutoHeal==1 /g @HealPetMsg 
      /varset CastMsgTimer1 50 
   } 
   /call SpellSub "@PetSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
   /press esc 
/return 

Sub Patchheal 
   /if n @Param0==$char(id) { 
      /if @Param0!=$target(id) /target myself 
   } 
   /if @Param0!=$char(id) { 
      /if $target(id)!=@Param0 /target id @Param0 
   } 
   /call Delay 1 
   /stand 
   /if n @CastMsgTimer1<=0 { 
      /if n @ReportAutoHeal==1 /g @PatchHealMsg 
      /varset CastMsgTimer1 50 
   } 
   /if n $char(gem,"@PatchSpell")>0 /cast "@PatchSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
   /press esc 
/return 

Sub PalGroupheal 
   /stand 
   /if n @ReportAutoHeal==1 /g @PalHealGrpMsg 
   /call SpellSub "@PallyGroupSpell" 
/return 

Sub PallyHeal 
   /if n @Combatstatus==1 /return 
   /if n @Param0==$char(id) /target myself 
   /if n @Param0!=$char(id) /target id @Param0 
   /stand 
   /if n @Combatstatus==0 /g @PalHealMsg 
   /call SpellSub "@PallyHealSpell" 
/return 

Sub PalGrpHealChk 
   /if "@IsPally"==0 /return 
   /if "@IsHealer"==0 /return 
   /varcalc GroupMax $group(count)-1 
   /varset LowHealthCheck 0 
   /for tempvar 0 to @GroupMax 
   /doevents 
   /if n $spawn($group(@tempvar),hp,pct)<@PalGrpPct { 
      /if n $spawn($group(@tempvar),hp,pct)>=1 { 
         /varadd LowHealthCheck 1 
      } 
   } 
   /if n @LowHealthCheck>=3 {
       /call PalGroupheal 
   }
   /doevents 
   /next tempvar 
/return 

Sub PalHealChk 
   /if "@IsPally"==0 /return 
   /if "@IsHealer"==0 /return 
   /varcalc GroupMax $group(count)-1 
   /for tempvar 0 to @GroupMax 
   /doevents 
   /if n $spawn($group(@tempvar),hp,pct)<@PalHealPct { 
      /if n $spawn($group(@tempvar),hp,pct)>=1 { 
         /call PallyHeal $group(@tempvar) 
      } 
   } 
   /doevents 
   /next tempvar 
/return 

Sub ResetWatchTargets 
   /declare counter local 
   /for counter 1 to @WatchTargetCount 
   /target pc @WatchTargets(@counter) 
   /call Delay 5 
   /if $target(name)==@WatchTargets(@counter) { 
      /varset WatchTargetIDs(@counter) $target(id) 
   } else { 
      /call ChatOut 5 @MasterName "I failed to target @WatchTargets(@counter)."
   }
   /next counter 
/return 

||||||||||||||||||Do- Subs 

Sub Do-togglehot 
   /if $defined(Param1)==FALSE { 
      /if "@CasterHealIsHot"==1 /call ChatOut 3 @MasterName "I use heal over time on non tanks." 
      /if "@CasterHealIsHot"==0 /call ChatOut 3 @MasterName "I don't use heal over time." 
      /return 
   } 
   /if @Param1=="off" { 
      /varset CasterHealIsHot 0 
      /call ChatOut 5 @MasterName "My non tank spell is a heal over time." 
   } 
   /if @Param1=="on" { 
      /varset CasterHealIsHot 1 
      /call ChatOut 5 @MasterName "My non tank spell isn't a heal over time." 
   } 
/return 

Sub Do-autoheal 
   /if $defined(Param1)==FALSE { 
      /if @IsHealer==1 /call ChatOut 3 @MasterName "I'll watch for heals." 
      /if @IsHealer==0 /call ChatOut 3 @MasterName "Let me know when people need heals." 
      /return 
   } 
    /if "@Param1"=="off" { 
      /varset IsHealer 0 
      /call ChatOut 5 @MasterName "Let me know if anyone needs a heal." 
   } 
   /if "@Param1"=="on" { 
      /varset IsHealer 1 
      /call ChatOut 5 @MasterName "I'll watch for heals." 
   } 
/return 

Sub Do-setpetheal 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 3 @MasterName "My pet heal is @PetSpell." 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-setpethealParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-setpethealParamLoop 
         } 
      /consent @ParamString 
   } 
   /varset PetSpell @ParamString 
   /call ChatOut 3 @MasterName "I'll use @PetSpell to heal pets." 
/return 

Sub Do-setpatchheal 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 3 @MasterName "I use @PatchSpell for patch heals." 
      /return 
   } else /if $defined(Param2)==FALSE { 
      /varset PatchSpell @Param1 
   } else /if $defined(Param3)==FALSE { 
      /varset PatchSpell "@Param1 @Param2" 
   } else /if $defined(Param4)==FALSE { 
     /varset PatchSpell "@Param1 @Param2 @Param3" 
   } else /varset PatchSpell "@Param1 @Param2 @Param3 @Param4" 
   /call ChatOut 3 @MasterName "I'll use @PatchSpell for patch heals now." 
/return 

Sub Do-settankheal 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 3 @MasterName "My tank heal is @TankSpell 
      /return 
   } 
   /declare ParamString local 
   /declare ParamCount local 
   /varset ParamCount 2 
   /varset ParamString "@Param1" 
   :Do-settankhealParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-settankhealParamLoop 
      } 
   /varset TankSpell "@ParamString" 
   /call ChatOut 3 @MasterName "I'll use @TankSpell to heal tanks." 
/return 

Sub Do-setdefaultheal 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 3 @MasterName "I usualy heal with @DefaultHealSpell." 
      /return 
   } 
   /declare ParamString local 
   /declare ParamCount local 
   /varset ParamCount 2 
   /varset ParamString "@Param1" 
   :Do-setdefaulthealParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-setdefaulthealParamLoop 
      } 
   /varset DefaultHealSpell "@ParamString" 
   /call ChatOut 3 @MasterName "I'll start using @DefaultHealSpell." 
/return 

Sub Do-setcasterheal 
   /if $defined(Param1)==FALSE { 
      /call ChatOut 3 @MasterName "I heal non tanks with @CasterSpell." 
      /return 
   } 
   /declare ParamString local 
   /declare ParamCount local 
   /varset ParamCount 2 
   /varset ParamString "@Param1" 
   :Do-setcasterhealParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-setcasterhealParamLoop 
      } 
   /varset CasterSpell "@ParamString" 
   /call ChatOut 3 @MasterName "I'll start using @CasterSpell on non tanks." 
/return 

Sub Do-autohealpets 
   /if $defined(Param1)==FALSE { 
      /if @HealPets==1 /call ChatOut 3 @MasterName "I will heal the pets." 
      /if @HealPets==0 /call ChatOut 3 @MasterName "I will not heal the pets." 
      /return 
   } 

   /if "@Param1"=="off" { 
      /varset HealPets 0 
      /call ChatOut 5 @MasterName "I will not heal the pets now." 
   } 
   /if "@Param1"=="on" { 
      /varset HealPets 1 
      /call ChatOut 5 @MasterName "I will heal the pets now." 
   } 
/return 

Sub Do-heal 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
      /call Delay 3 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /target myself 
   } else /if "@Param1"=="$char(name)" { 
      /target myself 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-healParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-healParamLoop 
         } 
      /target @ParamString 
   } 
   /call ChatOut 3 @MasterName "Casting @DefaultHealSpell on %t." 
   /call SpellSub "@DefaultHealSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-watchtarget 
   /if $defined(Param1)==FALSE { 
      /return 
   } 
   /if @Param1=="off" { 
      /varset WatchTargetCount 0 
      /return 
   } 
   /target @Param1 
   /call Delay 25 
   /if $target()==TRUE { 
      /varadd WatchTargetCount 1 
      /varset WatchTargets(@WatchTargetCount) $target(name) 
      /varset WatchTargetIDs(@WatchTargetCount) $target(id) 
   } else { 
      /call ChatOut 3 @MasterName "What did you want me to target?" 
   } 
/return 

Sub Do-resetwatch 
   /call ResetWatchTargets 
/return 

Sub Do-patchheal 
   /if $defined(Param1)==FALSE { 
      /if @PatchHealer==1 /tell @MasterName I'm a patch Healer 
      /if @PatchHealer==0 /tell @MasterName I'm not a patch Healer 
      /return 
   } 
   /if "@Param1"=="off" { 
      /varset PatchHealer 0 
      /call ChatOut 5 @MasterName "I won't be doing patch heals now." 
   } 
   /if "@Param1"=="on" { 
      /varset PatchHealer 1 
      /call ChatOut 5 @MasterName "I'll take care of the patch heals now." 
   } 
/return 
Last edited by ml2517 on Tue Jan 13, 2004 11:46 pm, edited 2 times in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Fri Jan 09, 2004 8:30 pm

botspell.inc

Code: Select all

|botspell.inc 
|Bot spell module. 
|Version 9.0b 
|Date:1/12/2004 8:00pm 
| 



#event Collapse "Your gate is too unstable, and collapses." 
#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!" 
#event MissedNote "You miss a note, bringing your song to a close!" 


Sub SpellCommands 
   /varset Commands(3,0) sn 
   /varset Commands(3,1) mana 
   /varset Commands(3,2) evac 
   /varset Commands(3,3) aftercastsit 
   /varset Commands(3,4) loadlist 
   /varset Commands(3,5) snt 
   /varset ArraySpell 5 
/return 

Sub TellCmds-spell 
   /declare counter local 
   /declare cmds local 
   /varset cmds "" 
   /for counter 0 to @ArraySpell 
      /varcat cmds "@Commands(3,@counter), " 
   /next counter 
   /call ChatOut 5 @MasterName "@cmds." 
/return 

Sub SetupSpellVars 
   /declare CmdList-spell global 
   /declare DefaultSpellSet global 
   /declare EvacSpell global 
   /declare DoAgain global 
   /declare StartCast global 
   /declare SpellSlot global 
   /declare SpellName global 
   /declare CastTime global 
   /declare SitAfterCast global 
   /declare CTimer timer 
   /declare OOMtimer timer 
   /varset SitAfterCast $ini(@IniFile,"Spell",SitAfterCast) 
   /if "@SitAfterCast"=="NOTFOUND" { 
      /ini "@IniFile" Spell SitAfterCast 0 
      /varset SitAfterCast 0 
   } 
   /varset DefaultSpellSet $ini(@IniFile,"Spell",DefaultSpellSet) 
   /if "@DefaultSpellSet"=="NOTFOUND" { 
      /ini "@IniFile" Spell DefaultSpellSet "default" 
      /varset DefaultSpellSet "default" 
   } 
   /varset EvacSpell $ini(@IniFile,"Spell",EvacSpell) 
   /if "@EvacSpell"=="NOTFOUND" { 
      /ini "@IniFile" Spell EvacSpell "NONE" 
      /varset EvacSpell "NONE" 
   } 
/return 

|SpellSub 
|Main spell casting sub. 
|Used to handle all spell casting.  Auto mems spells and handles fizzles. 
|Will need to set the DefaultSpellSet var to your default spell set. 
| 
|Usage /call SpellSub "spellname" 
| 
Sub SpellSub 
   /if "@Param0"=="NA" /return 
   /varset Fail 0 
   /if n @SitAfterCast==1 /varset SitTimer 1140m 
   /varset SpellName "@Param0" 
   |/if n $target(distance)>$spell("@SpellName",range) { 
   |   /if n $spell("@SpellName",range)>0 { 
   |      /varset Fail 1 
   |      /call ChatOut 3 @MasterName "Too far away. " 
   |      /varset CTimer 0 
   |      /return 1 
   |   } 
   |} 
   /if $char(state)==SIT { 
      /stand 
   } 
   /varset Remem 0 
   /if n @IsBard==0 { 
      /if $char(ismoving)!=FALSE { 
            /sendkey up up 
            /sendkey up down 
            /call Delay 1s 
      } 
      :WaitForStop 
      /doevents 
      /if n $BreakOut==1 /return 
      /if $char(ismoving)!=FALSE { 
            /call Delay 1s 
            /goto :WaitForStop 
      } 
   } 
   /if n @IsBard==1 /stopsong 
   :MemWait 
   /doevents 
   /if n @Fail==1 { 
      /varset Fail 0 
      /if n @Remem==1 { 
         /memspellset @DefaultSpellSet 
         :loadsploop 
         /call Delay 5 
         /if $char(spellbook)=="TRUE" /goto :loadsploop 
      } 
      /if n @SitAfterCast==1 { 
         /if $char(state)==STAND /sit 
      } 
      /return 1 
   } 
   /varset SpellSlot $char(gem,"@SpellName") 
   /if n @SpellSlot<0 { 
      /call Delay 1s 
      /goto :MemWait 
   } 
   /if n @SpellSlot==0 { 
      /memspell 8 "@Param0" 
      /varset SpellSlot 8 
      /varset Remem 1 
      :refreshwait 
      /doevents 
      /if n @Fail==1 { 
         /varset Fail 0 
         /if n @Remem==1 { 
            /memspellset @DefaultSpellSet 
            :loadsploop 
            /call Delay 5 
            /if $char(spellbook)=="TRUE" /goto :loadsploop 
         } 
         /if n @SitAfterCast==1 { 
            /if $char(state)==STAND /sit 
         } 
         /return 1 
      } 
      /call Delay 5 
      /if n $char(gem,"@SpellName")<=0 /goto :refreshwait 
   } 
   /varset CastTime "$spell("@SpellName",casttime)" 
   /if n @IsBard==0 /varadd CastTime 1 
   :BeginCast 
   /varset Fail 0 
   /varset DoAgain 0 
   /varset StartCast 0 
   /call WaitForStart 
   :TimerLoop 
   /doevents 
   /if n @IsBard==1 { 
      /if n @Combatstatus==1 /call RangeSub 
   } 
   /if n @DoAgain==1 /goto :BeginCast 
   /if n @Fail==1 { 
      /varset Fail 0 
      /if n @Remem==1 { 
         /memspellset @DefaultSpellSet 
         :loadsploop 
         /call Delay 5 
         /if $char(spellbook)=="TRUE" /goto :loadsploop 
      } 
      /if n @SitAfterCast==1 { 
         /if $char(state)==STAND /sit 
      } 
      /return 1 
   } 
   /if n @CTimer>0 /goto :TimerLoop 
   /if n @IsBard==1 { 
      /call Delay 1 
   } else { 
        /call Delay 2 
   } 
   /doevents 
   /if n @DoAgain==1 /goto :BeginCast 
   /if n @Remem==1 { 
      /memspellset @DefaultSpellSet 
      :loadsploop 
      /call Delay 5 
      /if $char(spellbook)=="TRUE" /goto :loadsploop 
   } 
/return 0 

|WaitForStart 
|Used by SpellSub to determine when to start spell countdown. 
Sub WaitForStart 
   /cast @SpellSlot 
   :StartLoop 
   /doevents 
   /if n @Fail==1 /return 
   /if n @DoAgain==1 /return 
   /if n @IsBard==0 { 
      /if n @StartCast==0 { 
            /goto :StartLoop 
      } 
   } 
   /varset CTimer "@CastTime"s 
/return 

Sub Event_CastStart 
   /varset StartCast 1 
/return 

Sub Event_CastFizzle 
   /call Delay 2 
   /varset DoAgain 1 
/return 

Sub Event_MissedNote 
   /call Delay 2 
   /varset DoAgain 1 
/return 

Sub Event_CastInterrupt 
   /call Delay 2 
   /if n @Fail==1 /return 
   /varset DoAgain 1 
/return 

Sub Event_Sitting 
   /stand 
   /call Delay 2 
   /varset DoAgain 1 
/return 

Sub Event_CastTooFar 
   /varset Fail 1 
   /call ChatOut 3 @MasterName "Too far away. " 
   /varset CTimer 0 
/return 

Sub Event_Distracted 
   /call ChatOut 5 @MasterName "I can't cast. I'm too distracted. " 
   /varset Fail 1 
   /varset CTimer 0 
/return 

Sub Event_NoTarget 
   /varset Fail 1 
   /call ChatOut 3 @MasterName "I don't know what target to cast on. " 
   /varset CTimer 0 
/return 

Sub Event_NoMem 
   /call ChatOut 5 @MasterName "That spell is not memed. " 
   /varset Fail 1 
   /varset CTimer 0 
/return 

Sub Event_RootOff 
   /call ChatOut 5 @MasterName "Root has worn off. " 
/return 

Sub Event_CastNoMana 
   /if @IsPally==1 { 
      /varset Fail 1 
      /if n @OOMtimer<=0 { 
         /call ChatOut 5 "@MasterName I am OOM!" 
         /varset OOMtimer 100 
         /return 
      } 
   } 
   /if n @OOMtimer<=0 /call ChatOut 5 @MasterName "OOM. Medding 13 seconds and trying again. " 
   /varset DoAgain 1 
   /sit off 
   /sit on 
   /varset OOMtimer 130 
   :medingwait 
   /call Delay 1 
   /doevents 
   /if n @OOMtimer>0 /goto :medingwait 
   /sit off 
/return 

Sub Event_Stunned 
   /call ChatOut 5 @MasterName "Stunned waiting 3 seconds to try again. " 
   /call Delay 3s 
   /varset DoAgain 1 
/return 

Sub Event_Recovered 
   /call Delay 2s 
   /varset DoAgain 1 
/return 

Sub Event_CastResist 
   /call ChatOut 3 @MasterName "$target(name,clean) Resisted." 
   /varset Fail 1 
/return 

Sub Event_Collapse 
   /varset DoAgain 1 
/return 

Sub Event_NoLOS 
   /call ChatOut 10 @MasterName "I can't see my target. " 
   /varset Fail 1 
   /varset CTimer 0 
/return 

|||||||||||||||Bot command subs 

Sub Do-sn 
   /assist @MasterName 
   /call Delay 5 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-snParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-snParamLoop 
         } 
      /call ChatOut 1 "@MasterName" "Casting @ParamString on $target(name,clean)" 
      /call SpellSub "@ParamString" 
   } 
   /press esc 
/return 

Sub Do-mana 
   /target myself 
   /call ChatOut 2 @MasterName "$char(mana,pct)m" 
   /press esc 
/return 

Sub Do-loadlist 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
   /memspellset @Param1 
   } 
/return 

Sub Do-aftercastsit 
   /if n @SitAfterCast==1 { 
      /varset SitAfterCast 0 
      /call ChatOut 5 @MasterName "I will no longer sit after casting." 
      /return 
   } 
   /if n @SitAfterCast==0 { 
      /varset SitAfterCast 1 
      /call ChatOut 5 @MasterName "I will now sit after casting." 
   } 
/return 

Sub Do-evac 
   /if @EvacSpell!=NONE /call ChatOut 5 @MasterName "Moving to you and casting @EvacSpell!" 
   /call Do-moveto evac @MasterName 
   /call Delay 2s 
   /if @EvacSpell!="NONE" /call SpellSub "@EvacSpell" 
/return 

Sub Do-itemcast 
   /if $char(state)=="SIT" { 
      /stand 
      /call Delay 3 
   } 
   /assist @MasterName 
   /call Delay 5 
   /varset CmdArrayNum 0 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-itemcastParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-itemcastParamLoop 
         } 
         /echo @ParamString 
      /cast item "@ParamString" 
   } 
   /call ChatOut 3 @MasterName "Using @ParamString on $target(name,clean)" 
/return 


Sub Do-snt 
   /declare SpellNameParam local 
   /declare TargetName local 
   /declare ParamCount local 
   /if $defined(Param1)==FALSE { 
      /return 
   } else { 
      /varset ParamCount 2 
      /varset SpellNameParam "@Param1" 
      :Do-sntSpellLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /if @Param$int(@ParamCount)=="on" /goto :Do-sntTargetStart 
            /varcat SpellNameParam " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-sntSpellLoop 
         } 
     :Do-sntTargetStart 
     /varadd ParamCount 1 
     /if $defined(Param$int(@ParamCount))==FALSE { 
        /return 
     } else { 
         /varset TargetName "@Param$int(@ParamCount)" 
         /varadd ParamCount 1 
        :Do-sntTargetLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat TargetName " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-sntTargetLoop 
         } 
      } 
      /target @TargetName 
      /call Delay 5 
      /if $target()==FALSE { 
         /call ChatOut 5 @MasterName "I failed to get a target." 
         /return 
      } 
      /call SpellSub "@SpellNameParam" 
      /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
      /press esc 
   } 
/return 
Last edited by ml2517 on Mon Jan 12, 2004 9:25 pm, edited 1 time in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Fri Jan 09, 2004 8:32 pm

advpath.inc

Code: Select all

|advpath.inc 
|Generic movement/pathing macro for inclusion in your own macros.
|Version 1.10 (Requires MQ2 zip from 3/5/2004 or later.)
|Date:3/6/2004 7:00pm 
|
||**
[advpath]
version=1.10
**|


#Event LocalRecord "[MQ2] record"
#Event LocalPlot "[MQ2] plot" 
#Event LocalDistance "[MQ2] distance" 
#Event LocalPlay "[MQ2] play:" 
#Event LocalStop "[MQ2] stop" 
#Event LocalGoto "[MQ2] goto" 
#Event LocalPause "[MQ2] pause" 
#Event LocalFollow "[MQ2] follow" 
#Event LocalSilent "[MQ2] silent" 
#Event LocalPattern "[MQ2] pattern:" 
#Event LocalAddMod "[MQ2] +"
#Event LocalSubMod "[MQ2] -"
#Event ZoneEvent "You have entered" 

| -------------------------------------------------------------------------------- 
Sub AdvPathPoll
/if n @PathingFlag==1 /if n @CheckLocTimer<=0 /call IncrementLoc $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
/if n @RecordPathFlag==1 /call RecordPath 
/if n @FollowFlag==1 { 
    /call TrackFollow 
    /call CheckForTarget 
    /if n @CheckLocTimer<=0 /if n @PauseFlag==0 /if n @NumLocs>@CurrLoc /call FollowIncLoc $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
} 
/return

| -------------------------------------------------------------------------------- 
Sub SimpleKeyPress(Function,Duration,DelayType)
/if $defined(DelayType)==FALSE {
    /declare DelayType local
    /varset DelayType 1
}
/keypress @Function
/keypress @Function hold
/if n @DelayType==1 {
    /call Delay @Duration
} else {
    /delay @Duration
}
/keypress @Function
/return

| -------------------------------------------------------------------------------- 
Sub CheckObstacle 
/declare TempVarObst local 
/if n $distance(@MyLastYLoc,@MyLastXLoc)<1 /call CheckDoor 
/if n $distance(@MyLastYLoc,@MyLastXLoc)<1 /call HitObstacle 
/varset MyLastXLoc $char(x) 
/varset MyLastYLoc $char(y) 
/varset ObstacleCount 0 
/return 

| -------------------------------------------------------------------------------- 

Sub CheckDoor 
/declare CharDirection local 
/declare TempVarDoor local 
/declare TempStoreTgt local
/varset TempStoreTgt 0
/if $target()==TRUE /varset TempStoreTgt $target(id)
/doortarget 
/if "$target(name)"~~"door" /if n $target(distance)<=12 { 
    /call Move 0 
    /if n $char(heading)=>315 { 
        /look 0 
        /face fast nolook heading 0 
        /varset CharDirection 0 
    } 
    /if n $char(heading)<45 { 
        /look 0 
        /face fast nolook heading 0 
        /varset CharDirection 0 
    } 
    /if n $char(heading)=>45 /if n $char(heading)<135 { 
        /look 0 
        /face fast nolook heading 90 
        /varset CharDirection 90 
    } 
    /if n $char(heading)=>135 /if n $char(heading)<225 { 
        /look 0 
        /face fast nolook heading 180 
        /varset CharDirection 180 
    } 
    /if n $char(heading)=>225 /if n $char(heading)<315 { 
        /look 0 
        /face fast nolook heading 270 
        /varset CharDirection 270 
    } 
    /varset TempVarDoor 0 
    :DoorMoveCloser 
    /varadd TempVarDoor 1 
    /if n @TempVarDoor>50 /goto :DoorDoneMoveCloser 
    /if n $target(distance)>14 /call SimpleKeyPress FORWARD 1 
    /if n $target(distance)<11 /call SimpleKeyPress BACK 1 
    /if n $target(distance)>14 /goto :DoorMoveCloser 
    /if n $target(distance)<11 /goto :DoorMoveCloser 
    :DoorDoneMoveCloser 

    /call Delay 0 
    /keypress USE HOLD
    /keypress USE
    /call Delay 1s 
    
    /varset DoorMoveTimer 1s
    /varset TempVarDoor 0 
    :DoorMoveAway 
    /if n DoorMoveTimer>0 {
        /varadd TempVarDoor 1 
        /if n @TempVarDoor>50 /goto :DoorDoneMoveAway 
        /if n $target(distance)>21 /call SimpleKeyPress FORWARD 1 
        /if n $target(distance)<17 /call SimpleKeyPress BACK 1 
        /if n $target(distance)>21 /goto :DoorMoveAway 
        /if n $target(distance)<17 /goto :DoorMoveAway 
        :DoorDoneMoveAway 
    }

    /call Delay 0 
    /if n $target(heading)==0 { 
        /if n @CharDirection==0 { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 337 
                :DoorNorth1 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorNorth1 
                /face fast nolook door 
        } else { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 203 
                :DoorNorth2 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorNorth2 
                /face fast nolook door 
        } 
    } 
    /if n $target(heading)==90 { 
        /if n @CharDirection==90 { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 67 
                :DoorWest1 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorWest1 
                /face fast nolook door 
        } else { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 293 
                :DoorWest2 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorWest2 
                /face fast nolook door 
        } 
    } 
    /if n $target(heading)==180 { 
        /if n @CharDirection==180 { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 157 
                :DoorSouth1 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorSouth1 
                /face fast nolook door 
        } else { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 23 
                :DoorSouth2 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorSouth2 
                /face fast nolook door 
        } 
    } 
    /if n $target(heading)==270 { 
        /if n @CharDirection==270 { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 247 
                :DoorEast1 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorEast1 
                /face fast nolook door 
        } else { 
                /varset TempVarDoor 0 
                /look 0 
                /face fast nolook heading 113 
                :DoorEast2 
                /varadd TempVarDoor 1 
                /call SimpleKeyPress FORWARD 1 
                /if n @TempVarDoor<1 /goto :DoorEast2 
                /face fast nolook door 
        } 
    } 
    /call Move 1 
}
/if n @TempStoreTgt>0 {
    /if $spawn(@TempStoreTgt)==TRUE /target id @TempStoreTgt
} else {
    /target clear
}
/return 

| -------------------------------------------------------------------------------- 
Sub CheckForTarget 
/if n @FollowFlag==1 /if n @ObstacleCount<7 /if "$target(name,clean)"!="@FollowName" { 
    /call TargetMob "@FollowName" 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub CheckMoving 
/if n @PauseFlag==0 /if n $char(speed)==0 { 
    /call Move 1 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub ClearLocs 
/varset CurrLoc 0 
/varset NumLocs 0 
/varset ObstacleCount 0 
/varset TotalObstCount 0 
/return 

| -------------------------------------------------------------------------------- 
Sub Delay(DelayTime) 
| 
| Time Critical /call's that do simple calculations go in the for loop.  
| Do not put things in here that might interfere with other functions. 
| 
/varset DelayTimer @DelayTime 
:DlyLoop 
/delay 1 
/if n @FollowFlag==1 /call TrackFollow 
/if n @DelayTimer>0 /goto :DlyLoop 
/return 

| -------------------------------------------------------------------------------- 
Sub FindLookAngle(TY,TX,TZ) 
/declare Angle local 
/declare LevOrWet local
/declare TempFacing local
/declare TempFacingLoop local
/varset LevOrWet 0
/declare FY local
/declare FX local
/declare FZ local
/varset FZ $char(z) 
/if n $char(feetwet)==5 {
    /varadd TZ 3 
    /varadd LevOrWet 1
}
/if $char(levitating)==TRUE {
    /varadd TZ 5 
    /varadd LevOrWet 1
}
/varset FY $char(y)
/varset FX $char(x)
/varset Angle $abs($asin($if(n,$abs($calc($abs($calc(@FZ-@TZ))/$distance(@TY,@TX,@TZ:@FY,@FX,@FZ)))<=1,$calc($abs($calc(@FZ-@TZ))/$distance(@TY,@TX,@TZ:@FY,@FX,@FZ)),1))) 
/if @FZ<@TZ {
    /varset Angle $calc(@Angle*-1)
} else /if n @TZ==@FZ {
    /varset Angle 0
}
/if n @LevOrWet==0 /varset Angle $calc($calc(@Angle\10)*10)
/if n @FollowFlag==1 /if n @CurrLoc<2 /if n $char(speed)==0 {
    /face nolook loc @TY,@TX 
    :WaitForTurnStart
    /varset TempFacing $char(heading)
    /call Delay 1
    /if n $char(heading)!=@TempFacing /goto :WaitForTurnStart
}
/if n @UseFaceFast==0 { 
    /if n $abs($calc($char(heading)-$heading(@TY,@TX)))>$if(n,$char(speed)>0,$calc(2700/$char(speed)),10) {
        /call Move 0
        /face nolook loc @TY,@TX 
        :WaitForTurnLook
        /varset TempFacing $char(heading)
        /call Delay 1
        /if n $char(heading)!=@TempFacing /goto :WaitForTurnLook
        /call Delay 1
    } else {
        /face nolook loc @TY,@TX 
    }
} else { 
    /face fast nolook loc @TY,@TX 
} 
/look @Angle
/return 

| -------------------------------------------------------------------------------- 
Sub FollowIncLoc(TY,TX,TZ) 
/declare TempFacing local
/varset CheckLocTimer 1
/varadd ObstacleCount 1 
/varadd TotalObstCount 1
/varset PositionTimer 1s
/if $spawn(@FollowID)==TRUE /if n $spawn(@FollowID,distance,3d)<=$calc(@FollowDistance+$calc($char(speed)/30)) { 
    /call Move 0
    /if $spawn(@FollowID)==TRUE /if n $spawn(@FollowID,speed)==0 {
        /face nolook id @FollowID
        :WaitForTurnFoll
        /varset TempFacing $char(heading)
        /call Delay 1
        /if n $char(heading)!=@TempFacing /goto :WaitForTurnFoll
        :FollowDistClose 
        /if n @PositionTimer>0 /if $spawn(@FollowID)==TRUE {
            /if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /call SimpleKeyPress FORWARD 1 
            /if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /call SimpleKeyPress BACK 1 
            /if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /goto :FollowDistClose 
            /if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /goto :FollowDistClose 
        }
    }
    /call ClearLocs
    /if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
    /return
}
/if ((n $heading(@TY,@TX)<$calc(@StoreHeading-90) || n $heading(@TY,@TX)>$calc(@StoreHeading+90)) || n $distance(@TY,@TX,@TZ)<$if(n,$char(speed)!=0,$calc($calc($char(speed)/@SpeedSense)+@DistanceModifier),$calc($calc(200/@SpeedSense)+@DistanceModifier))) {
    /varset LastLoc "@LocArray(@CurrLoc)" 
    /varadd CurrLoc 1
    /if n @CurrLoc<@NumLocs /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)")) 
    /varset ObstacleCount 0 
    /varset TotalObstCount 0 
}
/if n @CurrLoc==@NumLocs { 
    /call Move 0 
    /if $spawn(@FollowID)==TRUE {
        /face nolook id @FollowID
        :WaitForTurnFoll2
        /varset TempFacing $char(heading)
        /call Delay 1
        /if n $char(heading)!=@TempFacing /goto :WaitForTurnFoll2
        :FollowDistClose2 
        /if n @PositionTimer>0 /if $spawn(@FollowID)==TRUE /if n $spawn(@FollowID,speed)==0 {
        /if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance+8) {
                /if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /call SimpleKeyPress FORWARD 1 
                /if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /call SimpleKeyPress BACK 1 
                /if n $spawn(@FollowID,distance,3d)>$calc(@FollowDistance+8) /goto :FollowDistClose2 
                /if n $spawn(@FollowID,distance,3d)<$calc(@FollowDistance-8) /goto :FollowDistClose2 
            }
        }
    }
    /call ClearLocs 
    /if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
    /return
} 
/if n @ObstacleCount>6 /call CheckObstacle 
/if n @CurrLoc<@NumLocs {
    /if n @TotalObstCount>50 { 
        /varset LastLoc "@LocArray(@CurrLoc)" 
        /varadd CurrLoc 1 
        /varset ObstacleCount 0 
        /varset TotalObstCount 0 
    } 
} else {
    /echo -(( Cannot get to location because of obstacles!  Aborting. ))-
    /call StopFunction
    /return
}
/if n @NumLocs>@CurrLoc {
    /call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
    /call CheckMoving 
}
/return 

Sub GetClosestLoc 
| -------------------------------------------------------------------------------- 
/declare FindClosest local 
/declare TempClosest local 
/declare Closest local 
/varset TempClosest 9999 
/varset Closest 0
/for FindClosest 0 to @NumLocs 
    /if n $distance($arg(1,"@LocArray(@FindClosest)"),$arg(2,"@LocArray(@FindClosest)"),$arg(3,"@LocArray(@FindClosest)"))<@TempClosest { 
        /varset TempClosest $distance($arg(1,"@LocArray(@FindClosest)"),$arg(2,"@LocArray(@FindClosest)"),$arg(3,"@LocArray(@FindClosest)"))
        /varset Closest @FindClosest 
    } 
/next FindClosest 
/varset CurrLoc @Closest 
/return 

| -------------------------------------------------------------------------------- 
Sub GetCommand 
/varset PathingFlag 0 
/varset PBPFName "$arg(1,"@PlayCommandQueue(@PlayQueueCurr)")" 
/varset PBIterations "$arg(2,"@PlayCommandQueue(@PlayQueueCurr)")" 
/varset PBDirection "$arg(3,"@PlayCommandQueue(@PlayQueueCurr)")" 
/varset PBPingPong "$arg(4,"@PlayCommandQueue(@PlayQueueCurr)")" 
/varset PBZone "$arg(5,"@PlayCommandQueue(@PlayQueueCurr)")" 
/if "@PBDirection"~~"r" { 
    /varset Direction "reverse" 
} else { 
    /varset Direction "forward" 
} 
/if "@PBPingPong"=="pp" { 
    /varset PingPongCount 1 
} else { 
    /varset PingPongCount 0 
} 
/if "@PBIterations"=="loop" { 
    /varset Iterations 1 
} else { 
    /varset Iterations @PBIterations 
} 
/return 

| -------------------------------------------------------------------------------- 
| Partially plagerized from McKorr's autofight.inc 
Sub HitObstacle 
/declare TempVarHit local 
/call Move 0 
/keypress BACK
/keypress BACK hold
/call Delay $calc($rand(3)+3) 
/keypress BACK
/if n $rand(99)>49 { 
    /keypress RIGHT
    /keypress RIGHT hold
} else { 
    /keypress LEFT
    /keypress LEFT hold
} 
/call Delay $calc($rand(3)+3) 
/keypress RIGHT
/keypress LEFT
/call Move 1 
/call Delay 3 
/keypress JUMP
/call Delay 1 
/face fast nolook loc $arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)") 
/return 

| -------------------------------------------------------------------------------- 
Sub IncrementLoc(TY,TX,TZ) 
/varset CheckLocTimer 1
/varadd ObstacleCount 1 
/varadd TotalObstCount 1
/if ((n $heading(@TY,@TX)<$calc(@StoreHeading-90) || n $heading(@TY,@TX)>$calc(@StoreHeading+90)) || n $distance(@TY,@TX,@TZ)<$if(n,$char(speed)!=0,$calc($calc($char(speed)/@SpeedSense)+@DistanceModifier),$calc($calc(200/@SpeedSense)+@DistanceModifier))) {
    /varset LastLoc "@LocArray(@CurrLoc)" 
    /if "@Direction"=="forward" { 
        /varadd CurrLoc 1
        /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
    } else { 
        /varsub CurrLoc 1 
        /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)")) 
    } 
    /varset ObstacleCount 0 
    /varset TotalObstCount 0 
} 
/if "@Direction"=="forward" { 
    /if n @CurrLoc>@NumLocs { 
        /if n @PingPongCount==0 { 
            /if "@PBIterations"!="loop" { 
                /varsub Iterations 1 
            } else { 
                /varset CurrLoc 0 
                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
            } 
            /if n @Iterations==0 { 
                /if "@PBZone"=="z" /call TryToZone 
                /if n @PlayQueueCurr==@PlayQueueNum { 
                    /call Move 0 
                    /varset PlayQueueCurr 0 
                    /varset PlayQueueNum 0 
                    /varset PathingFlag 0 
                    /call ClearLocs 
                    /if n @SilentFlag==0 /echo -[ Done with playback! ]- 
                } else { 
                    /varadd PlayQueueCurr 1 
                    /call GetCommand 
                    /call LoadPathFile "@PBPFName" 
                    /if n $return==0 { 
                        /if n @SilentFlag==0 /echo -[ Started play back of path file -( "@PBPFName" )- ]- 
                        /if "@Direction"=="forward" { 
                            /if "@PBDirection"~~"c" { 
                                /call GetClosestLoc 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } else { 
                                /varset CurrLoc 0 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } 
                        } else { 
                            /if "@PBDirection"~~"c" { 
                                /call GetClosestLoc 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } else { 
                                /varset CurrLoc @NumLocs 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } 
                        } 
                        /varset PathingFlag 1 
                    } 
                } 
            } else { 
                /if "@PBPingPong"=="pp" { 
                    /varset PingPongCount 1 
                    /varset Direction "reverse" 
                    /varset CurrLoc @NumLocs 
                    /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                } 
            } 
        } else { 
            /varsub PingPongCount 1 
            /varset Direction "reverse" 
            /varset CurrLoc @NumLocs 
            /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
        } 
    }
    /if n @ObstacleCount>6 /call CheckObstacle 
    /if n @TotalObstCount>50 { 
        /varset LastLoc "@LocArray(@CurrLoc)" 
        /if n @CurrLoc<@NumLocs {
            /varadd CurrLoc 1 
            /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
            /varset ObstacleCount 0 
            /varset TotalObstCount 0 
        } else {
            /echo -(( Cannot get to location because of obstacles!  Aborting. ))-
            /call StopFunction
            /return
        }
    } 
    /if n @PathingFlag==1 {
        /call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
        /call CheckMoving 
    }
} else { 
    /if n @CurrLoc<0 { 
        /if n @PingPongCount==0 { 
            /if "@PBIterations"!="loop" { 
                /varsub Iterations 1 
            } else { 
                /varset CurrLoc @NumLocs
                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))   
            } 
            /if n @Iterations==0 { 
                /if "@PBZone"=="z" /call TryToZone 
                /if n @PlayQueueCurr==@PlayQueueNum { 
                    /call Move 0 
                    /varset PlayQueueCurr 0 
                    /varset PlayQueueNum 0 
                    /varset PathingFlag 0 
                    /call ClearLocs 
                    /if n @SilentFlag==0 /echo -[ Done with playback! ]- 
                } else { 
                    /varadd PlayQueueCurr 1 
                    /call GetCommand 
                    /call LoadPathFile "@PBPFName" 
                    /if n $return==0 { 
                        /if n @SilentFlag==0 /echo -[ Started play back of path file -( "@PBPFName" )- ]- 
                        /if "@Direction"=="forward" { 
                            /if "@PBDirection"~~"c" { 
                                /call GetClosestLoc
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))   
                            } else { 
                                /varset CurrLoc 0 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } 
                        } else { 
                            /if "@PBDirection"~~"c" { 
                                /call GetClosestLoc 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } else { 
                                /varset CurrLoc @NumLocs 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } 
                        } 
                        /varset PathingFlag 1 
                    } 
                } 
            } else { 
                /if "@PBPingPong"=="pp" { 
                    /varset PingPongCount 1 
                    /varset Direction "forward" 
                    /varset CurrLoc 0 
                    /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                } 
            } 
        } else { 
            /varsub PingPongCount 1 
            /varset Direction "forward" 
            /varset CurrLoc 0 
            /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
        } 
    }
    /if n @ObstacleCount>6 /call CheckObstacle 
    /if n @TotalObstCount>50 { 
        /if n @CurrLoc>0 {
            /varset LastLoc "@LocArray(@CurrLoc)" 
            /varsub CurrLoc 1 
            /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
            /varset ObstacleCount 0 
            /varset TotalObstCount 0 
        } else {
            /echo -(( Cannot get to location because of obstacles!  Aborting. ))-
            /call StopFunction
            /return
        }
    } 
    /if n @PathingFlag==1 {
        /call FindLookAngle $arg(1,"@LocArray(@CurrLoc)") $arg(2,"@LocArray(@CurrLoc)") $arg(3,"@LocArray(@CurrLoc)") 
        /call CheckMoving 
    }
} 
/doevents 
/return 

| -------------------------------------------------------------------------------- 
Sub LoadPathFile(PFIniName) 
/declare AdvPathIniFile local 
/varset AdvPathIniFile "PathFile_" 
/varcat AdvPathIniFile "@PFIniName" 
/varcat AdvPathIniFile ".ini" 
/call ClearLocs 
:LoadPlayFile 
/varset LocArray(@NumLocs) "$ini("@AdvPathIniFile","PFLocs","$int(@NumLocs)")" 
/if "@LocArray(@NumLocs)"=="NOTFOUND" { 
    /varsub NumLocs 1 
    /goto :DoneLoadPlayFile 
} 
/if "@LocArray(@NumLocs)"=="Empty" { 
    /varsub NumLocs 1 
    /goto :DoneLoadPlayFile 
} 
/varadd NumLocs 1 
/goto :LoadPlayFile 

:DoneLoadPlayFile 
/if n @NumLocs<=0 { 
    /if n @SilentFlag==0 /echo -(( No pathing information found in -( "@PFIniName" )- ))- 
    /varset PathingFlag 0 
    /call ClearLocs 
    /return 1 
} 
/return 0 

| -------------------------------------------------------------------------------- 
Sub Move(MoveCommand) 
/if n @PauseFlag==0 { 
    /if n @MoveCommand==1 { 
        /keypress FORWARD
        /keypress FORWARD hold
    } else { 
        /keypress FORWARD
        /keypress RIGHT
        /keypress LEFT
        /keypress BACK
    } 
} else { 
    /if n @MoveCommand==0 { 
        /keypress FORWARD
        /keypress RIGHT
        /keypress LEFT
        /keypress BACK
    } 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub RecordPath 
/if n @ManualRecord==0 {
    /if n @RecordPathFlag==1 { 
        /if n @NumLocs==0 { 
            /varset LocArray(@NumLocs) "$char(y) $char(x) $char(z)" 
            /varadd NumLocs 1 
        } else { 
            /if n $distance($arg(1,"@LocArray($calc(@NumLocs-1))"),$arg(2,"@LocArray($calc(@NumLocs-1))"),$arg(3,"@LocArray($calc(@NumLocs-1))"))>12 { 
                /varset LocArray(@NumLocs) "$char(y) $char(x) $char(z)" 
                /varadd NumLocs 1 
            } 
        } 
    }
}
/doevents 
/return 

| -------------------------------------------------------------------------------- 
Sub ShapePlot(ObjectNumSides,ObjectSize,CharStartY,CharStartX,CharStartZ)
/declare PointNumber local
/for PointNumber 1 to @ObjectNumSides
    /varset XCoordinate(@PointNumber) $calc($calc(@ObjectSize*$cos($calc($calc(360/@ObjectNumSides)*$calc(@PointNumber-1))))+@CharStartX)
    /varset YCoordinate(@PointNumber) $calc($calc(@ObjectSize*$sin($calc($calc(360/@ObjectNumSides)*$calc(@PointNumber-1))))+@CharStartY)
    /varset ZCoordinate(@PointNumber) @CharStartZ
/next PointNumber
/for PointNumber 1 to @ObjectNumSides
    /varset LocArray($calc(@PointNumber-1)) "@YCoordinate(@PointNumber) @XCoordinate(@PointNumber) @ZCoordinate(@PointNumber)"
/next PointNumber
/varset CurrLoc 0
/varset NumLocs @ObjectNumSides
/return

| -------------------------------------------------------------------------------- 
Sub TargetMob(TgtName) 
/if n $searchspawn(pc,"@TgtName")>0 { 
    /target clear 
    /call Delay 2 
    /target pc "@TgtName" 
    /call Delay 4 
    /if $target()==TRUE /if "$target(name,clean)"=="@TgtName" { 
        /varset ZoneTimer 0
        /varset ZoneFlag 0
        /varset FollowFlag 1 
        /varset FollowID $target(id)
        /if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
        /if n @SilentFlag==0 /echo -[ Following -( $target(name,clean) )- ]- 
    } 
} else /if n $searchspawn(npc,"@TgtName")>0 {
    /target clear 
    /call Delay 2 
    /target npc "@TgtName" 
    /call Delay 4 
    /if $target()==TRUE /if "$target(name,clean)"=="@TgtName" { 
        /varset ZoneTimer 0
        /varset ZoneFlag 0
        /varset FollowFlag 1 
        /varset FollowID $target(id) 
        /if n @CurrLoc==0 /varset CurrFollLoc "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)"
        /if n @SilentFlag==0 /echo -[ Following -( $target(name,clean) )- ]- 
    } 
} else /if n @ZoneFollow==1 {
    /if n @CurrLoc==@NumLocs { 
        /if n @ZoneTimer>0 {
            /varset ZoneFlag 1
            /delay 1s
        } else {
            /if n @ZoneFlag==0 {
                /call ClearLocs 
                /call TryToZone 
            } else {
                /varset ZoneFlag 0
                /varset FollowID 0
                /call StopFunction
            }
        }
    }
} 
/return 

| -------------------------------------------------------------------------------- 
Sub TrackFollow 
/if n @FollowFlag==1 { 
    /if n @FollowID>0 {    
        /if n @NumLocs==0 { 
            /if n $spawn(@FollowID,distance,3d)>@FollowDistance { 
                /if $char(ismoving)==FALSE {
                    /varset LocArray(@NumLocs) "@CurrFollLoc" 
                    /varadd NumLocs 1
                }
                /varset LocArray(@NumLocs) "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)" 
                /varset StoreHeading $heading($arg(1,"@LocArray(@NumLocs)"),$arg(2,"@LocArray(@NumLocs)")) 
                /if "@LocArray(@NumLocs)"!="0 0 0" /varadd NumLocs 1 
            } 
        } else { 
            /if n $distance($arg(1,"@LocArray($calc(@NumLocs-1))"),$arg(2,"@LocArray($calc(@NumLocs-1))"),$arg(3,"@LocArray($calc(@NumLocs-1))"):$spawn(@FollowID,y),$spawn(@FollowID,x),$spawn(@FollowID,z))>$if(n,$spawn(@FollowID,speed)!=0,$calc($calc($spawn(@FollowID,speed)/@SpeedSense)+@DistanceModifier),$calc($calc(200/@SpeedSense)+@DistanceModifier)) { 
                /varset LocArray(@NumLocs) "$spawn(@FollowID,y) $spawn(@FollowID,x) $spawn(@FollowID,z)" 
                /if "@LocArray(@NumLocs)"!="0 0 0" /varadd NumLocs 1 
            } 
        } 
    }
} 
/doevents 
/return 

| -------------------------------------------------------------------------------- 
Sub TryToZone 
/declare InCurrZone local 
/declare TempStoreTgt local
/varset TempStoreTgt 0
/varset InCurrZone "$zone" 
/call Move 0 
/if $target()==TRUE /varset TempStoreTgt $target(id)
/doortarget 
/delay 3 
/if ("$target(name)"~~"port" || "$target(name)"~~"tele") /if n $target(distance)<=50 { 
    /face fast nolook door 
    :ZoneMoveCloser 
    /if n $target(distance)>15 /call SimpleKeyPress FORWARD 1 0
    /if n $target(distance)<11 /call SimpleKeyPress BACK 1 0
    /if n $target(distance)>15 /goto :ZoneMoveCloser 
    /if n $target(distance)<11 /goto :ZoneMoveCloser 
    /keypress USE hold
    /keypress USE
    /delay 1 
    /keypress USE hold
    /keypress USE
    /varset ZoneTimer 5s 
    :WaitForZone 
    /delay 1 
    /if "$zone"!="@InCurrZone" /goto :Zoned 
    /if n @ZoneTimer>0 /goto :WaitForZone 
    /if n @TempStoreTgt>0 {
        /if $spawn(@FollowID)==TRUE /target id @TempStoreTgt
    } else {
        /target clear
    }
    :Zoned 
} 
/if "$zone"=="@InCurrZone" { 
    /keypress FORWARD
    /keypress FORWARD hold
    /delay 1s 
    /keypress FORWARD
    /if n @TempStoreTgt>0 {
        /if "$zone"=="@InCurrZone" /if $spawn(@TempStoreTgt)==TRUE /target id @TempStoreTgt
    } else {
        /target clear
    }
    /varset ZoneTimer 20s 
    :WaitForZone2 
    /delay 1 
    /if "$zone"!="@InCurrZone" /goto :Zoned2 
    /if n @ZoneTimer>0 /goto :WaitForZone2 
    /if n @SilentFlag==0 /echo  -(( Couldn't zone properly.  Stopping. ))-     
    /varset PauseHolder NULL 
    /varset PauseFlag 0 
    /varset PathingFlag 0
    /varset FollowFlag 0 
    /varset RecordPathFlag 0 
    /call ClearLocs
    :Zoned2 
}
/call Move 0
/return 

| -------------------------------------------------------------------------------- 
Sub FollowFunction(FuncText) 
/if n @PauseFlag==0 { 
    /if n @PathingFlag==0 { 
        /if n @RecordPathFlag==0 { 
            /if "@FuncText"=="" {
                /varset FollowName "NULL"
            } else {
                /varset FollowName "@FuncText" 
            }
            /if "@FollowName"!="NULL" {
                /call ClearLocs 
                /call Move 0 
                /call TargetMob "@FollowName" 
            } else {
                /if n @SilentFlag==0 /echo -(( No follow target specified. You must provide the name of the npc/player you want to follow. ))-
            }
        } else { 
            /if n @SilentFlag==0 /echo -(( You cannot start following while recording a pathfile! ))- 
        } 
    } else { 
        /if n @SilentFlag==0 /echo -(( You cannot start following while playing back a pathfile! ))- 
    } 
} else { 
    /if n @SilentFlag==0 /echo -(( You cannot start following while paused! ))- 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalFollow(EvtText) 
/if "$mid(6,6,"@EvtText")"=="follow" { 
    /call FollowFunction "$mid(13,$calc($strlen("@EvtText")-13),"@EvtText")" 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub PauseFunction 
/if n @PauseFlag==0 { 
    /if n @PathingFlag==0 { 
        /if n @FollowFlag==0 { 
            /if n @RecordPathFlag==0 { 
                /if n @SilentFlag==0 /echo -(( There is nothing to pause or unpause! ))- 
            } else { 
                /varset PauseFlag 1 
                /varset PauseHolder "record" 
                /varset RecordPathFlag 0 
                /if n @SilentFlag==0 /echo -[ PAUSED recording of path file -( "@RecordPFName" )- ]- 
                /if n @SilentFlag==0 /echo -[ Issue the pause command again to resume recording. ]- 
            } 
        } else { 
            /varset PauseFlag 1 
            /varset PauseHolder "follow" 
            /call Move 0 
            /if n @SilentFlag==0 /echo -[ PAUSED following of -( "@FollowName" )- ]- 
            /if n @SilentFlag==0 /echo -[ Issue the pause command again to resume following. ]- 
        } 
    } else { 
        /varset PauseFlag 1 
        /varset PauseHolder "playback" 
        /varset PathingFlag 0 
        /call Move 0 
        /if n @SilentFlag==0 /echo -[ PAUSED playback of path file -( "@PBPFName" )- ]- 
        /if n @SilentFlag==0 /echo -[ Issue the pause command again to resume playback. ]- 
    } 
} else { 
    /if "@PauseHolder"=="record" { 
        /varset PauseFlag 0 
        /varset RecordPathFlag 1 
        /if n @SilentFlag==0 /echo -[ RESUMED recording of path file -( "@RecordPFName" )- ]- 
    } 
    /if "@PauseHolder"=="playback" { 
        /varset PauseFlag 0 
        /varset PathingFlag 1 
        /if n @SilentFlag==0 /echo -[ RESUMED playback of path file -( "@PBPFName" )- ]- 
    } 
    /if "@PauseHolder"=="follow" { 
        /varset PauseFlag 0 
        /if n @SilentFlag==0 /echo -[ RESUMED following of -( "@FollowName" )- ]- 
    } 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalPause(EvtText) 
/if "$mid(6,5,"@EvtText")"=="pause" { 
    /call PauseFunction 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub PlotFunction
/if n @ManualRecord==1 {
    /if n @RecordPathFlag==1 {
        /varset LocArray(@NumLocs) "$char(y) $char(x) $char(z)" 
        /if n @SilentFlag==0 /echo Location: Y:$arg(1,"@LocArray(@NumLocs)") X:$arg(2,"@LocArray(@NumLocs)") Z:$arg(3,"@LocArray(@NumLocs)") Plotted 
        /varadd NumLocs 1
    } else {
        /if n @PauseFlag==0 {
            /if n @SilentFlag==0 /echo -[ You aren't recording anything! ]-
        } else {
            /if n @SilentFlag==0 /echo -[ You must unpause your recording in order to plot! ]-
        }
    }
} else {
    /if n @SilentFlag==0 /echo -[ You are not in Manual Record Mode! ]-
}
/return

| -------------------------------------------------------------------------------- 
Sub Event_LocalPlot(EvtText)
/if "$mid(6,4,"@EvtText")"=="plot" { 
    /call PlotFunction
} 
/return 

| -------------------------------------------------------------------------------- 
Sub PlayFunction(FuncText) 
/declare PlayNm local 
/declare PlayItr local 
/declare PlayDctn local 
/declare PlayPong local 
/declare PlayZn local 
/declare TempCountVar local 
/if n @PauseFlag==0 { 
    /if n @PathingFlag==0 { 
        /if n @RecordPathFlag==0 { 
            /if n @FollowFlag==0 { 

                /if n @GetMoreCommands==1 { 
                    /varset GetMoreCommands 0 
                } else { 
                    /varset PlayQueueNum 0 
                } 

                :InitParse 
                /varset PlayNm "" 
                /varset PlayItr "" 
                /varset PlayDctn "" 
                /varset PlayPong "" 
                :ParsePlayCommands 

                /if n $instr(" ","@FuncText")>0 /varset PlayNm "$left($instr(" ","@FuncText"),"@FuncText")" 
                /if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")" 

                /if n $instr(" ","@FuncText")>0 /varset PlayItr "$left($instr(" ","@FuncText"),"@FuncText")" 
                /if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")" 

                /if n $instr(" ","@FuncText")>0 /varset PlayDctn "$left($instr(" ","@FuncText"),"@FuncText")" 
                /if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")" 

                /if n $instr(" ","@FuncText")>0 /varset PlayPong "$left($instr(" ","@FuncText"),"@FuncText")" 
                /if n $instr(" ","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(" ","@FuncText"))-1),"@FuncText")" 

                /if n $instr(";","@FuncText")>0 { 
                    /if n $instr(";","@FuncText")>0 /varset PlayZn "$left($instr(";","@FuncText"),"@FuncText")" 
                    /if n $instr(";","@FuncText")>0 /varset FuncText "$right($calc($calc($strlen("@FuncText")-$instr(";","@FuncText"))-1),"@FuncText")" 

                    /if "@PlayNm"!="" /if "@PlayItr"!="" /if "@PlayDctn"!="" /if "@PlayPong"!="" /if "@PlayZn"!="" { 
                        /varset PlayCommandQueue(@PlayQueueNum) "@PlayNm @PlayItr @PlayDctn @PlayPong @PlayZn" 
                        /varadd PlayQueueNum 1 
                        /goto :InitParse 
                    } else { 
                        /if n @SilentFlag==0 /echo -(( Playback syntax error detected.  Please try your command again. ))- 
                        /return 
                    } 
                } else { 
                    /if n $instr("+","@FuncText")>0 { 
                        /varset PlayZn "$left($instr("+","@FuncText"),"@FuncText")" 
                        /varset GetMoreCommands 1 
                    } else { 
                        /varset PlayZn "@FuncText" 
                    } 

                    /if "@PlayNm"!="" /if "@PlayItr"!="" /if "@PlayDctn"!="" /if "@PlayPong"!="" /if "@PlayZn"!="" { 
                        /varset PlayCommandQueue(@PlayQueueNum) "@PlayNm @PlayItr @PlayDctn @PlayPong @PlayZn" 
                        /if n @GetMoreCommands==1 /varadd PlayQueueNum 1 
                        /goto :DonePlayParse 
                    } else { 
                        /if n @SilentFlag==0 /echo -(( Playback syntax error detected.  Please try your command again. ))- 
                        /return 
                    } 
                } 

                :DonePlayParse 

                /if n @GetMoreCommands==1 { 
                    /if n @SilentFlag==0 /echo -[ Path Extender Detected. $int(@PlayQueueNum) commands queued.  Continue entering lines. ]- 
                    /return 
                } 

                /if n @SilentFlag==0 /echo -[------------------------------------------------]- 
                /if n @SilentFlag==0 /echo -[ There $if(n,$int($calc(@PlayQueueNum+1))==1,is,are) $int($calc(@PlayQueueNum+1)) $if(n,$int($calc(@PlayQueueNum+1))==1,path,paths) to be run. 
                /if n @SilentFlag==0 /echo -[------------------------------------------------]- 
                /for TempCountVar 0 to @PlayQueueNum 
                    /if n @SilentFlag==0 /echo -[ Path Command $int($calc(@TempCountVar+1)): @PlayCommandQueue(@TempCountVar) 
                /next TempCountVar 
                /if n @SilentFlag==0 /echo -[------------------------------------------------]- 

                /varset PlayQueueCurr 0 
                /call GetCommand 
                /call LoadPathFile "@PBPFName" 
                /if n $return==0 { 
                    /if n @SilentFlag==0 /echo -[ Started play back of path file -( "@PBPFName" )- ]- 
                        /if "@Direction"=="forward" { 
                            /if "@PBDirection"~~"c" { 
                                /call GetClosestLoc 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } else { 
                                /varset CurrLoc 0 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } 
                        } else { 
                            /if "@PBDirection"~~"c" { 
                                /call GetClosestLoc 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } else { 
                                /varset CurrLoc @NumLocs 
                                /varset StoreHeading $heading($arg(1,"@LocArray(@CurrLoc)"),$arg(2,"@LocArray(@CurrLoc)"))  
                            } 
                        } 
                    /varset PathingFlag 1 
                } 

            } else { 
                /if n @SilentFlag==0 /echo -(( You cannot start playback while in follow mode! ))- 
            } 
        } else { 
            /if n @SilentFlag==0 /echo -(( You cannot start playback while recording! ))- 
        } 
   } else { 
        /if n @SilentFlag==0 /echo -(( You are already playing back path file -( "@PBPFName" )- ))- 
   } 
} else { 
    /if n @SilentFlag==0 /echo -(( You cannot start playback while paused! ))- 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalPlay(EvtText) 
/if "$mid(6,5,"@EvtText")"=="play:" { 
    /call PlayFunction "$mid(11,$calc($strlen("@EvtText")-11),"@EvtText")" 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub PatternFunction(FuncText) 
/if n @PauseFlag==0 { 
    /if n @PathingFlag==0 { 
        /if n @FollowFlag==0 { 
            /if n @RecordPathFlag==0 { 
                /if "$arg(1,"@FuncText")"!="" /if "$arg(2,"@FuncText")"!="" {
                    /call ShapePlot $arg(1,"@FuncText") $arg(2,"@FuncText") $char(y) $char(x) $char(z)
                    /varset RecordPFName "TempShape"
                    /varset RecordPathFlag 1
                    /call StopFunction
                    /call PlayFunction "@RecordPFName loop f nopp noz" 
                }
            } else { 
                /if n @SilentFlag==0 /echo -(( You are already recording path file -( @RecordPFName )- ))- 
            } 
       } else { 
           /if n @SilentFlag==0 /echo -(( You cannot start a pattern playback while in follow mode! ))- 
       } 
   } else { 
        /if n @SilentFlag==0 /echo -(( You cannot start a pattern playback while playing back a path! ))- 
   } 
} else { 
    /if n @SilentFlag==0 /echo -(( You cannot start a pattern playback while paused! ))- 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalPattern(EvtText)
/if "$mid(6,8,"@EvtText")"=="pattern:" { 
    /call PatternFunction "$mid(14,$calc($strlen("@EvtText")-14),"@EvtText")" 
}
/return

| -------------------------------------------------------------------------------- 
Sub RecordFunction(FuncText) 
/if "$arg(2,"@FuncText")"=="manual" {
    /varset ManualRecord 1
} else {
    /varset ManualRecord 0
}
/if n @PauseFlag==0 { 
    /if n @PathingFlag==0 { 
        /if n @FollowFlag==0 { 
            /if n @RecordPathFlag==0 { 
                /varset RecordPFName "$arg(1,"@FuncText")"
                /varset RecordPathFlag 1 
                /call ClearLocs 
                /if n @SilentFlag==0 /echo -[ Started recording path file -( "@RecordPFName" )- ]- 
            } else { 
                /if n @SilentFlag==0 /echo -(( You are already recording path file -( @RecordPFName )- ))- 
            } 
       } else { 
           /if n @SilentFlag==0 /echo -(( You cannot start recording while in follow mode! ))- 
       } 
   } else { 
        /if n @SilentFlag==0 /echo -(( You cannot start recording while playing back a path! ))- 
   } 
} else { 
    /if n @SilentFlag==0 /echo -(( You cannot start recording while paused! ))- 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalRecord(EvtText) 
/if "$mid(6,6,"@EvtText")"=="record" { 
    /call RecordFunction "$mid(13,$calc($strlen("@EvtText")-13),"@EvtText")" 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub GotoFunction(TempYCoord,TempXCoord,TempZCoord) 
/if ($defined(TempYCoord)==FALSE || $defined(TempYCoord)==FALSE) {
    /if n @SilentFlag==0 /echo -(( You must at least provide the Y and X coordinates to run to. ))- 
    /return
}
/if $defined(TempZCoord)==FALSE {
    /declare TempZCoord local
    /varset TempZCoord $char(z)
}
/if n @PauseFlag==0 { 
    /if n @PathingFlag==0 { 
        /if n @FollowFlag==0 { 
            /if n @RecordPathFlag==0 { 
                /call ClearLocs 
                /varset LocArray(0) "@TempYCoord @TempXCoord @TempZCoord" 
                /varset LocArray(1) "@TempYCoord @TempXCoord @TempZCoord" 
                /varset RecordPFName "GotoLoc"
                /varset RecordPathFlag 1
                /varset CurrLoc 1
                /varset NumLocs 2
                /call StopFunction
                /call PlayFunction "@RecordPFName 1 f nopp noz" 
                /if n @SilentFlag==0 /echo -[ Running to location:@TempYCoord,@TempXCoord,@TempZCoord ]- 
            } else { 
                /if n @SilentFlag==0 /echo -(( You cannot use goto while recording. ))- 
            } 
       } else { 
           /if n @SilentFlag==0 /echo -(( You cannot use goto while in follow mode! ))- 
       } 
   } else { 
        /if n @SilentFlag==0 /echo -(( You cannot use goto while playing back a path! ))- 
   } 
} else { 
    /if n @SilentFlag==0 /echo -(( You cannot use goto while paused! ))-
}
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalGoto(EvtText) 
/if "$mid(6,5,"@EvtText")"=="goto " { 
    /varset EvtText "$mid(11,$calc($strlen("@EvtText")-11),"@EvtText")" 
    /declare TempYCrd local
    /declare TempXCrd local
    /declare TempZCrd local
    /varset TempYCrd ""
    /varset TempXCrd ""
    /varset TempZCrd ""
    /if "$arg(1,"@EvtText")"!="" /if "$arg(2,"@EvtText")"!="" {
        /if n $instr(" ","@EvtText")>0 {
            /varset TempYCrd "$mid(0,$instr(" ","@EvtText"),"@EvtText")"
            /varset EvtText "$mid($calc($instr(" ","@EvtText")+1),$calc($strlen("@EvtText")-$instr(" ","@EvtText")),"@EvtText")"
        }
        /if n $instr(" ","@EvtText")>0 {
            /varset TempXCrd "$mid(0,$instr(" ","@EvtText"),"@EvtText")"
            /varset EvtText "$mid($calc($instr(" ","@EvtText")+1),$calc($strlen("@EvtText")-$instr(" ","@EvtText")),"@EvtText")"
            /if n $strlen("@EvtText")>0 {
                /varset TempZCrd "$arg(1,"@EvtText")"
            } else {
                /varset TempZCrd "$char(z)"
            }
        } else {
            /varset TempXCrd "$arg(1,"@EvtText")"
            /varset TempZCrd "$char(z)"
        }
        /call GotoFunction "@TempYCrd" "@TempXCrd" "@TempZCrd"
    } else {
        /if n @SilentFlag==0 /echo -(( You must at least provide the Y and X coordinates to run to. ))- 
    }

} 
/return 

| -------------------------------------------------------------------------------- 
Sub DistanceFunction(FuncText) 
    /varset FollowDistance @FuncText
/return

| -------------------------------------------------------------------------------- 
Sub Event_LocalDistance(EvtText) 
/if "$mid(6,8,"@EvtText")"=="distance" { 
    /call DistanceFunction "$mid(15,$calc($strlen("@EvtText")-15),"@EvtText")" 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub SilentFunction 
/if n @SilentFlag==0 { 
    /varset SilentFlag 1 
    /echo -[ Silent Mode ON ]- 
} else { 
    /varset SilentFlag 0 
    /echo -[ Silent Mode OFF ]- 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalSilent(EvtText) 
/if "$mid(6,6,"@EvtText")"=="silent" { 
    /call SilentFunction 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub StopFunction 
/declare AdvPathIniFile local 
/declare NumOfRecs local 
/declare ClearVar local 
/declare RecCounter local 
/declare RecClrCounter local 
/if n @PathingFlag==0 { 
    /if n @RecordPathFlag==0 { 
        /if n @FollowFlag==0 { 
            /if n @PauseFlag==0 { 
                /if n @SilentFlag==0 /echo -(( There is nothing to be stopped! ))- 
            } else { 
                /if n @SilentFlag==0 /echo -[ Pause stopped and cleared! ]- 
            } 
        } else { 
            /varset FollowFlag 0 
            /call ClearLocs 
            /call Move 0 
            /if n @SilentFlag==0 /echo -[ Stopped following -( @FollowName )- ]- 
        } 
    } else { 
        /if n @NumLocs>0 {
            /varset RecordPathFlag 0 
            /if n @SilentFlag==0 /echo -[ Stopped recording path file -( "@RecordPFName" )- ]- 
            /if n @SilentFlag==0 /echo -[ Saving path file -( "@RecordPFName" )- Stand By... ]- 
            /varset AdvPathIniFile "PathFile_" 
            /varcat AdvPathIniFile "@RecordPFName" 
            /varcat AdvPathIniFile ".ini" 

            /varset RecClrCounter 0 
            :ClearRF 
            /varset ClearVar "$ini("@AdvPathIniFile","PFLocs","$int(@RecClrCounter)")" 
            /if "@ClearVar"!="NOTFOUND" { 
                /ini "@AdvPathIniFile" "PFLocs" "$int(@RecClrCounter)" "Empty" 
                /varadd RecClrCounter 1 
                /goto :ClearRF 
            } 
            /goto :DoneClearRF 
            :DoneClearRF 
            
            /varset RecCounter 0 
            :CheckClearRF 
            /if n @RecCounter==@RecClrCounter /goto :DoneCheckClearRF 
            /varset ClearVar "$ini("@AdvPathIniFile","PFLocs","$int(@RecCounter)")" 
            /if "@ClearVar"=="Empty" { 
               /varadd RecCounter 1 
               /goto :CheckClearRF 
            } 
            /goto :CheckClearRF 
            :DoneCheckClearRF 
  
            /for NumOfRecs 0 to $calc(@NumLocs-1)
                /ini "@AdvPathIniFile" "PFLocs" "$int(@NumOfRecs)" "@LocArray(@NumOfRecs)" 
            /next NumOfRecs 

            /varset RecCounter 0 
            :CheckRF 
            /if n @RecCounter==$calc(@NumLocs-2) /goto :DoneCheckRF 
            /varset ClearVar "$ini("@AdvPathIniFile","PFLocs","$int(@RecCounter)")" 
            /if "@ClearVar"=="NOTFOUND" /goto :CheckRF 
            /if "@ClearVar"=="Empty" /goto :CheckRF 
            /varadd RecCounter 1 
            /goto :CheckRF 

            :DoneCheckRF 
            /if n @SilentFlag==0 /echo -[ Save Completed. There were $int(@NumLocs) records total. ]- 
        } else {
            /varset RecordPathFlag 0 
            /echo -(( There were no locations to record! ))- 
        }
    } 
} else { 
    /if n @SilentFlag==0 /echo -[ Playback stopped! ]- 
    /call Move 0 
} 
/varset PauseHolder NULL 
/varset PauseFlag 0 
/varset PathingFlag 0 
/varset RecordPathFlag 0 
/call ClearLocs
/return 

| -------------------------------------------------------------------------------- 
Sub Event_LocalStop(EvtText) 
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="stop" { 
    /call StopFunction 
} 
/return 

| -------------------------------------------------------------------------------- 
Sub Event_ZoneEvent 
/varset FollowID 0
/if n @FollowFlag==1 { 
    /varset ZoneTimer 30s
    /call ClearLocs 
    /call Move 0 
    /delay 3s 
    /call ClearLocs 
    /call TargetMob "@FollowName" 
} 
/if n @PathingFlag==1 { 
    /call ClearLocs 
    /call Move 0 
    /delay 3s 
    /call ClearLocs 
} 
/call Move 0 
/return 

| -------------------------------------------------------------------------------- 
Sub SubModFunction
/if n @DistanceModifier>0 /varsub DistanceModifier 1 
/if n @SilentFlag==0 /echo Distance Modifier:[$int(@DistanceModifier)]     
/return

| -------------------------------------------------------------------------------- 
Sub Event_LocalSubMod(EvtText)
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="-" { 
    /call SubModFunction
} 
/return 

| -------------------------------------------------------------------------------- 
Sub AddModFunction
/varadd DistanceModifier 1 
/if n @SilentFlag==0 /echo Distance Modifier:[$int(@DistanceModifier)]     
/return

| -------------------------------------------------------------------------------- 
Sub Event_LocalAddMod(EvtText)
/if "$mid(6,$calc($strlen("@EvtText")-6),"@EvtText")"=="+" { 
    /call AddModFunction
} 
/return 

| -------------------------------------------------------------------------------- 
Sub InitAPFVars(FaceF,SpeedS,FollowDst) 
/declare CurrLoc global 
/declare NumLocs global 
/declare LocArray array 
/declare PathingFlag global 
/declare FollowID global 
/declare SpeedSense global 
/declare UseFaceFast global 
/declare MyLastXLoc global 
/declare MyLastYLoc global 
/declare ObstacleCount global 
/declare CurrZone global 
/declare LastLoc global 
/declare TotalObstCount global 
/declare FollowName global 
/declare RecordPathFlag global 
/declare PauseFlag global 
/declare PauseHolder global 
/declare PlayCommandQueue array 
/declare PlayQueueNum global 
/declare PlayQueueCurr global 
/declare RecordPFName global 
/declare PBPFName global 
/declare PBIterations global 
/declare Iterations global 
/declare PBDirection global 
/declare Direction global 
/declare GetMoreCommands global 
/declare PBPingPong global 
/declare PingPongCount global 
/declare PBZone global 
/declare FollowFlag global 
/declare ZoneFollow global 
/declare SilentFlag global 
/declare DelayTimer timer 
/declare ZoneTimer timer
/declare ZoneFlag global
/declare XCoordinate array
/declare YCoordinate array
/declare ZCoordinate array
/declare DistanceModifier global
/declare FollowDistance global
/declare CheckLocTimer timer
/declare PositionTimer timer
/declare StoreHeading global
/declare CurrFollLoc global
/declare DoorMoveTimer timer
/declare ManualRecord global
/varset DoorMoveTimer 0
/varset PositionTimer 0
/varset CheckLocTimer 0
/varset DistanceModifier 0
/varset ZoneFlag 0
/if $defined(FaceF)==FALSE { 
    /varset UseFaceFast 1 
} else { 
    /varset UseFaceFast @FaceF 
} 
/if $defined(SpeedS)==FALSE { 
    /varset SpeedSense 15 
} else { 
    /varset SpeedSense @SpeedS 
} 
/if $defined(FollowDst)==FALSE { 
    /varset FollowDistance 20
} else { 
    /varset FollowDistance @FollowDst 
} 
/varset SilentFlag 0 
/varset ZoneFollow 1 
/varset FollowFlag 0 
/varset PauseHolder NULL 
/varset PauseFlag 0 
/varset GetMoreCommands 0 
/varset PlayQueueCurr 0 
/varset PlayQueueNum 0 
/varset PBPFName NULL 
/varset RecordPFName NULL 
/varset RecordPathFlag 0 
/varset CurrLoc 0 
/varset NumLocs 0 
/varset PathingFlag 0 
/varset MyLastXLoc $char(x) 
/varset MyLastYLoc $char(y) 
/varset ObstacleCount 0 
/varset TotalObstCount 0 
/echo Advpath.inc by ml2517 -- Initialized. 
/return 
| -------------------------------------------------------------------------------- 
Last edited by ml2517 on Sat Mar 06, 2004 7:43 pm, edited 26 times in total.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Fri Jan 09, 2004 8:43 pm

personal.inc

Code: Select all

|personal.inc 
|Personal commands module example. 
|Version 9.01c 
|Date:1/15/2004 11:00pm 
| 
| 
| 
| 
| 

Sub PersonalCommands 
   /varset Commands(0,0) stick 
   /varset Commands(0,1) fire 
   /varset Commands(0,2) ice 
   /varset Commands(0,3) root 
   /varset Commands(0,4) snare 
   /varset Commands(0,5) invis 
   /varset Commands(0,6) door 
   /varset Commands(0,7) mountup
   /varset Commands(0,8) dismount 
   /varset Commands(0,9) lure 
   /varset Commands(0,10) lev 
   /varset Commands(0,11) hide 
   /varset Commands(0,12) sneak 
   /varset Commands(0,13) mask 
   /varset Commands(0,14) bp 
   /varset Commands(0,15) patch 
   /varset Commands(0,16) disc 
   /varset Commands(0,17) thorn 
   /varset Commands(0,18) buff 
   /varset Commands(0,19) groupbuff 
   /varset Commands(0,20) regen 
   /varset Commands(0,21) hot 
   /varset Commands(0,22) wood 
   /varset Commands(0,23) cure 
   /varset Commands(0,24) nuke 
   /varset Commands(0,25) slow 
   /varset Commands(0,26) debuff 
   /varset Commands(0,27) petbuff 
   /varset Commands(0,28) reportlom 
   /varset Commands(0,29) setlompct 
   /varset Commands(0,30) ear 
   /varset Commands(0,31) shield 
   /varset Commands(0,32) cobalt 
   /varset Commands(0,33) camo 
   /varset Commands(0,34) dcharm 
   /varset Commands(0,35) stuna 
   /varset Commands(0,36) stunb 
   /varset Commands(0,37) chainstun 
   /varset Commands(0,38) ddstuna 
   /varset Commands(0,39) ddstunb 
   /varset Commands(0,40) mezlow 
   /varset Commands(0,41) mezhigh 
   /varset Commands(0,42) mezae 
   /varset Commands(0,43) autobehind 
   /varset Commands(0,44) exp 
   /varset Commands(0,45) random 
   /varset Commands(0,46) singing 
   /varset Commands(0,47) sepic 
   /varset ArrayPers 47 
/return 

Sub SetupPersonalVars 
   /declare FireSpell global 
   /varset FireSpell "$ini(@IniFile,"Personal",FireSpell)" 
   /if "@FireSpell"=="NOTFOUND" /ini "@IniFile" Personal FireSpell "Fire Spell" 
   /declare IceSpell global 
   /varset IceSpell "$ini(@IniFile,"Personal",IceSpell)" 
   /if "@IceSpell"=="NOTFOUND" /ini "@IniFile" Personal IceSpell "Ice Spell" 
   /declare NukeSpell global 
   /varset NukeSpell "$ini(@IniFile,"Personal",NukeSpell)" 
   /if "@NukeSpell"=="NOTFOUND" /ini "@IniFile" Personal NukeSpell "Nuke Spell" 
   /declare RootSpell global 
   /varset RootSpell "$ini(@IniFile,"Personal",RootSpell)" 
   /if "@RootSpell"=="NOTFOUND" /ini "@IniFile" Personal RootSpell "Root Spell" 
   /declare SnareSpell global 
   /varset SnareSpell "$ini(@IniFile,"Personal",SnareSpell)" 
   /if "@SnareSpell"=="NOTFOUND" /ini "@IniFile" Personal SnareSpell "Snare Spell" 
   /declare InvisSpell global 
   /varset InvisSpell "$ini(@IniFile,"Personal",InvisSpell)" 
   /if "@InvisSpell"=="NOTFOUND" /ini "@IniFile" Personal InvisSpell "Invis Spell" 
   /declare SelfInvisSpell global 
   /varset SelfInvisSpell "$ini(@IniFile,"Personal",SelfInvisSpell)" 
   /if "@SelfInvisSpell"=="NOTFOUND" /ini "@IniFile" Personal SelfInvisSpell "Self Invis Spell" 
   /declare LureSpell global 
   /varset LureSpell "$ini(@IniFile,"Personal",LureSpell)" 
   /if "@LureSpell"=="NOTFOUND" /ini "@IniFile" Personal LureSpell "Lure Spell" 
   /declare SlowSpell global 
   /varset SlowSpell "$ini(@IniFile,"Personal",SlowSpell)" 
   /if "@SlowSpell"=="NOTFOUND" /ini "@IniFile" Personal SlowSpell "Slow Spell" 
   /declare DebuffSpell global 
   /varset DebuffSpell "$ini(@IniFile,"Personal",DebuffSpell)" 
   /if "@DebuffSpell"=="NOTFOUND" /ini "@IniFile" Personal DebuffSpell "Debuff Spell" 
   /declare LevSpell global 
   /varset LevSpell "$ini(@IniFile,"Personal",LevSpell)" 
   /if "@LevSpell"=="NOTFOUND" /ini "@IniFile" Personal LevSpell "Levitation Spell" 
   /declare RegenSpell global 
   /varset RegenSpell "$ini(@IniFile,"Personal",RegenSpell)" 
   /if "@RegenSpell"=="NOTFOUND" /ini "@IniFile" Personal RegenSpell "Regen Spell" 
   /declare HotSpell global 
   /varset HotSpell "$ini(@IniFile,"Personal",HotSpell)" 
   /if "@HotSpell"=="NOTFOUND" /ini "@IniFile" Personal HotSpell "Heal Over Time Spell" 
   /declare MountItem global 
   /varset MountItem "$ini(@IniFile,"Personal",MountItem)" 
   /if "@MountItem"=="NOTFOUND" /ini "@IniFile" Personal MountItem "Name of Mount Item" 
   /declare BuffSpell1 global 
   /varset BuffSpell1 "$ini(@IniFile,"Personal",BuffSpell1)" 
   /if "@BuffSpell1"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell1 "Name of Buff spell 1" 
   /declare BuffSpell2 global 
   /varset BuffSpell2 "$ini(@IniFile,"Personal",BuffSpell2)" 
   /if "@BuffSpell2"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell2 "Name of Buff spell 2" 
   /declare BuffSpell3 global 
   /varset BuffSpell3 "$ini(@IniFile,"Personal",BuffSpell3)" 
   /if "@BuffSpell3"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell3 "Name of Buff spell 3" 
   /declare BuffSpell4 global 
   /varset BuffSpell4 "$ini(@IniFile,"Personal",BuffSpell4)" 
   /if "@BuffSpell4"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell4 "Name of Buff spell 4" 
   /declare BuffSpell5 global 
   /varset BuffSpell5 "$ini(@IniFile,"Personal",BuffSpell5)" 
   /if "@BuffSpell5"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell5 "Name of Buff spell 5" 
   /declare BuffSpell6 global 
   /varset BuffSpell6 "$ini(@IniFile,"Personal",BuffSpell6)" 
   /if "@BuffSpell6"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell6 "Name of Buff spell 6" 
   /declare BuffSpell7 global 
   /varset BuffSpell7 "$ini(@IniFile,"Personal",BuffSpell7)" 
   /if "@BuffSpell7"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell7 "Name of Buff spell 7" 
   /declare BuffSpell8 global 
   /varset BuffSpell8 "$ini(@IniFile,"Personal",BuffSpell8)" 
   /if "@BuffSpell8"=="NOTFOUND" /ini "@IniFile" Personal BuffSpell8 "Name of Buff spell 8" 
   /declare GBuffSpell1 global 
   /varset GBuffSpell1 "$ini(@IniFile,"Personal",GBuffSpell1)" 
   /if "@GBuffSpell1"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell1 "Name of Group Buff spell 1" 
   /declare GBuffSpell2 global 
   /varset GBuffSpell2 "$ini(@IniFile,"Personal",GBuffSpell2)" 
   /if "@GBuffSpell2"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell2 "Name of Group Buff spell 2" 
   /declare GBuffSpell3 global 
   /varset GBuffSpell3 "$ini(@IniFile,"Personal",GBuffSpell3)" 
   /if "@GBuffSpell3"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell3 "Name of Group Buff spell 3" 
   /declare GBuffSpell4 global 
   /varset GBuffSpell4 "$ini(@IniFile,"Personal",GBuffSpell4)" 
   /if "@GBuffSpell4"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell4 "Name of Group Buff spell 4" 
   /declare GBuffSpell5 global 
   /varset GBuffSpell5 "$ini(@IniFile,"Personal",GBuffSpell5)" 
   /if "@GBuffSpell5"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell5 "Name of Group Buff spell 5" 
   /declare GBuffSpell6 global 
   /varset GBuffSpell6 "$ini(@IniFile,"Personal",GBuffSpell6)" 
   /if "@GBuffSpell6"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell6 "Name of Group Buff spell 6" 
   /declare GBuffSpell7 global 
   /varset GBuffSpell7 "$ini(@IniFile,"Personal",GBuffSpell7)" 
   /if "@GBuffSpell7"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell7 "Name of Group Buff spell 7" 
   /declare GBuffSpell8 global 
   /varset GBuffSpell8 "$ini(@IniFile,"Personal",GBuffSpell8)" 
   /if "@GBuffSpell8"=="NOTFOUND" /ini "@IniFile" Personal GBuffSpell8 "Name of Group Buff spell 8" 
   /declare PetBuffSpell1 global 
   /varset PetBuffSpell1 "$ini(@IniFile,"Personal",PetBuffSpell1)" 
   /if "@PetBuffSpell1"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell1 "Name of Pet Buff spell 1" 
   /declare PetBuffSpell2 global 
   /varset PetBuffSpell2 "$ini(@IniFile,"Personal",PetBuffSpell2)" 
   /if "@PetBuffSpell2"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell2 "Name of Pet Buff spell 2" 
   /declare PetBuffSpell3 global 
   /varset PetBuffSpell3 "$ini(@IniFile,"Personal",PetBuffSpell3)" 
   /if "@PetBuffSpell3"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell3 "Name of Pet Buff spell 3" 
   /declare PetBuffSpell4 global 
   /varset PetBuffSpell4 "$ini(@IniFile,"Personal",PetBuffSpell4)" 
   /if "@PetBuffSpell4"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell4 "Name of Pet Buff spell 4" 
   /declare PetBuffSpell5 global 
   /varset PetBuffSpell5 "$ini(@IniFile,"Personal",PetBuffSpell5)" 
   /if "@PetBuffSpell5"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell5 "Name of Pet Buff spell 5" 
   /declare PetBuffSpell6 global 
   /varset PetBuffSpell6 "$ini(@IniFile,"Personal",PetBuffSpell6)" 
   /if "@PetBuffSpell6"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell6 "Name of Pet Buff spell 6" 
   /declare PetBuffSpell7 global 
   /varset PetBuffSpell7 "$ini(@IniFile,"Personal",PetBuffSpell7)" 
   /if "@PetBuffSpell7"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell7 "Name of Pet Buff spell 7" 
   /declare PetBuffSpell8 global 
   /varset PetBuffSpell8 "$ini(@IniFile,"Personal",PetBuffSpell8)" 
   /if "@PetBuffSpell8"=="NOTFOUND" /ini "@IniFile" Personal PetBuffSpell8 "Name of Pet Buff spell 8" 
   /declare ReportLom global 
   /varset ReportLom "$ini(@IniFile,"Personal",ReportLom)" 
   /if "@ReportLom"=="NOTFOUND" /ini "@IniFile" Personal ReportLom 0 
   /declare LomPct global 
   /varset LomPct "$ini(@IniFile,"Personal",LomPct)" 
   /if "@LomPct"=="NOTFOUND" /ini "@IniFile" Personal LomPct 10 
   /declare LomMsg global 
   /varset LomMsg $ini(@IniFile,"Personal",LomMsg)" 
   /if "@LomMsg"=="NOTFOUND" /ini "@IniFile" Personal LomMsg "I'm getting LOM" 
   /declare StunA global 
   /varset StunA "$ini(@IniFile,"Personal",StunA)" 
   /if "@StunA"=="NOTFOUND" /ini "@IniFile" Personal StunA "StunA Spell" 
   /declare StunB global 
   /varset StunB "$ini(@IniFile,"Personal",StunB)" 
   /if "@StunB"=="NOTFOUND" /ini "@IniFile" Personal StunB "StunB Spell" 
   /declare StunC global 
   /varset StunC "$ini(@IniFile,"Personal",StunC)" 
   /if "@StunC"=="NOTFOUND" /ini "@IniFile" Personal StunC "StunC Spell" 
   /declare DDStunA global 
   /varset DDStunA "$ini(@IniFile,"Personal",DDStunA)" 
   /if "@DDStunA"=="NOTFOUND" /ini "@IniFile" Personal DDStunA "DDStunA Spell" 
   /declare DDStunB global 
   /varset DDStunB "$ini(@IniFile,"Personal",DDStunB)" 
   /if "@DDStunB"=="NOTFOUND" /ini "@IniFile" Personal DDStunB "DDStunB Spell" 
   /declare MezLow global 
   /varset MezLow "$ini(@IniFile,"Personal",MezLow)" 
   /if "@MezLow"=="NOTFOUND" /ini "@IniFile" Personal MezLow "MezLow Spell" 
   /declare MezHigh global 
   /varset MezHigh "$ini(@IniFile,"Personal",MezHigh)" 
   /if "@MezHigh"=="NOTFOUND" /ini "@IniFile" Personal MezHigh "MezHigh Spell" 
   /declare MezAE global 
   /varset MezAE "$ini(@IniFile,"Personal",MezAE)" 
   /if "@MezAE"=="NOTFOUND" /ini "@IniFile" Personal MezAE "MezAE Spell" 
   /declare AutoBehind global 
   /varset AutoBehind "$ini(@IniFile,"Personal",AutoBehind)" 
   /if "@AutoBehind"=="NOTFOUND" /ini "@IniFile" Personal AutoBehind 0 

   /declare IsShaman global 
   /varset IsShaman "$ini(@IniFile,"Personal",IsShaman)" 
   /if "@IsShaman"=="NOTFOUND" /ini "@IniFile" Personal IsShaman 0 
   /declare IsCleric global 
   /varset IsCleric "$ini(@IniFile,"Personal",IsCleric)" 
   /if "@IsCleric"=="NOTFOUND" /ini "@IniFile" Personal IsCleric 0 
   /declare IsBard global 
   /varset IsBard "$ini(@IniFile,"Personal",IsBard)" 
   /if "@IsBard"=="NOTFOUND" /ini "@IniFile" Personal IsBard 0 
   /declare IsRanger global 
   /varset IsRanger "$ini(@IniFile,"Personal",IsRanger)" 
   /if "@IsRanger"=="NOTFOUND" /ini "@IniFile" Personal IsRanger 0 
   /declare DoIncite global 
   /varset DoIncite "$ini(@IniFile,"Personal",DoIncite)" 
   /if "@DoIncite"=="NOTFOUND" /ini "@IniFile" Personal DoIncite 0 

   |||||||||||||||||||||||| 
   |Non INI vars. 
   /declare LomTimer timer 
   /declare IsSinging global 
   /varset IsSinging 0 
   /declare Performing global 
   /varset Performing 0 
   /declare cursong global 
   /varset cursong 1 

   /declare YaulpTimer timer 
   /declare CannTimer timer 
   /declare CannAATimer timer 
   /declare InciteTimer timer 
    
    
    
/return 

Sub TellCmds-personal 
   /declare counter local 
   /declare cmds local 
   /varset cmds "" 
   /for counter 0 to @ArrayPers 
      /varcat cmds "@Commands(0,@counter), " 
   /next counter 
   /call ChatOut 2 @MasterName "@cmds." 
/return 


|Things that you want to happen every loop through the macro go in this sub. 
Sub PersonalMain 
   /if n @ReportLom==1 { 
   /call CheckMana 
   } 
   /if n @IsCleric==1 /call CheckYaulp 
   /if n @IsShaman==1 /call CheckCann 
   /if n @Performing==1 /call Singalong 
   /if n @AutoBehind==1 { 
      /if n @Combatstatus==1 { 
         /if $target()==TRUE { 
            /if n $distance($calc($target(y)-$cos($target(heading))*10),$calc($target(x)-$sin($target(heading))*10))>6 { 
               /call Do-behind 
            } 
         } 
      } 
   } 
   /if n @DoIncite==1 { 
      /if n @Combatstatus==1 { 
         /if $target()==TRUE { 
            /if @InciteTimer<=1 { 
         /disc incite 
         /varset InciteTimer 35s 
      } 
         } 
      } 
   } 
/return 

Sub CheckCann 
/if n $char(mana,pct)<80 { 
    /if n $char(hp,pct)>=90 { 
        /if n $char(hp,cur)>1900 { 
            /if @CannAATimer<=1 {
                /if n $char(ismoving)=="FALSE" { 
                    /alt activate 47 
                    /varset CannAATimer 3m 
                    /return 
                }
            } 
        } 
    } 
}
/if n $char(mana,pct)<95 { 
    /if n $char(hp,pct)>=40 { 
        /if @CannTimer<=1 { 
            /if n $char(ismoving)=="FALSE" { 
                /call SpellSub "Cannibalize IV" 
                /varset CannTimer 4s 
            }
        } 
    } 
} 
/return 

Sub CheckYaulp 
   /if n $char(mana,pct)<100 { 
      /if @YaulpTimer<=1 { 
         |/call Delay 3s 
         /call SpellSub "Yaulp VI" 
         | /press esc 
         /varset YaulpTimer 25s 
      } 
   } 
/return 

Sub CheckMana 
   /if @LomTimer>0 { 
      /if $char(mana,pct)<@LomPct { 
         /call ChatOut 5 @MasterName "@LomMsg" 
         /varset LomTimer 2m 
      } 
   } 
/return 

Sub Singalong 
   /if n @Combatstatus==1 { 
     /varset IsSinging 0 
     /call SpellSub "$char(gem,@cursong)" 
   } else { 
     /if n @IsSinging==0 /call SpellSub "Chorus of Marr" 
     /varset IsSinging 1 
     /varset cursong 1 
     /return 
   } 
   /varadd cursong 1 
   /if n @cursong>3 /varset cursong 1 
/return 


||||||||||||||||||||||||||||||||||||||||||| 

Sub Do-fire 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-fireParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-fireParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @FireSpell on $target(name,clean)" 
   /call SpellSub "@FireSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-lure 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-lureParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-lureParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @LureSpell on $target(name,clean)" 
   /call SpellSub "@LureSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-ice 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-iceParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-iceParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @IceSpell on $target(name,clean)" 
   /call SpellSub "@IceSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-root 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-rootParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-rootParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @RootSpell on $target(name,clean)" 
   /call SpellSub "@RootSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-snare 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-snareParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-snareParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @SnareSpell on $target(name,clean)" 
   /call SpellSub "@SnareSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-stick 
   /if $char(state)==SIT /stand 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $target(id)!=$char(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $target(id)!=$char(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-stickParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-stickParamLoop 
         } 
      /target @ParamString 
   } 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3 
   /call ChatOut 5 @MasterName "Using Staff of Temprate Flux on $target(name,clean)" 
   /cast item "staff of temperate flux"
   :CstTmpFlux
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstTmpFlux
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-invis 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if $defined(Param2)==FALSE { 
        /if "@Param1"=="me" { 
           /target @MasterName 
        } else /if "@Param1"=="yourself" { 
           /press F1 
           /if n $char(id)!=$target(id) /press F1 
           /call ChatOut 5 @MasterName "Casting @SelfInvisSpell on $target(name,clean)" 
           /call SpellSub "@SelfInvisSpell" 
           /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
           /press esc 
           /return 
        } else /if "@Param1"=="$char(name)" { 
           /press F1 
           /if n $char(id)!=$target(id) /press F1 
           /call ChatOut 5 @MasterName "Casting @SelfInvisSpell on $target(name,clean)" 
           /call SpellSub "@SelfInvisSpell" 
           /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
           /press esc 
           /return 
        } else /target "@Param1" 
   } else /if $defined(Param3)==FALSE { 
      /target "@Param1 @Param2" 
   } else /if $defined(Param4)==FALSE { 
      /target "@Param1 @Param2 @Param3" 
   } else /target "@Param1 @Param2 @Param3 @Param4" 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @InvisSpell on $target(name,clean)" 
   /call SpellSub "@InvisSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
   /press esc 
/return 


Sub Do-lev 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-levParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-levParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 3 @MasterName "Casting @LevSpell on $target(name,clean)" 
   /call SpellSub "@LevSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 
Sub Do-setlompct 
   /if $defined(Param1)==FALSE /return 
   /varset LomPct @Param1 
   /call ChatOut 3 @MasterName "I'll let you know if I get below @LomPct percent mana" 
/return 

Sub Do-reportlom 
   /if n @ReportLom==1 { 
      /varset ReportLom 0 
      /call ChatOut 5 @MasterName "I'll stop spaming you about being LOM." 
      /return 
   } 
   /if n @ReportLom==0 { 
      /varset ReportLom 1 
      /call ChatOut 5 @MasterName "I'll let you know when I'm LOM." 
      /return 
   } 
/return 

Sub Do-mountup 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /cast item "@MountItem" 
   :CstMntWait
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstMntWait
   /call ChatOut 5 @MasterName "Summoning my mount." 
/return 

Sub Do-dismount 
   /dismount 
   /call ChatOut 5 @MasterName "I put away that damn mount." 
/return 

Sub Do-Door 
   /doort 
   /face door 
   /press u 
/return 

Sub Do-disc 
  /disc @Param1 
/return 

Sub Do-shield 
   /if "@Param1"=="me" { 
      /shield @MasterName 
      /return 
   } 
   /shield @Param1 
/return 


||||||||||||||||||||||||||||||||||||||||||||||||| 

Sub Do-hide 
   /doability Hide 
   /call Delay 2s 
   /if n $char(ability,"Hide")>0 /call ChatOut 5 @MasterName "I'm not hiding" 
   /if n $char(ability,"Hide")<=0 /call ChatOut 5 @MasterName "I am hiding." 
/return 

Sub Do-sneak 
   /doability Sneak 
   /call Delay 2s 
   /if n $char(ability,"Sneak")>0 /call ChatOut 5 @MasterName "I'm not sneaking atm" 
   /if n $char(ability,"Sneak")<=0 /call ChatOut 5 @MasterName "I'm sneaking" 
/return 

Sub Do-mask 
/if $char(state)==SIT /stand 
  /if n @FollowFlag==1 /call Move 0
  /call Delay 3
  /cast item "Mask of Deception" 
   :CstMoD
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstMoD
/return 

Sub Do-bp 
/if $char(state)==SIT /stand 
  /if n @FollowFlag==1 /call Move 0
  /call Delay 3
  /cast item "Brigand's Chestguard" 
   :CstBrigChest
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstBrigChest
/return 

Sub Do-patch 
/if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /cast item "Eyepatch of Plunder" 
   :CstEoP
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstEoP
/return 

Sub Do-ear 
/if $char(state)==SIT /stand 
   /cast item "Shrunken Goblin Skull Earring" 
/return 

|||||||||||||||||||||||||||||||||||||||||||| 

Sub Do-thorn 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-thornParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-thornParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 GROUP "Thorns on $target(name,clean)" 
   /call SpellSub "Shield of Bracken" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-buff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-buffParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-buffParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /if $target()==FALSE { 
      /call ChatOut 5 @MasterName "What did you want me to target?" 
      /return 
   } 
   /if "@BuffSpell1"~~"Name of Buff" /got :EndBuffs 
   /call ChatOut 5 @MasterName "Buffing $target(name,clean)" 
   /call SpellSub "@BuffSpell1" 
   /if "@BuffSpell2"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell2" 
   /if "@BuffSpell3"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell3" 
   /if "@BuffSpell4"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell4" 
   /if "@BuffSpell5"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell5" 
   /if "@BuffSpell6"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell6" 
   /if "@BuffSpell7"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell7" 
   /if "@BuffSpell8"~~"Name of Buff" /got :EndBuffs 
   /call SpellSub "@BuffSpell8" 
   :EndBuffs 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-groupbuff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-groupbuffParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-groupbuffParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /if $target()==FALSE { 
      /call ChatOut 5 @MasterName "What did you want me to target?" 
      /return 
   } 
   /if "@GBuffSpell1"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell1 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell1" 
   /if "@GBuffSpell2"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell2 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell2" 
   /if "@GBuffSpell3"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell3 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell3" 
   /if "@GBuffSpell4"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell4 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell4" 
   /if "@GBuffSpell5"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell5 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell5" 
   /if "@GBuffSpell6"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell6 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell6" 
   /if "@GBuffSpell7"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell7 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell7" 
   /if "@GBuffSpell8"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell8 on $target(name,clean)" 
   /call SpellSub "@GBuffSpell8" 
   :EndGBuffs 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-petbuff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-petbuffParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-petbuffParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /if $target()==FALSE { 
      /call ChatOut 5 @MasterName "What did you want me to target?" 
      /return 
   } 
   /if "@PetBuffSpell1"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell1 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell1" 
   /if "@PetBuffSpell2"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell2 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell2" 
   /if "@PetBuffSpell3"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell3 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell3" 
   /if "@PetBuffSpell4"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell4 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell4" 
   /if "@PetBuffSpell5"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell5 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell5" 
   /if "@PetBuffSpell6"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell6 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell6" 
   /if "@PetBuffSpell7"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell7 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell7" 
   /if "@PetBuffSpell8"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell8 on $target(name,clean)" 
   /call SpellSub "@PetBuffSpell8" 
   :EndGBuffs 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-regen 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-regenParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-regenParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 GROUP "@RegenSpell on $target(name,clean)" 
   /call SpellSub "@RegenSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-hot 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-hotParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-hotParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 GROUP "Casting Heal over time - @HotSpell on $target(name,clean)" 
   /call SpellSub "@HotSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-wood 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-woodParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-woodParamLoop 
      } 
      /target @ParamString 
   } 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /call ChatOut 5 GROUP "Activating Spirit of Wood (22 minute reset)." 
   /alt activate 185
   :CstSpiritofWood
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstSpiritofWood
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 


Sub Do-cure 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-cureParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-cureParamLoop 
      } 
      /target @ParamString 
   } 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /call ChatOut 5 GROUP "Activating Radiant Cure (3 minute reset)." 
   /alt activate 153 
   :CstRadCure
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstRadCure
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-nuke 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-nukeParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-nukeParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Nuking $target(name,clean)" 
   /call SpellSub "@NukeSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-slow 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-slowParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-slowParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @SlowSpell on $target(name,clean)" 
   /call SpellSub "@SlowSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-debuff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-debuffParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-debuffParamLoop 
      } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @DebuffSpell on $target(name,clean)" 
   /call SpellSub "@DebuffSpell" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-cobalt 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-cobaltParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-cobaltParamLoop 
      } 
      /target pc @ParamString 
   } 
   /call ChatOut 3 @MasterName "Shrinking $target(name,clean)" 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /cast item "cobalt bracer" 
   :CstCobBracer
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstCobBracer
/return 

Sub Do-camo 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-camoParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-camoParamLoop 
      } 
      /target @ParamString 
   } 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /call ChatOut 5 GROUP "Activating Camo" 
   /alt activate 80 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-dcharm 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-dcharmParamLoop 
      /if $defined(Param$int(@ParamCount))==TRUE { 
         /varcat ParamString " @Param$int(@ParamCount)" 
         /varadd ParamCount 1 
         /goto :Do-dcharmParamLoop 
      } 
      /target @ParamString 
   } 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /call ChatOut 5 GROUP "Dire Charming $target(name,clean)" 
   /alt activate 46 
   :CstDireCharm
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstDireCharm
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-stuna 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-stunaParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-stunaParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @StunA on $target(name,clean)" 
   /call SpellSub "@StunA" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-stunb 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-stunbParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-stunbParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @StunB on $target(name,clean)" 
   /call SpellSub "@StunB" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-chainstun 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-chainstunParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-chainstunParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Chain Stunning." 
   :StunLoop 
   /if $target()==FALSE /return 
   /if @BreakOut==1 /return 
   /call SpellSub "@StunA" 
   /if $target()==FALSE /return 
   /if @BreakOut==1 /return 
   /call SpellSub "@StunB" 
   /if $target()==FALSE /return 
   /if @BreakOut==1 /return 
   /call SpellSub "@StunC" 
   /if $target()==FALSE /return 
   /if @BreakOut==1 /return 
   /goto :StunLoop 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-ddstuna 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-ddstunaParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-ddstunaParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @DDStunA on $target(name,clean)" 
   /call SpellSub "@DDStunA" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-ddstunb 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-ddstunbParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-ddstunbParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @DDStunB on $target(name,clean)" 
   /call SpellSub "@DDStunB" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-mezlow 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-mezlowParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-mezlowParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @MezLow on $target(name,clean)" 
   /call SpellSub "@MezLow" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-mezhigh 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-mezhighParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-mezhighParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @MezHigh on $target(name,clean)" 
   /call SpellSub "@MezHigh" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-mezae 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $char(id)!=$target(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-mezaeParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-mezaeParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Casting @MezAE on $target(name,clean)" 
   /call SpellSub "@MezAE" 
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 

Sub Do-autobehind 
   /if $defined(Param1)==FALSE { 
      /if n @AutoBehind==0 /call ChatOut 3 @MasterName "I won't position myself behind the mob." 
      /if n @AutoBehind==1 /call ChatOut 3 @MasterName "I will position myself behind the mob." 
      /return 
   } 
   /if "@Param1"=="Off" { 
      /varset AutoBehind 0 
      /call ChatOut 5 @MasterName "I will no longer position myself behind the mob." 
   } 
   /if "@Param1"=="On" { 
      /varset AutoBehind 1 
      /call ChatOut 5 @MasterName "I will now position myself behind the mob." 
   } 
/return 

Sub Do-exp 
   /call ChatOut 5 @MasterName "I am at $int($char(exp)) percent exp. 
/return 

Sub Do-random 
   /if $defined(Param1)==FALSE /return 
   /if $defined(Param2)==FALSE { 
      /random @Param1 
      /return 
   } 
   /random @Param1 @Param2 
/return 

Sub Do-singing 
   /if $defined(Param1)==FALSE { 
      /tell "@MasterName" Singing=@Performing 
      /return 
   } 
   /if @Param1=="0" /varset Performing 0 
   /if @Param1=="1" /varset Performing 1 
   /if @Param1=="off" /varset Performing 0 
   /if @Param1=="on" /varset Performing 1 
   /tell @MasterName Singing=@Performing 
/return 

Sub Do-sepic 
   /if $char(state)==SIT /stand 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if "@Param1"=="me" { 
      /target pc @MasterName 
   } else /if "@Param1"=="yourself" { 
      /press F1 
      /if n $target(id)!=$char(id) /press F1 
   } else /if "@Param1"=="$char(name)" { 
      /press F1 
      /if n $target(id)!=$char(id) /press F1 
   } else { 
      /declare ParamString local 
      /declare ParamCount local 
      /varset ParamCount 2 
      /varset ParamString "@Param1" 
      :Do-sepicParamLoop 
         /if $defined(Param$int(@ParamCount))==TRUE { 
            /varcat ParamString " @Param$int(@ParamCount)" 
            /varadd ParamCount 1 
            /goto :Do-sepicParamLoop 
         } 
      /target @ParamString 
   } 
   /call Delay 5 
   /call ChatOut 5 @MasterName "Using Spear of Fate on $target(name,clean)" 
   /if $char(state)==SIT /stand 
   /if n @FollowFlag==1 /call Move 0
   /call Delay 3
   /cast item "spear of fate" 
   :CstSpearFate
   /call Delay 1
   /if $char(casting)==TRUE /goto :CstSpearFate
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit 
/return 
Last edited by ml2517 on Fri Jan 16, 2004 12:28 am, edited 3 times in total.

Zacaria
orc pawn
orc pawn
Posts: 19
Joined: Wed Dec 03, 2003 5:47 pm

Post by Zacaria » Sat Jan 10, 2004 11:19 am

works great! I ended up just using your code and implanting it into my genbot since i have heavily modified mine. havent really messed with the pause everything else makes genbot 500% more effective...

Prior to this I would just moveto me like 500 times at every turn

as you can imagine and anyone who has used genbot enough can agree with how much that sucked.

wassup
Official Guardian and Writer of TFM
Official Guardian and Writer of TFM
Posts: 1487
Joined: Sat Oct 26, 2002 5:15 pm

Post by wassup » Sat Jan 10, 2004 12:37 pm

OK, which of these genbot components do we actually need to replace? I don't think personal.inc needs to be changed.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Sat Jan 10, 2004 12:49 pm

Go ahead and replace all but personal.inc. But in personal.inc make sure you replace all instances of "/delay" with "/call Delay"

wassup
Official Guardian and Writer of TFM
Official Guardian and Writer of TFM
Posts: 1487
Joined: Sat Oct 26, 2002 5:15 pm

Post by wassup » Sat Jan 10, 2004 3:27 pm

OK, going to give this a try the next time I 2 box. If this Follow stops me from having to run back to retrieve a character it will definitley be useful.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Sat Jan 10, 2004 8:41 pm

Updated advpath.inc with a zoning change. It should zone more reliably now.

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Sun Jan 11, 2004 1:13 am

Totally reworked the door code. Please let me know if it works better or worse than before. I tested it for quite awhile and I believe it behaves better than before.

vaelin
orc pawn
orc pawn
Posts: 21
Joined: Fri Dec 19, 2003 8:52 pm

Nice!

Post by vaelin » Sun Jan 11, 2004 2:44 am

The only critique I'd give is I'd like to have the instructions on how to integrate it without having to get the whole genbot.... at least until it's incorporated as-is.

Honestly I'd like to see this in genbot, not replacing /follow or /afollow but more like /follow2 or /3dfollow

Some people like the original logic (situational I spose) but I was really enjoying testing this, and it works really nicely.

Is there any way you can post the specific changes to any/all genbot files rather than repackage? I'm beginning to suspect there are a lot of custom genbots out there.

GREAT work!

ml2517
a grimling bloodguard
a grimling bloodguard
Posts: 1216
Joined: Wed Nov 12, 2003 1:12 am

Post by ml2517 » Sun Jan 11, 2004 3:01 am

Honestly there are changes to every one of the files but mostly its the replacement of "/delay" with "/call Delay" throughout the scripts.

The original "follow" command in genbot was just the EQ /follow and sucked ass. Not going to switch because it looks funky when you send a tell to someone constantly saying "follow2" and such. I could add back the original follow command as a different command if people actually use it.

Most if not all people have customized personal.inc files. Simply use your personal.inc file and replace all instances of "/delay" with "/call Delay" and you should be just fine.

Once everyone verifies its working right I'll talk to Lasher about just replacing each of his modules with these.