• 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

Request - Wizard Macro help

Status
Not open for further replies.
Joined
Mar 14, 2015
RedCents
11¢
Alright guys, Not to overshadow Razkle or anything I just don't see his macro doing the dps this macro has been doing for me, And I'd like some help from those (william12, etc) to fix this and anyone can use it, theres no .ini with it that I'm aware of and its past my knowledge and patience for fixing it.

Before I post this, let me make it clear, I did not make this macro and I have no idea who did, I've had it in my folder for 3-4 years.

Pros: Doesn't lag me out, best DPS macro I can find for a wizard PERIOD.

Con: It needs better med management, preferably be able to toss on a mount and that would fix that issue, but it /keypress forward in MQ2Cast apparently (does anyone have a modified version that doesn't do that?)

Con: It doesn't read a corpse as dead, so if the MAIN ASSIST has a corpse targetted it will cast spells on it the entire time.

Con: The med routine will not med until the debuff agro time (30 seconds after you kill something) is gone.

Con: I've tried removing, adding and modifying this but I cannot get it to work correctly without an error.



Rich (BB code):
#turbo 40
#include spell_routines.inc

Sub Main(string assist,int amount)
/declare Assist string outer ${If[${assist.Length},${assist},${Group.MainTank}]}
/declare AssistAt int outer ${If[${amount},${amount},98]}
/call Initialize
/echo ${Macro.Name} loaded.
/echo Assisting ${Assist} at ${AssistAt}
:mainloop
/doevents
/call Target
/if (${Me.CombatState.NotEqual[COMBAT]}) /call Rest
/if (${CombatConditions}) /call Combat
/goto :mainloop
/return

Sub Rest
/call Instant SelfBuff 1
/call Instant Harvest
/call Med
/return

Sub Combat

/call Once Freeze
/call Command Command
/call Instant AA
/call Instant Jolt
/call Instant Nuke
/call Once Snare
/return

Sub Initialize
|generic stuff
/declare i int local
/noparse /declare GoM string outer (${Me.Song[Gracious Mana].ID}||${Me.Song[Gift of Mana].ID}||${Me.Song[Gift of Radiant Mana].ID}||${Me.Song[Gift of Dreamlike Exquisite Radiant Mana].ID}||${Me.Song[Gift of Exquisite Radiant Mana].ID}||${Me.Song[Gift of Amazing Exquisite Radiant Mana].ID}||${Me.Song[Gift of Phantasmal Exquisite Radiant Mana].ID})
/noparse /declare Twincast string outer (${Me.Song[Twincast].ID}||${Me.Song[Twincast Rk. II].ID}||${Me.Song[Twincast Rk. III].ID}||${Me.Song[Improved Twincast].ID}||${Me.Buff[Twincast].ID}||${Me.Buff[Improved Twincast].ID})
/noparse /declare Named string outer (${Target.Named}||${Target.Name.Find[#]} && !${Target.Master.ID})
/noparse /declare CombatConditions string outer (${Target.ID}==${TarID} && ${Target.PctHPs}<=${AssistAt} && ${Target.LineOfSight} && !${Me.Feigning})
/noparse /declare DotsOn (${Me.GemTimer[${Me.Gem[${Dot1}]}]} && ${Me.GemTimer[${Me.Gem[${Dot2}]}]} && ${Me.GemTimer[${Me.Gem[${Dot3}]}]} && ${LastDot4}==${Target.ID} && ${LastDot5}==${Target.ID} && ${LastDot6}==${Target.ID})
/declare DefaultGem gem12

/declare MedAt int outer 30
/declare MedTimer timer outer 5s
/declare TarID int outer
/declare CurrentSub string outer
/declare ReAssist timer outer 1s

|##Stuff I want to use over and over will be next

|Nukes
/declare NukeColor string outer Red
/declare Nuke1 string outer Claw of the Flamewing
/declare Nuke2 string outer Ethereal Weave
/declare Nuke3 string outer Ethereal Incandescence
/declare Nuke4 string outer Gosik's Fire
/declare Nuke5 string outer Chaos Incandescence
/declare Nuke6 string outer Force of Ice
/declare Nuke7 string outer Force of Will
/declare Nuke8 string outer Force of Flame

/noparse /declare NukeConditions1 string outer (!${Twincast})
/noparse /declare NukeConditions2 string outer (${Twincast}||${Me.Song[Elemental Flames].ID}||${GoM})
/noparse /declare NukeConditions6 string outer (!${Me.SpellReady[${Me.Gem[1]}]} && !${Me.SpellReady[${Me.Gem[2]}]} && !${Me.SpellReady[${Me.Gem[3]}]})
/noparse /declare NukeConditions7 string outer (!${Me.SpellReady[${Me.Gem[1]}]} && !${Me.SpellReady[${Me.Gem[2]}]} && !${Me.SpellReady[${Me.Gem[3]}]})
/noparse /declare NukeConditions8 string outer (!${Me.SpellReady[${Me.Gem[1]}]} && !${Me.SpellReady[${Me.Gem[2]}]} && !${Me.SpellReady[${Me.Gem[3]}]})

|Jolts
/declare JoltColor string outer Teal
/declare Jolt1 string outer A Hole in Space
/declare Jolt2 string outer Concussive Intuition
/declare Jolt3 string outer Arcane Whisper
/declare Jolt4 string outer Mind Crash
/declare Jolt5 string outer Concussive Salvo Rk. II
/noparse /declare JoltConditions5 string outer (${Named} && ${Me.PctAggro}>85)
/noparse /declare JoltConditions1 string outer (${Me.PctHPs}<70||${Me.PctAggro}>90)
/noparse /declare JoltConditions2 string outer (${Me.PctAggro}>70)
/noparse /declare JoltConditions3 string outer (${Named} && !${Me.Song[Silent Casting].ID})
/noparse /declare JoltConditions4 string outer (${Named} && ${Me.PctAggro}>95)



|AA
/declare AAColor string outer Purple
/declare AA1 string outer Empowered Focus of Arcanum
/declare AA2 string outer Improved Twincast
/declare AA3 string outer Twincast
/declare AA4 string outer Frenzied Devestation
/declare AA5 string outer Lower Element
/declare AA6 string outer Latent Etheric Robe of the Frozen Flame
/declare AA7 string outer Fury of Ro
/declare AA8 string outer Fundament: Second Spire of Arcanum
/declare AA9 string outer Silent Casting
/noparse /declare AAConditions2 string outer (!${Twincast})
/noparse /declare AAConditions3 string outer (!${Twincast})
/noparse /declare AAConditions4 string outer (${Named})
/noparse /declare AAConditions5 string outer (${Named})
/noparse /declare AAConditions9 string outer (${Named})

|Harvest
/declare HarvestColor string outer Orange
/declare Harvest1 string outer Bucolic Harvest
/declare Harvest2 string outer Harvest of Druzzil
/declare Harvest3 string outer Summoned: Large Modulation Shard
/noparse /declare HarvestConditions1 string outer (!${Me.Invis} && ${Me.PctMana}<=65)
/noparse /declare HarvestConditions2 string outer (!${Me.Invis} && ${Me.PctMana}<=65)
/noparse /declare HarvestConditions3 string outer (!${Me.Invis} && ${Me.PctMana}<=65 && ${Me.CurrentHPs}>24000)


|Buffs
/declare BuffColor string outer White
/declare SelfBuff1 string outer 
/declare SelfBuff2 string outer Improved Familiar
/noparse /declare SelfBuffConditions2 string outer (${Spell[Improved Familiar].Stacks})


|##stuff i want to use once per mob
|Freeze
/declare FreezeColor string outer Blue
/declare Freeze string outer Skullfreeze Rk. II
/declare LastFreeze int outer
/noparse /declare FreezeConditions string outer 1

|snare
/declare SnareColor string outer Green
/declare LastSnare int outer
/declare Snare string outer Atol's Unresistable Shackles
/noparse /declare SnareConditions string outer (${Target.PctHPs}<25 && ${Target.Fleeing})

|##ImHit event
/declare ImHit1 string outer A Hole in Space
/noparse /declare ImHitConditions1 string outer (${Me.PctHPs}<70)


/return

Sub Target
/if ((!${Target.ID} || ${Target.Type.Equal[PC]} || ${Target[${CurrentTarget}].Type.Equal[corpse]} || !${ReAssist}) && ${SpawnCount[${Assist} radius 300]}) {
/assist ${Assist}
/varset ReAssist ${ReAssist.OriginalValue}
}
/if (${Target.ID} && (${Target.Type.Equal[NPC]}||${Target[${CurrentTarget}].Type.Equal[corpse]}||${Target.Master.Type.Equal[NPC]}) && ${Target.ID}!=${TarID}) {
/varset TarID ${Target.ID}
}
/return

Sub Command(subname)
/varset CurrentSub ${subname}
/declare i int local
/for i 1 to 20
/if (!${Defined[${CurrentSub}${i}]}) /return
/if (${${CurrentSub}Conditions${i}}||!${Defined[${CurrentSub}Conditions${i}]}) {
	/docommand ${${CurrentSub}${i}}
	}
/next i
/return

Sub Group(subname,int force)
/varset CurrentSub ${subname}
/declare i int local
/declare x int local

/for x 1 to 20
/if (!${Defined[${CurrentSub}${x}]}) /return
	/for i 0 to 5
		/if (${${CurrentSub}${x}${Group.Member[${i}].ID}}||!${Group.Member[${i}].ID}) /goto :skip
		/if (${${CurrentSub}Conditions${x}}||!${Defined[${CurrentSub}Conditions${x}]}) {
		/if (${Spell[${${CurrentSub}${x}}].TargetType.NotEqual[self]}) /squelch /tar id ${Group.Member[${i}].ID}
		/delay 1s ${Target.ID}==${Group.Member[${i}].ID}
			/if (${FindItem[${${CurrentSub}${x}}].InvSlot} && !${FindItem[${${CurrentSub}${x}}].Timer}) {
				/call Cast "${${CurrentSub}${x}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/if (!${Defined[${CurrentSub}${x}${Group.Member[${i}].ID}]}) /declare ${CurrentSub}${x}${Group.Member[${i}].ID} timer outer
						/if (${Defined[${CurrentSub}Recast${x}]}) /varset ${CurrentSub}${x}${Group.Member[${i}].ID} ${${CurrentSub}Recast${x}}
					}
				}
			/if (${Me.AltAbilityReady[${${CurrentSub}${x}}]}) {
				/call Cast "${${CurrentSub}${x}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/if (!${Defined[${CurrentSub}${x}${Group.Member[${i}].ID}]}) /declare ${CurrentSub}${x}${Group.Member[${i}].ID} timer outer
						/if (${Defined[${CurrentSub}Recast${x}]}) /varset ${CurrentSub}${x}${Group.Member[${i}].ID} ${${CurrentSub}Recast${x}}
					}
				}	
			/if (${Me.SpellReady[${${CurrentSub}${x}}]}||${Me.Book[${${CurrentSub}${x}}]} && ${force} && !${Me.AltAbility[${${CurrentSub}${x}}]}) {
				/call Cast "${${CurrentSub}${x}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/if (!${Defined[${CurrentSub}${x}${Group.Member[${i}].ID}]}) /declare ${CurrentSub}${x}${Group.Member[${i}].ID} timer outer
						/if (${Defined[${CurrentSub}Recast${x}]}) /varset ${CurrentSub}${x}${Group.Member[${i}].ID} ${${CurrentSub}Recast${x}}
					}
				}				

		}
	:skip
	/next i
/next x
/return


Sub Duration(subname,int force)
/varset CurrentSub ${subname}
/declare i int local
/for i 1 to 20
/if (!${Defined[${subname}${i}]}) /return
/if ((!${${CurrentSub}Recast${i}}||${Last${CurrentSub}${i}}!=${Target.ID}) && (${${subname}Conditions${i}}||!${Defined[${subname}Conditions${i}]})) {
	/if (${FindItem[${${subname}${i}}].InvSlot} && !${FindItem[${${subname}${i}}].Timer}) {
				/call Cast "${${CurrentSub}${i}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/varset Last${CurrentSub}${i} ${Target.ID}
						/varset ${CurrentSub}Recast${i} ${${CurrentSub}Recast${i}.OriginalValue}
					}
				}
	/if (${Me.AltAbilityReady[${${subname}${i}}]}) {
			/call Cast "${${CurrentSub}${i}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
						/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
							/varset Last${CurrentSub}${i} ${Target.ID}
							/varset ${CurrentSub}Recast${i} ${${CurrentSub}Recast${i}.OriginalValue}
				}
			}
	/if (${Me.SpellReady[${${subname}${i}}]}||${Me.Book[${${subname}${i}}]} && ${force} && !${Me.AltAbility[${${subname}${i}}]}) {
			/call Cast "${${CurrentSub}${i}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
				/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
					/varset Last${CurrentSub}${i} ${Target.ID}
					/varset ${CurrentSub}Recast${i} ${${CurrentSub}Recast${i}.OriginalValue}
				}
			}
	}
/next i

/return


Sub Instant(subname,int force)
/varset CurrentSub ${subname}
/declare i int local
/for i 1 to 20
/if (!${Defined[${subname}${i}]}) /return
/if (${${subname}Conditions${i}}||!${Defined[${subname}Conditions${i}]}) {
	/if (${FindItem[${${subname}${i}}].InvSlot} && !${FindItem[${${subname}${i}}].Timer}) /call Cast "${${subname}${i}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${${subname}${i}}]}) /call Cast "${${subname}${i}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	/if (${Me.SpellReady[${${subname}${i}}]}||${Me.Book[${${subname}${i}}]} && ${force} && !${Me.AltAbility[${${subname}${i}}]}) /call Cast "${${subname}${i}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	}
/next i

/return

Sub Once(subname,int force)
/if (${Last${subname}}==${Target.ID}) /return
/varset CurrentSub ${subname}
/if (!${Defined[${subname}]}) /return
/if (${${subname}Conditions}||!${Defined[${subname}Conditions]}) {
	/if (${FindItem[${${subname}}].InvSlot} && !${FindItem[${${subname}}].Timer}) /call Cast "${${subname}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${${subname}}]}) /call Cast "${${subname}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.SpellReady[${${subname}}]}||${Me.Book[${${subname}${i}}]} && ${force} && !${Me.AltAbility[${${subname}${i}}]}) /call Cast "${${subname}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) /varset Last${CurrentSub} ${Target.ID}
	}

/return

Sub CheckAggro
/if (${CurrentSub.Equal[Jolt]}||${Me.PctAggro}<1000) /return
/declare i int local
/for i 1 to 20
/if (!${Defined[Jolt${i}]}) /goto :skip
/if (${${subname}Conditions${i}}) {
	/if (${FindItem[${Jolt${i}}].InvSlot} && !${FindItem[${Jolt${i}}].Timer}) {
		/call Interrupt
		/call Cast "${Jolt${i}}" item
	}
	/if (${Me.AltAbilityReady[${Jolt${i}}]}) {
		/call Interrupt
		/alt act ${Me.AltAbility[${Jolt${i}}].ID}
	}
	/if (${Me.SpellReady[${Jolt${i}}]}) {
		/call Interrupt
		/call Cast "${Jolt${i}}" ${DefaultGem} 5s CheckAggro
	}
	}
/next i
:skip
/return

Sub Med
  /if (${Me.PctMana}<${MedAt} && !${MedTimer} && !${Me.Mount.ID} && ${Me.State.Equal[STAND]} && (${Me.CombatState.Equal[ACTIVE]}||${Me.CombatState.Equal[DEBUFFED]} && !${Debuff.Count})) {
  		/sit
		/varset MedTimer ${MedTimer.OriginalValue}
		}
/return

#event ImHit     "#*# YOU for #*#"
#event ImHit     "#*# YOU, but #*#"

Sub Event_ImHit
/declare i int local
/for i 1 to 20
/if (!${Defined[ImHit${i}]}) /return
/if (${ImHitConditions${i}}) {
	/if (${FindItem[${ImHit${i}}].InvSlot} && !${FindItem[${ImHit${i}}].Timer}) /call Cast "${ImHit${i}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${ImHit${i}}]}) /call Cast "${ImHit${i}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.SpellReady[${ImHit${i}}]}) /call Cast "${ImHit${i}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	/if (${Me.CombatAbilityReady[${ImHit${i}}]}) /call Cast "${ImHit${i}}" disc ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
}
/next i
/return
 
Last edited:
Just delete all that and upload the macro. It'll be easier for people.
 
awesome addition, good job! and thanks for sharing!

- - - Updated - - -

1st thing I see is you need to verify the spells you are using, like "Empowered Focus of Arcanum" does not exist, it is now "Focus of Arcanum". and "Bucolic Harvest" should be Quiescent Harvest" but those are minor issues, I would be happy to help streamline and tune this will you. Looks great though!

- - - Updated - - -

line 13 change to
Rich (BB code):
/if (!${Me.CombatState.Equal[COMBAT]} && ${Me.PctMana}<90 && !${Me.Sitting}) /Sit

he will sit as required, no waiting

- - - Updated - - -

remove the whole REST routine, not even sure what is it trying to do.....

- - - Updated - - -

um when was the last time you ran this macro, cause it does a beautiful job of casting AA spells but never gets to most of the spells in your lineup, I updated the spells and routines to a 105 and it casts well now but about the same as afnuke2 does, it just does it different. I do like the structure though and will be happy to help refine it... it does cast pretty fast! It needs to OPEN with claw though not nuke 1 or nuke 2, claw should be THE priority as when it procs the real fun begins.

- - - Updated - - -

This is what I have changed so far and it is doing pretty well, testing it side by side with afnuke2 live...

wizbang.mac
Rich (BB code):
#turbo 40
#include spell_routines.inc
#include Wait4Rez.inc
#include General.inc
#include Ninjadvloot.inc
#chat tell

Sub Main(string assist,int amount)
/declare Assist string outer ${If[${assist.Length},${assist},${Group.MainTank}]}
/declare AssistAt int outer ${If[${amount},${amount},98]}
/declare Harvest          int outer 0
/declare HarvestTimer     timer outer 0
/call DeclareIniVar Rod string Settings "Summoned: Large Modulation Shard"
/call DeclareIniVar HarvestSpell string Spells "Quiescent Harvest"
/call DeclareIniVar harvestgem string Settings gem10
/call DeclareIniVar harvestpercent int Settings 75
/call Initialize
/echo ${Macro.Name} loaded.
/echo Assisting ${Assist} at ${AssistAt}

|############################  MAIN LOOP  ############################
:mainloop
/doevents
/call Target
/if (!${Me.CombatState.Equal[COMBAT]} && ${Me.PctMana}<90 && !${Me.Sitting}) /Sit
/if (${Target.PctHPs}<99 && ${Me.XTarget}) /call Combat
/goto :mainloop
/return
/endmacro
|############################  Combat  ############################
Sub Combat
/call Once Freeze
/call Command Command
/call Instant AA
/call Instant Jolt
/call Instant Nuke
/call Once Snare
	/if (${Me.PctMana}<75) /call HarvestCheck
/return

|############################  Initialize  ############################
Sub Initialize
/declare i int local
/noparse /declare GoM string outer (${Me.Song[Gracious Mana].ID}||${Me.Song[Gift of Mana].ID}||${Me.Song[Gift of Radiant Mana].ID}||${Me.Song[Gift of Dreamlike Exquisite Radiant Mana].ID}||${Me.Song[Gift of Exquisite Radiant Mana].ID}||${Me.Song[Gift of Amazing Exquisite Radiant Mana].ID}||${Me.Song[Gift of Phantasmal Exquisite Radiant Mana].ID})
/noparse /declare Twincast string outer (${Me.Song[Twincast].ID}||${Me.Song[Twincast Rk. II].ID}||${Me.Song[Twincast Rk. III].ID}||${Me.Song[Improved Twincast].ID}||${Me.Buff[Twincast].ID}||${Me.Buff[Improved Twincast].ID})
/noparse /declare Named string outer (${Target.Named}||${Target.Name.Find[#]} && !${Target.Master.ID})
/noparse /declare CombatConditions string outer (${Target.ID}==${TarID} && ${Target.PctHPs}<=${AssistAt} && ${Target.LineOfSight} && !${Me.Feigning})
/noparse /declare DotsOn (${Me.GemTimer[${Me.Gem[${Dot1}]}]} && ${Me.GemTimer[${Me.Gem[${Dot2}]}]} && ${Me.GemTimer[${Me.Gem[${Dot3}]}]} && ${LastDot4}==${Target.ID} && ${LastDot5}==${Target.ID} && ${LastDot6}==${Target.ID})
/declare DefaultGem gem12
/declare TarID int outer
/declare CurrentSub string outer
/declare ReAssist timer outer 1s

|############################  Nukes  ############################
/declare NukeColor string outer Red
/declare Nuke1 string outer Claw of the Flameweaver
/declare Nuke2 string outer Ethereal Fuse
/declare Nuke3 string outer Ethereal Skyblaze
/declare Nuke4 string outer Flashchar
/declare Nuke5 string outer Ethereal Rimblast
/declare Nuke6 string outer Force of Ice
/declare Nuke7 string outer Force of Will
/declare Nuke8 string outer Force of Flame

/noparse /declare NukeConditions1 string outer (!${Twincast})
/noparse /declare NukeConditions2 string outer (${Twincast}||${Me.Song[Elemental Flames].ID}||${GoM})
/noparse /declare NukeConditions6 string outer (${Me.AltAbilityReady[Force of Ice]} && !${Me.SpellReady[${Me.Gem[1]}]} && !${Me.SpellReady[${Me.Gem[2]}]} && !${Me.SpellReady[${Me.Gem[3]}]})
/noparse /declare NukeConditions7 string outer (${Me.AltAbilityReady[Force of Will]} && !${Me.SpellReady[${Me.Gem[1]}]} && !${Me.SpellReady[${Me.Gem[2]}]} && !${Me.SpellReady[${Me.Gem[3]}]})
/noparse /declare NukeConditions8 string outer (${Me.AltAbilityReady[Force of Flame]} && !${Me.SpellReady[${Me.Gem[1]}]} && !${Me.SpellReady[${Me.Gem[2]}]} && !${Me.SpellReady[${Me.Gem[3]}]})

|############################  Jolts  ############################
/declare JoltColor string outer Teal
/declare Jolt1 string outer A Hole in Space
/declare Jolt2 string outer Concussive Intuition
/declare Jolt3 string outer Arcane Whisper
/declare Jolt4 string outer Mind Crash
/declare Jolt5 string outer Concussive Storm

/noparse /declare JoltConditions1 string outer (${Me.PctHPs}<70||${Me.PctAggro}>90)
/noparse /declare JoltConditions2 string outer (${Me.PctAggro}>70)
/noparse /declare JoltConditions3 string outer (${Named} && !${Me.Song[Silent Casting].ID})
/noparse /declare JoltConditions4 string outer (${Named} && ${Me.PctAggro}>90)
/noparse /declare JoltConditions5 string outer (${Named} && ${Me.PctAggro}>85)

|############################  AA  ############################
/declare AAColor string outer Purple
/declare AA1 string outer Focus of Arcanum
/declare AA2 string outer Improved Twincast
/declare AA3 string outer Twincast
/declare AA4 string outer Frenzied Devestation
/declare AA5 string outer Lower Element
/declare AA6 string outer Castaway Robe of the Frozen Flame
/declare AA7 string outer Fury of Ro
/declare AA8 string outer Fundament: Second Spire of Arcanum
/declare AA9 string outer Silent Casting
/noparse /declare AAConditions2 string outer (!${Twincast})
/noparse /declare AAConditions3 string outer (!${Twincast})
/noparse /declare AAConditions4 string outer (${Named})
/noparse /declare AAConditions5 string outer (${Target.PctHPs}<=${AssistAt})
/noparse /declare AAConditions9 string outer (${Target.PctHPs}<=${AssistAt})

|############################  Harvest  ############################
/declare HarvestColor string outer Orange
/declare Harvest1 string outer Quiescent Harvest
/declare Harvest2 string outer Harvest of Druzzil
/declare Harvest3 string outer Summoned: Large Modulation Shard
/noparse /declare HarvestConditions1 string outer (!${Me.Invis} && ${Me.PctMana}<=65)
/noparse /declare HarvestConditions2 string outer (!${Me.Invis} && ${Me.PctMana}<=65)
/noparse /declare HarvestConditions3 string outer (!${Me.Invis} && ${Me.PctMana}<=65 && ${Me.CurrentHPs}>24000)

|############################  Buffs  ############################
/declare BuffColor string outer White
/declare SelfBuff1 string outer 
/declare SelfBuff2 string outer Improved Familiar
/noparse /declare SelfBuffConditions2 string outer (${Spell[Improved Familiar].Stacks})

|############################  Freeze  ############################
/declare FreezeColor string outer Blue
/declare Freeze string outer Flashrime
/declare LastFreeze int outer
/noparse /declare FreezeConditions string outer 1

||############################  snare  ############################
/declare SnareColor string outer Green
/declare LastSnare int outer
/declare Snare string outer Atol's Shackles
/noparse /declare SnareConditions string outer (${Target.PctHPs}<25 && ${Target.Fleeing})

|############################  ImHit event  ############################
/declare ImHit1 string outer A Hole in Space
/noparse /declare ImHitConditions1 string outer (${Me.PctHPs}<70)
/return
|############################  END SUB Initialize  ############################

|############################  Target  ############################
Sub Target
/if ((!${Target.ID} || ${Target.Type.Equal[PC]} || ${Target.Type.Equal["Corpse"]} || !${ReAssist}) && ${SpawnCount[${Assist} radius 300]}) {
/assist ${Assist}
/varset ReAssist ${ReAssist.OriginalValue}
}
/if (${Target.ID} && (${Target.Type.Equal[NPC]}||${Target.Type.Equal["Corpse"]}||${Target.Master.Type.Equal[NPC]}) && ${Target.ID}!=${TarID}) {
/varset TarID ${Target.ID}
}
/return

|############################  Command  ############################
Sub Command(subname)
/varset CurrentSub ${subname}
/declare i int local
/for i 1 to 20
/if (!${Defined[${CurrentSub}${i}]}) /return
/if (${${CurrentSub}Conditions${i}}||!${Defined[${CurrentSub}Conditions${i}]}) {
	/docommand ${${CurrentSub}${i}}
	}
/next i
/return

|############################  Group  ############################
Sub Group(subname,int force)
/varset CurrentSub ${subname}
/declare i int local
/declare x int local

/for x 1 to 20
/if (!${Defined[${CurrentSub}${x}]}) /return
	/for i 0 to 5
		/if (${${CurrentSub}${x}${Group.Member[${i}].ID}}||!${Group.Member[${i}].ID}) /goto :skip
		/if (${${CurrentSub}Conditions${x}}||!${Defined[${CurrentSub}Conditions${x}]}) {
		/if (${Spell[${${CurrentSub}${x}}].TargetType.NotEqual[self]}) /squelch /tar id ${Group.Member[${i}].ID}
		/delay 1s ${Target.ID}==${Group.Member[${i}].ID}
			/if (${FindItem[${${CurrentSub}${x}}].InvSlot} && !${FindItem[${${CurrentSub}${x}}].Timer}) {
				/call Cast "${${CurrentSub}${x}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/if (!${Defined[${CurrentSub}${x}${Group.Member[${i}].ID}]}) /declare ${CurrentSub}${x}${Group.Member[${i}].ID} timer outer
						/if (${Defined[${CurrentSub}Recast${x}]}) /varset ${CurrentSub}${x}${Group.Member[${i}].ID} ${${CurrentSub}Recast${x}}
					}
				}
			/if (${Me.AltAbilityReady[${${CurrentSub}${x}}]}) {
				/call Cast "${${CurrentSub}${x}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/if (!${Defined[${CurrentSub}${x}${Group.Member[${i}].ID}]}) /declare ${CurrentSub}${x}${Group.Member[${i}].ID} timer outer
						/if (${Defined[${CurrentSub}Recast${x}]}) /varset ${CurrentSub}${x}${Group.Member[${i}].ID} ${${CurrentSub}Recast${x}}
					}
				}	
			/if (${Me.SpellReady[${${CurrentSub}${x}}]}||${Me.Book[${${CurrentSub}${x}}]} && ${force} && !${Me.AltAbility[${${CurrentSub}${x}}]}) {
				/call Cast "${${CurrentSub}${x}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/if (!${Defined[${CurrentSub}${x}${Group.Member[${i}].ID}]}) /declare ${CurrentSub}${x}${Group.Member[${i}].ID} timer outer
						/if (${Defined[${CurrentSub}Recast${x}]}) /varset ${CurrentSub}${x}${Group.Member[${i}].ID} ${${CurrentSub}Recast${x}}
					}
				}				
		}
	:skip
	/next i
/next x
/return

|############################  Duration  ############################
Sub Duration(subname,int force)
/varset CurrentSub ${subname}
/declare i int local
/for i 1 to 20
/if (!${Defined[${subname}${i}]}) /return
/if ((!${${CurrentSub}Recast${i}}||${Last${CurrentSub}${i}}!=${Target.ID}) && (${${subname}Conditions${i}}||!${Defined[${subname}Conditions${i}]})) {
	/if (${FindItem[${${subname}${i}}].InvSlot} && !${FindItem[${${subname}${i}}].Timer}) {
				/call Cast "${${CurrentSub}${i}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
					/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
						/varset Last${CurrentSub}${i} ${Target.ID}
						/varset ${CurrentSub}Recast${i} ${${CurrentSub}Recast${i}.OriginalValue}
					}
				}
	/if (${Me.AltAbilityReady[${${subname}${i}}]}) {
			/call Cast "${${CurrentSub}${i}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
						/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
							/varset Last${CurrentSub}${i} ${Target.ID}
							/varset ${CurrentSub}Recast${i} ${${CurrentSub}Recast${i}.OriginalValue}
				}
			}
	/if (${Me.SpellReady[${${subname}${i}}]}||${Me.Book[${${subname}${i}}]} && ${force} && !${Me.AltAbility[${${subname}${i}}]}) {
			/call Cast "${${CurrentSub}${i}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
				/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) {
					/varset Last${CurrentSub}${i} ${Target.ID}
					/varset ${CurrentSub}Recast${i} ${${CurrentSub}Recast${i}.OriginalValue}
				}
			}
	}
/next i

/return

|############################  Instant  ############################
Sub Instant(subname,int force)
/varset CurrentSub ${subname}
/declare i int local
/for i 1 to 20
/if (!${Defined[${subname}${i}]}) /return
/if (${${subname}Conditions${i}}||!${Defined[${subname}Conditions${i}]}) {
	/if (${FindItem[${${subname}${i}}].InvSlot} && !${FindItem[${${subname}${i}}].Timer}) /call Cast "${${subname}${i}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${${subname}${i}}]}) /call Cast "${${subname}${i}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	/if (${Me.SpellReady[${${subname}${i}}]}||${Me.Book[${${subname}${i}}]} && ${force} && !${Me.AltAbility[${${subname}${i}}]}) /call Cast "${${subname}${i}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	}
/next i

/return

|############################  Once  ############################
Sub Once(subname,int force)
/if (${Last${subname}}==${Target.ID}) /return
/varset CurrentSub ${subname}
/if (!${Defined[${subname}]}) /return
/if (${${subname}Conditions}||!${Defined[${subname}Conditions]}) {
	/if (${FindItem[${${subname}}].InvSlot} && !${FindItem[${${subname}}].Timer}) /call Cast "${${subname}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${${subname}}]}) /call Cast "${${subname}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.SpellReady[${${subname}}]}||${Me.Book[${${subname}${i}}]} && ${force} && !${Me.AltAbility[${${subname}${i}}]}) /call Cast "${${subname}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	/if (${Macro.Return.Equal[CAST_SUCCESS]}||${Macro.Return.Equal[CAST_NOTHOLD]}) /varset Last${CurrentSub} ${Target.ID}
	}

/return

|############################  Check Agro  ############################
Sub CheckAggro
/if (${CurrentSub.Equal[Jolt]}||${Me.PctAggro}<1000) /return
/declare i int local
/for i 1 to 20
/if (!${Defined[Jolt${i}]}) /goto :skip
/if (${${subname}Conditions${i}}) {
	/if (${FindItem[${Jolt${i}}].InvSlot} && !${FindItem[${Jolt${i}}].Timer}) {
		/call Interrupt
		/call Cast "${Jolt${i}}" item
	}
	/if (${Me.AltAbilityReady[${Jolt${i}}]}) {
		/call Interrupt
		/alt act ${Me.AltAbility[${Jolt${i}}].ID}
	}
	/if (${Me.SpellReady[${Jolt${i}}]}) {
		/call Interrupt
		/call Cast "${Jolt${i}}" ${DefaultGem} CheckAggro
	}
	}
/next i
:skip
/return

|############################  ImHit  ############################
#event ImHit     "#*# YOU for #*#"
#event ImHit     "#*# YOU, but #*#"

Sub Event_ImHit
/declare i int local
/for i 1 to 20
/if (!${Defined[ImHit${i}]}) /return
/if (${ImHitConditions${i}}) {
	/if (${FindItem[${ImHit${i}}].InvSlot} && !${FindItem[${ImHit${i}}].Timer}) /call Cast "${ImHit${i}}" item ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.AltAbilityReady[${ImHit${i}}]}) /call Cast "${ImHit${i}}" alt ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
	/if (${Me.SpellReady[${ImHit${i}}]}) /call Cast "${ImHit${i}}" ${DefaultGem} ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]} CheckAggro
	/if (${Me.CombatAbilityReady[${ImHit${i}}]}) /call Cast "${ImHit${i}}" disc ${If[${Defined[${CurrentSub}Color]},${${CurrentSub}Color},Orange]}
}
/next i
/return

|############################  HarvestCheck  ############################
Sub Harvestcheck
	/if (${Me.PctMana}<=65 && !${Me.Moving} && ${Me.SpellReady["${HarvestSpell}"]} && !${Me.Casting.ID}) {
		/echo Casting ${HarvestSpell}
		/call Cast "${HarvestSpell}" ${harvestgem}
}
	/if (${Me.PctMana}<=75 && !${Me.Moving} && ${Me.AltAbilityReady["172"]} && !${Me.Casting.ID}) {
		/call Cast "172" alt 7s
	}
/return

- - - Updated - - -

SON OF A BITCH! This thing casts so much faster then anything else I have ever seen!

- - - Updated - - -

now I just need to get it to cast shit in the right order, it starts off with AA casts but does not miss a beat on casting the next whatever.....

ok so far of the original issues I have fixed
Con: It needs better med management = Fixed
Con: It doesn't read a corpse as dead= Fixed
Con: The med routine will not med until the debuff agro time = Fixed

Also fixed a slew of other issues, but the thing is just so cast inefficient, working on that next.

should be
1.claw
2.AA
3.possible claw proc cast
4.nuke
5.AA
6.back to top...
 
Last edited:
I love Raz' progressive updates on this ;)
It says something to me having him critique this.
I have only been using AFNuke2 for about 3 weeks, loving it!

~TheFiddler~
 
This better than KA for wizards? im currently boxing 5 of them so i might check it out
 
I see a lot of stuff in this mac and in afnuke2 that one does better then the other. Now the trick will be to merge the 2 into a superwizmac mwahahahhaaa

- - - Updated - - -

Never be so blinded by pride that you close your eyes to other ways to do stuff, we all work together and we all succeed! Yes I love what I have done with afnuke2 but I am intrigued in the speed and simplicity of this mac, afnuke2 does more consistant long term dps then this mac but this mac casts so freakin fast, so mix the 2 and you get a super fast afnuke3?

- - - Updated - - -

for short tern fight where everything is off cooldown this mac rocks, after stuff starts to go on cooldown this mac loses most of its dps and starts to slow way down. Mostly because of unresolved casting checks that cause the macro to sit idle for seconds at a time when it should be off to the next thing not on cooldown. Afnuke2 just casts over and over at the same speed. But I have a long way to go on both programs, I am just grateful to kyleo321 for sharing this awesome sauce!
 
Last edited:
I could write a plugin like MQ2Heals to do it. MQ2Razkle!

A Plugin for healing (and buffing) is one thing...A plugin for NUKING THE EFFING CRAP OUTTA SOMETHING might be dangerous to the community...
 
I don't think a plugin for wizard DPS will be detrimental to the community at all. As a plugin, it may barely out-parse the equivalent macro, but only because plugins are capable of running significantly faster than macros. A lightweight macro spamming spells/AAs would have just about the same effect.

It would be roughly the same as loading ISBoxer and smashing your wizard's DPS hotkey while playing another character. That's mostly what wizards do on raids now anyway... /assist raid then Spam DPS hotkey, and use burns when appropriate, and harvest when necessary (never during a burn, FD/AD + IoG/2nd Spire/ITC, etc... up, unless you're completely oom).
 
plus it has already existed for a couple years now. mq2bot~ oh shit son. mind blown! You can just set your if conditions for max dps on your toon.
 
Request - Wizard Macro help
Status
Not open for further replies.

Users who are viewing this thread

Back
Top
Cart