Greetings all this is the Macro I use for my warrior it worked before HoT but now the loot part isnt working any and all help would be welcome
|===================================
| tank.mac
| By: newx
| version 1.0
| Revision Date: 11-05-10
| Plugin Requirements:
| MQ2MoveUtils, MQ2Melee, MQ2Cast,
| MQ2Exchange
|
|===================================
#Event Tell "#*#tells you,#*#"
#Event OOC "#*#says out of character,#*#"
#Event snared "#*#is engulfed by a festering darkness#*#"
#Event helphealer "#*#MOBSONME#*#"
Sub Main
/call Declares
|============================
| Main routine
|============================
:notfighting
/doevents
/call notifyhealer
/call checkzone
/call checkbuff
/call loot
/call leash
:staging
/doevents
/call checkzone
/call gmcheck
/call playercheck
/call doCC
/call pull
/docommand ${If[${Me.CombatState.Equal[COMBAT]},/goto :whilefighting,/goto :notfighting]}
:whilefighting
/if (${Target.Distance}>50) /goto :staging
/call notifyhealer
/call setTarget
/call doSnare
:mobloop
/doevents
/call doCC
/killthis
/call deadYet
/if (${Target.ID}==${loopTarget}) /goto :mobloop
/docommand ${If[${Me.CombatState.Equal[COMBAT]},/goto :staging,/goto :notfighting]}
}
/return
|===========================================
| All local declares are listed in this sub
|===========================================
Sub Declares
/melee stickmode=off
/melee provokemax=0
|======================================
| Declare healers name here
|======================================
/declare healer string outer Define
|============================================
| Declare AA / disciplines here
|============================================
/declare agroDisc string outer Incite
/declare aeDisc string outer
|===========================================
| Set the distance of your pull radius below
|============================================
/declare pullRadius int outer 300
/declare lootRadius int outer 200
|=================================================================
| Set checkGM to TRUE to check for GMs
| Set flopGM to TRUE to FD when GM enters zone
| or FALSE to exit game.
| Set flopPlayer to TRUE to FD when another player gets too close
|=================================================================
/declare checkGM bool outer TRUE
/declare pauseGM bool outer FALSE
/declare pausePlayer bool outer TRUE
|================================
|Declare Safe Players.
|================================
/declare SafePCa string outer define
/declare SafePCb string outer define
/declare SafePCc string outer define
/declare SafePCd string outer define
/declare SafePCe string outer define
/declare SafePCf string outer define
/declare SafePCg string outer define
/declare SafePCh string outer define
/alert add 2 pc ${SafePCa}
/alert add 2 pc ${SafePCb}
/alert add 2 pc ${SafePCc}
/alert add 2 pc ${SafePCd}
/alert add 2 pc ${SafePCe}
/alert add 2 pc ${SafePCf}
/alert add 2 pc ${SafePCg}
/alert add 2 pc ${SafePCh}
/alert add 2 pc ${Me}
|=================================
| Buffs to be kept up by partner
|=================================
/declare aegoBuff string outer "Hand of Temerity Rk. II"
/declare shieldBuff string outer "Shield of Vie Rk. II"
|===============================================
| Loot Array Information
| Set doLoot to TRUE if you want looting turned on
|===============================================
/declare doLoot bool outer TRUE
/declare RV_LootArray[17] string outer
/varset RV_LootArray[1] "Diamond"
/varset RV_LootArray[2] "Ruby"
/varset RV_LootArray[3] "Sapphire"
/varset RV_LootArray[4] "Emerald"
/varset RV_LootArray[5] "Opal"
/varset RV_LootArray[6] "Topaz"
/varset RV_LootArray[7] "Pearl"
/varset RV_LootArray[8] "Parchment"
/varset RV_LootArray[9] "Paper"
/varset RV_LootArray[10] "Lucidem"
/varset RV_LootArray[11] "Curzon"
/varset RV_LootArray[12] "Fungus"
/varset RV_LootArray[13] "Blood"
/varset RV_LootArray[14] "Ear"
/varset RV_LootArray[15] "Favor"
/varset RV_LootArray[16] "Toes"
/varset RV_LootArray[17] "Broken"
/fastdrop on
/lootn never
|==============================
| Misc variables, do not change
|==============================
/declare MyXLoc int outer ${Me.X}
/declare MyYLoc int outer ${Me.Y}
/declare MyZLoc int outer ${Me.Z}
/declare MyHeading float outer ${Me.Heading.DegreesCCW}
/declare killzone int outer ${Zone.ID}
/declare loopTarget int outer
/declare doCC bool outer FALSE
/declare mobCtr int outer 1
/declare mobTotal int outer 0
/declare mobList[10] int outer
/declare mobHP[10] int outer
/declare lowestHP int outer 1
/return
|========================
|SUB: notifyhealer
|========================
Sub notifyhealer
/if (${Me.CombatState.Equal[COMBAT]}) {
/g ITSFIGHTTIME
}
/if (!${Me.CombatState.Equal[COMBAT]}) {
/g ITSDOWNTIME
}
/return
|========================
|SUB: checkzone
|========================
Sub checkzone
/if (${killzone}==${Zone.ID}) /return
/beep
/exec c:\mp3\goonie.mp3 bg
/echo Died... camping out.
/stick pause
/delay 10s
/sit
/delay 10s
/camp desktop
/endmacro
/return
|=======================
|SUB: Check Buffs
|=======================
Sub checkbuff
/stick pause
/echo Checking buffs...
/delay 1s
/if (${Spell[Miraculous Visions].Stacks} && ${Me.Buff[Miraculous Visions].Duration}
0 && !${Me.CombatState.Equal[COMBAT]}) {
/casting "Kizrak's Gauntlets of Battle" item -maxtries|2
/delay 1s
}
/if (${Spell[Taelosian Guard].Stacks} && ${Me.Buff[Taelosian Guard].Duration}
0 && !${Me.CombatState.Equal[COMBAT]}) {
/casting "Signet Ring of Vokk Raskk" item -maxtries|2
/delay 3s
}
/if (${Spell[${aegoBuff}].Stacks} && ${Me.Buff[${aegoBuff}].Duration}
0) {
/g NEEDAEGO
}
/if (${Spell[${shieldBuff}].Stacks} && ${Me.Buff[${shieldBuff}].Duration}
0) {
/g NEEDSHIELD
}
/echo Buffs OK !
/stick unpause
/delay 1s
/return
|========================
|SUB: Loot
|========================
Sub loot
/if (!${doLoot} || !${Me.CombatState.Equal[ACTIVE]}) /return
/declare LootSlot int inner 0
/declare LootCheck int inner 0
/declare LootTotal int inner 0
/declare CorpseCtr int inner 0
/declare CorpseTotal int inner 0
/varset CorpseCtr int inner 0
/varcalc CorpseTotal ${SpawnCount[corpse radius ${lootRadius}]}
/echo Looking for corpses to loot...
/if (${CorpseTotal}==NULL) {
/echo No corpses found...
/delay 1s
/return
}
/for CorpseCtr 1 to ${CorpseTotal}
/varset LootSlot int inner 0
/varset LootCheck int inner 0
/varset LootTotal int inner 0
/squelch /target corpse radius ${lootRadius}
/delay 1s
/moveto ID
/delay 2s
/loot
/delay 1s
/if (${Corpse.Items}>0) {
/varset LootTotal ${Corpse.Items}
/for LootSlot 1 to ${LootTotal}
/nomodkey /shiftkey /itemnotify loot${LootSlot} leftmouseup
/delay 1s
/for LootCheck 1 to ${RV_LootArray.Size}
/if (${Cursor.Name.Find[${RV_LootArray[${LootCheck}]}]}) {
/echo Keeping a ${Cursor.Name}... WOOT!
/autoinventory
/delay 1s
}
/next LootCheck
/if (${Cursor.ID}) {
/echo Destroying a ${Cursor.Name}...
/destroy
/delay 1s
}
/next LootSlot
/notify LootWnd DoneButton leftmouseup
/delay 1s
} else {
/echo NO LOOT! Cheap Bastard!
/notify LootWnd DoneButton leftmouseup
/delay 1s
}
/if (${Me.CombatState.Equal[COMBAT]}) {
/return
}
/next CorpseCtr
/delay 1s
/return
|==================
|SUB: leash
|==================
Sub leash
/call checkzone
/moveto loc ${MyYLoc} ${MyXLoc}
/face nolook heading ${MyHeading}
/return
|========================
|SUB: GM Check
|========================
Sub gmcheck
/if (!${checkGM}) /return
/echo Scanning zone for GM's...
/if (((${Spawn[gm].ID}) || (${Spawn[GM].ID}) || (${Spawn[guide].ID}) || (${Spawn[Guide].ID})) && !((${Spawn[Guideon].ID}) || (${Spawn[spirit guide].ID}))) {
/multiline ;/beep ;/beep ;/beep ;beep ;/beep
/echo GM has entered the zone!
/if (!${pauseGM}) {
/echo GM in Zone!!! Exiting...
/keypress forward
/keypress back
/quit
/endmacro
/unload
} else {
/echo GM in zone!!! Pausing...
/casting "Incarnadine Breastplate" item -maxtries|3
/endmacro
/unload
}
}
/delay 1s
/return
|==========================
|SUB: Playercheck
|==========================
Sub playercheck
/echo Scanning zone for nearby PCs...
/delay 1s
/if (${Spawn[pc noalert 2 radius 300].ID}) {
/exec c:\mq2\goonie.mp3 bg
/echo Player nearby!!!
/if (!${Me.CombatState.Equal[COMBAT]}) {
/if (${pausePlayer}) {
/echo Doing nothing until they leave...
/g ITSDOWNTIME
/casting "Incarnadine Breastplate" item -maxtries|3
/target clear
:playerhold
/if (!${Spawn[pc noalert 2 radius 300].ID}) {
/return
}
/if (${Spell[Gather Shadows].Stacks} && ${Me.Buff[Gather Shadows].Duration}
0) {
/casting "Incarnadine Breastplate" item -maxtries|2
}
/delay 10s
/call gmcheck
/if (${Me.CombatState.Equal[COMBAT]}) /return
/goto :playerhold
}
}
}
/return
|==================
|SUB: pull
|==================
Sub pull
/squelch /target clear
/squelch /target NPC radius ${pullRadius}
/if (!${Target.ID} || !${Target.Type.Equal[NPC]} || ${Target.Type.Equal[Corpse]}) {
/echo No target within set range... waiting...
/squelch /target clear
/return
}
/echo Pulling >>${Target.CleanName}<< ...
/face nolook
/delay 1s
/if (${Target.Distance}<=50) /return
/casting "Blazing Bracer of Fennin Ro" item
/delay 5s
/return
|=====================
|SUB: setTarget
|=====================
Sub setTarget
/if (${Target.ID}!=NULL) {
/varset loopTarget ${Target.ID}
}
/return
|=====================
|SUB: doSnare
|=====================
Sub doSnare
/if (${SpawnCount[npc radius 60]}>1) {
/echo More than 1 mob present, there is no need for snare...
/exchange "Tae Ew Trapper's Blade" offhand
/return
}
/echo ${Target.CleanName} needs snare. Switching weapons.
/exchange "Fabled Obtenebrate Short Sword" offhand
/return
|==================
|SUB: deadYet
|==================
Sub deadYet
/if (${Me.CombatState.Equal[COMBAT]} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
}
/return
|==================
|SUB: doCC
|==================
Sub doCC
/if (!${doCC}) /return
/echo Activating crowd control sequence...
/target ${partner}
/moveto ID
/delay 2s
/call countMobs
|---------------------------------------
| Area effect skills are activated here
|---------------------------------------
/if (${mobTotal}>1) {
/alt activate 109
/delay 1s
/alt activate 110
}
|----------------------------------------------------
| This section works down the list attempting to
| draw aggro on each mob and recording their HP level
|----------------------------------------------------
/for mobCtr 1 to ${mobTotal}
/target id ${mobList[${mobCtr}]} radius 60
/killthis
/disc ${agroDisc}
/echo Trying for agro on ${Target.CleanName}...
/delay 8s
/next mobCtr
/call findlowHP
/varset doCC FALSE
/doevents flush
/return
|===================
| SUB: countMobs
|===================
Sub countMobs
/for mobCtr 1 to 10
/varset mobList[${mobCtr}] 0
/varset mobHP[${mobCtr}] 0
/next mobCtr
/varcalc mobTotal ${SpawnCount[npc radius 60]}
/for mobCtr 1 to ${mobTotal}
/target id ${NearestSpawn[${mobCtr},npc].ID} radius 60
/delay 3
/varset mobList[${mobCtr}] ${Target.ID}
/varset mobHP[${mobCtr}] ${Target.PctHPs}
/next mobCtr
/return
|====================
| SUB: findlowHP
|====================
Sub findlowHP
/varset lowestHP 1
/for mobCtr 2 to ${mobTotal}
/if (${mobHP[${mobCtr}]} < ${mobHP[${Math.Calc[${mobCtr}-1]}]}) /varset lowestHP ${mobCtr}
/next mobCtr
/target id ${mobList[${lowestHP}]} radius 60
/moveto ID
/echo ${Target.CleanName} has lowest HP in the list...
/varset loopTarget ${Target.ID}
/killthis
/return
|================
|EVENTS
|================
Sub Event_Tell
/exec c:\mq2\goonie.mp3 bg
/return
Sub Event_OOC
/exec c:\mq2\goonie.mp3 bg
/return
Sub Event_snared
/echo ${Target.CleanName} is snared. Switching weapons.
/exchange "Foehatchet" offhand
/return
Sub Event_helphealer
/varset doCC TRUE
/return
|===================================
| tank.mac
| By: newx
| version 1.0
| Revision Date: 11-05-10
| Plugin Requirements:
| MQ2MoveUtils, MQ2Melee, MQ2Cast,
| MQ2Exchange
|
|===================================
#Event Tell "#*#tells you,#*#"
#Event OOC "#*#says out of character,#*#"
#Event snared "#*#is engulfed by a festering darkness#*#"
#Event helphealer "#*#MOBSONME#*#"
Sub Main
/call Declares
|============================
| Main routine
|============================
:notfighting
/doevents
/call notifyhealer
/call checkzone
/call checkbuff
/call loot
/call leash
:staging
/doevents
/call checkzone
/call gmcheck
/call playercheck
/call doCC
/call pull
/docommand ${If[${Me.CombatState.Equal[COMBAT]},/goto :whilefighting,/goto :notfighting]}
:whilefighting
/if (${Target.Distance}>50) /goto :staging
/call notifyhealer
/call setTarget
/call doSnare
:mobloop
/doevents
/call doCC
/killthis
/call deadYet
/if (${Target.ID}==${loopTarget}) /goto :mobloop
/docommand ${If[${Me.CombatState.Equal[COMBAT]},/goto :staging,/goto :notfighting]}
}
/return
|===========================================
| All local declares are listed in this sub
|===========================================
Sub Declares
/melee stickmode=off
/melee provokemax=0
|======================================
| Declare healers name here
|======================================
/declare healer string outer Define
|============================================
| Declare AA / disciplines here
|============================================
/declare agroDisc string outer Incite
/declare aeDisc string outer
|===========================================
| Set the distance of your pull radius below
|============================================
/declare pullRadius int outer 300
/declare lootRadius int outer 200
|=================================================================
| Set checkGM to TRUE to check for GMs
| Set flopGM to TRUE to FD when GM enters zone
| or FALSE to exit game.
| Set flopPlayer to TRUE to FD when another player gets too close
|=================================================================
/declare checkGM bool outer TRUE
/declare pauseGM bool outer FALSE
/declare pausePlayer bool outer TRUE
|================================
|Declare Safe Players.
|================================
/declare SafePCa string outer define
/declare SafePCb string outer define
/declare SafePCc string outer define
/declare SafePCd string outer define
/declare SafePCe string outer define
/declare SafePCf string outer define
/declare SafePCg string outer define
/declare SafePCh string outer define
/alert add 2 pc ${SafePCa}
/alert add 2 pc ${SafePCb}
/alert add 2 pc ${SafePCc}
/alert add 2 pc ${SafePCd}
/alert add 2 pc ${SafePCe}
/alert add 2 pc ${SafePCf}
/alert add 2 pc ${SafePCg}
/alert add 2 pc ${SafePCh}
/alert add 2 pc ${Me}
|=================================
| Buffs to be kept up by partner
|=================================
/declare aegoBuff string outer "Hand of Temerity Rk. II"
/declare shieldBuff string outer "Shield of Vie Rk. II"
|===============================================
| Loot Array Information
| Set doLoot to TRUE if you want looting turned on
|===============================================
/declare doLoot bool outer TRUE
/declare RV_LootArray[17] string outer
/varset RV_LootArray[1] "Diamond"
/varset RV_LootArray[2] "Ruby"
/varset RV_LootArray[3] "Sapphire"
/varset RV_LootArray[4] "Emerald"
/varset RV_LootArray[5] "Opal"
/varset RV_LootArray[6] "Topaz"
/varset RV_LootArray[7] "Pearl"
/varset RV_LootArray[8] "Parchment"
/varset RV_LootArray[9] "Paper"
/varset RV_LootArray[10] "Lucidem"
/varset RV_LootArray[11] "Curzon"
/varset RV_LootArray[12] "Fungus"
/varset RV_LootArray[13] "Blood"
/varset RV_LootArray[14] "Ear"
/varset RV_LootArray[15] "Favor"
/varset RV_LootArray[16] "Toes"
/varset RV_LootArray[17] "Broken"
/fastdrop on
/lootn never
|==============================
| Misc variables, do not change
|==============================
/declare MyXLoc int outer ${Me.X}
/declare MyYLoc int outer ${Me.Y}
/declare MyZLoc int outer ${Me.Z}
/declare MyHeading float outer ${Me.Heading.DegreesCCW}
/declare killzone int outer ${Zone.ID}
/declare loopTarget int outer
/declare doCC bool outer FALSE
/declare mobCtr int outer 1
/declare mobTotal int outer 0
/declare mobList[10] int outer
/declare mobHP[10] int outer
/declare lowestHP int outer 1
/return
|========================
|SUB: notifyhealer
|========================
Sub notifyhealer
/if (${Me.CombatState.Equal[COMBAT]}) {
/g ITSFIGHTTIME
}
/if (!${Me.CombatState.Equal[COMBAT]}) {
/g ITSDOWNTIME
}
/return
|========================
|SUB: checkzone
|========================
Sub checkzone
/if (${killzone}==${Zone.ID}) /return
/beep
/exec c:\mp3\goonie.mp3 bg
/echo Died... camping out.
/stick pause
/delay 10s
/sit
/delay 10s
/camp desktop
/endmacro
/return
|=======================
|SUB: Check Buffs
|=======================
Sub checkbuff
/stick pause
/echo Checking buffs...
/delay 1s
/if (${Spell[Miraculous Visions].Stacks} && ${Me.Buff[Miraculous Visions].Duration}
0 && !${Me.CombatState.Equal[COMBAT]}) {/casting "Kizrak's Gauntlets of Battle" item -maxtries|2
/delay 1s
}
/if (${Spell[Taelosian Guard].Stacks} && ${Me.Buff[Taelosian Guard].Duration}
0 && !${Me.CombatState.Equal[COMBAT]}) {/casting "Signet Ring of Vokk Raskk" item -maxtries|2
/delay 3s
}
/if (${Spell[${aegoBuff}].Stacks} && ${Me.Buff[${aegoBuff}].Duration}
0) {/g NEEDAEGO
}
/if (${Spell[${shieldBuff}].Stacks} && ${Me.Buff[${shieldBuff}].Duration}
0) {/g NEEDSHIELD
}
/echo Buffs OK !
/stick unpause
/delay 1s
/return
|========================
|SUB: Loot
|========================
Sub loot
/if (!${doLoot} || !${Me.CombatState.Equal[ACTIVE]}) /return
/declare LootSlot int inner 0
/declare LootCheck int inner 0
/declare LootTotal int inner 0
/declare CorpseCtr int inner 0
/declare CorpseTotal int inner 0
/varset CorpseCtr int inner 0
/varcalc CorpseTotal ${SpawnCount[corpse radius ${lootRadius}]}
/echo Looking for corpses to loot...
/if (${CorpseTotal}==NULL) {
/echo No corpses found...
/delay 1s
/return
}
/for CorpseCtr 1 to ${CorpseTotal}
/varset LootSlot int inner 0
/varset LootCheck int inner 0
/varset LootTotal int inner 0
/squelch /target corpse radius ${lootRadius}
/delay 1s
/moveto ID
/delay 2s
/loot
/delay 1s
/if (${Corpse.Items}>0) {
/varset LootTotal ${Corpse.Items}
/for LootSlot 1 to ${LootTotal}
/nomodkey /shiftkey /itemnotify loot${LootSlot} leftmouseup
/delay 1s
/for LootCheck 1 to ${RV_LootArray.Size}
/if (${Cursor.Name.Find[${RV_LootArray[${LootCheck}]}]}) {
/echo Keeping a ${Cursor.Name}... WOOT!
/autoinventory
/delay 1s
}
/next LootCheck
/if (${Cursor.ID}) {
/echo Destroying a ${Cursor.Name}...
/destroy
/delay 1s
}
/next LootSlot
/notify LootWnd DoneButton leftmouseup
/delay 1s
} else {
/echo NO LOOT! Cheap Bastard!
/notify LootWnd DoneButton leftmouseup
/delay 1s
}
/if (${Me.CombatState.Equal[COMBAT]}) {
/return
}
/next CorpseCtr
/delay 1s
/return
|==================
|SUB: leash
|==================
Sub leash
/call checkzone
/moveto loc ${MyYLoc} ${MyXLoc}
/face nolook heading ${MyHeading}
/return
|========================
|SUB: GM Check
|========================
Sub gmcheck
/if (!${checkGM}) /return
/echo Scanning zone for GM's...
/if (((${Spawn[gm].ID}) || (${Spawn[GM].ID}) || (${Spawn[guide].ID}) || (${Spawn[Guide].ID})) && !((${Spawn[Guideon].ID}) || (${Spawn[spirit guide].ID}))) {
/multiline ;/beep ;/beep ;/beep ;beep ;/beep
/echo GM has entered the zone!
/if (!${pauseGM}) {
/echo GM in Zone!!! Exiting...
/keypress forward
/keypress back
/quit
/endmacro
/unload
} else {
/echo GM in zone!!! Pausing...
/casting "Incarnadine Breastplate" item -maxtries|3
/endmacro
/unload
}
}
/delay 1s
/return
|==========================
|SUB: Playercheck
|==========================
Sub playercheck
/echo Scanning zone for nearby PCs...
/delay 1s
/if (${Spawn[pc noalert 2 radius 300].ID}) {
/exec c:\mq2\goonie.mp3 bg
/echo Player nearby!!!
/if (!${Me.CombatState.Equal[COMBAT]}) {
/if (${pausePlayer}) {
/echo Doing nothing until they leave...
/g ITSDOWNTIME
/casting "Incarnadine Breastplate" item -maxtries|3
/target clear
:playerhold
/if (!${Spawn[pc noalert 2 radius 300].ID}) {
/return
}
/if (${Spell[Gather Shadows].Stacks} && ${Me.Buff[Gather Shadows].Duration}
0) {/casting "Incarnadine Breastplate" item -maxtries|2
}
/delay 10s
/call gmcheck
/if (${Me.CombatState.Equal[COMBAT]}) /return
/goto :playerhold
}
}
}
/return
|==================
|SUB: pull
|==================
Sub pull
/squelch /target clear
/squelch /target NPC radius ${pullRadius}
/if (!${Target.ID} || !${Target.Type.Equal[NPC]} || ${Target.Type.Equal[Corpse]}) {
/echo No target within set range... waiting...
/squelch /target clear
/return
}
/echo Pulling >>${Target.CleanName}<< ...
/face nolook
/delay 1s
/if (${Target.Distance}<=50) /return
/casting "Blazing Bracer of Fennin Ro" item
/delay 5s
/return
|=====================
|SUB: setTarget
|=====================
Sub setTarget
/if (${Target.ID}!=NULL) {
/varset loopTarget ${Target.ID}
}
/return
|=====================
|SUB: doSnare
|=====================
Sub doSnare
/if (${SpawnCount[npc radius 60]}>1) {
/echo More than 1 mob present, there is no need for snare...
/exchange "Tae Ew Trapper's Blade" offhand
/return
}
/echo ${Target.CleanName} needs snare. Switching weapons.
/exchange "Fabled Obtenebrate Short Sword" offhand
/return
|==================
|SUB: deadYet
|==================
Sub deadYet
/if (${Me.CombatState.Equal[COMBAT]} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
}
/return
|==================
|SUB: doCC
|==================
Sub doCC
/if (!${doCC}) /return
/echo Activating crowd control sequence...
/target ${partner}
/moveto ID
/delay 2s
/call countMobs
|---------------------------------------
| Area effect skills are activated here
|---------------------------------------
/if (${mobTotal}>1) {
/alt activate 109
/delay 1s
/alt activate 110
}
|----------------------------------------------------
| This section works down the list attempting to
| draw aggro on each mob and recording their HP level
|----------------------------------------------------
/for mobCtr 1 to ${mobTotal}
/target id ${mobList[${mobCtr}]} radius 60
/killthis
/disc ${agroDisc}
/echo Trying for agro on ${Target.CleanName}...
/delay 8s
/next mobCtr
/call findlowHP
/varset doCC FALSE
/doevents flush
/return
|===================
| SUB: countMobs
|===================
Sub countMobs
/for mobCtr 1 to 10
/varset mobList[${mobCtr}] 0
/varset mobHP[${mobCtr}] 0
/next mobCtr
/varcalc mobTotal ${SpawnCount[npc radius 60]}
/for mobCtr 1 to ${mobTotal}
/target id ${NearestSpawn[${mobCtr},npc].ID} radius 60
/delay 3
/varset mobList[${mobCtr}] ${Target.ID}
/varset mobHP[${mobCtr}] ${Target.PctHPs}
/next mobCtr
/return
|====================
| SUB: findlowHP
|====================
Sub findlowHP
/varset lowestHP 1
/for mobCtr 2 to ${mobTotal}
/if (${mobHP[${mobCtr}]} < ${mobHP[${Math.Calc[${mobCtr}-1]}]}) /varset lowestHP ${mobCtr}
/next mobCtr
/target id ${mobList[${lowestHP}]} radius 60
/moveto ID
/echo ${Target.CleanName} has lowest HP in the list...
/varset loopTarget ${Target.ID}
/killthis
/return
|================
|EVENTS
|================
Sub Event_Tell
/exec c:\mq2\goonie.mp3 bg
/return
Sub Event_OOC
/exec c:\mq2\goonie.mp3 bg
/return
Sub Event_snared
/echo ${Target.CleanName} is snared. Switching weapons.
/exchange "Foehatchet" offhand
/return
Sub Event_helphealer
/varset doCC TRUE
/return

