#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},100]}
/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 Cloudburst Stormstrike Rk. II
/declare Nuke2 string outer Wildflash Barrage Rk. II
/declare Nuke3 string outer Flashchar Rk. II
/declare Nuke4 string outer Ethereal Skyblaze Rk. II
/declare Nuke5 string outer Wildflash Barrage Rk. II
/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 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 Quiescent Harvest Rk. II
/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 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