A real updated Cleric Bot

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

Moderator: MacroQuest Developers

crazybear
decaying skeleton
decaying skeleton
Posts: 4
Joined: Fri Mar 28, 2003 8:03 pm

A real updated Cleric Bot

Post by crazybear » Fri Apr 25, 2003 1:17 am

Here it is my project that didn't quite go all the way. Basically the originators need the credit I simply added a more advanced healing routine and a few low level bells and whistles.

Cleric.mac

Code: Select all

| cleric.mac 
| cleric petbot 
|  
| Modded By Crazybear
| Courtesy of Dirtface 
| Special thanks: Wes (for the idea of the FOR loop) 
|                 Fippy (for figuring out "What went wrong.) 
|                 Valerian (for completely writing the Autoheal script 
|                           and the auto loot script. 
|                           Seriously, Val figured this whole thing out.) 
|                 Sparr (For helping me with the Set camp feature) 
| Usage: /macro cleric.mac <character in control> 

#define GroupMember v93 
#define GroupMax v90 
#define ChatCommand p2 
#define XLOC v52 
#define YLOC v53 
#define $GroupClass $spawn($group($GroupMember),class) 

#include SpellSub.mac 
#include routines.mac 
#chat tell 
#Event Invited "To join the group, click on the 'FOLLOW' option, or 'DISBAND' to cancel" 
#Event ClarityGone "Your mind returns to normal." 
#Event InvisGone "You feel yourself starting to appear" 
#Event RootGone "Your Immobilize spell has worn off." 
#Event FollowOff "You are no longer auto-following " 

Sub Main 
   /varset v69 $p0 
:chkevent 
   /doevents 
   | *** AutoHeal *** 

   /varcalc GroupMax $group(count)-1 
   /for GroupMember 0 to $GroupMax 
	 /if n $spawn($group($GroupMember),hp,pct)<1 /goto :nextmember 

	 /if "$GroupClass"=="Warrior" /goto :Tankheal 
	 /if "$GroupClass"=="Paladin" /goto :Tankheal 
	 /if "$GroupClass"=="Shadow Knight" /goto :Tankheal 
	 /if "$GroupClass"=="Monk" /goto :Meleheal 
	 /if "$GroupClass"=="Ranger" /goto :Meleheal 
	 /if "$GroupClass"=="Rogue" /goto :Meleheal 
	 /goto :CasterHeal 

:Tankheal 
	/if n $spawn($group($GroupMember),hp,pct)<41 { 
		/if n $group($GroupMember)==$char(id) /press F1 
		/if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
		/if n $target(distance)>100 {
			/tell $p0 %T is too far away.
			/delay 30
			/press esc 
			/goto :nextmember 
		}
		/stand 
		/g Complete Heal >> %T
		/call SpellSub 6 100 
		/sit 
		/press esc 
         }
         /goto :nextmember 

:Meleheal 
	/if n $spawn($group($GroupMember),hp,pct)<61 { 
		/if n $group($GroupMember)==$char(id) /press F1 
		/if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
		/if n $target(distance)>100 {
			/tell $p0 %T is too far away.
			/delay 30
			/press esc 
			/goto :nextmember 
		}
		/stand 
		/g SupHeal >> %T 
		/call SpellSub 7 50 
		/sit 
		/press esc 
         }
         /goto :nextmember 

:Casterheal 
 	/if n $spawn($group($GroupMember),hp,pct)<71 { 
		/if n $group($GroupMember)==$char(id) /press F1 
		/if n $group($GroupMember)!=$char(id) /target id $group($GroupMember) 
		/if n $target(distance)>100 {
			/tell $p0 %T is too far away.
			/delay 30
			/press esc 
			/goto :nextmember 
		}
		/stand 
		/g SupHeal >> %T 
		/call SpellSub 7 50 
		/sit 
		/press esc 
	}
        /goto :nextmember 

:nextmember 
      } 
   /next GroupMember 
   /goto :chkevent 
/return 

Sub Event_Chat 

:Commands 

| *** Complete Heal *** 

/if "$ChatCommand"=="ch" { 
     /target $p1 
     /stand 
     /g COMPLETE HEAL on %T in 10seconds 
     /call SpellSub 1 105 
     /sit 
     /press esc 

| *** HEAL OVER TIME *** 

   } else /if "$ChatCommand"=="ce" { 
     /target $p1 
     /stand 
     /g Cel Heal >> %T 
     /call SpellSub 1 50 
     /sit 
     /press esc 

| *** Cure Poison *** 

   } else /if "$ChatCommand"=="poison" { 
     /target $p1 
     /stand 
     /g Cure Poison >> %T 
     /call SpellSub 6 50 
     /sit 
     /press esc 

| *** GATE *** 

   } else /if "$ChatCommand"=="gate" { 
     /stand 
     /g Gating 
     /call SpellSub 8 55 
      
| *** HP BUFF *** 

   } else /if "$ChatCommand"=="HP" { 
     /target $p1 
     /stand 
     /g HP Buff on %T 
     /call SpellSub 5 65 
     /sit  
     /press esc 

| *** Superior Heal *** 

   } else /if "$ChatCommand"=="Heal" { 
     /target $p1 
     /stand 
     /g SHeal >> %T
     /call SpellSub 7 50 
     /sit 
     /press esc 

| *** Pet Superior Heal *** 

   } else /if "$ChatCommand"=="pet" { 
     /press esc 
     /press f2 
     /press f2 
     /stand 
     /g CH on %T 
     /call SpellSub 1 105 
     /sit 
     /press esc 

| *** Symbol *** 

   } else /if "$ChatCommand"=="Symbol" { 
     /target $p1 
     /stand 
     /g Symbol on %T 
     /call SpellSub 3 55 
     /sit  
     /press esc 

| *** AC BUFF *** 

   } else /if "$ChatCommand"=="AC" { 
     /target $p1 
     /stand 
     /g AC BUFF on %T 
     /call SpellSub 4 85 
     /sit 
     /press esc 

| *** Root *** 

     } else /if "$ChatCommand"=="root" { 
     /target $p1 
     /assist 
     /stand 
     /delay 7 
     /g Rooting %T 
     /call SpellSub 2 40 
     /sit 
     /press esc 

| *** Nuke *** 

     } else /if "$ChatCommand"=="nuke" { 
     /target $p1 
     /assist 
     /stand 
     /delay 7 
     /g Nuke >> %T
     /call SpellSub 1 40 
     /sit 
     /press esc 

| *** Report Mana *** 

   } else /if "$ChatCommand"=="mana" { 
     /stand 
     /dismount 
     /press F1 
     /g Mana is at $char(mana,pct) 
     /press esc 
     /sendkey down shift 
     /press 2 
     /press shift 
     /press 0 
     /press esc 

| *** AUTOFOLLOW *** 

   } else /if "$ChatCommand"=="follow" { 
     /target $p1 
     /face 
     /sit off 
     /follow 
     /r Lead on %T 
     /varset v10 0 

| *** Define Camp Spot *** 

   } else /if "$ChatCommand"=="setcamp" { 
     /press F1 
     /delay 5 
     /varset XLOC $char(x) 
     /varset YLOC $char(y) 
     /g Ok. Here I sit. 

| *** AUTORETURN (to camp)*** 

   } else /if "$ChatCommand"=="return" { 
:return 
     /stand 
     /face loc $YLOC,$XLOC 
     /call GotoLoc $YLOC,$XLOC 
     /sit 

| *** AUTOSTOP *** 

   } else /if "$ChatCommand"=="stop" { 
     /press down 
     /varset v10 1 
     /r Stopping here. 

| *** SIT/STAND *** 

   } else /if "$ChatCommand"=="sit" { 
     /sit 

| *** MOUNT HORSE *** 

   } else /if "$ChatCommand"=="mount" { 
     /sendkey down shift 
     /press 2 
     /press shift 
     /press 0 

| *** DISMOUNT HORSE *** 

   } else /if "$ChatCommand"=="dismount" { 
     /dismount 

| *** LFG ON *** 

   } else /if "$ChatCommand"=="LFG" { 
     /delay 10 
     /press f1 
     /delay 10 
     /disband 
     /delay 10 
     /lfg on 
     /r LFG now. 

| *** CAMP *** 

   } else /if "$ChatCommand"=="camp" { 
     /sit off 
     /sit 
     /camp 
     /delay 10 
     /unload 

| *** COMMAND HELP *** 

   } else /if "$ChatCommand"=="command help" { 
     /reply [CE] - Celestial Heal, [CH] - Complete Heal, [AC] - HP Buff, [HP] - HP Buff, [Heal] - Superior Heal, [Root] - Root Mob, [Nuke] - DD Mob, [Gate] - Gate out, [Mana] - Report Mana, [Follow] - Follow, [Stop] - Stop Follow, [Loot] - Autoloot, [Setcamp] = Set camp spot, [Return] - Return to camp, [Sit] - Sit/Stand, [MOUNT/DISMOUNT] - (dis)mount Horse, [LFG] - LFG ON, [Camp] - Camp
            
   } 
/return 

Sub Event_Invited 
   /delay 20 
   /invite 
/return 

Sub Event_ClarityGone 
   /g I'm outa crack and I'm gettin feindish... 
/return 

Sub Event_InvisGone 
   /g Invis is wearing off. 
/return 

Sub Event_RootGone 
   /g Root Wore off. 
     /press f2 
     /assist 
     /delay 11 
     /stand 
     /g Rooting %T 
     /call SpellSub 3 40 
     /sit 
     /press esc 
/return 

Sub Event_FollowOff 
   /if n $v10==1 { 
      /r Parked. 
   } else { 
      /g Lost ya. 
      /sendkey down up 
      :KeepRunning 
      /face 
          /if n $target(distance)<50 { 
             /sendkey up up 
             /follow 
             /varset v10 0 
             /g Back on Auto-Follow. go ahead. 
          } else { 
             /goto :KeepRunning 
          } 
       } 
/return 
Routines.mac

Code: Select all

| - routines.mac - 
| Generic routines that may be used a lot. 
| ---------------------------- 
| Original Version by: Plazmic 
| Improved by: L124RD 


Sub BuyItems 

   /sendkey down shift 

   /for l1 1 to $p0 
      /click left merchant buy 
      /varset l2 $char(cash)
      :BuyItems_Wait
         /delay 0
      /if n $l2==$char(cash) /goto :BuyItems_Wait
   /next l1 

   /sendkey up shift 

/return 


| ---------------------------- 


Sub SellItem 
   /sendkey down shift 
   :SellItem 
      /finditem $p0 
      /if $find()==FALSE /goto :DoneSellItem 
      /click left merchant sell 
      /delay $rand(3) 
   /goto :SellItem 
   :DoneSellItem 
   /sendkey up shift 
/return 


| ---------------------------- 


Sub BackPedal 
   /if $p0==$v79 /return 
   /varset v79 $p0 
   /if $p0==1 /sendkey down up 
   /if $p0==0 /sendkey up up 
/return 


| ---------------------------- 


Sub AutoRun 
   /if $p0==$v80 /return 
   /varset v80 $p0 
   /if $p0==1 /sendkey down up 
   /if $p0==0 /sendkey up up 
/return 


| ---------------------------- 


Sub GotoLoc 
   /varset v91 $rand(5) 
   :GotoLocLoop 
      /face loc $p0 
      /if "$p1"=="u" /Press u 
      /call AutoRun 1 
   /if n $distance($p0)>$v91 /goto :GotoLocLoop 
   /call AutoRun 0 
/return 


| ---------------------------- 


Sub GotoTarg 
    /varset v91 $rand(5) 
   /target $p0 
   :GotoTargLoop 
      /face 
      /if "$p1"=="u" /Press u 
      /call AutoRun 1 
   /if n $target(distance)>$v91 /goto :GotoTargLoop 
   /call AutoRun 0 
/return 

| ---------------------------- 

Sub BuyItems 
   /press down shift 
   /for p1 1 to $p0 
      /varcalc p2 $char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper) 
      /click left merchant buy 
      :BuyItemsLoop 
         /delay 0 
      /if n $calc($char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper))==$p2 /goto :BuyItemsLoop 
   /next p1 
   /press up shift 
/return 

| ---------------------------- 

Sub SellItem 
   /sendkey down shift 
   :SellItem 
      /finditem $p0 
      /if $find()==FALSE /goto :DoneSellItem 
      /varcalc p2 $char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper) 
      /click left merchant sell 
      :SellItemLoop 
         /delay 0 
      /if n $calc($char(plat)*1000+$char(gold)*100+$char(silver)*10+$char(copper))==$p2 /goto :SellItemLoop      
   /goto :SellItem 
   :DoneSellItem 
   /sendkey up shift 
/return 

| ---------------------------- 

Sub FindCombiner 
   /for p1 7 downto 0 
      /if "$pack($p1,combine)"=="$p0" /return $p1 
   /next p1 
   /echo You do not appear to have a valid $p0 container. 
/return 99 

| End of routines.mac
SpellSub.mac

Code: Select all

| - SpellSub.mac - 
| Spell Casting Sub routine - Usage "/call SpellSub <gem> <delay *actual cast time plus recast*>" 
| Will return $v99 = 999 if you go oom. 
| 
| Modified by GD to work with the 7-4-2002 Release 
| 
| modified by sempi to include sitting/standing and be more cleric oriented 
| 1. Complete Heal 
| 2. Divine Light 
| 3. Celestial Healing 
| 4. Remedy 
| 5. Symbol of Marzin (?) 
| 6. Heroic Bond 
| 7. Mark of Karn 
| 8. Mark of Retribution 
| 
| Modified by S_B_R to handle more events and relay more information to the person 
| issuing the command. Also removed the auto-sit function to help control aggro. 09-07-02 

#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 CastTimer "You haven't recovered yet..." 
#Event CastResist "Your target resisted " 

Sub SpellSub 
   /varset v98 $p0 
   /varset v99 $p1 
   :ReCast 
   /sit off 
   /varset v1 2 
   /cast $v98 
   /delay 10 
   /doevents 
   /if n $v1==0 /goto :ReCast 
   /if n $v1>1 /goto :Failure 
/return 

:Failure 
   /if n $v1==2 { 
      /reply Spell failed for unknown reason... 
      /delay 5 
   } else /if n $v1==3 { 
      /reply You're too far away. Come back. 
      /delay 5 
   } else /if n $v1==4 { 
      /reply OOM 
      /delay 100 
      /sit on 
   } else /if n $v1==5 { 
      /reply Waiting for repop... 
   } else /if n $v1==6 { 
      /reply %T RESISTED. 
   } 
/return 

Sub Event_CastStart 
   /varset v1 1 
   /delay $v99 
/return 

Sub Event_CastFizzle 
   /varset v1 0 
/return 

Sub Event_CastInterrupt 
   /varset v1 0 
/return 

Sub Event_CastTooFar 
   /varset v1 3 
/return 

Sub Event_CastNoMana 
   /varset v1 4 
/return 

Sub Event_CastTimer 
   /varset v1 5 
/return 

Sub Event_CastResist 
   /varset v1 6 
/return