NOTE - If anybody knows of a good sim tool (or is mathematically inclined) who can give me more accurate numbers for the DoT refreshing and/or the TargetDeadIn variables, it would be appreciated.
Change Log for Revision 2
- Change DeadinTime to 12 across the board. This really needs to be simmed
- Added the "Sunfire Spam" rotation for movement heavy fights
- Modified the logic for entering an eclipse state, as per Elitistjerks, and various feedback
- Removed the logic for leaving an eclipse state
- Moved the logic for refreshing DoTs to under the eclipse state
- Changed the logic for rooting mobs to better follow the 1 million rule
- Added a move predicter.Let me know how it functions, and I can tweak it as need be
- Still need to verify if the logic for Bloodlust/Heroism is a DPS increase
- Added a checkbox to remove the utility button, though it defaults to on
- Moved the FF logic to it's own tiny button. Users can turn it on or off, though it defaults to on
Code: Select all
#Druid Balance Script by Skarnu of Agamaggan
[[
#Balance DPS Spells
Define(INSECTSWARM 5570) #DoT
Define(MOONFIRE 8921) #Direct Damage Arcane spell with a powerful DoT component
Define(STARFIRE 2912) #Arcane DD spell
SpellInfo(STARFIRE Eclipse=20)
Define(STARSURGE 78674) #Powerful DD spell with 15 second CD
Define(SUNFIRE 93402) #Direct Damage Nature spell with a powerful DoT component
Define(WRATH 5176) #Nature DD spell
SpellInfo(WRATH Eclipse=-13)
#CD Abilities
Define(FAERIEFIRE 770) #I know this is also a utility ability, but that section was more crowded
Define(FORCEOFNATURE 33831) #Balance long cooldown ability
Define(STARFALL 48505) #Poweful Balance AoE, and Single Target CD
#Utility Abilities
Define(BARKSKIN 22812)
Define(HEALINGTOUCH 5185)
Define(SOOTHE 2908)
Define(ROOTS 339)
Define(NATURESGRASP 16689)
Define(HIBERNATE 2637)
Define(SOLARBEAM 78675)
Define(INNERVATE 29166)
#Self Buffs
Define(CLEARCASTING 16870)
Define(ECLIPSELUNAR 48518)
Define(ECLIPSESOLAR 48517)
Define(SHOOTINGSTARS 93400)
#Healing Buffs
Define(REJUVENATION 774)
Define(RENEW 139)
Define(LIFEBLOOM 33763)
#Raid Buffs
Define(BLOODLUST 2825)
Define(TIMEWARP 80353)
Define(HEROISM 32182)
Define(ANCIENTHYSTERIA 90355)
#Relevant Mob Debuffs
Define(SUNDERARMOR 58567)
Define(FF 91565)
Define(EXPOSEARMOR 8647)
AddCheckBox(predictor "Move Predictor Button")
AddCheckBox(utility "Utility Button" default)
AddCheckBox(armor "Armor Debuff Button" default)
AddIcon help=Predictor size=small mastery=1
{
if CheckBoxOn(predictor)
{
#This checks to see if the player is moving and suggests on instant cast abilities.
if Speed(target=player more 0)
{
if BuffPresent(SHOOTINGSTARS) unless BuffPresent(ECLIPSESOLAR) and Eclipse(less 16)
Spell(STARSURGE)
if TargetDebuffExpires(INSECTSWARM 4 mine=1) and TargetDeadIn(more 12)
Spell(INSECTSWARM)
if BuffPresent(ECLIPSESOLAR)
Spell(SUNFIRE)
Spell(MOONFIRE)
}
#Check to see if Bloodlust (or similar) is present. If yes, we refresh or DoTs to get the benefit of the haste
if BuffPresent(BLOODLUST) or BuffPresent(TIMEWARP) or BuffPresent(HEROISM) or BuffPresent(ANCIENTHYSTERIA) and BuffGained(less 5) or BuffPresent(BLOODLUST) or BuffPresent(TIMEWARP) or BuffPresent(HEROISM) or BuffPresent(ANCIENTHYSTERIA) and BuffExpires(less 5)
{
if TargetDebuffExpires(INSECTSWARM 12 mine=1)
Spell(INSECTSWARM)
if TargetDebuffExpires(MOONFIRE 12 mine=1) and TargetDebuffExpires(SUNFIRE 12 mine=1)
{
if BuffPresent(ECLIPSESOLAR)
Spell(SUNFIRE)
}
}
#Keep our DoTs up
if TargetDebuffExpires(INSECTSWARM 4 mine=1) and TargetDeadIn(more 12)
Spell(INSECTSWARM)
if TargetDebuffExpires(MOONFIRE 4 mine=1) and TargetDebuffExpires(SUNFIRE 4 mine=1) and TargetDeadIn(more 12)
{
if BuffPresent(ECLIPSESOLAR)
Spell(SUNFIRE)
Spell(MOONFIRE)
}
Spell(STARSURGE)
if Eclipse(more 80) and Eclipse(less 100) unless BuffPresent(ECLIPSESOLAR)
Spell(WRATH)
if Eclipse(less -87) and Eclipse(more -100) unless BuffPresent(ECLIPSELUNAR)
Spell(STARFIRE)
}
}
AddIcon help=main mastery=1
{
#This checks to see if the player is moving and suggests on instant cast abilities.
if Speed(target=player more 0)
{
if BuffPresent(SHOOTINGSTARS) unless BuffPresent(ECLIPSESOLAR) and Eclipse(less 16)
Spell(STARSURGE)
if TargetDebuffExpires(INSECTSWARM 2 mine=1) and TargetDeadIn(more 12)
Spell(INSECTSWARM)
if BuffPresent(ECLIPSESOLAR)
Spell(SUNFIRE)
Spell(MOONFIRE)
}
#Check to see if Bloodlust (or similar) is present. If yes, we refresh or DoTs to get the benefit of the haste
if BuffPresent(BLOODLUST) or BuffPresent(TIMEWARP) or BuffPresent(HEROISM) or BuffPresent(ANCIENTHYSTERIA) and BuffGained(less 5) or BuffPresent(BLOODLUST) or BuffPresent(TIMEWARP) or BuffPresent(HEROISM) or BuffPresent(ANCIENTHYSTERIA) and BuffExpires(less 5)
{
if TargetDebuffExpires(INSECTSWARM 12 mine=1)
Spell(INSECTSWARM)
if TargetDebuffExpires(MOONFIRE 12 mine=1) and TargetDebuffExpires(SUNFIRE 12 mine=1)
{
if BuffPresent(ECLIPSESOLAR)
Spell(SUNFIRE)
}
}
#Logic for our DoT spells upon entering an Eclipse state, allows the delayed casting of our DoT's to get the full benefit of the eclipse state
if Eclipse(more 79) and Eclipse(less 100) unless BuffPresent(ECLIPSESOLAR)
{
Spell(STARSURGE)
Spell(STARFIRE)
}
#This is to compensate for the fact that Eclipse only procs when the spell hits. This ensures that our DoTs get the benefit of eclipse
if Eclipse(equal 100) unless BuffPresent(ECLIPSESOLAR)
{
Spell(STARSURGE)
Spell(WRATH)
}
if Eclipse(less -86) and Eclipse(more -99) unless BuffPresent(ECLIPSELUNAR)
{
Spell(STARSURGE)
Spell(WRATH)
}
#This is to compensate for the fact that Eclipse only procs when the spell hits. This ensures that our DoTs get the benefit of eclipse
if Eclipse(equal -100) unless BuffPresent(ECLIPSELUNAR)
{
Spell(STARSURGE)
Spell(STARFIRE)
}
#Keep our DoTs up
if TargetDebuffExpires(INSECTSWARM 2 mine=1) and TargetDeadIn(more 12)
Spell(INSECTSWARM)
if TargetDebuffExpires(MOONFIRE 2 mine=1) and TargetDebuffExpires(SUNFIRE 2 mine=1) and TargetDeadIn(more 12)
{
if BuffPresent(ECLIPSESOLAR)
Spell(SUNFIRE)
Spell(MOONFIRE)
}
Spell(STARSURGE)
if BuffPresent(ECLIPSESOLAR)
Spell(WRATH)
if BuffPresent(ECLIPSELUNAR)
Spell(STARFIRE)
if Eclipse(more 0) or Eclipse(equal 0)
Spell(STARFIRE)
if Eclipse(less 0)
Spell(WRATH)
}
AddIcon help=CD mastery=1
{
if Eclipse (more -73) and Eclipse(less 100) or BuffPresent(ECLIPSESOLAR) or BuffPresent(ECLIPSELUNAR)
Spell(STARFALL)
Spell(FORCEOFNATURE)
Item(Trinket0Slot usable=1)
Item(Trinket1Slot usable=1)
}
AddIcon help=Utility mastery=1
{
if CheckBoxOn(utility)
{
if LifePercent(less 50) and LifePercent(more 31) unless BuffPresent(REJUVENATION) or BuffPresent(LIFEBLOOM) or BuffPresent(RENEW)
Spell(BARKSKIN)
if LifePercent(less 30) and LifePercent(more 16) unless BuffPresent(REJUVENATION) or BuffPresent(LIFEBLOOM) or BuffPresent(RENEW)
Spell(REJUVENATION)
if LifePercent(less 15) unless BuffPresent(REJUVENATION) or BuffPresent(LIFEBLOOM) or BuffPresent(RENEW)
Spell(HEALINGTOUCH)
if ManaPercent(less 15) unless BuffPresent(INNERVATE)
Spell(INNERVATE)
#if TargetDebuffPresent(SOMEKINDOFRAGE)
# Spell(SOOTHE)
#This goes by "the rule of 1 million). That means that if the target has more than 1 million hit points, you probably can't CC it.
unless TargetLife(more 1000000)
{
if TargetCreatureType(Beast) or TargetCreatureType(Dragonkin) unless TargetDeadIn(less 12)
Spell(HIBERNATE)
if Speed(Target=Player equal 0)
Spell(ROOTS)
unless TargetTargetIsPlayer(No)
Spell(NATURESGRASP)
}
if TargetCasting(yes) unless TargetDeadIn(less 12)
Spell(SOLARBEAM)
}
}
AddIcon help=Armor Debuff mastery=1 size=small
{
if CheckBoxOn(armor)
{
if TargetDebuffExpires(FAERIEFIRE 2) unless TargetDebuffPresent(FF stacks=3) or TargetDebuffPresent(SUNDERARMOR stacks=3) or TargetDebuffPresent(EXPOSEARMOR)
Spell(FAERIEFIRE)
}
}
]]