• 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
Resource icon

Release No Heroism Without Fear macro by EqMule 1.0

No permission to download
Joined
Feb 1, 2013
RedCents
26,998¢
This macro demos the new Task tlo to finish the mercenary j5 quest No Heroism Without Fear
this is NOT an afk macro, you need to pay attention and help out here and there, but it does make this quest easier to complete in a timely and organized manner.
| Instructions:
| Start in feerrott the dream.
| /mac Heroism
| I tested on a 110 sk with a apprentice II healer merc but any class will work if u help a little with casters, like nuke and so on.
| Pre Reqs: mq2nav mq2melee and mq2 built later than oct 02 2019
 
This macro demos the new Task tlo to finish the mercenary j5 quest No Heroism Without Fear
this is NOT an afk macro, you need to pay attention and help out here and there, but it does make this quest easier to complete in a timely and organized manner.
| Instructions:
| Start in feerrott the dream.
| /mac Heroism
| I tested on a 110 sk with a apprentice II healer merc but any class will work if u help a little with casters, like nuke and so on.
| Pre Reqs: mq2nav mq2melee and mq2 built later than oct 02 2019
Awesome! This was a macro I got halfway through making and said fk it due to how difficult it is without a robust task TLO --- when i saw your changes come through this was one of the first quests that came to mind.

Thanks mule! good stuff
 
Bleh, it was a duplicate, i removed a deleted post pay no attention to that

These are not the droids you are looking for....


got it.
 
I don't know how to add the file now to the first page, it's weird, but it's attached to the first post
 
I don't know how to add the file now to the first page, it's weird, but it's attached to the first post
Yeah i tagged @Redbot on that on discord - the convert to a resource thing doesn't seem to have the option to include a file atm
 
Worked great tonight ! Make sure you are alone or loot items quickly as being in a group ADV-LOOT messes with timing.
 
I ran this two days ago (I was a slacker and never got around to running this for my bot army) I just degouped everyone, gave everyone their own merc healer and turned em all loose at once! It was funny to watch them fight over spawns lol.
 
I ran this two days ago (I was a slacker and never got around to running this for my bot army) I just degouped everyone, gave everyone their own merc healer and turned em all loose at once! It was funny to watch them fight over spawns lol.


Thats exactly what I did.. the poor druid took forever, but I ended up bringing my BL over and grouped him and assisted the druid. Also just /afol on the druid and it worked nicely
 
Once the toon gets the task, hails the first npc and then goes to the mercenary's corpse, instead of continuing with the attack of the worry wraith it loops through something to the effect of step 3 done? step 4 done? and so on to the end and the macro ends. if you start it again it goes through till the end. Any insight on fixing this broken step? Really like to see this work from start to finish. Thanks for any input.

Update: Narrowed this down to the invis. With invis on at mercenary it skips through the rest. i added a /makevisible at this step and it worked great, then had another issue, after killing the two worry wraiths i tried to invis to run back to spellman and i was out of potions, therefore just stood there waiting for invis. lol Going to work on this a little more.
 
Last edited:
This works great with potions or without potions. Is there any way to get it to continue if you run out of potions in the middle of the quest? Thanks in advance for anyone that can help out.
[CODE lang="ini" title="Heroism"]| No Heroism Without Fear macro by eqmule 2019
| Instructions:
| Start in feerrott the dream.
| /mac Heroism
| I tested on a sk with a apprentice II healer merc
| Pre Reqs: mq2nav mq2melee and mq2 built later than oct 02 2019
| Uses Approximatley 25 Invis Potions

#warning
#turbo 120
#define /message "/echo \at[\ayPKF\at]\aw "

Sub Main
/if (${Bool[${Plugin[MQ2AutoLoot]}]}) {
/if (${AutoLoot.Active}) {
/autoloot turn off
}
}
/target clear
/attack off
/declare invisspell string outer NULL
/declare invisspellname string outer
/declare myTargetID int outer 0

/if (${FindItem[Cloudy Potion].ID}) {
/varset invisspell Cloudy Potion
/varset invisspellname Invisibility
}
/if (${FindItem[Philter of Shadows].ID}) {
/varset invisspell Philter of Shadows
/varset invisspellname Invisibility
}
/if (${Me.Class.Name.Equal[Druid]}) {
/varset invisspell Innate Camouflage
/varset invisspellname Camouflage
}
/if (${Me.Class.Name.Equal[Bard]}) {
/varset invisspell Shauri's Sonorous Clouding
/varset invisspellname Shauri's Sonorous Clouding
}
/if (${Me.Class.Name.Equal[Shadow Knight]}) {
/varset invisspell Cloak of Shadows
/varset invisspellname Cloak of Shadows
}
/if (${Me.Class.Name.Equal[Magician]} || ${Me.Class.Name.Equal[Enchanter]}) {
/varset invisspell Perfected Invisibility
/varset invisspellname Perfected Invisibility:Permanent
}
/echo invisspell is: ${invisspell}
/if (${invisspell.Equal[NULL]}) {
/echo well, you have no invis spell set, might want to add one to the macro.
}
| See if we have the task, and request it if not:
/call CheckTask "No Heroism Without Fear" "npc Drolmer" "Help"

| ${Task[No Heroism Without Fear].Step.Index}
| No Heroism Without Fear:
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Vekman" 1
/call GoToNPC "No Heroism Without Fear" "npc a merc" 2
/call KillNPC "No Heroism Without Fear" "npc worry" 3
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Vekman" 4
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Spelner" 5
/call KillNPC "No Heroism Without Fear" "npc crazed mercena" 6
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Spelner" 7
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Elgron" 8
/call KillNPC2 "No Heroism Without Fear" "npc thoughtbleeder" "npc amygdalan" 9
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Elgron" 10
|get 3 Dreamwalker's Amygdala
|/echo ${Task[No Heroism Without Fear].Objective[11].CurrentCount}
|/echo ${Task[No Heroism Without Fear].Objective[11].RequiredCount}
/call KillAndLoot "No Heroism Without Fear" "npc dreamwalker" 90850 11
/call Collect "No Heroism Without Fear" "red mushroom" 12
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Elgron" 13
/call GoToNPC "No Heroism Without Fear" "npc merc boldron" 14
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc merc boldron" 15
/call KillNPC "No Heroism Without Fear" "npc dracolich" 16
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc merc boldron" 17
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Drolmer" 18
/beep
/return

Sub Collect(string tname,string what,int stinde)
:collect_loop
/while (${Cursor.ID}) {
/autoinv
/delay 1s !${Cursor.ID}
/delay 1s
}
/if (${Task[${tname}].Step.Index}==${stinde}) {
/itemtarget ${what}
/delay 2s ${Ground.ID}
/if (${Ground.DisplayName.Equal[*Red Mushroom]}) {
/nav item
/delay 2s ${Navigation.Active}==TRUE
/delay 60s ${Navigation.Active}==FALSE
/click left item
}
/delay 1s
/goto :collect_loop
} else {
/echo already did step ${stinde} ${Task[${tname}].Objective[${stinde}]}
}
/return

Sub KillNPC(string tname,string kmobfilter,int kstep)
:step_loop
/makemevisible
/delay 5s
/if (${Task[${tname}].Step.Index}==${kstep}) {
/varset myTargetID 0
/echo [${Time}] time to grab a ${kmobfilter}
/call FindMob "${kmobfilter}"
/if (${myTargetID}) {
/call GoToNPC "${tname}" "id ${myTargetID}" ${kstep}
/attack on
/delay 5s ${Me.XTarget}
/while (${Me.XTarget}) {
/delay 5
/if (!${Me.Combat} && ${Target.ID}) {
/attack on
}
/if (${Target.ID} && ${Target.State.Equal[FEIGN]}) {
/attack off
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (${Target.ID} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (!${Target.ID} && ${Me.XTarget}) {
/tar id ${Me.XTarget[1].ID}
/delay 5s ${Target.ID}==${Me.XTarget[1].ID}
}
}
}
/delay 5s

/goto :step_loop
} else {
/echo already did step ${kstep} ${Task[${tname}].Objective[${kstep}]}
}
/return

Sub KillNPC2(string tname,string kmobfilter1,string kmobfilter2,int kstep)
:step_loop
/if (${Task[${tname}].Step.Index}==${kstep}) {
/varset myTargetID 0
/echo [${Time}] time to grab ${kmobfilter1} and ${kmobfilter2}
/call FindMob "${kmobfilter1}" "${kmobfilter2}"
/if (${myTargetID}) {
/call GoToNPC "${tname}" "id ${myTargetID}" ${kstep}
/attack on
/delay 5s ${Me.XTarget}
/while (${Me.XTarget}) {
/delay 1
/if (!${Me.Combat} && ${Target.ID}) {
/attack on
}
/if (${Target.ID} && ${Target.State.Equal[FEIGN]}) {
/attack off
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (${Target.ID} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (!${Target.ID} && ${Me.XTarget}) {
/tar id ${Me.XTarget[1].ID}
/delay 1s ${Target.ID}==${Me.XTarget[1].ID}
}
}
}
/delay 1s

/goto :step_loop
} else {
/echo already did step ${kstep} ${Task[${tname}].Objective[${kstep}]}
}
/return

Sub SpeakToNPC(string thetask,string msg,string speakname,int stepidx)
/if (${Task[${thetask}].Step.Index}==${stepidx}) {
/call GoToNPC "${thetask}" "${speakname}" ${stepidx}
/makemevisible
/delay 5s
/if (${msg.Equal[Hail]}) {
/keypress HAIL
} else {
/say ${msg}
}
/delay 2s ${Task[${thetask}].Step.Index}!=${stepidx}
/delay 1s
} else {
/echo already did step ${stepidx} ${Task[${thetask}].Objective[${stepidx}]}
/return
}
/return

Sub KillAndLoot(string thtask,string mobfilter,int LootID,int steidx)
/declare i int local 1
:kill_loop
/if (${Task[${thtask}].Objective[${steidx}].CurrentCount} == ${Task[${thtask}].Objective[${steidx}].RequiredCount} ) {
/echo already did step ${steidx} ${Task[${thtask}].Objective[${steidx}]}
/return
}
/if (${AdvLoot.PCount}) {
/for i 1 to ${AdvLoot.PCount}
|/echo ${AdvLoot.PList[${i}].Name}
/if (${AdvLoot.PList[${i}].ID}==${LootID}) {
/beep
/echo we got a ${AdvLoot.PList[${i}].Name}!
/advloot personal ${i} loot
/delay 3s !${AdvLoot.LootInProgress}
/if (${Task[${thtask}].Objective[${steidx}].CurrentCount} == ${Task[${thtask}].Objective[${steidx}].RequiredCount} ) {
/return
}
}
/next i
}
/varset myTargetID 0
/call FindMob "${mobfilter}"
/if (${myTargetID}) {
/call GoToNPC "${thtask}" "id ${myTargetID}" ${steidx}
/attack on
/delay 5s ${Me.XTarget}
/while (${Me.XTarget}) {
/delay 1
/if (!${Me.Combat} && ${Target.ID}) {
/attack on
}
/if (${Target.ID} && ${Target.State.Equal[FEIGN]}) {
/attack off
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (${Target.ID} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (!${Target.ID} && ${Me.XTarget}) {
/tar id ${Me.XTarget[1].ID}
/delay 2s ${Target.ID}==${Me.XTarget[1].ID}
}
}
/if (${AdvLoot.PCount}) {
/for i 1 to ${AdvLoot.PCount}
/if (${AdvLoot.PList[${i}].ID}==${LootID}) {
/beep
/echo we got a ${AdvLoot.PList[${i}].Name}!
/advloot personal ${i} loot
/delay 3s !${AdvLoot.LootInProgress}
/if (${Task[${thtask}].Objective[${steidx}].CurrentCount} == ${Task[${thtask}].Objective[${steidx}].RequiredCount} ) {
/return
}
}
/next i
}
}
/goto :kill_loop
/return

Sub FindMob(string mobfiltera,string mobfilterb)
/declare mobfilter string local ${mobfiltera}
/declare MobsInRadius int local ${SpawnCount[${mobfilter}]}
/if (${MobsInRadius} == 0 && ${mobfilterb.Length} > 0) {
/varset mobfilter ${mobfilterb}
/varset MobsInRadius ${SpawnCount[${mobfilter}]}
}
/echo Found ${MobsInRadius} mobs I can choose from.
/declare MobCounter int local 0
/declare MobID int local 0
/declare PathLength float local 0
/declare MobIDDistance float local 0
/declare PathCount int local 1
/declare PathShortest int local 0
/declare MobIDValid int local 0

| Lets cut down on the time here a bit, we don't need to check more than 10 mobs in our vicinity, everything above that is just unreasonable
| and when people are in huge zones, it will take forever to parse through...
/if (${MobsInRadius} > 25) {
/varset MobsInRadius 25
}
/varset myTargetID 0
/if (${MobsInRadius} > 0) {
/for MobCounter 1 to ${MobsInRadius}
/varset MobID ${NearestSpawn[${MobCounter},${mobfilter}].ID}
/if (${Select[${Spawn[ID ${MobID}].Type},AURA,BANNER,CAMPFIRE,CORPSE,CHEST,ITEM,TRIGGER,TRAP,TIMER,MOUNT,MERCENARY,OBJECT]}) /continue

/varset PathLength ${Navigation.PathLength[id ${MobID}]}
/if (${PathLength} > 0) {
/if (${PathCount}==1) {
/varset myTargetID ${MobID}
/varset PathShortest ${PathLength}
} else /if (${PathLength} <= ${PathShortest}) {
/varset myTargetID ${MobID}
/varset PathShortest ${PathLength}
}
/varcalc PathCount ${PathCount}+1
}
/next MobCounter

/if (${myTargetID}) /message \agPulling \at${Spawn[${myTargetID}].Name}(${myTargetID}) \axat \ay${PathShortest} \axfeet.
} else {

}
/return

Sub CheckTask(string taskname,string npcfilter,string keyword)
| Ok First things first, do we actually have the task?
/if (${Task[${taskname}].ID} > 0) {
/echo we have the ${taskname} task
} else {
/call GoToNPC "${taskname}" "${npcfilter}" -1
/makemevisible
/delay 1s
/say ${keyword}
/delay 5s ${Window[TaskSelectWnd].Open}
/if (${Window[TaskSelectWnd].Open}) {
/notify TaskSelectWnd TSEL_AcceptButton leftmouseup
/delay 2s ${Task[${taskname}].ID} > 0
}
/if (${Task[${taskname}].ID} == 0) {
/beep
/echo sorry but I could not grab the task ${taskname}, ending macro.
/end
}
}
/return

Sub GoToNPC(string ttask,string filter,int stindex,bool dontcheckinvis)
/if (${Task[${ttask}].Step.Index}==${stindex} || ${stindex}==-1) {
/if (!${dontcheckinvis}) {
/echo im checking invis ${dontcheckinvis}
/call CheckInvis
} else {
/echo no reason to check invis
}
/nav id ${Spawn[${filter}].ID}
/delay 2s ${Navigation.Active}==TRUE
/delay 120s ${Navigation.Active}==FALSE
/target id ${Spawn[${filter}].ID}
/delay 1s ${Target.ID}==${Spawn[${filter}].ID}
} else {
/echo already did step ${stindex} ${Task[${ttask}].Objective[${stindex}]}
}
/return

Sub CheckInvis
/if (${invisspell.Equal[NULL]}) {
/return
}
/declare needinvis int local 0
:NEEDINVIS
/if (${Me.Invis}==TRUE) /return
/varset needinvis 0
|/if (${Me.Invis}==FALSE && ${Select[${Me.Class.ShortName},SHD,MAG,DRU]}) {
/if (${Me.Invis}==FALSE) {
/varset needinvis 1
}
/if (${needinvis}) {
/if (${Me.Casting.ID}==0) {
/if (${Me.AltAbilityReady[${invisspell}]}) {
/alt act ${Me.AltAbility[${invisspell}].ID}
|/echo whups im not AA invis, lets fix that
/delay 5
} else {
/if (${FindItem[Cloudy Potion].ID}) {
/useitem "Cloudy Potion"
/echo whups im not invis lets fix that
/delay 5
}
/if (${FindItem[Philter of Shadows].ID}) {
/useitem "Philter of Shadows"
/echo whups im not invis lets fix that
/delay 5
}

}
/delay 1
}
} else {
/delay 1
}
/goto :NEEDINVIS
}
/return[/CODE]
 
Last edited by a moderator:
Might not be pretty, but it works. Added Philter of Shadows, and continues the task if you run out of potions.
[CODE lang="ini" title="Heroism"]
| No Heroism Without Fear macro by eqmule 2019
| Instructions:
| Start in feerrott the dream.
| /mac Heroism
| I tested on a sk with a apprentice II healer merc
| Pre Reqs: mq2nav mq2melee and mq2 built later than oct 02 2019
| Uses Approximatley 25 Invis Potions,
| And or Cloudy Potion, Philter of Shadows.
| If you run out of invis potions it will continue without them

#warning
#turbo 120
#define /message "/echo \at[\ayPKF\at]\aw "

Sub Main
/if (${Bool[${Plugin[MQ2AutoLoot]}]}) {
/if (${AutoLoot.Active}) {
/autoloot turn off
}
}
/target clear
/attack off
/declare invisspell string outer NULL
/declare invisspellname string outer
/declare myTargetID int outer 0

/if (${FindItem[Cloudy Potion].ID}) {
/varset invisspell Cloudy Potion
/varset invisspellname Invisibility
}
/if (${FindItem[Philter of Shadows].ID}) {
/varset invisspell Philter of Shadows
/varset invisspellname Invisibility
}
/if (${Me.Class.Name.Equal[Druid]}) {
/varset invisspell Innate Camouflage
/varset invisspellname Camouflage
}
/if (${Me.Class.Name.Equal[Bard]}) {
/varset invisspell Shauri's Sonorous Clouding
/varset invisspellname Shauri's Sonorous Clouding
}
/if (${Me.Class.Name.Equal[Shadow Knight]}) {
/varset invisspell Cloak of Shadows
/varset invisspellname Cloak of Shadows
}
/if (${Me.Class.Name.Equal[Magician]} || ${Me.Class.Name.Equal[Enchanter]}) {
/varset invisspell Perfected Invisibility
/varset invisspellname Perfected Invisibility:Permanent
}
/echo invisspell is: ${invisspell}
/if (${invisspell.Equal[NULL]}) {
/echo well, you have no invis spell set, might want to add one to the macro.
}
| See if we have the task, and request it if not:
/call CheckTask "No Heroism Without Fear" "npc Drolmer" "Help"

| ${Task[No Heroism Without Fear].Step.Index}
| No Heroism Without Fear:
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Vekman" 1
/call GoToNPC "No Heroism Without Fear" "npc a merc" 2
/call KillNPC "No Heroism Without Fear" "npc worry" 3
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Vekman" 4
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Spelner" 5
/call KillNPC "No Heroism Without Fear" "npc crazed mercena" 6
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Spelner" 7
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Elgron" 8
/call KillNPC2 "No Heroism Without Fear" "npc thoughtbleeder" "npc amygdalan" 9
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Elgron" 10
|get 3 Dreamwalker's Amygdala
|/echo ${Task[No Heroism Without Fear].Objective[11].CurrentCount}
|/echo ${Task[No Heroism Without Fear].Objective[11].RequiredCount}
/call KillAndLoot "No Heroism Without Fear" "npc dreamwalker" 90850 11
/call Collect "No Heroism Without Fear" "red mushroom" 12
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Elgron" 13
/call GoToNPC "No Heroism Without Fear" "npc merc boldron" 14
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc merc boldron" 15
/call KillNPC "No Heroism Without Fear" "npc dracolich" 16
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc merc boldron" 17
/call SpeakToNPC "No Heroism Without Fear" "Hail" "npc Drolmer" 18
/beep
/return

Sub Collect(string tname,string what,int stinde)
:collect_loop
/while (${Cursor.ID}) {
/autoinv
/delay 1s !${Cursor.ID}
/delay 1s
}
/if (${Task[${tname}].Step.Index}==${stinde}) {
/itemtarget ${what}
/delay 2s ${Ground.ID}
/if (${Ground.DisplayName.Equal[*Red Mushroom]}) {
/nav item
/delay 2s ${Navigation.Active}==TRUE
/delay 60s ${Navigation.Active}==FALSE
/click left item
}
/delay 1s
/goto :collect_loop
} else {
/echo already did step ${stinde} ${Task[${tname}].Objective[${stinde}]}
}
/return

Sub KillNPC(string tname,string kmobfilter,int kstep)
:step_loop
/makemevisible
/delay 5s
/if (${Task[${tname}].Step.Index}==${kstep}) {
/varset myTargetID 0
/echo [${Time}] time to grab a ${kmobfilter}
/call FindMob "${kmobfilter}"
/if (${myTargetID}) {
/call GoToNPC "${tname}" "id ${myTargetID}" ${kstep}
/attack on
/delay 5s ${Me.XTarget}
/while (${Me.XTarget}) {
/delay 5
/if (!${Me.Combat} && ${Target.ID}) {
/attack on
}
/if (${Target.ID} && ${Target.State.Equal[FEIGN]}) {
/attack off
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (${Target.ID} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (!${Target.ID} && ${Me.XTarget}) {
/tar id ${Me.XTarget[1].ID}
/delay 5s ${Target.ID}==${Me.XTarget[1].ID}
}
}
}
/delay 5s

/goto :step_loop
} else {
/echo already did step ${kstep} ${Task[${tname}].Objective[${kstep}]}
}
/return

Sub KillNPC2(string tname,string kmobfilter1,string kmobfilter2,int kstep)
:step_loop
/if (${Task[${tname}].Step.Index}==${kstep}) {
/varset myTargetID 0
/echo [${Time}] time to grab ${kmobfilter1} and ${kmobfilter2}
/call FindMob "${kmobfilter1}" "${kmobfilter2}"
/if (${myTargetID}) {
/call GoToNPC "${tname}" "id ${myTargetID}" ${kstep}
/attack on
/delay 5s ${Me.XTarget}
/while (${Me.XTarget}) {
/delay 1
/if (!${Me.Combat} && ${Target.ID}) {
/attack on
}
/if (${Target.ID} && ${Target.State.Equal[FEIGN]}) {
/attack off
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (${Target.ID} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (!${Target.ID} && ${Me.XTarget}) {
/tar id ${Me.XTarget[1].ID}
/delay 1s ${Target.ID}==${Me.XTarget[1].ID}
}
}
}
/delay 1s

/goto :step_loop
} else {
/echo already did step ${kstep} ${Task[${tname}].Objective[${kstep}]}
}
/return

Sub SpeakToNPC(string thetask,string msg,string speakname,int stepidx)
/if (${Task[${thetask}].Step.Index}==${stepidx}) {
/call GoToNPC "${thetask}" "${speakname}" ${stepidx}
/makemevisible
/delay 5s
/if (${msg.Equal[Hail]}) {
/keypress HAIL
} else {
/say ${msg}
}
/delay 2s ${Task[${thetask}].Step.Index}!=${stepidx}
/delay 1s
} else {
/echo already did step ${stepidx} ${Task[${thetask}].Objective[${stepidx}]}
/return
}
/return

Sub KillAndLoot(string thtask,string mobfilter,int LootID,int steidx)
/declare i int local 1
:kill_loop
/if (${Task[${thtask}].Objective[${steidx}].CurrentCount} == ${Task[${thtask}].Objective[${steidx}].RequiredCount} ) {
/echo already did step ${steidx} ${Task[${thtask}].Objective[${steidx}]}
/return
}
/if (${AdvLoot.PCount}) {
/for i 1 to ${AdvLoot.PCount}
|/echo ${AdvLoot.PList[${i}].Name}
/if (${AdvLoot.PList[${i}].ID}==${LootID}) {
/beep
/echo we got a ${AdvLoot.PList[${i}].Name}!
/advloot personal ${i} loot
/delay 3s !${AdvLoot.LootInProgress}
/if (${Task[${thtask}].Objective[${steidx}].CurrentCount} == ${Task[${thtask}].Objective[${steidx}].RequiredCount} ) {
/return
}
}
/next i
}
/varset myTargetID 0
/call FindMob "${mobfilter}"
/if (${myTargetID}) {
/call GoToNPC "${thtask}" "id ${myTargetID}" ${steidx}
/attack on
/delay 5s ${Me.XTarget}
/while (${Me.XTarget}) {
/delay 1
/if (!${Me.Combat} && ${Target.ID}) {
/attack on
}
/if (${Target.ID} && ${Target.State.Equal[FEIGN]}) {
/attack off
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (${Target.ID} && ${Target.Type.Equal[Corpse]}) {
/squelch /target clear
/delay 1s !${Target.ID}
}
/if (!${Target.ID} && ${Me.XTarget}) {
/tar id ${Me.XTarget[1].ID}
/delay 2s ${Target.ID}==${Me.XTarget[1].ID}
}
}
/if (${AdvLoot.PCount}) {
/for i 1 to ${AdvLoot.PCount}
/if (${AdvLoot.PList[${i}].ID}==${LootID}) {
/beep
/echo we got a ${AdvLoot.PList[${i}].Name}!
/advloot personal ${i} loot
/delay 3s !${AdvLoot.LootInProgress}
/if (${Task[${thtask}].Objective[${steidx}].CurrentCount} == ${Task[${thtask}].Objective[${steidx}].RequiredCount} ) {
/return
}
}
/next i
}
}
/goto :kill_loop
/return

Sub FindMob(string mobfiltera,string mobfilterb)
/declare mobfilter string local ${mobfiltera}
/declare MobsInRadius int local ${SpawnCount[${mobfilter}]}
/if (${MobsInRadius} == 0 && ${mobfilterb.Length} > 0) {
/varset mobfilter ${mobfilterb}
/varset MobsInRadius ${SpawnCount[${mobfilter}]}
}
/echo Found ${MobsInRadius} mobs I can choose from.
/declare MobCounter int local 0
/declare MobID int local 0
/declare PathLength float local 0
/declare MobIDDistance float local 0
/declare PathCount int local 1
/declare PathShortest int local 0
/declare MobIDValid int local 0

| Lets cut down on the time here a bit, we don't need to check more than 10 mobs in our vicinity, everything above that is just unreasonable
| and when people are in huge zones, it will take forever to parse through...
/if (${MobsInRadius} > 25) {
/varset MobsInRadius 25
}
/varset myTargetID 0
/if (${MobsInRadius} > 0) {
/for MobCounter 1 to ${MobsInRadius}
/varset MobID ${NearestSpawn[${MobCounter},${mobfilter}].ID}
/if (${Select[${Spawn[ID ${MobID}].Type},AURA,BANNER,CAMPFIRE,CORPSE,CHEST,ITEM,TRIGGER,TRAP,TIMER,MOUNT,MERCENARY,OBJECT]}) /continue

/varset PathLength ${Navigation.PathLength[id ${MobID}]}
/if (${PathLength} > 0) {
/if (${PathCount}==1) {
/varset myTargetID ${MobID}
/varset PathShortest ${PathLength}
} else /if (${PathLength} <= ${PathShortest}) {
/varset myTargetID ${MobID}
/varset PathShortest ${PathLength}
}
/varcalc PathCount ${PathCount}+1
}
/next MobCounter

/if (${myTargetID}) /message \agPulling \at${Spawn[${myTargetID}].Name}(${myTargetID}) \axat \ay${PathShortest} \axfeet.
} else {

}
/return

Sub CheckTask(string taskname,string npcfilter,string keyword)
| Ok First things first, do we actually have the task?
/if (${Task[${taskname}].ID} > 0) {
/echo we have the ${taskname} task
} else {
/call GoToNPC "${taskname}" "${npcfilter}" -1
/makemevisible
/delay 1s
/say ${keyword}
/delay 5s ${Window[TaskSelectWnd].Open}
/if (${Window[TaskSelectWnd].Open}) {
/notify TaskSelectWnd TSEL_AcceptButton leftmouseup
/delay 2s ${Task[${taskname}].ID} > 0
}
/if (${Task[${taskname}].ID} == 0) {
/beep
/echo sorry but I could not grab the task ${taskname}, ending macro.
/end
}
}
/return

Sub GoToNPC(string ttask,string filter,int stindex,bool dontcheckinvis)
/if (${Task[${ttask}].Step.Index}==${stindex} || ${stindex}==-1) {
/if (!${dontcheckinvis}) {
/echo im checking invis ${dontcheckinvis}
/call CheckInvis
} else {
/echo no reason to check invis
}
/nav id ${Spawn[${filter}].ID}
/delay 2s ${Navigation.Active}==TRUE
/delay 120s ${Navigation.Active}==FALSE
/target id ${Spawn[${filter}].ID}
/delay 1s ${Target.ID}==${Spawn[${filter}].ID}
} else {
/echo already did step ${stindex} ${Task[${ttask}].Objective[${stindex}]}
}
/return

Sub CheckInvis
/if (${invisspell.Equal[NULL]}) {
/return
}
/declare needinvis int local 0
:NEEDINVIS
/if (${Me.Invis}==TRUE) /return
/varset needinvis 0
|/if (${Me.Invis}==FALSE && ${Select[${Me.Class.ShortName},SHD,MAG,DRU]}) {
/if (${Me.Invis}==FALSE) {
/varset needinvis 1
}
/if (${needinvis}) {
/if (${Me.Casting.ID}==0) {
/if (${Me.AltAbilityReady[${invisspell}]}) {
/alt act ${Me.AltAbility[${invisspell}].ID}
|/echo whups im not AA invis, lets fix that
/delay 5
} else {
/if (${FindItem[Cloudy Potion].ID}) {
/useitem "Cloudy Potion"
/echo whups im not invis lets fix that
/delay 5
}
/if (${FindItem[Philter of Shadows].ID}) {
/useitem "Philter of Shadows"
/echo whups im not invis lets fix that
/delay 5
}
/if (!${FindItem[Cloudy Potion].ID} && !${FindItem[Philter of Shadows].ID}) {
/echo No Potions Continue without them
/return
/delay 5
}

}
/delay 1
}
} else {
/delay 1
}
/goto :NEEDINVIS
}
/return
[/CODE]
 
Last edited:
I just started a new-ish charater that has no Heroic or anything.. so this Mac wil be great. I'll try it out later. :) TY for the work to the Creators !
 
Just ran this on three toons. (Rangers and Rogue)
Ran without and large issues.
Only thing it did not do was click the Yes button to loot the no drop items. As noted, its not an AFK macro.
 
I did this in a group of three, it was pretty awesome, the only thing is it stopped on the last hail before the dracolich encounter. Not a huge deal as I followed instructions and didnt AFK this macro!
 
I did this in a group of three, it was pretty awesome, the only thing is it stopped on the last hail before the dracolich encounter. Not a huge deal as I followed instructions and didnt AFK this macro!
Glad it worked out for you. Not sure what would have caused the missing hail. Did you run them all in one group? Possibly running three toons, one may have cast invis on a toons before the hail and the npc didn't respond. If they were all three out of group and it happened on all three then I would have to look at the macro and see what might have changed.
 
So, I'm usually WAY behind in getting the cool Macros up and running and I just installed this today for a new 85 Heroic Beastie that I'm adding to my list. I got him a starter T5 Healer Merc to run with and I had two issues (which I'm sure are my fault, but wanted to bring up for anyone that is giving this a go for the first time):
  1. Per the notes above, I grabbed two stacks of Cloudy Potions from PoK before I went - my guy used up all 40 potions before I got to Step 5 (not sure why I burned through them so quickly, but I went back to PoK and bought 5 more stacks, ha ha!).
  2. The Cloudy Potions didn't do me any good when my Beastie ran by a Lizzy Mystic on the way to the Lizzy Dreamwalkers - ended up pulling a nice team of 5 DB and White /con mobs that made short order of my Merc and me.
Like it says above, this is not a "fire and forget" Macro, but before someone else started it up I wanted to point out that you might want to keep an eye out and manually move to the Dreamwalkers. 😉

Great Macro overall, tho!
 
Release No Heroism Without Fear macro by EqMule

Users who are viewing this thread

Back
Top
Cart