I actually posted this a few weeks ago, but I figured that since people didn't really seem to see it in the thread where it was (wasn't related to the original question), I'd post them again, along with some of my other more specialized macros.
The first is a modified version of AFKnecro.mac, by EQBotMan.
A few notes: I've updated this a little bit. Make sure to switch the rune from Dull Pain to whatever you use. Make sure to update your nukes and dots; I have ancients, and that is reflected in this. I've also changed the setting that does miragul's legs to activate the Tacvi dagger, Dagger of Death, instead of the pants. You'll need to change Mind Flay to Mind Wrack if you don't have MF. I added in a few things, one of these being a popup when you get a GoM proc that stays up until GoM fades. Oh, and I think that there's some MQ2Cast stuff in there from my additions...so...have that loaded. Also, as I've gone through and sliced'n'diced some stuff, bunches of that code have become obsolete...but I've been too lazy to remember to cut it out, so if you run across a sub that has no call to it...that's probably why.
I added in a few events and commands as well...yeah. Basically, if you're going to use it, read through the whole thing. I'll say this much, though: I have zero problem with leaving this macro running for hours in a group that doesn't move. If the group is moving, I'd run it and move the toon myself, and let the macro handle the casting.
Updates!
Cut down a lot of crazy code. The macro went from about 1800 lines to 960 lines...which should reduce memory usage by a huge amount.
While I was cutting down, I removed a few things...no more GMcheck, no more make pet, no more /echo invis, no more DMF by tells, etc. On the whole, I think that the changes are majorly for the better.
Updated for TSS!
With the release of the expansion, many things have changed. Thanks to the combat state regen and stuff, dynamic mana consumption is no longer needed or desirable. I also updated the spells to be new.
The biggest change is in how GoM works. Because of both Dread and Ashengate Pyre being in spell lines, GoM and GoRM procs now work like this:
If you have bigdots on...(by doing /echo bigdot) then when you get a GoM proc, you will cast DP. When you get a GoRM proc, you will cast AP.
I also updated Grave Pact -> Otherside, and removed the rune stuff, because it took up a spell slot!
Updated ONCE AGAIN
In this update, I've done a few things.
-Removed the "Curse" option for dots. Why? Because it simply wasn't being activated when I used the macro. Just swap your Curse dot into one of your other slots.
-Significantly changed the way that nuking is done to deal with using the spell Demand for Blood. The nuking subroutine now nukes until you get a Chaotic Power proc, then doesn't nuke until it wears off. It also will automatically lifetap on the next Nuke cycle if you go below 90% hp.
-You no longer need to reactivate bigdots if you restart the macro.
-Added "/echo CP" for toggling the Chaotic Power nuke feature. If CP is off (default), there will not be nuking unless your HP is low.
The first is a modified version of AFKnecro.mac, by EQBotMan.
A few notes: I've updated this a little bit. Make sure to switch the rune from Dull Pain to whatever you use. Make sure to update your nukes and dots; I have ancients, and that is reflected in this. I've also changed the setting that does miragul's legs to activate the Tacvi dagger, Dagger of Death, instead of the pants. You'll need to change Mind Flay to Mind Wrack if you don't have MF. I added in a few things, one of these being a popup when you get a GoM proc that stays up until GoM fades. Oh, and I think that there's some MQ2Cast stuff in there from my additions...so...have that loaded. Also, as I've gone through and sliced'n'diced some stuff, bunches of that code have become obsolete...but I've been too lazy to remember to cut it out, so if you run across a sub that has no call to it...that's probably why.
I added in a few events and commands as well...yeah. Basically, if you're going to use it, read through the whole thing. I'll say this much, though: I have zero problem with leaving this macro running for hours in a group that doesn't move. If the group is moving, I'd run it and move the toon myself, and let the macro handle the casting.
Updates!
Cut down a lot of crazy code. The macro went from about 1800 lines to 960 lines...which should reduce memory usage by a huge amount.
While I was cutting down, I removed a few things...no more GMcheck, no more make pet, no more /echo invis, no more DMF by tells, etc. On the whole, I think that the changes are majorly for the better.
Updated for TSS!
With the release of the expansion, many things have changed. Thanks to the combat state regen and stuff, dynamic mana consumption is no longer needed or desirable. I also updated the spells to be new.
The biggest change is in how GoM works. Because of both Dread and Ashengate Pyre being in spell lines, GoM and GoRM procs now work like this:
If you have bigdots on...(by doing /echo bigdot) then when you get a GoM proc, you will cast DP. When you get a GoRM proc, you will cast AP.
I also updated Grave Pact -> Otherside, and removed the rune stuff, because it took up a spell slot!
Updated ONCE AGAIN
In this update, I've done a few things.
-Removed the "Curse" option for dots. Why? Because it simply wasn't being activated when I used the macro. Just swap your Curse dot into one of your other slots.
-Significantly changed the way that nuking is done to deal with using the spell Demand for Blood. The nuking subroutine now nukes until you get a Chaotic Power proc, then doesn't nuke until it wears off. It also will automatically lifetap on the next Nuke cycle if you go below 90% hp.
-You no longer need to reactivate bigdots if you restart the macro.
-Added "/echo CP" for toggling the Chaotic Power nuke feature. If CP is off (default), there will not be nuking unless your HP is low.
Rich (BB code):
|
| AFKNecro.mac v2.1
| Originally written by EQBotMan, Updated, Upgrades, and made much better by TheZ
|
| Usage: /Macro AFKNecro <Tank Name> <Cast Health> <Stop Casting Health>
#Event CPower "[MQ2] cp"
#Event CPowerOn "Quivering power pulses through your hands."
#Event CPowerFade "The power fades away."
#Event GoM "You have been granted a gift of mana!"
#Event GoRM "You have been granted a gift of radiant mana!"
#event Bigdot "[MQ2] bigdot"
#Event Gone "Your gift of mana fades."
#Event Gone "Your gift of radiant mana fades."
#Event FD "#*#hits you for#*#"
#Event FD "#*#kicks you for#*#"
#Event FD "#*#bites you for#*#"
#Event FD "#*#bashes you for#*#"
#Event FD "#*#slashes you for#*#"
#Event FD "#*#pierces you for#*#"
#Event FD "#*#crushes you for#*#"
#Event FD "#*#You will not evade me ${Me}!#*#"
#Event Enrage "#*#has becomed ENRAGED#*#"
#Event Enrage "#*#is infuriated!#*#"
#Event EndEnrage "#*#is no longer ENRAGED#*#"
#Event EndEnrage "#*#is no longer infuriated.#*#"
#Event follow "[MQ2] follow#*#"
#Event face "[MQ2] face"
#Event sit "[MQ2] sit"
#Event DoT1 "[MQ2] dot1"
#Event DoT2 "[MQ2] dot2"
#Event DoT3 "[MQ2] dot3"
#Event DoT4 "[MQ2] dot4"
#Event MAChange "[MQ2] ma #1#"
#Event SAChange "[MQ2] sa #1#"
#Event TAChange "[MQ2] ta #1#"
#Event DP "[MQ2] DP"
#Event Switch "[MQ2] switch"
#event slain "#*#has been slain#*#"
#event EXP "#*#gain experience!#*#"
#Event Status "[MQ2] status"
#Event LegProc "[MQ2] pyro"
#Event splurt "[MQ2] splurt"
#Event DynMana "[MQ2] dynmana"
#Event MWChange "[MQ2] MW"
#Event HighManaUseBit "[MQ2] usemoremana"
#Event StopNuke "[MQ2] Stopnuke"
#Event StartNuke "[MQ2] Startnuke"
Sub Main
/deletevar StopCastHealth
/deletevar CastHealth
/if (!${Defined[MainAssist]}) {
/declare MainAssist string global
/varset MainAssist ${Param0}
} else {
/varset MainAssist ${Param0}
}
/if (!${Defined[SecondAssist]}) {
/declare SecondAssist string global
}
/if (!${Defined[TripleAssist]}) {
/declare TripleAssist string global
}
/if (!${Defined[CPower]}) {
/declare CPower int global 0
}
/if (!${Defined[bigdot]}) {
/declare bigdot int global 0
}
/if (!${Defined[DoTBit1]}) {
/declare DoTBit1 int global
/varset DoTBit1 0
}
/if (!${Defined[DoTBit2]}) {
/declare DoTBit2 int global
/varset DoTBit3 0
}
/if (!${Defined[DoTBit3]}) {
/declare DoTBit3 int global
/varset DoTBit3 0
}
/if (!${Defined[DoTBit4]}) {
/declare DoTBit4 int global
/varset DoTBit4 0
}
/if (!${Defined[FaceBit]}) {
/declare FaceBit int global
/varset FaceBit 0
}
/if (!${Defined[SitBit]}) {
/declare SitBit int global
/varset SitBit 0
}
/if (!${Defined[LegProc]}) {
/declare LegProc int Global
/varset LegProc 0
}
/if (!${Defined[MWBit]}) {
/declare MWBit int Global
/varset MWBit 0
}
/if (!${Defined[CastHealth]}) {
/declare CastHealth int Global
/varset CastHealth ${Param1}
}
/if (!${Defined[StopCastHealth]}) {
/declare StopCastHealth int Global
/varset StopCastHealth ${Param2}
}
/if (!${Defined[DP]}) {
/declare DP int Global
/varset DP 0
}
/if (!${Defined[FDBit]}) {
/declare FDBit int Global
/varset FDBit 1
}
/deletevar DoT1
/deletevar DoT2
/deletevar DoT3
/deletevar DoT4
/deletevar DoTSpell1
/deletevar DoTSpell2
/deletevar DoTSpell3
/deletevar DoTSpell4
/deletevar PetAttackTimer
/deletevar MWTimer
/deletevar gom
/deletevar gorm
/deletevar CPCount
/declare MWTimer timer global
/declare CPCount int global 0
/declare DoT1 int global
/declare DoT2 int global
/declare DoT3 int global
/declare DoT4 int global
/declare Pyro timer outer
/declare DoTSpell1 string global
/declare DoTSpell2 string global
/declare DoTSpell3 string global
/declare DoTSpell4 string global
/declare PetAttackTimer timer global
/declare CurrentTarget int outer
/declare LifetapNuke string outer
/declare CPNuke string outer
/declare MinTargetLevel int outer
/declare gom int global 0
/declare gorm int global 0
/declare CPowerOn int global 0
/varset Pyro 0
/varset PetAttackTimer 0
/varset MinTargetLevel 50
/varset DoTSpell1 "Curse of Mortality"
/varset DoTSpell2 "Chaos Venom"
/varset DoTSpell3 "Vakk`Dra's Sickly Mists Rk. II"
/varset DoTSpell4 "Corath Venom"
/varset CPNuke "Demand for Blood"
/varset LifetapNuke "Drain Life"
/if (!${Defined[CurrentNuke]}) {
/declare CurrentNuke string Global
}
/varset CurrentNuke ${CPNuke}
/call Event_Status
/echo waiting for initial target . . .
/if (!${Defined[${Param1}]} && !${Defined[${Param2}]}) {
} else /if (${CastHealth}<=${StopCastHealth}) {
/echo Your Start Casting Health is elss than your and your Stop Casting Health. Macro will not function propery. Try setting to 90 and 10(/macro AFKNecro TANK 90 10). Ending the macro
/endmacro
}
|MAINLOOPMAINLOOPMAINLOOPMAINLOOPMAINLOOP
|MAINLOOPMAINLOOPMAINLOOPMAINLOOPMAINLOOP
:Continue
/if (${Me.Buff[Otherside Rk. II].Duration}<10) /cast "Otherside Rk. II"
/doevents
/call GetTarget
|After Macro gets a target this next giant line determines if its something it wants to attack.
/if (${Target.PctHPs}>=65 && ${Target.PctHPs}<=99 && ${Target.Type.Equal["NPC"]} && ${Target.Distance}<190 && ${Target.LineOfSight} && !${Me.Moving} && !${Me.Casting.ID}) {
|Sets the Current Target Based on the ID number of the mob spawn it the zone. This later comes into play when deciding that the mob has died
/varset CurrentTarget ${Target.ID}
/popup Target Aquired >>"${Target.CleanName}"<<
/echo Target Aquired >>"${Target.CleanName}"<<
/goto :StartCombat
} else {
/goto :Continue
}
|This loops during combat
:StartCombat
/call GetTarget
/call DoT1
/call GetTarget
/call pyro
/call DoT2
/call GetTarget
/call DoT3
/call GetTarget
/call DoT4
/if (${CPower}==1 && ${CPowerOn}==0 ||${Me.PctHPs}<=90) /call castnuke
/call MW
/doevents
|If the Mobs name of the CurrentTarget ID number has corpse...its dead...find a new target, start over, your done
/if (${String[${Spawn[${CurrentTarget}]}].Find["corpse"]}) {
/call Event_exp
/echo Current mob has Died
/varset DoT1 0
/varset DoT2 0
/varset DoT3 0
/varset DoT4 0
/if (!${Me.State.Equal[Stand]}) /stand
/goto :Continue
}
/goto :StartCombat
/return
Sub GetTarget
/if (${Me.Casting.ID}) /return
/if (${Me.Moving}) /return
/if (${Spawn[${MainAssist}].ID}) {
/assist ${MainAssist}
} else /if (${Spawn[${SecondAssist}].ID}) {
/assist ${SecondAssist}
} else /if (${Spawn[${TripleAssist}].ID}) {
/assist ${TripleAssist}
} else {
/echo None of your assigned tanks are in the zone, did you spell the name wrong?, pausing for 20 seconds...
/delay 20s
}
/return
Sub castnuke
:Loop0
/doevents
/if (!${Me.SpellReady[${CurrentNuke}]}) /goto :Loop0
/if (${Me.Moving}) /return
/if (!${Target.ID}) /return
/if (${SitBit}==1) {
/if (${Target.PctHPs}>${CastHealth} || ${Target.PctHPs}==0) {
/if (${Me.State.Equal["STAND"]}) /sit
/delay 2s
/return
}
} else {
/stand
}
|This next if then makes sure that you only send the pet once every 10 sec, if not it spams /pet attack..very annoying
/if (${Target.PctHPs}<=97 && !${String[${Target}].Find["corpse"]}>0 && ${Target.Type.Equal["NPC"]} && ${Target.Distance}<190 && ${PetAttackTimer}==0) {
/pet attack
/varset PetAttackTimer 100
}
| Do we still want to cast on the current Target? Yes? Ok then continue
/if (${Target.PctHPs}<=${CastHealth} && ${Me.SpellReady[${CurrentNuke}]} && ${Target.PctHPs}>${StopCastHealth} && ${Target.Type.Equal["NPC"]} && ${Target.Distance}<190 && ${Target.LineOfSight}) {
/if (${FaceBit}==1) {
/face fast nolook
/look 0
}
/echo Mob Detected, Casting ${CurrentNuke}
/stand
/if (${Me.PctHPs}>=90) /cast ${CurrentNuke}
/if (${Me.PctHPs}<90) /cast ${LifetapNuke}
/doevents
/delay 1s
/if (${CPower}==1 && ${CPowerOn}==0) {
/if (${Me.PctHPs}>=90) /cast ${CurrentNuke}
/if (${Me.PctHPs}<90) /cast ${LifetapNuke}
/doevents
}
/if (${CPower}==1 && ${CPowerOn}==0) {
/delay 1s
/if (${Me.PctHPs}>=90) /cast ${CurrentNuke}
/if (${Me.PctHPs}<90) /cast ${LifetapNuke}
/doevents
}
/if (${DP}==1) /call AAFD
}
/return
|procing of Miraguls legs if turned on
Sub Pyro
/if (${LegProc}==1 && ${Target.PctHPs}>=85 && ${Target.PctHPs}<=96 && ${Target.Level}>=${MinTargetLevel} && ${Pyro}==0 && ${Target.LineOfSight}) {
/if ((${Raid} && ${Target.PctHPs}>=20) || (!${Raid} && ${Target.PctHPs}>=75)) {
} else {
/return
}
:PyroLoop
/if (${Me.Casting.ID}) /goto :PyroLoop
/stand
/casting "Dagger of Death" item
/delay 2s
/varset Pyro 200
}
/return
|Procing the AA FD after each nuke subroutine
Sub AAFD
:DP
/if (${Me.Casting.ID}) /goto :DP
/alt activate 428
/alt activate 428
/alt activate 428
/delay 13
:Stand
/if (!${Me.State.Equal["STAND"]}) {
/stand
/delay 2
/goto :Stand
}
/return
|--------------------------------------
| This is a semi-complicated SubRoutine..good luck following it
|Basically if you are not FD it spams the AA FD until you are FD or you are dead.
|Once you are FD you will stand up in 15 seconds regardless of anything and attempt to summon a mount.
|If your attempt to summon a mount fails... oh well.
Sub Event_FD
/if (${FDBit}==0) {
/doevents flush
/return
}
/echo You are being hit! Trying to FD!
/stopcast
:top_of_FD
/if (${Me.State.Equal["FEIGN"]}) {
/echo You are FD, pausing script. You will automatically stand up when the mob is dead if you are above low health aggro. Or you can stand up manually to resume the script. Or you will stand up in 15 seconds reguardless.
:already_FD
/if (!${Me.State.Equal["FEIGN"]}) {
:StandUp
/delay 5
/stand
/delay 2
/echo You stood up, resuming script...
/return
} else {
/if (${Target.ID} && ${Me.PctHPs}>=75) /stand
/doevents flush
/delay 5
/goto :already_FD
}
} else /if (!${Me.State.Equal["FEIGN"]}) {
:not_FD_yet
/alt activate 428
/delay 2
/if (!${Me.State.Equal["FEIGN"]}) {
/goto :not_FD_yet
} else {
/timed 10 /stand
/goto :top_of_FD
}
}
/goto :top_of_FD
/return
Sub Event_exp
/pet follow
/pet back off
/pet hold
/return
|=======================================
|The upcoming subroutines are called via an echo to turn on/off the options for the macro
Sub Event_bigdot
/if (${bigdot}==0) {
/varset bigdot 1
/echo |===================================
/echo You will now cast Dread Pyre and Ashengate Pyre on GoM and GoRM procs
/echo |===================================
} Else /if (${bigdot}==1) {
/varset bigdot 0
/echo |===================================
/echo You will NOT cast Dread Pyre and Ashengate Pyre on GoM and GoRM procs
/echo |===================================
}
/return
|=======================================
Sub Event_CPower
/if (${CPower}==0) {
/varset CPower 1
/echo |===================================
/echo You will now cast Demand for Blood until you get a Chaotic Power Proc
/echo |===================================
} Else /if (${CPower}==1) {
/varset CPower 0
/echo |===================================
/echo You will NOT cast Demand for Blood
/echo |===================================
}
/return
|=======================================
Sub Event_sit
/if (${SitBit}==0) {
/varset SitBit 1
/if (${Me.State.Equal["STAND"]}) /sit
/echo |===================================
/echo You will now sit when the mob reaches "${StopCastHealth}" health. Your necro will not try to sit while moving but if he is still for more than 2 seconds he will sit. /Stick with MQ2MoveUtils works very well I recommend: /stick 10 behind hold
/echo |===================================
} Else /if (${SitBit}==1) {
/varset SitBit 0
/stand
/echo |===================================
/echo You will NOT Sit anymore after casting.
/echo |===================================
}
/return
|=======================================
Sub Event_face
/if (${FaceBit}==0) {
/varset FaceBit 1
/echo |===================================
/echo You will now face the mob right before you cast on it
/echo |===================================
} Else /if (${FaceBit}==1) {
/varset FaceBit 0
/stand
/echo |===================================
/echo You will now NOT face the mob before you cast on it
/echo |===================================
}
/return
|=======================================
Sub Event_LegProc
/if (${LegProc}==0) {
/varset LegProc 1
/echo |===================================
/echo You will proc your dagger
/echo |===================================
} Else /if (${LegProc}==1) {
/varset LegProc 0
/echo |===================================
/echo You will now NOT proc your dagger
/echo |===================================
}
/return
|=======================================
Sub Event_DoT1
/if (${DoTBit1}==0) {
/varset DoTBit1 1
/echo |===================================
/echo You will now cast ${DoTSpell1} "smartly" on a mob before chain nuking
/echo |===================================
} Else /if (${DoTBit1}==1) {
/varset DoTBit1 0
/echo |===================================
/echo You will now NOT cast ${DoTSpell1} "smartly" on a mob before chain nuking
/echo |===================================
}
/return
|=======================================
Sub Event_DoT2
/if (${DoTBit2}==0) {
/varset DoTBit2 1
/echo |===================================
/echo You will now cast ${DoTSpell2} "smartly" on a mob before chain nuking
/echo |===================================
} Else /if (${DoTBit2}==1) {
/varset DoTBit2 0
/echo |===================================
/echo You will now NOT cast ${DoTSpell2} "smartly" on a mob before chain nuking
/echo |===================================
}
/return
|=======================================
Sub Event_DoT3
/if (${DoTBit3}==0) {
/varset DoTBit3 1
/echo |===================================
/echo You will now cast ${DoTSpell3} "smartly" on a mob before chain nuking
/echo |===================================
} Else /if (${DoTBit3}==1) {
/varset DoTBit3 0
/echo |===================================
/echo You will now NOT cast ${DoTSpell3} "smartly" on a mob before chain nuking
/echo |===================================
}
/return
|=======================================
Sub Event_DoT4
/if (${DoTBit4}==0) {
/varset DoTBit4 1
/echo |===================================
/echo You will now cast ${DoTSpell4} "smartly" on a mob before chain nuking
/echo |===================================
} Else /if (${DoTBit4}==1) {
/varset DoTBit4 0
/echo |===================================
/echo You will now NOT cast ${DoTSpell4} "smartly" on a mob before chain nuking
/echo |===================================
}
/return
|=======================================
Sub Event_MWChange
/if (${MWBit}==0) {
/varset MWBit 1
/echo |===================================
/echo You will now cast mind flay on mobs
/echo |===================================
} Else /if (${MWBit}==1) {
/varset MWBit 0
/echo |===================================
/echo You will now NOT cast mind flay on mobs
/echo |===================================
}
/return
|=======================================
Sub Event_DP
/if (${DP}==0) {
/varset DP 1
/echo |===================================
/echo You will now cast your AA Death Peace in between Nukes
/echo |===================================
} Else /if (${DP}==1) {
/varset DP 0
/echo |===================================
/echo You will now NOT cast your AA Death Peace in between Nukes
/echo |===================================
}
/return
|=======================================
Sub Event_FDSwitchd
/if (${FDBit}==0) {
/varset FDBit 1
/echo |===================================
/echo Feigning when you are getting hit has been turned ON
/echo |===================================
} Else /if (${FDBit}==1) {
/varset FDBit 0
/echo |===================================
/echo Feigning when you are getting hit has been turned OFF
/echo |===================================
}
/return
|=======================================
Sub Event_MAChange(Zero, Name)
/echo ============================================
/echo Changing MA to ${Name}
/echo ============================================
/varset MainAssist ${Name}
/return
|======================================
Sub Event_SAChange(Zero, Name)
/echo ============================================
/echo Changing SA to ${Name}
/echo ============================================
/varset SecondAssist ${Name}
/return
|======================================
Sub Event_TAChange(Zero, Name)
/echo ============================================
/echo Changing TA to ${Name}
/echo ============================================
/varset TripleAssist ${Name}
/return
|======================================
Sub Event_Switch
/if (${String[${CurrentNuke}].Find[${CPNuke}]}>0) {
/varset CurrentNuke ${LifetapNuke}
/echo |===================================
/echo You will now cast ${LifetapNuke} as your nuke
/echo |===================================
} Else /if (${String[${CurrentNuke}].Find[${LifetapNuke}]}>0) {
/varset CurrentNuke ${CPNuke}
/echo |===================================
/echo You will now cast ${CPNuke} as your nuke
/echo |===================================
}
/return
|=======================================
Sub Event_StopNuke
/varset CastHealth 0
/varset StopCastHealth 0
/echo You will not nuke anymore
/return
|=======================================
Sub Event_StartNuke
/varset CastHealth 85
/varset StopCastHealth 0
/echo You will start nuking now
/return
|=======================================
Sub DoT1
/if (${DoT1}==0 && ${DoTBit1}==1 && ${Target.PctHPs}<=97 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/if (${String[${Target}].Find["corpse"]}>1 || ${Target.Distance}>190 || !${Target.ID}) /return
:Loop0
/doevents
/if (!${Me.SpellReady[${DoTSpell1}]}) /goto :Loop0
/if (${SitBit}==1 && ${Me.State.Equal["STAND"]} && (${Target.PctHPs}>${CastHealth} || ${Target.PctHPs}==0) ) {
/sit
/delay 2s
/return
}
/if (${FaceBit}==1) {
/face fast nolook
/look 0
}
/varset DoT1 1
/pet attack
/stand
/cast ${DoTSpell1}
/delay 2s
/cast ${DoTSpell1}
/delay 2s
/cast ${DoTSpell1}
/delay 2s
/if (${DP}==1) /call AAFD
:Loop1
/if (${Me.Casting.ID}) /goto :Loop1
/if (${LegProc}==0 && ${DP}==1) /call AAFD
}
/return
Sub DoT2
/if (${DoT2}==0 && ${DoTBit2}==1 && ${Target.PctHPs}>=20 && ${Target.PctHPs}<=95 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/if (${String[${Target}].Find["corpse"]}>1 || ${Target.Distance}>190 || !${Target.ID}) /return
:Loop0
/doevents
/if (!${Me.SpellReady[${DoTSpell2}]}) /goto :Loop0
/if (${SitBit}==1 && ${Me.State.Equal["STAND"]} && (${Target.PctHPs}>${CastHealth} || ${Target.PctHPs}==0) ) {
/sit
/delay 2s
/return
}
/if (${FaceBit}==1) {
/face fast nolook
/look 0
}
/varset DoT2 1
/pet attack
/stand
/cast ${DoTSpell2}
/delay 2s
/cast ${DoTSpell2}
/delay 2s
/cast ${DoTSpell2}
/delay 2s
/if (${DP}==1) /call AAFD
:Loop1
/if (${Me.Casting.ID}) /goto :Loop1
/if (${LegProc}==0 && ${DP}==1) /call AAFD
}
/return
Sub DoT3
/if (${DoT3}==0 && ${DoTBit3}==1 && ${Target.PctHPs}>=20 && ${Target.PctHPs}<=95 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/if (${String[${Target}].Find["corpse"]}>1 || ${Target.Distance}>190 || ${String[${Target}].Find["NULL"]}>0) /return
/if ((${Raid} && ${Target.PctHPs}>=20) || (!${Raid} && ${Target.PctHPs}>=75)) {
} else {
/return
}
:Loop0
/doevents
/if (!${Me.SpellReady[${DoTSpell3}]}) /goto :Loop0
/if (${SitBit}==1 && ${Me.State.Equal["STAND"]} && (${Target.PctHPs}>${CastHealth} || ${Target.PctHPs}==0) ) {
/sit
/delay 2s
/return
}
/if (${FaceBit}==1) {
/face fast nolook
/look 0
}
/varset DoT3 1
/pet attack
/stand
/cast ${DoTSpell3}
/stand
/delay 2s
/cast ${DoTSpell3}
/stand
/delay 2s
/cast ${DoTSpell3}
/delay 2s
/if (${DP}==1) /call AAFD
:Loop1
/if (${Me.Casting.ID}) /goto :Loop1
/if (${LegProc}==0 && ${DP}==1) /call AAFD
}
/return
|=======================================
|This is called after casting of your curse based spell if doting is turned ON
Sub DoT4
/if (${DoT4}==0 && ${DoTBit4}==1 && ${Target.PctHPs}>=20 && ${Target.PctHPs}<=95 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/if (${String[${Target}].Find["corpse"]}>1 || ${Target.Distance}>190 || ${String[${Target}].Find["NULL"]}>0) /return
/if ((${Raid} && ${Target.PctHPs}>=20) || (!${Raid} && ${Target.PctHPs}>=75)) {
} else {
/return
}
:Loop0
/doevents
/if (!${Me.SpellReady[${DoTSpell4}]}) /goto :Loop0
/if (${SitBit}==1 && ${Me.State.Equal["STAND"]} && (${Target.PctHPs}>${CastHealth} || ${Target.PctHPs}==0) ) {
/sit
/delay 2s
/return
}
/if (${FaceBit}==1) {
/face fast nolook
/look 0
}
/varset DoT4 1
/pet attack
/stand
/cast ${DoTSpell4}
/stand
/delay 2s
/cast ${DoTSpell4}
/stand
/delay 2s
/cast ${DoTSpell4}
/delay 2s
/if (${DP}==1) /call AAFD
:Loop1
/if (${Me.Casting.ID}) /goto :Loop1
/if (${LegProc}==0 && ${DP}==1) /call AAFD
}
/return
|===========================================
|This is called after casting of your curse based spell if doting is turned ON
Sub MW
/if (${MWTimer}==0 && ${MWBit}==1 && ${Target.PctHPs}>=25 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/if (${String[${Target}].Find["corpse"]}>1 || ${Target.Distance}>190 || ${String[${Target}].Find["NULL"]}>0) /return
:Loop0
/doevents
/if (!${Me.SpellReady["mind flay"]}) /goto :Loop0
/if (${SitBit}==1 && ${Me.State.Equal["STAND"]} && (${Target.PctHPs}>${CastHealth} || ${Target.PctHPs}==0) ) {
/sit
/delay 2s
/return
}
/varset MWTimer ${Math.Calc[(${Spell["mind flay"].RecastTime}+${Spell["mind flay"].MyCastTime})*10+120]}
/if (${FaceBit}==1) {
/face fast nolook
/look 0
}
/pet attack
/stand
/cast "mind flay"
:Loop1
/if (${Me.Casting.ID}) /goto :Loop1
}
/return
Sub Event_Enrage
/echo a Mob has become enraged, backing pet off
/pet follow
/pet back off
/pet hold
/return
|====================================================
Sub Event_EndEnrage
/pet attack
/return
|=============================================
|This is called whenever you type /echo status..a very handy subroutine to keep track of what options you have on/off
Sub Event_Status
/declare x int local
/echo ~~~~~~ AFKNecro.mac ~~~~~~~~~~~~
/echo /macro AFKNecro <Tank Name> <Cast Health> <Stop Casting Health>
/echo You will cast "${CurrentNuke}" between ${CastHealth} and ${StopCastHealth}
/echo Primary assist is set to: "${MainAssist}"
/if (!${Defined[SecondAssist]} && !${Defined[TripleAssist]}) {
/echo You do not have an SA and TA set
} else /if (${Defined[SecondAssist]}) {
/echo Secondary assist is set to: "${SecondAssist}"
} else /if (${Defined[TripleAssist]}) {
/echo Tertiary assist is set to: "${TripleAssist}"
}
/for x 1 to 4
/echo Casting of DoT${x}(${DoTSpell${x}}) is: ${Bool[${DoTBit${x}}]}
/next x
/echo Casting of Big Dots on GoM procs is: ${Bool[${bigdot}]}
/echo Casting of Demand For Blood for Chaotic Power procs is: ${Bool[${CPower}]}
/echo Casting of a mind flay is: "${Bool[${MWBit}]}"
/echo Procing of dagger is: "${Bool[${LegProc}]}"
/echo Facing is: "${Bool[${FaceBit}]}" || Sitting is: "${Bool[${SitBit}]}"
/echo Casting of DP is: "${Bool[${DP}]}"
/echo FDing if you get hit is: "${Bool[${FDBit}]}"
/echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/return
Sub Event_slain
/if (${Target.CurrentHPs}>=0) /return
Sub Event_EXP
/if (${Target.CurrentHPs}>=0) /return
Sub Event_GoM
/varset gom 1
:gom
/if (${gom}==0) /return
/popup Gift of Mana Active
/doevents
/if (${bigdot}==1 && ${Target.PctHPs}<=95 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/stand
/delay 1s
/cast "Dread Pyre"
/delay 1s
/doevents
/cast "Dread Pyre"
/delay 1s
/doevents
/cast "Dread Pyre"
/delay 1s
/doevents
}
/goto :gom
/return
Sub Event_GoRM
/varset gorm 1
:gorm
/if (${gorm}==0) /return
/popup Gift of Radiant Mana Active
/doevents
/if (${bigdot}==1 && ${Target.PctHPs}<=95 && ${Target.Level}>=${MinTargetLevel} && ${Target.Type.Equal["NPC"]} && ${Target.LineOfSight}) {
/cast "Ashengate Pyre"
/delay 1s
/doevents
/cast "Ashengate Pyre"
/delay 1s
/doevents
/cast "Ashengate Pyre"
/delay 1s
/doevents
}
/goto :gorm
/return
Sub Event_Gone
/if (${gom}==1) /varset gom 0
/if (${gorm}==1) /varset gorm 0
/popup Gift of Mana faded, Hope you used it well
/return
Sub Event_CPowerOn
/varset CPowerOn 1
/popup Chaotic Power Active
/return
Sub Event_CPowerFade
/varset CPowerOn 0
/popup Chaotic Power Faded
/return
Last edited:


