genbot.mac Generic Bot macro for any class. V8 with ini

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

Moderator: MacroQuest Developers

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

genbot.mac Generic Bot macro for any class. V8 with ini

Post by grimjack » Wed Oct 22, 2003 3:13 pm

Update:12/01/2003

Thanks

Code: Select all

|genbot.mac
|Generic bot macro for any class.
|Version 8.8
|Date:12/01/2003 7: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
#turbo 40

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
   }
   /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 @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
            }
         }
      }
      /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 /varset Combatstatus 1
         }
      }
   }
   /call PersonalMain
   /doevents
   /varset CmdArrayNum 0
   /goto :MainLoop
/return
Last edited by grimjack on Mon Dec 01, 2003 9:50 am, edited 8 times in total.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

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

Post by grimjack » Wed Oct 22, 2003 3:14 pm

Code: Select all

|botcore.inc
|Bot core module.
|Version 8.8
|Date:12/01/2003 7: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 ArrayCore 47
/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 {
      /delay 2s
      /sendkey up down
      /sendkey down Right
      /delay @Param0
      /sendkey up Right
      /sendkey down up
      /delay 2s
      /sendkey up up
   } else {
      /delay 2s
      /sendkey up down
      /sendkey down left
      /delay @Param0
      /sendkey up left
      /sendkey down up
      /delay 2s
      /sendkey up up       
   }
   /sendkey up down
   /sendkey up Right
   /sendkey up Left
   /sendkey down up
/return

sub 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
      /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
   /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
      /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
   /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
   }
   /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
   /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 $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
   /delay 5
   /if "$char(state)"=="SIT" /stand
   /face
/return

Sub Do-follow
   /if $char(state)==SIT /stand
   /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 "Stoping."
   /sendkey up up
   /press d
   /press d
   /target clear
   /press right
/return

Sub Do-stay
   /varset Afollow 0
   /varset FollowTarget "NULL"
/return

Sub Do-camp
   /dismount
   /varset Afollow 0
   /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
      /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
   /delay 3
/return

Sub Do-yesres
   /call ChatOut 5 @MasterName "Clicking yes for res."
   /click left button confirm_yes
   /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
   }
   /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
   }
   /delay 5
/call LootAll
/return


Sub Do-petattack
   /assist @MasterName
   /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 grimjack on Mon Dec 01, 2003 9:56 am, edited 21 times in total.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

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

Post by grimjack » Wed Oct 22, 2003 3:14 pm

Code: Select all

|botspell.inc
|Bot spell module.
|Version 8.7
|Date:12/01/2003 7:00am
|



#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!"


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 $char(ismoving)!=FALSE {
   |   /sendkey up up
   |   /sendkey up down
   |   /delay 1s
   |}
   :WaitForStop
   /doevents
   /if n $BreakOut==1 /return
   /if $char(ismoving)!=FALSE {
      /delay 1s
      /goto :WaitForStop
   }
   :MemWait
   /doevents
   /if n @Fail==1 {
      /varset Fail 0
      /if n @Remem==1 {
         /memspellset @DefaultSpellSet
         :loadsploop
         /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 {
      /delay 1s
      /goto :MemWait
   }
   /if n @SpellSlot==0 {
      /memspell 2 "@Param0"
      /varset SpellSlot 2
      /varset Remem 1
      :refreshwait
      /doevents
      /if n @Fail==1 {
         /varset Fail 0
         /if n @Remem==1 {
            /memspellset @DefaultSpellSet
            :loadsploop
            /delay 5
            /if $char(spellbook)=="TRUE" /goto :loadsploop
         }
         /if n @SitAfterCast==1 {
            /if $char(state)==STAND /sit
         }
         /return 1
      }   
      /delay 5
      /if n $char(gem,"@SpellName")<=0 /goto :refreshwait
   }
   /varset CastTime "$spell("@SpellName",casttime)"
   /varadd CastTime 1
   :BeginCast
   /varset Fail 0
   /varset DoAgain 0
   /varset StartCast 0
   /call WaitForStart
   :TimerLoop
   /doevents
   /if n @DoAgain==1 /goto :BeginCast
   /if n @Fail==1 {
      /varset Fail 0
      /if n @Remem==1 {
         /memspellset @DefaultSpellSet
         :loadsploop
         /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
   /delay 2
   /doevents
   /if n @DoAgain==1 /goto :BeginCast
   /if n @Remem==1 {
      /memspellset default
      :loadsploop
      /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 @StartCast==0 {
      /goto :StartLoop
   }
   /varset CTimer "@CastTime"s
/return

Sub Event_CastStart
   /varset StartCast 1
/return

Sub Event_CastFizzle
   /delay 2
   /varset DoAgain 1
/return

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

Sub Event_Sitting
   /stand
   /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
   /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. "
   /delay 3s
   /varset DoAgain 1
/return

Sub Event_Recovered
   /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
   /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
   /delay 2s
   /if @EvacSpell!="NONE" /call SpellSub "@EvacSpell"
/return

Sub Do-itemcast
   /if $char(state)=="SIT" {
      /stand
      /delay 3
   }
   /assist @MasterName
   /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
      /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 grimjack on Mon Dec 01, 2003 9:03 am, edited 15 times in total.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

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

Post by grimjack » Wed Oct 22, 2003 3:15 pm

Code: Select all

|botcombat.inc
|Bot combat module.
|Version 8.8
|Date:12/01/2003 7:00am
|
|
|
|

#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 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 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
/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 {
         /delay 5
         /if $target()==FALSE {
            /varset Supportstatus 0
         }
      }
   }
   
   /if n @Combatstatus==1 {
      /if $target()==FALSE {
         /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 $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 
         /delay 3
         /doability "Backstab"
      }
   }
   /if n @DoSlam==1 {
      /if n $char(ability,"Slam")>0 {
         /if "$char(state)"=="SIT" /stand
         /face fast 
         /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"
      }
   }
/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 bsclock
   /if $target()==FALSE /return
   /sendkey down ctrl
   /sendkey down right
   :MoreClock
   /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 
         /doability "Backstab"
      }
   }
   /if n @Debug>=1 /echo Strafing right.
   /if $target()==FALSE {
      /sendkey up right
      /sendkey up ctrl
      /return
   }
   /if n $target(distance)>20 {
      /sendkey up right
      /sendkey up ctrl
      /if n @Debug>=1 /echo Calling RangeSub.
      /call RangeSub
      /return
   }
   /if n $target(distance)<4 {
      /sendkey up right
      /sendkey up ctrl
      /if n @Debug>=1 /echo Calling RangeSub.
      /call RangeSub
      /return
   }
   /if "$char(state)"=="SIT" /stand
   /face 
   /if n $target(heading)>=180 {
      /if n $calc($target(heading)-180)<=$char(heading) {
         /if n $char(heading)<$calc($target(heading)-22.5) {
            /goto :MoreClock
         }
      }
   }
   /if n $target(heading)<=180 {
      /if n $char(heading)<$calc($target(heading)-22.5) {
         /goto :MoreClock
      }
   }
   /if n $char(heading)>=180 {
      /if n $target(heading)<=180 {
         /if n $calc($char(heading)-157.5)<$calc($target(heading)+180) {
            /goto :MoreClock
         }
      }
   }
   /sendkey up right
   /sendkey up ctrl
   /if "$char(state)"=="SIT" /stand
   /face fast 
/return

Sub bscounter
   /if $target()==FALSE /return
   /sendkey down ctrl
   /sendkey down left
   :MoreCounter
   /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 
         /doability "Backstab"
      }
   }
   /if n @Debug>=1 /echo Strafing left.
   /if $target()==FALSE {
      /sendkey up left
      /sendkey up ctrl
      /return
   }
   /if n $target(distance)>20 {
      /sendkey up left
      /sendkey up ctrl
      /if n @Debug>=1 /echo Calling RangeSub.
      /call RangeSub
      /return
   }
   /if n $target(distance)<4 {
      /sendkey up left
      /sendkey up ctrl
      /if n @Debug>=1 /echo Calling RangeSub.
      /call RangeSub
      /return
   }
   /if "$char(state)"=="SIT" /stand
   /face fast 
   /if n $char(heading)>=180 {
      /if n $calc($char(heading)-180)<=$target(heading) {
         /if n $char(heading)>$calc($target(heading)+22.5) {
            /goto :MoreCounter
         }
      }
   }
   /if n $char(heading)<=180 {
      /if n $target(heading)<=180 {
         /if n $char(heading)>$calc($target(heading)+25) {
            /goto :MoreCounter
         }
      }
   }
   /if n $target(heading)>=180 {
      /if n $char(heading)<=180 {
         /if n $calc($char(heading)-22.5)>$calc($target(heading)-360) {
            /goto :MoreCounter
         }
      }
   }
   /sendkey up left
   /sendkey up ctrl
   /if "$char(state)"=="SIT" /stand
   /face fast 
/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
                        /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)."
                              /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
     
      }
      /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
   /delay 2s
   /call ChatOut 5 @MasterName "Trap disarmed."
/return

Sub Event_GettingHit
   /call CheckAggressive @Param0
/return

Sub Event_AttackedMiss
   /call CheckAggressive @Param0
/return



||||||||||||||||Command Subs
Sub Do-behind
   /varset Combatstatus 1
   /if $target()==FALSE {
      /assist @MasterName
      /delay 5
   }
   :behind
   /if $target()==FALSE /return
   /doevents
   /call RangeSub
  | ----- Clockwise Rotate Check -----
  /if $target()==FALSE /return
   /if n $target(heading)>=180 {
      /if n $calc($target(heading)-180)<=$char(heading) {
         /if n $char(heading)<$calc($target(heading)-22.5) {
            /call bsclock
         }
      }
   }
   /if $target()==FALSE /return
   /if n $target(heading)>=180 {
      /if n $char(heading)<=180 {
         /if n $calc($char(heading)-22.5)>$calc($target(heading)-360) {
            /call bscounter
         }
      }
   }
   /if $target()==FALSE /return
   /if n $target(heading)<=180 {
      /if n $char(heading)<$calc($target(heading)-22.5) {
         /call bsclock
      }
   }
   /if $target()==FALSE /return
  | ----- Counter Clockwise Rotate Check -----
   /if n $char(heading)>=180 {
      /if n $calc($char(heading)-180)<=$target(heading) {
         /if n $char(heading)>$calc($target(heading)+22.5) {
            /call bscounter
         }
      }
   }
   /if $target()==FALSE /return
   /if n $char(heading)>=180 {
      /if n $target(heading)<=180 {
         /if n $calc($char(heading)-157.5)<$calc($target(heading)+180) {
            /call bsclock
         }
      }
   }
   /if $target()==FALSE /return
   /if n $char(heading)<=180 {
      /if n $target(heading)<=180 {
         /if n $char(heading)>$calc($target(heading)+25) {
            /call bscounter
         }
      }
   }
   /if $target()==FALSE /return
   /if n $calc($abs($target(heading)-$char(heading)))>30 {
      /goto :behind
   }
/return

Sub Do-autoinv
   /autoinventory
/return

Sub Do-getbehind
   /varset countdown 0
   /varset MyXLoc $char(x)
   /varset MyYLoc $char(y)
   /varset Combatstatus 1
   /if $target()==FALSE {
      /assist @MasterName
      /delay 5
   }
   /if n $distance($calc($target(y)-$cos($target(heading))*10),$calc($target(x)-$sin($target(heading))*10))<3 /goto :noneed
   /if $target()==FALSE /return
   /sendkey down up
   :gobehindloop
   /if $target()==FALSE {
      /sendkey up up
      /return
   }
   /if n @countdown>=20 {
      /if n @MyXLoc==$char(x) {
         /if @MyYLoc==$char(y) {
            /sendkey up up
            /return
         }
      }
      /varset MyXLoc $char(x)
      /varset MyYLoc $char(y)
      /varset countdown 0
   }
   /varadd countdown 1
   /doevents
   /if "$char(state)"=="SIT" /stand
   /face nolook fast loc $calc($target(y)-$cos($target(heading))*10),$calc($target(x)-$sin($target(heading))*10)
   /if n $distance($calc($target(y)-$cos($target(heading))*10),$calc($target(x)-$sin($target(heading))*10))>1 /goto :gobehindloop
   /sendkey up up
   /if "$char(state)"=="SIT" /stand
   /face fast 
:noneed
/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
   /sit off
   /if $defined(Param1)==FALSE {
      /assist @MasterName
      /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
   }     
   /delay 1
   /if "$char(name)"=="$target(name,clean)" {
      /varset Combatstatus 0
      /return
   }
   /call ChatOut 5 @MasterName "Attacking $target(name,clean)."
   /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
Last edited by grimjack on Mon Dec 01, 2003 10:03 am, edited 17 times in total.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

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

Post by grimjack » Wed Oct 22, 2003 3:15 pm

Code: Select all

|bothealer.inc
|Version 8.6
|Date:11/10/2003 5:33pm
|
|
|
|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 /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 /call PatchHeal @HealTargets(@tempvar)
                  }
                  /if @Combatstatus==1 /attack off
                  /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
       }
      /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
      }
      /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
      /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
   }
   /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)
   /delay 25
   /if $target(name)==@WatchTargets(@counter) {
      /varset WatchTargetIDs(@counter) $target(id)
   } else {
      /call ChatOut 5 @MasterName I failed to target @WatchTargets(@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
      /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
   /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 grimjack on Wed Dec 24, 2003 5:47 am, edited 20 times in total.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

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

Post by grimjack » Wed Oct 22, 2003 3:16 pm

Code: Select all

|personal.inc 
|Personal commands module example. 
|Version 8.51
|Date:11/06/2003 9:23am
| 
| 
| 
| 
| 

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 ArrayPers 45
/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 "@BuffSpell8"=="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
    
   |||||||||||||||||||||||| 
   |Non INI vars. 
   /declare LomTimer 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 @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
            }
         }
      }
   }
/return 

Sub CheckMana 
   /if @LomTimer>0 { 
      /if $char(mana,pct)<@LomPct { 
         /call ChatOut 5 @MasterName "@LomMsg" 
         /varset LomTimer 2m 
      } 
   } 
/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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @FireSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @LureSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @IceSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @RootSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @SnareSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Using Staff of Temprate Flux on %t." 
   /stand 
   /cast item "staff of temperate flux" 
   /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 %t." 
           /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 %t." 
           /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" 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @InvisSpell on %t. 
   /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 
   } 
   /delay 5 
   /call ChatOut 3 @MasterName "Casting @LevSpell on %t." 
   /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 
   /cast item "@MountItem" 
   /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 
   /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 
   /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 
  /cast item "Mask of Deception" 
/return 

Sub Do-bp 
/if $char(state)==SIT /stand 
  /cast item "Brigand's Chestguard" 
/return 

Sub Do-patch 
/if $char(state)==SIT /stand 
   /cast item "Eyepatch of Plunder" 
/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 
   } 
   /delay 5 
   /call ChatOut 5 GROUP "Thorns on %t." 
   /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 
   } 
   /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 %t." 
   /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 
   } 
   /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 %t." 
   /call SpellSub "@GBuffSpell1" 
   /if "@GBuffSpell2"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell2 on %t." 
   /call SpellSub "@GBuffSpell2" 
   /if "@GBuffSpell3"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell3 on %t." 
   /call SpellSub "@GBuffSpell3" 
   /if "@GBuffSpell4"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell4 on %t." 
   /call SpellSub "@GBuffSpell4" 
   /if "@GBuffSpell5"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell5 on %t." 
   /call SpellSub "@GBuffSpell5" 
   /if "@GBuffSpell6"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell6 on %t." 
   /call SpellSub "@GBuffSpell6" 
   /if "@GBuffSpell7"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell7 on %t." 
   /call SpellSub "@GBuffSpell7" 
   /if "@GBuffSpell8"~~"Name of Group" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@GBuffSpell8 on %t." 
   /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 
   } 
   /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 %t." 
   /call SpellSub "@PetBuffSpell1" 
   /if "@PetBuffSpell2"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell2 on %t." 
   /call SpellSub "@PetBuffSpell2" 
   /if "@PetBuffSpell3"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell3 on %t." 
   /call SpellSub "@PetBuffSpell3" 
   /if "@PetBuffSpell4"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell4 on %t." 
   /call SpellSub "@PetBuffSpell4" 
   /if "@PetBuffSpell5"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell5 on %t." 
   /call SpellSub "@PetBuffSpell5" 
   /if "@PetBuffSpell6"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell6 on %t." 
   /call SpellSub "@PetBuffSpell6" 
   /if "@PetBuffSpell7"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell7 on %t." 
   /call SpellSub "@PetBuffSpell7" 
   /if "@PetBuffSpell8"~~"Name of Pet" /got :EndGBuffs 
   /call ChatOut 5 GROUP "@PetBuffSpell8 on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 GROUP "@RegenSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 GROUP "Casting Heal over time - @HotSpell on %t." 
   /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 
   } 
   /delay 5 
   /if $char(state)==SIT /stand 
   /call ChatOut 5 GROUP "Activating Spirit of Wood (22 minute reset)." 
   /alt activate 185 
   /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 
   } 
   /delay 5 
   /if $char(state)==SIT /stand 
   /call ChatOut 5 GROUP "Activating Radiant Cure (3 minute reset)." 
   /alt activate 153 
   /delay 50
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Nuking %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @SlowSpell on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @DebuffSpell on %t." 
   /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 %t" 
   /cast item "cobalt bracer" 
/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 
   } 
   /delay 5 
   /if $char(state)==SIT /stand 
   /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 
   } 
   /delay 5 
   /if $char(state)==SIT /stand 
   /call ChatOut 5 GROUP "Dire Charming %T" 
   /alt activate 46
   /delay 80
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @StunA on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @StunB on %t." 
   /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 
   } 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @DDStunA on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @DDStunB on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @MezLow on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @MezHigh on %t." 
   /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 
   } 
   /delay 5 
   /call ChatOut 5 @MasterName "Casting @MezAE on %t." 
   /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
Last edited by grimjack on Thu Nov 06, 2003 11:06 am, edited 17 times in total.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

EqMule
Developer
Developer
Posts: 2697
Joined: Fri Jan 03, 2003 9:57 pm
Contact:

Post by EqMule » Wed Oct 22, 2003 3:28 pm

HAHA! I was the first to say it... NICE! and thanks! ;)
My status o/
If you like MQ2 and would like to contribute, please do. My goal is 25 donations per month.
So far I've received Image donations for this month's patches.

Bitcoin: 1Aq8ackjQ4f7AUvbUL7BE6oPfT8PmNP4Zq
Krono: PM me.
I can always use characters for testing, PM me if you can donate one.

Nightshift
a lesser mummy
a lesser mummy
Posts: 54
Joined: Mon Oct 13, 2003 8:52 am

Post by Nightshift » Wed Oct 22, 2003 4:00 pm

Very nice. Can't wait to dig into it.

Thanks again GrimJack!


NightShift

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

Update

Post by grimjack » Wed Oct 22, 2003 4:00 pm

Updated bothealer.inc.

It had a problem with the ini for caster heal percents.
When they come to me, they're in trouble, or they want some. I bust people out of prison, hunt down vampires, fight alien gods -- All the fun jobs people are too squeamish or too polite to do themselves.

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

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

Nightshift
a lesser mummy
a lesser mummy
Posts: 54
Joined: Mon Oct 13, 2003 8:52 am

Post by Nightshift » Wed Oct 22, 2003 4:19 pm

In bothealer.inc

Is the code I highlighted in red an error.

Code: Select all

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

Sub Do-togglehot    
   /if $defined(Param1)==FALSE { 
      /if @CasterHealIsHot==1 /tell @MasterName Should we consider the caster heal as a HOT?=Yes 
      /if @CasterHealIsHot==0 /tell @MasterName Should we consider the caster heal as a HOT?=No 
      /return 
   } 
   /if @Param1=="off" /varset CasterHealIsHOT 0 
   [color=red]/if @Param1=="on" /varset CasterHealIsHOTIsHealer 1[/color] 
   /if @Param1=="1" /varset CasterHealIsHOT 1 
   /if @Param1=="0" /varset CasterHealIsHOT 0 
   /if @CasterHealIsHOT==1 /tell @MasterName Shoulw we consider the caster heal as a HOT?=Yes 
   /if @CasterHealIsHOT==0 /tell @MasterName Should we consider the caster heal as a HOT?=No 
/return
Thanks..

NightShift

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

Post by grimjack » Wed Oct 22, 2003 4:32 pm

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

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

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

mackster
a ghoul
a ghoul
Posts: 95
Joined: Mon Sep 09, 2002 3:02 pm

Post by mackster » Wed Oct 22, 2003 5:48 pm

Doesn't seem to be autohealing. :cry:

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

Post by grimjack » Wed Oct 22, 2003 6:13 pm

Found a bunch of ; on the post that where not in the code. Removed.
Heals should be working now.

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

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

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

RogerWilco
a ghoul
a ghoul
Posts: 86
Joined: Thu Aug 28, 2003 4:05 am

Post by RogerWilco » Thu Oct 23, 2003 12:06 am

Grim I have a question.... this is what is currently in the Personal.inc

Code: Select all

Sub Do-groupbuff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if $defined(Param2)==FALSE { 
        /if "@Param1"=="me" { 
           /target @MasterName 
        } else /if "@Param1"=="yourself" { 
           /press F1 
        } else /if "@Param1"=="$char(name)" { 
           /press F1 
        } 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" 
   /delay 5 
   /g castign buff spell on group. 
   /call SpellSub "buff spell" 
   /if "@SitAfterCast"=="1" /sit on 
/return 
I was playing around and tried doing this....

Code: Select all

Sub Do-groupbuff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if $defined(Param2)==FALSE { 
        /if "@Param1"=="me" { 
           /target @MasterName 
        } else /if "@Param1"=="yourself" { 
           /press F1 
        } else /if "@Param1"=="$char(name)" { 
           /press F1 
        } 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" 
   /delay 5 
   /g INCOMMING GROUP BUFFS. 
   /call SpellSub "@GroupbuffSpell"
   /if "@SitAfterCast"=="1" /sit on 
/return 
then in the Bots.ini file adding the spell... but tried to add not 1 spell but 2 and it did not work. Is there a way for this

Code: Select all

GroupbuffSpell=Buff1, Buff2, Buff3, Buff4
when I tried this only the first spell was casted and not the rest....

the reason why I was thinking about this is because I use multiple BoTs and putting spells listed in their own .ini file is genius. This could be used for all these types of spell... Petbuff.... DoT Stacking



<<< EDITTED>>>

I think I have found the answer... tried it and it works:

Personal.inc

Code: Select all

Sub Do-groupbuff 
   /if $defined(Param1)==FALSE { 
      /assist @MasterName 
   } else /if $defined(Param2)==FALSE { 
        /if "@Param1"=="me" { 
           /target @MasterName 
        } else /if "@Param1"=="yourself" { 
           /press F1 
        } else /if "@Param1"=="$char(name)" { 
           /press F1 
        } 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" 
   /delay 5 
   /g INCOMMING GROUP BUFFS. 
   /call SpellSub "@GroupbuffSpell"
   /call SpellSub "@GroupbuffSpell1"
   /call SpellSub "@GroupbuffSpell2"
   /if "@SitAfterCast"=="1" /sit on 
/return 

Code: Select all

/varset GroupbuffSpell "$ini(@IniFile,"Personal",GroupbuffSpell)" 
   /if "@GroupbuffSpell"=="NOTFOUND" /ini "@IniFile" Personal GroupbuffSpell "Name of Group Buff"       
   /declare GroupbuffSpell1 global 
   /varset GroupbuffSpell1 "$ini(@IniFile,"Personal",GroupbuffSpell1)" 
   /if "@GroupbuffSpell1"=="NOTFOUND" /ini "@IniFile" Personal GroupbuffSpell1 "Name of Group Buff 1"
   /declare GroupbuffSpell2 global 
   /varset GroupbuffSpell2 "$ini(@IniFile,"Personal",GroupbuffSpell2)" 
   /if "@GroupbuffSpell2"=="NOTFOUND" /ini "@IniFile" Personal GroupbuffSpell2 "Name of Group Buff 2"
then in Bot.ini

Code: Select all

GroupbuffSpell=Name of Group Buff 
GroupbuffSpell1=Name of Group Buff 1
GroupbuffSpell2=Name of Group Buff 2

There is probably a cleaner way to do it but since I am such a noob at this I could not be any happier with what I figured out all on my lonesome :lol:

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

Post by grimjack » Thu Oct 23, 2003 5:48 am

Updated the sample personal.inc.

Removed all of the old argument parsing code and brought it up to date with the rest of the macro. Also made all subs in the personal.inc that cast spells use the ini file.

buff and groupbuff commands now use BuffSpell1-6 and GbuffSpell1-6 in the ini. The commands will cast each buff in the ini starting at 1 and stoping at the first ini setting that is still the default.

Thanks

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

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

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