MQ2Data GenBot, 99% Complete

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

Moderator: MacroQuest Developers

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

MQ2Data GenBot, 99% Complete

Post by Diggler » Fri Apr 09, 2004 2:45 am

Been working on this for a while, starts up fine, haven't tested all of the parts yet but gimme some feedback. $corpse() and $corpse(empty) remain for now because they aren't MQ2Data implemented yet. $char(ability,"***") have been left behind as well until parsing of ${Me.AbilityReady[***]} is fully functional. Cleaned up a few bits, such as /range instead of /press num_7 for archery, etc.

EDIT 4/10: Updated all /ifs to /newifs. Truly SHOULD be 99% complete now.

EDIT 4/19: Updated /sendkey and /press to /keypress. Added berserker frenzy support. Also changed all remaining $parms to ${} data types and fixed strafing issues with behind code. ADVPATH.INC IS NOW MANDATORY! It rules, ml2517 made quite a piece of work there, use it.
**THIS FIXED THE UNDEFINED-GLOBAL ISSUE WITH ADVPATH_V VARIABLE**

EDIT 4/20: Majorly cleaned up the code of genbot.mac, botcombat.inc, bothealer.inc, and personal.inc. Partially cleaned up botcore.inc and got tired heh, rest tomorrow with botspell.inc. ** Thanks Wassup for the assistance**

EDIT 4/21: Fixed Autoattack and Parenthesis issues. Cleaning up core/spell as we speak, will post when they're done. All files now updated as of 4/21/2004 with parenthesis and cleaning up. Dates/versions updated as well.

EDIT 4/23: Fixed Autoheal and issue with casting spells not previously memmed. It will now mem the spell in slot 8 and cast it immediately after refresh. Fixed random typo's/errors throughout. botcombat.inc, bothealer.inc, and botspell.inc updated, get em while they're hot!

2ND EDIT 4/23: Fixed lots more random parenthesis issues etc. (Hopefully) fixed most of the crash bugs. All files now 10.05, **botspell v10.06** get all new ones and try them out please! Post-edit -- get botcombat.inc 10.06 to fix Enrage crashes. botcore 10.06 fixes IRC chatting.

EDIT 4/24: Fixed HealPets crash and corrected a variable issue with SitTimer. **bothealer 10.07 and botcore 10.08** now.

genbot.mac ---

Code: Select all

|genbot.mac
|Generic bot macro for any class.
|Version 10.05
|Date:04/23/2004 11:00pm
|
||**
[genbot]
version=10.05
**||
|
#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 20

Sub Main
   /declare Debug global
   /varset Debug 0
   /declare MasterCount global
   /declare MasterInt global
   /declare ArrayCore global
   /declare ArraySpell global
   /declare ArrayComb global
   /declare ArrayHeal global
   /declare ArrayPers global
   /declare IniFile global
   /varset IniFile genbot_${Me.Name}.ini
   /call SetupCoreVars
   /call SetupSpellVars
   /call SetupCombatVars
   /call SetupHealerVars
   /call SetupPersonalVars
   /if (!${Defined[Param0]}) {
      /echo Usage: /macro genbot <Master Name1> <Master Name2>...
      /endmacro
   }
   /varset MasterCount 0
   :MasterLoop
   /varset MasterInt ${Int[@MasterCount]}
   /if (${Defined[Param@MasterInt]}) {
      /varset MName(@MasterInt) @Param@MasterInt
      /varadd MasterCount 1
      /goto :MasterLoop
   }
   /varsub MasterCount 1
   /varset MasterName @MName(0)
   /call CoreCommands
   /call SpellCommands
   /call CombatCommands
   /call HealerCommands
   /call PersonalCommands
   :MainLoop
   /doevents
   /call CheckGrpHealth
   /call PalGrpHealChk
   /call PalHealChk
   /call Combatcheck
   /if (@Combatstatus==0 && @DoTraps==1) /call TrapFinder
   /if (@DoArchery!=1 && @Combatstatus==1) /call RangeSub
   /if (@Combatstatus==1) /call MeleeAbility
   /if (@Combatstatus!=1 && @Supportstatus!=1) {
      /if (@IsAnchored==0) { 
          /if (@Afollow==1) {
             /target @FollowTarget
             /call Do-moveto foo @FollowTarget
             }
          /if (@advpath==1) /call AdvPathPoll
          }
      /if (@IsAnchored==1) {
         /if (${Math.Distance[@AnchorX,@AnchorY]}>@AnchorRadius) /call MoveToAnchor
         /if (@SitAfterCast==1 && ${Me.State.Equal[STAND]}) /sit
         }
      }
   /if (${Me.Combat} && ${Target.ID} && ${Target.CleanName.NotEqual[${Me.Name}]} && @AutoEngage==1) /varset Combatstatus 1
   /call PersonalMain
   /doevents
   /varset CmdArrayNum 0
   /goto :MainLoop
/return 
Last edited by Diggler on Sat Apr 24, 2004 4:41 pm, edited 20 times in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

botcore.inc

Post by Diggler » Fri Apr 09, 2004 2:46 am

botcore.inc ---

Code: Select all

|botcore.inc
|Bot core module.
|Version 10.08
|Date:04/24/2004 3:00pm
|
||**
[botcore]
version=10.08
**||
|
#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
   /varset Supportstatus 0
|Timers
   /declare SitTimer timer
   /declare StrafeTimer timer
|-------------------------------------
   /varset BotName ${Me.Name}
   /varset Afollow 0
   /varset Combatstatus 0

   /varset RangeMin ${Ini[@IniFile,Core,RangeMin]}
   /if (@RangeMin==0) {
      /ini "@IniFile" Core RangeMin 10
      /varset RangeMin 9
   }
   /varset RangeMax ${Ini[@IniFile,Core,RangeMax]}
   /if (@RangeMax==0) {
      /ini "@IniFile" Core RangeMax 12
      /varset RangeMax 12
   }
   /varset FastRange ${Ini[@IniFile,Core,FastRange]}
   /if (@FastRange==0) {
      /ini "@IniFile" Core FastRange 14
      /varset FastRange 14
   }
   /varset FastMin ${Ini[@IniFile,Core,FastMin]}
   /if (@FastMin==0) {
      /ini "@IniFile" Core FastMin 6
      /varset FastMin 6
   }
   /varset Relaytells ${Ini[@IniFile,Core,Relaytells]}
   /if (@Relaytells==0) {
      /ini "@IniFile" Core Relaytells 1
      /varset Relaytells 1
   }
   /varset ListenGroup ${Ini[@IniFile,Core,ListenGroup]}
   /if (@ListenGroup==0) {
      /ini "@IniFile" Core ListenGroup 1
      /varset ListenGroup 1
   }
   /varset ListenChat ${Ini[@IniFile,Core,ListenChat]}
   /if (@ListenChat==0) {
      /ini "@IniFile" Core ListenChat 1
      /varset ListenChat 0
   }
   /varset ListenChan ${Ini[@IniFile,Core,ListenChan]}
   /if (${String[@ListenChan].Equal[NULL]}) {
      /ini "@IniFile" Core ListenChan "Listen channel"
      /varset ListenChan "Listen channel"
   }
   /varset AttackOnAssist ${Ini[@IniFile,Core,AttackOnAssist]}
   /if (@AttackOnAssist==0) {
      /ini "@IniFile" Core AttackOnAssist 0
      /varset AttackOnAssist 0
   }
   /varset BehindOnAssist ${Ini[@IniFile,Core,BehindOnAssist]}
   /if (@BehindOnAssist==0) {
      /ini "@IniFile" Core BehindOnAssist 0
      /varset BehindOnAssist 0
   }
   /varset PetOnAssist ${Ini[@IniFile,Core,PetOnAssist]}
   /if (@PetOnAssist==0) {
      /ini "@IniFile" Core PetOnAssist 0
      /varset PetOnAssist 0
   }
   /varset Verbosity ${Ini[@IniFile,Core,Verbosity]}
   /if (@Verbosity==0) {
      /ini "@IniFile" Core Verbosity 9
      /varset Verbosity 9
   }
   /varset ChatIn ${Ini[@IniFile,Core,ChatIn]}
   /if (${String[@ChatIn].Equal[NULL]}) {
      /ini "@IniFile" Core ChatIn Tell
      /varset ChatIn Tell
   }
   /varset ChatInChannel ${Ini[@IniFile,Core,ChatInChannel]}
   /if (${String[@ChatInChannel].Equal[NULL]}) {
      /ini "@IniFile" Core ChatInChannel "Chat channel"
      /varset ChatInChannel "Chat channel"
   }
   /varset IgnGroupList ${Ini[@IniFile,Core,IgnoreInGroup]}
   /if (${String[@IgnGroupList].Equal[NULL]}) {
      /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 (${String[@DelayBeforeSit].Equal[NULL]}) {
      /ini "@IniFile" Core DelayBeforeSit 3s
      /varset DelayBeforeSit 3s
   }
   /varset AnchorRadius ${Ini[@IniFile,Core,AnchorRadius]}
   /if (@AnchorRadius==0) {
      /ini "@IniFile" Core AnchorRadius 6
      /varset AnchorRadius 6
   }
   /declare IniPosition local
   /varset IniPosition 1
   :ParseIgnGroupList
   /if (${Bool[${String[@IgnGroupList].Arg[${Int[@IniPosition]},|]}]}) {
      /varset IgnGroup(${Int[@IniPosition]}) "${String[@IgnGroupList].Arg[${Int[@IniPosition]},|]}"
      /varadd IniPosition 1
      /goto :ParseIgnGroupList
   }
   /varsub IniPosition 1
   /varset IgnGroupNum ${Int[@IniPosition]}
   /varset IsAnchored 0
/return

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

Sub ChatOut(ChatPriority,ChatTarget,ChatText)
   /if (@ChatPriority>@Verbosity) /return
   /if (${String[@ChatIn].Equal[IRC]}) {
      /i say
      /return
   }
   /if (${String[@ChatTarget].Equal[GROUP]}) {
      /g @ChatText
      /return
   }
   /if (@ChatPriority==1) {
      /tell @ChatTarget @ChatText
      /return
   }
   /if (${String[@ChatIn].Equal[tell]}) {
      /tell @ChatTarget @ChatText
   } else /if (${String[@ChatIn].Equal[Group]}) {
      /g @ChatText
   } else /if (${String[@ChatIn].Equal[Raid]}) {
      /rs @ChatText
   } else /if (${String[@ChatIn].Equal[Say]}) {
      /say @ChatText
   } else /if (${String[@ChatIn].Equal[Channel]}) {
      /chat #@ChatInChannel @ChatText
   }
/return

Sub Detectobst
   /if (@MyXLoc==${Me.Y} && @MyYLoc==${Me.X}) /call Hitobst 5
   /varset MyXLoc ${Me.Y}
   /varset MyYLoc ${Me.X}
/return

Sub Hitobst
   /keypress up
   /keypress down hold
   /if (${Math.Rand[100]}>50) {
      /call Delay 2s
      /keypress down
      /keypress Right hold
      /call Delay @Param0
      /keypress Right
      /keypress up hold
      /call Delay 2s
      /keypress up
   } else {
      /call Delay 2s
      /keypress down
      /keypress left hold
      /call Delay @Param0
      /keypress left
      /keypress up hold
      /call Delay 2s
      /keypress up
   }
   /keypress down
   /keypress Right
   /keypress Left
   /keypress up
/return

sub Loot
   /declare counter local
   /if (${Me.Combat}) /return
   /if (!${Target.ID}) /target corpse radius 100
   /if (${Target.State.NotEqual[DEAD]}) /return
   /keypress down
   /keypress 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 (@counter>12) /goto :donelooting
   /if (${Corpse}!=1) /goto :CoreWaitLoot
   /call ChatOut 5 @MasterName "Looting ${Target.CleanName}."
   :lootloop
   /if (@LootSlot==10) /goto :donelooting
   /if (@LootTooFar==1) /goto :donelooting
   /if (${Corpse.Items}==0) /goto :donelooting
   /doevents
   /click right corpse @LootSlot
   /call Delay 1s
   /varadd LootSlot 1
   /doevents
   /if (@BreakOut==1) /goto donelooting
   /goto :lootloop
   :donelooting
   /lootn always
   /varset LootSlot 0
   /keypress esc
   /keypress esc
   /keypress esc
/return

sub LootAll
   /declare counter local
   :LootAllCycle
   /if (${Me.Combat}) /return
   /if (!${Target.ID}) {
      /target corpse radius 100
   }
   /if (${Target.State.NotEqual[DEAD]}) /return
   /keypress down
   /keypress 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 (@counter>12) /goto :donelooting2
   /if (${Corpse}!=1) /goto :CoreWaitLoot2
   /call ChatOut 5 @MasterName "Looting ${Target.CleanName}."
   :lootloop2
   /if (@LootSlot==10) /goto :donelooting2
   /if (@LootTooFar==1) /goto :donelooting2
   /if (${Corpse.Items}==0) /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
   /keypress esc
   /keypress esc
   /keypress esc
   /goto :LootAllCycle
/return

|RangeSub
|Used to keep bot in combat range.
|Usage /call Rangesub
|Vars Used: RangeMax, RangeMin, FastRange, FastMin
Sub RangeSub
   /if (!${Target.ID}) /return
   /if (${Target.CleanName.Equal[${Me.Name}]}) /return
   /if (${Me.State.NotEqual[STAND]}) /stand
   /face fast
   /if (${Target.Distance}>=@FastRange) /call Fastmove
   /if (${Target.Distance}<=@FastMin) /call Fastback
   /if (${Target.Distance}>@RangeMax) /keypress up
   /if (${Target.Distance}<@RangeMin) /keypress down
/return

Sub Fastback
   /varset countdown 0
   /varset MyXLoc ${Me.Y}
   /varset MyYLoc ${Me.X}
   :fastbackloop
   /doevents
   /if (!${Target.ID}) {
      /varset Combatstatus 0
      /keypress down
      /if (${Me.Combat}) {
         /attack off
      }
      /return
   }
   /if (${Me.State.NotEqual[STAND]}) /stand
   /face fast
   /if (${Target.Distance}<@FastMin) /keypress down hold
   /if (${Target.Distance}>=@FastMin) {
      /keypress down
      /return
   }
   /goto :fastbackloop
   /if (@countdown>=3) {
      /if (@MyXLoc==${Me.Y} && @MyYLoc==${Me.X}) {
         /keypress down
         /return
         }
      /varset MyXLoc ${Me.Y}
      /varset MyYLoc ${Me.X}
   }
   /varadd countdown 1
   /goto :fastbackloop
/return

|Fastmove
|Called by Rangesub for when mob is more than /keypress distance away.
|Usage: /call Fastmove
Sub Fastmove
   /varset countdown 0
   /varset MyXLoc ${Me.Y}
   /varset MyYLoc ${Me.X}
   :fastmoveloop
   /doevents
   /if (!${Target.ID}) {
      /varset Combatstatus 0
      /keypress up
      /if (${Me.Combat}) /attack off
      /return
   }
   /if (${Me.State.NotEqual[STAND]}) /stand
   /face fast
   /if (${Target.Distance}>@FastRange) /keypress up hold
   /if (${Target.Distance}<=@FastRange) {
      /keypress up
      /return
   }
   /if (@countdown>=3) {
      /call Detectobst
      /varset countdown 0
   }
   /if (${Target.Distance}>=${Math.Calc[@FastRange*3]}) /varadd countdown 1
   /goto :fastmoveloop
/return

Sub MoveToAnchor
   /varset MyXLoc ${Me.Y}
   /varset MyYLoc ${Me.X}
   /varset countdown 0
   :AnchorMoveLoop
   /if (@IsAnchored==0) {
      /keypress up
      /return
   }
   /doevents
   /if (@Combatstatus==1) {
      /keypress up
      /return
   }
   /if (${Me.State.NotEqual[STAND]}) /stand
   /face nolook loc @AnchorX,@AnchorY
   /if (${Math.Distance[@AnchorX,@AnchorY]}>@AnchorRadius) /keypress up hold
   /if (${Math.Distance[@AnchorX,@AnchorY]}<=@AnchorRadius) {
      /keypress up
      /if (${Me.State.NotEqual[STAND]}) /stand
      /face away nolook loc @AnchorX,@AnchorY
      /return
   }
   /if (@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.CleanName}."
   /varset LootTooFar 1
/return

Sub Event_Zoned
   /varset IsAnchored 0
   /keypress up
/return

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

Sub Event_timer
   /if (${String[@Param0].Equal[SitTimer]} && ${String[${Me.State}].Equal[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]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /target myself
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-targetParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-targetParamLoop
         }
      /target @ParamString
   }
   /call ChatOut 5 @MasterName "My target is now ${Target.CleanName}."
/return

Sub Do-saytarget
   /call ChatOut 5 @MasterName "my target is ${Target.CleanName}."
/return

Sub Do-assist
   /varset Supportstatus 1
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[me]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-assistParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-assistParamLoop
         }
      /assist @ParamString
   }
   /call Delay 5
   /if (!${Target.ID}) {
      /call ChatOut 5 @MasterName "I failed to get a target."
   } else {
      /call ChatOut 5 @MasterName "My target is now ${Target.CleanName}."
      /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 (@advpath==1 && @FollowFlag==1) /call StopFunction
   /if (${String[${Me.State}].Equal[STAND]}) /sit
/return

Sub Do-stand
   /sit off
/return

Sub Do-notarget
   /keypress esc
   /keypress esc
   /keypress 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]}) {
      /afk
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-afkParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-afkParamLoop
         }
      /afk @ParamString
   }
   /call ChatOut 3 @MasterName "Going afk."
/return

Sub Do-afollow
   /varset CmdArrayNum 0
   /if (@advpath==1 && @FollowFlag==1) /call StopFunction
   /if (!${Defined[Param1]}) {
      /varset FollowTarget "@MasterName"
      /varset Afollow 1
   } else /if (${String[@Param1].Equal[me]}) {
      /varset FollowTarget "@MasterName"
      /varset Afollow 1
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-afollowParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-afollowParamLoop
         }
      /varset FollowTarget @ParamString
      /varset Afollow 1
   }
   /target @FollowTarget
   /call ChatOut 5 @MasterName "I am now following ${Target.CleanName}."
/return

Sub Do-say
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-sayParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-sayParamLoop
         }
      /say @ParamString
   }
/return

Sub Do-group
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-groupParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-groupParamLoop
         }
      /g @ParamString
   }
/return

Sub Do-tell
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-tellParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /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]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-inviteParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-inviteParamLoop
         }
      /target pc @ParamString
   }
   /call ChatOut 3 @MasterName "Inviting ${Target.CleanName}."
   /invite
/return

Sub Do-face
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-faceParamLoop
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-faceParamLoop
         }
      /target @ParamString
   }
   /call ChatOut 5 @MasterName "Facing ${Target.CleanName}."
   /stand
   /call Delay 5
   /if (${Me.State.NotEqual[STAND]}) /stand
   /face
/return

Sub Do-eqfollow
   /if (${Me.State.NotEqual[STAND]}) /stand
   /varset Afollow 0
   /varset FollowTarget "NULL"
   /if (@advpath==1 && @FollowFlag==1) /call StopFunction
   /target pc @MasterName
   /face
   /follow
   /call ChatOut 5 @MasterName "Autofollow on ${Target.CleanName}."
/return

Sub Do-stop
   /dismount
   /varset Supportstatus 0
   /varset BreakOut 1
   /varset LootTooFar 1
   /varset Fail 1
   /varset Afollow 0
   /if (@advpath==1 && @FollowFlag==1) /call StopFunction
   /varset FollowTarget "NULL"
   /call ChatOut 5 @MasterName "Stopping."
   /keypress up
   /keypress d
   /keypress d
   /target clear
   /keypress right
/return

Sub Do-stay
   /varset Afollow 0
   /if (@advpath==1 && @FollowFlag==1) /call StopFunction
   /varset FollowTarget "NULL"
/return

Sub Do-camp
   /dismount
   /varset Afollow 0
   /if (@advpath==1 && @FollowFlag==1) /call StopFunction
   /varset FollowTarget "NULL"
   /call ChatOut 3 @MasterName "Camping out."
   /if (${String[${Me.State}].Equal[STAND]}) /sit
   /camp desktop
/return

Sub Do-pause
   /if (@advpath==1) {
      /if (@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
   /keypress d
   /varset Fail 1
   /varset CTimer 0
/return

Sub Do-cmds
   /if (${Defined[Param1]}) {
      /if (${String[@Param1].NotEqual[core]} && ${String[@Param1].NotEqual[spell]} && ${String[@Param1].NotEqual[combat]} && ${String[@Param1].NotEqual[healer]} && ${String[@Param1].NotEqual[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
   /declare ParamInt local
   /varset countdown 0
   /varset MyXLoc ${Me.Y}
   /varset MyYLoc ${Me.X}
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /assist @MasterName
      /call Delay 5
      /varset ParamString ${Target.CleanName}
   } else /if (${String[@Param1].Equal[me]}) {
      /target @MasterName
      /varset ParamString @MasterName
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /return
   } else {
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-movetoParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-movetoParamLoop
         }
      /target @ParamString
   }
   /if (${Target.CleanName.Equal[${Me.Name}]}) /return
   /if (${Target.CleanName.NotEqual[@ParamString]}) /target "@ParamString"
   /if (!${Target.ID}) /return
   /doevents
   /if (@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]}) {
      /assist @MasterName
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-lootupParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-lootupParamLoop
         }
      /target @ParamString
   }
   /call Delay 5
/call Loot
/return

Sub Do-lootall
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /assist @MasterName
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-lootupParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-lootupParamLoop
         }
      /target @ParamString
   }
   /call Delay 5
/call LootAll
/return


Sub Do-petattack
   /assist @MasterName
   /call Delay 1s
   /if (!${Target.ID}) /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 (@IsAnchored==0) {
      /varset IsAnchored 1
      /varset AnchorX ${Me.Y}
      /varset AnchorY ${Me.X}
      /call ChatOut 5 @MasterName "Created anchor at Loc: @AnchorX,@AnchorY."
      /return
   }
   /if (@IsAnchored==1) {
     /varset IsAnchored 0
     /call ChatOut 5 @MasterName "Removed Anchor."
   }
/return

Sub Do-consent
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[me]}) {
      /call ChatOut 3 @MasterName "I'm giving you consent."
      /consent @MasterName
      /return
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-consentParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /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: ${Me.Buff[1]}, ${Me.Buff[2]}, ${Me.Buff[3]}, ${Me.Buff[4]}, ${Me.Buff[5]}, ${Me.Buff[6]}, ${Me.Buff[7]}, ${Me.Buff[8]}, ${Me.Buff[9]}, ${Me.Buff[10]}, ${Me.Buff[11]}, ${Me.Buff[12]}, ${Me.Buff[13]}, ${Me.Buff[14]}, ${Me.Buff[15]}"
/return

Sub Do-run
   /keypress ctrl+r
/return

Sub Do-listengroup
   /if (!${Defined[Param1]}) {
      /if (@ListenGroup==0) /call ChatOut 3 @MasterName "I'll ignore group."
      /if (@ListenGroup==1) /call ChatOut 3 @MasterName "I'll listen to group."
      /return
   }
   /if (${String[@Param1].Equal[off]}) {
      /varset ListenGroup 0
      /call ChatOut 5 @MasterName "I will now ignore group."
   }
   /if (${String[@Param1].Equal[on]}) {
      /varset ListenGroup 1
      /call ChatOut 5 @MasterName "I will now listen to group."
   }
/return

Sub Do-listenchat
   /if (!${Defined[Param1]}) {
      /if (@ListenChat==0) /call ChatOut 3 @MasterName "I will ignore chat."
      /if (@ListenChat==1) /call ChatOut 3 @MasterName "I will listen to chat."
      /return
   }
   /if (${String[@Param1].Equal[off]}) {
      /varset ListenChat 0
      /call ChatOut 5 @MasterName "I will now ignore chat."
   }
   /if (${String[@Param1].Equal[on]}) {
      /varset ListenChat 1
      /call ChatOut 5 @MasterName "I will now listen to chat."
   }
/return

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

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

Sub Do-petona
   /if (!${Defined[Param1]}) {
      /if (@PetOnAssist==0) /call ChatOut 3 @MasterName "I won't send pet in on assist."
      /if (@PetOnAssist==1) /call ChatOut 3 @MasterName "I will send pet in on assist."
      /return
   }
   /if (${String[@Param1].Equal[off]}) {
      /varset PetOnAssist 0
      /call ChatOut 5 @MasterName "I won't send pet in on assist anymore."
   }
   /if (${String[@Param1].Equal[on]}) {
      /varset PetOnAssist 1
      /call ChatOut 5 @MasterName "I will send pet in on assist now."
   }
/return

Sub Do-verbosity
   /if (!${Defined[Param1]}) {
      /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]}) {
      /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]}) /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]}) /return
   /if (!${Defined[Param2]}) /return
   /if (!${Defined[Param3]}) /return
   /if (!${Defined[Param4]}) /return
   /if (@Param1>@Param2) /return
   /if (@Param2>@Param3) /return
   /if (@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]}) /call ChatOut 3 @MasterName "My anchor radius is @AnchorRadius."
   /if (@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 (${Me.State.NotEqual[STAND]}) /stand
   /varset Afollow 0
   /varset FollowTarget "NULL"
   /if (@advpath==1) {
      /if (!${Defined[Param1]}) {
            /varset FollowTarget "@MasterName"
      } else /if (${String[@Param1].Equal[me]}) {
            /varset FollowTarget "@MasterName"
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
            /return
      } else {
            /declare ParamString local
            /declare ParamCount local
            /declare ParamInt local
            /varset ParamCount 2
            /varset ParamString "@Param1"
            :Do-afollowParamLoop
                  /varset ParamInt ${Int[@ParamCount]}
                  /if (${Defined[Param@ParamInt]}) {
                  /varcat ParamString " @Param@ParamInt"
                  /varadd ParamCount 1
                  /goto :Do-afollowParamLoop
            }
            /varset FollowTarget @ParamString
            /varset Afollow 1
      }
      /call FollowFunction "@FollowTarget"
      /if (${Target.ID}) {
         /call ChatOut 5 @MasterName "I am now following ${Target.CleanName}."
      } else {
         /call ChatOut 5 @MasterName "Unable to follow @FollowTarget."
         /call StopFunction
         /varset FollowTarget "NULL"
      }
   } else {
      /call Do-eqfollow
   }
/return 
Last edited by Diggler on Sat Apr 24, 2004 3:06 pm, edited 12 times in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

botcombat.inc

Post by Diggler » Fri Apr 09, 2004 2:48 am

botcombat.inc --

Code: Select all

|botcombat.inc
|Bot combat module.
|Version 10.06
|Date:04/23/2004 11:00pm
|
||**
[botcombat]
version=10.06
**||
|
#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 Commands(2,16) frenzy
   /varset ArrayComb 16
/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 DoFrenzy global
   /declare DoArchery global
   /declare EnrageVar global
   /varset EnrageVar 0
   /declare Aggressive global
   /declare IsPuller global
   /declare AutoEngage global
   /varset DoBackstab ${Ini[@IniFile,Combat,DoBackstab]}
   /if (@DoBackstab==0) {
      /ini "@IniFile" Combat DoBackstab 0
      /varset DoBackstab 0
   }
   /varset DoTaunt ${Ini[@IniFile,Combat,DoTaunt]}
   /if (@DoTaunt==0) {
      /ini "@IniFile" Combat DoTaunt 0
      /varset DoTaunt 0
   }
   /varset DoEvade ${Ini[@IniFile,Combat,DoEvade]}
   /if (@DoEvade==0) {
      /ini "@IniFile" Combat DoEvade 0
      /varset DoEvade 0
   }
   /varset DoSlam ${Ini[@IniFile,Combat,DoSlam]}
   /if (@DoSlam==0) {
      /ini "@IniFile" Combat DoSlam 0
      /varset DoSlam 0
   }
   /varset DoBash ${Ini[@IniFile,Combat,DoBash]}
   /if (@DoBash==0) {
      /ini "@IniFile" Combat DoBash 0
      /varset DoBash 0
   }
   /varset DoKick ${Ini[@IniFile,Combat,DoKick]}
   /if (@DoKick==0) {
      /ini "@IniFile" Combat DoKick 0
      /varset DoKick 0
   }
   /varset DoFlyingKick ${Ini[@IniFile,Combat,DoFlyingKick]}
   /if (@DoFlyingKick==0) {
      /ini "@IniFile" Combat DoFlyingKick 0
      /varset DoFlyingKick 0
   }
   /varset DoDisarm ${Ini[@IniFile,Combat,DoDisarm]}
   /if (@DoDisarm==0) {
      /ini "@IniFile" Combat DoDisarm 0
      /varset DoDisarm 0
   }
   /varset DoFrenzy ${Ini[@IniFile,Combat,DoFrenzy]}
   /if (@DoFrenzy==0) {
      /ini "@IniFile" Combat DoFrenzy 0
      /varset DoFrenzy 0
   }
   /varset DoTraps ${Ini[@IniFile,Combat,DoTraps]}
   /if (@DoTraps==0) {
      /ini "@IniFile" Combat DoTraps 0
      /varset DoTraps 0
   }
   /varset DoArchery ${Ini[@IniFile,Combat,DoArchery]}
   /if (@DoArchery==0) {
      /ini "@IniFile" Combat DoArchery 0
      /varset DoArchery 0
   }
   /varset Aggressive ${Ini[@IniFile,Combat,Aggressive]}
   /if (@Aggressive==0) {
      /ini "@IniFile" Combat Aggressive 0
      /varset Aggressive 0
   }
   /varset AutoEngage ${Ini[@IniFile,Combat,AutoEngage]}
   /if (@AutoEngage==0) {
      /ini "@IniFile" Combat AutoEngage 0
      /varset AutoEngage 0
   }
   /varset IsPuller 0
/return

|Combatcheck
|Used to check if attack is on and should not be.
|Usage /call Combatcheck.
Sub Combatcheck
   /if (@EnrageVar==1) {
      /if (${Target.ID}) {
         /return
         } else {
         /varset EnrageVar 0
         /varset Combatstatus 0
         /attack off
         /return
         }
      }
   /if (@Supportstatus==1) {
      /if (!${Target.ID}) /call Delay 5
      /if (!${Target.ID}) /varset Supportstatus 0
      }
   /if (@Combatstatus==1) {
      /if (!${Target.ID}) /call Delay 5
      /if (!${Target.ID}) {
         /varset Combatstatus 0
         /varset Supportstatus 0
         /attack off
         /return
         }
      /if (${Bool[${Me.Casting}]}) /return
      /if (@EnrageVar==1) /return
      /if (@DoArchery!=1 && !${Me.Combat}) /attack on
      }
/return

|MeleeAbility
|Used to do melee abilities if vars are set to.
|Usage /call MeleeAbility
Sub MeleeAbility
   /if (${Bool[${Me.Casting}]}) /return
   /if (@DoBash==1 && ${Me.AbilityReady[Bash]} && ${Me.State.Equal[STAND]}) { 
      /face fast
      /doability "Bash"
      }
   /if (@DoBackstab==1 && ${Math.Distance[${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}]}<6 && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Backstab"
      }
   /if (@DoSlam==1 && ${Me.AbilityReady[Slam]} && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Slam"
      }
   /if (@DoEvade==1 && ${Me.AbilityReady[Hide]} && ${Me.State.Equal[STAND]}) {
      /attack off
      /doability "Hide"
      /attack on
      }
   /if (@DoTaunt==1 && ${Me.AbilityReady[Taunt]} && ${Me.State.Equal[STAND]}) /doability "Taunt"
   /if (@DoKick==1 && ${Me.AbilityReady[Kick]} && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Kick"
      }
   /if (@DoFlyingKick==1 && ${Me.AbilityReady[Flying Kick]} && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Flying Kick"
      }
   /if (@DoDisarm==1 && ${Me.AbilityReady[Disarm]} && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Disarm"
      }
   /if (@DoFrenzy==1 && ${Me.AbilityReady[Frenzy]} && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Frenzy"
      }
   /if (@DoArchery==1 && ${Me.State.Equal[STAND]}) {
      /face fast
      /range
   }
/return

|TrapFinder
|Used to auto sence traps when DoTraps is set to 1
|Usage /call TrapFinder
Sub TrapFinder
   /if (@DoTraps==1 && ${Me.AbilityReady[Sense Traps]}) /doability "Sense Traps"
   /doevents
/return

Sub bscounter
   /if (!${Target.ID}) /return
   /if (${Me.State.NotEqual[STAND]}) /stand
   /keypress strafe_right hold
   :MoreCounter
   /if (@DoBackstab==1 && ${Math.Distance[${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}]}<6 && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Backstab"
      }
   /if (${String[@Debug].NotEqual[0]}) /echo Strafing right.
   /if (!${Target.ID}) {
      /keypress strafe_right
      /return
      }
   /if (${Target.Distance}>20) {
      /keypress strafe_right
      /if (${String[@Debug].NotEqual[0]}) /echo Calling RangeSub.
      /call RangeSub
      /return
      }
   /if (${Target.Distance}<4) {
      /keypress strafe_right
      /if (${String[@Debug].NotEqual[0]}) /echo Calling RangeSub.
      /call RangeSub
      /return
      }
   /face
   /if (${Me.Heading.Degrees}>=180 && ${Math.Calc[${Me.Heading.Degrees}-180]}<=${Target.Heading.Degrees} && ${Me.Heading.Degrees}>${Math.Calc[${Target.Heading.Degrees}+22.5]}) /goto :MoreCounter
   /if (${Me.Heading.Degrees}<=180 && ${Target.Heading.Degrees}<=180 && ${Me.Heading.Degrees}>${Math.Calc[${Target.Heading.Degrees}+25]}) /goto :MoreCounter
   /if (${Me.Heading.Degrees}>=180 && ${Target.Heading.Degrees}<=180 && ${Math.Calc[${Me.Heading.Degrees}-157.5]}<${Math.Calc[${Target.Heading.Degrees}+180]}) /goto :MoreCounter
   /keypress strafe_right
   /face fast
/return

Sub bsclock
   /if (!${Target.ID}) /return
   /if (${Me.State.NotEqual[STAND]}) /stand
   /keypress strafe_left hold
   :MoreClock
   /if (@DoBackstab==1 && ${Math.Distance[${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}]}<6 && ${Me.State.Equal[STAND]}) {
      /face fast
      /doability "Backstab"
      }
   /if (${String[@Debug].NotEqual[0]}) /echo Strafing left.
   /if (!${Target.ID}) {
      /keypress strafe_left
      /return
      }
   /if (${Target.Distance}>20) {
      /keypress strafe_left
      /if (${String[@Debug].NotEqual[0]}) /echo Calling RangeSub.
      /call RangeSub
      /return
      }
   /if (${Target.Distance}<4) {
      /keypress strafe_left
      /if (${String[@Debug].NotEqual[0]}) /echo Calling RangeSub.
      /call RangeSub
      /return
      }
   /face fast
   /if (${Target.Heading.Degrees}>=180 && ${Math.Calc[${Target.Heading.Degrees}-180]}<=${Me.Heading.Degrees} && ${Me.Heading.Degrees}<${Math.Calc[${Target.Heading.Degrees}-22.5]}) /goto :MoreClock
   /if (${Target.Heading.Degrees}<=180 && ${Me.Heading.Degrees}<${Math.Calc[${Target.Heading.Degrees}-22.5]}) /goto :MoreClock
   /if (${Target.Heading.Degrees}>=180 && ${Me.Heading.Degrees}<=180 && ${Math.Calc[${Me.Heading.Degrees}-22.5]}>${Math.Calc[${Target.Heading.Degrees}-360]}) /goto :MoreClock
   /keypress strafe_left
   /face fast
/return

Sub CheckAggressive
   /if (${Window[InventoryWindow].Open}) /return
   /call CheckPuller
   /if (@Aggressive==0) /return
   /if (!${String[@Param0].Find[say]} && ${String[@Param0].NotEqual[group]} && ${String[@Param0].NotEqual[out of character]} && ${String[@Param0].NotEqual[shout]} && !${String[@Param0].Find[guild]} && ${Target.ID}) {
|      /if (${Target.Type.Equal[NPC]}) {
|         /target clear
|         /call Delay 2s
|         }
      /if (!${Me.Combat} && ${Target.Type.Equal[NPC]} && @Aggressive==1) {
         /call ChatOut 5 @MasterName "I am being attacked by ${Target.CleanName}."
         /call Delay 2
         /varset Combatstatus 1
         /attack on
         }
      }
/return

Sub CheckPuller
   /declare AggTemp local
   /if (@IsPuller==0) /return
   /if (${Math.Distance[@AnchorX,@AnchorY]}<=90) /return
   /declare mobface local
   /varset mobface ${Math.Calc[(${Me.Heading.Degrees}+180)]}
   /varcalc mobface @mobface%360
   /if (${Target.Heading.Degrees}<=${Math.Calc[@mobface+10]} && ${Target.Heading.Degrees}>=${Math.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.ID}) {
      /if (@Combatstatus==1) {
         /varset EnrageVar 1
         /attack off
         }
      /varset EnrageVar 1
      }
/return

Sub Event_Offrage
   /if (${Target.ID}) {
      /if (@Combatstatus==1) {
         /varset EnrageVar 0
         /attack on
         }
      /varset EnrageVar 0
      }
/return

Sub Event_FoundBoxTrap
   /if (${Me.AbilityReady[Disarm Traps]}>0) {
      /call ChatOut 5 @MasterName "Trying to disarm a ${Target.CleanName} trap."
      /doability "Disarm Traps"
      }
/return

Sub Event_FoundFloorTrap
   /if (${Me.AbilityReady[Disarm Traps]}>0) {
      /call ChatOut 5 @MasterName "Trying to disarm a floor trap."
      /doability "Disarm Traps"
      }
/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.ID}) {
      /assist @MasterName
      /call Delay 5
      }
   :behind
   /if (!${Target.ID}) /return
   /doevents
   /call RangeSub
  | ----- Clockwise Rotate Check -----
   /if (!${Target.ID}) /return
   /if (${Target.Heading.Degrees}>=180 && ${Math.Calc[${Target.Heading.Degrees}-180]}<=${Me.Heading.Degrees} && ${Me.Heading.Degrees}<${Math.Calc[${Target.Heading.Degrees}-22.5]}) /call bsclock
   /if (!${Target.ID}) /return
   /if (${Target.Heading.Degrees}>=180 && ${Me.Heading.Degrees}<=180 && ${Math.Calc[${Me.Heading.Degrees}-22.5]}>${Math.Calc[${Target.Heading.Degrees}-360]}) /call bscounter
   /if (!${Target.ID}) /return
   /if (${Target.Heading.Degrees}<=180 && ${Me.Heading.Degrees}<${Math.Calc[${Target.Heading.Degrees}-22.5]}) /call bsclock
  | ----- Counter Clockwise Rotate Check -----
   /if (!${Target.ID}) /return
   /if (${Me.Heading.Degrees}>=180 && ${Math.Calc[${Me.Heading.Degrees}-180]}<=${Target.Heading.Degrees} && ${Me.Heading.Degrees}>${Math.Calc[${Target.Heading.Degrees}+22.5]}) /call bscounter
   /if (!${Target.ID}) /return
   /if (${Me.Heading.Degrees}>=180 && ${Target.Heading.Degrees}<=180 && ${Math.Calc[${Me.Heading.Degrees}-157.5]}<${Math.Calc[${Target.Heading.Degrees}+180]}) /call bsclock
   /if (!${Target.ID}) /return
   /if (${Me.Heading.Degrees}<=180 && ${Target.Heading.Degrees}<=180 && ${Me.Heading.Degrees}>${Math.Calc[${Target.Heading.Degrees}+25]}) /call bscounter
   /if (!${Target.ID}) /return
   /if (${Math.Abs[${Math.Calc[${Target.Heading.Degrees}-${Me.Heading.Degrees}]}]}>30) /goto :behind
/return

Sub Do-autoinv
   /autoinventory
/return

Sub Do-getbehind
   /varset countdown 0
   /varset MyXLoc ${Me.Y}
   /varset MyYLoc ${Me.X}
   /varset Combatstatus 1
   /if (!${Target.ID}) {
      /assist @MasterName
      /call Delay 5
      }
   /if (${Math.Distance[${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}]}<3) /goto :noneed
   /if (!${Target.ID}) /return
   /keypress up hold
   :gobehindloop
   /if (${Me.State.NotEqual[STAND]}) /stand
   /if (!${Target.ID}) {
      /keypress up
      /return
      }
   /if (@countdown>=20) {
      /if (@MyXLoc==${Me.Y} && @MyYLoc==${Me.X}) {
         /keypress up
         /return
         }
      /varset MyXLoc ${Me.Y}
      /varset MyYLoc ${Me.X}
      /varset countdown 0
      }
   /varadd countdown 1
   /doevents
   /face nolook fast loc ${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}
   /if (${Math.Distance[${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}]}>1) /goto :gobehindloop
   /keypress up
   /face fast
:noneed
/keypress up
/return

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

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

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

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

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

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

Sub Do-frenzy
   /if (@DoFrenzy==1) {
      /call ChatOut 5 @MasterName "Auto Frenzy is now off."
      /varset DoFrenzy 0
      /return
      }
   /if (@DoFrenzy==0) {
      /call ChatOut 5 @MasterName "Auto Frenzy is now on."
      /varset DoFrenzy 1
      /return
      }
/return

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

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

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

Sub Do-attack
   /varset Supportstatus 1
   /varset Combatstatus 1
   /if (${Me.State.NotEqual[STAND]}) /stand
   /if (${Defined[Param1]}==0) {
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
         /varset Combatstatus 0
         /return
      } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-attackParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-attackParamLoop
         }
      /target @ParamString
   }
   /call Delay 1
   /if (${Me.Name.Equal[${Target.CleanName}]}) {
      /varset Combatstatus 0
      /return
      }
   /call ChatOut 5 @MasterName "Attacking ${Target.CleanName}."
   /if (@DoArchery!=1) /attack on
/return

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

Sub Do-beagg
   /if (!${Defined[Param1]}) {
      /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 (${String[@Param1].Equal[off]}) {
      /varset Aggressive 0
      /call ChatOut 5 @MasterName "Aggressive is now set to off."
      }
   /if (${String[@Param1].Equal[on]}) {
      /varset Aggressive 1
      /call ChatOut 5 @MasterName "Aggressive is now set to on."
      }
/return

Sub Do-puller
   /if (!${Defined[Param1]}) {
      /if (@IsPuller==0) /call ChatOut 3 @MasterName "I'm not the puller."
      /if (@IsPuller==1) /call ChatOut 3 @MasterName "I'm the puller."
      /return
      }
   /if (${String[@Param1].Equal[off]}) {
      /varset IsPuller 0
      /call ChatOut 5 @MasterName "I'm not the puller anymore."
      }
   /if (${String[@Param1].Equal[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]}) {
      /if (@AutoEngage==0) /call ChatOut 3 @MasterName "I will not engage when attack is on."
      /if (@AutoEngage==1) /call ChatOut 3 @MasterName "I will engage when attack is on."
      /return
      }
   /if (${String[@Param1].Equal[off]}) {
      /varset AutoEngage 0
      /call ChatOut 5 @MasterName "I will not engage when attack is on anymore."
      }
   /if (${String[@Param1].Equal[on]}) {
      /varset AutoEngage 1
      /call ChatOut 5 @MasterName "I will now engage when attack is on."
      }
/return

Sub Do-archery
   /if (!${Defined[Param1]}) {
      /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 (${String[@Param1].Equal[off]}) {
      /varset DoArchery 0
      /call ChatOut 5 @MasterName "Archery is now set to off."
      }
   /if (${String[@Param1].Equal[on]}) {
      /varset DoArchery 1
      /call ChatOut 5 @MasterName "Archery is now set to on."
      }
/return 
Last edited by Diggler on Fri Apr 23, 2004 11:55 pm, edited 11 times in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

bothealer.inc

Post by Diggler » Fri Apr 09, 2004 2:50 am

bothealer.inc --

Code: Select all

|bothealer.inc
|Bot healer module.
|Version 10.07
|Date:04/24/2004 4:30pm
|
||**
[bothealer]
version=10.07
**||
|
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 Commands(4,12) settankhealpct
   /varset Commands(4,13) setcasterhealpct
   /varset ArrayHeal 13 
/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
   /varset HealedId 0
   /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 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==0) {
      /ini "@IniFile" Healer IsHealer 0
      /varset IsHealer 0
   }
   /varset IsPally ${Ini[@IniFile,Healer,IsPally]}
   /if (@IsPally==0) {
      /ini "@IniFile" Healer IsPally 0
      /varset IsPally 0
   }
   /varset ReportAutoHeal ${Ini[@IniFile,Healer,ReportAutoHeal]}
   /if (@ReportAutoHeal==0) {
      /ini "@IniFile" Healer ReportAutoHeal 1
      /varset ReportAutoHeal 1
   }
   /varset CasterHealIsHot ${Ini[@IniFile,Healer,CasterHealIsHot]}
   /if (@CasterHealIsHot==0) {
      /ini "@IniFile" Healer CasterHealIsHot 0
      /varset CasterHealIsHot 0
   }
   /varset HotDelay ${Ini[@IniFile,Healer,HotDelay]}
   /if (@HotDelay==0) {
      /ini "@IniFile" Healer HotDelay 60
      /varset HotDelay 60
   }
   /varset HealPets ${Ini[@IniFile,Healer,HealPets]}
   /if (@HealPets==0) {
      /ini "@IniFile" Healer HealPets 0
      /varset HealPets 0
   }
   /varset PatchHealer ${Ini[@IniFile,Healer,PatchHealer]}
   /if (@PatchHealer==0) {
      /ini "@IniFile" Healer PatchHealer 1
      /varset PatchHealer 1
   }
   /varset TankSpell "${Ini[@IniFile,Healer,TankSpell]}"
   /if (${String[@TankSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer TankSpell "Name of heal spell autoheal uses on Tanks"
      /varset TankSpell "NA"
   }
   /varset CasterSpell "${Ini[@IniFile,Healer,CasterSpell]}"
   /if (${String[@CasterSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer CasterSpell "Name of heal spell autoheal uses on Non Tanks"
      /varset CasterSpell "NA"
   }
   /varset DefaultHealSpell "${Ini[@IniFile,Healer,DefaultHealSpell]}"
   /if (${String[@DefaultHealSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer DefaultHealSpell "Name of Default Heal Spell"
      /varset DefaultHealSpell "NA"
   }
   /varset PetSpell "${Ini[@IniFile,Healer,PetSpell]}"
   /if (${String[@PetSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer PetSpell "Name of Pet Heal Spell"
      /varset PetSpell "NA"
   }
   /varset PatchSpell "${Ini[@IniFile,Healer,PatchSpell]}"
   /if (${String[@PatchSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer PatchSpell "Name of Patch Heal Spell"
      /varset PatchSpell "NA"
   }
   /varset HealCasterMsg "${Ini[@IniFile,Healer,HealCasterMsg]}"
   /if (${String[@HealCasterMsg].Equal[NULL]}) {
      /ini "@IniFile" Healer HealCasterMsg "Healing %t"
      /varset HealCasterMsg "Healing %t"
   }
   /varset HealTankMsg "${Ini[@IniFile,Healer,HealTankMsg]}"
   /if (${String[@HealTankMsg].Equal[NULL]}) {
      /ini "@IniFile" Healer HealTankMsg "Big Heal on %t"
      /varset HealTankMsg "Big Heal on %t"
   }
   /varset HealPetMsg "${Ini[@IniFile,Healer,HealPetMsg]}"
   /if (${String[@HealPetMsg].Equal[NULL]}) {
      /ini "@IniFile" Healer HealPetMsg "Healing %t"
      /varset HealPetMsg "Healing %t"
   }
   /varset PalHealMsg "${Ini[@IniFile,Healer,PalHealMsg]}"
   /if (${String[@PalHealMsg].Equal[NULL]}) {
      /ini "@IniFile" Healer PalHealMsg "Healing %t"
      /varset PalHealMsg "Healing %t"
   }
   /varset PatchHealMsg "${Ini[@IniFile,Healer,PatchHealMsg]}"
   /if (${String[@PatchHealMsg].Equal[NULL]}) {
      /ini "@IniFile" Healer PatchHealMsg "Patch Healing %t"
      /varset PatchHealMsg "Patch Healing %t"
   }
   /varset PallyGroupSpell "${Ini[@IniFile,Healer,PallyGroupSpell]}"
   /if (${String[@PallyGroupSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer PallyGroupSpell "Name of Pally Group Heal Spell"
      /varset PallyGroupSpell "NA"
   }
   /varset PallyHealSpell "${Ini[@IniFile,Healer,PallyHealSpell]}"
   /if (${String[@PallyHealSpell].Equal[NULL]}) {
      /ini "@IniFile" Healer PallyHealSpell "Name of Pally Heal Spell"
      /varset PallyHealSpell "NA"
   }
   /varset CasterPctHeal ${Ini[@IniFile,Healer,CasterPctHeal]}
   /if (@CasterPctHeal==0) {
      /ini "@IniFile" Healer CasterPctHeal 70
      /varset CasterPctHeal 70
   }
   /varset TankPctHeal ${Ini[@IniFile,Healer,TankPctHeal]}
   /if (@TankPctHeal==0) {
      /ini "@IniFile" Healer TankPctHeal 51
      /varset TankPctHeal 51
   }
   /varset PalGrpPct ${Ini[@IniFile,Healer,PalGrpPct]}
   /if (@PalGrpPct==0) {
      /ini "@IniFile" Healer PalGrpPct 81
      /varset PalGrpPct 81
   }
   /varset PetPctHeal ${Ini[@IniFile,Healer,PetPctHeal]}
   /if (@PetPctHeal==0) {
      /ini "@IniFile" Healer PetPctHeal 51
      /varset PetPctHeal 51
   }
   /varset PalHealPct ${Ini[@IniFile,Healer,PalHealPct]}
   /if (@PalHealPct==0) {
      /ini "@IniFile" Healer PalHealPct 81
      /varset PalHealPct 81
   }
   /declare IniPosition local
   :reloadlist
   /varset TankList "${Ini[@IniFile,Healer,TankList]}"
   /varset CasterList "${Ini[@IniFile,Healer,CasterList]}"
   /if (${String[@TankList].Equal[NULL]} && ${String[@CasterList].Equal[NULL]}) {
      /ini "@IniFile" Healer TankList "Warrior|Shadow Knight|Paladin|Monk|Beastlord|Ranger|Shaman|Rogue|Berserker"
      /ini "@IniFile" Healer CasterList "Necromancer|Wizard|Enchanter|Magician|Druid|Cleric|Bard"
      /goto :reloadlist
      }
   /varset IniPosition 1
   :TankLoadList
   /if (${Bool[${String[@TankList].Arg[${Int[@IniPosition]},|]}]}) {
      /varset TankArray(${Int[@IniPosition]}) "${String[@TankList].Arg[${Int[@IniPosition]},|]}"
      /varadd IniPosition 1
      /goto :TankLoadList
   }
   /varsub IniPosition 1
   /varset TankArrayNum ${Int[@IniPosition]}
   /varset IniPosition 1
   :CasterLoadList
   /if (${Bool[${String[@CasterList].Arg[${Int[@IniPosition]},|]}]}) {
      /varset CasterArray(${Int[@IniPosition]}) "${String[@CasterList].Arg[${Int[@IniPosition]},|]}"
      /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 (@IsHealer==0) /return
   /if (@IsPally==1) /return
   /varset SaveCombatStat @Combatstatus
   /varset SaveCombatID ${Target.ID}
   /varset HealCount ${Group}
   /for tempvar 0 to ${Group}
      /varset HealTargets(@tempvar) ${Group[@tempvar].ID}
      /if (@tempvar==0) /varset HealTargets(0) ${Me.ID}
   /next tempvar
   /if (@WatchWaitCount>10 && @WatchTargetCount>0) {
         /for tempvar 0 to @WatchTargetCount
            /varadd HealCount 1
            /varset HealTargets(@HealCount) @WatchTargetIDs(@tempvar)
         /next tempvar
         /varset WatchWaitCount 0
      }
   /varadd WatchWaitCount 1
   /for tempvar 0 to @HealCount
      /if (@tempvar>${Group} && ${Target.ID}!=@HealTargets(@tempvar)) {
         /if (@Combatstatus==1) /attack off
         /target id @HealTargets(@tempvar)
         /if (${Target.ID}!=@HealTargets(@tempvar)) {
            /varadd BadIDs 1
            }
         }
      /doevents
      /if (${Spawn[@HealTargets(@tempvar)].PctHPs}<@TankPctHeal && ${Spawn[@HealTargets(@tempvar)].State.NotEqual[DEAD]}) {
         /for tankcount 1 to @TankArrayNum
            /if (${Spawn[@HealTargets(@tempvar)].Class.Name.Equal[@TankArray(@tankcount)]}) {
               /if (${Spawn[@HealTargets(@tempvar)].PctHPs}<${Math.Calc[@TankPctHeal/2]} && @PatchHealer==1) /call PatchHeal @HealTargets(@tempvar)
               /if (@Combatstatus==1) /attack off
               /call Tankheal @HealTargets(@tempvar)
               }
            /if (${String[@BreakOut].Equal[1]}) /return
         /next tankcount
         }
      /if (${Spawn[@HealTargets(@tempvar)].PctHPs}<@CasterPctHeal && ${Spawn[@HealTargets(@tempvar)].State.NotEqual[DEAD]}) {
         /for castercount 1 to @CasterArrayNum
            /if (${Spawn[@HealTargets(@tempvar)].Class.Name.Equal[@CasterArray(@castercount)]}) {
               /if (${Spawn[@HealTargets(@tempvar)].PctHPs}<${Math.Calc[@CasterPctHeal/2]} && @PatchHealer==1) /call PatchHeal @HealTargets(@tempvar)
               /if (@Combatstatus==1) /attack off
               /call Casterheal @HealTargets(@tempvar)
               }
            /if (${String[@BreakOut].Equal[1]}) /return
         /next castercount
         }
      /if (@HealPets==1 && ${String["${Spawn[@HealTargets(@tempvar)].Pet}"].NotEqual[NULL]} && ${Spawn[@HealTargets(@tempvar)].Pet.PctHPs}<@PetPctHeal) {
         /if (@Combatstatus==1) /attack off
         /call Petheal ${Spawn[@HealTargets(@tempvar)].Pet.ID}
         /if (${String[@BreakOut].Equal[1]}) /return
         }
      /doevents
   /next tempvar
   /if (@SaveCombatStat==1) {
      /if (${Target.ID}!=@SaveCombatID) /target ID @SaveCombatID
      /if (${Target.ID} && ${Target.Type.Equal[NPC]}) {
         /stand
         /attack on
         /varset Combatstatus 1
         }
      }
   /if (@BadIDs>0) /call ResetWatchTargets
/return

Sub Tankheal
   /if (${Me.Moving}) /return
   /declare BadTarget local
   /varset BadTarget 0
   :TankhealTarget
      /if (@Param0==${Me.ID} && @Param0!=${Target.ID}) /target myself
      /if (@Param0!=${Me.ID} && ${Target.ID}!=@Param0) /target id @Param0
      /call Delay 1
      /if (${Target.ID}!=@Param0 && @BadTarget<10) {
            /varadd BadTarget 1
            /goto :TankhealTarget
         }
   /if (${Target.ID}!=@Param0) /return
   /stand
   /if (@CastMsgTimer1<=0) {
      /if (@ReportAutoHeal==1) /g @HealTankMsg
      /varset CastMsgTimer1 50
   }
   /call SpellSub "@TankSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
   /target clear
/return

Sub CasterHeal
   /if (${Me.Moving}) /return
   /declare BadTarget local
   /varset BadTarget 0
   :CasterHealTarget
      /if (@Param0==${Me.ID} && @Param0!=${Target.ID}) /target myself
      /if (@Param0!=${Me.ID} && ${Target.ID}!=@Param0) /target id @Param0
      /call Delay 1
      /if (${Target.ID}!=@Param0 && @BadTarget<10) {
         /varadd BadTarget 1
         /goto :CasterHealTarget
         }
   /if (${Target.ID}!=@Param0) /return
   /if (@CasterHealIsHot==1 && @HOTWait>0 && @Param0==@HealedId) /return
   /if (${Me.State.NotEqual[STAND]}) /stand
   /if (@CastMsgTimer2<=0) {
   /varset CastMsgTimer2 10s
      /if (@ReportAutoHeal==1) /g @HealCasterMsg
   }
   /call SpellSub "@CasterSpell"
   /varset HealedId @Param0
   /varset HOTWait @HotDelay
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
   /target clear
/return

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

Sub Patchheal
   /if (${Me.Moving}) /return
   /if (@Param0==${Me.ID} && @Param0!=${Target.ID}) /target myself
   /if (@Param0!=${Me.ID} && ${Target.ID}!=@Param0) /target id @Param0
   /call Delay 1
   /stand
   /if (@CastMsgTimer1<=0 && @ReportAutoHeal==1) { 
      /g @PatchHealMsg
      /varset CastMsgTimer1 50
      }
   /if (${Me.Gem["@PatchSpell"]}>0) /cast "@PatchSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
   /target clear
/return

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

Sub PallyHeal
   /if (@Combatstatus==1) /return
   /if (@Param0==${Me.ID}) /target myself
   /if (@Param0!=${Me.ID}) /target id @Param0
   /stand
   /if (@Combatstatus==0) /g @PalHealMsg

   /call SpellSub "@PallyHealSpell"
/return

Sub PalGrpHealChk
   /declare LowHealthCheck local
   /if (@IsPally==0) /return
   /if (@IsHealer==0) /return
|   /varset GroupMax ${Group}
   /varset LowHealthCheck 0
   /for tempvar 0 to ${Group}
   /doevents
   /if (${Spawn[${Group[@tempvar].PctHPs}]}<@PalGrpPct && ${Spawn[${Group[@tempvar].PctHPs}]}>=1) /varadd LowHealthCheck 1
   /if (@LowHealthCheck>=3) /call PalGroupheal
   /doevents
   /next tempvar
/return

Sub PalHealChk
   /if (@IsPally==0) /return
   /if (@IsHealer==0) /return
|   /varset GroupMax ${Group}
   /for tempvar 0 to ${Group}
   /doevents
   /if (${Spawn[${Group[@tempvar].PctHPs}]}<@PalHealPct && ${Spawn[${Group[@tempvar].PctHPs}]}>=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.CleanName.Equal[@WatchTargets(@counter)]}) {
            /varset WatchTargetIDs(@counter) ${Target.ID}
      } else {
            /call ChatOut 5 @MasterName "I failed to target @WatchTargets(@counter)."
      }
   /next counter
/return

Sub Do-togglehot
   /if (!${Defined[Param1]}) {
      /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 (${String[@Param1].Equal[off]}) {
      /varset CasterHealIsHot 0
      /call ChatOut 5 @MasterName "My non tank spell is a heal over time."
   }
   /if (${String[@Param1].Equal[off]}) {
      /varset CasterHealIsHot 1
      /call ChatOut 5 @MasterName "My non tank spell isn't a heal over time."
   }
/return

Sub Do-autoheal
   /if (!${Defined[Param1]}) {
      /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 (${String[@Param1].Equal[off]}) {
      /varset IsHealer 0
      /call ChatOut 5 @MasterName "Let me know if anyone needs a heal."
   }
   /if (${String[@Param1].Equal[on]}) {
      /varset IsHealer 1
      /call ChatOut 5 @MasterName "I'll watch for heals."
   }
/return

Sub Do-setpetheal
   /if (!${Defined[Param1]}) {
      /call ChatOut 3 @MasterName "My pet heal is @PetSpell."
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-setpethealParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-setpethealParamLoop
         }
      }
   /varset PetSpell @ParamString
   /call ChatOut 3 @MasterName "I'll use @PetSpell to heal pets."
/return

Sub Do-setpatchheal
   /if (!${Defined[Param1]}) {
      /call ChatOut 3 @MasterName "I use @PatchSpell for patch heals."
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-setpatchhealParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-setpatchhealParamLoop
         }
      }
   /varset PatchSpell @ParamString
   /call ChatOut 3 @MasterName "I'll use @PatchSpell for patch heals now."
/return

Sub Do-settankheal
   /if (!${Defined[Param1]}) {
      /call ChatOut 3 @MasterName "My tank heal is @TankSpell
      /return
   }
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-settankhealParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
         /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]}) {
      /call ChatOut 3 @MasterName "I usualy heal with @DefaultHealSpell."
      /return
   }
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-setdefaulthealParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
         /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]}) {
      /call ChatOut 3 @MasterName "I heal non tanks with @CasterSpell."
      /return
   }
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-setcasterhealParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
         /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]}) {
      /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 (${String[@Param1].Equal[off]}) {
      /varset HealPets 0
      /call ChatOut 5 @MasterName "I will not heal the pets now."
   }
   /if (${String[@Param1].Equal[on]}) {
      /varset HealPets 1
      /call ChatOut 5 @MasterName "I will heal the pets now."
   }
/return

Sub Do-heal
   /if (!${Defined[Param1]}) {
      /assist @MasterName
   } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
   } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /target myself
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-healParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-healParamLoop
         }
      /target @ParamString
   }
   /call ChatOut 3 @MasterName "Casting @DefaultHealSpell on ${Target.CleanName}."
   /call SpellSub "@DefaultHealSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-watchtarget
   /if (!${Defined[Param1]}) /return
   /if (${String[@Param1].Equal[off]}) {
      /varset WatchTargetCount 0
      /return
   }
   /target @Param1
   /call Delay 25
   /if (${Target.ID}) {
      /varadd WatchTargetCount 1
      /varset WatchTargets(@WatchTargetCount) ${Target.CleanName}
      /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]}) {
      /if (@PatchHealer==1) /tell @MasterName I'm a patch Healer
      /if (@PatchHealer==0) /tell @MasterName I'm not a patch Healer
      /return
   }
   /if (${String[@Param1].Equal[off]}) {
      /varset PatchHealer 0
      /call ChatOut 5 @MasterName "I won't be doing patch heals now."
   }
   /if (${String[@Param1].Equal[on]}) {
      /varset PatchHealer 1
      /call ChatOut 5 @MasterName "I'll take care of the patch heals now."
   }
/return 

Sub Do-settankhealpct
   /if (!${Defined[Param1]}) /tell @MasterName Tank Heal Percent set to @TankPctHeal%.
   /varset TankPctHeal @Param1
   /call ChatOut 3 @MasterName "I'll heal tanks at @Param1%."
/return 

Sub Do-setcasterhealpct
   /if (!${Defined[Param1]}) /tell @MasterName Caster Heal Percent set to @CasterPctHeal%.
   /varset CasterPctHeal @Param1
   /call ChatOut 3 @MasterName "I'll heal casters at @Param1%."
/return 
Last edited by Diggler on Sat Apr 24, 2004 4:39 pm, edited 12 times in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

botspell.inc

Post by Diggler » Fri Apr 09, 2004 2:51 am

botspell.inc --

Code: Select all

|botspell.inc
|Bot spell module.
|Version 10.06
|Date:04/23/2004 11:00pm
|
|
||**
[botspell]
version=10.06
**||
|
#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==0) {
      /ini "@IniFile" Spell SitAfterCast 0
      /varset SitAfterCast 0
   }
   /varset DefaultSpellSet ${Ini[@IniFile,Spell,DefaultSpellSet]}
   /if (${String[@DefaultSpellSet].Equal[NULL]}) {
      /ini "@IniFile" Spell DefaultSpellSet "default"
      /varset DefaultSpellSet "default"
   }
   /varset EvacSpell ${Ini[@IniFile,Spell,EvacSpell]}
   /if (${String[@EvacSpell].Equal[NULL]}) {
      /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 (${String[@Param0].Equal[NA]}) /return
   /varset Fail 0
   /if (@SitAfterCast==1) /varset SitTimer 1140m
   /varset SpellName "@Param0"
   /if (${Me.State.NotEqual[STAND]}) /stand
   /varset Remem 0
   /if (@IsBard==0) {
      /if (${Me.Moving}) {
            /keypress up
            /keypress down
            /call Delay 1s
      }
      :WaitForStop
      /doevents
      /if (${String[@BreakOut].Equal[1]}) /return
      /if (${Me.Moving}) {
            /call Delay 1s
            /goto :WaitForStop
      }
   }
   /if (@IsBard==1) /stopsong
   :MemWait
   /doevents
   /if (${String[@Fail].Equal[1]}) {
      /varset Fail 0
      /if (${String[@Remem].Equal[1]}) {
         /memspellset @DefaultSpellSet
         :loadsploop
         /call Delay 5
         /if (${Window[SpellBookWnd].Open}) /goto :loadsploop
      }
      /if (@SitAfterCast==1 && ${Me.State.Equal[STAND]}) /sit
      /return 1
   }
   /varset SpellSlot ${Me.Gem["@SpellName"]}
   /if (@SpellSlot==0) {
      /memspell 8 "@Param0"
      /varset SpellSlot 8
      /varset Remem 1
      :refreshwait
      /doevents
      /if (${String[@Fail].Equal[1]}) {
         /varset Fail 0
         /if (${String[@Remem].Equal[1]}) {
            /memspellset @DefaultSpellSet
            :loadsploop
            /call Delay 5
            /if (${Window[SpellBookWnd].Open}) /goto :loadsploop
         }
         /if (@SitAfterCast==1 && ${Me.State.Equal[STAND]}) /sit
         /return 1
      }
      /call Delay 5
      /if (!${Me.SpellReady[@SpellName]}) /goto :refreshwait
   }
   /varset CastTime "${Spell[@SpellName].MyCastTime.Int}"
   /if (@IsBard==0) /varadd CastTime 1
   :BeginCast
   /varset Fail 0
   /varset DoAgain 0
   /varset StartCast 0
   /call WaitForStart
   :TimerLoop
   /doevents
   /if (@IsBard==1 && @Combatstatus==1) /call RangeSub
   /if (${String[@DoAgain].Equal[1]}) /goto :BeginCast
   /if (${String[@Fail].Equal[1]}) {
      /varset Fail 0
      /if (${String[@Remem].Equal[1]}) {
         /memspellset @DefaultSpellSet
         :loadsploop
        /call Delay 5
         /if (${Window[SpellBookWnd].Open}) /goto :loadsploop
      }
      /if (@SitAfterCast==1 && ${Me.State.Equal[STAND]}) /sit
      /return 1
   }
   /if (@CTimer>0) /goto :TimerLoop
   /if (@IsBard==1) {
      /call Delay 1
   } else {
        /call Delay 2
   }
   /doevents
   /if (${String[@DoAgain].Equal[1]}) /goto :BeginCast
   /if (${String[@Remem].Equal[1]}) {
      /memspellset @DefaultSpellSet
      :loadsploop
      /call Delay 5
      /if (${Window[SpellBookWnd].Open}) /goto :loadsploop
   }
/return 0

|WaitForStart
|Used by SpellSub to determine when to start spell countdown.
Sub WaitForStart
   /cast @SpellSlot
   :StartLoop
   /doevents
   /if (${String[@Fail].Equal[1]}) /return
   /if (${String[@DoAgain].Equal[1]}) /return
   /if (@IsBard==0 && @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 (${String[@Fail].Equal[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 memmed. "
   /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 (@OOMtimer<=0) {
         /call ChatOut 5 "@MasterName I am OOM!"
         /varset OOMtimer 100
         /return
      }
   }
   /if (@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 (@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.CleanName} 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]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-snParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-snParamLoop
         }
      /call ChatOut 1 "@MasterName" "Casting @ParamString on ${Target.CleanName}"
      /call SpellSub "@ParamString"
   }
   /target clear
/return

Sub Do-mana
   /target myself
   /call ChatOut 2 @MasterName "${Me.PctMana}m"
   /keypress esc
/return

Sub Do-loadlist
   /if (!${Defined[Param1]}) {
      /return
   } else {
   /memspellset @Param1
   }
/return

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

Sub Do-evac
   /if (${String[@EvacSpell].NotEqual[NONE]}) /call ChatOut 5 @MasterName "Moving to you and casting @EvacSpell!"
   /call Do-moveto evac @MasterName
   /call Delay 2s
   /if (${String[@EvacSpell].NotEqual[NONE]}) /call SpellSub "@EvacSpell"
/return

Sub Do-itemcast
   /if (${Me.State.NotEqual[STAND]}) {
      /stand
      /call Delay 3
   }
   /assist @MasterName
   /call Delay 5
   /varset CmdArrayNum 0
   /if (!${Defined[Param1]}) {
      /return
   } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-itemcastParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-itemcastParamLoop
         }
         /echo @ParamString
      /cast item "@ParamString"
   }
   /call ChatOut 3 @MasterName "Using @ParamString on ${Target.CleanName}"
/return


Sub Do-snt
   /declare SpellNameParam local
   /declare TargetName local
   /declare ParamCount local
   /declare ParamInt local
   /if (!${Defined[Param1]}) {
      /return
   } else {
      /varset ParamCount 2
      /varset SpellNameParam "@Param1"
      :Do-sntSpellLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /if (${String[@Param@ParamInt].Equal[on]}) /goto :Do-sntTargetStart
            /varcat SpellNameParam " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-sntSpellLoop
         }
     :Do-sntTargetStart
     /varadd ParamCount 1
     /varset ParamInt ${Int[@ParamCount]}
     /if (!${Defined[Param@ParamInt]}) {
        /return
     } else {
         /varset TargetName "@Param@ParamInt"
         /varadd ParamCount 1
        :Do-sntTargetLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat TargetName " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-sntTargetLoop
         }
      }
      /target @TargetName
      /call Delay 5
      /if (!${Target.ID}) {
         /call ChatOut 5 @MasterName "I failed to get a target."
         /return
      }
      /call SpellSub "@SpellNameParam"
      /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
      /target clear
   }
/return 
Last edited by Diggler on Fri Apr 23, 2004 11:45 pm, edited 10 times in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

personal.inc

Post by Diggler » Fri Apr 09, 2004 3:22 am

personal.inc --

Code: Select all

|personal.inc
|Personal commands module example.
|Version 10.05
|Date:04/23/2004 11:00pm
|
||**
[Personal]
version=10.05
**||
#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 (${String[@FireSpell].Equal[NULL]}) /ini "@IniFile" Personal FireSpell "Fire Spell"
   /declare IceSpell global
   /varset IceSpell "${Ini[@IniFile,Personal,IceSpell]}"
   /if (${String[@IceSpell].Equal[NULL]}) /ini "@IniFile" Personal IceSpell "Ice Spell"
   /declare NukeSpell global
   /varset NukeSpell "${Ini[@IniFile,Personal,NukeSpell]}"
   /if (${String[@NukeSpell].Equal[NULL]}) /ini "@IniFile" Personal NukeSpell "Nuke Spell"
   /declare RootSpell global
   /varset RootSpell "${Ini[@IniFile,Personal,RootSpell]}"
   /if (${String[@RootSpell].Equal[NULL]}) /ini "@IniFile" Personal RootSpell "Root Spell"
   /declare SnareSpell global
   /varset SnareSpell "${Ini[@IniFile,Personal,SnareSpell]}"
   /if (${String[@SnareSpell].Equal[NULL]}) /ini "@IniFile" Personal SnareSpell "Snare Spell"
   /declare InvisSpell global
   /varset InvisSpell "${Ini[@IniFile,Personal,InvisSpell]}"
   /if (${String[@InvisSpell].Equal[NULL]}) /ini "@IniFile" Personal InvisSpell "Invis Spell"
   /declare SelfInvisSpell global
   /varset SelfInvisSpell "${Ini[@IniFile,Personal,SelfInvisSpell]}"
   /if (${String[@SelfInvisSpell].Equal[NULL]}) /ini "@IniFile" Personal SelfInvisSpell "Self Invis Spell"
   /declare LureSpell global
   /varset LureSpell "${Ini[@IniFile,Personal,LureSpell]}"
   /if (${String[@LureSpell].Equal[NULL]}) /ini "@IniFile" Personal LureSpell "Lure Spell"
   /declare SlowSpell global
   /varset SlowSpell "${Ini[@IniFile,Personal,SlowSpell]}"
   /if (${String[@SlowSpell].Equal[NULL]}) /ini "@IniFile" Personal SlowSpell "Slow Spell"
   /declare DebuffSpell global
   /varset DebuffSpell "${Ini[@IniFile,Personal,DebuffSpell]}"
   /if (${String[@DebuffSpell].Equal[NULL]}) /ini "@IniFile" Personal DebuffSpell "Debuff Spell"
   /declare LevSpell global
   /varset LevSpell "${Ini[@IniFile,Personal,LevSpell]}"
   /if (${String[@LevSpell].Equal[NULL]}) /ini "@IniFile" Personal LevSpell "Levitation Spell"
   /declare RegenSpell global
   /varset RegenSpell "${Ini[@IniFile,Personal,RegenSpell]}"
   /if (${String[@RegenSpell].Equal[NULL]}) /ini "@IniFile" Personal RegenSpell "Regen Spell"
   /declare HotSpell global
   /varset HotSpell "${Ini[@IniFile,Personal,HotSpell]}"
   /if (${String[@HotSpell].Equal[NULL]}) /ini "@IniFile" Personal HotSpell "Heal Over Time Spell"
   /declare MountItem global
   /varset MountItem "${Ini[@IniFile,Personal,MountItem]}"
   /if (${String[@MountItem].Equal[NULL]}) /ini "@IniFile" Personal MountItem "Name of Mount Item"
   /declare BuffSpell1 global
   /varset BuffSpell1 "${Ini[@IniFile,Personal,BuffSpell1]}"
   /if (${String[@BuffSpell1].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell1 "Name of Buff spell 1"
   /declare BuffSpell2 global
   /varset BuffSpell2 "${Ini[@IniFile,Personal,BuffSpell2]}"
   /if (${String[@BuffSpell2].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell2 "Name of Buff spell 2"
   /declare BuffSpell3 global
   /varset BuffSpell3 "${Ini[@IniFile,Personal,BuffSpell3]}"
   /if (${String[@BuffSpell3].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell3 "Name of Buff spell 3"
   /declare BuffSpell4 global
   /varset BuffSpell4 "${Ini[@IniFile,Personal,BuffSpell4]}"
   /if (${String[@BuffSpell4].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell4 "Name of Buff spell 4"
   /declare BuffSpell5 global
   /varset BuffSpell5 "${Ini[@IniFile,Personal,BuffSpell5]}"
   /if (${String[@BuffSpell5].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell5 "Name of Buff spell 5"
   /declare BuffSpell6 global
   /varset BuffSpell6 "${Ini[@IniFile,Personal,BuffSpell6]}"
   /if (${String[@BuffSpell6].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell6 "Name of Buff spell 6"
   /declare BuffSpell7 global
   /varset BuffSpell7 "${Ini[@IniFile,Personal,BuffSpell7]}"
   /if (${String[@BuffSpell7].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell7 "Name of Buff spell 7"
   /declare BuffSpell8 global
   /varset BuffSpell8 "${Ini[@IniFile,Personal,BuffSpell8]}"
   /if (${String[@BuffSpell8].Equal[NULL]}) /ini "@IniFile" Personal BuffSpell8 "Name of Buff spell 8"
   /declare GBuffSpell1 global
   /varset GBuffSpell1 "${Ini[@IniFile,Personal,GBuffSpell1]}"
   /if (${String[@GBuffSpell1].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell1 "Name of Group Buff spell 1"
   /declare GBuffSpell2 global
   /varset GBuffSpell2 "${Ini[@IniFile,Personal,GBuffSpell2]}"
   /if (${String[@GBuffSpell2].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell2 "Name of Group Buff spell 2"
   /declare GBuffSpell3 global
   /varset GBuffSpell3 "${Ini[@IniFile,Personal,GBuffSpell3]}"
   /if (${String[@GBuffSpell3].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell3 "Name of Group Buff spell 3"
   /declare GBuffSpell4 global
   /varset GBuffSpell4 "${Ini[@IniFile,Personal,GBuffSpell4]}"
   /if (${String[@GBuffSpell4].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell4 "Name of Group Buff spell 4"
   /declare GBuffSpell5 global
   /varset GBuffSpell5 "${Ini[@IniFile,Personal,GBuffSpell5]}"
   /if (${String[@GBuffSpell5].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell5 "Name of Group Buff spell 5"
   /declare GBuffSpell6 global
   /varset GBuffSpell6 "${Ini[@IniFile,Personal,GBuffSpell6]}"
   /if (${String[@GBuffSpell6].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell6 "Name of Group Buff spell 6"
   /declare GBuffSpell7 global
   /varset GBuffSpell7 "${Ini[@IniFile,Personal,GBuffSpell7]}"
   /if (${String[@GBuffSpell7].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell7 "Name of Group Buff spell 7"
   /declare GBuffSpell8 global
   /varset GBuffSpell8 "${Ini[@IniFile,Personal,GBuffSpell8]}"
   /if (${String[@GBuffSpell8].Equal[NULL]}) /ini "@IniFile" Personal GBuffSpell8 "Name of Group Buff spell 8"
   /declare PetBuffSpell1 global
   /varset PetBuffSpell1 "${Ini[@IniFile,Personal,PetBuffSpell1]}"
   /if (${String[@PetBuffSpell1].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell1 "Name of Pet Buff spell 1"
   /declare PetBuffSpell2 global
   /varset PetBuffSpell2 "${Ini[@IniFile,Personal,PetBuffSpell2]}"
   /if (${String[@PetBuffSpell2].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell2 "Name of Pet Buff spell 2"
   /declare PetBuffSpell3 global
   /varset PetBuffSpell3 "${Ini[@IniFile,Personal,PetBuffSpell3]}"
   /if (${String[@PetBuffSpell3].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell3 "Name of Pet Buff spell 3"
   /declare PetBuffSpell4 global
   /varset PetBuffSpell4 "${Ini[@IniFile,Personal,PetBuffSpell4]}"
   /if (${String[@PetBuffSpell4].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell4 "Name of Pet Buff spell 4"
   /declare PetBuffSpell5 global
   /varset PetBuffSpell5 "${Ini[@IniFile,Personal,PetBuffSpell5]}"
   /if (${String[@PetBuffSpell5].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell5 "Name of Pet Buff spell 5"
   /declare PetBuffSpell6 global
   /varset PetBuffSpell6 "${Ini[@IniFile,Personal,PetBuffSpell6]}"
   /if (${String[@PetBuffSpell6].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell6 "Name of Pet Buff spell 6"
   /declare PetBuffSpell7 global
   /varset PetBuffSpell7 "${Ini[@IniFile,Personal,PetBuffSpell7]}"
   /if (${String[@PetBuffSpell7].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell7 "Name of Pet Buff spell 7"
   /declare PetBuffSpell8 global
   /varset PetBuffSpell8 "${Ini[@IniFile,Personal,PetBuffSpell8]}"
   /if (${String[@PetBuffSpell8].Equal[NULL]}) /ini "@IniFile" Personal PetBuffSpell8 "Name of Pet Buff spell 8"
   /declare ReportLom global
   /varset ReportLom "${Ini[@IniFile,Personal,ReportLom]}"
   /if (@ReportLom==0) /ini "@IniFile" Personal ReportLom 0
   /declare LomPct global
   /varset LomPct "${Ini[@IniFile,Personal,LomPct]}"
   /if (@LomPct==0) /ini "@IniFile" Personal LomPct 10
   /declare LomMsg global
   /varset LomMsg ${Ini[@IniFile,Personal,LomMsg]}"
   /if (${String[@LomMsg].Equal[NULL]}) /ini "@IniFile" Personal LomMsg "I'm getting LOM"
   /declare StunA global
   /varset StunA "${Ini[@IniFile,Personal,StunA]}"
   /if (${String[@StunA].Equal[NULL]}) /ini "@IniFile" Personal StunA "StunA Spell"
   /declare StunB global
   /varset StunB "${Ini[@IniFile,Personal,StunB]}"
   /if (${String[@StunB].Equal[NULL]}) /ini "@IniFile" Personal StunB "StunB Spell"
   /declare StunC global
   /varset StunC "${Ini[@IniFile,Personal,StunC]}"
   /if (${String[@StunC].Equal[NULL]}) /ini "@IniFile" Personal StunC "StunC Spell"
   /declare DDStunA global
   /varset DDStunA "${Ini[@IniFile,Personal,DDStunA]}"
   /if (${String[@DDStunA].Equal[NULL]}) /ini "@IniFile" Personal DDStunA "DDStunA Spell"
   /declare DDStunB global
   /varset DDStunB "${Ini[@IniFile,Personal,DDStunB]}"
   /if (${String[@DDStunB].Equal[NULL]}) /ini "@IniFile" Personal DDStunB "DDStunB Spell"
   /declare MezLow global
   /varset MezLow "${Ini[@IniFile,Personal,MezLow]}"
   /if (${String[@MezLow].Equal[NULL]}) /ini "@IniFile" Personal MezLow "MezLow Spell"
   /declare MezHigh global
   /varset MezHigh "${Ini[@IniFile,Personal,MezHigh]}"
   /if (${String[@MezHigh].Equal[NULL]}) /ini "@IniFile" Personal MezHigh "MezHigh Spell"
   /declare MezAE global
   /varset MezAE "${Ini[@IniFile,Personal,MezAE]}"
   /if (${String[@MezAE].Equal[NULL]}) /ini "@IniFile" Personal MezAE "MezAE Spell"
   /declare AutoBehind global
   /varset AutoBehind "${Ini[@IniFile,Personal,AutoBehind]}"
   /if (@AutoBehind==0) /ini "@IniFile" Personal AutoBehind 0
   /declare IsShaman global
   /varset IsShaman "${Ini[@IniFile,Personal,IsShaman]}"
   /if (@IsShaman==0) /ini "@IniFile" Personal IsShaman 0
   /declare IsCleric global
   /varset IsCleric "${Ini[@IniFile,Personal,IsCleric]}"
   /if (@IsCleric==0) /ini "@IniFile" Personal IsCleric 0
   /declare IsBard global
   /varset IsBard "${Ini[@IniFile,Personal,IsBard]}"
   /if (@IsBard==0) /ini "@IniFile" Personal IsBard 0
   /declare IsRanger global
   /varset IsRanger "${Ini[@IniFile,Personal,IsRanger]}"
   /if (@IsRanger==0) /ini "@IniFile" Personal IsRanger 0
   /declare DoIncite global
   /varset DoIncite "${Ini[@IniFile,Personal,DoIncite]}"
   /if (@DoIncite==0) /ini "@IniFile" Personal DoIncite 0
   /declare DoYaulp global
   /varset DoYaulp "${Ini[@IniFile,Personal,DoYaulp]}"
   /if (@DoYaulp==0) /ini "@IniFile" Personal DoYaulp 0
   /declare DoCann global
   /varset DoCann "${Ini[@IniFile,Personal,DoCann]}"
   /if (@DoCann==0) /ini "@IniFile" Personal DoCann 0
   /declare YaulpSpell global
   /varset YaulpSpell "${Ini[@IniFile,Personal,YaulpSpell]}"
   /if (${String[@YaulpSpell].Equal[NULL]}) /ini "@IniFile" Personal YaulpSpell "Yaulp VI"
   /declare CannSpell global
   /varset CannSpell "${Ini[@IniFile,Personal,CannSpell]}"
   /if (${String[@CannSpell].Equal[NULL]}) /ini "@IniFile" Personal CannSpell "Cannibalize IV"
   /declare advpath global
   /declare FaceFastini local
   /varset FaceFastini "${Ini[@IniFile,advpath,FaceFast]}"
   /if (@FaceFastini==0) {
      /ini "@IniFile" advpath FaceFast 1
      /varset FaceFastini 1
      }
   /declare SpeedSenseini local
   /varset SpeedSenseini "${Ini[@IniFile,advpath,SpeedSense]}"
   /if (@SpeedSenseini==0) {
      /ini "@IniFile" advpath SpeedSense 15
      /varset SpeedSenseini 15
      }
   /declare FollowDistanceini local
   /varset FollowDistanceini "${Ini[@IniFile,advpath,FollowDistance]}"
   /if (@FollowDistanceini==0) {
      /ini "@IniFile" advpath FollowDistance 20
      /varset FollowDistanceini 20
      }
   /declare SilentFlagini local
   /varset SilentFlagini "${Ini[@IniFile,advpath,SilentFlag]}"
   /if (@SilentFlagini==0) {
      /ini "@IniFile" advpath SilentFlag 1
      /varset SilentFlagini 1
      }
   /echo Advanced pathing enabled.
   /varset advpath 1
   /call InitAPFVars @FaceFastini @SpeedSenseini @FollowDistanceini
   /varset SilentFlag @SilentFlagini
   ||||||||||||||||||||||||
   |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 (@ReportLom==1) /call CheckMana
   /if (@DoYaulp==1) /call CheckYaulp
   /if (@DoCann==1) /call CheckCann
   /if (@Performing==1) /call Singalong
   /if (@AutoBehind==1 && @Combatstatus==1 && ${Target.ID} && ${Math.Distance[${Math.Calc[${Target.Y}-${Math.Cos[${Target.Heading.Degrees}]}*10]},${Math.Calc[${Target.X}+${Math.Sin[${Target.Heading.Degrees}]}*10]}]}>6) /call Do-behind
   /if (@DoIncite==1 && @Combatstatus==1 && ${Target.ID} && @InciteTimer==0) {
      /disc incite
      /varset InciteTimer 35s
      }
/return

Sub CheckCann
   /if (!${Me.Moving}) {
      /if (${Me.PctMana}<80 && ${Me.PctHPs}>=60 && ${Me.CurrentHPs}>1900 && @CannAATimer==0) {
         /alt activate 47
         /varset CannAATimer 3m
         }
      /if (${Me.PctMana}<95 && ${Me.PctHPs}>=40 && @CannTimer<=1) {
         /call SpellSub "@CannSpell"
         /varset CannTimer 4s
         }
      }
/return

Sub CheckYaulp
   /if (!${Me.Moving} && ${Me.PctMana}<95 && @YaulpTimer<=1) {
      /call SpellSub "@YaulpSpell"
      /varset YaulpTimer 25s
      }
/return

Sub CheckMana
   /if (@LomTimer>0 && ${Me.PctMana}<@LomPct) {
      /call ChatOut 5 @MasterName "@LomMsg"
      /varset LomTimer 2m
      }
/return

Sub Singalong
   /if (@Combatstatus==1) {
      /varset IsSinging 0
      /call SpellSub "${Me.Gem[@cursong]}"
      /if (@IsSinging==0) /call SpellSub "Chorus of Marr"
      /varset IsSinging 1
      /varset cursong 1
      /return
      }
   /varadd cursong 1
   /if (@cursong>3) /varset cursong 1
/return


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

Sub Do-fire
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-fireParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-fireParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @FireSpell on ${Target.CleanName}"
   /call SpellSub "@FireSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-lure
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-lureParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-lureParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @LureSpell on ${Target.CleanName}"
   /call SpellSub "@LureSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-ice
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-iceParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-iceParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @IceSpell on ${Target.CleanName}"
   /call SpellSub "@IceSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-root
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-rootParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-rootParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @RootSpell on ${Target.CleanName}"
   /call SpellSub "@RootSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-snare
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-snareParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-snareParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @SnareSpell on ${Target.CleanName}"
   /call SpellSub "@SnareSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-stick
   /if (${Me.State.NotEqual[STAND]}) /stand
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-stickParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-stickParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Using Staff of Temprate Flux on ${Target.CleanName}"
   /stand
   /cast item "staff of temperate flux"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-invis
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (!${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
           /keypress F1
           /if (${Me.ID}!=${Target.ID}) /keypress F1
           /call ChatOut 5 @MasterName "Casting @SelfInvisSpell on ${Target.CleanName}"
           /call SpellSub "@SelfInvisSpell"
           /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
           /keypress esc
           /return
        } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-invParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-invParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @InvisSpell on ${Target.CleanName}"
   /call SpellSub "@InvisSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
   /keypress esc
/return


Sub Do-lev
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
      /declare ParamString local
      /declare ParamCount local
      /declare ParamInt local
      /varset ParamCount 2
      /varset ParamString "@Param1"
      :Do-levParamLoop
         /varset ParamInt ${Int[@ParamCount]}
         /if (${Defined[Param@ParamInt]}) {
            /varcat ParamString " @Param@ParamInt"
            /varadd ParamCount 1
            /goto :Do-levParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 3 @MasterName "Casting @LevSpell on ${Target.CleanName}"
   /call SpellSub "@LevSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sub Do-setlompct
   /if (!${Defined[Param1]}) /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 (@ReportLom==1) {
      /varset ReportLom 0
      /call ChatOut 5 @MasterName "I'll stop spaming you about being LOM."
      /return
   }
   /if (@ReportLom==0) {
      /varset ReportLom 1
      /call ChatOut 5 @MasterName "I'll let you know when I'm LOM."
      /return
   }
/return

Sub Do-mountup
   /if (${Me.State.NotEqual[STAND]}) /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
   /keypress u
/return

Sub Do-shield
   /if (${String[@Param1].Equal[me]}) {
      /shield @MasterName
      /return
      }
   /shield @Param1
/return


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

Sub Do-hide
   /doability Hide
   /call Delay 2s
   /if (${Me.AbilityReady[Hide]}) /call ChatOut 5 @MasterName "I'm not hiding"
   /if (!${Me.AbilityReady[Hide]}) /call ChatOut 5 @MasterName "I am hiding."
/return

Sub Do-sneak
   /doability Sneak
   /call Delay 2s
   /if (!${Me.AbilityReady[Sneak]}) /call ChatOut 5 @MasterName "I'm not sneaking atm"
   /if (${Me.AbilityReady[Sneak]}) /call ChatOut 5 @MasterName "I'm sneaking"
/return

Sub Do-mask
/if (${Me.State.NotEqual[STAND]}) /stand
  /cast item "Mask of Deception"
/return

Sub Do-bp
/if (${Me.State.NotEqual[STAND]}) /stand
  /cast item "Brigand's Chestguard"
/return

Sub Do-cloak
/if (${Me.State.NotEqual[STAND]}) /stand
  /cast item "Cloak of Thorns"
/return

Sub Do-patch
/if (${Me.State.NotEqual[STAND]}) /stand
   /cast item "Eyepatch of Plunder"
/return

Sub Do-ear
/if (${Me.State.NotEqual[STAND]}) /stand
   /cast item "Shrunken Goblin Skull Earring"
/return

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

Sub Do-thorn
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-thornParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-thornParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 GROUP "Thorns on ${Target.CleanName}"
   /call SpellSub "Legacy of Bracken"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-buff
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-buffParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-buffParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (!${Target.ID}) {
      /call ChatOut 5 @MasterName "What did you want me to target?"
      /return
   }
   /if (${String[@BuffSpell1].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call ChatOut 5 @MasterName "Buffing ${Target.CleanName}"
   /call SpellSub "@BuffSpell1"
   /if (${String[@BuffSpell2].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell2"
   /if (${String[@BuffSpell3].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell3"
   /if (${String[@BuffSpell4].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell4"
   /if (${String[@BuffSpell5].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell5"
   /if (${String[@BuffSpell6].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell6"
   /if (${String[@BuffSpell7].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell7"
   /if (${String[@BuffSpell8].Find[Name of Buff]}>=1) /goto :EndBuffs
   /call SpellSub "@BuffSpell8"
   :EndBuffs
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-groupbuff
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-groupbuffParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-groupbuffParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (!${Target.ID}) {
      /call ChatOut 5 @MasterName "What did you want me to target?"
      /return
   }
   /if (${String[@GBuffSpell1].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell1 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell1"
   /if (${String[@GBuffSpell2].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell2 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell2"
   /if (${String[@GBuffSpell3].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell3 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell3"
   /if (${String[@GBuffSpell4].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell4 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell4"
   /if (${String[@GBuffSpell5].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell5 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell5"
   /if (${String[@GBuffSpell6].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell6 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell6"
   /if (${String[@GBuffSpell7].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell7 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell7"
   /if (${String[@GBuffSpell8].Find[Name of Group]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@GBuffSpell8 on ${Target.CleanName}"
   /call SpellSub "@GBuffSpell8"
   :EndGBuffs
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-petbuff
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-petbuffParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-petbuffParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (!${Target.ID}) {
      /call ChatOut 5 @MasterName "What did you want me to target?"
      /return
   }
   /if (${String[@PetBuffSpell1].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell1 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell1"
   /if (${String[@PetBuffSpell2].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell2 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell2"
   /if (${String[@PetBuffSpell3].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell3 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell3"
   /if (${String[@PetBuffSpell4].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell4 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell4"
   /if (${String[@PetBuffSpell5].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell5 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell5"
   /if (${String[@PetBuffSpell6].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell6 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell6"
   /if (${String[@PetBuffSpell7].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell7 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell7"
   /if (${String[@PetBuffSpell8].Find[Name of Pet]}>=1) /goto :EndGBuffs
   /call ChatOut 5 GROUP "@PetBuffSpell8 on ${Target.CleanName}"
   /call SpellSub "@PetBuffSpell8"
   :EndGBuffs
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-regen
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-regenParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-regenParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 GROUP "@RegenSpell on ${Target.CleanName}"
   /call SpellSub "@RegenSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-hot
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-hotParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-hotParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 GROUP "Casting Heal over time - @HotSpell on ${Target.CleanName}"
   /call SpellSub "@HotSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-wood
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-woodParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-woodParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (${Me.State.NotEqual[STAND]}) /stand
   /call ChatOut 5 GROUP "Activating Spirit of Wood (22 minute reset)."
   /alt activate 185
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return


Sub Do-cure
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-cureParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-cureParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (${Me.State.NotEqual[STAND]}) /stand
   /call ChatOut 5 GROUP "Activating Radiant Cure (3 minute reset)."
   /alt activate 153
   /call Delay 50
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-nuke
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-nukeParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-nukeParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Nuking ${Target.CleanName}"
   /call SpellSub "@NukeSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-slow
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-slowParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-slowParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @SlowSpell on ${Target.CleanName}"
   /call SpellSub "@SlowSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-debuff
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-debuffParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-debuffParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @DebuffSpell on ${Target.CleanName}"
   /call SpellSub "@DebuffSpell"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-cobalt
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-cobaltParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-cobaltParamLoop
         }
      /target pc @ParamString
      }
   /call ChatOut 3 @MasterName "Shrinking ${Target.CleanName}"
   /cast item "cobalt bracer"
/return

Sub Do-camo
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-camoParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-camoParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (${Me.State.NotEqual[STAND]}) /stand
   /call ChatOut 5 GROUP "Activating Camo"
   /alt activate 80
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-dcharm
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-dcharmParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-dcharmParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /if (${Me.State.NotEqual[STAND]}) /stand
   /call ChatOut 5 GROUP "Dire Charming ${Target.CleanName}"
   /alt activate 46
   /call Delay 80
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-stuna
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-stunaParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-stunaParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @StunA on ${Target.CleanName}"
   /call SpellSub "@StunA"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-stunb
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-stunbParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-stunbParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @StunB on ${Target.CleanName}"
   /call SpellSub "@StunB"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-chainstun
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-chainstunParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-chainstunParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Chain Stunning."
   :StunLoop
   /if (!${Target.ID}) /return
   /if (@BreakOut==1) /return
   /call SpellSub "@StunA"
   /if (!${Target.ID}) /return
   /if (@BreakOut==1) /return
   /call SpellSub "@StunB"
   /if (!${Target.ID}) /return
   /if (@BreakOut==1) /return
   /call SpellSub "@StunC"
   /if (!${Target.ID}) /return
   /if (@BreakOut==1) /return
   /goto :StunLoop
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-ddstuna
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-ddstunaParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-ddstunaParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @DDStunA on ${Target.CleanName}"
   /call SpellSub "@DDStunA"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-ddstunb
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-ddstunbParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-ddstunbParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @DDStunB on ${Target.CleanName}"
   /call SpellSub "@DDStunB"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-mezlow
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-mezlowParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-mezlowParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @MezLow on ${Target.CleanName}"
   /call SpellSub "@MezLow"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-mezhigh
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-mezhighParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-mezhighParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @MezHigh on ${Target.CleanName}"
   /call SpellSub "@MezHigh"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-mezae
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-mezaeParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-mezaeParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Casting @MezAE on ${Target.CleanName}"
   /call SpellSub "@MezAE"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Do-autobehind
   /if (!${Defined[Param1]}) {
      /if (@AutoBehind==0) /call ChatOut 3 @MasterName "I won't position myself behind the mob."
      /if (@AutoBehind==1) /call ChatOut 3 @MasterName "I will position myself behind the mob."
      /return
      }
   /if (${String[@Param1].Equal[off]}) {
      /varset AutoBehind 0
      /call ChatOut 5 @MasterName "I will no longer position myself behind the mob."
      }
   /if (${String[@Param1].Equal[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[${Me.PctExp}]} percent exp.
/return

Sub Do-random
   /if (!${Defined[Param1]}) /return
   /if (!${Defined[Param2]}) {
      /random @Param1
      /return
      }
   /random @Param1 @Param2
/return

Sub Do-singing
   /if (!${Defined[Param1]}) {
      /call ChatOut 5 @MasterName "Singing=@Performing"
      /return
      }
   /if (@Param1==0) /varset Performing 0
   /if (@Param1==1) /varset Performing 1
   /if (${String[@Param1].Equal[off]}) /varset Performing 0
   /if (${String[@Param1].Equal[on]}) /varset Performing 1
   /call ChatOut 5 @MasterName "Singing=@Performing"
/return

Sub Do-sepic
   /if (${Me.State.NotEqual[STAND]}) /stand
   /if (!${Defined[Param1]}) { 
      /assist @MasterName
      } else /if (${String[@Param1].Equal[me]}) {
      /target pc @MasterName
      } else /if (${String[@Param1].Equal[yourself]} || ${String[@Param1].Equal[${Me.Name}]}) {
      /keypress F1
      /if (${Me.ID}!=${Target.ID}) /keypress F1
      } else {
   /declare ParamString local
   /declare ParamCount local
   /declare ParamInt local
   /varset ParamCount 2
   /varset ParamString "@Param1"
   :Do-sepicParamLoop
      /varset ParamInt ${Int[@ParamCount]}
      /if (${Defined[Param@ParamInt]}) {
         /varcat ParamString " @Param@ParamInt"
         /varadd ParamCount 1
         /goto :Do-sepicParamLoop
         }
      /target @ParamString
      }
   /call Delay 5
   /call ChatOut 5 @MasterName "Using Spear of Fate on ${Target.CleanName}"
   /stand
   /cast item "spear of fate"
   /if (@SitAfterCast==1) /varset SitTimer @DelayBeforeSit
/return

Sub Event_SkillUp(SkillUpText)
   /declare ParseSkillLevel local
   /declare ParseSkill local
   /declare PositionStart local
   /declare PositionEnd local
   /varset PositionStart ${Math.Calc[${String[@SkillUpText].Find[! (]}+3]}
   /varset PositionEnd ${String[@SkillUpText].Find[")"]}
   /varset ParseSkillLevel ${String[@SkillUpText].Mid[@PositionStart,${Math.Calc[@PositionEnd-@PositionStart]}]}
   /varset PositionStart ${Math.Calc[${String[@SkillUpText].Find[at]}+3]}
   /varset PositionEnd ${String[@SkillUpText].Find[!]}
   /varset ParseSkill ${String[@SkillUpText].Mid[@PositionStart,${Math.Calc[@PositionEnd-@PositionStart]}]}
   /call ChatOut 5 @MasterName "@ParseSkill increased - @ParseSkillLevel ..."
/return

Sub Do-cann
   /if (!${Defined[Param1]}) {
      /if (@DoCann==0) /call ChatOut 3 @MasterName "I won't cann for mana."
      /if (@DoCann==1) /call ChatOut 3 @MasterName "I will cann for mana."
      /return
      }
   /if (${String[@Param1].Equal[off]}) {
      /varset DoCann 0
      /call ChatOut 5 @MasterName "I will no longer cann for mana."
      }
   /if (${String[@Param1].Equal[on]}) {
      /varset DoCann 1
      /call ChatOut 5 @MasterName "I will now cann for mana."
      }
/return

Sub Do-yaulp
   /if (!${Defined[Param1]}) {
      /if (@DoYaulp==0) /call ChatOut 3 @MasterName "I won't yaulp for mana."
      /if (@DoYaulp==1) /call ChatOut 3 @MasterName "I will yaulp for mana."
      /return
      }
   /if (${String[@Param1].Equal[off]}) {
      /varset DoYaulp 0
      /call ChatOut 5 @MasterName "I will no longer yaulp for mana."
      }
   /if (${String[@Param1].Equal[on]}) {
      /varset DoYaulp 1
      /call ChatOut 5 @MasterName "I will now yaulp for mana."
      }
/return 
Last edited by Diggler on Fri Apr 23, 2004 11:05 pm, edited 13 times in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

advpath.inc

Post by Diggler » Fri Apr 09, 2004 3:33 am

Get advpath.inc here.

THIS IS NOW MANDATORY!!! USE IT IT'S GOOD!!!
Last edited by Diggler on Mon Apr 19, 2004 11:04 pm, edited 3 times in total.

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

Post by ml2517 » Fri Apr 09, 2004 7:12 am

Hate to say it but I think a bulk of your work is going to be the replacement of the /if with /newif's. :D

I'd say you are more like 70 percent done. :twisted:

I'm done with advpath.inc and will start testing it after Lax changes back to y,x,z style in the new parms.

bollox
orc pawn
orc pawn
Posts: 17
Joined: Tue Oct 28, 2003 2:14 pm

Post by bollox » Fri Apr 09, 2004 12:28 pm

Nice work! There are few changes that I'd like to propose over the course of several posts, the first one being Sub Do-heal in bothealer.inc.

As the code stands now, the master cannot request a heal to be cast on him when he is in combat or does not have himself targeted. We should change

Code: Select all

...
/newif ${Defined[Param1]}==FALSE {
   /assist @MasterName
   /call Delay 3
...
to

Code: Select all

...
/newif ${Defined[Param1]}==FALSE {
   /assist @MasterName
   /call Delay 3
   /newif ${Bool[${Target}]}==FALSE {
      /target pc @MasterName 
   } else /newif ${Target.Type}==NPC {
      /target pc @MasterName
   }
...
That way, you can ask the bot to heal you when you are either in combat or have not targeted yourself.
Last edited by bollox on Fri Apr 09, 2004 3:29 pm, edited 1 time in total.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

Post by Diggler » Fri Apr 09, 2004 1:54 pm

Well bah, it was working before I swapped about half the /ifs with /newifs, now it's quite broken. I'm working on it as fast as possible to get this up and running for the new system.

LordGiddion
a snow griffon
a snow griffon
Posts: 352
Joined: Sat Sep 13, 2003 6:12 pm
Contact:

Post by LordGiddion » Fri Apr 09, 2004 10:29 pm

Hi folks,
In case people don't rember me I helped Grimjack write a few chunks of code for Genbot (specifically you can blame me for the concept of personal.inc, the INI files and the command watchtarget and snt, probably some other stuff too)
I'm back to playing EQ and I'm working on a major rewrite of chunks of Genbot as well as the compatablity with MQ2Data. Just wanted to give a heads up and let people know I'm out here again. And no I have no intention of discouraging Diggler just letting you know we're doing the MQ2Data convertion in paralle and that I'm working on some code clean-up and new commands.

Diggler
> Oid
Posts: 120
Joined: Thu Oct 09, 2003 3:28 pm
Location: Lexington, KY

Post by Diggler » Fri Apr 09, 2004 10:38 pm

The help is much appreciated friend. The only thing that would discourage me would be not getting help with this festering shitpile of parms lol. My eyes are about to bleed from staring at this mofo too long, and btw I've cleaned it up quite a bit and I'll post newer versions tomorrow (whenever I wake up).

Spanky_Monkey
a ghoul
a ghoul
Posts: 103
Joined: Wed Feb 19, 2003 3:10 pm

Looking for feedback on this

Post by Spanky_Monkey » Sat Apr 10, 2004 9:16 am

Code: Select all

CMDS Core
afk -Will put the rest of the command as my afk message  ex. /t bot afk I'm watching TV
accept -will accept an invite to group
reject -will reject an invite to group
invite -will invite a player to group
follow -will follow you 
stop   -will stop following you
moveto -will move to a specified x,y location in the zone
sit    -will sit
stand  -will stand
camp   -will sit and camp
duck   -will duck
norelay -will stop forwarding tells to you
say     -will say the rest of tyhe command
tell    -will make me send a tell to someone
group   -will make me group say
cmds    -will list command menus
target  -will cause me to target something
notarget -will hit escape
assist   -will make me target you, then /ass
saytarget -will have me say what my target is
afollow   -will make me follow you (different method semi obsolete)  
itemcast  - will make me cast an item I have equipped ex. /t bot itemcast "breastplate of vengeful fury" (it is case)
lootup - will loot a corpse, must have been in combat or recieve the command /target blah blah then lootup     
anchor - will set a spot that I will run back to after eany fighting, used more for my rogue than anythign     
trade - will accept a tade from you       
yesres - will click yes on rez box     
consent - will consent whomever    
reportbuffs - will list my current buffs for you
petattack  - will make my pet attack 
petguard   - will make my pet guard 
petback  - will call pet off   
relay - will cause me to start forwarding my tells to you      
run - chjanges me from walk to run mode        
door - targets nearest door and presses u (to open or close it)       
listengroup - will cause me to listen to groupsay for your commands instead of tell
aona - will cause me to automatically attack when you tell me to assist someone...         
bona - will cause me to stay behing the mob when I am attacking       
petona - will cause me to send my pet into battle when you ask for assist     
verbosity - sets the level fo feedback you get from commands (expirimental)  
chatin - will tell you where I want my replys sent to can be a channel I would leave this as tells     
lootall - will loot a 50 radius of corpses     
listenchat - will cause me to listen commands in any chat channels we are in 
face - will cause me to face my target       
autoinv - will force me to drop what I am holding into autoinventory slot    
anchorradius - decides how close to anchor I need to be currently set to 6, else I keep trying to adjust
stay - makes me stay where I am        
eqfollow - uses eq followinstead of 3d follow routines   
pause - makes me stop reacting


CMDS Healer
autoheal - should I autoheal my group? yes or no           
settankheal - set percentage you want me to heal tanks (war/shd/pal) at  
setcasterheal - percentage you want me to heal all other classes at
setdefaultheal - default heal spell should never need this
heal - change complete heal spell, never need this         
togglehot - can make caster heals heal over time, I didn't like this but it is still there in case I find a use    
setpetheal - set percentage I heal pets   
autohealpets - yes or no, do I heal pets? 
watchtarget - makes me watch health of people outside group  
resetwatch - clears watchtarget list   
patchheal - yes or no, shell I patch heal?    
setpatchheal - change patch heal spell won't need the last 2


CMDS Combat
attack - attack my target     
noattack - stop attacking   
backstab - do I auto backstab? yes or no   
taunt - do I auto taunt? yes or no      
evade - do I do evade? yer or no      
slam - do I use the slam skill? yes or no       
bash - do I auto bash? yes or no       
getbehind  - do I get behind mobs when attacking? yes or no 
kick  - do I auto kick? yes or no      
flyingkick - do I flying kick? yes or no 
disarm  - do I auto disarm? yes or no    
traps -do I search for and disarm traps? yes or no     
beagg - am I aggressive, I mean if a mobs attacks me will I beat on it? yes or no     
puller - will make me into a puller     
autoengage - shall I attack when you tell me to assist or wait for attack command? yes or no
behind - will cause me to get behind something but won't keep me there...

CMDS Spell
sn - will cast my snare spell (duh!)             
mana - will reply with my mana percentage        
evac - would use my evac spell       
aftercastsit - will cause me to sit or tremain standing after cast.. on or off
loadlist will cause me to load a spellset    
         

CMDS Personal
fire - use my fire spell on target        
ice - use my ice spell on target        
root - cast root on target       
snare - cast snare on targey      
invis - cast my invis spell      
door - target and open nearest door       
mountup - mounts my giddy-up    
dismount - unmounts   
lure - uses my lure spell       
lev  - casts my levi spell      
hide  - hides (reports status)    
sneak  - sneaks (reports status)    
buff - cast predetermined buffs on someone       
groupbuff - cast predetermined group buffs on group 
regen - cast regen spell     
hot - cast heal over time on someone       
nuke - cast my nuke spell on something      
slow - will cats a slow spell      
debuff - casts my debuff spell (considering expanding to do several spells)    
petbuff  - casts predetermined buffs on pets  
reportlom - decides if I will tell you when I am low on mana, will also decide on if I yaulp for mana at below 90m  
setlompct - tell me when you want a mana warning (currently 30)  
dcharm - will dire charm a pet :P     
stuna  - usesingle stun spell 1    
stunb - use single stun 2     
chainstun - Cast stuns over and over 
ddstuna - use my direct damage stun a  
ddstunb - use my direct damage stun b   
mezlow  = causes you to mez mobs when low health so they don't gate    
mezhigh  - causes you to mez mobs at a higher percentage  
mezae - will cast an AE mez     
autobehind - decides if I am behind you when I follow 
exp - tells you my current exp percentage       
random - makes me roll a random    
singing - should I sing bard spells and twist?   
sepic - cast shaman epic     
      
Some of this is wrong, but I don't use it all, I just dumped the command arrays and did best guess, corrections appreciated.
Any changes or thought would be appreciated... this really needed to be done for users IMHO.

Spanky

LordGiddion
a snow griffon
a snow griffon
Posts: 352
Joined: Sat Sep 13, 2003 6:12 pm
Contact:

Post by LordGiddion » Sat Apr 10, 2004 9:30 am

THank you Spanky, I was thinking to do this asa part of my release and you've done part of my work for me. The only change I would suggest and is to make it as an html table it just seems that would make it easier to read.

JimJohnson
a grimling bloodguard
a grimling bloodguard
Posts: 1299
Joined: Sat Oct 11, 2003 6:00 am

Post by JimJohnson » Sat Apr 10, 2004 3:16 pm

Good to see you coming back LordGiddion, now just need GJ to come back =)