Boredom Cleric bot

Macro depository for macros written before the user variable changes that broke all of them.

Moderator: MacroQuest Developers

boredom
a lesser mummy
a lesser mummy
Posts: 49
Joined: Thu Jun 19, 2003 3:45 pm

Boredom Cleric bot

Post by boredom » Fri Aug 01, 2003 9:08 pm

current version I have tryed to advance the modularity so that I can use the same code for my BST bot as well

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
	}
/return
******************************************************
bscmds.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.
/return
*****************************************************
spells.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
/return
******************************************************
healer.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" 
/return
******************************************************
combat.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
Last edited by boredom on Thu Sep 25, 2003 2:15 pm, edited 12 times in total.

Valerian
a grimling bloodguard
a grimling bloodguard
Posts: 709
Joined: Sun Jul 28, 2002 3:29 am

Post by Valerian » Fri Aug 01, 2003 9:27 pm

FOR GOD'S SAKE GRIMJACK, PUT EVERYTHING NON-CUSTOM INTO AN INCLUDE!!! This thing is huge, and everyone modifies it, and posts the whole damn thing!

sorry boredom, didn't mean to hijack your thread... glad ya made it work well for you and all that, I'm just personally tired of scrolling all the way past the stupid things to see if any comments/etc were added at the end.. I read every post on the boards and this gets rather old... heh

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

Post by grimjack » Sat Aug 02, 2003 8:23 pm

Valerian wrote:FOR GOD'S SAKE GRIMJACK, PUT EVERYTHING NON-CUSTOM INTO AN INCLUDE!!! This thing is huge, and everyone modifies it, and posts the whole damn thing!

sorry boredom, didn't mean to hijack your thread... glad ya made it work well for you and all that, I'm just personally tired of scrolling all the way past the stupid things to see if any comments/etc were added at the end.. I read every post on the boards and this gets rather old... heh
I did, quite a while ago. See genbot.mac. I never reposted it as class specific though since I don't play most of those classes and the generic one is very easy to get working for any class. I updated the cleric thread with the include version a few days ago. I don't really play much at the moment so don't expect any more changes for a while. I would suggest everyone who likes the cleric macro take a look at the genbot.mac. It is easy to edit and make work with any class. It's broke into includes, and does spell meming. Also, on multi-paged threads you can skip to any page from the forum list. You don't really have to scroll past it every time. If it is really a problem I can go edit my posts and delete any non include version of my macros or you can get a mod to delete them.

Thanks
GrimJack

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

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

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

Valerian
a grimling bloodguard
a grimling bloodguard
Posts: 709
Joined: Sun Jul 28, 2002 3:29 am

Post by Valerian » Sat Aug 02, 2003 10:13 pm

YAY!!!! sorry for the seeming flame Grimjack, but you know, I got seriously tired of scrolling through all these... thanks for doing the include thing =)