How to Setup Shaman Healing/assiting main tank and dotting mobs

rikanriz

New member
Joined
Mar 2, 2008
Messages
3
Reaction score
0
Points
0
Hello! I'm fairly new to using this bot I run a 3 way box (Warrior, Rouge, and Shaman) I'm having trouble setting the shaman to cast fatigue and Slows on my tank and mobs. Any info on how to set it up?
 
/pluging mq2bot

(make sure you have all the spells u want to use loaded, dont put something useful in gem1 as that plugin uses it as default gem to buff etc)

make sure you set extended target as grp assist's target

/bot on

look for section in your character ini that says bot (adjust anything there, basically put your tanks name but even that is not needed)

you win at EQ!!
 
Code:
| AFMELEE.mac initial version v04.01.08
| 04.01.09 added leashing
| 04.26.09 added param based arguments
| 05.12.09 added many checks for zone

#include spell_routines.inc 
#include ChatParse.inc 

#turbo 5
#Event Hidem  "#*#Hide Em#*#"
#Event Rest  "#*#Rest up#*#"
#Event Buffs  "#*#Shitheads Buff#*#" 
#Event Zoned 	  "LOADING, PLEASE WAIT...
#Event morph "#*#IT'S MORPHIN' TIME!#*#"
#Event Alliance "#*#Alliance Time#*#"
#Event Alliancewar "#*#Alliance Warsyo#*#"
#Event xtarclear "#*#Xtarget Clear Set#*#"
#Event xtarraid "#*#Xtarget Raid Set #1# #2#'"


Sub Main 
/stick off
|------------READ THIS SECTION AND EDIT IF NEEDED-----------|
|-- Set spell casting order here
   /declare mainassist string outer ${Param0}
   /declare autoassist int outer 1
   /declare autoassisthealth int outer ${Param1}
   
   /declare autoleash bool outer ${Param2}
   /declare stakeX int outer ${Me.X}
   /declare stakeY int outer ${Me.Y}
   /declare leashlength int outer 50
   /declare leashholder string outer Nobody
   /declare leashflex int outer 25
   /declare i int local
   /declare x int local
   /declare StartZone int outer ${Zone.ID}
   /declare groupbuff string outer Stormblood's Unity Rk. III
   /declare grouphealthbuff string outer Spiritual Vivification Rk. II
   /declare grouphembuff string outer Spiritual Elaboration Rk. II
   /declare healspell string outer Krasir's Mending Rk. III
   /declare healspell2 string outer Reckless Regeneration Rk. II
   /declare healspellrange int outer 100 
   /declare pethealspell string outer Jaerol's Mending
   /declare pethealspellrange int outer 100 
   /declare canniwinmode string outer Tribal Pact Rk. III
   /declare petyhealspell string outer Salve of Blezon
   /declare petyhealspellrange int outer 100 
   /declare groupheal string outer Krasir's Recourse Rk. II
   /declare groupheal2 string outer Historian's Intervention Rk. III
   /declare grouphealrange int outer 70 

   /declare selfhealpoint int outer 70 
   /declare tankhealpoint int outer 65  
   /declare casterpatchpoint int outer 70 
   /declare necshmpatchpoint int outer 50 
   /declare defaultpatchpoint int outer 75 

   /declare minorhurt int outer 0 
   /declare majorhurt int outer 0 
   /declare worsthurt string outer NULL 
   /declare worsthurtid int outer 
   /declare worsthp int outer 100 
   /declare worstclass string outer NULL 
   /declare ghealhurtcount int outer 0 
   /declare gmember int outer 
   /declare mainassistid int outer


   
|------------END EDITING------------------------------------|

	/declare boolInCombat bool inner FALSE
	
	/if (!${Defined[Param0]}) {
	  /echo Proper usage: /macro assist TankName assisthealth autoleash
	  /end
	}

	/echo Assisting: ${mainassist}, at ${autoassisthealth}, and leashing: ${autoleash}

|------------BEGIN ROUTINES------------------------------------|
/if (${Raid.Members}>=13) { 
        /target ${mainassist} PC
        /varset mainassistid ${Target.ID}
        /if (${Target.Distance}>=50) /stick ID ${mainassistid}
}
/echo AFMelee Active
:mainloop 
   /if (${GameState.Equal[CHARSELECT]}) /end
   /if (${Zone.ShortName.Equal[GuildLobby]}) {
   	/sit
   	/delay 10m
   	/camp desktop
   }
   /if (${Zone.ID} != ${StartZone}) {
   	/sit
   	/delay 10m
   	/camp desktop
   }
   /call CheckEvents
   
   |-----------------------------
   |-- check to see if I should attack
   /delay 1
   |/if (${Me.XTarget[1].ID}) 
   /assist ${mainassist}
   /if (!${Me.Casting.ID} && ${Me.CombatState.Equal[COMBAT]} && !${Me.Buff["Roar of the Lion 6"].ID} && !${Me.Moving} && ${Me.PctMana}>10 && ${Cast.Ready[Roar of the Lion]} && !${Me.Buff["Flamesong of Ro"].ID}) /Casting "Roar of the Lion" gem7 1.5s
   /if (!${Me.Casting.ID} && !${Me.Song["Shear of Renewal Rk. III"].ID} && !${Me.Moving} && ${Me.PctMana}>10) /Casting "Shear of Renewal Rk. III" gem4 2s
   /if (!${Me.Casting.ID} && !${Me.Buff["Roar of the Lion 6"].ID} && !${Me.Buff["Talisman of the Leopard Rk. II"].ID} && !${Me.Moving} && ${Me.PctMana}>10) /Casting "Talisman of the Leopard Rk. II" gem4 1.5s
   /if (!${Me.Casting.ID} && ${Me.PctMana}<=50 && ${Me.PctHPs}>=50) /Casting "${canniwinmode}" gem8 3s
   /if (!${Me.Casting.ID} && ${Me.AltAbilityReady[Cannibalization]} && ${Me.PctMana}<=70 && ${Me.PctHPs}>=50) /casting "Cannibalization" alt
   /delay 1
   /if (${Raid.Members}>=13 && !${Me.CombatState.Equal[COMBAT]} && !${Stick.Active}) /stick ID ${mainassistid}
                 /if (!${Me.Casting.ID} && ${Me.PctMana}>10 && ${Cast.Ready[Spiritual Swell Rk. III]} && ${Me.Song["Healing Twincast"].ID}) {
                 /echo Swell
                 /target ${Me} PC
                 /delay 1
                 /Casting "Spiritual Swell Rk. III" gem12 2s
                 /delay 2s
                /squelch /tar clear
 }
        /if (!${Me.Casting.ID} && ${Me.CombatState.Equal[COMBAT]} && !${Me.Song["Healing Twincast"].ID} && !${Me.Moving} && ${Me.PctMana}>10 && ${Cast.Ready[Glacial Gift Rk. III]}) {
        /echo Twincast
        /target ${mainassist} PC
        /delay 1
        /Casting "Glacial Gift Rk. III" gem10 2s
        /delay 2s
                /squelch /tar clear
}
   /if (${Me.Buff["Talisman of the Leopard Rk. II"].ID} && ${Me.Song["Shear of Renewal Rk. III"].ID} && !${Me.Gem[Reckless Regeneration Rk. II]}) /multiline ; /memorize 44328 gem4 ; /echo memming
   |-----------------------------
   |-- check to see if I am in combat, if I am, then set it as such, so I don't go and reassist.
   /if (${Melee.Status.NotEqual[WAITING]}) {
   	/varset boolInCombat FALSE
   } else {
   	/varset boolInCombat TRUE
   }

   |-----------------Heals
   /varset minorhurt 0 
   /varset majorhurt 0 
   /for gmember 0 to ${Group} 
      /if ((${Group.Member[${gmember}].PctHPs}<=75)&&(${Group.Member[${gmember}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1 
      /if ((${Group.Member[${gmember}].PctHPs}<=60)&&(${Group.Member[${gmember}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1 
/next gmember

           /for i 0 to 5
      /if (!${Me.Casting.ID} && ${Me.SpellReady[${groupheal}]} && ${Math.Calc[${majorhurt}+${minorhurt}]}>=2)  /casting "${groupheal}" gem1 2s
      /if (!${Me.Casting.ID} && ${Me.SpellReady[${groupheal2}]} && ${Math.Calc[${majorhurt}+${minorhurt}]}>=3)  /casting "${groupheal2}" gem3 2s
            /if (!${Me.Casting.ID} && ${Math.Calc[${majorhurt}+${minorhurt}]}<=3 && ${Group.Member[${i}].PctHPs}<=85 && ${Group.Member[${i}].PctHPs}>0 && !${SpawnCount[${Group.Member[${i}]} corpse]} && ${Group.Member[${i}].Distance}<=200) {
                /squelch /tar ${Group.Member[${i}]} PC
                /delay 1s ${Target.ID}==${Group.Member[${i}].ID}
      /if (${Me.SpellReady[${healspell2}]}) /casting "${healspell2}" gem4 1s
      /if (${Me.SpellReady[${healspell}]}) /casting "${healspell}" gem2 2.6s
      /if (${Me.Casting.ID} && ${Target.PctHPs}>=100) /interrupt
      /echo Healing ${Target}
                /if (${Me.Casting.ID}==44328) /delay 1s
                /if (${Me.Casting.ID}==44293) /delay 2.6s
                /delay 2
                /squelch /tar clear
            }    
        /next i

           /for x 2 to 13
            /if (!${Me.Casting.ID} && ${Math.Calc[${majorhurt}+${minorhurt}]}==0 && ${Me.PctMana}>10 && ${Me.XTarget[${x}].Type.Equal[PC]} && ${Me.XTarget[${x}].PctHPs}<=65 && ${Me.XTarget[${x}].PctHPs}>=1 && ${Me.XTarget[${x}].Distance}<=175) {
                /squelch /xtar ${x}
                /if (${Me.PctMana}>10 && ${Cast.Ready[Spiritual Swell Rk. III]}) /Casting "Spiritual Swell Rk. III" gem12 2s
                /if (${Me.SpellReady[${healspell2}]}) /casting "${healspell2}" gem4 1s
                /if (${Me.SpellReady[${healspell}]}) /casting "${healspell}" gem2 2.6s
                /echo Healing ${Target}
                /if (${Me.Casting.ID}==44328) /delay 1s
                /if (${Me.Casting.ID}==44293) /delay 2.6s
                /delay 2
                /squelch /tar clear
            }    
        /next x
   |-----------------------------
   |-- if not in combat, and I should be assisting, and killing, do so;
   |-- the boolInCombat flag keeps from from banging autoattack over and over.
   /if (!${Me.Casting.ID} && (${Math.Calc[${majorhurt}+${minorhurt}]}==0) && (${autoassist}==1) && (${Target.Type.Equal[NPC]}) && (${Target.PctHPs}<= ${autoassisthealth}) && (${boolInCombat} == FALSE) && ${${mainassist}.Distance}<50) {
   	/varset boolInCombat TRUE
   	/attack on
        /echo Damage
        |/if (${Target.Distance}>=30 && ${Target.Distance}<=75 && !${Me.Moving} && ${Raid.Members}>13) /stick on
        /if (${Target.Distance}<=40) /pet attack
        /if (${Target.Distance}<=40) /pet swarm
        /if (${Me.AltAbilityReady[177]} && ${Target.PctHPs}<=95 && !${Me.Casting.ID}) /alt activate 177
        /if (${Me.AltAbilityReady[50]} && ${Target.PctHPs}<=95 && !${Me.Casting.ID}) /alt activate 50
        /if (${Me.AltAbilityReady[Turgur's Swarm]} && !${Target.BuffDuration[Turgur's Swarm VI]} && !${Me.Casting.ID}) /casting "Turgur's Swarm" alt
        /if (${Me.CombatState.Equal[COMBAT]} && ${Cast.Ready[57405]} && !${Me.Casting.ID}) /useitem Blessed Spiritstaff of the Heyokah
        /if (!${Target.BuffDuration[Reef Crawler Blood Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Reef Crawler Blood Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Song["Gift of Mana (105)"].ID} && !${Me.Casting.ID}) /casting "Chaotic Venom Rk. IiI" gem5 .1s
        /if (!${Target.BuffDuration[Livio's Affliction Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Livio's Affliction Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Casting.ID}) /casting "Livio's Malosenia Rk. II" gem9 3s
        /if (!${Target.BuffDuration[Breath of Hemocoraxius Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Breath of Hemocoraxius Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Song["Gift of Mana (105)"].ID} && !${Me.Casting.ID}) /casting "Hemocoraxius' Pandemic" gem6 3s
        /if (!${Target.BuffDuration[Garugaru Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Garugaru Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Casting.ID}) /casting "Garugaru Rk. II" gem7 3s
        /if (!${Target.BuffDuration[Sraskus' Curse Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Sraskus' Curse Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Casting.ID}) /casting "Sraskus' Curse Rk. II" gem7 3s
        /if (${Me.Casting.ID}==49202) /delay 2.5s
        /if (${Me.Casting.ID}==44346) /delay 1s
        /if (${Me.Casting.ID}==44295) /delay 2.5s
        /if (${Me.Casting.ID}==44298) /delay 2.5s
        /if (${Me.Casting.ID}==48880) /delay 1s
   }


   |-----------------------------
   |-- should I leash?
   /if ((${autoleash} == TRUE) && ${leashholder.Equal[Nobody]} && !${Me.CombatState.Equal[COMBAT]} && (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}>${leashlength})) {
    /goto :LeashStart
   }
   /goto :mainloop 
   
   |-----------------------------
   |-- leashing, ganked from RH
   :LeashStart
   /if (${leashholder.Equal[Nobody]} && (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}>${Math.Calc[${leashlength}*${leashflex}/100]})) {
	 /echo Moving closer to the Stake... ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]} ft. away 
	 /face ${If[${Me.Underwater},,nolook]} loc ${stakeY},${stakeX} 
	 /keypress forward hold 
	 /delay 1s ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}
	 /keypress forward 
	 /if (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}) {
	   /echo Arrived near enough to the Stake. 
	   /face fast ${If[${Me.Underwater},,nolook]} away loc ${stakeY},${stakeX}
	   /keypress esc
	   /goto :mainloop
	 }
	 /if (${Zone.ID} != ${StartZone}) {
	    	/sit
	    	/delay 10m
	    	/camp desktop
     }
	 /goto :LeashStart

/return



Sub CheckEvents
   /delay 1
   /doevents
/return



Sub Event_resumeduty
	/echo Back to bidness
/gsay We Obey!
/return

Sub Event_morph
	/echo Back to bidness
/delay 3s
/gsay Pterodactyl!
/return

Sub Event_Hidem
	/echo Hiding corpses
	/hidecorpse npc
/return

Sub Event_Rest
	/echo Resting
	/sit
/return

Sub Event_Buffs
	/echo Casting Buffs
/alt activate 992
        /delay 20
   /Casting "${groupbuff}" gem11 5s
         /delay 6s
/return


Sub Event_Alliance
   /declare a int local
   /declare gt int local
  :alliance
   /stick off
   /varset minorhurt 0 
   /varset majorhurt 0 
   /for gt 0 to ${Group} 
      /if ((${Group.Member[${gt}].PctHPs}<=75)&&(${Group.Member[${gt}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1 
      /if ((${Group.Member[${gt}].PctHPs}<=60)&&(${Group.Member[${gt}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1 
/next gt
   /stick off
           /for a 2 to 13
            /if (${Math.Calc[${majorhurt}+${minorhurt}]}==0 && ${Me.PctMana}>10 && ${Me.XTarget[${a}].Type.Equal[PC]} && ${Me.XTarget[${a}].PctHPs}>=1 && ${Me.XTarget[${a}].Distance}<=100) {
                /squelch /xtar ${a}
                /delay 2s
                /if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /casting "Ancient Alliance Rk. III" gem9 2.3s
                /delay 2
                /if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /delay 3s
                /squelch /tar clear
            }    
        /next a
/return

Sub Event_Alliancewar
   /declare a int local
   /declare gt int local
  :alliance
   /stick off
   /varset minorhurt 0 
   /varset majorhurt 0 
   /for gt 0 to ${Group} 
      /if ((${Group.Member[${gt}].PctHPs}<=75)&&(${Group.Member[${gt}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1 
      /if ((${Group.Member[${gt}].PctHPs}<=60)&&(${Group.Member[${gt}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1 
/next gt
   /stick off
           /for a 2 to 13
            /if (${Math.Calc[${majorhurt}+${minorhurt}]}==0 && ${Me.PctMana}>10 && ${Me.XTarget[${a}].Type.Equal[PC]} && ${Me.XTarget[${a}].PctHPs}>=1 && ${Me.XTarget[${a}].Distance}<=100) {
                /squelch /xtar ${a}
                /delay 2s
                /if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /casting "Ancient Alliance Rk. III" gem9 2.3s
                /delay 2
                /if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /delay 3s
                /squelch /tar clear
            }    
        /next a
/return


Sub Event_xtarclear
/xtarget remove 2
/xtarget remove 3
/xtarget remove 4
/xtarget remove 5
/xtarget remove 6
/xtarget remove 7
/xtarget remove 8
/xtarget remove 9
/xtarget remove 10
/xtarget remove 11
/xtarget remove 12

/xtarget remove 13
/return

Sub Event_xtarraid(string Line,string number,string tank)
/echo setting Tank to ${tank} spot to ${number}

/xtarget set ${number} ${tank}
/return


Sub Event_Buffs
	/echo Casting Buffs
/alt activate 992
        /delay 20
   /Casting "${grouplongbuff}" gem12 16s
         /delay 6s
/return
|-------------------------------------------------------------------------------- 
|SUB: Zoned 
|-------------------------------------------------------------------------------- 
Sub Event_Zoned 
  /echo Zoned 
  /444 

Sub Event_follow
/mac stick
/return

/mac afshaman assistname 99 0

instead of 0 put 1

it's something i've been goofing with for a while. Uses RK3 of a couple spells, so will need to adjust, and roar 6