You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2258 lines
101 KiB
2258 lines
101 KiB
-- PriestShadow.lua
|
|
-- October 2022
|
|
|
|
if UnitClassBase( "player" ) ~= "PRIEST" then return end
|
|
|
|
local addon, ns = ...
|
|
local Hekili = _G[ addon ]
|
|
local class, state = Hekili.Class, Hekili.State
|
|
local FindUnitBuffByID, FindUnitDebuffByID, PTR = ns.FindUnitBuffByID, ns.FindUnitDebuffByID, ns.PTR
|
|
|
|
local spec = Hekili:NewSpecialization( 258 )
|
|
|
|
spec:RegisterResource( Enum.PowerType.Insanity, {
|
|
mind_flay = {
|
|
aura = "mind_flay",
|
|
debuff = true,
|
|
|
|
last = function ()
|
|
local app = state.buff.casting.applied
|
|
local t = state.query_time
|
|
|
|
return app + floor( ( t - app ) / class.auras.mind_flay.tick_time ) * class.auras.mind_flay.tick_time
|
|
end,
|
|
|
|
interval = function () return class.auras.mind_flay.tick_time end,
|
|
value = 2,
|
|
},
|
|
|
|
mind_flay_insanity = {
|
|
aura = "mind_flay_insanity_dot",
|
|
debuff = true,
|
|
|
|
last = function ()
|
|
local app = state.buff.casting.applied
|
|
local t = state.query_time
|
|
|
|
return app + floor( ( t - app ) / class.auras.mind_flay_insanity_dot.tick_time ) * class.auras.mind_flay_insanity_dot.tick_time
|
|
end,
|
|
|
|
interval = function () return class.auras.mind_flay_insanity_dot.tick_time end,
|
|
value = 3,
|
|
},
|
|
|
|
void_lasher_mind_sear = {
|
|
aura = "void_lasher_mind_sear",
|
|
debuff = true,
|
|
|
|
last = function ()
|
|
local app = state.debuff.void_lasher_mind_sear.applied
|
|
local t = state.query_time
|
|
|
|
return app + floor( t - app )
|
|
end,
|
|
|
|
interval = function () return class.auras.void_lasher_mind_sear.tick_time end,
|
|
value = 1,
|
|
},
|
|
|
|
void_tendril_mind_flay = {
|
|
aura = "void_tendril_mind_flay",
|
|
debuff = true,
|
|
|
|
last = function ()
|
|
local app = state.debuff.void_tendril_mind_flay.applied
|
|
local t = state.query_time
|
|
|
|
return app + floor( t - app )
|
|
end,
|
|
|
|
interval = function () return class.auras.void_tendril_mind_flay.tick_time end,
|
|
value = 1,
|
|
},
|
|
|
|
void_torrent = {
|
|
channel = "void_torrent",
|
|
|
|
last = function ()
|
|
local app = state.buff.casting.applied
|
|
local t = state.query_time
|
|
|
|
return app + floor( ( t - app ) / class.abilities.void_torrent.tick_time ) * class.abilities.void_torrent.tick_time
|
|
end,
|
|
|
|
interval = function () return class.abilities.void_torrent.tick_time end,
|
|
value = 6,
|
|
},
|
|
|
|
mindbender = {
|
|
aura = "mindbender",
|
|
|
|
last = function ()
|
|
local app = state.buff.mindbender.expires - 15
|
|
local t = state.query_time
|
|
|
|
return app + floor( ( t - app ) / ( 1.5 * state.haste ) ) * ( 1.5 * state.haste )
|
|
end,
|
|
|
|
interval = function () return 1.5 * state.haste * ( state.conduit.rabid_shadows.enabled and 0.85 or 1 ) end,
|
|
value = 2
|
|
},
|
|
|
|
shadowfiend = {
|
|
aura = "shadowfiend",
|
|
|
|
last = function ()
|
|
local app = state.buff.shadowfiend.expires - 15
|
|
local t = state.query_time
|
|
|
|
return app + floor( ( t - app ) / ( 1.5 * state.haste ) ) * ( 1.5 * state.haste )
|
|
end,
|
|
|
|
interval = function () return 1.5 * state.haste * ( state.conduit.rabid_shadows.enabled and 0.85 or 1 ) end,
|
|
value = 2
|
|
}
|
|
} )
|
|
spec:RegisterResource( Enum.PowerType.Mana )
|
|
|
|
|
|
-- Talents
|
|
spec:RegisterTalents( {
|
|
-- Priest
|
|
angelic_bulwark = { 82675, 108945, 1 }, -- When an attack brings you below 30% health, you gain an absorption shield equal to 15% of your maximum health for 20 sec. Cannot occur more than once every 90 sec.
|
|
angelic_feather = { 82703, 121536, 1 }, -- Places a feather at the target location, granting the first ally to walk through it 40% increased movement speed for 5 sec. Only 3 feathers can be placed at one time.
|
|
angels_mercy = { 82678, 238100, 1 }, -- Reduces the cooldown of Desperate Prayer by 20 sec.
|
|
apathy = { 82689, 390668, 1 }, -- Your Mind Blast critical strikes reduce your target's movement speed by 75% for 4 sec.
|
|
benevolence = { 82676, 415416, 1 }, -- Increases the healing of your spells by 3%.
|
|
binding_heals = { 82678, 368275, 1 }, -- 20% of Flash Heal healing on other targets also heals you.
|
|
blessed_recovery = { 82720, 390767, 1 }, -- After being struck by a melee or ranged critical hit, heal 20% of the damage taken over 6 sec.
|
|
body_and_soul = { 82706, 64129 , 1 }, -- Power Word: Shield and Leap of Faith increase your target's movement speed by 40% for 3 sec.
|
|
crystalline_reflection = { 82681, 373457, 2 }, -- Power Word: Shield instantly heals the target for 690 and reflects 10% of damage absorbed.
|
|
death_and_madness = { 82711, 321291, 1 }, -- If your Shadow Word: Death fails to kill a target at or below 20% health, its cooldown is reset. Cannot occur more than once every 10 sec. If a target dies within 7 sec after being struck by your Shadow Word: Death, you gain 8 Insanity.
|
|
dispel_magic = { 82715, 528 , 1 }, -- Dispels Magic on the enemy target, removing 1 beneficial Magic effect.
|
|
dominate_mind = { 82710, 205364, 1 }, -- Controls a mind up to 1 level above yours for 30 sec while still controlling your own mind. Does not work versus Demonic, Mechanical, or Undead beings or players. This spell shares diminishing returns with other disorienting effects.
|
|
essence_devourer = { 82674, 415479, 1 }, -- Attacks from your Shadowfiend siphon life from enemies, healing a nearby injured ally for 1,808. Attacks from your Mindbender siphon life from enemies, healing a nearby injured ally for 986.
|
|
focused_mending = { 82719, 372354, 1 }, -- Prayer of Mending does 45% increased healing to the initial target.
|
|
from_darkness_comes_light = { 82707, 390615, 1 }, -- Each time Shadow Word: Pain$?s137032[ or Purge the Wicked][] deals damage, the healing of your next Flash Heal is increased by $s1%, up to a maximum of $?a137033&$?a134735[$390617s2][${$s1*$390617u}]%.
|
|
holy_nova = { 82701, 132157, 1 }, -- An explosion of holy light around you deals up to 741 Holy damage to enemies and up to 517 healing to allies within 12 yds, reduced if there are more than 5 targets.
|
|
improved_fade = { 82686, 390670, 2 }, -- Reduces the cooldown of Fade by 5 sec.
|
|
improved_flash_heal = { 82714, 393870, 1 }, -- Increases healing done by Flash Heal by 15%.
|
|
inspiration = { 82696, 390676, 1 }, -- Reduces your target's physical damage taken by 5% for 15 sec after a critical heal with Flash Heal.
|
|
leap_of_faith = { 82716, 73325 , 1 }, -- Pulls the spirit of a party or raid member, instantly moving them directly in front of you.
|
|
lights_inspiration = { 82679, 373450, 2 }, -- Increases the maximum health gained from Desperate Prayer by 8%.
|
|
manipulation = { 82672, 390996, 2 }, -- Your $?a137033[Mind Blast, Mind Flay, and Mind Spike]?a137031[Smite and Holy Fire][Smite, Mind Blast, and Penance] casts reduce the cooldown of Mindgames by ${$s1/2}.1 sec.
|
|
mass_dispel = { 82699, 32375 , 1 }, -- Dispels magic in a 15 yard radius, removing all harmful Magic from 5 friendly targets and 1 beneficial Magic effect from 5 enemy targets. Potent enough to remove Magic that is normally undispellable.
|
|
mental_agility = { 82698, 341167, 1 }, -- Reduces the mana cost of $?a137033[Purify Disease][Purify] and Mass Dispel by $s1% and Dispel Magic by $s2%.;
|
|
mind_control = { 82710, 605 , 1 }, -- Controls a mind up to 1 level above yours for 30 sec. Does not work versus Demonic, Undead, or Mechanical beings. Shares diminishing returns with other disorienting effects.
|
|
mindgames = { 82687, 375901, 1 }, -- Assault an enemy's mind, dealing 4,069 Shadow damage and briefly reversing their perception of reality. For 5 sec, the next 4,932 damage they deal will heal their target, and the next 4,932 healing they deal will damage their target. Generates 10 Insanity.
|
|
move_with_grace = { 82702, 390620, 1 }, -- Reduces the cooldown of Leap of Faith by 30 sec.
|
|
petrifying_scream = { 82695, 55676 , 1 }, -- Psychic Scream causes enemies to tremble in place instead of fleeing in fear.
|
|
phantasm = { 82556, 108942, 1 }, -- Activating Fade removes all snare effects.
|
|
power_infusion = { 82694, 10060 , 1 }, -- Infuses the target with power for 20 sec, increasing haste by 25%. Can only be cast on players.
|
|
power_word_life = { 82676, 373481, 1 }, -- A word of holy power that heals the target for $s1. ; Only usable if the target is below $s2% health.
|
|
protective_light = { 82707, 193063, 1 }, -- Casting Flash Heal on yourself reduces all damage you take by 10% for 10 sec.
|
|
psychic_voice = { 82695, 196704, 1 }, -- Reduces the cooldown of Psychic Scream by 15 sec.
|
|
rhapsody = { 82700, 390622, 1 }, -- Every 2 sec, the damage of your next Holy Nova is increased by 10% and its healing is increased by 20%. Stacks up to 20 times.
|
|
sanguine_teachings = { 82691, 373218, 1 }, -- Increases your Leech by 5%.
|
|
sanlayn = { 82690, 199855, 1 }, -- Sanguine Teachings Sanguine Teachings grants an additional 2% Leech. Vampiric Embrace Reduces the cooldown of Vampiric Embrace by 45 sec, increases its healing done by 25%.
|
|
shackle_undead = { 82693, 9484 , 1 }, -- Shackles the target undead enemy for 50 sec, preventing all actions and movement. Damage will cancel the effect. Limit 1.
|
|
shadow_word_death = { 82712, 32379 , 1 }, -- A word of dark binding that inflicts $s1 Shadow damage to your target. If your target is not killed by Shadow Word: Death, you take backlash damage equal to $s5% of your maximum health.$?A364675[; Damage increased by ${$s3+$364675s2}% to targets below ${$s2+$364675s1}% health.][; Damage increased by $s3% to targets below $s2% health.]$?c3[][]$?s137033[; Generates ${$s4/100} Insanity.][]
|
|
shattered_perceptions = { 82673, 391112, 1 }, -- Mindgames lasts an additional 2 sec, deals an additional 25% initial damage, and reverses an additional 25% damage or healing.
|
|
sheer_terror = { 82708, 390919, 1 }, -- Increases the amount of damage required to break your Psychic Scream by 75%.
|
|
spell_warding = { 82720, 390667, 1 }, -- Reduces all magic damage taken by 3%.
|
|
surge_of_light = { 82677, 109186, 2 }, -- Your healing spells and Smite have a 4% chance to make your next Flash Heal instant and cost no mana. Stacks to 2.
|
|
throes_of_pain = { 82709, 377422, 2 }, -- Shadow Word: Pain deals an additional 3% damage. When an enemy dies while afflicted by your Shadow Word: Pain, you gain 3 Insanity.
|
|
tithe_evasion = { 82688, 373223, 1 }, -- Shadow Word: Death deals 75% less damage to you.
|
|
translucent_image = { 82685, 373446, 1 }, -- Fade reduces damage you take by 10%.
|
|
twins_of_the_sun_priestess = { 82683, 373466, 1 }, -- Power Infusion also grants you 100% of its effects when used on an ally.
|
|
twist_of_fate = { 82684, 390972, 2 }, -- After damaging or healing a target below 35% health, gain 5% increased damage and healing for 8 sec.
|
|
unwavering_will = { 82697, 373456, 2 }, -- While above 75% health, the cast time of your Flash Heal is reduced by 5%.
|
|
vampiric_embrace = { 82691, 15286 , 1 }, -- Fills you with the embrace of Shadow energy for 12 sec, causing you to heal a nearby ally for 62% of any single-target Shadow spell damage you deal.
|
|
void_shield = { 82692, 280749, 1 }, -- When cast on yourself, 30% of damage you deal refills your Power Word: Shield.
|
|
void_shift = { 82674, 108968, 1 }, -- You and the currently targeted party or raid member swap health percentages. Increases the lower health percentage of the two to 25% if below that amount.
|
|
void_tendrils = { 82708, 108920, 1 }, -- Summons shadowy tendrils, rooting all enemies within 8 yards for 20 sec or until the tendril is killed.
|
|
words_of_the_pious = { 82721, 377438, 1 }, -- For 12 sec after casting Power Word: Shield, you deal 10% additional damage and healing with Smite and Holy Nova.
|
|
|
|
-- Shadow
|
|
ancient_madness = { 82656, 341240, 1 }, -- Voidform and Dark Ascension increase the critical strike chance of your spells by 10% for 20 sec, reducing by 0.5% every sec.
|
|
auspicious_spirits = { 82667, 155271, 1 }, -- Your Shadowy Apparitions deal 15% increased damage and have a chance to generate 1 Insanity.
|
|
dark_ascension = { 82657, 391109, 1 }, -- Increases your non-periodic Shadow damage by 25% for 20 sec. Generates 30 Insanity.
|
|
dark_evangelism = { 82660, 391095, 2 }, -- Your Mind Flay, Mind Spike, and Void Torrent damage increase the damage of your periodic Shadow effects by 1%, stacking up to 5 times.
|
|
deathspeaker = { 82558, 392507, 1 }, -- Your Shadow Word: Pain damage has a chance to reset the cooldown of Shadow Word: Death, increase its damage by $392511s2%, and deal damage as if striking a target below $32379s2% health.
|
|
devouring_plague = { 82665, 335467, 1 }, -- Afflicts the target with a disease that instantly causes 2,975 Shadow damage plus an additional 3,481 Shadow damage over 6 sec. Heals you for 30% of damage dealt. If this effect is reapplied, any remaining damage will be added to the new Devouring Plague.
|
|
dispersion = { 82663, 47585 , 1 }, -- Disperse into pure shadow energy, reducing all damage taken by 75% for 6 sec and healing you for 25% of your maximum health over its duration, but you are unable to attack or cast spells. Increases movement speed by 50% and makes you immune to all movement impairing effects. Castable while stunned, feared, or silenced.
|
|
distorted_reality = { 82647, 409044, 1 }, -- Increases the damage of Devouring Plague by 20% and causes it to deal its damage over 12 sec, but increases its Insanity cost by 5.
|
|
divine_star = { 82680, 122121, 1 }, -- Throw a Divine Star forward 27 yds, healing allies in its path for 1,151 and dealing 1,012 Shadow damage to enemies. After reaching its destination, the Divine Star returns to you, healing allies and damaging enemies in its path again. Healing reduced beyond 6 targets. Generates 6 Insanity.
|
|
halo = { 82680, 120644, 1 }, -- Creates a ring of Shadow energy around you that quickly expands to a 30 yd radius, healing allies for 2,647 and dealing 2,607 Shadow damage to enemies. Healing reduced beyond 6 targets. Generates 10 Insanity.
|
|
idol_of_cthun = { 82643, 377349, 1 }, -- Mind Flay, Mind Spike, and Void Torrent have a chance to spawn a Void Tendril that channels Mind Flay or Void Lasher that channels Mind Sear at your target. Mind Flay Assaults the target's mind with Shadow energy, causing 5,341 Shadow damage over 15 sec and slowing their movement speed by 30%. Generates 15 Insanity over the duration. Mind Sear Corrosive shadow energy radiates from the target, dealing 2,848 Shadow damage over 15 sec to all enemies within 10 yards of the target. Damage reduced beyond 5 targets. Generates 15 Insanity over the duration.
|
|
idol_of_nzoth = { 82552, 373280, 1 }, -- Your periodic Shadow Word: Pain and Vampiric Touch damage has a 30% chance to apply Echoing Void, max 4 targets. Each time Echoing Void is applied, it has a chance to collapse, consuming a stack every 1 sec to deal 198 Shadow damage to all nearby enemies. Damage reduced beyond 5 targets. If an enemy dies with Echoing Void, all stacks collapse immediately.
|
|
idol_of_yoggsaron = { 82555, 373273, 1 }, -- After conjuring Shadowy Apparitions, gain a stack of Idol of Yogg-Saron. At 25 stacks, you summon a Thing from Beyond that casts Void Spike at nearby enemies for 20 sec. Void Spike Hurls a bolt of dark magic, dealing 1,557 Shadow damage and 467 Shadow damage to all enemies within 10 yards of the target. Damage reduced beyond 5 targets.
|
|
idol_of_yshaarj = { 82553, 373310, 1 }, -- Summoning Mindbender causes you to gain a benefit based on your target's current state or increases its duration by 5 sec if no state matches. Healthy: You and your Mindbender deal 5% additional damage. Enraged: Devours the Enraged effect, increasing your Haste by 5%. Stunned: Generates 5 Insanity every 1 sec. Feared: You and your Mindbender deal 5% increased damage and do not break Fear effects.
|
|
inescapable_torment = { 82644, 373427, 1 }, -- $?a137032[Penance, ][]Mind Blast and Shadow Word: Death cause your Mindbender or Shadowfiend to teleport behind your target, slashing up to $s1 nearby enemies for $<value> Shadow damage and extending its duration by ${$s2/1000}.1 sec.
|
|
insidious_ire = { 82560, 373212, 2 }, -- While you have Shadow Word: Pain, Devouring Plague, and Vampiric Touch active on the same target, your Mind Blast and Void Torrent deal 20% more damage.
|
|
intangibility = { 82659, 288733, 1 }, -- Dispersion heals you for an additional 25% of your maximum health over its duration and its cooldown is reduced by 30 sec.
|
|
last_word = { 82652, 263716, 1 }, -- Reduces the cooldown of Silence by 15 sec.
|
|
maddening_touch = { 82645, 391228, 2 }, -- Vampiric Touch deals 10% additional damage and has a chance to generate 1 Insanity each time it deals damage.
|
|
malediction = { 82655, 373221, 1 }, -- Reduces the cooldown of Void Torrent by 15 sec.
|
|
mastermind = { 82671, 391151, 2 }, -- Increases the critical strike chance of Mind Blast, Mind Spike, Mind Flay, and Shadow Word: Death by 4% and increases their critical strike damage by 20%.
|
|
mental_decay = { 82658, 375994, 1 }, -- Increases the damage of Mind Flay and Mind Spike by 10%. The duration of your Shadow Word: Pain and Vampiric Touch is increased by 1 sec when enemies suffer damage from Mind Flay and 2 sec when enemies suffer damage from Mind Spike.
|
|
mental_fortitude = { 82659, 377065, 1 }, -- Healing from Vampiric Touch and Devouring Plague when you are at maximum health will shield you for the same amount. The shield cannot exceed 10% of your maximum health.
|
|
mind_devourer = { 82561, 373202, 2 }, -- Mind Blast has a 4% chance to make your next Devouring Plague cost no Insanity and deal 20% additional damage.
|
|
mind_melt = { 93172, 391090, 1 }, -- Mind Spike increases the critical strike chance of Mind Blast by 20%, stacking up to 4 times. Lasts 10 sec.
|
|
mind_spike = { 82557, 73510 , 1 }, -- Blasts the target for 1,436 Shadowfrost damage. Generates 4 Insanity.
|
|
mindbender = { 82648, 200174, 1 }, -- Summons a Mindbender to attack the target for 15 sec. Generates 2 Insanity each time the Mindbender attacks.
|
|
minds_eye = { 82647, 407470, 1 }, -- Reduces the Insanity cost of Devouring Plague by 5.
|
|
misery = { 93171, 238558, 1 }, -- Vampiric Touch also applies Shadow Word: Pain to the target. Shadow Word: Pain lasts an additional 5 sec.
|
|
phantasmal_pathogen = { 82563, 407469, 2 }, -- Shadow Apparitions deal 0% increased damage to targets affected by your Devouring Plague.
|
|
prayer_of_mending = { 82718, 33076 , 1 }, -- Places a ward on an ally that heals them for 1,253 the next time they take damage, and then jumps to another ally within 30 yds. Jumps up to 4 times and lasts 30 sec after each jump.
|
|
psychic_horror = { 82652, 64044 , 1 }, -- Terrifies the target in place, stunning them for 4 sec.
|
|
psychic_link = { 82670, 199484, 1 }, -- Your direct damage spells inflict 25% of their damage on all other targets afflicted by your Vampiric Touch within 40 yards. Does not apply to damage from Shadowy Apparitions, Shadow Word: Pain, and Vampiric Touch.
|
|
purify_disease = { 82704, 213634, 1 }, -- Removes all Disease effects from a friendly target.
|
|
renew = { 82717, 139 , 1 }, -- Fill the target with faith in the light, healing for 4,706 over 15 sec.
|
|
screams_of_the_void = { 82649, 375767, 2 }, -- Devouring Plague causes your Shadow Word: Pain and Vampiric Touch to deal damage 40% faster on all targets for 3 sec.
|
|
shadow_crash = { 82669, 205385, 1 }, -- Hurl a bolt of slow-moving Shadow energy at the destination, dealing 1,141 Shadow damage. Generates 6 Insanity.
|
|
shadowfiend = { 82713, 34433 , 1 }, -- Summons a shadowy fiend to attack the target for 15 sec. Generates 2 Insanity each time the Shadowfiend attacks.
|
|
shadowy_apparitions = { 82666, 341491, 1 }, -- Mind Blast, Devouring Plague, and Void Bolt conjure Shadowy Apparitions that float towards all targets afflicted by your Vampiric Touch for 428 Shadow damage. Critical strikes increase the damage by 100%.
|
|
shadowy_insight = { 82662, 375888, 1 }, -- Shadow Word: Pain periodic damage has a chance to reset the remaining cooldown on Mind Blast and cause your next Mind Blast to be instant.
|
|
silence = { 82651, 15487 , 1 }, -- Silences the target, preventing them from casting spells for 4 sec. Against non-players, also interrupts spellcasting and prevents any spell in that school from being cast for 4 sec.
|
|
surge_of_insanity = { 82668, 391399, 1 }, -- Devouring Plague transforms your next Mind Flay or Mind Spike into a more powerful spell. Can accumulate up to 2 charges. Mind Flay: Insanity Assaults the target's mind with Shadow energy, causing 6,255 Shadow damage over 2.4 sec and slowing their movement speed by 70%. Generates 12 Insanity over the duration. Mind Spike: Insanity Blasts the target for 4,093 Shadowfrost damage. Generates 6 Insanity.
|
|
thought_harvester = { 82653, 406788, 1 }, -- Mind Blast gains an additional charge.
|
|
tormented_spirits = { 93170, 391284, 2 }, -- Your Shadow Word: Pain damage has a 5% chance to create Shadowy Apparitions that float towards all targets afflicted by your Vampiric Touch. Critical strikes increase the chance to 10%.
|
|
unfurling_darkness = { 82661, 341273, 1 }, -- After casting Vampiric Touch on a target, your next Vampiric Touch within 8 sec is instant cast and deals 5,504 Shadow damage immediately. This effect cannot occur more than once every 15 sec.
|
|
void_eruption = { 82657, 228260, 1 }, -- Releases an explosive blast of pure void energy, activating Voidform and causing 2,570 Shadow damage to all enemies within 10 yds of your target. During Voidform, this ability is replaced by Void Bolt. Casting Devouring Plague increases the duration of Voidform by 2.5 sec.
|
|
void_torrent = { 82654, 263165, 1 }, -- Channel a torrent of void energy into the target, dealing 13,694 Shadow damage over 3 sec. Generates 24 Insanity over the duration.
|
|
voidtouched = { 82646, 407430, 1 }, -- Increases your Devouring Plague damage by 6% and increases your maximum Insanity by 50.
|
|
whispering_shadows = { 82559, 406777, 1 }, -- Shadow Crash applies Vampiric Touch to up to 8 targets it damages.
|
|
} )
|
|
|
|
|
|
-- PvP Talents
|
|
spec:RegisterPvpTalents( {
|
|
absolute_faith = 5481, -- (408853) Leap of Faith also pulls the spirit of the 3 furthest allies within 40 yards and shields you and the affected allies for 12,331.
|
|
catharsis = 5486, -- (391297) 15% of all damage you take is stored. The stored amount cannot exceed 12% of your maximum health. The initial damage of your next Shadow Word: Pain deals this stored damage to your target.
|
|
driven_to_madness = 106 , -- (199259) While Voidform or Dark Ascension is not active, being attacked will reduce the cooldown of Void Eruption and Dark Ascension by 3 sec.
|
|
improved_mass_dispel = 5636, -- (426438) Reduces the cooldown of Mass Dispel by ${$s1/-1000} sec.
|
|
mind_trauma = 113 , -- (199445) Siphon haste from enemies, stealing 4% haste per stack of Mind Trauma, stacking up to 6 times. Mind Spike and fully channeled Mind Flays grant 1 stack of Mind Trauma and fully channeled Void Torrents grant 3 stacks of Mind Trauma. Lasts 20 sec. You can only gain 3 stacks of Mind Trauma from a single enemy.
|
|
phase_shift = 5568, -- (408557) Step into the shadows when you cast Fade, avoiding all attacks and spells for 1 sec. Interrupt effects are not affected by Phase Shift.
|
|
psyfiend = 763 , -- (211522) Summons a Psyfiend with 2,330 health for 12 sec beside you to attack the target at range with Psyflay. Psyflay Deals up to 1% of the target's total health in Shadow damage every 0.8 sec. Also slows their movement speed by 50% and reduces healing received by 50%.
|
|
thoughtsteal = 5381, -- (316262) Peer into the mind of the enemy, attempting to steal a known spell. If stolen, the victim cannot cast that spell for 20 sec. Can only be used on Humanoids with mana. If you're unable to find a spell to steal, the cooldown of Thoughtsteal is reset.
|
|
void_volley = 5447, -- (357711) After casting Void Eruption or Dark Ascension, send a slow-moving bolt of Shadow energy at a random location every 0.5 sec for 3 sec, dealing 1,266 Shadow damage to all targets within 8 yds, and causing them to flee in Horror for 2 sec.
|
|
} )
|
|
|
|
|
|
spec:RegisterTotem( "mindbender", 136214 )
|
|
spec:RegisterTotem( "shadowfiend", 136199 )
|
|
|
|
local unfurling_darkness_triggered = 0
|
|
|
|
spec:RegisterHook( "COMBAT_LOG_EVENT_UNFILTERED", function( _, subtype, _, sourceGUID, sourceName, _, _, destGUID, destName, destFlags, _, spellID, spellName )
|
|
if sourceGUID == GUID then
|
|
if subtype == "SPELL_AURA_REMOVED" and spellID == 341207 then
|
|
Hekili:ForceUpdate( subtype )
|
|
|
|
elseif subtype == "SPELL_AURA_APPLIED" then
|
|
if spellID == 341273 then
|
|
unfurling_darkness_triggered = GetTime()
|
|
elseif spellID == 341207 then
|
|
Hekili:ForceUpdate( subtype )
|
|
end
|
|
end
|
|
end
|
|
end, false )
|
|
|
|
|
|
local ExpireVoidform = setfenv( function()
|
|
applyBuff( "shadowform" )
|
|
if Hekili.ActiveDebug then Hekili:Debug( "Voidform expired, Shadowform applied. Did it stick? %s.", buff.voidform.up and "Yes" or "No" ) end
|
|
end, state )
|
|
|
|
|
|
spec:RegisterGear( "tier29", 200327, 200329, 200324, 200326, 200328 )
|
|
spec:RegisterAuras( {
|
|
dark_reveries = {
|
|
id = 394963,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
gathering_shadows = {
|
|
id = 394961,
|
|
duration = 15,
|
|
max_stack = 3
|
|
}
|
|
} )
|
|
|
|
spec:RegisterGear( "tier30", 202543, 202542, 202541, 202545, 202540, 217202, 217204, 217205, 217201, 217203 )
|
|
spec:RegisterAuras( {
|
|
darkflame_embers = {
|
|
id = 409502,
|
|
duration = 3600,
|
|
max_stack = 4
|
|
},
|
|
darkflame_shroud = {
|
|
id = 410871,
|
|
duration = 10,
|
|
max_stack = 1
|
|
}
|
|
} )
|
|
|
|
spec:RegisterGear( "tier31", 207279, 207280, 207281, 207282, 207284 )
|
|
spec:RegisterAura( "deaths_torment", {
|
|
id = 423726,
|
|
duration = 60,
|
|
max_stack = 12
|
|
} )
|
|
|
|
|
|
-- Don't need to actually snapshot this, the APL only cares about the power of the cast.
|
|
spec:RegisterStateExpr( "pmultiplier", function ()
|
|
if this_action ~= "devouring_plague" then return 1 end
|
|
|
|
local mult = 1
|
|
if buff.gathering_shadows.up then mult = mult * ( 1 + ( buff.gathering_shadows.stack * 0.12 ) ) end
|
|
if buff.mind_devourer.up then mult = mult * 1.2 end
|
|
|
|
return mult
|
|
end )
|
|
|
|
|
|
spec:RegisterHook( "reset_precast", function ()
|
|
if buff.voidform.up or time > 0 then
|
|
applyBuff( "shadowform" )
|
|
end
|
|
|
|
if unfurling_darkness_triggered > 0 and now - unfurling_darkness_triggered < 15 then
|
|
applyBuff( "unfurling_darkness_icd", now - unfurling_darkness_triggered )
|
|
end
|
|
|
|
if pet.mindbender.active then
|
|
applyBuff( "mindbender", pet.mindbender.remains )
|
|
buff.mindbender.applied = action.mindbender.lastCast
|
|
buff.mindbender.duration = 15
|
|
buff.mindbender.expires = action.mindbender.lastCast + 15
|
|
elseif pet.shadowfiend.active then
|
|
applyBuff( "shadowfiend", pet.shadowfiend.remains )
|
|
buff.shadowfiend.applied = action.shadowfiend.lastCast
|
|
buff.shadowfiend.duration = 15
|
|
buff.shadowfiend.expires = action.shadowfiend.lastCast + 15
|
|
end
|
|
|
|
if buff.voidform.up then
|
|
state:QueueAuraExpiration( "voidform", ExpireVoidform, buff.voidform.expires )
|
|
end
|
|
|
|
if IsActiveSpell( 356532 ) then
|
|
applyBuff( "direct_mask", class.abilities.fae_guardians.lastCast + 20 - now )
|
|
end
|
|
|
|
-- If we are channeling Mind Sear, see if it started with Thought Harvester.
|
|
local _, _, _, start, finish, _, _, spellID = UnitChannelInfo( "player" )
|
|
|
|
if settings.pad_void_bolt and cooldown.void_bolt.remains > 0 then
|
|
reduceCooldown( "void_bolt", latency * 2 )
|
|
end
|
|
|
|
if settings.pad_ascended_blast and cooldown.ascended_blast.remains > 0 then
|
|
reduceCooldown( "ascended_blast", latency * 2 )
|
|
end
|
|
end )
|
|
|
|
spec:RegisterHook( "TALENTS_UPDATED", function()
|
|
local sf = talent.mindbender.enabled and "mindbender" or "shadowfiend"
|
|
class.totems.fiend = spec.totems[ sf ]
|
|
totem.fiend = totem[ sf ]
|
|
cooldown.fiend = cooldown[ sf ]
|
|
pet.fiend = pet[ sf ]
|
|
end )
|
|
|
|
|
|
spec:RegisterHook( "pregain", function( amount, resource, overcap )
|
|
if amount > 0 and resource == "insanity" and state.buff.memory_of_lucid_dreams.up then
|
|
amount = amount * 2
|
|
end
|
|
|
|
return amount, resource, overcap
|
|
end )
|
|
|
|
|
|
spec:RegisterStateTable( "priest", {
|
|
self_power_infusion = true
|
|
} )
|
|
|
|
|
|
-- Auras
|
|
spec:RegisterAuras( {
|
|
angelic_feather = {
|
|
id = 121557,
|
|
duration = 5,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Movement speed reduced by $s1%.
|
|
-- https://wowhead.com/beta/spell=390669
|
|
apathy = {
|
|
id = 390669,
|
|
duration = 4,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
blessed_recovery = {
|
|
id = 390771,
|
|
duration = 6,
|
|
tick_time = 2,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Movement speed increased by $s1%.
|
|
-- https://wowhead.com/beta/spell=65081
|
|
body_and_soul = {
|
|
id = 65081,
|
|
duration = 3,
|
|
type = "Magic",
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Your non-periodic Shadow damage is increased by $w1%. $?s341240[Critical strike chance increased by ${$W4}.1%.][]
|
|
-- https://wowhead.com/beta/spell=391109
|
|
dark_ascension = {
|
|
id = 391109,
|
|
duration = 20,
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Periodic Shadow damage increased by $w1%.
|
|
-- https://wowhead.com/beta/spell=391099
|
|
dark_evangelism = {
|
|
id = 391099,
|
|
duration = 25,
|
|
max_stack = 5
|
|
},
|
|
dark_thought = {
|
|
id = 341207,
|
|
duration = 10,
|
|
max_stack = 1,
|
|
copy = "dark_thoughts"
|
|
},
|
|
death_and_madness_debuff = {
|
|
id = 322098,
|
|
duration = 7,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Shadow Word: Death damage increased by $s2% and your next Shadow Word: Death deals damage as if striking a target below $32379s2% health.
|
|
-- https://wowhead.com/beta/spell=392511
|
|
deathspeaker = {
|
|
id = 392511,
|
|
duration = 15,
|
|
max_stack = 1
|
|
},
|
|
-- Maximum health increased by $w1%.
|
|
-- https://wowhead.com/beta/spell=19236
|
|
desperate_prayer = {
|
|
id = 19236,
|
|
duration = 10,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Suffering $w2 damage every $t2 sec.
|
|
-- https://wowhead.com/beta/spell=335467
|
|
devouring_plague = {
|
|
id = 335467,
|
|
duration = function() return talent.distorted_reality.enabled and 12 or 6 end,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Damage taken reduced by $s1%. Healing for $?s288733[${$s5+$288733s2}][$s5]% of maximum health. Cannot attack or cast spells. Movement speed increased by $s4% and immune to all movement impairing effects.
|
|
-- https://wowhead.com/beta/spell=47585
|
|
dispersion = {
|
|
id = 47585,
|
|
duration = 6,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Healing received increased by $w2%.
|
|
-- https://wowhead.com/beta/spell=64844
|
|
divine_hymn = {
|
|
id = 64844,
|
|
duration = 15,
|
|
type = "Magic",
|
|
max_stack = 5
|
|
},
|
|
-- Talent: Under the control of the Priest.
|
|
-- https://wowhead.com/beta/spell=205364
|
|
dominate_mind = {
|
|
id = 205364,
|
|
duration = 30,
|
|
mechanic = "charm",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
echoing_void = {
|
|
id = 373281,
|
|
duration = 20,
|
|
max_stack = 20
|
|
},
|
|
-- Reduced threat level. Enemies have a reduced attack range against you.$?e3 [ Damage taken reduced by $s4%.][]
|
|
-- https://wowhead.com/beta/spell=586
|
|
fade = {
|
|
id = 586,
|
|
duration = 10,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Covenant: Damage taken reduced by $w2%.
|
|
-- https://wowhead.com/beta/spell=324631
|
|
fleshcraft = {
|
|
id = 324631,
|
|
duration = 3,
|
|
tick_time = 0.5,
|
|
max_stack = 1
|
|
},
|
|
-- All magical damage taken reduced by $w1%.; All physical damage taken reduced by $w2%.
|
|
-- https://wowhead.com/beta/spell=426401
|
|
focused_will = {
|
|
id = 426401,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
-- Penance fires $w2 additional $Lbolt:bolts;.
|
|
harsh_discipline = {
|
|
id = 373183,
|
|
duration = 30,
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Conjuring $373273s1 Shadowy Apparitions will summon a Thing from Beyond.
|
|
-- https://wowhead.com/beta/spell=373276
|
|
idol_of_yoggsaron = {
|
|
id = 373276,
|
|
duration = 120,
|
|
max_stack = 25
|
|
},
|
|
insidious_ire = {
|
|
id = 373213,
|
|
duration = 12,
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Reduces physical damage taken by $s1%.
|
|
-- https://wowhead.com/beta/spell=390677
|
|
inspiration = {
|
|
id = 390677,
|
|
duration = 15,
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Being pulled toward the Priest.
|
|
-- https://wowhead.com/beta/spell=73325
|
|
leap_of_faith = {
|
|
id = 73325,
|
|
duration = 1.5,
|
|
mechanic = "grip",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
levitate = {
|
|
id = 111759,
|
|
duration = 600,
|
|
type = "Magic",
|
|
max_stack = 1,
|
|
},
|
|
mental_fortitude = {
|
|
id = 377066,
|
|
duration = 15,
|
|
max_stack = 1,
|
|
copy = 194022
|
|
},
|
|
-- Talent: Under the command of the Priest.
|
|
-- https://wowhead.com/beta/spell=605
|
|
mind_control = {
|
|
id = 605,
|
|
duration = 30,
|
|
mechanic = "charm",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
mind_devourer = {
|
|
id = 373204,
|
|
duration = 15,
|
|
max_stack = 1,
|
|
copy = 338333
|
|
},
|
|
-- Movement speed slowed by $s2% and taking Shadow damage every $t1 sec.
|
|
-- https://wowhead.com/beta/spell=15407
|
|
mind_flay = {
|
|
id = 15407,
|
|
duration = function () return 4.5 * haste end,
|
|
tick_time = function () return 0.75 * haste end,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Movement speed slowed by $s2% and taking Shadow damage every $t1 sec.
|
|
-- https://wowhead.com/beta/spell=391403
|
|
mind_flay_insanity = {
|
|
id = 391401,
|
|
duration = 15,
|
|
max_stack = 2
|
|
},
|
|
mind_flay_insanity_dot = {
|
|
id = 391403,
|
|
duration = function () return 3 * haste end,
|
|
tick_time = function () return 0.75 * haste end,
|
|
type = "Magic",
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: The cast time of your next Mind Blast is reduced by $w1% and its critical strike chance is increased by $s2%.
|
|
-- https://wowhead.com/beta/spell=391092
|
|
mind_melt = {
|
|
id = 391092,
|
|
duration = 10,
|
|
max_stack = 4
|
|
},
|
|
-- Reduced distance at which target will attack.
|
|
-- https://wowhead.com/beta/spell=453
|
|
mind_soothe = {
|
|
id = 453,
|
|
duration = 20,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
mind_spike_insanity = {
|
|
id = 407468,
|
|
duration = 15,
|
|
max_stack = 2
|
|
},
|
|
-- Sight granted through target's eyes.
|
|
-- https://wowhead.com/beta/spell=2096
|
|
mind_vision = {
|
|
id = 2096,
|
|
duration = 60,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
mindbender = {
|
|
duration = 15,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent / Covenant: The next $w2 damage and $w5 healing dealt will be reversed.
|
|
-- https://wowhead.com/beta/spell=323673
|
|
mindgames = {
|
|
id = 375901,
|
|
duration = function() return talent.shattered_perceptions.enabled and 7 or 5 end,
|
|
type = "Magic",
|
|
max_stack = 1,
|
|
copy = 323673
|
|
},
|
|
mind_trauma = {
|
|
id = 247776,
|
|
duration = 15,
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Haste increased by $w1%.
|
|
-- https://wowhead.com/beta/spell=10060
|
|
power_infusion = {
|
|
id = 10060,
|
|
duration = 15,
|
|
max_stack = 1
|
|
},
|
|
-- Stamina increased by $w1%.$?$w2>0[ Magic damage taken reduced by $w2%.][]
|
|
-- https://wowhead.com/beta/spell=21562
|
|
power_word_fortitude = {
|
|
id = 21562,
|
|
duration = 3600,
|
|
type = "Magic",
|
|
max_stack = 1,
|
|
shared = "player", -- use anyone's buff on the player, not just player's.
|
|
},
|
|
-- Absorbs $w1 damage.
|
|
-- https://wowhead.com/beta/spell=17
|
|
power_word_shield = {
|
|
id = 17,
|
|
duration = 15,
|
|
mechanic = "shield",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
protective_light = {
|
|
id = 193065,
|
|
duration = 10,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Stunned.
|
|
-- https://wowhead.com/beta/spell=64044
|
|
psychic_horror = {
|
|
id = 64044,
|
|
duration = 4,
|
|
mechanic = "stun",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Disoriented.
|
|
-- https://wowhead.com/beta/spell=8122
|
|
psychic_scream = {
|
|
id = 8122,
|
|
duration = 8,
|
|
mechanic = "flee",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- $w1 Radiant damage every $t1 seconds.
|
|
-- https://wowhead.com/beta/spell=204213
|
|
purge_the_wicked = {
|
|
id = 204213,
|
|
duration = 20,
|
|
tick_time = 2,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Healing $w1 health every $t1 sec.
|
|
-- https://wowhead.com/beta/spell=139
|
|
renew = {
|
|
id = 139,
|
|
duration = 15,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
rhapsody = {
|
|
id = 390636,
|
|
duration = 3600,
|
|
max_stack = 20
|
|
},
|
|
-- Taking $s2% increased damage from the Priest.
|
|
-- https://wowhead.com/beta/spell=214621
|
|
schism = {
|
|
id = 214621,
|
|
duration = 9,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Shadow Word: Pain and Vampiric Touch are dealing damage $w2% faster.
|
|
screams_of_the_void = {
|
|
id = 393919,
|
|
duration = 3,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Shackled.
|
|
-- https://wowhead.com/beta/spell=9484
|
|
shackle_undead = {
|
|
id = 9484,
|
|
duration = 50,
|
|
mechanic = "shackle",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
shadow_crash_debuff = {
|
|
id = 342385,
|
|
duration = 15,
|
|
max_stack = 2
|
|
},
|
|
-- Suffering $w2 Shadow damage every $t2 sec.
|
|
-- https://wowhead.com/beta/spell=589
|
|
shadow_word_pain = {
|
|
id = 589,
|
|
duration = function() return talent.misery.enabled and 21 or 16 end,
|
|
type = "Magic",
|
|
max_stack = 1,
|
|
tick_time = function () return 2 * haste * ( 1 - 0.4 * ( buff.screams_of_the_void.up and talent.screams_of_the_void.rank or 0 ) ) end,
|
|
},
|
|
-- Talent: 343726
|
|
-- https://wowhead.com/beta/spell=34433
|
|
shadowfiend = {
|
|
id = 34433,
|
|
duration = 15,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Spell damage dealt increased by $s1%.
|
|
-- https://wowhead.com/beta/spell=232698
|
|
shadowform = {
|
|
id = 232698,
|
|
duration = 3600,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
shadowy_apparitions = {
|
|
id = 78203,
|
|
},
|
|
shadowy_insight = {
|
|
id = 375981,
|
|
duration = 10,
|
|
max_stack = 1,
|
|
copy = 124430
|
|
},
|
|
-- Talent: Silenced.
|
|
-- https://wowhead.com/beta/spell=15487
|
|
silence = {
|
|
id = 15487,
|
|
duration = 4,
|
|
mechanic = "silence",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Taking Shadow damage every $t1 sec.
|
|
-- https://wowhead.com/beta/spell=363656
|
|
torment_mind = {
|
|
id = 363656,
|
|
duration = 6,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Increases damage and healing by $w1%.
|
|
-- https://wowhead.com/beta/spell=390978
|
|
twist_of_fate = {
|
|
id = 390978,
|
|
duration = 8,
|
|
max_stack = 1
|
|
},
|
|
-- Absorbing $w3 damage.
|
|
ultimate_penitence = {
|
|
id = 421453,
|
|
duration = 6.0,
|
|
max_stack = 1,
|
|
},
|
|
unfurling_darkness = {
|
|
id = 341282,
|
|
duration = 15,
|
|
max_stack = 1,
|
|
},
|
|
unfurling_darkness_icd = {
|
|
id = 341291,
|
|
duration = 15,
|
|
max_stack = 1
|
|
},
|
|
-- Suffering $w1 damage every $t1 sec. When damaged, the attacker is healed for $325118m1.
|
|
-- https://wowhead.com/beta/spell=325203
|
|
unholy_transfusion = {
|
|
id = 325203,
|
|
duration = 15,
|
|
tick_time = 3,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- $15286s1% of any single-target Shadow spell damage you deal heals a nearby ally.
|
|
vampiric_embrace = {
|
|
id = 15286,
|
|
duration = 12.0,
|
|
tick_time = 0.5,
|
|
pandemic = true,
|
|
max_stack = 1,
|
|
},
|
|
-- Suffering $w2 Shadow damage every $t2 sec.
|
|
-- https://wowhead.com/beta/spell=34914
|
|
vampiric_touch = {
|
|
id = 34914,
|
|
duration = 21,
|
|
tick_time = function () return 3 * haste * ( 1 - 0.4 * ( buff.screams_of_the_void.up and talent.screams_of_the_void.rank or 0 ) ) end,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
void_bolt = {
|
|
id = 228266,
|
|
},
|
|
-- Talent: A Shadowy tendril is appearing under you.
|
|
-- https://wowhead.com/beta/spell=108920
|
|
void_tendrils_root = {
|
|
id = 108920,
|
|
duration = 0.5,
|
|
mechanic = "root",
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: Dealing $s1 Shadow damage to the target every $t1 sec.
|
|
-- https://wowhead.com/beta/spell=263165
|
|
void_torrent = {
|
|
id = 263165,
|
|
duration = 3,
|
|
tick_time = 1,
|
|
type = "Magic",
|
|
max_stack = 1
|
|
},
|
|
-- Talent: |cFFFFFFFFGenerates ${$s1*$s2/100} Insanity over $d.|r
|
|
-- https://wowhead.com/beta/spell=289577
|
|
void_torrent_insanity = {
|
|
id = 289577,
|
|
duration = 3,
|
|
tick_time = 1,
|
|
max_stack = 1
|
|
},
|
|
voidform = {
|
|
id = 194249,
|
|
duration = 15, -- function () return talent.legacy_of_the_void.enabled and 3600 or 15 end,
|
|
max_stack = 1,
|
|
},
|
|
void_tendril_mind_flay = {
|
|
id = 193473,
|
|
duration = 15,
|
|
tick_time = 1,
|
|
max_stack = 1
|
|
},
|
|
void_lasher_mind_sear = {
|
|
id = 394976,
|
|
duration = 15,
|
|
tick_time = 1,
|
|
max_stack = 1
|
|
},
|
|
weakened_soul = {
|
|
id = 6788,
|
|
duration = function () return 7.5 * haste end,
|
|
max_stack = 1,
|
|
},
|
|
-- The damage of your next Smite is increased by $w1%, or the absorb of your next Power Word: Shield is increased by $w2%.
|
|
weal_and_woe = {
|
|
id = 390787,
|
|
duration = 20.0,
|
|
max_stack = 1,
|
|
},
|
|
-- Talent: Damage and healing of Smite and Holy Nova is increased by $s1%.
|
|
-- https://wowhead.com/beta/spell=390933
|
|
words_of_the_pious = {
|
|
id = 390933,
|
|
duration = 12,
|
|
max_stack = 1
|
|
},
|
|
|
|
-- Azerite Powers
|
|
chorus_of_insanity = {
|
|
id = 279572,
|
|
duration = 120,
|
|
max_stack = 120,
|
|
},
|
|
death_denied = {
|
|
id = 287723,
|
|
duration = 10,
|
|
max_stack = 1,
|
|
},
|
|
depth_of_the_shadows = {
|
|
id = 275544,
|
|
duration = 12,
|
|
max_stack = 30
|
|
},
|
|
searing_dialogue = {
|
|
id = 288371,
|
|
duration = 1,
|
|
max_stack = 1
|
|
},
|
|
thought_harvester = {
|
|
id = 288343,
|
|
duration = 20,
|
|
max_stack = 1,
|
|
copy = "harvested_thoughts" -- SimC uses this name (carryover from Legion?)
|
|
},
|
|
|
|
-- Legendaries (Shadowlands)
|
|
measured_contemplation = {
|
|
id = 341824,
|
|
duration = 3600,
|
|
max_stack = 4
|
|
},
|
|
shadow_word_manipulation = {
|
|
id = 357028,
|
|
duration = 10,
|
|
max_stack = 1,
|
|
},
|
|
|
|
-- Conduits
|
|
dissonant_echoes = {
|
|
id = 343144,
|
|
duration = 10,
|
|
max_stack = 1,
|
|
},
|
|
lights_inspiration = {
|
|
id = 337749,
|
|
duration = 5,
|
|
max_stack = 1
|
|
},
|
|
translucent_image = {
|
|
id = 337661,
|
|
duration = 5,
|
|
max_stack = 1
|
|
},
|
|
} )
|
|
|
|
|
|
|
|
|
|
|
|
-- Abilities
|
|
spec:RegisterAbilities( {
|
|
-- Talent: Places a feather at the target location, granting the first ally to walk through it $121557s1% increased movement speed for $121557d. Only 3 feathers can be placed at one time.
|
|
angelic_feather = {
|
|
id = 121536,
|
|
cast = 0,
|
|
charges = 3,
|
|
cooldown = 20,
|
|
recharge = 20,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
talent = "angelic_feather",
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
end,
|
|
},
|
|
|
|
-- Heals the target and ${$s2-1} injured allies within $A1 yards of the target for $s1.
|
|
circle_of_healing = {
|
|
id = 204883,
|
|
cast = 0,
|
|
cooldown = 15,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.033,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
end,
|
|
},
|
|
|
|
-- Talent: Increases your non-periodic Shadow damage by $s1% for 20 sec. |cFFFFFFFFGenerates ${$m2/100} Insanity.|r
|
|
dark_ascension = {
|
|
id = 391109,
|
|
cast = function ()
|
|
if pvptalent.void_origins.enabled then return 0 end
|
|
return 1.5 * haste
|
|
end,
|
|
cooldown = 60,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = -30,
|
|
spendType = "insanity",
|
|
|
|
talent = "dark_ascension",
|
|
startsCombat = false,
|
|
toggle = "cooldowns",
|
|
|
|
handler = function ()
|
|
applyBuff( "dark_ascension" )
|
|
if talent.ancient_madness.enabled then applyBuff( "ancient_madness", nil, 20 ) end
|
|
end,
|
|
},
|
|
|
|
desperate_prayer = {
|
|
id = 19236,
|
|
cast = 0,
|
|
cooldown = function() return talent.angels_mercy.enabled and 70 or 90 end,
|
|
gcd = "off",
|
|
school = "holy",
|
|
|
|
startsCombat = false,
|
|
|
|
toggle = "defensives",
|
|
|
|
handler = function ()
|
|
applyBuff( "desperate_prayer" )
|
|
health.max = health.max * 1.25
|
|
gain( 0.8 * health.max, "health" )
|
|
if conduit.lights_inspiration.enabled then applyBuff( "lights_inspiration" ) end
|
|
end,
|
|
},
|
|
|
|
-- Talent: Afflicts the target with a disease that instantly causes $s1 Shadow damage plus an additional $o2 Shadow damage over $d. Heals you for ${$e2*100}% of damage dealt. If this effect is reapplied, any remaining damage will be added to the new Devouring Plague.
|
|
devouring_plague = {
|
|
id = 335467,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = function ()
|
|
if buff.mind_devourer.up then return 0 end
|
|
return 50 + ( talent.distorted_reality.enabled and 5 or 0 ) + ( talent.minds_eye.enabled and -5 or 0 )
|
|
end,
|
|
spendType = "insanity",
|
|
|
|
talent = "devouring_plague",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "devouring_plague" )
|
|
if buff.voidform.up then buff.voidform.expires = buff.voidform.expires + 2.5 end
|
|
|
|
removeBuff( "mind_devourer" )
|
|
removeBuff( "gathering_shadows" )
|
|
|
|
if talent.surge_of_insanity.enabled then
|
|
addStack( talent.mind_spike.enabled and "mind_spike_insanity" or "mind_flay_insanity" )
|
|
end
|
|
|
|
if set_bonus.tier29_4pc > 0 then applyBuff( "dark_reveries" ) end
|
|
|
|
if set_bonus.tier30_4pc > 0 then
|
|
-- TODO: Revisit if shroud procs on 4th cast or 5th (simc implementation looks like it procs on 5th).
|
|
if buff.darkflame_embers.stack == 3 then
|
|
removeBuff( "darkflame_embers" )
|
|
applyBuff( "darkflame_shroud" )
|
|
else
|
|
addStack( "darkflame_embers" )
|
|
end
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- Talent: Dispels Magic on the enemy target, removing $m1 beneficial Magic $leffect:effects;.
|
|
dispel_magic = {
|
|
id = 528,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = function () return ( state.spec.shadow and 0.14 or 0.02 ) * ( 1 + conduit.clear_mind.mod * 0.01 ) * ( 1 - 0.1 * talent.mental_agility.rank ) end,
|
|
spendType = "mana",
|
|
|
|
talent = "dispel_magic",
|
|
startsCombat = false,
|
|
|
|
buff = "dispellable_magic",
|
|
handler = function ()
|
|
removeBuff( "dispellable_magic" )
|
|
end,
|
|
|
|
-- Affected by:
|
|
-- mental_agility[341167] #1: { 'type': APPLY_AURA, 'subtype': ADD_PCT_MODIFIER, 'points': -10.0, 'target': TARGET_UNIT_CASTER, 'modifies': POWER_COST, }
|
|
-- mental_agility[341167] #2: { 'type': APPLY_AURA, 'subtype': ADD_PCT_MODIFIER, 'points': -10.0, 'target': TARGET_UNIT_CASTER, 'modifies': IGNORE_SHAPESHIFT, }
|
|
-- mental_agility[341167] #3: { 'type': APPLY_AURA, 'subtype': ADD_PCT_MODIFIER, 'points': -10.0, 'target': TARGET_UNIT_CASTER, 'modifies': POWER_COST, }
|
|
},
|
|
|
|
-- Talent: Disperse into pure shadow energy, reducing all damage taken by $s1% for $d and healing you for $?s288733[${$s5+$288733s2}][$s5]% of your maximum health over its duration, but you are unable to attack or cast spells. Increases movement speed by $s4% and makes you immune to all movement impairing effects. Castable while stunned, feared, or silenced.
|
|
dispersion = {
|
|
id = 47585,
|
|
cast = 0,
|
|
cooldown = function () return talent.intangibility.enabled and 90 or 120 end,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
talent = "dispersion",
|
|
startsCombat = false,
|
|
|
|
toggle = "defensives",
|
|
|
|
handler = function ()
|
|
applyBuff( "dispersion" )
|
|
setCooldown( "global_cooldown", 6 )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Throw a Divine Star forward 24 yds, healing allies in its path for $110745s1 and dealing $122128s1 Shadow damage to enemies. After reaching its destination, the Divine Star returns to you, healing allies and damaging enemies in its path again. Healing reduced beyond $s1 targets.
|
|
divine_star = {
|
|
id = 122121,
|
|
cast = 0,
|
|
cooldown = 15,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.02,
|
|
spendType = "mana",
|
|
|
|
talent = "divine_star",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
gain( 6, "insanity" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Controls a mind up to 1 level above yours for $d while still controlling your own mind. Does not work versus Demonic, Mechanical, or Undead beings$?a205477[][ or players]. This spell shares diminishing returns with other disorienting effects.
|
|
dominate_mind = {
|
|
id = 205364,
|
|
cast = 1.8,
|
|
cooldown = 30,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.02,
|
|
spendType = "mana",
|
|
|
|
talent = "dominate_mind",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "dominate_mind" )
|
|
end,
|
|
},
|
|
|
|
-- Fade out, removing all your threat and reducing enemies' attack range against you for $d.
|
|
fade = {
|
|
id = 586,
|
|
cast = 0,
|
|
cooldown = function() return 30 - 5 * talent.improved_fade.rank end,
|
|
gcd = "off",
|
|
school = "shadow",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyBuff( "fade" )
|
|
if conduit.translucent_image.enabled then applyBuff( "translucent_image" ) end
|
|
end,
|
|
},
|
|
|
|
-- A fast spell that heals an ally for $s1.
|
|
flash_heal = {
|
|
id = 2061,
|
|
cast = 1.5,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = function() return buff.surge_of_light.up and 0 or 0.10 end,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
removeBuff( "from_darkness_comes_light" )
|
|
removeStack( "surge_of_light" )
|
|
if talent.protective_light.enabled then applyBuff( "protective_light" ) end
|
|
end,
|
|
},
|
|
|
|
-- Talent: Creates a ring of Shadow energy around you that quickly expands to a 30 yd radius, healing allies for $120692s1 and dealing $120696s1 Shadow damage to enemies. Healing reduced beyond $s1 targets.
|
|
halo = {
|
|
id = 120644,
|
|
cast = 1.5,
|
|
cooldown = 40,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.04,
|
|
spendType = "mana",
|
|
|
|
talent = "halo",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
gain( 10, "insanity" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: An explosion of holy light around you deals up to $s1 Holy damage to enemies and up to $281265s1 healing to allies within $A1 yds, reduced if there are more than $s3 targets.
|
|
holy_nova = {
|
|
id = 132157,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
damage = 1,
|
|
|
|
spend = 0.016,
|
|
spendType = "mana",
|
|
|
|
talent = "holy_nova",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
removeBuff( "rhapsody" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Pulls the spirit of a party or raid member, instantly moving them directly in front of you.
|
|
leap_of_faith = {
|
|
id = 73325,
|
|
cast = 0,
|
|
charges = function () return legendary.vault_of_heavens.enabled and 2 or nil end,
|
|
cooldown = function() return talent.move_with_grace.enabled and 60 or 90 end,
|
|
recharge = function () return legendary.vault_of_heavens.enabled and ( talent.move_with_grace.enabled and 60 or 90 ) or nil end,
|
|
gcd = "off",
|
|
school = "holy",
|
|
|
|
spend = 0.026,
|
|
spendType = "mana",
|
|
|
|
talent = "leap_of_faith",
|
|
startsCombat = false,
|
|
toggle = "interrupts",
|
|
|
|
usable = function() return group, "requires an ally" end,
|
|
handler = function ()
|
|
if talent.body_and_soul.enabled then applyBuff( "body_and_soul" ) end
|
|
if azerite.death_denied.enabled then applyBuff( "death_denied" ) end
|
|
if legendary.vault_of_heavens.enabled then setDistance( 5 ) end
|
|
end,
|
|
},
|
|
|
|
--[[ Talent: You pull your spirit to an ally, instantly moving you directly in front of them.
|
|
leap_of_faith = {
|
|
id = 336471,
|
|
cast = 0,
|
|
charges = 2,
|
|
cooldown = 1.5,
|
|
recharge = 90,
|
|
gcd = "off",
|
|
school = "holy",
|
|
|
|
talent = "leap_of_faith",
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
end,
|
|
}, ]]
|
|
|
|
-- Levitates a party or raid member for $111759d, floating a few feet above the ground, granting slow fall, and allowing travel over water.
|
|
levitate = {
|
|
id = 1706,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.009,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyBuff( "levitate" )
|
|
end,
|
|
},
|
|
|
|
--[[ Invoke the Light's wrath, dealing $s1 Radiant damage to the target, increased by $s2% per ally affected by your Atonement.
|
|
lights_wrath = {
|
|
id = 373178,
|
|
cast = 2.5,
|
|
cooldown = 90,
|
|
gcd = "spell",
|
|
school = "holyfire",
|
|
|
|
startsCombat = false,
|
|
|
|
toggle = "cooldowns",
|
|
|
|
handler = function ()
|
|
end,
|
|
}, ]]
|
|
|
|
-- Talent: Dispels magic in a $32375a1 yard radius, removing all harmful Magic from $s4 friendly targets and $32592m1 beneficial Magic $leffect:effects; from $s4 enemy targets. Potent enough to remove Magic that is normally undispellable.
|
|
mass_dispel = {
|
|
id = 32375,
|
|
cast = 1.5,
|
|
cooldown = function () return pvptalent.improved_mass_dispel.enabled and 60 or 120 end,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = function () return 0.20 * ( talent.mental_agility.enabled and 0.5 or 1 ) end,
|
|
spendType = "mana",
|
|
|
|
talent = "mass_dispel",
|
|
startsCombat = false,
|
|
|
|
usable = function () return buff.dispellable_magic.up or debuff.dispellable_magic.up, "requires a dispellable magic effect" end,
|
|
handler = function ()
|
|
removeBuff( "dispellable_magic" )
|
|
removeDebuff( "player", "dispellable_magic" )
|
|
if time > 0 and state.spec.shadow then gain( 6, "insanity" ) end
|
|
end,
|
|
},
|
|
|
|
-- Blasts the target's mind for $s1 Shadow damage$?s424509[ and increases your spell damage to the target by $424509s1% for $214621d.][.]$?s137033[; Generates ${$s2/100} Insanity.][]
|
|
mind_blast = {
|
|
id = 8092,
|
|
cast = function () return buff.shadowy_insight.up and 0 or ( 1.5 * haste ) end,
|
|
charges = function ()
|
|
if talent.thought_harvester.enabled then return 2 end
|
|
end,
|
|
cooldown = 9,
|
|
recharge = function ()
|
|
if talent.thought_harvester.enabled then return 9 * haste end
|
|
end,
|
|
hasteCD = true,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = function() return set_bonus.tier30_2pc > 0 and buff.shadowy_insight.up and -10 or -6 end,
|
|
spendType = "insanity",
|
|
|
|
startsCombat = true,
|
|
velocity = 15,
|
|
|
|
handler = function ()
|
|
removeBuff( "empty_mind" )
|
|
removeBuff( "harvested_thoughts" )
|
|
removeBuff( "mind_melt" )
|
|
removeBuff( "shadowy_insight" )
|
|
|
|
if talent.inescapable_torment.enabled then
|
|
if buff.mindbender.up then buff.mindbender.expires = buff.mindbender.expires + 0.7
|
|
elseif buff.shadowfiend.up then buff.shadowfiend.expires = buff.shadowfiend.expires + 0.7 end
|
|
end
|
|
|
|
if talent.manipulation.enabled then
|
|
reduceCooldown( "mindgames", 0.5 * talent.manipulation.rank )
|
|
end
|
|
|
|
if talent.schism.enabled then applyDebuff( "target", "schism" ) end
|
|
|
|
if set_bonus.tier29_2pc > 0 then
|
|
addStack( "gathering_shadows" )
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- Talent: Controls a mind up to 1 level above yours for $d. Does not work versus Demonic$?A320889[][, Undead,] or Mechanical beings. Shares diminishing returns with other disorienting effects.
|
|
mind_control = {
|
|
id = 605,
|
|
cast = 1.8,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.02,
|
|
spendType = "mana",
|
|
|
|
talent = "mind_control",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "mind_control" )
|
|
end,
|
|
},
|
|
|
|
-- Assaults the target's mind with Shadow energy, causing $o1 Shadow damage over $d and slowing their movement speed by $s2%. |cFFFFFFFFGenerates ${$s4*$s3/100} Insanity over the duration.|r
|
|
mind_flay = {
|
|
id = function() return buff.mind_flay_insanity.up and 391403 or 15407 end,
|
|
known = 15407,
|
|
cast = function() return ( buff.mind_flay_insanity.up and 3 or 4.5 ) * haste end,
|
|
channeled = true,
|
|
breakable = true,
|
|
cooldown = 0,
|
|
hasteCD = true,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0,
|
|
spendType = "insanity",
|
|
|
|
startsCombat = true,
|
|
texture = function()
|
|
if buff.mind_flay_insanity.up then return 425954 end
|
|
return 136208
|
|
end,
|
|
notalent = "mind_spike",
|
|
nobuff = "boon_of_the_ascended",
|
|
bind = "ascended_blast",
|
|
|
|
aura = function() return buff.mind_flay_insanity.up and "mind_flay_insanity" or "mind_flay" end,
|
|
tick_time = function () return class.auras.mind_flay.tick_time end,
|
|
|
|
start = function ()
|
|
if buff.mind_flay_insanity.up then
|
|
removeStack( "mind_flay_insanity" )
|
|
applyDebuff( "target", "mind_flay_insanity_dot" )
|
|
else
|
|
applyDebuff( "target", "mind_flay" )
|
|
end
|
|
if talent.dark_evangelism.enabled then addStack( "dark_evangelism" ) end
|
|
if talent.manipulation.enabled then reduceCooldown( "mindgames", 0.5 * talent.manipulation.rank ) end
|
|
if talent.mental_decay.enabled then
|
|
if debuff.shadow_word_pain.up then debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires + 1 end
|
|
if debuff.vampiric_touch.up then debuff.vampiric_touch.expires = debuff.vampiric_touch.expires + 1 end
|
|
end
|
|
end,
|
|
|
|
tick = function ()
|
|
if talent.dark_evangelism.enabled then addStack( "dark_evangelism" ) end
|
|
if talent.mental_decay.enabled then
|
|
if debuff.shadow_word_pain.up then debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires + 1 end
|
|
if debuff.vampiric_touch.up then debuff.vampiric_touch.expires = debuff.vampiric_touch.expires + 1 end
|
|
end
|
|
end,
|
|
|
|
breakchannel = function ()
|
|
removeDebuff( "target", "mind_flay" )
|
|
removeDebuff( "target", "mind_flay_insanity_dot" )
|
|
end,
|
|
|
|
copy = { "mind_flay_insanity", 391403 }
|
|
},
|
|
|
|
-- Soothes enemies in the target area, reducing the range at which they will attack you by $s1 yards. Only affects Humanoid and Dragonkin targets. Does not cause threat. Lasts $d.
|
|
mind_soothe = {
|
|
id = 453,
|
|
cast = 0,
|
|
cooldown = 5,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.01,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "mind_soothe" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Blasts the target for $s1 Shadowfrost damage.$?s391090[ Mind Spike reduces the cast time of your next Mind Blast by $391092s1% and increases its critical strike chance by $391092s2%, stacking up to $391092U times.][] |cFFFFFFFFGenerates ${$s2/100} Insanity|r$?s391137[ |cFFFFFFFFand an additional ${$s3/100} Insanity from a critical strike.|r][.]
|
|
mind_spike = {
|
|
id = 73510,
|
|
cast = 1.5,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadowfrost",
|
|
|
|
spend = -4,
|
|
spendType = "insanity",
|
|
|
|
talent = "mind_spike",
|
|
startsCombat = true,
|
|
nobuff = "mind_flay_insanity",
|
|
|
|
handler = function ()
|
|
if talent.manipulation.enabled then
|
|
reduceCooldown( "mindgames", 0.5 * talent.manipulation.rank )
|
|
end
|
|
|
|
if talent.mental_decay.enabled then
|
|
if debuff.shadow_word_pain.up then debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires + 2 end
|
|
if debuff.vampiric_touch.up then debuff.vampiric_touch.expires = debuff.vampiric_touch.expires + 2 end
|
|
end
|
|
|
|
if talent.mind_melt.enabled then addStack( "mind_melt" ) end
|
|
|
|
if talent.dark_evangelism.enabled then addStack( "dark_evangelism" ) end
|
|
end,
|
|
|
|
bind = "mind_spike_insanity"
|
|
},
|
|
|
|
-- Implemented separately, unlike mind_flay_insanity, based on how it is used in the SimC APL.
|
|
mind_spike_insanity = {
|
|
id = 407466,
|
|
known = 73510,
|
|
cast = 1.5,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadowfrost",
|
|
|
|
spend = -6,
|
|
spendType = "insanity",
|
|
|
|
talent = "mind_spike",
|
|
startsCombat = true,
|
|
buff = "mind_spike_insanity",
|
|
|
|
handler = function ()
|
|
removeStack( "mind_spike_insanity" )
|
|
|
|
if talent.manipulation.enabled then
|
|
reduceCooldown( "mindgames", 0.5 * talent.manipulation.rank )
|
|
end
|
|
|
|
if talent.mental_decay.enabled then
|
|
if debuff.shadow_word_pain.up then debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires + 2 end
|
|
if debuff.vampiric_touch.up then debuff.vampiric_touch.expires = debuff.vampiric_touch.expires + 2 end
|
|
end
|
|
|
|
if talent.mind_melt.enabled then addStack( "mind_melt" ) end
|
|
|
|
if talent.dark_evangelism.enabled then addStack( "dark_evangelism" ) end
|
|
end,
|
|
|
|
bind = "mind_spike"
|
|
},
|
|
|
|
-- Allows the caster to see through the target's eyes for $d. Will not work if the target is in another instance or on another continent.
|
|
mind_vision = {
|
|
id = 2096,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.01,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "mind_vision" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Summons a Mindbender to attack the target for $d. |cFFFFFFFFGenerates ${$123051m1/100}.1% mana each time the Mindbender attacks.|r
|
|
mindbender = {
|
|
id = function()
|
|
if talent.mindbender.enabled then
|
|
return state.spec.discipline and 123040 or 200174
|
|
end
|
|
return 34433
|
|
end,
|
|
known = 34433,
|
|
flash = { 123040, 200174, 34433 },
|
|
cast = 0,
|
|
cooldown = function () return talent.mindbender.enabled and 60 or 180 end,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
toggle = function()
|
|
if not talent.mindbender.enabled then return "cooldowns" end
|
|
end,
|
|
startsCombat = true,
|
|
texture = function() return talent.mindbender.enabled and 136214 or 136199 end,
|
|
|
|
handler = function ()
|
|
local fiend = talent.mindbender.enabled and "mindbender" or "shadowfiend"
|
|
summonPet( fiend, 15 )
|
|
applyBuff( fiend )
|
|
|
|
if talent.shadow_covenant.enabled then applyBuff( "shadow_covenant" ) end
|
|
end,
|
|
|
|
copy = { "shadowfiend", 34433, 123040, 200174 }
|
|
},
|
|
|
|
-- Covenant (Venthyr): Assault an enemy's mind, dealing ${$s1*$m3/100} Shadow damage and briefly reversing their perception of reality. $?c3[For $d, the next $<damage> damage they deal will heal their target, and the next $<healing> healing they deal will damage their target. |cFFFFFFFFReversed damage and healing generate up to ${$323706s2*2} Insanity.|r] ][For $d, the next $<damage> damage they deal will heal their target, and the next $<healing> healing they deal will damage their target. |cFFFFFFFFReversed damage and healing restore up to ${$323706s3*2}% mana.|r]
|
|
mindgames = {
|
|
id = function() return talent.mindgames.enabled and 375901 or 323673 end,
|
|
cast = 1.5,
|
|
cooldown = 45,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
damage = 1,
|
|
|
|
spend = 0.02,
|
|
spendType = "mana",
|
|
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "mindgames" )
|
|
gain( 10, "insanity" )
|
|
end,
|
|
|
|
copy = { 375901, 323673 }
|
|
},
|
|
|
|
-- Talent: Infuses the target with power for $d, increasing haste by $s1%.
|
|
power_infusion = {
|
|
id = 10060,
|
|
cast = 0,
|
|
cooldown = function () return 120 - ( conduit.power_unto_others.mod and group and conduit.power_unto_others.mod or 0 ) end,
|
|
gcd = "off",
|
|
school = "holy",
|
|
|
|
talent = "power_infusion",
|
|
startsCombat = false,
|
|
|
|
toggle = "cooldowns",
|
|
indicator = function () return group and ( talent.twins_of_the_sun_priestess.enabled or legendary.twins_of_the_sun_priestess.enabled ) and "cycle" or nil end,
|
|
|
|
handler = function ()
|
|
applyBuff( "power_infusion" )
|
|
stat.haste = stat.haste + 0.25
|
|
end,
|
|
},
|
|
|
|
-- Infuses the target with vitality, increasing their Stamina by $s1% for $d. If the target is in your party or raid, all party and raid members will be affected.
|
|
power_word_fortitude = {
|
|
id = 21562,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.04,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
nobuff = "power_word_fortitude",
|
|
|
|
handler = function ()
|
|
applyBuff( "power_word_fortitude" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: A word of holy power that heals the target for $s1. ; Only usable if the target is below $s2% health.
|
|
power_word_life = {
|
|
id = 373481,
|
|
cast = 0,
|
|
cooldown = 15,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = function () return state.spec.shadow and 0.1 or 0.025 end,
|
|
spendType = "mana",
|
|
|
|
talent = "power_word_life",
|
|
startsCombat = false,
|
|
usable = function() return health.pct < 35, "requires target below 35% health" end,
|
|
|
|
handler = function ()
|
|
gain( 7.5 * stat.spell_power, "health" )
|
|
end,
|
|
},
|
|
|
|
-- Shields an ally for $d, absorbing ${$<shield>*$<aegis>*$<benevolence>} damage.
|
|
power_word_shield = {
|
|
id = 17,
|
|
cast = 0,
|
|
cooldown = function() return buff.rapture.up and 0 or ( 7.5 * haste ) end,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.10,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyBuff( "power_word_shield" )
|
|
|
|
if talent.body_and_soul.enabled then
|
|
applyBuff( "body_and_soul" )
|
|
end
|
|
|
|
if state.spec.discipline then
|
|
applyBuff( "atonement" )
|
|
removeBuff( "shield_of_absolution" )
|
|
removeBuff( "weal_and_woe" )
|
|
|
|
if set_bonus.tier29_2pc > 0 then
|
|
applyBuff( "light_weaving" )
|
|
end
|
|
if talent.borrowed_time.enabled then
|
|
applyBuff( "borrowed_time" )
|
|
end
|
|
else
|
|
applyDebuff( "player", "weakened_soul" )
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- Talent: Places a ward on an ally that heals them for $33110s1 the next time they take damage, and then jumps to another ally within $155793a1 yds. Jumps up to $s1 times and lasts $41635d after each jump.
|
|
prayer_of_mending = {
|
|
id = 33076,
|
|
cast = 0,
|
|
cooldown = 12,
|
|
hasteCD = true,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.04,
|
|
spendType = "mana",
|
|
|
|
talent = "prayer_of_mending",
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyBuff( "prayer_of_mending" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Terrifies the target in place, stunning them for $d.
|
|
psychic_horror = {
|
|
id = 64044,
|
|
cast = 0,
|
|
cooldown = 45,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
talent = "psychic_horror",
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "psychic_horror" )
|
|
end,
|
|
},
|
|
|
|
-- Lets out a psychic scream, causing $i enemies within $A1 yards to flee, disorienting them for $d. Damage may interrupt the effect.
|
|
psychic_scream = {
|
|
id = 8122,
|
|
cast = 0,
|
|
cooldown = function() return talent.psychic_void.enabled and 30 or 45 end,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.012,
|
|
spendType = "mana",
|
|
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "psychic_scream" )
|
|
end,
|
|
},
|
|
|
|
-- PvP Talent: [199845] Deals up to $s2% of the target's total health in Shadow damage every $t1 sec. Also slows their movement speed by $s3% and reduces healing received by $s4%.
|
|
psyfiend = {
|
|
id = 211522,
|
|
cast = 0,
|
|
cooldown = 45,
|
|
gcd = "spell",
|
|
|
|
startsCombat = true,
|
|
pvptalent = "psyfiend",
|
|
|
|
function()
|
|
-- Just assume the fiend is immediately flaying your target.
|
|
applyDebuff( "target", "psyflay" )
|
|
end,
|
|
|
|
auras = {
|
|
psyflay = {
|
|
id = 199845,
|
|
duration = 12,
|
|
max_stack = 1
|
|
}
|
|
}
|
|
|
|
-- Effects:
|
|
-- [x] #0: { 'type': APPLY_AURA, 'subtype': DUMMY, 'points': 4.0, 'target': TARGET_UNIT_TARGET_ENEMY, }
|
|
-- [x] #1: { 'type': TRIGGER_SPELL, 'subtype': NONE, 'trigger_spell': 199824, 'target': TARGET_UNIT_CASTER, }
|
|
},
|
|
|
|
-- Talent: Removes all Disease effects from a friendly target.
|
|
purify_disease = {
|
|
id = 213634,
|
|
cast = 0,
|
|
charges = 1,
|
|
cooldown = 8,
|
|
recharge = 8,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = function() return 0.013 * ( talent.mental_agility.enabled and 0.5 or 1 ) end,
|
|
spendType = "mana",
|
|
|
|
talent = "purify_disease",
|
|
startsCombat = false,
|
|
debuff = "dispellable_disease",
|
|
|
|
handler = function ()
|
|
removeDebuff( "player", "dispellable_disease" )
|
|
-- if time > 0 then gain( 6, "insanity" ) end
|
|
end,
|
|
},
|
|
|
|
-- Talent: Fill the target with faith in the light, healing for $o1 over $d.
|
|
renew = {
|
|
id = 139,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.04,
|
|
spendType = "mana",
|
|
|
|
talent = "renew",
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyBuff( "renew" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Shackles the target undead enemy for $d, preventing all actions and movement. Damage will cancel the effect. Limit 1.
|
|
shackle_undead = {
|
|
id = 9484,
|
|
cast = 1.5,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "holy",
|
|
|
|
spend = 0.012,
|
|
spendType = "mana",
|
|
|
|
talent = "shackle_undead",
|
|
startsCombat = true,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "shackle_undead" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Hurl a bolt of slow-moving Shadow energy at the destination, dealing $205386s1 Shadow damage to all targets within $205386A1 yards and applying Vampiric Touch to $391286s1 of them. |cFFFFFFFFGenerates $/100;s2 Insanity.|r
|
|
shadow_crash = {
|
|
id = 205385,
|
|
cast = 0,
|
|
cooldown = 20,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = -6,
|
|
spendType = "insanity",
|
|
|
|
talent = "shadow_crash",
|
|
startsCombat = false,
|
|
|
|
velocity = 2,
|
|
|
|
impact = function ()
|
|
removeBuff( "deaths_torment" )
|
|
if talent.whispering_shadows.enabled then
|
|
applyDebuff( "target", "vampiric_touch" )
|
|
active_dot.vampiric_touch = min( active_enemies, active_dot.vampiric_touch + 7 )
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- Talent: A word of dark binding that inflicts $s1 Shadow damage to your target. If your target is not killed by Shadow Word: Death, you take backlash damage equal to $s5% of your maximum health.$?A364675[; Damage increased by ${$s3+$364675s2}% to targets below ${$s2+$364675s1}% health.][; Damage increased by $s3% to targets below $s2% health.]$?c3[][]$?s137033[; Generates ${$s4/100} Insanity.][]
|
|
shadow_word_death = {
|
|
id = 32379,
|
|
cast = 0,
|
|
charges = function()
|
|
if buff.deathspeaker.up then return 2 end
|
|
end,
|
|
cooldown = 10,
|
|
recharge = function()
|
|
if buff.deathspeaker.up then return 20 end
|
|
end,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
damage = 1,
|
|
|
|
spend = 0.005,
|
|
spendType = "mana",
|
|
|
|
talent = "shadow_word_death",
|
|
startsCombat = true,
|
|
|
|
usable = function ()
|
|
if settings.sw_death_protection == 0 then return true end
|
|
return health.percent >= settings.sw_death_protection, "player health [ " .. health.percent .. " ] is below user setting [ " .. settings.sw_death_protection .. " ]"
|
|
end,
|
|
|
|
handler = function ()
|
|
gain( 4, "insanity" )
|
|
|
|
if set_bonus.tier31_4pc > 0 then
|
|
addStack( "deaths_torment", nil, ( buff.deathspeaker.up or target.health.pct < 20 ) and 3 or 2 )
|
|
end
|
|
|
|
removeBuff( "deathspeaker" )
|
|
removeBuff( "zeks_exterminatus" )
|
|
|
|
if talent.death_and_madness.enabled then
|
|
applyDebuff( "target", "death_and_madness_debuff" )
|
|
end
|
|
|
|
if talent.inescapable_torment.enabled then
|
|
local fiend = talent.mindbender.enabled and "mindbender" or "shadowfiend"
|
|
if buff[ fiend ].up then buff[ fiend ].expires = buff[ fiend ].expires + ( talent.inescapable_torment.rank * 0.5 ) end
|
|
if pet[ fiend ].up then pet[ fiend ].expires = pet[ fiend ].expires + ( talent.inescapable_torment.rank * 0.5 ) end
|
|
end
|
|
|
|
if talent.expiation.enabled then
|
|
local swp = talent.purge_the_wicked.enabled and "purge_the_wicked" or "shadow_word_pain"
|
|
if debuff[ swp ].up then
|
|
if debuff[ swp ].remains <= 6 then removeDebuff( "target", swp )
|
|
else debuff[ swp ].expires = debuff[ swp ].expires - 6 end
|
|
end
|
|
end
|
|
|
|
if legendary.painbreaker_psalm.enabled then
|
|
local power = 0
|
|
if debuff.shadow_word_pain.up then
|
|
power = power + 15 * min( debuff.shadow_word_pain.remains, 8 ) / 8
|
|
if debuff.shadow_word_pain.remains < 8 then removeDebuff( "shadow_word_pain" )
|
|
else debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires - 8 end
|
|
end
|
|
if debuff.vampiric_touch.up then
|
|
power = power + 15 * min( debuff.vampiric_touch.remains, 8 ) / 8
|
|
if debuff.vampiric_touch.remains <= 8 then removeDebuff( "vampiric_touch" )
|
|
else debuff.vampiric_touch.expires = debuff.vampiric_touch.expires - 8 end
|
|
end
|
|
if power > 0 then gain( power, "insanity" ) end
|
|
end
|
|
|
|
if legendary.shadowflame_prism.enabled then
|
|
if pet.fiend.active then pet.fiend.expires = pet.fiend.expires + 1 end
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- A word of darkness that causes $?a390707[${$s1*(1+$390707s1/100)}][$s1] Shadow damage instantly, and an additional $?a390707[${$o2*(1+$390707s1/100)}][$o2] Shadow damage over $d.$?s137033[ |cFFFFFFFFGenerates ${$m3/100} Insanity.|r][]
|
|
shadow_word_pain = {
|
|
id = 589,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = -3,
|
|
spendType = "insanity",
|
|
|
|
startsCombat = true,
|
|
cycle = "shadow_word_pain",
|
|
|
|
handler = function ()
|
|
removeBuff( "deaths_torment" )
|
|
applyDebuff( "target", "shadow_word_pain" )
|
|
end,
|
|
},
|
|
|
|
-- Assume a Shadowform, increasing your spell damage dealt by $s1%.
|
|
shadowform = {
|
|
id = 232698,
|
|
cast = 0,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
startsCombat = false,
|
|
essential = true,
|
|
nobuff = function () return buff.voidform.up and "voidform" or "shadowform" end,
|
|
|
|
handler = function ()
|
|
applyBuff( "shadowform" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Silences the target, preventing them from casting spells for $d. Against non-players, also interrupts spellcasting and prevents any spell in that school from being cast for $263715d.
|
|
silence = {
|
|
id = 15487,
|
|
cast = 0,
|
|
cooldown = function() return talent.last_word.enabled and 30 or 45 end,
|
|
gcd = "off",
|
|
school = "shadow",
|
|
|
|
talent = "silence",
|
|
startsCombat = true,
|
|
|
|
toggle = "interrupts",
|
|
|
|
debuff = "casting",
|
|
readyTime = state.timeToInterrupt,
|
|
|
|
handler = function ()
|
|
interrupt()
|
|
applyDebuff( "target", "silence" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Fills you with the embrace of Shadow energy for $d, causing you to heal a nearby ally for $s1% of any single-target Shadow spell damage you deal.
|
|
vampiric_embrace = {
|
|
id = 15286,
|
|
cast = 0,
|
|
cooldown = function() return talent.sanlayn.enabled and 75 or 120 end,
|
|
gcd = "off",
|
|
school = "shadow",
|
|
|
|
talent = "vampiric_embrace",
|
|
startsCombat = false,
|
|
texture = 136230,
|
|
|
|
toggle = "defensives",
|
|
|
|
handler = function ()
|
|
applyBuff( "vampiric_embrace" )
|
|
-- if time > 0 then gain( 6, "insanity" ) end
|
|
end,
|
|
},
|
|
|
|
-- A touch of darkness that causes $34914o2 Shadow damage over $34914d, and heals you for ${$e2*100}% of damage dealt. If Vampiric Touch is dispelled, the dispeller flees in Horror for $87204d. |cFFFFFFFFGenerates ${$m3/100} Insanity.|r
|
|
vampiric_touch = {
|
|
id = 34914,
|
|
cast = function () return buff.unfurling_darkness.up and 0 or 1.5 * haste end,
|
|
cooldown = 0,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = -4,
|
|
spendType = "insanity",
|
|
|
|
startsCombat = true,
|
|
cycle = function () return talent.misery.enabled and "shadow_word_pain" or "vampiric_touch" end,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "vampiric_touch" )
|
|
|
|
if talent.misery.enabled then
|
|
applyDebuff( "target", "shadow_word_pain" )
|
|
end
|
|
|
|
if talent.unfurling_darkness.enabled then
|
|
if buff.unfurling_darkness.up then
|
|
removeBuff( "unfurling_darkness" )
|
|
elseif debuff.unfurling_darkness_icd.down then
|
|
applyBuff( "unfurling_darkness" )
|
|
applyDebuff( "player", "unfurling_darkness_icd" )
|
|
end
|
|
end
|
|
end,
|
|
},
|
|
|
|
-- Sends a bolt of pure void energy at the enemy, causing $s2 Shadow damage$?s193225[, refreshing the duration of Devouring Plague on the target][]$?a231688[ and extending the duration of Shadow Word: Pain and Vampiric Touch on all nearby targets by $<ext> sec][]. Requires Voidform. |cFFFFFFFFGenerates $/100;s3 Insanity.|r
|
|
void_bolt = {
|
|
id = 205448,
|
|
known = 228260,
|
|
cast = 0,
|
|
cooldown = 6,
|
|
hasteCD = true,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = -10,
|
|
spendType = "insanity",
|
|
|
|
startsCombat = true,
|
|
velocity = 40,
|
|
buff = function () return buff.dissonant_echoes.up and "dissonant_echoes" or "voidform" end,
|
|
bind = "void_eruption",
|
|
|
|
handler = function ()
|
|
removeBuff( "dissonant_echoes" )
|
|
|
|
if debuff.shadow_word_pain.up then debuff.shadow_word_pain.expires = debuff.shadow_word_pain.expires + 3 end
|
|
if debuff.vampiric_touch.up then debuff.vampiric_touch.expires = debuff.vampiric_touch.expires + 3 end
|
|
if talent.legacy_of_the_void.enabled and debuff.devouring_plague.up then debuff.devouring_plague.expires = query_time + debuff.devouring_plague.duration end
|
|
|
|
removeBuff( "anunds_last_breath" )
|
|
end,
|
|
|
|
impact = function ()
|
|
end,
|
|
|
|
copy = 343355,
|
|
},
|
|
|
|
-- Talent: Releases an explosive blast of pure void energy, activating Voidform and causing ${$228360s1*2} Shadow damage to all enemies within $a1 yds of your target. During Voidform, this ability is replaced by Void Bolt. Each $s4 Insanity spent during Voidform increases the duration of Voidform by ${$s3/1000}.1 sec.
|
|
void_eruption = {
|
|
id = 228260,
|
|
cast = function ()
|
|
if pvptalent.void_origins.enabled then return 0 end
|
|
return haste * 1.5
|
|
end,
|
|
cooldown = 120,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
talent = "void_eruption",
|
|
startsCombat = true,
|
|
toggle = "cooldowns",
|
|
nobuff = function () return buff.dissonant_echoes.up and "dissonant_echoes" or "voidform" end,
|
|
bind = "void_bolt",
|
|
|
|
cooldown_ready = function ()
|
|
return cooldown.void_eruption.remains == 0 and buff.voidform.down
|
|
end,
|
|
|
|
handler = function ()
|
|
applyBuff( "voidform" )
|
|
if talent.ancient_madness.enabled then applyBuff( "ancient_madness", nil, 20 ) end
|
|
end,
|
|
},
|
|
|
|
-- Talent: You and the currently targeted party or raid member swap health percentages. Increases the lower health percentage of the two to $s1% if below that amount.
|
|
void_shift = {
|
|
id = 108968,
|
|
cast = 0,
|
|
cooldown = 300,
|
|
gcd = "off",
|
|
school = "shadow",
|
|
|
|
talent = "void_shift",
|
|
startsCombat = false,
|
|
|
|
toggle = "defensives",
|
|
usable = function() return group, "requires an ally" end,
|
|
|
|
handler = function ()
|
|
end,
|
|
},
|
|
|
|
-- Talent: Summons shadowy tendrils, rooting up to $108920i enemy targets within $108920A1 yards for $114404d or until the tendril is killed.
|
|
void_tendrils = {
|
|
id = 108920,
|
|
cast = 0,
|
|
cooldown = 60,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = 0.01,
|
|
spendType = "mana",
|
|
|
|
talent = "void_tendrils",
|
|
startsCombat = false,
|
|
|
|
handler = function ()
|
|
applyDebuff( "target", "void_tendrils_root" )
|
|
end,
|
|
},
|
|
|
|
-- Talent: Channel a torrent of void energy into the target, dealing $o Shadow damage over $d. |cFFFFFFFFGenerates ${$289577s1*$289577s2/100} Insanity over the duration.|r
|
|
void_torrent = {
|
|
id = 263165,
|
|
cast = 3,
|
|
channeled = true,
|
|
fixedCast = true,
|
|
cooldown = function() return 45 - 15 * talent.malediction.rank end,
|
|
gcd = "spell",
|
|
school = "shadow",
|
|
|
|
spend = -15,
|
|
spendType = "insanity",
|
|
|
|
talent = "void_torrent",
|
|
startsCombat = true,
|
|
aura = "void_torrent",
|
|
tick_time = function () return class.auras.void_torrent.tick_time end,
|
|
|
|
breakchannel = function ()
|
|
removeDebuff( "target", "void_torrent" )
|
|
end,
|
|
|
|
start = function ()
|
|
applyDebuff( "target", "void_torrent" )
|
|
applyDebuff( "target", "devouring_plague" )
|
|
if debuff.vampiric_touch.up then applyDebuff( "target", "vampiric_touch" ) end -- This should refresh/pandemic properly.
|
|
if debuff.shadow_word_pain.up then applyDebuff( "target", "shadow_word_pain" ) end -- This should refresh/pandemic properly.
|
|
if talent.dark_evangelism.enabled then addStack( "dark_evangelism" ) end
|
|
|
|
if talent.idol_of_cthun.enabled then applyDebuff( "target", "void_tendril_mind_flay" ) end
|
|
end,
|
|
|
|
tick = function ()
|
|
if debuff.vampiric_touch.up then applyDebuff( "target", "vampiric_touch" ) end -- This should refresh/pandemic properly.
|
|
if debuff.shadow_word_pain.up then applyDebuff( "target", "shadow_word_pain" ) end -- This should refresh/pandemic properly.
|
|
if talent.dark_evangelism.enabled then addStack( "dark_evangelism" ) end
|
|
end,
|
|
},
|
|
} )
|
|
|
|
|
|
spec:RegisterRanges( "mind_blast", "dispel_magic" )
|
|
|
|
spec:RegisterOptions( {
|
|
enabled = true,
|
|
|
|
aoe = 3,
|
|
cycle = false,
|
|
|
|
nameplates = false,
|
|
nameplateRange = 40,
|
|
rangeFilter = false,
|
|
|
|
damage = true,
|
|
damageExpiration = 6,
|
|
|
|
potion = "potion_of_spectral_intellect",
|
|
|
|
package = "Shadow",
|
|
} )
|
|
|
|
|
|
spec:RegisterSetting( "pad_void_bolt", true, {
|
|
name = "Pad |T1035040:0|t Void Bolt Cooldown",
|
|
desc = "If checked, the addon will treat |T1035040:0|t Void Bolt's cooldown as slightly shorter, to help ensure that it is recommended as frequently as possible during Voidform.",
|
|
type = "toggle",
|
|
width = "full"
|
|
} )
|
|
|
|
spec:RegisterSetting( "pad_ascended_blast", true, {
|
|
name = "Pad |T3528286:0|t Ascended Blast Cooldown",
|
|
desc = "If checked, the addon will treat |T3528286:0|t Ascended Blast's cooldown as slightly shorter, to help ensure that it is recommended as frequently as possible during Boon of the Ascended.",
|
|
type = "toggle",
|
|
width = "full"
|
|
} )
|
|
|
|
spec:RegisterSetting( "sw_death_protection", 50, {
|
|
name = "|T136149:0|t Shadow Word: Death Health Threshold",
|
|
desc = "If set above 0, the addon will not recommend |T136149:0|t Shadow Word: Death while your health percentage is below this threshold. This setting can help keep you from killing yourself.",
|
|
type = "range",
|
|
min = 0,
|
|
max = 100,
|
|
step = 0.1,
|
|
width = "full",
|
|
} )
|
|
|
|
|
|
spec:RegisterPack( "Shadow", 20240515, [[Hekili:T3ZAZTTX1(BXtNstgjrtsjARKruDASRNepTjESCsM7xeje4srutcWcakBDhn83(9Co7Ua7taqkkz5C7hAJmXIDp759lS7L9V8JxEX0GC2L)YGEdoP3W(d727Ld7py4LxKF7k2LxSki8tbxd)rCWs4))I5btt(m(Z3Uijyk(6zjRtdHhnppFv2p8IxCDu(81x1nmz5lYIwUErqEusCyAWSC8Fh(IlV4Q1rlY)54lVY9AF8LxeSoFEskSCrlFnmZrtNY4dNLfE5f4WpQ3WJ6p8h2m5TrFzZKzjPBMKhKEnlFZKSphSkR7M3T5DYb27uyG4CTzY6v4skF6Xh1FWr9Ef8uXeDtqAuWvlyzkJO)rdEjnIpWwMCdBZK3)h)WfWmLb4LntwXs9o395R8Mj)ROyecNf9f9NoKE67dYdNVzs)EDhu(4ENE0GxP(Y8zh2MjWIMYa87vbWU9Ix)IF)JkV2Ro64(0RPct83cMOPxdKXSdHN(h)WByb5ZH)miE6MjVHDdqhJIVgaNfbxVMPnLdgiqatxhct2IOpXwenpjbEXKziQGEX38RFmd(H4ntyXSLrm4F855W6(5K4NNJVfI8wKGdLfNS(65CW6kgoK085FEE0c91ThFD5CDBM8hjPt)bewbaxa34E6kw8uKkem9FVolFjloxH817Lhn4eAwS2IAVbGiyzRyHrblwCl8eaGZNZqivSjNfD9CTjE4rd6XjqexrbRZMjrXijkkjnk)w(ECgYCfLLTMPpd94G27tz3aaXMjZtwmfGWXG8s28Y5eMG0KLaQArs4NODWVNebW1)iD9ku8cM7zLOPxZF5iasItW9rWcyYz4(iL)ZtJYWPDQoSCmbl)9PtJW5myHK7jtiGbmO91FJbAYf)ted9Cy0VB90RrKQYGp5ObFpn4FRQP84JoMJsFdNLj82WfSXCbB5RGuCyVYcs1ErX0)Vc(eajpxdp(CvezEks4r01TjRFoc2sKHbcuB27ZXnFizDEumRuSItwqrnTHleS)J5SyNKLO4JMTaXwO4xiSrdYq2nUmXf)X7fm3)(hH)if5txKYcMISLRwTicbvKPc2afQ96E5flIYYZqnYZIwSGLc)1Vq63zX027YFe0RgIu2lV4MGLRIsJchNNSoC(LxOHNXx7IqG3Lb4muB9SzDxhpBD6ceJoni9tXSSSURxX1hNgTIpPVoid2j)UyQ3m5J4CZH0WK4S1lHnYVjNhGelMOdj1zZyCjtsMtQj)ZrOCo9tls(mdN(3Ka4KPRtd4S94g6g2L5GneJTQgO9BzKA7lKt5R)GQubcH5PrxFnQe5J)6B5ShWYsOE8)lMutLNtAzwa)N4aCDbIwWnbrleCwWGMIt1CKeJu0pd)Awoqn2mH2prXzbXKobItoqatHaIRBjXje0anM)pgJ0uvIX0K8UtL6XgVIRPoLTmaM6ntoNJqsI7UeesgNTc0t3fN9X5ri2)U72m5zYDU6yK4nIhAm3upB5kaNNYMowWpbi5J9WpLrS4JbT4thpf1oxnlv7cU25maDoV7kug4Sntg0JdKephnrGkzqIof424pjJLp(QK41zDZJyPh3F8GvaRwNntAHiFhiN8isJPtEv32vee)s2WiHkD2xyHRZzhssEGU6au7rG49eakYmNeY10QmkA(aDwzit7XWg9Ovrm0ukTxqu7jBbQTarkOKGkPSWGv47cs0PKQxXuriMvaMEweyjRRqEXM6aqWqpqWsPBdUFTxA8AgAoUbmubC7llOGHjGU5Kph3f1KmoilKfNHSSYNtVfXBYPLeXVeAmjWii8kpq(8Gfjge(liYbUwO46GEzC6DW0PzczDWXkstuwcauQBhGcdcMfgJaHnA)FQNf3wmUgHRVVc8pxo1nbOFVQEXzlcU1L0yeO7lfDFyC0mGrcKsYoF0aTFF5s20i0b9lqP35Gog8VWvKSRuqrIUbyahNbZUkyGJZuPSbtnzD2LQAdtMKJHBMaEzqugu1Aazs4OsVS4tnow0MlNE(zs1l5deqvzCPyuhtg4(C80mnYBAq00XKByDX3Ulo2Z5dVfP20s1ZjRcPD5EsROpvIvHG01CTn4jffA0Myl0)S)bhpm2(0iPctRi2YQWRoPB1VjEFqu82ShK(w8XJ7VzIK1Wu54UTd8X89qTjaVC12h5ouyvH3LLkSgl94Xnb2N6bvfx6wtkEsXmtghCm5amJssJbBpGnXzUGxBS3pbgm4wgcc)pRJqZbF8ZrORcyeGVLC5NmxGQyO4edX)eJGfxm0Cl5zxe6sp6bFuUsCyHRttb1l4RTEvxdZunYf23qQAbQmSvF8Htvf9v4mie71TJJtUjWjgobN2FbEQuv9hMhSklbdUbbGzRjWfwJWpj9n)XypAWNLkaQUeGSzYOcdbcxUkgGebqCCtzZcwViVGzRqChK)IXKKPzE0KENSIuwPgMgpQv8VwaU6i93t18PMJEpRiaaTHugHlmgx25a7mGYwC9e(NOf)SlIDtGvYCgg5biaoEAeJwNt5E51M7UUPEqP76f(ZRhPA5JX5W1wnkEmpY6Mfuq5og9wdgB2yqFId3XRF)2wX1w0P3XmrYzkJp7mGn66WPDxg8Lnt(okqGsok93PGQwNlZLtGXdlMHo8jrDzGGesndsq88vz3gohW3qq6Fs756Bo5mOT3oHgyBIp0KnJ9fm9e0a0CK2GcZ9RMdXo5uHLzO7hxggmmMxkLhK0PUgPwRJCaMrPOYuSc2ZKfKWPzUcrQEUIA2R)nyZoOuVXf4)OC5b(KX3KN5kkRkxz57hLbV(4vjzzr0t0ZJGHOvkBwkdKLUcDvqkEDdBS9qj5yUj3Ie92sKG0XQjJ4ubAymBrgS8ZcO)Ju)qQ7G3QhN2Usy7ashZ3vR6HswEW9iGmr6h4dott4bzNk4IeKKICPu8atCDjvag(yrE7CfVyjrrSPkWPy0haUih2C5KhHsms66yVrwgKWQkyYQEvKWXTJvuFbxUnP5xkj9WXAfYp6o5I)CH1o5JcsbJ1mPwed7IBVTgDPgY9tg8VHGBsMnB3uN)YEwkccwMSoo3LEGAIIe9EyOdvFQSMCvBNwOvcyKu0M6Y9FrcXQyg5Qs74jU7kZDJM2a)EwOlp1wn9IUDsXREDokQb7OtlK944iNzfKqp1GVhzIDmYkojjGItoKbQN)PHkPA3e8AZ0tTJQQ4p3q59zcL3s(FfpJ2EVwB7cOoQs8thceoPs(L(9C6pBikKsCk7Y6Qkd4Z1HMqr2Zot3qUPQ93zx4o0DhjEnerTH9mFjoABQXKP2gxXoGqF)tL6zQl2a1DKG5v6ZNt2cGDPNLlJ2B4gQluVqlvk3AeK8pfHLa89wPLHQ6pMwgk3mwfztRO75ZdYLj)Kx0D8FVGr18arHI0FEyzIW7pqI0H3NVTXqJfjocChy1kc1(3t(hUS)50(sDP0QcXl3eylpuDogL4rCXg52PF5Q6svZrvVqDeHpBtlDLkBkFgaV0TEQuAah)JuEEjjG)xPMAb94kgrmyZMffgXIlQuQ1mkWy4ZJr(UQT5BBd44EYyhDipY30fM99rovcLqZZwntVvwSerWx(QYZYIwaXp(NQ(fVQCQDmck2iJRLNnP3KG9WcVO7eqlsEu2TXHs0mw5AquqgP9L6v2S20AyRxQbjZOj2CuuWTtKYo2oX5lNcvLvc1vTiBhU9XGl1urr0OCnCvYICxKwEpW8JWt3u2VoZHfH6uazQTDN6zFXhzvEr7QTof4mtsZztHTsWcmf0QPjr3sT50rEDkOefzWgI(hKJZ56SW0m2zll0NRcn1WwgGdX(dVWS0XQCI1v2zp1Q3ZMRYQjC1IaQriQUPck4ilFNUycLbcv4C8Le9bHwE4oG3agkTir5EwZAIYOoq595sn3h8KJ17CTLRLTgueGELM1mZsMtpS2(frucqAHCjJX72QFCb57apH9Wwzf1mz4FtO1mHsYYwQjkw2WHY(UJjkyXSi0OaVHnr5ve2fnMg8F)5sufAeJWv8S2xo3CLWAn(hHC6UzYVgtj0pJjH1zbHKA3Jp6vfo409YguA6Mw0wp8kdU3mfoj414SON(zjthBH)B2xqhfqmd6HZcwg3TXycYfUhEzv122HEYklTD1AoDwRl721SgVCfnkw81K(FoBsXsIodXxZlRQC327RgbziNnOniAz0)ld9QgfN6IeeyTbPKO0W1u5NMj6kiENMei8Qg3x)CrVHHaUSrfsesnxZKU(hq1Tppnq3(3v3s)mqIJKThk5AlWmW9zPep8boEquVmKPnNQs8YKuMKlibRYiIFHLHRdIgX6f5rhj8GWq3R7ICyeqLA(0RZiyrVaz6MUEHiqNd00OP)oQg6Q6fXv1ZBEa3zv5MPwE5Q6CbRGIFkgcSQLun)r1QWsvXeHlFfjIy)hdTtpkAsZx0av82iXMRf3PfG2gozdOSOPrjRZghLYmRNRCmtbjNKzJVn56RZcsDuFp39mzb22LZynObsKTYdPeXT1z7(WxnWjJoqN7yWpl3XWFMkh5)dS14A80BOsQBAdL95B)QcdS(UoPo6AtDH88QkLRKyfMpFDSz0bpZxPuLrcws0DxR26szKOb5rmXpOAxXW7Rx)8pcqhVFvZK(lP5UxzZsi84J3u6KvNpYHkLbP0j0wCeLdQKo6lKVk7AXWg0oqeI(p3e33cB5NY02kBL1gelNtQx7QI1rlHe6TsHUgBpTzHjE)VSzcPomaDVSikhSZJ0rJZCK1ncf5Sr8SZRKzisgytLgjNE3YmXQ)barfMXx6bu50Qng6AYKNNQT8cZeF4OefEEvr(t7QMaQAcBf9qS7qFUiAsknyQ5yfmMbKasIlISApOYuqS3AK6MQcRk9no1sy3mNkFWu1PY4NHLHZGRP84qkmHqg8mmv0ytXl)RLmmofmp0lqjfKZLhcr0YvGNXbf(gSmr21EueAG0uCmoHZX5jmz5QfSCUFZd8fvEL5hUOf6Z55kUIwtDvImmpfS3h)138RaQ51ZzyR(97)Jx8M)ogNzokpIrctFoCaOEvqMmVhOEjlsP1N6a9RuFZce3zRT)mhC3pxoYF7ifTBgtOACkIS4sZVSbcCmvh3ZvHCn2n(G7kM3tlr0ZaxzVArsYux178(VsyFsjxQRyPzSuQF(CuoY9WAnuzTWT04zRtVT62azFSwOyxgeO)IXi3VRs3y79(VC7Y1m8tW8k2mswe)e0Uor63n9bdkzKYKFu3X4lbMzJtdUHrFKFGB0Xt17ymFMKFQuPHJ1ZkBv1BOad7FJxr5M0PQgeHlOYe9ECiOUw(ykkpNq)GiiNkRIufkuCO0O(AOi94XaE5FUSzRrwftN6KEGizLwL401dHs(PRxUQkpLKZcMwBuuvVwWfuyEWYLSxodG2y0AogCIPF2LLhuNPs4SIrnj1d62r09PbXFsHb2viffiHYA9iIRqPIxElaLg1DFqUmy02mzDmpHVkFFIykiUooAwuiz2MV)X5a0BKjtdzIS00s3FCMh89jDQLEevLmh3dcOAA685XCLUBKdoL(jgVTCTQAv4UvkyTwmrU5QQ32Dw(7QQRXu80nifCcD8Q0GBDxR83ihdgXjoiUxI4NtbVvrYMNSEHDWnIKeHCjj4NnnSZdwsNogxXttoXPDfBb(oVA4FvfnP95UH14yi3roKvXLNC13RuvefYiBUMgGSB1OSq62Itt7IUWVv6cdFfeAl6cdRuiO3ggyub8tje8VUxrx3WU24PUVnnYRMQAfV9sxu4fD5Yv4s1o(7Nc3Lmc3JTBuLwCZvlARxIk4U6s9FPJ44RSZOESBrc6zotcsXxUKebBxmJAAvQMK)T6tbJENduL3qnPbm0NRoM4vngf9X(y0jgw7utwo)1MFLrIBfodZPhYeZko(KCvDLQ8RFllJvvSt(28)zQvgAEhFPhr3kYMf)S2Pm7zi1Z1bkvUSLekofrMXDIG)R0CzcN97LvLdaJupWBa(9tQ011TRXmU)kAPKc7urEHHq3AHpEOkpunRTVaFlEMZUFYL6ixzi()2vhLD1rvTINrHeudGV(Vvc)1nRPwnWWgBYNmRpBNMfqWTxawrqvUpDxd9kTex3Hdstpcu0DkUKBJQvKaNlpwP4noovpptNNrfMsoXvWqar5qSYmXxZAob1DVNy1D(knKqHzbXNtpyu97D7)J8d3YrSk9fE52OJQe(HQHgA91YdHm5jBbDuRzNg)9fipsCab1OJXKT9Ov5Pr)yuxmun0bHN4Djtv9s0dYx50al)P3)THLEY3A0hvWEUNT041F)E5BBAqMr(bmpkmvAKbSuMxwBdfjcwYwU8BLgdWYzVhSgOOQM6PUwqqVi6MS9LAi7sNdMTmvy0YTL5TWGMToed)u0zT9He2gNpQQjf0DPu3iVbVn3MFmz3hnQJgR4NHDfNSMB8ESAYlnV4JEIqLfDrFybFSdpJrUr6ZsKehLtmX4kKn5X5wkBA0x5MrJPBPMEJIJRyouqcCCiLVexPiYGokZ3JKNI8(mGMLzrXrzZXdVqjVyJ7LGIe9x1jPkq3ws2zZek5UMT0YLITTsW8J9nXXhHZvWrkKLGeOYzAWIXaoymlifDLzjGjW8YUoJbC2ZgdHOrsDItjeVJVCxGb1PMsKEnzdur2INcYXlVkc3vJxKKSef4qa4A43Zht6h8bUn6vV)qUPtMIfhcbDjy4a0gf(jqJZxqIklnorVaEUhIJ0K6BwtPphh)tj9ChPS038nnGo(P8pH8b4i1HIK)Ne)VxJN(BHZbbKRxKCLYS56HvK3QOqENHW1ONfdQ4STs574dIs3GXZKIt6h2dowgUY3YEKPkXoxqPJSiz7ya3YlPOg8We09(20GR5EMZv8w0)fhUr7ChT8ejJRv7qrIcAwsKuowlLBbMasgJU6MoEMaoAQ2jFO5A0AjjZ(wDxjVYgl(JSfjPppf()ZmRpe7lHSv58mOGgffMaJILNCRCKQ8tkR4SZw(TGnK)mrIrKLYMJYWAuMsRkPtjBDmATqxx4(Ib13AvWL6Jfv6Nb7)SocBExVZujXW7iCLUhxuJGq5PqaXp(JSBtqUWhtkdccyCs4g4kA9n8WBFqsSxenYrd59DcSvNBP9xhekkGMhN5vTfkobve(50TSuKfPBgtu7l7vFtfQV9rd3W(AP7pHqHnQI(rik(MKpHE3eMmL9f1mz7ze5C3ZUb(fCGIRpKEN2f8r4ZbPXaVeW28rKpL3kQc(WNZDU75ycRPtuYP82yf4exNNSmGsic2DQxt3sd)t6O2eVIdEDsmSy0JFUs3QW)AtEoNF3(bYWcGb0U)x6umJN4EgDKKeJPUI0OuUgBENJnU6jH62T9p2nWkp(lnGqZtfZAalXXE32brEiiQPKWaQ0YwX2ru0KDmMwNXa2W5vxS1yID3UanCMvJ02faB8fN0Wzv9uH0ywDDGrAoRVY9SANGiJ52FgKQHZkiHTDCv9FaHWk5B3JRGhA3ECfEiPJvUc7b5LV3ZmBw4rZj3xHjnN)(9Eq1Rlwep8P73fXdR6(Dr8yzz)rp8P6DVTadFWLg6)YhdkH3frPGlwtVJIX04j2SknMtUVQ4yTaE0wOLcxptUw6DB6eFpnU2)0hk41ZeFFHxp6mV3EfnWqxzc5OFe9vwHj245TFM701F3Do)kc)RTffF1UAyh48f6Cw)Ud70QDvPQ)8rd6o8U7mdmRJCdVLW4lEuHXsuTplg7opNtpUcNIQ52cpU8OCypyP3JWqzhk)C7q20)YdmNrpYb7)zCpPy3jfczy2os0dVtX(Cc4(Ze4X48EZ6)JHLzFM32NRHpts7Z1WNRX7nIXd)cS)1Iw9eFVnX6Z709lH17ICFDD03eV3CD0J87Eu32JXsuLFQ3lUNVkEQUBq8M39ZKDoC6((nANVdOPm6o4i8YFzWWtXl2GKzrlkQDzw3IB6Gdg9coYgDH6WOzJEg5uv5VH5w)DUEn97Ya3Jr6P4HyYVhXZrC5nuWHjRgLXYpK(a2gnOjtHYfsG(B)YEUFD1KGIBp7t6yWxYHTY8EG5F2OtB9mSaaTA)mx9a5D35)DpVFhFBkv)Gj4QSj5A9m(R4PDZa4qWG4kbV2EHhfF2GHvcLNE3D0oegKJnyf4Mr4(RyhIyB(f(K6pPt)0IyqNc6yt5gtiVwNA5yN2FO)1w5QoYCLnBiXZaus7Q(mwB5)uO7U7QK81PvLFrkEHE1ZqqDWVD1L86SrIpnHV74wU0SC3D((w8wVs(c6pOZD3PorcnaYXQMy8wUpvOkGStaMz3LV0GRthvFEFNS5JgA)Zfbm(YwEIBTtRNzvesVubXPgOKaiQKZO(de0IkH6)w)b(Nz97Fadg001SdlVsHgr3OqhwCgTmQ62sNZq6mc8Z0UoJAPvEZZp1pWQ8DBBWl6py)t)UQvR51lGoNpY8uBeuyv8tgxRhkWSXL(Jqlqc7q(Dl0O(OIxbalqbNpO2jarokA96ctOf(XPAMkXnT3vKZwHDU7ons8zNw92OcT1Tnx0J8U76C2jofx73ZsdoLaOZ3M5gjHULR9JZQEtBF7xSfKrF6y2gI0M39x2m5P)fIHnwuZNgTMDMlQP6JJTn3Zh1)uEw)8zx9zMFSfDAzXQCEpf982KYA8Tcwd)sAeD5P3LBHjDqZJxhubpSOor9Awr8)jxCMdxOSTQ2QTTsGJ8pPDaN56yU5mBIzUil6seSZ01TDCp0nflUS(dB5pd2MgdSO5pKxOgM71YSPIBUQDh1uYOgNqRWEsR2nen2PmqeD3d97qPCofoKAAnIO3s8DZoFgSucHUzIh5dMC(Md00bCxskYDNz2YAPAcWCIgb4RiJV83ZgnONfRSkTKA2wxGqvfbPvB3XJA9vI4pbxo)asuic)z8AqWLyg)7DYfbODZ(kDlcY6GI7VcvcrHEYINEGy8DS)OEQGCznJNxmHT01DD2Oxj0aB(np5o(t58PDOp4YrK97juWoju4aVoyRqJwOkyN(xK(yvTPg1wkSmDz54n0nMeWzb5mehB)RJddIhdXDC91S0XWuIowngNnYYOayLnsyra2k394f)gEVPRiJ(GDHrSpvzwj4Ikg()zN3a1IBrvpMjWrXZw1Sb52EJD1XnsgJ6fbX56JvAGX)lC2iNVXbd606z(5bEIgWq7k)EJp3D6vOND3DEZP0(moJNIFe87KMBt6rZS1juO3UWFtTAPvWWzveSoczaJV7DG4488NYL1UN(xQaoDNr)(GOruIM5NZ5OUOYejRv7liEa3P7fdh5zoYyCNkq51DUD)udJJhL5UWZLUGzEyNBfZ2xpsW3yN6)BNh8wO52U9lwjSv96OuQMs735OUgDk77mkvbfWzqhBxl29O2gGkYSFBFW7VVeJDjhEO6b7Wi5LJWHoUBeSZmH74o4FdxyDha0)oEY9xUsGxJWkXVvak2EkuzbD36lWtAq1QoHgjnAuHOK7tT)d6penoJvv34fpUNjuwCK6xaOUalht1PMZu5jM)2ovkfUtoxfNi(B9Cn0CU0pX73L5tQaFRoh8nbd5NViNHZ7HeVBDQp8jn84dQjTH7(HqVTGHkMN0i7rcXssGdk70bw((48L3CNOzXIYxH1PkER2wEABmMclcNu6erzYPTZAEPh5oAPo8GKVtlNPvtSlXmOso6ijS7e28b74F3efRZcONFQDbF2YMeTDOyta0Tbf5P8I5O3PQoOuHT6A)f1mbL9OCSRBrWmos4X9z5XX(zJE1qHzw(5XJZs6bwz5hQE)gOKiDrbhhqnYko)HOF13rqeaDmXHqK6bDQzigC7(nkBjKcP1s4z8ub4q9ZIA6nlMYVvYW57)JlKOUx)b1eyGucXcIof92nYJFwkYd(rifYjKtEgbuywACaIFZ0c4dNMP4unN0OKXnBc6tXWHi6wuHxSKVRbcycv621dYLBdHKzYMhXwmD)HlfyPW0BbS2Ifi6d43wW4oHBZ64MoZwsGid8IHgyDLB6CHCTYx6VsTou1JXFQIiKNAgmZq6aX(rXfh80hQPRoWmvuy4ckrmYhfnFxWcYqzPJ3mzWrRIyHOQbmBpoWnnkTvTf(YOOLOibRgjxYrpuILuRzn93wcwBrYZCSeiLIoNX8xQ0IX6k902Ee5Vpcf4kRJFpYTnIWjBaLb9Y4CgQhrqIJrfmyWUoGouDbcrAnF3595cM)g)ugpqAyHRhb1liTA8jGkCvaeIMq6MRijRCaXS1O35hIqax3aVAkOoJOMOayr0m2Et8FNfWVxwbko0DqZ5jFkB8YeqDAmcuP5ffeh1gXYoQD)EhXj48bLgaX6cb50L6GkSL163RLZbSE1HK(SWPJg6HNLRDXsEW3ODgrp4Pzumke5kGC3bV7sQO00L3Eds0DpltUjsEkghqg)pYo7j8KyYz85Cy88xMilHKYHDLl5aTo)jYzVUpONJKFFIi53vvZHTyBOOcF31SzRVDpcI7au5D1556ClwCHgOItJ5Qbg0FBxyOTIiUBWivX07jy6HzRC2mvsDqJQGr9V)2NipvOcD45Gg1uVcfF2zE1OXI35gYQIw2vaLpr6jUNexVrwih9Wz)AK3QhIMDtYFw0TBo2BwJUj9VHzlhC3DT9wpFtwJr970kYQte6)slaXwzl6J9duZSvJN3okMXUDL14KZRI(kRXDHL7CLvvlOP(2DC2gAQJyF1jAAWSoNbVdRE86LmV8znTdlLj46HUtZQud(tQeX84CFavVolltAJK5o7Gt28FBYmpnz2wybyB03F3DM2la7K2MaoEyl)ZP7YO4jHboBrcQOlUSmwrf299rq4SPkAM(3Zh5(7RS6(TfRYEduC5YJ)bU84)r7EZXhqxe95o)DMOKwTIQgr3gnN)92M4Xpqzdpu7Z1y96eN37nvISPWyKrjS7GqfHl(eTh(QIX7jFt7915suXr0I1vHMA7N1bpa9IAL9AkewdFxC)Au1V5ACmBF0jtFpCng2FMVzt2BwFBBQvGS)A05IfO56nSQNjxtjRD761rPSw73BQLgMxhTgbJe((jWjDUpObH0zCgW295izlW9wQa7e8ftWO0Tse6WGcqRielxKKGt(blLWuUFgwVsXLs1OtoGxdgf)VPyjaoBm14FTbnNPP)NsWx7xsUjqgB)hebeXxa0)UBXIadIFYsn)vCpaYj3oogG2cVtkoZXjqC0GETmcStnFMYM94aZU8cLOwYmULDkwJM1bAd61GfkYZTTZHk32nCLdk3CnN3B3xWgCF58WT2w3ZmI7cND6DtPpfVD4fPl3Mg8MoUiBAWB54MIHBe19b6IDVltflVU7UMZhHDkQnnqkh)1)ANPbOkp3jmvjN5cz5HDuIkEKV7yAW(231VY9LpX38EoEcazIG60Q2lmgvC4xTB8LgHpTVFvi)PUpOs7PKqJBVUVSc(57rNKF3D1CCwDEFWsxQNBULZg9YEUBS8MP3UQRELl))(]] )
|