• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Tank Macro

ss44

Active member
Joined
Sep 13, 2005
RedCents
31¢
This macro is set up for a lvl 70 pally atm, but can be changed very easily to fit any tank/lvl combo. Target the puller and start the macro. The tank will cast a spell when the target gets within range, and then run to the mob and start tanking.
Rich (BB code):
   |~~~~~~~~~~~~~~~~~~~~Tank Macro~~~~~~~~~~~~~~~~~~~~~~~~~
  |~~~~~~~~~~By SS44, and some help from Siddin~~~~~~~~~~~
  |~~~~~~~~~~~Changed from Tone's orig tank mac~~~~~~~~~~~
  |Made for a paladin atm, but can be changed to warrior/sk
  |~~~~~~~~~~~~~~~~~~~~~~~~!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  |~~~~~~~~Just target the puller and start the macro~~~~~~
  |~~~~~~~!~edit spells and such to reflect your tank.~~~~~
 
  #turbo
  #Event EXP                      "You gain#*#"
  #Event Slain                    "You have been slain by#*#"
  #Event DPS   "<#*#> DPS"
  #Event Returntoanchor           "<#*#> Returntoanchor"
  #Event Tag                      "<|${Puller}|> Tag#*#"
  #Event Pull                     "<#*#> TAG#*#"
  #Include Wait4rez.inc
  #Include Spell_Routines.inc
  #Include botevents.inc
  #Chat tell
  #Chat group
  #Chat channel
  #Chat guild
  
  Sub Main
    /call BotDeclares
     
  |=================================================      ==========
  |Edit this stuff
  |=================================================      ==========
     /declare Master               string outer ${Target}
     /declare Tells                int outer 1
     |                             1 echos tells to channel; 0 is no echoing
     /declare Spam                 int outer 0
     |                             1 echos events to private channel; 0 no echoing
     /declare Puller               string outer ${Target}
     /declare PullerID             int outer
     /varset PullerID              ${Target.ID}
     /declare Anchor   int outer 0
  |=================================================      ==========
  | Assist %
  |=================================================      ==========
   /declare RV_Assistat          int outer 99
  
  
  |=================================================      ==========
  | End of Editing
  |=================================================      ==========
     /declare RV_Looper            int outer  0
     /declare RV_MyTargetID        int outer  0
     /declare RV_MyTargetName      string outer
     /declare RV_MyTargetDead      int outer  0
     /declare RV_RandomWait        int outer  0
     /declare RV_CheckLook         int outer  0
     /declare RV_Fighting          int outer  0
     /declare RV_TargetDead        int outer  0
     /declare RV_MyXLOC            int outer  0
     /declare RV_MyYLOC            int outer  0
     /declare AnchorX              int outer ${Me.X}
     /declare AnchorY              int outer ${Me.Y}
     /declare RV_resetheading      int outer ${Me.Heading.DegreesCCW.Int}
     /declare SitBooBooID          int outer
     /declare RV_FastRange         int outer
     /declare RV_RangeMax          int outer
     /declare RV_RangeMin          int outer
     /declare RV_Subreset          int outer 0
     /declare RV_Rangedw           int outer
     /declare Exper                float outer
     /declare AAExp                float outer
     /declare Mobs_Killed          int outer 0
     /varset  Exper                ${Me.PctExp}
     /varset  AAExp                ${Me.PctAAExp}
     /varcalc RV_FastRange         ${RV_Range}+3
     /varcalc RV_RangeMax          ${RV_Range}+1
     /varcalc RV_RangeMin          ${RV_Range}-1
     /varcalc RV_Rangedw           ${RV_Rangedw} - 10
  
    
  |=================================================      =======
  
  /combat on
  /combat save
  /join ${MyChannel}:${MyChannelPass}
  :Start
  /call GetTarget
  /call CheckBuffs
  /doevents
  /goto :Start   
  
  /return
  
  Sub GetTarget
  :NotYet
  /doevents
  /assist ${Puller}
  /delay 4
  /if (!${Target.ID}) /goto :NotYet
  /if ((${Target.ID}!=${PullerID})&&(${Target.Distance}<=35)&& ${Target.Type.Equal[NPC]}) /call Combat
  /goto :NotYet
  /delay 3s
  /return
  
  Sub Combat
     /if (${Target.Type.Equal[NPC]}) /call cast "Force of Piety" gem4 1s
     /varset RV_Fighting 1
     /varset RV_TargetDead 0
     /if ((${Target.ID}) && (${Target.Type.Equal["NPC"]})) {
  	/attack on
  	/stick 9
  }   
  	/if (${Target.Type.Equal[NPC]}) /gsay Attacking >>> [+p+]${Target.CleanName}[+x+] <<<
     :CombatLoop
     /doevents
     /attack on
     /call SpecialIT
  
     }
     :nocombat
     /if (!${Target.ID}) {
        /varcalc Mobs_Killed (${Mobs_Killed}+1) 
        /attack off
        /keypress forward
        /keypress back
        /keypress esc
        /varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]}
        /varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]}
        /echo EXP: ${Exper}:${Me.PctExp}% - AAXP: ${AAExp}:${Me.PctAAExp}% - ${Math.Calc[${Macro.RunTime}/60]} minutes
        /popup EXP: ${Exper}:${Me.PctExp}% - AAXP: ${AAExp}:${Me.PctAAExp}% - ${Math.Calc[${Macro.RunTime}/60]} minutes
        /echo Total Mobs killed so far:  ${Mobs_Killed}
        /varset Exper ${Me.PctExp}
        /varset AAExp ${Me.PctAAExp}
        /varset RV_TargetDead 1
        /varset RV_Fighting 0
     }
     /if (!${RV_TargetDead}) {
          /goto :CombatLoop
     }
  /return
  
  Sub SpecialIT
  /if (!${Me.TargetOfTarget.Name.Equal[${Me}]} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs}>20) { 
  /call Event_Agro
  /delay 2s
  }
  /if (${Me.SpellReady[Force of Piety]}) /call cast "Force of Piety"
  /if (${Me.SpellReady[Serene Command]}) /call cast "Serene Command"
      /if (${Me.AbilityReady[Bash]}) /doability "Bash"
       /doevents
  /if (${Me.AbilityReady[Taunt]}) /doability "Taunt"
  /return
  
  
  Sub ResetSub
     /call CheckAnchor
     /varset RV_TargetDead 0
     /varset RV_Fighting 0
     /doevents
     /attack off
     /keypress ESC
     /call CheckBuffs
     /return
  
  
  Sub Event_EXP
  /call CheckAnchor
  /call ResetSub
  /return
  
  Sub CheckAnchor   
     /if (${Math.Distance[${AnchorY},${AnchorX}]}>25 && ${Anchor}==1) /call MoveToAnchor   
  /return
  
  
  Sub MoveToAnchor
      /declare iCount int local
      /varset iCount 0
  
  |    /echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}.
      /varset RV_MyXLOC ${Int[${Me.X}]}
      /varset RV_MyYLOC ${Int[${Me.Y}]}
      /declare RV_DistanceTimer timer 15
  :AnchorMoveLoop
      /delay 1
      /doevents
      /face fast nolook loc ${AnchorY},${AnchorX}
     
      /if (${Math.Distance[${AnchorY},${AnchorX}]}>=12) {
         /keypress forward hold
      } else {
         /keypress forward
         /return
      }
  
      /if (${iCount}>2) {
          /face fast nolook loc ${AnchorY},${AnchorX}
          /varset iCount 0
      }
      /if (!${RV_DistanceTimer}) {
        /if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) /call HitObstacle
        /varset RV_MyXLOC ${Int[${Me.X}]}
        /varset RV_MyYLOC ${Int[${Me.Y}]}
        /varset RV_DistanceTimer 15
        } 
       }   
     
      /varcalc iCount ${iCount}+1
      /goto :AnchorMoveLoop
  
  /return
  
  sub HitObstacle 
     /keypress forward 
     /keypress back hold 
     /delay 5 
     /keypress back 
     /if (${Math.Rand[2]}) { 
        /keypress strafe_right hold 
        /delay 3 
        /keypress strafe_right 
     } else { 
        /keypress strafe_left hold 
        /delay 3 
        /keypress strafe_left 
     } 
     /keypress forward hold 
  /return
  
  Sub Event_Slain
  /delay 20s
  /load spellset
  /call Wait4Rez 
  /return
  
  
  Sub Event_Returntoanchor
  /stand
  /call CheckAnchor
  /return
  
  Sub Event_Tag
  /stick off
  /attack off
  /assist ${Puller}
  /face fast
  /stick 12
  /gsay Tagging >>> ${Target.CleanName} <<<
  /call cast "Serene Command" gem2 2s
  /delay 3s
  /call cast "Force of Piety" gem1 1s
  /return
  
  
  Sub Event_Attack
  /attack off
  /keypress esc
  /stand
  /attack off
  /call CheckAnchor
  /return
  
  Sub CheckBuffs
  /echo no buff checking atm!
  
  /return
  
  Sub Event_Agro
  /doability "taunt"
  /call cast "Force of Piety" gem1 1s 
  /return

Botevents.inc
Rich (BB code):
#Event Stay			"<#*#> |${Me}| Stay"
#Event Follow			"<#*#> |${Me}| Follow #1#"
#Event Moveto                   "<#*#> |${Me}| Moveto #1#"
#Event Zoned        		"#*#You have entered#*#"
#Event BotTells			"#1# tells you, '#2#'"
#Event ClericBuffs              "<#*#> V #1#"
#Event BCVie			"<#*#> vie #1#"
#Event BCDevotion		"<#*#> Devotion 
#Event BCBlessing		"<#*#> Blessing #1#"
#Event HoT			"<#*#> HoT #1#"
#Event Heal			"<#*#> Heal #1#"
#Event CH			"<#*#> CH #1#"
#Event Arb			"<#*#> Arb"
#Event RC                       "<#*#> RC"
#Event GHoT                     "<#*#> GHoT"
#Event Speed			"<#*#> Speed #1#"
#Event C6			"<#*#> C6 #1#	
#Event Gspeed			"<#*#> Gspeed"
#Event Gc6			"<#*#> Gc6"
#Event Skele			"<#*#> Skele #1#"
#Event Illusion                 "<#*#> Give #1# #2#"
#Event BuffStats                "<#*#> |${Me}| BuffStats"
#Event Focus                    "<#*#> Focus #1#"
#Event Stamina			"<#*#> Stamina #1#"
#Event Might			"<#*#> Might #1#"
#Event Sense			"<#*#> Sense #1#"
#Event Q			"<#1#> Q me"
#Event Q2			"<#*#> Q #1#" 
#Event Heal2			"<#*#> |${Me}| heal #1#"	
#Event Mana			"<#*#> Mana"
#Event Gfocus			"<#*#> Gfocus"
#Event Gsta			"<#*#> Gsta"
#Event Gregen			"<#*#> Gregen"
#Event TL			"<#*#> TL #1# on #2#"
#Event Port			"<#*#> Port #1#"
#EVent Invis			"<#*#> Invis #1#"
#Event Invisgrp			"<#*#> |${Me}| Invisgrp"
#Event Pause			"<#*#> |${Me}| pauseit"
#Event Unpause			"<#*#> |${Me}| unpauseit"
#event HoV			"<#*#> |${Me}| HOV"
Sub BotDeclares
   /declare Follow 		int outer
   /declare FollowPerson 	string outer
   /declare Pauseit 		int outer 0
/return

Sub Event_Stay
   /Varset AnchorX               ${Me.X}
   /Varset AnchorY               ${Me.Y}
   /stick off
   /varset Follow 0
   /varset FollowPerson NULL

 /bc Camp set here, I will now return here after combat.
/return

Sub Event_Follow(string Line,string Sender)
/delay 10
/target ${Sender}
/stick 35% hold
/bc  Following ${Target.CleanName}...
/varset Follow 1
/varset FollowPerson ${Sender}
:following
/if (${Follow}==0) /return
/doevents
/if (!${Target.ID}) /target ${FollowPerson}
/if (!${Stick.Status.Equal[ON]}) /stick 35% hold
/doevents
/goto :following
/return

Sub Event_Moveto(string Line,string MovetoPerson)
/target ${MovetoPerson}
/stick
/bc Moving to << ${Target.CleanName} >>
:stick
/if (${Target.Distance}<15) { 
/stick off
/return
} else {
/goto :stick
}

/return

Sub Event_Zoned
/if (${Follow}==1) { 
/target ${FollowPerson}
/delay 10
/stick 35% hold
}
/return

Sub Event_BotTells(string Line,string Sender,string Chat)
/bc ${Sender} told me: ${Chat}
/return

Sub Event_ClericBuffs(string Line,string Vtarget)
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${Vtarget}
/bc Casting ${longhpbuff} on ${Vtarget}
/call cast ${longhpbuff} gem9 10s
/return

Sub Event_BCVie(string Line,string Vietarget)
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${Vietarget}
/bc Casting Panoply of Vie on ${Vietarget}
/call cast "Panoply of Vie" gem7 4s
/return

Sub Event_BCDevotion
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${Me}
/bc casting Aura of Devotion 
/call cast "Aura of Devotion" gem9 8s
/return

Sub Event_BCBlessing(string Line,string Blessing)
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${Blessing}
/bc casting Blessing of Devotion on ${Blessing}
/call cast "Blessing of Devotion" gem9 6s
/return

Sub Event_HoT(string Line,string Elixir)
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${Elixir}
/bc casting Pious Elixir on ${Elixir}
/call cast "Pious Elixir" gem3 4s
/return

Sub Event_Heal(string Line,string Healee)
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${Healee}
/bc casting Pious Remedy on ${Healee}
/call cast "Pious Remedy" gem1 2s
/return

Sub Event_CH(string Line,string CHer)
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/target ${CHer}
/bc Complete Healing >> ${CHer} <<
/call cast "COmplete Healing" gem2 10s
/return

Sub Event_Arb
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/stopcast
/alt act 169
/bc << BALANCING HPs >>
/delay 1s
/bc Inc Group Heal, hug me !
/call cast "Word of Vivification" gem4 5s
/return

Sub Event_RC
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/alt act 153
/bc You are << Cured >>
/return

Sub Event_GHoT
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/alt act 394
/bc Group >> Hotage <<
/return

Sub Event_Speed(string Line,string Person)
/if (!${Me.Class.Name.Equal[Enchanter]}) /return
/target ${Person}
/bc Casting Speed of Salik on >> ${Person} <<
/call cast "Speed of Salik" gem9 6s
/return

Sub Event_C6(string Line,string Person)
/if (!${Me.Class.Name.Equal[Enchanter]}) /return
/target ${Person}
/bc Clairvoyance on >> ${Person} <<
/call cast Clairvoyance gem9 4s
/return

Sub Event_Gc6
/if (!${Me.Class.Name.Equal[Enchanter]}) /return
/bc Get close casting << Voice of Clairvoyance >>
/call cast "Voice of Clairvoyance" gem9 12s
/return

Sub Event_Gspeed
/if (!${Me.Class.Name.Equal[Enchanter]}) /return
/bc Get close casting << Hastening of Salik >>
/call cast "Hastening of Salik" gem9
/return 

Sub Event_Skele(string Line,string Person)
/if (!${Me.Class.Name.Equal[Enchanter]}) /return
/alt act 217
/target ${Person}
/bc << Illusion Skelly for ${Person} >>
/call cast "Illusion: Skeleton" gem9 3s
/return

Sub Event_Illusion(string Line,string Person,string Illusion)
/if (!${Me.Class.Name.Equal[Enchanter]}) /return
/alt act 217
/target ${Person}
/bc << Turning ${Person} into ${Illusion} >>
/call cast "Illusion: ${Illusion}" gem9 3s
/return

Sub Event_BuffStats 
/bc == [+g+]${Me}'s Buff List[+x+] ==
/if (${Me.Buff[1].ID} && ${Me.Buff[1].Duration}>=600) /bc ** ${Me.Buff[1]} - [+g+]${Me.Buff[1].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[1].ID} && ${Me.Buff[1].Duration}<600 && ${Me.Buff[1].Duration}>=300) /bc ** ${Me.Buff[1]} - [+o+]${Me.Buff[1].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[1].ID} && ${Me.Buff[1].Duration}<300 && ${Me.Buff[1].Duration}>100) /bc ** ${Me.Buff[1]} - [+y+]${Me.Buff[1].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[1].ID} && ${Me.Buff[1].Duration}<=100) /bc ** ${Me.Buff[1]} - [+r+]${Me.Buff[1].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[2].ID} && ${Me.Buff[2].Duration}>=600) /bc ** ${Me.Buff[2]} - [+g+]${Me.Buff[2].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[2].ID} && ${Me.Buff[2].Duration}<600 && ${Me.Buff[2].Duration}>=300) /bc ** ${Me.Buff[2]} - [+o+]${Me.Buff[2].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[2].ID} && ${Me.Buff[2].Duration}<300 && ${Me.Buff[2].Duration}>100) /bc ** ${Me.Buff[2]} - [+y+]${Me.Buff[2].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[2].ID} && ${Me.Buff[2].Duration}<=100) /bc ** ${Me.Buff[2]} - [+r+]${Me.Buff[2].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[3].ID} && ${Me.Buff[3].Duration}>=600) /bc ** ${Me.Buff[3]} - [+g+]${Me.Buff[3].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[3].ID} && ${Me.Buff[3].Duration}<600 && ${Me.Buff[3].Duration}>=300) /bc ** ${Me.Buff[3]} - [+o+]${Me.Buff[3].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[3].ID} && ${Me.Buff[3].Duration}<300 && ${Me.Buff[3].Duration}>100) /bc ** ${Me.Buff[3]} - [+y+]${Me.Buff[3].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[3].ID} && ${Me.Buff[3].Duration}<=100) /bc ** ${Me.Buff[3]} - [+r+]${Me.Buff[3].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[4].ID} && ${Me.Buff[4].Duration}>=600) /bc ** ${Me.Buff[4]} - [+g+]${Me.Buff[4].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[4].ID} && ${Me.Buff[4].Duration}<600 && ${Me.Buff[4].Duration}>=300) /bc ** ${Me.Buff[4]} - [+o+]${Me.Buff[4].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[4].ID} && ${Me.Buff[4].Duration}<300 && ${Me.Buff[4].Duration}>100) /bc ** ${Me.Buff[4]} - [+y+]${Me.Buff[4].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[4].ID} && ${Me.Buff[4].Duration}<=100) /bc ** ${Me.Buff[4]} - [+r+]${Me.Buff[4].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[5].ID} && ${Me.Buff[5].Duration}>=600) /bc ** ${Me.Buff[5]} - [+g+]${Me.Buff[5].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[5].ID} && ${Me.Buff[5].Duration}<600 && ${Me.Buff[5].Duration}>=300) /bc ** ${Me.Buff[5]} - [+o+]${Me.Buff[5].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[5].ID} && ${Me.Buff[5].Duration}<300 && ${Me.Buff[5].Duration}>100) /bc ** ${Me.Buff[5]} - [+y+]${Me.Buff[5].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[5].ID} && ${Me.Buff[5].Duration}<=100) /bc ** ${Me.Buff[5]} - [+r+]${Me.Buff[5].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[6].ID} && ${Me.Buff[6].Duration}>=600) /bc ** ${Me.Buff[6]} - [+g+]${Me.Buff[6].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[6].ID} && ${Me.Buff[6].Duration}<600 && ${Me.Buff[6].Duration}>=300) /bc ** ${Me.Buff[6]} - [+o+]${Me.Buff[6].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[6].ID} && ${Me.Buff[6].Duration}<300 && ${Me.Buff[6].Duration}>100) /bc ** ${Me.Buff[6]} - [+y+]${Me.Buff[6].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[6].ID} && ${Me.Buff[6].Duration}<=100) /bc ** ${Me.Buff[6]} - [+r+]${Me.Buff[6].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[7].ID} && ${Me.Buff[7].Duration}>=600) /bc ** ${Me.Buff[7]} - [+g+]${Me.Buff[7].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[7].ID} && ${Me.Buff[7].Duration}<600 && ${Me.Buff[7].Duration}>=300) /bc ** ${Me.Buff[7]} - [+o+]${Me.Buff[7].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[7].ID} && ${Me.Buff[7].Duration}<300 && ${Me.Buff[7].Duration}>100) /bc ** ${Me.Buff[7]} - [+y+]${Me.Buff[7].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[7].ID} && ${Me.Buff[7].Duration}<=100) /bc ** ${Me.Buff[7]} - [+r+]${Me.Buff[7].Duration.TimeHMS}[+x+] **
 
/if (${Me.Buff[8].ID} && ${Me.Buff[8].Duration}>=600) /bc ** ${Me.Buff[8]} - [+g+]${Me.Buff[8].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[8].ID} && ${Me.Buff[8].Duration}<600 && ${Me.Buff[8].Duration}>=300) /bc ** ${Me.Buff[8]} - [+o+]${Me.Buff[8].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[8].ID} && ${Me.Buff[8].Duration}<300 && ${Me.Buff[8].Duration}>100) /bc ** ${Me.Buff[8]} - [+y+]${Me.Buff[8].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[8].ID} && ${Me.Buff[8].Duration}<=100) /bc ** ${Me.Buff[8]} - [+r+]${Me.Buff[8].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[9].ID} && ${Me.Buff[9].Duration}>=600) /bc ** ${Me.Buff[9]} - [+g+]${Me.Buff[9].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[9].ID} && ${Me.Buff[9].Duration}<600 && ${Me.Buff[9].Duration}>=300) /bc ** ${Me.Buff[9]} - [+o+]${Me.Buff[9].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[9].ID} && ${Me.Buff[9].Duration}<300 && ${Me.Buff[9].Duration}>100) /bc ** ${Me.Buff[9]} - [+y+]${Me.Buff[9].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[9].ID} && ${Me.Buff[9].Duration}<=100) /bc ** ${Me.Buff[9]} - [+r+]${Me.Buff[9].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[10].ID} && ${Me.Buff[10].Duration}>=600) /bc ** ${Me.Buff[10]} - [+g+]${Me.Buff[10].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[10].ID} && ${Me.Buff[10].Duration}<600 && ${Me.Buff[10].Duration}>=300) /bc ** ${Me.Buff[10]} - [+o+]${Me.Buff[10].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[10].ID} && ${Me.Buff[10].Duration}<300 && ${Me.Buff[10].Duration}>100) /bc ** ${Me.Buff[10]} - [+y+]${Me.Buff[10].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[10].ID} && ${Me.Buff[10].Duration}<=100) /bc ** ${Me.Buff[10]} - [+r+]${Me.Buff[10].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[11].ID} && ${Me.Buff[11].Duration}>=600) /bc ** ${Me.Buff[11]} - [+g+]${Me.Buff[11].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[11].ID} && ${Me.Buff[11].Duration}<600 && ${Me.Buff[11].Duration}>=300) /bc ** ${Me.Buff[11]} - [+o+]${Me.Buff[11].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[11].ID} && ${Me.Buff[11].Duration}<300 && ${Me.Buff[11].Duration}>100) /bc ** ${Me.Buff[11]} - [+y+]${Me.Buff[11].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[11].ID} && ${Me.Buff[11].Duration}<=100) /bc ** ${Me.Buff[11]} - [+r+]${Me.Buff[11].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[12].ID} && ${Me.Buff[12].Duration}>=600) /bc ** ${Me.Buff[12]} - [+g+]${Me.Buff[12].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[12].ID} && ${Me.Buff[12].Duration}<600 && ${Me.Buff[12].Duration}>=300) /bc ** ${Me.Buff[12]} - [+o+]${Me.Buff[12].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[12].ID} && ${Me.Buff[12].Duration}<300 && ${Me.Buff[12].Duration}>100) /bc ** ${Me.Buff[12]} - [+y+]${Me.Buff[12].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[12].ID} && ${Me.Buff[12].Duration}<=100) /bc ** ${Me.Buff[12]} - [+r+]${Me.Buff[12].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[13].ID} && ${Me.Buff[13].Duration}>=600) /bc ** ${Me.Buff[13]} - [+g+]${Me.Buff[13].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[13].ID} && ${Me.Buff[13].Duration}<600 && ${Me.Buff[13].Duration}>=300) /bc ** ${Me.Buff[13]} - [+o+]${Me.Buff[13].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[13].ID} && ${Me.Buff[13].Duration}<300 && ${Me.Buff[13].Duration}>100) /bc ** ${Me.Buff[13]} - [+y+]${Me.Buff[13].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[13].ID} && ${Me.Buff[13].Duration}<=100) /bc ** ${Me.Buff[13]} - [+r+]${Me.Buff[13].Duration.TimeHMS}[+x+] **
 
/if (${Me.Buff[14].ID} && ${Me.Buff[14].Duration}>=600) /bc ** ${Me.Buff[14]} - [+g+]${Me.Buff[14].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[14].ID} && ${Me.Buff[14].Duration}<600 && ${Me.Buff[14].Duration}>=300) /bc ** ${Me.Buff[14]} - [+o+]${Me.Buff[14].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[14].ID} && ${Me.Buff[14].Duration}<300 && ${Me.Buff[14].Duration}>100) /bc ** ${Me.Buff[14]} - [+y+]${Me.Buff[14].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[14].ID} && ${Me.Buff[14].Duration}<=100) /bc ** ${Me.Buff[14]} - [+r+]${Me.Buff[14].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[15].ID} && ${Me.Buff[15].Duration}>=600) /bc ** ${Me.Buff[15]} - [+g+]${Me.Buff[15].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[15].ID} && ${Me.Buff[15].Duration}<600 && ${Me.Buff[15].Duration}>=300) /bc ** ${Me.Buff[15]} - [+o+]${Me.Buff[15].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[15].ID} && ${Me.Buff[15].Duration}<300 && ${Me.Buff[15].Duration}>100) /bc ** ${Me.Buff[15]} - [+y+]${Me.Buff[15].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[15].ID} && ${Me.Buff[15].Duration}<=100) /bc ** ${Me.Buff[15]} - [+r+]${Me.Buff[15].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[16].ID} && ${Me.Buff[16].Duration}>=600) /bc ** ${Me.Buff[16]} - [+g+]${Me.Buff[16].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[16].ID} && ${Me.Buff[16].Duration}<600 && ${Me.Buff[16].Duration}>=300) /bc ** ${Me.Buff[16]} - [+o+]${Me.Buff[16].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[16].ID} && ${Me.Buff[16].Duration}<300 && ${Me.Buff[16].Duration}>100) /bc ** ${Me.Buff[16]} - [+y+]${Me.Buff[16].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[16].ID} && ${Me.Buff[16].Duration}<=100) /bc ** ${Me.Buff[16]} - [+r+]${Me.Buff[16].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[17].ID} && ${Me.Buff[17].Duration}>=600) /bc ** ${Me.Buff[17]} - [+g+]${Me.Buff[17].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[17].ID} && ${Me.Buff[17].Duration}<600 && ${Me.Buff[17].Duration}>=300) /bc ** ${Me.Buff[17]} - [+o+]${Me.Buff[17].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[17].ID} && ${Me.Buff[17].Duration}<300 && ${Me.Buff[17].Duration}>100) /bc ** ${Me.Buff[17]} - [+y+]${Me.Buff[17].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[17].ID} && ${Me.Buff[17].Duration}<=100) /bc ** ${Me.Buff[17]} - [+r+]${Me.Buff[17].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[18].ID} && ${Me.Buff[18].Duration}>=600) /bc ** ${Me.Buff[18]} - [+g+]${Me.Buff[18].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[18].ID} && ${Me.Buff[18].Duration}<600 && ${Me.Buff[18].Duration}>=300) /bc ** ${Me.Buff[18]} - [+o+]${Me.Buff[18].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[18].ID} && ${Me.Buff[18].Duration}<300 && ${Me.Buff[18].Duration}>100) /bc ** ${Me.Buff[18]} - [+y+]${Me.Buff[18].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[18].ID} && ${Me.Buff[18].Duration}<=100) /bc ** ${Me.Buff[18]} - [+r+]${Me.Buff[18].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[19].ID} && ${Me.Buff[19].Duration}>=600) /bc ** ${Me.Buff[19]} - [+g+]${Me.Buff[19].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[19].ID} && ${Me.Buff[19].Duration}<600 && ${Me.Buff[19].Duration}>=300) /bc ** ${Me.Buff[19]} - [+o+]${Me.Buff[19].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[19].ID} && ${Me.Buff[19].Duration}<300 && ${Me.Buff[19].Duration}>100) /bc ** ${Me.Buff[19]} - [+y+]${Me.Buff[19].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[19].ID} && ${Me.Buff[19].Duration}<=100) /bc ** ${Me.Buff[19]} - [+r+]${Me.Buff[19].Duration.TimeHMS}[+x+] ** 

/if (${Me.Buff[20].ID} && ${Me.Buff[20].Duration}>=600) /bc ** ${Me.Buff[20]} - [+g+]${Me.Buff[20].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[20].ID} && ${Me.Buff[20].Duration}<600 && ${Me.Buff[20].Duration}>=300) /bc ** ${Me.Buff[20]} - [+o+]${Me.Buff[20].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[20].ID} && ${Me.Buff[20].Duration}<300 && ${Me.Buff[20].Duration}>100) /bc ** ${Me.Buff[20]} - [+y+]${Me.Buff[20].Duration.TimeHMS}[+x+] ** 
/if (${Me.Buff[20].ID} && ${Me.Buff[20].Duration}<=100) /bc ** ${Me.Buff[20]} - [+r+]${Me.Buff[20].Duration.TimeHMS}[+x+] ** 
/bc == [+y+]End of ${Me}'s List[+x+] ==

/if (${Me.Pet.ID}) /bc === ${Me}'s [+p+] Pet Buff List [+x+] ===

/if (${Me.PetBuff[1].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[1]} - [+g+]${Me.PetBuff[1].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[2].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[2]} - [+g+]${Me.PetBuff[2].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[3].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[3]} - [+g+]${Me.PetBuff[3].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[4].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[4]} - [+g+]${Me.PetBuff[4].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[5].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[5]} - [+g+]${Me.PetBuff[5].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[6].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[6]} - [+g+]${Me.PetBuff[6].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[7].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[7]} - [+g+]${Me.PetBuff[7].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[8].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[8]} - [+g+]${Me.PetBuff[8].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[9].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[9]} - [+g+]${Me.PetBuff[9].Duration.TimeHMS}[+x+] **
/if (${Me.PetBuff[10].ID}) /bc ** ${Me.Pet.CleanName} : ${Me.PetBuff[10]} - [+g+]${Me.PetBuff[10].Duration.TimeHMS}[+x+] **

/if (${Me.Pet.ID}) /bc === End of [+p+] ${Me.Pet.CleanName}'s Buff List [+x+] ===
/return

Sub Event_Focus(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Casting Focus on << ${Target.CleanName} >>
/call cast "Wunshi's Focusing" gem8 4s
/return

Sub Event_Stamina(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Casting Stamina on << ${Target.CleanName} >>
/call cast "Spirit of Fortitude" gem8 4s
/return

Sub Event_Might(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Casting Might on << ${Target.CleanName} >>
/call cast "Spirit of Might" gem8 4s
/return

Sub Event_Sense(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Casting Sense on << ${Target.CleanName} >>
/call cast "Talisman of Sense" gem8 4s
/return

Sub Event_Q(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Spiritual Serenity on << ${Target.CleanName} >>
/call cast "Spiritual Serenity" gem5 4s
/return

Sub Event_Q2(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Spiritual Serenity on << ${Target.CleanName} >>
/call cast "Spiritual Serenity" gem5 4s
/return

Sub Event_Heal2(string Line,string Person)
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/target ${Person}
/bc Yoppa`s Mending on << ${Target.CleanName} >>
/call cast "Yoppa's Mending" gem6 5s
/return

Sub Event_Gsta
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/bc ** Casting Group Stamina **
/call cast "Talisman of Fortitude" gem8
/return

Sub Event_Gfocus
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/bc ** Casting Group Focus **
/call cast "Talisman of Wunshi" gem8
/return

Sub Event_Gregen
/if (!${Me.Class.Name.Equal[Shaman]}) /return
/bc ** Casting Group Regen **
/call cast "Talisman of Perseverance" gem8 6s
/return

Sub Event_Mana
/bc ${Me.PctMana}m
/return

Sub Event_TL(string Line, string TLspell, string Person)
/if (!${Me.Class.Name.Equal[Wizard]}) /return
/target ${Person}
/delay 10
/call cast "Translocate: ${TLspell}" gem8
/bc << TLing [+p+]${Target.CleanName}[+x+] to [+g+]${TLspell}[+x+]
/return

Sub Event_Port(string Line, string Portspell)
/if (!${Me.Class.Name.Equal[Wizard]}) /return
/bc [+y+]**Get Close Porting !**[+x+]
/call cast "${Portspell} Portal" gem8
/return

Sub Event_Invis(string Line, string Person)
/if (!${Me.Class.Name.Equal[Wizard]}) /return
/target ${Person}
/delay 10
/call cast "Phase Walk" gem 8
/bc Casting Invis on >> [+g+]${Target.CleanName}[+x+] <<
/return

Sub Event_Invisgrp
/declare j 	int local
/if (!${Me.Class.Name.Equal[Wizard]}) /return
/delay 10
/for j 1 to ${Group.Members}
/target ${Group.Member[${j}]}
/delay 10
/bc ** Invising <<[+g+]${Target.CleanName}[+x+]>> **
/call cast "Phase Walk" gem8 5s
/next j
/delay 10
/target ${Me}
/bc ** Invising <<[+g+]${Target.CleanName}[+x+]>> **
/call cast "Phase Walk" gem8 5s
/return

Sub Event_Pause
/varset Pauseit 1
:pauseloop
/doevents
/if (${Me.Sitting}) /stand
/if (${Pauseit}==0) {
/return
} else {
/goto :pauseloop
}
/return

Sub Event_Unpause
/varset Pauseit 0
/return

Sub event_HoV
/if (!${Me.Class.Name.Equal[Cleric]}) /return
/delay 10
/call cast "Hand of Virtue"
/return
 
Okay so what would I need to edit to make this work for a level 70 Warrior? Where do I change like the spells and stuff to like the Disapline Bazu Bellow?
 
Take out the spells,
Rich (BB code):
/call cast "spell name"
and change them to
Rich (BB code):
/call cast "disc name" disc
(I think its disc, might be wrong) and then it will use the disc's instead. I havent tried it on a true warrior. But if it is a big deal, then I can test it out on a 52 warrior that I have and repost it.
 
Rich (BB code):
 /if (${Target.Distance} <= 25 && ${Me.AbilityReady["Taunt"]} && ${Target.ID}) /doability "Taunt"
 /if (${incite} == 0) /if (${Target.Type.Equal[NPC]}) {
 /disc incite
    /varset incite 1
 }
Rich (BB code):
 sub event_xp
 /attack off
 /varset incite 0
 /return
 
Nice work Sidd, I dont know much of anything about disc's so there ya go Gnomes. :D
 
This would not work for a warrior, at least, as well. Warrior aggro generation and hate is on a completely different 'functional' level and we have very different processes to respond to generation and sustaining aggro. (for example, a simple /bash social, as warriors do not have the luxury of doing 10k hate in 30 seconds like a paladin does)

/disc bazu will use our 69th disc "Bazu bellow" which refreshes every 30 seconds.

/disc cyc or /disc whirl will use our AE hate + DD attack from DoN depending which one a war has.

Really nicely setup for a paladin tho. :)
 
it would work fine, would just have to work at it. the melee and all that is fine, but you would have to exchange the spells for disc's and such.
 
Hey SS44, I have been using your macro and it works great. However, I need 2 questions answered. First --I want the tank to return to camp after the tank kills the mob so what is the commnad to do that? Second, I want to increase the range of the assist person so the tank will engage sooner-what is the command to do that?

PS: Do you have a list of commands you can post?

Thanks
 
Rich (BB code):
/if ((${Target.ID}!=${PullerID})&&(${Target.Distance}<=35)&& ${Target.Type.Equal[NPC]}) /call Combat

change the "35" in Target.Distance to a higher value..

for the running back part I would just write a simple /stick to a group member who's at the camp.
 
any chance anyone could add the code to turn it into a warrior macro and post it back =/ I have no clue how to add it myself ....
 
iceman_001 said:
Ok, How would you change it for a lvl 70 SHD? Thanks in advance.


I would think you could just change the force of piety spell to the spell SK's would use in its place ?
 
I use this on my warrior:

Rich (BB code):
#Event GotSummoned  "You have been summoned!" 
#Event EnrageOn      "|${Target.CleanName}| has become ENRAGED#*#" 
#Event EnrageOn      "|${Target.CleanName}| has become infurated#*#" 
#Event EnrageOff   "|${Target.CleanName}| is no longer enraged#*#" 
#Event EnrageOff   "|${Target.CleanName}| is no longer infuriated#*#" 
#Event MobGate      "|${Target.CleanName}| begins to cast the gate spell#*#" 
#Event MobDead      "#*#You have slain#*#"
#Event MobDead      "#*#has been slain by#*#"
#event Zoned        "You have entered#*#"
#event Dead         "#*#Returning to home point#*#" 
 
#include wait4rez.inc
#include spell_routines.inc
 
Sub Main
/echo Now running tankhelper, combat helper...
/if (!${Bool[${Plugin[mq2moveutils]}]}) {
  /echo MQ2MoveUtils not detected!  This macro requires it!
  /beep
  /end
}
/declare Provoke           string outer "Bazu Bellow"
/declare ShieldDistance    int    outer 25
/declare AssistMeAt        int    outer 98
/declare Casters           string outer Necromancer|Enchanter|Wizard|Magician|Cleric|Druid|Shaman
/declare CallAssist        string outer TRUE
/declare Verbose                  outer TRUE
/declare Channel           string outer /gsay
/declare HomeXLoc          int    outer ${Me.X}
/declare HomeYLoc          int    outer ${Me.Y}
/declare HomeX             int    outer ${Me.X}
/declare HomeY             int    outer ${Me.Y}
/declare cz                string outer ${Zone}
/declare Following                outer TRUE
/declare Berated                  outer FALSE
/declare Engaged                  outer	FALSE
/declare DeadTarget               outer FALSE
/declare DEBUG                    outer FALSE
/declare TargetArray[4]    string outer 
/declare ShieldTimer       timer  outer 300s       
/declare OldItem           string outer
/declare StickTimer        timer  outer 0
/declare Paused                   outer FALSE
/declare targetList        string outer fearless
/declare ENRAGED                  outer FALSE
/declare NoTaunt                  outer FALSE
/declare MobsKilled        int    outer 0
/declare BuffTimer         timer  outer 0
 
/if (${Defined[Param0]}) /varset NoTaunt TRUE
/if (${Verbose}) /echo Default channel for announcements is ${Channel}
/if (!${InvSlot[charm].Item.Name.Length} && !${InvSlot[chest].Item.Name.Length} && !${InvSlot[head].Item.Name.Length} ) /call Event_Dead
 
:Main_Loop
/delay 3
  /doevents
  /if (!${Target.ID} || ${Target.Type.Equal[PC]} || ${Target.Type.Equal[Corpse]} || ${Target.Type.Equal[PET]}) {
    /call CheckForAdds
    /call ReadyForNext
  }
  /if (${Target.ID} && ${Target.Type.Equal[NPC]} && ${Target.Type.NotEqual[Corpse]} && ${Target.Type.NotEqual[PET]} && ${Math.Distance[${HomeYLoc},${HomeXLoc}]} < 50) {
    /if (${Target.Distance} < 60) /call KillTarget
  }
  /goto :Main_Loop
/return
 
Sub CheckForAdds
  /if (${DEBUG}) /echo In CheckForAdds!
  /declare i int local 1
  /declare s int local
  /for i 1 to 4
    /varset s ${NearestSpawn[${i},npc].ID}
    /if (${Spawn[${s}].Distance} < 50 && ${Math.Distance[${Me.Z}:${Spawn[${s}].Z}]} < 40 && ${Spawn[${s}].LineOfSight} ${Spawn[${s}].Type.NotEqual[corpse]} && ${Spawn[${s}].State.NotEqual[FEIGN]}) {
      /squelch /target npc id ${s}
      /if (${Verbose}) /echo Target Information: 
      /if (${Verbose}) /echo [ ${Target.Level} ${Target.Race} ${Target.Class} ] ${Target} ${Target.Surname} ( ${Target.Type} ) 
      /if (${DEBUG}) /echo Setting TargetArray
      /varset TargetArray[1] ${Target.CleanName} 
      /varset TargetArray[2] ${Target.Level} 
      /varset TargetArray[3] ${Target.Name} 
      /varset TargetArray[4] ${Target.ID} 
      /return
    }
  /next i
/return
 
Sub KillTarget
  /if (!${Target.ID}) /return
  /face nolook
  /varset StickTimer 0
	:Combat
  /doevents
  /if (${CallAssist} && ${Verbose}) /call AssistMe
  /if (${Me.PctHPs}<=9) /call DoFurious
  /if (${Me.Feigning}) { 
    /stand
    /delay 1
    /if (!${Paused}) /attack on 
    /if (${Target.Distance} > 12 && !${StickTimer}) {
      /stick 10 moveback
      /varset StickTimer 150
    }
  } 
	/if (!${Berated} && ${Me.CombatAbilityReady[${Provoke}]} && !${RaidMode}) /call DoIncite 
	/if (${Me.Combat} && ${InvSlot[14].Item.Name.Equal[Stormrider Carapace]} &&  ${Me.AltTimerReady}) /do bash
	/if (${Stick.Status.Equal[OFF]} && !${StickTimer}) {
	  /squelch /stick 10 moveback
	  /varset StickTimer 150
	}
  /if (!${Me.Combat} && ${Target.Distance} < ${Target.MaxRangeTo} && !${Paused}) /attack on
  /if (!${Me.TargetOfTarget.Name.Equal[${Me}]} && !${NoTaunt}) /if (${Target.Distance} < 25 && ${Me.AbilityReady["Taunt"]} && !${RaidMode}) /doability "Taunt" 
	/if (!${ShieldTimer} && ${Me.PctHPs} > 40) /call DoShielding
  /if (!${Target.ID} || ${Target.Type.Equal[Corpse]}) {
    /squelch /target clear
    /attack off
    /delay 1s !${Me.Combat}
    /call CheckForAdds
    /if (${Target.ID}) /call KillTarget
    /doevents MobDead
    /return
  }
  /goto :Combat
/return    
 
Sub DoShielding
  /if (${Me.TargetOfTarget.PctHPs} < 30 && ${Me.TargetOfTarget.Type.Equal[pc]} && ${Me.PctHPs} > 50 && ${Me.TargetOfTarget.Distance} <= ${ShieldDistance} && ${Me.TargetOfTarget.ID} != ${Me.ID}) {
    /shield ${Me.TargetOfTarget}
    /varset ShieldTimer 300s
    /if (${Verbose}) ${Channel} SHIELDING is now on ${Me.TargetOfTarget}
    /return
  }
  /declare i int local 0
  /for i 1 to ${Group}
    /if (${Casters.Find[${Group.Member[${i}].Class}]} && ${Group.Member[${i}].PctHPs} < 60 && ${Group.Member[${i}].Distance} <= ${ShieldDistance}) {
      /shield ${Group.Member[${i}]}
      /varset ShieldTimer 300s
      /if (${Verbose}) ${Channel} Now SHIELDING ${Group.Member[${i}]}!!
      /return
    }
/return
 
Sub ReadyForNext
  /varset ENRAGED FALSE
  /if (!${BuffTimer}) {
   /if (!${Me.Buff[Nettle Shield].ID} && ${Spawn[pc chene].ID}) { 
     /tell druid ds
     /delay 6s
   }
   /if (!${Me.Buff[Steeloak Skin].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && ${Spawn[pc chene].ID} && ${Spawn[pc chene].Distance} < 100) {
     /tell cleric ss please
   }
   /if (!${Me.Buff[Ward of Valiance].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && ${Me.Buff[Steeloak Skin].ID} && ${Spawn[pc anxiety].ID} && ${Spawn[pc anxiety].Distance} < 100) {
     /tell cleric wov
   }
   /if (!${Me.Buff[Symbol of Balikor].ID} && !${Me.Buff[Balikor's Mark].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && ${Me.Buff[Steeloak Skin].ID} && ${Spawn[pc anxiety].ID} && ${Spawn[pc anxiety].Distance} < 100) {
     /tell cleric balikor
   }
   /if (!${Me.Buff[Speed of Salik].ID} && !${Me.Buff[Hastening of Salik].ID} && ${Spawn[pc mezem].ID} && ${Spawn[pc mezem].Distance} < 100) {
     /tell enc haste
   }
   /if (!${Me.Buff[Ward of Valiance].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && !${Me.Buff[Steeloak Skin].ID} && ${Spawn[pc anxiety].ID} && ${Spawn[pc anxiety].Distance} < 100) {
     /tell cleric conviction
   }
   /if (!${Me.Buff[Spiritual Vitality].ID} && !${Me.Buff["Brell's Stalwart Shield"].ID} && ${Spawn[pc tizana].ID} && ${Spawn[pc tizana].Distance} < 100) {
     /tell bst sv
   }
   /if (!${Me.Buff[Spiritual Ascendance].ID} && ${Spawn[pc tizana].ID} && ${Spawn[pc tizana].Distance} < 100) {
     /tell bst sa
   }
   /if (!${Me.Buff[Call of the Rathe].ID} && ${Spawn[pc tondezz].ID} && ${Spawn[pc tondezz].Distance} < 100) {
     /tell ranger buff rathe
   }
   /if (!${Me.Buff[Spirit of the Predator].ID} && !${Me.Buff[Howl of the Predator].ID} && ${Spawn[pc tondezz].ID} && ${Spawn[pc tondezz].Distance} < 100) {
     /tell ranger buff howl
   }
   /if (!${Me.Buff[Form of Endurance III].ID}) {
     /call cast "Ring of the Beast" item 10s
   }
   /varset BuffTimer 3m
  }
  /varset CallAssist TRUE
  /varset Engaged FALSE
  /varset Berated FALSE
  /varset Paused FALSE
/return
 
Sub DoFurious
  /if (${Me.CombatAbilityReady["Furious"]}) { 
    /disc Furious 
    /echo Health too low! Hitting Furious! 
    /if (${Verbose}) ${Channel} Going into Riposte mode!  Will need healing within 12 seconds!
  } 
/return
 
Sub AssistMe
  /if (${CallAssist} ${Target.PctHPs} <= ${AssistMeAt} && ${Me.Combat}) { 
    /if (${Verbose}) /gsay [ %t ] /assist me!
    /varset CallAssist FALSE
  } 
/return
 
Sub ReturnHome
  :MoveHome
  /doevents
  /face fast nolook loc ${HomeYLoc},${HomeXLoc}
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]}>20) /keypress forward hold
  /call AreWeStuck
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]}<25) {
    /keypress forward
    /keypress back
    /keypress left
    /keypress right
    /if (${DEBUG}) /echo Leaving Sub ReturnHome
    /return
  }
  /goto :MoveHome
/return
 
Sub AreWeStuck
	/doevents
  /declare  StuckXLoc      int local ${Me.X}
  /declare  StuckYLoc      int local ${Me.Y}
  /delay 5
  /if (${StuckXLoc}==${Me.X} && ${StuckYLoc}==${Me.Y}) /call MoveAround
/return
 
Sub MoveAround
  /doevents
  /keypress forward 
  /keypress back hold 
  /delay 3 
  /keypress back 
  /if (${Math.Rand[2]}) { 
     /keypress strafe_right hold 
  } else { 
     /keypress strafe_left hold 
  } 
  /delay 10 
  /keypress strafe_right 
  /keypress strafe_left 
/return 
 
Sub DoIncite
  /if (${Me.PctEndurance} > 40 && !${Berated} && ${Target.Distance} < 50) { 
    /squelch /face nolook fast 
    /delay 1
    /disc Bazu
    /delay 1
    /varset Berated TRUE
  }
/return 
 
Sub Event_GotSummoned 
  /keypress back hold 
  /delay 5
  /keypress back 
/return 
 
Sub Event_Dead
  /call Wait4Rez 
/return 
 
Sub Event_MobGate
  /if (${Verbose}) ${Channel} ${Target.CleanName} is GATING!  Stun/Mezz!
/return
 
Sub Event_MakeCamp
  /varset HomeXLoc ${Me.X}
  /varset HomeYLoc ${Me.Y}
/return
 
Sub Event_EnrageOn
   /varset ENRAGED TRUE
   /attack off
   /delay 2
   /varset Paused TRUE
   /beep
/return 
 
Sub Event_EnrageOff
   /varset ENRAGED FALSE 
   /attack on
   /delay 2
   /varset Paused FALSE
   /echo Enrage off, attacking.. 
   /beep
/return 
 
Sub Event_ManualLoot
  /call LootMobs
/return
 
Sub Event_MobDead 
  /delay 1s
  /call CheckForAdds
  /varcalc MobsKilled ${MobsKilled}+1
  /echo Mobs Killed: ${MobsKilled}
  /if (${Target.ID}) /return
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 30) /call ReturnHome
/return
 
Sub Event_Zoned
  /varset cz ${Zone}
  /varset HomeXLoc ${Me.X}
  /varset HomeYLoc ${Me.Y}
/return

Perhaps not the most complex, but it gets the job done
 
Last edited:
Gnomesrule said:
Where do you find Tone's Warrior Macro?
What they posted is my modified SK macro... They modded it for a pally... The Sk is the modded form of my warrior macro lol :P
 
JaimeMori said:
I use this on my warrior:


Perhaps not the most complex, but it gets the job done

Hey Jaime,

I don't know if you care, but your code has lots of players names in it. Even if you don't care, ********* might.. ;)
 
Last edited:
Heya all,
I like this pallymac, however it looked like patchwork to me and I wanted some more from the mac.

So with thx to Tone and SS44 here is my version of it.
I added, a spellmem section where you can change for your spells.
Also the pally will hot himself after first stun on inc target is done.
Else, I added a loop to protect a Clr or Shm in group if the healer gets aggro and or goes low health, then the pally uses his Grpheals (AA or Spell).
Also I made the pally walk back to his Anchor.
The old routine for it was way too unreliable and failed allways if any speedmod was on my pally.

Rich (BB code):
|Pallytank.mac Authors and thx to: Tone, SS44, Siddin
|[04-28-06] modiefied by Crystane: Healerprotection, Memspellsection and some codemodifications added.
 
#turbo
#Event EXP                      "You gain#*#"
#Event Slain                    "You have been slain by#*#"
#Event DPS   			  "<#*#> DPS"
#Event Returntoanchor           "<#*#> Returntoanchor"
#Event Tag                      "<|${Puller}|> Tag#*#"
#Event Pull                     "<#*#> TAG#*#"

#Include Spell_Routines.inc
#Include botevents.inc

#Chat tell
#Chat group
#Chat channel
#Chat guild
  
  Sub Main
    /echo Tanking, whatever ${Target.CleanName} pulls.
    /call BotDeclares
     
  |=================================================        ==========
  |Edit this stuff
  |=================================================        ==========
     /declare Master               string outer ${Target}
     /declare Tells                int outer 1
     |                             1 echos tells to channel; 0 is no echoing
     /declare Spam                 int outer 0
     |                             1 echos events to private channel; 0 no echoing
     /declare Puller               string outer ${Target}
     /declare PullerID             int outer
     /varset PullerID              ${Target.ID}
     /declare Anchor   		   int outer 1
  |=================================================        ==========
  | Assist %
  |=================================================        ==========
   /declare RV_Assistat          int outer 99
  
  
  |=================================================        ==========
  | End of Editing
  |=================================================        ==========
     /declare RV_Looper            int outer  0
     /declare RV_MyTargetID        int outer  0
     /declare RV_MyTargetName      string outer
     /declare RV_MyTargetDead      int outer  0
     /declare RV_RandomWait        int outer  0
     /declare RV_CheckLook         int outer  0
     /declare RV_Fighting          int outer  0
     /declare RV_TargetDead        int outer  0
     /declare RV_MyXLOC            int outer  0
     /declare RV_MyYLOC            int outer  0
     /declare AnchorX              int outer ${Me.X}
     /declare AnchorY              int outer ${Me.Y}
     /declare RV_resetheading      int outer ${Me.Heading.DegreesCCW.Int}
     /declare SitBooBooID          int outer
     /declare RV_FastRange         int outer
     /declare RV_RangeMax          int outer
     /declare RV_RangeMin          int outer
     /declare RV_Subreset          int outer 0
     /declare RV_Rangedw           int outer
     /declare Exper                float outer
     /declare AAExp                float outer
     /declare Mobs_Killed          int outer 0
     /varset  Exper                ${Me.PctExp}
     /varset  AAExp                ${Me.PctAAExp}
     /varcalc RV_FastRange         ${RV_Range}+3
     /varcalc RV_RangeMax          ${RV_Range}+1
     /varcalc RV_RangeMin          ${RV_Range}-1
     /varcalc RV_Rangedw           ${RV_Rangedw} - 10
	/declare walkstate	int outer 0  
	/declare gmember	int outer    
  |=================================================        =======
  
  /combat on
  /combat save
  :Start
  /call MemSpells
  /call GetTarget
  /call CheckBuffs
  /doevents
  /goto :Start   
  
  /return

|!!!!!!!!!!!!!!!!!!! Edit the Spellnames in the following Sub to reflect your spells!!!!!!!!!!!!!!!!!!!!
  
  Sub MemSpells
  /if (${Me.Gem[Force of Piety]}!=1) {
	/memspell 1 "Force of Piety"
  	/delay 4s
  }
  /if (${Me.Gem[Wave of Piety]}!=2) {
	/memspell 2 "Wave of Piety"
  	/delay 4s
  }
  /if (${Me.Gem[Brell's Brawny Bulwark]}!=3) {
	/memspell 3 "Brell's Brawny Bulwark"
  	/delay 4s
  }
  /if (${Me.Gem[Pious Cleansing]}!=4) {
	/memspell 4 "Pious Cleansing"
  	/delay 4s
  }
  /if (${Me.Gem[Light of Piety]}!=5) {
	/memspell 5 "Light of Piety"
  	/delay 4s
  }
  /if (${Me.Gem[Ancient: Force of Jeron]}!=6) {
	/memspell 6 "Ancient: Force of Jeron"
  	/delay 4s
  }
  /if (${Me.Gem[Serene Command]}!=7) {
	/memspell 7 "Serene Command"
  	/delay 4s
  }
  /return  

  Sub GetTarget
  :NotYet
  /doevents
  /assist ${Puller}
  /delay 1s ${Target.Type.Equal[NPC]}
  /if (!${Target.ID}) /goto :NotYet
  /if ((${Target.ID}!=${PullerID})&&(${Target.Distance}<=95)&& ${Target.Type.Equal[NPC]}) /call Combat
  /goto :NotYet
  /delay 3s
  /return
  
  Sub Combat
     /if (${Target.Type.Equal[NPC]}) /call cast "Ancient: Force of Jeron" gem6 1s
     /varset RV_Fighting 1
     /varset RV_TargetDead 0
     /if ((${Target.ID}) && (${Target.Type.Equal[NPC]})) {
  	/delay 3s !${Me.Casting.ID}
	/delay 5 ${Me.SpellReady["Pious Cleansing"]}
	/keypress TAB
	/delay 8 ${Target.Type.Equal[PC]}
	/delay 2
	/if (${Me.PctMana}>30) /call cast "Pious Cleansing" gem4 2s Faceit
	/delay 2s
	/keypress TAB
	/attack on
  	/stick 12
  }   
  	/if (${Target.Type.Equal[NPC]}) /gsay Attacking >>> [+p+]${Target.CleanName}[+x+] <<<
     :CombatLoop
     /doevents
	/call ProtectHealer
     /attack on
     /call SpecialIT
  
     }
     :nocombat
     /if (!${Target.ID}) {
        /varcalc Mobs_Killed (${Mobs_Killed}+1) 
        /attack off
        /keypress forward
        /keypress back
        /keypress esc
        /varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]}
        /varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]}
        /echo EXP: ${Exper}:${Me.PctExp}% - AAXP: ${AAExp}:${Me.PctAAExp}% - ${Math.Calc[${Macro.RunTime}/60]} minutes
        /popup EXP: ${Exper}:${Me.PctExp}% - AAXP: ${AAExp}:${Me.PctAAExp}% - ${Math.Calc[${Macro.RunTime}/60]} minutes
        /echo Total Mobs killed so far:  ${Mobs_Killed}
        /varset Exper ${Me.PctExp}
        /varset AAExp ${Me.PctAAExp}
        /varset RV_TargetDead 1
        /varset RV_Fighting 0
     }
     /if (!${RV_TargetDead}) {
          /goto :CombatLoop
     }
  /return
  
  Sub Faceit
  /face nolook
  /return

  Sub SpecialIT
  /if (!${Me.TargetOfTarget.Name.Equal[${Me}]} && ${Target.Type.Equal[NPC]} && ${Target.PctHPs}>20) { 
  /call Event_Agro
  /delay 2s
  }
  /if (${Me.SpellReady[Ancient: Force of Jeron]}) /call cast "Ancient: Force of Jeron" spell
  	/delay 3s !${Me.Casting.ID}
	/delay 3
	/if (${Me.SpellReady[Force of Piety]}) /call cast "Force of Piety" spell
	/if (${Me.AbilityReady[Bash]}) /doability "Bash"
       /doevents
  /if (${Me.AbilityReady[Taunt]}) /doability "Taunt"
  /return
  
  
  Sub ResetSub
     /call CheckAnchor
     /varset RV_TargetDead 0
     /varset RV_Fighting 0
     /doevents
     /attack off
     /keypress ESC
     /call CheckBuffs
     /return
  
  
  Sub Event_EXP
  /call CheckAnchor
  /call ResetSub
  /return
  
  Sub CheckAnchor   
     /if (${Math.Distance[${AnchorY},${AnchorX}]}>30 && ${Anchor}==1) /call MoveToAnchor   
  /return
  
  
  Sub MoveToAnchor
      /declare iCount int local
      /varset iCount 0
  
      /echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}.
      /varset RV_MyXLOC ${Int[${Me.X}]}
      /varset RV_MyYLOC ${Int[${Me.Y}]}
      /declare RV_DistanceTimer timer 15
  :AnchorMoveLoop
      /delay 1
      /doevents
      /face nolook loc ${AnchorY},${AnchorX}
      /delay 1s
      /face fast nolook loc ${AnchorY},${AnchorX}
      /if (!${LineOfSight[${AnchorY},${AnchorX}:${Me.Y},${Me.X}]}) {
		/echo I may be out of range, cant see you.
		/return
	}
	/if (${Math.Distance[${AnchorY},${AnchorX}]}>=28 && ${LineOfSight[${AnchorY},${AnchorX}:${Me.Y},${Me.X}]}) {
        /notify ActionsWindow AMP_WalkButton Leftmouseup
	/varset walkstate 1 
	/keypress forward hold
      } else {
	 /if (${Math.Distance[${AnchorY},${AnchorX}]}>=28) /echo I am here, no sweat.
	 /keypress forward
        /if (${walkstate}>0) {
		/notify ActionsWindow AMP_RunButton Leftmouseup
	} 
	/if (${Target.ID} && ${Target.Type.Equal[NPC]}) /face
	/return
      }
  
      /if (${iCount}>2) {
          /face nolook loc ${AnchorY},${AnchorX}
          /delay 1s
	  /varset iCount 0
	  /face fast nolook loc ${AnchorY},${AnchorX}
      }
      /if (!${RV_DistanceTimer}) {
        /if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) /call HitObstacle
        /varset RV_MyXLOC ${Int[${Me.X}]}
        /varset RV_MyYLOC ${Int[${Me.Y}]}
        /varset RV_DistanceTimer 15
        } 
       }   
     
      /varcalc iCount ${iCount}+1
      /goto :AnchorMoveLoop
  
  /return
  
  sub HitObstacle 
     /keypress forward 
     /keypress back hold 
     /delay 5 
     /keypress back 
     /if (${Math.Rand[2]}) { 
        /keypress strafe_right hold 
        /delay 3 
        /keypress strafe_right 
     } else { 
        /keypress strafe_left hold 
        /delay 3 
        /keypress strafe_left 
     } 
     /keypress forward hold 
  /return

Sub ProtectHealer
/for gmember 0 to ${Group}
	/if ((${Group.Member[${gmember}].Class.Name.Equal[Cleric]} || ${Group.Member[${gmember}].Class.Name.Equal[Shaman]}) && ${Group.Member[${gmember}].PctHPs}<70) {
		/if (${Me.AltAbilityReady[Hand of Devotion]}) {
			/call cast "Hand of Devotion" alt 1s
			} else {
				/if (${Me.PctMana}>30) {
					/call cast "Wave of Piety" gem2 4s
				} else { 
					/call Event_Agro
				}
			}
		}
/next gmember
/return

  Sub Event_Slain
  /delay 20s
  /load spellset
|  /call Wait4Rez 
  /return
  
  
  Sub Event_Returntoanchor
  /stand
  /call CheckAnchor
  /return
  
  Sub Event_Tag
  /stick off
  /attack off
  /assist ${Puller}
  /face
  /stick 12
  /gsay Tagging >>> ${Target.CleanName} <<<
  /call cast "Celestial Stun" Alt 2s
  /delay 3s
  /call cast "Ancient: Force of Jeron" gem6 1s
  /delay 3s !${Me.Casting.ID}
  /delay 5 ${Me.SpellReady["Pious Cleansing"]}
  /keypress TAB
  /delay 8 ${Target.Type.Equal[PC]}
  /call cast "Pious Cleansing" gem4 2s Faceit
  /delay 2s
  /keypress TAB
  /return
  
  
  Sub Event_Attack
  /attack off
  /keypress esc
  /stand
  /attack off
  /call CheckAnchor
  /return
  
  Sub CheckBuffs
  /echo no buff checking atm!
  
  /return
  
  Sub Event_Agro
  /if (${Me.TargetOfTarget.Type.Equal[PC]} && ${Me.TargetOfTarget.Class.Name.Equal[Cleric]} && ${Me.TargetOfTarget.PctHPs}<85) /if (${Me.AltAbilityReady[Hand of Devotion]}) /call cast "Hand of Devotion" alt 1s
  /if (${Me.AbilityReady[Taunt]}) /doability "Taunt"
  /if (${Me.AbilityReady[Bash]}) /doability "Bash"
  /if (${Me.SpellReady[Force of Piety]}) /call cast "Force of Piety" gem1 1s 
  /if (${Me.AltAbilityReady[Celestial Stun]}) /call cast "Celestial Stun" alt  
/return
 
The warrior macro gives me the Invisible Man message and toggles the PoR Aura off and on target whenever I run the macro. Is there a way to fix this?
 
targeting auras issue

if you compile for yourself....

And if you have VIP access ...

you can make this change and never have to worry about auras again.

http://macroquest2.com/phpBB2/viewtopic.php?t=12877



if not then maybe something like

/if (${Target.Race}=="Invisisble Man" /call Assist Sub


just a thought .. not 100% sure that line would work


army
 
Tank Macro

Users who are viewing this thread

Back
Top
Cart