Cleric.mac
Code: Select all
#define SelfBuffSpell "Blessed Armor of the Risen"
|/tell botname cmds
|This command will send a tell to the master with a list of commands.
|
|Boredom Cleric 09/25/03
|http://macroquest2.com/phpBB2/viewtopic.php?t=2754
|
|Grimjack wrote it first
#turbo 75
#define LOUDMOUTH on
#define DEBUG 1==0
#event RootOff "Your Immobilize spell has worn off."
#Event Zone "LOADING, PLEASE WAIT..."
#Event AttackedHit " YOU for "
#Event AttackedMiss " YOU, but "
#define MasterName v50
#define CmdArrayNum v51
#define CmdArraySize v52
#define AskedHelp v53 ||||||||||||||
#define SitAfterCast v54
#define CmdList v55
#define Listing v56
#define Counter v57
#define MasterSit v58 ||||||||||||||||
#define AttackConfirm v59
#define CampOut v60
#define AttackedTimer t1
#define HelpTimer t2
#define ROTTimer t3
#chat tell
#chat group
#include spells.inc
#include combat.inc
#include bscmds.inc
#include clericspells.inc
#include healer.inc
#include rotation.inc
Sub Main
/varset CmdArrayNum 0
/call bscmdsinit
/call clericspellsinit
/call healerinit
/call rotationinit
||||||||| others
/varset a(1,$CmdArrayNum) mem
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) spells
/varadd CmdArrayNum 1
/if n $strlen("$MasterName")<=0 /varset MasterName NAME
/if n $strlen("$AskedHelp")<=0 /varset AskedHelp 0
/if n $p0==0 {
/varset SitAfterCast 0
/varset MasterSit 0
} else {
/varset MasterSit 1
/varset SitAfterCast 0
}
/if n $p0==2 /varset {
/varset CampOut 1
} else {
/varset CampOut 0
}
/call CountArraySize 1
/varset CmdArraySize $int($return)
/echo $CmdArraySize
/varset CmdList " "
/for CmdArrayNum 0 to $CmdArraySize
/varset CmdList "$CmdList $a(1,$CmdArrayNum),"
/next CmdArrayNum
:MainLoop
/doevents
||||||||||||| Healer ||||||||||||||||||||
/call CheckGroup
/call CheckWatch
||||||||||||| Combat ||||||||||||||||||||
/call Combatcheck
/if $Combatstatus=="1" /call RangeSub
/doevents
||||||||||||| ROTATION |||||||||||||||||||||
/call CheckRot
|***
/if n $char(buff,"SelfBuffSpell")==0 {
/call SpellSub "SelfBuffSpell"
}
*****|
/if n $HelpTimer<=0 {
/if $AskedHelp==1 {
/if DEBUG /echo pressing esc and reseting ask for help
/if $target(type)==NPC /press esc
/varset AskedHelp 0
}
}
/if n $AttackedTimer<=0 {
/if $MasterSit!=$SitAfterCast {
/varset SitAfterCast $MasterSit
/if $MasterSit==1 {
/if $char(state)!=SIT /sit on
}
/if DEBUG /echo sitaftercast is now $SitAfterCast
}
}
/goto :MainLoop
/return
sub CountArraySize
/varset l0 0
:CountArrayLoop
/if n $strlen("$a($p0,$l0)")<=0 {
/goto :CountArrayEnd
}
/varadd l0 1
/goto :CountArrayLoop
:CountArrayEnd
/varsub l0 1
/return $l0
Sub Event_Chat
/if $p0==tell {
/varset CmdArrayNum 0
|||||||||||||| HARDCODED |||||||||||||||||||||
/if "NAME"=="$p1" {
/varset MasterName $p1
:ArrayTime
/if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" {
/call Do-$a(1,$CmdArrayNum) $p2
/return
}
/varadd CmdArrayNum 1
/if n $CmdArrayNum>=$CmdArraySize /return
/goto :ArrayTime
}
/if "NAME"=="$p1" {
/varset MasterName $p1
:ArrayTime
/if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" {
/call Do-$a(1,$CmdArrayNum) $p2
/return
}
/varadd CmdArrayNum 1
/if n $CmdArrayNum>=$CmdArraySize /return
/goto :ArrayTime
}
/if "NAME"=="$p1" {
/varset MasterName $p1
:ArrayTime
/if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" {
/call Do-$a(1,$CmdArrayNum) $p2
/return
}
/varadd CmdArrayNum 1
/if n $CmdArrayNum>=$CmdArraySize /return
/goto :ArrayTime
}
/if "NAME"=="$p1" {
/varset MasterName $p1
:ArrayTime
/if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" {
/call Do-$a(1,$CmdArrayNum) $p2
/return
}
/varadd CmdArrayNum 1
/if n $CmdArrayNum>=$CmdArraySize /return
/goto :ArrayTime
}
/if "NAME"=="$p1" {
/varset MasterName $p1
:ArrayTime
/if "$arg(1,"$p2")"=="$a(1,$CmdArrayNum)" {
/call Do-$a(1,$CmdArrayNum) $p2
/return
}
/varadd CmdArrayNum 1
/if n $CmdArrayNum>=$CmdArraySize /return
/goto :ArrayTime
}
/if $gm!=TRUE {
/tell $MasterName $p1 told me: $p2
} $p2
}
/if $lcase("$p1")==$PrevHealer {
/if n $strlen("$p2")<=0 /return
/echo $p1 and $PrevHealer match
/if n $RotOn==1 {
/varset CmdArrayNum 3
/varadd CmdArrayNum $NumUnique
/varset LoopNum 3
:RotCheckLoop
/if n $strlen("$p2")<$strlen("$a(3,$LoopNum)") /return
/if "$a(3,$LoopNum)"!~"$p2" /return
/varadd LoopNum 1
/if n $LoopNum==$CmdArrayNum /goto :ItsGood
/goto :RotCheckLoop
:ItsGood
/echo that's my que
/call do-setrot filler yours
}
}
/return
Sub Event_RootOff
/tell $MasterName Root has worn off.
/return
Sub Event_Zone
/call Do-clearw
/if $CampOut==1 {
/delay 500
/if $char(state)!=SIT /sit on
/camp desktop
/delay 400
}
/return
Sub Do-mem
/if n $strlen("$p2")<=0 {
/tell $MasterName mem gem# spell name
/return
}
/echo should be meming
/memspell $p1 $p2
/return
Sub Do-spells
for l1 1 to 8
/varset l2 "$l2 gem $l1: $char(gem,$l1), "
/next l1
/tell $MasterName $l2
/return
|||| Asuming Master is boted too, this tells master to attack what's on the cleric
|||| If not, it gives Master a head's up that clericbot is being attacked
Sub Event_AttackedHit
/if n $strlen("$p0")<25 /return
/if "$left(12,"$p0")"=="[MacroQuest]" /return
/varset AttackConfirm 0
/if "$right(17,"$p0")"=="points of damage." /varset AttackConfirm 1
/if "$right(16,"$p0")"=="point of damage." /varset AttackConfirm 1
/if n $AttackConfirm!=1 /return
/if DEBUG /echo going to attack
/call Attacked "$p0"
/return
Sub Event_AttackedMiss
/if n $strlen("$p0")<25 /return
/if "$left(12,"$p0")"=="[MacroQuest]" /return
/varset AttackConfirm 0
/if "$right(14,"$p0")"=="but YOU block!" /varset AttackConfirm 1
/if "$right(14,"$p0")"=="but YOU dodge!" /varset AttackConfirm 1
/if "$right(16,"$p0")"=="but YOU riposte!" /varset AttackConfirm 1
/if "$right(16,"$p0")"=="YOU, but misses!" /varset AttackConfirm 1
/if n $AttackConfirm!=1 /return
/if DEBUG /echo going to attack
/call Attacked "$p0"
/return
Sub Attacked
/varset AttackedTimer 30s
/varset SitAfterCast 0
/if $AskedHelp==1 /return
/if DEBUG /echo help hasn't been asked for. target is a $target(type)
/if $target(type)==NPC {
/if DEBUG /echo checking lengths $strlen("$target(name,clean)") and $strlen("$p0")
/if n $strlen("$target(name,clean)")>=$strlen("$p0") /return
/if DEBUG /echo comparing $target(name,clean) with $p0
/if "$target(name,clean)"!="$left($strlen("$target(name,clean)"),"$p0")" /return
/if DEBUG /echo everything confirmed, turning on attack, and setting Help stuff
/tell $MasterName attack
/varset AskedHelp 1
/varset HelpTimer 30s
}
/returnbscmds.inc
Code: Select all
| bscmds.inc
| basic commands
#event FollowOff "You are no longer auto-following"
#define MyXLoc v89
#define MyYLoc v90
#define countdown v91
Sub bscmdsinit
/varset a(1,$CmdArrayNum) afk
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) accept
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) reject
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) invite
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) mana
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) follow
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) stop
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) evac
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) moveto
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) sit
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) stand
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) sn
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) camp
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) duck
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) run
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) say
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) tell
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) group
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) cmds
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) target
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) notarget
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) assist
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) saytarget
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) attack
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) noattack
/varadd CmdArrayNum 1
/return
Sub Target
|||||||||||||||||| use "myself" for bot to target itself |||||||||||||||||
/if $p1=="me" {
/target pc $MasterName
/return
}
/if $p1=="id" {
/target id $p2
/return
}
/if $p1=="pet" {
/target pet $MasterName
/return
}
/if n $strlen("$p1")<=0 {
/assist $MasterName
/delay 3
} else /if n $strlen("$p2")<=0 {
/target "$p1"
} else /if n $strlen("$p3")<=0 {
/target "$p1 $p2"
} else /if n $strlen("$p4)<=0 {
/target "$p1 $p2 $p3"
} else /target "$p1 $p2 $p3 $p4"
/return
Sub Do-target
/call Target $p0 $p1 $p2 $p3 $p4
/tell $MasterName my target is %t
/return
Sub Do-saytarget
/tell $MasterName my target is %t
/return
Sub Do-attack
/sit off
/call Target $p0 $p1 $p2 $p3 $p4
/tell $MasterName Attacking %t
/attack on
/return
Sub Do-noattack
/attack off
/return
Sub Do-sit
/sit off
/sit
/press right
/return
Sub Do-stand
/sit off
/return
Sub Do-notarget
/press esc
/press esc
/press esc
/return
Sub Do-sn
/assist $MasterName
/delay 5
/if n $strlen("$p1")<=0 {
/return
} else /if n $strlen("$p2")<=0 {
/tell "$MasterName" Casting $p1 on %T
/call SpellSub $p1
} else /if n $strlen("$p3")<=0 {
/tell "$MasterName" Casting $p1 $p2 on %T
/call SpellSub "$p1 $p2"
} else /if n $strlen("$p4)<=0 {
/tell "$MasterName" Casting $p1 $p2 $p3 on %T
/call SpellSub "$p1 $p2 $p3"
} else {
/tell "$MasterName" Casting $p1 $p2 $p3 $p4 on %T
/call SpellSub "$p1 $p2 $p3 $p4"
}
/tell $MasterName done
/return
Sub Do-afk
/if "$p1"=="Message:" /return
/varset CmdArrayNum 0
/if n $strlen("$p1")<=0 {
/afk
} else /if n $strlen("$p2")<=0 {
/afk $p1
} else /if n $strlen("$p3")<=0 {
/afk $p1 $p2
} else /if n $strlen("$p4")<=0 {
/afk $p1 $p2 $p3
} else /if n $strlen("$p5")<=0 {
/afk $p1 $p2 $p3 $p4
} else /if n $strlen("$p6")<=0 {
/afk $p1 $p2 $p3 $p4 $p5
} else /if n $strlen("$p7")<=0 {
/afk $p1 $p2 $p3 $p4 $p5 $p6
} else /if n $strlen("$p8")<=0 {
/afk $p1 $p2 $p3 $p4 $p5 $p6 $p7
} else /if n $strlen("$p9")<=0 {
/afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
} else {
/afk $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
}
/return
Sub Do-say
/varset CmdArrayNum 0
/if n $strlen("$p1")<=0 {
/return
} else /if n $strlen("$p2")<=0 {
/say $p1
} else /if n $strlen("$p3")<=0 {
/say $p1 $p2
} else /if n $strlen("$p4")<=0 {
/say $p1 $p2 $p3
} else /if n $strlen("$p5")<=0 {
/say $p1 $p2 $p3 $p4
} else /if n $strlen("$p6")<=0 {
/say $p1 $p2 $p3 $p4 $p5
} else /if n $strlen("$p7")<=0 {
/say $p1 $p2 $p3 $p4 $p5 $p6
} else /if n $strlen("$p8")<=0 {
/say $p1 $p2 $p3 $p4 $p5 $p6 $p7
} else /if n $strlen("$p9")<=0 {
/say $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
} else /if n $strlen("$p10")<=0 {
} else {
/say $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
}
/return
Sub Do-group
/varset CmdArrayNum 0
/if n $strlen("$p1")<=0 {
/return
} else /if n $strlen("$p2")<=0 {
/g $p1
} else /if n $strlen("$p3")<=0 {
/g $p1 $p2
} else /if n $strlen("$p4")<=0 {
/g $p1 $p2 $p3
} else /if n $strlen("$p5")<=0 {
/g $p1 $p2 $p3 $p4
} else /if n $strlen("$p6")<=0 {
/g $p1 $p2 $p3 $p4 $p5
} else /if n $strlen("$p7")<=0 {
/g $p1 $p2 $p3 $p4 $p5 $p6
} else /if n $strlen("$p8")<=0 {
/g $p1 $p2 $p3 $p4 $p5 $p6 $p7
} else /if n $strlen("$p9")<=0 {
/g $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
} else /if n $strlen("$p10")<=0 {
} else {
/g "$p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
}
/return
Sub Do-tell
/varset CmdArrayNum 0
/if n $strlen("$p1")<=0 {
/return
} else /if n $strlen("$p2")<=0 {
/return
} else /if n $strlen("$p3")<=0 {
/tell $p1 $p2
} else /if n $strlen("$p4")<=0 {
/t $p1 $p2 $p3
} else /if n $strlen("$p5")<=0 {
/t $p1 $p2 $p3 $p4
} else /if n $strlen("$p6")<=0 {
/t $p1 $p2 $p3 $p4 $p5
} else /if n $strlen("$p7")<=0 {
/t $p1 $p2 $p3 $p4 $p5 $p6
} else /if n $strlen("$p8")<=0 {
/t $p1 $p2 $p3 $p4 $p5 $p6 $p7
} else /if n $strlen("$p9")<=0 {
/t $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8
} else {
/t $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9
}
/return
Sub Do-accept
/press esc
/press esc
/invite
/return
Sub Do-reject
/press esc
/press esc
/disband
/return
Sub Do-invite
/call Target $p0 $p1 $p2 $p3 $p4
/tell $MasterName Inviting %t
/invite
/return
Sub Do-mana
/tell $MasterName $char(mana,pct)m
/return
Sub Do-follow
/target pc $MasterName
/stand
/face
/follow
/tell $MasterName Autofollow on %t.
/return
Sub Do-stop
/tell $MasterName Stoping.
/sendkey up up
/varset Fail 1
/press d
/press d
/press esc
/press esc
/press esc
/press right
/return
Sub Do-evac
/tell $MasterName Moving to you and casting Evac!
/call Do-moveto evac $MasterName
/delay 2s
/call SpellSub "Gate"
/return
Sub Do-sit
/stand
/press right
/sit on
/return
Sub Do-stand
/stand
/return
Sub Do-camp
/tell $MasterName Camping out.
/stand
/sit
/camp
/return
Sub Do-duck
/press d
/delay 10
/doevents
/doevents
/press d
/return
Sub Do-cmds
/tell "$MasterName" Commands: $CmdList
/return
Sub Do-moveto
/sit off
/varset countdown 0
/varset MyXLoc $char(x)
/varset MyYLoc $char(y)
/call Target $p0 $p1 $p2 $p3 $p4
/tell $MasterName Moving to %t.
:gotopointloop
/doevents
/if $target()==FALSE {
/sendkey up up
/return
}
/face fast nopredict
/if n $target(distance)>15 /sendkey down up
/if n $target(distance)<=15 {
/sendkey up up
/return
}
/face fast nopredict
/if n $countdown>=3 {
/call Detectobst
/varset countdown 0
}
/varadd countdown 1
/doevents
/goto :gotopointloop
}
/sendkey up up
/face
/return
Sub Detectobst
/if n $MyXLoc==$char(x) /if $MyYLoc==$char(y) /call Hitobst 5
/varset MyXLoc $char(x)
/varset MyYLoc $char(y)
/return
sub Hitobst
/sendkey up up
/sendkey down down
/if n $rand(99)>50 {
/delay 2s
/sendkey up down
/sendkey down Right
/delay $p0
/sendkey up Right
/sendkey down up
/delay 2s
/sendkey up up
} else {
/delay 2s
/sendkey up down
/sendkey down left
/delay $p0
/sendkey up left
/sendkey down up
/delay 2s
/sendkey up up
}
/sendkey up down
/sendkey up Right
/sendkey up Left
/sendkey down up
/return
Sub Event_FollowOff
/press esc
/press esc
/delay 5
/tell $MasterName Auto Follow Off.
/returnspells.inc
Code: Select all
|**
Spells.inc by boredom
Grimjack wrote it first
Must have MasterName #defined to a variable already
copy and paste this if you wish to see lots of messages related to casting
#define LOUDMOUTH on
**|
#define Fail v94
#define DoAgain v95
#define StartCast v96
#define SpellSlot v97
#define SpellName v98
#define CastTime v99
#define CTimer t0
#event Collapse "Your gate is too unstable, and collapses."
#event NoLOS "You cannot see your target."
#Event CastStart "You begin casting"
#Event CastFizzle "Your spell fizzles!"
#Event CastInterrupt "Your spell is interrupted."
#Event CastNoMana "Insufficient Mana to cast this spell"
#Event CastTooFar "Your target is out of range, get closer!"
#Event Recovered "You haven't recovered yet..."
#Event CastResist "Your target resisted "
#Event Distracted "You are too distracted to cast a spell now!"
#Event NoTarget "You must first select a target for this spell!"
#Event Sitting "You must be standing to cast a spell."
#Event NoMem "You do not seem to have that spell memorized."
#Event Stunned "You can't cast spells while stunned!"
Sub Event_CastStart
/varset StartCast 1
/return
Sub Event_CastFizzle
/delay 2
/varset DoAgain 1
/return
Sub Event_CastInterrupt
/if $char(state)==DUCK {
/varset Fail 1
/return
}
/delay 2
/varset DoAgain 1
/return
Sub Event_Sitting
/stand
/delay 2
/varset DoAgain 1
/return
Sub Event_CastTooFar
/varset Fail 1
/if LOUDMOUTH==on /tell $MasterName Too far away.
/varset CTimer 0
/return
Sub Event_Distracted
/if LOUDMOUTH==on /tell $MasterName I can't cast. I'm too distracted.
/varset Fail 1
/varset CTimer 0
/return
Sub Event_NoTarget
/varset Fail 1
/if LOUDMOUTH==on /tell $MasterName I have no target to cast on.
/varset CTimer 0
/return
Sub Event_NoMem
/if LOUDMOUTH==on /tell $MasterName That spell is not memed.
/varset Fail 1
/varset CTimer 0
/return
Sub Event_CastNoMana
/if LOUDMOUTH==on /tell $MasterName OOM.
/varset Fail 1
/return
Sub Event_Stunned
/if LOUDMOUTH==on /tell $MasterName Stunned waiting 3 seconds to try again.
/delay 3s
/varset DoAgain 1
/return
Sub Event_Recovered
/delay 2s
/varset DoAgain 1
/return
Sub Event_CastResist
| /if LOUDMOUTH==on /tell $MasterName Resisted. Trying again.
| /varset DoAgain 1
/return
Sub Event_Collapse
/varset DoAgain 1
/return
Sub Event_NoLOS
/if LOUDMOUTH==on /tell $MasterName I can't see my target.
/varset Fail 1
/varset CTimer 0
/return
Sub SpellSub
/if $char(iscasting)==TRUE {
/tell $MasterName What, you want me to cast 2 spells at once?
/return
}
/if "$p0"=="item" {
/if n $spell(item,"$p1",casttime)<0 {
/tell $MasterName What item was that again?
/return
}
/call ItemCastingSub "$p1"
/return
}
/if n $char(gem,"$p0")<1 {
/if n $char(gem,"$p0")==-2 {
/if LOUDMOUTH==on /tell $MasterName not ready yet
} else {
/if LOUDMOUTH==on /tell $MasterName not memed
}
}
/if n $char(gem,"$p0")>0 {
/call SpellCastingSub "$p0"
}
/return
Sub ItemCastingSub
/sendkey up up
/if n Combatstatus==1 /delay 3s
/varset Fail 0
/varset SpellName "$p0"
/if $char(state)!=STAND /stand
/varset CastTime "$spell(item,"$p0",casttime)
:ItemCast
/doevents
/varset DoAgain 0
/varset StartCast 0
/cast item "$SpellName"
/call WaitForStart
:ItemLoop
/doevents
/if n $DoAgain==1 /goto :ItemCast
/if n $Fail==1 /goto :ItemEnd
/doevents
/if n $DoAgain==1 /goto :ItemCast
/if n $Fail==1 /goto :ItemEnd
/if n $CTimer>0 /goto :ItemLoop
/delay 2
/doevents
/if n $DoAgain==1 /goto :ItemCast
:ItemEnd
/press esc
/if n $SitAfterCast==1 {
/if $char(state)!=SIT {
/sit on
}
}
/return
Sub SpellCastingSub
/sendkey up up
/if n Combatstatus==1 /delay 3s
/varset Fail 0
/varset SpellName "$p0"
/varset SpellSlot "$char(gem,"$SpellName")"
/if n $spell("$SpellName",mana)>$char(mana,cur) {
/return
}
/if $char(state)!=STAND /stand
/varset CastTime "$spell("$SpellName",mycasttime)"
/varcalc CastTime $CastTime*1.1
:BeginCast
/varset DoAgain 0
/varset StartCast 0
/cast $SpellSlot
/call WaitForStart
:TimerLoop
/doevents
/if n $DoAgain==1 /goto :BeginCast
/if n $Fail==1 /goto :EndCast
/doevents
/if n $DoAgain==1 /goto :BeginCast
/if n $Fail==1 /goto :EndCast
/if n $l0!=1 {
/g casting $SpellName on %t
/varset l0 1
}
/if n $CTimer>0 /goto :TimerLoop
/delay 2
/doevents
/if n $DoAgain==1 /goto :BeginCast
:EndCast
/press esc
/if n $SitAfterCast==1 {
/if $char(state)!=SIT {
/sit on
}
}
/return
Sub WaitForStart
/varset CTimer 3s
:StartLoop
/doevents
/if n $CTimer<=0 /varset Fail 1
/if n $Fail==1 /return
/if n $DoAgain==1 /return
/if n $StartCast==0 {
/goto :StartLoop
}
/varset CTimer "$CastTime"s
/returnhealer.inc
Code: Select all
|healer.inc
#define IsHealer v85
#define HealAt v86
#define GroupMember v87
#define GroupMax v88
Sub healerinit
/varset a(1,$CmdArrayNum) autoheal
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) healat
/varadd CmdArrayNum 1
/if n $strlen("$IsHealer")<=0 /varset IsHealer 0
/if n $strlen("$HealAt")<=0 /varset HealAt 40
/return
Sub CheckHealth
/if n $spawn($p0,hp,pct)<=$HealAt {
/if n $spawn($p0,hp,cur)>0 {
/if "$spawn($p0,class)"=="Warrior" /call Tankheal $p0
/if "$spawn($p0,class)"=="Paladin" /call Tankheal $p0
/if "$spawn($p0,class)"=="Shadow Knight" /call Tankheal $p0
/if "$spawn($p0,class)"=="Monk" /call Tankheal $p0
/if "$spawn($p0,class)"=="Ranger" /call Tankheal $p0
/if "$spawn($p0,class)"=="Rogue" /call Tankheal $p0
/if "$spawn($p0,class)"=="Beastlord" /call TankHeal $p0
}
}
/if n $spawn($p0,hp,pct)<41 {
/if n $spawn($p0,hp,cur)>0 /call CasterHeal $p0
}
/return
Sub CheckGroup
/if n $IsHealer==0 /return
/varset GroupMember 0
/varset GroupMax $group(count)-1
:GroupLoop
/doevents
/call CheckHealth $group($GroupMember)
/if $spawn($group($GroupMember),pet)!=0 /call CheckHealth $spawn($group($GroupMember),pet)
/if n $GroupMember>=$GroupMax /return
/varadd GroupMember 1
/doevents
/goto :GroupLoop
/return
Sub CheckWatch
/if n $a(2,0)==0 /return
/if n $IsHealer==0 /return
/varset GroupMember 1
:WatchLoop
/doevents
/call CheckHealth $a(2,$GroupMember)
/if n $GroupMember>=$a(2,0) /return
/varadd GroupMember 1
/doevents
/goto :WatchLoop
/return
Sub Do-autoheal
/if n $strlen("$p1")<=0 {
/tell $MasterName Autoheal=$IsHealer
/return
}
/if $p1=="off" /varset IsHealer 0
/if $p1=="on" /varset IsHealer 1
/tell $MasterName Autoheal=$IsHealer
/return
Sub Do-healat
/if n $strlen("$p1")<=0 {
/tell $MasterName Auto Healing at $HealAt
/return
}
/if n $p1>=0 {
/if n $p1<=100 {
/varset HealAt $p1
/tell $MasterName Auto Healing at $HealAt
}
}
/return
Sub Tankheal
/if n $spawn($p0,distance)>$spell("Complete Healing",range) /return
/target id $p0
/if n $target(id)<=0 /return
/if $target(type)==CORPSE /return
/call SpellSub "CHSpell"
/delay 15
/return
Sub Casterheal
/if n $spawn($p0,distance)>$spell("Supernal Remedy",range) /return
/target id $p0
/if n $target(id)<=0 /return
/if $target(type)==CORPSE /return
/call SpellSub "HealSpell"
/delay 5
/delay 20
/return clericspells.inc
Code: Select all
| clericspells.inc
|customized values
#define CHSpell "Complete Healing"
#define HealSpell "Supernal Remedy"
#define HOTSpell "Supernal Elixir"
#define HPSpell "Virtue"
#define DDSpell "Condemnation"
#define SymbolSpell "STUFF"
#define ACSpell "STUFF"
#define RootSpell "Greater Immobilize"
#define PacSpell "Pacification"
#define RezSpell "Water Sprinkler of Nem Ankh"
Sub clericspellsinit
/varset a(1,$CmdArrayNum) hp
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) heal
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) ch
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) hot
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) dd
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) symbol
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) ac
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) root
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) pac
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) rez
/varadd CmdArrayNum 1
/return
Sub Do-rez
/if "$equip(primary,name)"=="RezSpell" {
/call SpellSub item "RezSpell"
/return
}
/tell $MasterName epic not equipt
/return
Sub Do-pac
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "PacSpell"
/return
Sub Do-hp
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "HPSpell"
/return
Sub Do-heal
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "HealSpell"
/return
Sub Do-ch
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "CHSpell"
/return
Sub Do-hot
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "HOTSpell"
/return
Sub Do-dd
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "DDSpell"
/return
Sub Do-symbol
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "DDSpell"
/return
Sub Do-ac
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "ACSpell"
/return
Sub Do-root
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/call SpellSub "RootSpell"
/returncombat.inc
Code: Select all
| combat.inc
#define Combatstatus v92
#define EnrageVar v93
#define CombatTimer t39
#Event Enraged "has become ENRAGED"
#Event Offrage "is no longer enraged"
#define RangeMin 8
#define RangeMax 11
#define FastRange 14
Sub Combatcheck
/if $EnrageVar=="1" {
/if $target()=="TRUE" {
/return
} else {
/varset EnrageVar 0
/varset Combatstatus 0
}
}
/if $target()=="FALSE" {
/varset Combatstatus 0
/if $combat=="TRUE" {
/attack off
}
/return
}
/if $target()=="TRUE" {
/if $combat=="TRUE" {
/varset Combatstatus 1
/varset CombatTimer .5s
/return
}
}
/if n $CombatTimer>0 /return
/varset Combatstatus 0
/return
Sub Rangesub
/face fast nopredict
/if n $target(distance)>=FastRange /call Fastmove
/if n $target(distance)>RangeMax {
/press up
}
/if n $target(distance)<RangeMin {
/press down
}
/return
Sub Fastmove
:fastmoveloop
/doevents
/if $target()=="FALSE" {
/varset Combatstatus 0
/sendkey up up
/if $combat=="TRUE" {
/attack off
/return
}
}
/face fast nopredict
/if n $target(distance)>FastRange {
/sendkey down up
}
/if n $target(distance)<=FastRange {
/if $Combatstatus=="1" {
/if $EnrageVar=="0" {
}
}
/sendkey up up
/return
}
/goto :fastmoveloop
/return
Sub Event_Enraged
/if $target()=="TRUE" {
/if n $Combatstatus==1 {
/varset EnrageVar 1
/attack off
}
/varset EnrageVar 1
}
/return
Sub Event_Offrage
/if $target()=="TRUE" {
/if n $Combatstatus==1 {
/varset EnrageVar 0
/attack
}
/varset EnrageVar 0
}
/return rotation.inc
Code: Select all
| rotation.inc
#define WatchNum a(3,0)
#define PrevHealer a(3,1)
#define RotType a(3,2)
#define UniqueOne a(3,3)
#define UniqueTwo a(3,4)
#define UniqueThree a(3,5)
#define UniqueFour a(3,6)
#define UniqueFive a(3,7)
#define UniqueSix a(3,8)
#define NumUnique a(3,9)
#define RotOn a(3,10)
#define MyNextHeal a(3,11)
#define ReportString a(3,12)
Sub rotationinit
/varset a(1,$CmdArrayNum) addw
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) clearw
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) listw
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) defrot
/varadd CmdArrayNum 1
/varset a(1,$CmdArrayNum) setrot
/varadd CmdArrayNum 1
/if n $strlen("$a(2,0)")<=0 /varset a(2,0) 0
/return
Sub CheckRot
/if n RotOn==1 {
/if "$RotType"=="time" /call TimeRot
/if "$RotType"=="pct" /call PctRot
}
/return
Sub TimeRot
/echo in timerot function
:TimeLoop
/doevents
/if n $MyNextHeal>0 {
/varset ROTTimer "$HealAt"
:TimeDelayLoop
/doevents
/if n $RotOn!=1 /return
/if "$RotType"!="time" /return
/if n $ROTTimer>0 /goto :TimeDelayLoop
/call TankHeal $a(2,$WatchNum)
/varset MyNextHeal 0
/echo Heals left $MyNextHeal
}
/if n $RotOn!=1 /return
/if "$RotType"!="time" /return
/goto :TimeLoop
/return
Sub PctRot
/echo in pctrot function
:PctLoop
/doevents
/if n $MyNextHeal>0 {
/varset ROTTimer 110
/echo waiting 10 seconds then doing my thing
:PctDelayLoop
/doevents
/if n $RotOn!=1 /return
/if "$RotType"!="pct" /return
/if n $ROTTimer>0 /goto :PctDelayLoop
/echo done waiting.
:InternalLoop
/doevents
/if n $RotOn!=1 /return
/if "$RotType"!="pct" /return
/if n $spawn($a(2,$WatchNum),hp,pct)<=$HealAt {
/call TankHeal $a(2,$WatchNum)
/varsub MyNextHeal 1
/echo Heals left $MyNextHeal
}
/if n $MyNextHeal>0 /goto :InternalLoop
}
/if n $RotOn!=1 /return
/if "$RotType"!="pct" /return
/goto :PctLoop
/return
Sub Do-defrot
/if n $strlen($p1)<=0 {
/if n $strlen($WatchNum)<=0 {
/goto :defrotUsage
}
/goto :EchoIt
}
/if n $strlen($p4)<=0 /goto :defrotUsage
/if n $p1>$a(2,0) /goto :defrotUsage
/if $lcase("$p3")=="time" /varset RotType "time"
/if $lcase("$p3")=="pct" /varset RotType "pct"
/if n $strlen($RotType)<=0 /goto :defrotUsage
/varset LoopNum 0
/varset Counter 1
:VarsLoop
/if n $strlen("$p$Counter")<=0 /goto :BeforeEcho
/if n $Counter==10 /goto :BeforeEcho
/if n $Counter==3 {
/varset LoopNum $Counter
/varadd Counter 1
/varset Counter $int($Counter)
/goto :VarsLoop
}
/varset a(3,$LoopNum) $p$Counter
/if n $Counter==2 /varset PrevHealer $lcase("$p$Counter")
/varset LoopNum $Counter
/varadd Counter 1
/varset Counter $int($Counter)
/goto :VarsLoop
:BeforeEcho
/varset Counter 4
/varset NumUnique 0
:CountUnique
/if n $strlen("$p$Counter")<=0 /goto :EchoIt
/echo counting $NumUnique uniques length of $p$Counter is $strlen($p$Counter)
/varadd NumUnique 1
/varset NumUnique $int($NumUnique)
/varadd Counter 1
/varset Counter $int($Counter)
/goto :CountUnique
:EchoIt
/tell $MasterName rot on $spawn($a(2,$WatchNum),name), previous healer is $PrevHealer, $RotType based, interval $HealAt, $NumUnique words are: $UniqueOne, $UniqueTwo, $UniqueThree, $UniqueFour, $UniqueFive, $UniqueSix
/return
:defrotUsage
/tell $MasterName defrot watch# prevhealer type uniqueword1[...uniqueword6]
/return
Sub Do-setrot
/if n $strlen("$p1")<=0 {
/if n $RotOn==1 {
/varset ReportString "ROT is on, "
} else {
/varset ReportString "ROT is off, "
}
/if n $MyNextHeal>0 {
/varset ReportString "$ReportString next $MyNextHeal are mine"
} else {
/varset ReportString "$ReportString next heal is not mine"
}
/tell $MasterName $ReportString
/echo roton: $RotOn mynextheal: $MyNextHeal
/return
}
/if $lcase("$p1")=="on" {
/if n $strlen("$WatchNum")>=1 {
/varset RotOn 1
/return
}
}
/if $lcase("$p1")=="off" {
/varset RotOn 0
/return
}
/if $lcase("$p1")=="mine" {
/varset MyNextHeal 0
/echo roton: $RotOn mynextheal: $MyNextHeal
/return
}
/if $lcase("$p1")=="yours" {
/if n $strlen("$p2")<=0 {
/varset MyNextHeal 1
} else {
/varset MyNextHeal $p2
/echo roton: $RotOn mynextheal: $MyNextHeal
}
/return
}
/tell $MasterName [on/off/mine/yours]
/return
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||| W = Watch. Builds a list of $spawn(ID)s to watch health |||
||| addw adds a $spawn to the list. default to assist if no name is supplyed |||
||| clearw clears the watch list (sets it to 0). as does zoning (new $spawn(ID)s) |||
||| listw lists the current watchs. |||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sub Do-addw
/varset CmdArrayNum 0
/call Target $p0 $p1 $p2 $p3 $p4
/if n $strlen($target(id))>0 {
/varadd a(2,0) 1
/varset a(2,$a(2,0)) $target(id)
/tell "$MasterName" $spawn($a(2,$a(2,0)),name) added
}
/return
Sub Do-clearw
/varset CmdArrayNum 0
/varset a(2,0) 0
| /call Do-listw
/return
Sub Do-listw
/if n $a(2,0)==0 {
/tell $MasterName There are no watches set
/return
}
/varset Listing " "
/varset Counter 1
:ListLoop
/varset Listing "$Listing $spawn($a(2,$Counter),name), "
/varadd Counter 1
/if $Counter<=$a(2,0) /goto :ListLoop
/tell $MasterName $a(2,0) watches: $Listing
/return

