genbot.mac Generic Bot macro for any class. V9.3 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
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

genbot.mac Generic Bot macro for any class. V9.3 with ini

Post by lasher » Tue Dec 30, 2003 5:17 am

Current official versions:
genbot.mac v9.3
botcore.inc v9.13
botcombat.inc v9.12
bothealer.inc v9.12
botspell.inc v9.11
personal.inc v9.14


Here is v9 with the following new features:
Support for warriors: incite /disc
Support for bards: combat playing as well as downtime.
Support for rangers: archery without moving to attack. (currently doesn't switch to melee if too close - need to work on that)
Support for clerics: yaulping.
Support for shamans: canning and epic. (including AA cann)
Support for ml2517's 3d follow code: Download advpath.inc here. (then uncomment #include in personal.inc - .ini settings available too)
genbot will still function happily as it used to without advpath.inc. If you don't have a desire to download it. However, if you do any follow commands with your bots; I highly suggest it.

History: personal.inc v9.01: fixed typo in cannAA

Updated v9.1:
new versioning system
spelling (vaelin)
3d following (ml2517)
resetwatchcounter fix (achy wrists)
modified cann/yaulp amounts to 95m instead of 100m (due to zoning bug)
spellset default fix (mctisuk)
random %T cleanups
skillup notifications (mvtisuk + ml2517)
various other fixes that I was too tired to note

Updated: botcore.inc v9.11 - bugfix on stopping code
Updated: personal.inc v9.11 - bugfix on cann5 hp code
Updated: genbot.mac v9.2 - advpath function changes (v1.04 now required)
other version bugfixes on .inc files v(9.11-9.12)
Updated: personal.inc v9.13 - typo in buffcode. inherited (bad karma)
Updated: Multiple files: turbo fix, singing fix, chat channel name, reload, yaulp fix, cann fix

Code: Select all

|genbot.mac
|Generic bot macro for any class.
|Version 9.3
|Date:02/27/2004 12:55am
|
||**
[genbot]
version=9.3
**|
|
#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 @DoArchery!=1 {
   	/if n @Combatstatus==1 /call RangeSub
   }
   /if n @Combatstatus==1 /call MeleeAbility
   /if n @Combatstatus!=1 {
      /if n @Supportstatus!=1 {
         /if n @IsAnchored==0 {
            /if n @Afollow==1 {
               /target @FollowTarget
               /call Do-moveto foo @FollowTarget
            }
	    /if n @advpath==1 /call AdvPathPoll
         }
      }
      /if n @IsAnchored==1 {
         /if n $distance(@AnchorX,@AnchorY)>@AnchorRadius {
            /call MoveToAnchor
         } else /if n @SitAfterCast==1 {
            /if $char(state)==STAND /sit
         }
      }
   }
   /if $combat==TRUE {
      /if $target()==TRUE {
         /if "$target(name,clean)"!="$char(name)" {
            /if n @AutoEngage==1 /varset Combatstatus 1
         }
      }
   }
   /call PersonalMain
   /doevents
   /varset CmdArrayNum 0
   /goto :MainLoop
/return
Last edited by lasher on Sun Mar 28, 2004 9:59 pm, edited 20 times in total.

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Tue Dec 30, 2003 5:18 am

Code: Select all

|botcore.inc
|Bot core module.
|Version 9.13
|Date:02/27/2004 12:55am
|
||**
[botcore]
version=9.13
**|
|
#chat group
#chat tell
#chat chat

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

Sub CoreCommands
   /varset Commands(1,0) afk
   /varset Commands(1,1) accept
   /varset Commands(1,2) reject
   /varset Commands(1,3) invite
   /varset Commands(1,4) follow
   /varset Commands(1,5) stop
   /varset Commands(1,6) moveto
   /varset Commands(1,7) sit
   /varset Commands(1,8) stand
   /varset Commands(1,9) camp
   /varset Commands(1,10) duck
   /varset Commands(1,11) norelay
   /varset Commands(1,12) say
   /varset Commands(1,13) tell
   /varset Commands(1,14) group
   /varset Commands(1,15) cmds
   /varset Commands(1,16) target
   /varset Commands(1,17) notarget
   /varset Commands(1,18) assist
   /varset Commands(1,19) saytarget
   /varset Commands(1,20) afollow
   /varset Commands(1,21) itemcast
   /varset Commands(1,22) lootup
   /varset Commands(1,23) anchor
   /varset Commands(1,24) trade
   /varset Commands(1,25) yesres
   /varset Commands(1,26) consent
   /varset Commands(1,27) reportbuffs
   /varset Commands(1,28) petattack
   /varset Commands(1,29) petguard
   /varset Commands(1,30) petback
   /varset Commands(1,31) relay
   /varset Commands(1,32) run
   /varset Commands(1,33) door
   /varset Commands(1,34) listengroup
   /varset Commands(1,35) aona
   /varset Commands(1,36) bona
   /varset Commands(1,37) petona
   /varset Commands(1,38) verbosity
   /varset Commands(1,39) chatin
   /varset Commands(1,40) lootall
   /varset Commands(1,41) listenchat
   /varset Commands(1,42) face
   /varset Commands(1,43) autoinv
   /varset Commands(1,44) anchorradius
   /varset Commands(1,45) rmod
   /varset Commands(1,46) rset
   /varset Commands(1,47) stay
   /varset Commands(1,48) eqfollow
   /varset Commands(1,49) pause
   /varset Commands(1,50) reload
   /varset ArrayCore 50
/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 ChatInChannel 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 ChatInChannel $ini(@IniFile,"Core",ChatInChannel)
   /if "@ChatInChannel"=="NOTFOUND" {
      /ini "@IniFile" Core ChatInChannel "Chat channel"
      /varset ChatInChannel "Chat channel"
   }
   /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" {
      /chat #@ChatInChannel @ChatText
   }
/return

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

Sub Hitobst
   /sendkey up up
   /sendkey down down
   /if n $rand(99)>50 {
      /call Delay 2s
      /sendkey up down
      /sendkey down Right
      /call Delay @Param0
      /sendkey up Right
      /sendkey down up
      /call Delay 2s
      /sendkey up up
   } else {
      /call Delay 2s
      /sendkey up down
      /sendkey down left
      /call Delay @Param0
      /sendkey up left
      /sendkey down up
      /call Delay 2s
      /sendkey up up
   }
   /sendkey up down
   /sendkey up Right
   /sendkey up Left
   /sendkey down up
/return

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sub Do-stand
   /sit off
/return

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

Sub Do-relay
   /varset Relaytells 1
/return

Sub Do-norelay
   /varset Relaytells 0
/return

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

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

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

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

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

Sub Do-accept
   /target clear
   /invite
/return

Sub Do-reject
   /target clear
   /disband
/return

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

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

Sub Do-eqfollow
   /if $char(state)==SIT /stand
   /varset Afollow 0
   /varset FollowTarget "NULL"
   /if n @advpath==1 {
   	/if n @FollowFlag==1 /call StopFunction
   }
   /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
   /varset Afollow 0
   /if n @advpath==1 {
   	/if n @FollowFlag==1 /call StopFunction
   }
   /varset FollowTarget "NULL"
   /call ChatOut 5 @MasterName "Stopping."
   /sendkey up up
   /press d
   /press d
   /target clear
   /press right
/return

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

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

Sub Do-pause
	   /if n @advpath==1 {
	   	/if n @PauseFlag==0 {
			/call ChatOut 5 @MasterName "Pausing."
		} else {
			/call ChatOut 5 @MasterName "Unpausing."
		}
		/call PauseFunction
	   }
/return

Sub Do-reload
	/call ChatOut 5 @MasterName "Reload initiated."
	/mac genbot.mac @MasterName
/return

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

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

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

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

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

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

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


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

Sub Do-petguard
   /pet guard here
/return

Sub Do-petback
   /pet back off
/return

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

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

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

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

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

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

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

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

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

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

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

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

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

Sub Do-anchorradius
   /if $defined(Param1)==FALSE {
      /call ChatOut 3 @MasterName "My anchor radius is @AnchorRadius."
   }
   /if n @Param1<3 /return
   /varset AnchorRadius @Param1
   /call ChatOut 3 @MasterName "My new anchor radius is @AnchorRadius."
/return

Sub Delay(DelayTime)
  	/delay @DelayTime
/return

Sub Do-follow
   /varset CmdArrayNum 0
   /if $char(state)==SIT /stand
   /varset Afollow 0
   /varset FollowTarget "NULL"
   /if n @advpath==1 {
   	/if $defined(Param1)==FALSE {
      		/varset FollowTarget "@MasterName"
   	} else /if "@Param1"=="me" {
      		/varset FollowTarget "@MasterName"
   	} else /if "@Param1"=="yourself" {
      		/return
   	} else /if "@Param1"=="$char(name)" {
      		/return
   	} else {
      		/declare ParamString local
      		/declare ParamCount local
      		/varset ParamCount 2
      		/varset ParamString "@Param1"
      		:Do-afollowParamLoop
         	/if $defined(Param$int(@ParamCount))==TRUE {
            		/varcat ParamString " @Param$int(@ParamCount)"
            		/varadd ParamCount 1
            		/goto :Do-afollowParamLoop
         	}
      		/varset FollowTarget @ParamString
      		/varset Afollow 1
   	}
   	/call FollowFunction "@FollowTarget" 
   	/if $target()==TRUE {
   		/call ChatOut 5 @MasterName "I am now following $target(name,clean)."
   	} else {
   		/call ChatOut 5 @MasterName "Unable to follow @FollowTarget."
   		/call StopFunction
   		/varset FollowTarget "NULL"
   	}
   } else {
   	/call Do-eqfollow
   }
/return
Last edited by lasher on Fri Feb 27, 2004 4:00 am, edited 5 times in total.

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Tue Dec 30, 2003 5:19 am

Code: Select all

|botspell.inc
|Bot spell module.
|Version 9.11
|Date:01/18/2004 10:45am
|
||**
[botspell]
version=9.11
**|
|
#event Collapse "Your gate is too unstable, and collapses."
#event RootOff "Your Immobilize spell has worn off."
#event NoLOS "You cannot see your target."
#Event CastStart "You begin casting"
#Event CastFizzle "Your spell fizzles!"
#Event CastInterrupt "Your spell is interrupted."
#Event CastNoMana "Insufficient Mana to cast this spell"
#Event CastTooFar "Your target is out of range, get closer!"
#Event Recovered "You haven't recovered yet..."
#Event CastResist "Your target resisted "
#Event Distracted "You are too distracted to cast a spell now!"
#Event NoTarget "You must first select a target for this spell!"
#Event Sitting "You must be standing to cast a spell."
#Event NoMem "You do not seem to have that spell memorized."
#Event Stunned "You can't cast spells while stunned!"
#event MissedNote "You miss a note, bringing your song to a close!"


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

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

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

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

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

Sub Event_CastStart
   /varset StartCast 1
/return

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

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

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

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

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

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

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

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

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

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

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

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

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

Sub Event_Collapse
   /varset DoAgain 1
/return

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

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

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

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

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

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

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

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


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

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Tue Dec 30, 2003 5:20 am

Code: Select all

|botcombat.inc
|Bot combat module.
|Version 9.12
|Date:02/27/2004 12:55am
|
||**
[botcombat]
version=9.12
**|
|
#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"
#Event ArcheryTooFar "Your target is too far away, get closer"

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

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

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

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

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

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

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

Sub 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
                        /call Delay 2s
                     }
                  }
                  /if $target()==TRUE {
                     /if $combat==FALSE {
                        /if $target(type)=="NPC" {
                           /if n @Aggressive==1 {
                              /call ChatOut 5 @MasterName "I am being attacked by $target(name,clean)."
                              /call Delay 2
                              /varset Combatstatus 1
                              /attack on
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
/return

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

Sub Event_Pierce
   /call CheckPuller
/return

Sub Event_Slash
   /call CheckPuller
/return

Sub Event_Bash
   /call CheckPuller
/return

Sub Event_Hit
   /call CheckPuller
/return

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

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

      }
      /varset EnrageVar 0
   }
/return

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

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

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

Sub Event_GettingHit
   /call CheckAggressive @Param0
/return

Sub Event_AttackedMiss
   /call CheckAggressive @Param0
/return

Sub Event_ArcheryTooFar
/return


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

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

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

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

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

Sub Do-archery
   /if $defined(Param1)==FALSE {
      /if @DoArchery==0 /call ChatOut 5 @MasterName "Archery is set to off."
      /if @DoArchery==1 /call ChatOut 5 @MasterName "Archery is set to on."
      /return
   }
   /if @Param1=="off" {
      /varset DoArchery 0
      /call ChatOut 5 @MasterName "Archery is now set to off."
   }
   /if @Param1=="on" {
      /varset DoArchery 1
      /call ChatOut 5 @MasterName "Archery is now set to on."
   }
/return
Last edited by lasher on Fri Feb 27, 2004 4:05 am, edited 3 times in total.

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Tue Dec 30, 2003 5:20 am

Code: Select all

|bothealer.inc
|Bot healer module.
|Version 9.12
|Date:02/27/2004 12:55am
|
||**
[bothealer]
version=9.12
**|
|
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
   /if $char(ismoving)==TRUE /return
   /declare BadTarget local
   /varset BadTarget 0
   :TankhealTarget
      /if n @Param0==$char(id) {
         /if @Param0!=$target(id) /target myself
      }
      /if @Param0!=$char(id) {
          /if n $target(id)!=@Param0 /target id @Param0
       }
      /call Delay 1
      /if $target(id)!=@Param0 {
         /if n BadTarget<10 {
            /varadd BadTarget 1
            /goto :TankhealTarget
         }
      }
   /if $target(id)!=@Param0 /return
   /stand
   /if n @CastMsgTimer1<=0 {
      /if n @ReportAutoHeal==1 /g @HealTankMsg
      /varset CastMsgTimer1 50
   }
   /call SpellSub "@TankSpell"
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
   /press esc
/return

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sub Do-resetwatch
   /call ResetWatchTargets
/return

Sub Do-patchheal
   /if $defined(Param1)==FALSE {
      /if @PatchHealer==1 /tell @MasterName I'm a patch Healer
      /if @PatchHealer==0 /tell @MasterName I'm not a patch Healer
      /return
   }
   /if "@Param1"=="off" {
      /varset PatchHealer 0
      /call ChatOut 5 @MasterName "I won't be doing patch heals now."
   }
   /if "@Param1"=="on" {
      /varset PatchHealer 1
      /call ChatOut 5 @MasterName "I'll take care of the patch heals now."
   }
/return
Last edited by lasher on Fri Feb 27, 2004 4:02 am, edited 4 times in total.

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Tue Dec 30, 2003 5:21 am

Code: Select all

|personal.inc
|Personal commands module example.
|Version 9.14
|Date:02/27/2004 12:55am
|
||**
[personal]
version=9.14
**|
|
| Uncomment the line below if you have advpath.inc
|#include advpath.inc
|
#Event SkillUp "You have become better at"


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

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

   /declare advpath_v global
   /declare advpath global
   /varset advpath_v $ini(advpath.inc,"advpath",version)
   /if "@advpath_v"=="NOTFOUND" {
      /echo Advanced pathing NOT available.
      /varset advpath 0
   } else {
	/if "@advpath_v">="1.04" {
		/declare FaceFastini local
		/varset FaceFastini "$ini(@IniFile,"advpath",FaceFast)"
		/if "@FaceFastini"=="NOTFOUND" {
			/ini "@IniFile" advpath FaceFast 1
			/varset FaceFastini 1
		}
		/declare SpeedSenseini local
		/varset SpeedSenseini "$ini(@IniFile,"advpath",SpeedSense)"
		/if "@SpeedSenseini"=="NOTFOUND" {
			/ini "@IniFile" advpath SpeedSense 15
			/varset SpeedSenseini 15
		}
		/declare FollowDistanceini local
		/varset FollowDistanceini "$ini(@IniFile,"advpath",FollowDistance)"
		/if "@FollowDistanceini"=="NOTFOUND" {
			/ini "@IniFile" advpath FollowDistance 20
			/varset FollowDistanceini 20
		}
		/declare SilentFlagini local
		/varset SilentFlagini "$ini(@IniFile,"advpath",SilentFlag)"
		/if "@SilentFlagini"=="NOTFOUND" {
			/ini "@IniFile" advpath SilentFlag 1
			/varset SilentFlagini 1
		}
      		/echo Advanced pathing v(@advpath_v) enabled.
      		/varset advpath 1
      		/call InitAPFVars @FaceFastini @SpeedSenseini @FollowDistanceini
      		/varset SilentFlag @SilentFlagini
   	} else {
      		/echo Minimum advpath.inc v(1.04) required - you have v(@advpath_v)
      		/echo Advanced pathing found, but too old. Update it!
      		/varset advpath 0
   	}
   }

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

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

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


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

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

Sub CheckYaulp
	/if $char(ismoving)==FALSE {
		/if n $char(mana,pct)<95 {
			/if @YaulpTimer<=1 {
				/call SpellSub "@YaulpSpell"
				/varset YaulpTimer 25s
			}
		}
	}
/return

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

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


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

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

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

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

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

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

Sub Do-stick
   /if $char(state)==SIT /stand
   /if $defined(Param1)==FALSE {
      /assist @MasterName
   } else /if "@Param1"=="me" {
      /target pc @MasterName
   } else /if "@Param1"=="yourself" {
      /press F1
      /if n $target(id)!=$char(id) /press F1
   } else /if "@Param1"=="$char(name)" {
      /press F1
      /if n $target(id)!=$char(id) /press F1
   } else {
      /declare ParamString local
      /declare ParamCount local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-stickParamLoop
         /if $defined(Param$int(@ParamCount))==TRUE {
            /varcat ParamString " @Param$int(@ParamCount)"
            /varadd ParamCount 1
            /goto :Do-stickParamLoop
         }
      /target @ParamString
   }
   /call Delay 5
   /call ChatOut 5 @MasterName "Using Staff of Temprate Flux on $target(name,clean)"
   /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 $target(name,clean)"
           /call SpellSub "@SelfInvisSpell"
           /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
           /press esc
           /return
        } else /if "@Param1"=="$char(name)" {
           /press F1
           /if n $char(id)!=$target(id) /press F1
           /call ChatOut 5 @MasterName "Casting @SelfInvisSpell on $target(name,clean)"
           /call SpellSub "@SelfInvisSpell"
           /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
           /press esc
           /return
        } else /target "@Param1"
   } else /if $defined(Param3)==FALSE {
      /target "@Param1 @Param2"
   } else /if $defined(Param4)==FALSE {
      /target "@Param1 @Param2 @Param3"
   } else /target "@Param1 @Param2 @Param3 @Param4"
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @InvisSpell on $target(name,clean)"
   /call SpellSub "@InvisSpell"
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
   /press esc
/return


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

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

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

Sub Do-mountup
   /if $char(state)==SIT /stand
   /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
   /call Delay 2s
   /if n $char(ability,"Hide")>0 /call ChatOut 5 @MasterName "I'm not hiding"
   /if n $char(ability,"Hide")<=0 /call ChatOut 5 @MasterName "I am hiding."
/return

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

Sub Do-mask
/if $char(state)==SIT /stand
  /cast item "Mask of Deception"
/return

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

Sub Do-cloak
/if $char(state)==SIT /stand
  /cast item "Cloak of Thorns"
/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
   }
   /call Delay 5
   /call ChatOut 5 GROUP "Thorns on $target(name,clean)"
   /call SpellSub "Shield of Bracken"
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
/return

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

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

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

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

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

Sub Do-wood
   /if $defined(Param1)==FALSE {
      /assist @MasterName
   } else /if "@Param1"=="me" {
      /target pc @MasterName
   } else /if "@Param1"=="yourself" {
      /press F1
      /if n $char(id)!=$target(id) /press F1
   } else /if "@Param1"=="$char(name)" {
      /press F1
      /if n $char(id)!=$target(id) /press F1
   } else {
      /declare ParamString local
      /declare ParamCount local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-woodParamLoop
      /if $defined(Param$int(@ParamCount))==TRUE {
         /varcat ParamString " @Param$int(@ParamCount)"
         /varadd ParamCount 1
         /goto :Do-woodParamLoop
      }
      /target @ParamString
   }
   /call 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
   }
   /call Delay 5
   /if $char(state)==SIT /stand
   /call ChatOut 5 GROUP "Activating Radiant Cure (3 minute reset)."
   /alt activate 153
   /call 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
   }
   /call Delay 5
   /call ChatOut 5 @MasterName "Nuking $target(name,clean)"
   /call SpellSub "@NukeSpell"
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
/return

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

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

Sub Do-cobalt
   /if $defined(Param1)==FALSE {
      /assist @MasterName
   } else /if "@Param1"=="me" {
      /target pc @MasterName
   } else /if "@Param1"=="yourself" {
      /press F1
      /if n $char(id)!=$target(id) /press F1
   } else /if "@Param1"=="$char(name)" {
      /press F1
      /if n $char(id)!=$target(id) /press F1
   } else {
      /declare ParamString local
      /declare ParamCount local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-cobaltParamLoop
      /if $defined(Param$int(@ParamCount))==TRUE {
         /varcat ParamString " @Param$int(@ParamCount)"
         /varadd ParamCount 1
         /goto :Do-cobaltParamLoop
      }
      /target pc @ParamString
   }
   /call ChatOut 3 @MasterName "Shrinking $target(name,clean)"
   /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
   }
   /call 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
   }
   /call Delay 5
   /if $char(state)==SIT /stand
   /call ChatOut 5 GROUP "Dire Charming $target(name,clean)"
   /alt activate 46
   /call 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
   }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @StunA on $target(name,clean)"
   /call SpellSub "@StunA"
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
/return

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

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

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

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

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

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

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

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

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

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

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

Sub Do-sepic
   /if $char(state)==SIT /stand
   /if $defined(Param1)==FALSE {
      /assist @MasterName
   } else /if "@Param1"=="me" {
      /target pc @MasterName
   } else /if "@Param1"=="yourself" {
      /press F1
      /if n $target(id)!=$char(id) /press F1
   } else /if "@Param1"=="$char(name)" {
      /press F1
      /if n $target(id)!=$char(id) /press F1
   } else {
      /declare ParamString local
      /declare ParamCount local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-sepicParamLoop
         /if $defined(Param$int(@ParamCount))==TRUE {
            /varcat ParamString " @Param$int(@ParamCount)"
            /varadd ParamCount 1
            /goto :Do-sepicParamLoop
         }
      /target @ParamString
   }
   /call Delay 5
   /call ChatOut 5 @MasterName "Using Spear of Fate on $target(name,clean)"
   /stand
   /cast item "spear of fate"
   /if n @SitAfterCast==1 /varset SitTimer @DelayBeforeSit
/return

Sub Event_SkillUp(SkillUpText) 
	/declare ParseSkillLevel local 
	/declare ParseSkill local 
	/declare PositionStart local 
	/declare PositionEnd local 
	/varset PositionStart $calc($instr("! (","@SkillUpText")+3) 
	/varset PositionEnd $instr(")","@SkillUpText") 
	/varset ParseSkillLevel $mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText") 
	/varset PositionStart $instr("You have become better at ","@SkillUpText") 
	/varset PositionEnd $instr("! (","@SkillUpText") 
	/varset ParseSkill $mid(@PositionStart,$calc(@PositionEnd-@PositionStart),"@SkillUpText") 
	/call ChatOut 5 @MasterName "@ParseSkill increased - @ParseSkillLevel ..." 
	/if n @ParseSkillLevel==$calc($calc($char(level)*5)+5) { 
    		/call ChatOut 5 @MasterName "@ParseSkill maxed for level - @ParseSkillLevel ... woo!" 
    		/if n @ParseSkillLevel==235 { 
        		/call ChatOut 5 @MasterName "@ParseSkill maxed forever! - 235 is max!" 
    		} 
	} 
/return

Sub Do-cann
   /if $defined(Param1)==FALSE {
      /if n @DoCann==0 /call ChatOut 3 @MasterName "I won't cann for mana."
      /if n @DoCann==1 /call ChatOut 3 @MasterName "I will cann for mana."
      /return
   }
   /if "@Param1"=="Off" {
      /varset DoCann 0
      /call ChatOut 5 @MasterName "I will no longer cann for mana."
   }
   /if "@Param1"=="On" {
      /varset DoCann 1
      /call ChatOut 5 @MasterName "I will now cann for mana."
   }
/return

Sub Do-yaulp
   /if $defined(Param1)==FALSE {
      /if n @DoYaulp==0 /call ChatOut 3 @MasterName "I won't cann for mana."
      /if n @DoYaulp==1 /call ChatOut 3 @MasterName "I will cann for mana."
      /return
   }
   /if "@Param1"=="Off" {
      /varset DoYaulp 0
      /call ChatOut 5 @MasterName "I will no longer cann for mana."
   }
   /if "@Param1"=="On" {
      /varset DoYaulp 1
      /call ChatOut 5 @MasterName "I will now cann for mana."
   }
/return
Last edited by lasher on Fri Feb 27, 2004 4:03 am, edited 7 times in total.

crisdan
a ghoul
a ghoul
Posts: 126
Joined: Mon Mar 24, 2003 1:56 pm

Genbot setup assistance for warrior, mage, shaman

Post by crisdan » Tue Dec 30, 2003 1:33 pm

I am going my first attempt at running this marveled macro. I will be using a shaman, warrior, mage combo. Can someone give me a quick checklist of what I need to do before initial run.

Also, if you can give a breack checklist of an example of the warrior being the master and wanting the shaman to cast a buff spell on him..and the mage casting a Damage shield on the warrior as well.

I have read the forums and have a partial idea and I admit I would love to see a readme.doc file but I also know that is last on list of priorties.

Appreciate any checklists you can jot down for me.

Ok I ran the /mac genbot <master name> and it created at genbot_matername.ini.

But my next question is do I need to do the same for the shaman and mage bot since they will be slaves to the warrior master I just created?

Also, do I edit the genbot_mastername.ini a speical way since he is a tank?

Still a little confused on inital setup checklist if you can expand some :>
Last edited by crisdan on Tue Dec 30, 2003 9:19 pm, edited 1 time in total.

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Re: Genbot setup assistance for warrior, mage, shaman

Post by lasher » Tue Dec 30, 2003 2:49 pm

crisdan wrote:I am going my first attempt at running this marveled macro. I will be using a shaman, warrior, mage combo. Can someone give me a quick checklist of what I need to do before initial run.
Save all the files to your macros dir (including the .inc s)
Load up on your bot: /mac genbot <mastername>
Then end it: /end
Edit the created genbot_botname.ini

From there on out all you need to do is: /mac genbot <mastername>
and issue commands from your master, in either tells/group/channels, etc.
Also, if you can give a breack checklist of an example of the warrior being the master and wanting the shaman to cast a buff spell on him..and the mage casting a Damage shield on the warrior as well.
/t mage buff me (after editing your genbot_charname.ini with the buffs to cast)
/t shaman buff me (same as above)
I have read the forums and have a partial idea and I admit I would love to see a readme.doc file but I also know that is last on list of priorties.

Appreciate any checklists you can jot down for me.
With it in a constant state of code flux, a readme would be a tish unwiedly atm. I'll see about a quick README.newbies file.

fishez
orc pawn
orc pawn
Posts: 19
Joined: Tue Dec 09, 2003 3:42 pm

Post by fishez » Tue Dec 30, 2003 4:49 pm

OKies. Just tried the new code. With Shammy (level 57) I got the message of course that he could not use the AA ability Cannabalization which is fine but also got a 2 couldn't parse ')'.

Looking through the code now but thought I would let you know in case first.

Thanks for the new code!!!

Fishez

Edit:

Think I found the extra ) here:

/if n $char(hp,cur)>1900 )
/if @CannAATimer<=1 {

Deleted that and changed the Cannibalize IV to Cannibalize III and everything worked great except for getting a couldn't parse 'ur)>1900' BUT he did canni correctly.

Thanks!!

w00tz0r
orc pawn
orc pawn
Posts: 18
Joined: Sun Dec 14, 2003 2:37 am

Heya

Post by w00tz0r » Tue Dec 30, 2003 5:10 pm

Heya, and im glad your picking this project up (as im so attached to it) lol

Couple things i have noticed while using it that may help you out or others.

It botcore.inc

Sub MoveToAnchor



as well as

/face away nolook loc @AnchorX,@AnchorY

Cause a very noticeable "tick" when turning back to and when getting to thier anchor points. It look VERY obvious it is not human controlled.

I found changing them both to
/face nolook fast loc @AnchorX,@AnchorY
/face away fast nolook loc @AnchorX,@AnchorY

Makes it appear much more like a person running back.

The only question i have though is this..

Is there a way to make the script cause the bot when returning to face in a little bit random direction? Or place a random pause between killing the mob and returning?

Basically just to make it appear more humanlike.

Im new to all this so im just experimenting with the code.

I run 5 chars (4 using the script) 2 of which are votted melee's and when they are both done killing they run almost in unison get back to the anchor and turn in unison, very noticeable methinks.

Just a thought for some of you code writers to think about =)

El
a ghoul
a ghoul
Posts: 108
Joined: Mon Dec 29, 2003 12:34 pm

Post by El » Tue Dec 30, 2003 6:41 pm

Just a question while I'm stuck here at work... If I'm using EQW and runnin two instances of EQ on the same machine, will this bot run in the background? Or does it require separate machines?

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Tue Dec 30, 2003 7:28 pm

El wrote:Just a question while I'm stuck here at work... If I'm using EQW and runnin two instances of EQ on the same machine, will this bot run in the background? Or does it require separate machines?
It will run in the background without focus for all function except for the archery (which requires focus).

To answer you question, yes it will work with eqw and 2 instances.

crisdan
a ghoul
a ghoul
Posts: 126
Joined: Mon Mar 24, 2003 1:56 pm

Post by crisdan » Tue Dec 30, 2003 9:23 pm

[/quote]Save all the files to your macros dir (including the .inc s)
Load up on your bot: /mac genbot <mastername>
Then end it: /end
Edit the created genbot_botname.ini

From there on out all you need to do is: /mac genbot <mastername>
and issue commands from your master, in either tells/group/channels, etc.
/quote

Ok but do i do this same thing for the 2 slave bots in my above example i.e. the shaman and the mage bot?

Also, a little more expansion on setup checklist of what I need to do for my trio. Warrior - master, shaman - slave, mage - slave. Again, i have ran /mac genbot <tankmaster> so far and it created a genbo_tankmaster.ini file.

From here I dont know what other mac's I need to run, or what I should edit for my genbot_tankmaster.ini in relation to the shaman - slave, and mage-slave bots that are still not created.

Goofmester1
a hill giant
a hill giant
Posts: 241
Joined: Thu Nov 06, 2003 4:26 am

Post by Goofmester1 » Tue Dec 30, 2003 11:20 pm

lasher wrote:
El wrote:Just a question while I'm stuck here at work... If I'm using EQW and runnin two instances of EQ on the same machine, will this bot run in the background? Or does it require separate machines?
It will run in the background without focus for all function except for the archery (which requires focus).

To answer you question, yes it will work with eqw and 2 instances.
Archery can be made to run even though it is not the focus. Let me see if I can find the code for archery in this and I will look at it.

Edit: ok in combat.ini

Code: Select all

/if n @DoArchery==1 { 
      /if "$char(state)"=="SIT" /stand 
      /face fast 
      /delay 3 
      | ugly hack - would rather call direct 
      /press num_7 
   } 
This is already set to use a key other than the hotkey. So the only thing needed is to go into EQ options and set the hotkey that ranged attack is on to primary be fired using numberpad 7 and the alternate to be the normal number for that hotkey. This will then allow you to use archery even though it is not the primary focused window. Also not sure about the delay but I would probably lower it to either 1 or remove it altogether. Depending on how long it takes the macro to run through and return to this the 3 sec delay could cause alot of shots to be missed.

User avatar
lasher
a lesser mummy
a lesser mummy
Posts: 71
Joined: Thu Dec 18, 2003 4:09 pm

Post by lasher » Wed Dec 31, 2003 5:38 am

Goofmester1 wrote:
lasher wrote:
El wrote:Just a question while I'm stuck here at work... If I'm using EQW and runnin two instances of EQ on the same machine, will this bot run in the background? Or does it require separate machines?
It will run in the background without focus for all function except for the archery (which requires focus).

To answer you question, yes it will work with eqw and 2 instances.
Archery can be made to run even though it is not the focus. Let me see if I can find the code for archery in this and I will look at it.

Edit: ok in combat.ini

Code: Select all

/if n @DoArchery==1 { 
      /if "$char(state)"=="SIT" /stand 
      /face fast 
      /delay 3 
      | ugly hack - would rather call direct 
      /press num_7 
   } 
This is already set to use a key other than the hotkey. So the only thing needed is to go into EQ options and set the hotkey that ranged attack is on to primary be fired using numberpad 7 and the alternate to be the normal number for that hotkey. This will then allow you to use archery even though it is not the primary focused window. Also not sure about the delay but I would probably lower it to either 1 or remove it altogether. Depending on how long it takes the macro to run through and return to this the 3 sec delay could cause alot of shots to be missed.

Actually what I was referring to was the /press command. Because I currently activate archery via the number 7 pad. /press seems to require the focus of the window.

If something has changed recent, grats. If not, I'm still looking into better ways. I lothe /press.