Quantcast
local _, Ovale = ...
local OvaleScripts = Ovale.OvaleScripts

do
	local name = "SimulationCraft: Priest_Shadow_T16H"
	local desc = "[5.4] SimulationCraft: Priest_Shadow_T16H"
	local code = [[
# Based on SimulationCraft profile "Priest_Shadow_T16H".
#	class=priest
#	spec=shadow
#	talents=http://us.battle.net/wow/en/tool/talent-calculator#Xb!002202
#	glyphs=inner_sanctum/mind_flay/dark_archangel/shadowy_friends/shadow_ravens

Include(ovale_common)
Include(ovale_priest_common)

AddFunction ShadowDefaultActions
{
	#shadowform
	if not Stance(priest_shadowform) Spell(shadowform)
	#use_item,slot=hands
	UseItemActions()
	#jade_serpent_potion,if=buff.bloodlust.react|target.time_to_die<=40
	if BuffPresent(burst_haste any=1) or target.TimeToDie() <= 40 UsePotionIntellect()
	#mindbender,if=talent.mindbender.enabled
	if TalentPoints(mindbender_talent) Spell(mindbender)
	#shadowfiend,if=!talent.mindbender.enabled
	if not TalentPoints(mindbender_talent) Spell(shadowfiend)
	#power_infusion,if=talent.power_infusion.enabled
	if TalentPoints(power_infusion_talent) Spell(power_infusion)
	#blood_fury
	Spell(blood_fury)
	#berserking
	Spell(berserking)
	#arcane_torrent
	Spell(arcane_torrent_mana)
	#shadow_word_death,if=buff.shadow_word_death_reset_cooldown.stack=1&active_enemies<=5
	if BuffStacks(shadow_word_death_reset_cooldown_buff) == 1 and Enemies() <= 5 Spell(shadow_word_death usable=1)
	#devouring_plague,if=shadow_orb=3&(cooldown.mind_blast.remains<1.5|target.health.pct<20&cooldown.shadow_word_death.remains<1.5)
	if ShadowOrbs() == 3 and { SpellCooldown(mind_blast) < 1.5 or target.HealthPercent() < 20 and SpellCooldown(shadow_word_death) < 1.5 } Spell(devouring_plague)
	#mind_blast,if=active_enemies<=5&cooldown_react
	if Enemies() <= 5 and Spell(mind_blast) Spell(mind_blast)
	#shadow_word_death,if=buff.shadow_word_death_reset_cooldown.stack=0&active_enemies<=5
	if BuffStacks(shadow_word_death_reset_cooldown_buff) == 0 and Enemies() <= 5 Spell(shadow_word_death usable=1)
	#mind_flay_insanity,if=target.dot.devouring_plague_tick.ticks_remain=1,chain=1
	if TalentPoints(solace_and_insanity_talent) and target.DebuffPresent(devouring_plague_debuff) and target.TicksRemain(devouring_plague_debuff) == 1 Spell(mind_flay)
	#mind_flay_insanity,interrupt=1,chain=1,if=active_enemies<=5
	if TalentPoints(solace_and_insanity_talent) and target.DebuffPresent(devouring_plague_debuff) and Enemies() <= 5 Spell(mind_flay)
	#shadow_word_pain,cycle_targets=1,max_cycle_targets=5,if=miss_react&!ticking
	if True(miss_react) and not target.DebuffPresent(shadow_word_pain_debuff) and DebuffCountOnAny(shadow_word_pain_debuff) <= 5 Spell(shadow_word_pain)
	#vampiric_touch,cycle_targets=1,max_cycle_targets=5,if=remains<cast_time&miss_react
	if target.DebuffRemains(vampiric_touch_debuff) < CastTime(vampiric_touch) and True(miss_react) and DebuffCountOnAny(vampiric_touch_debuff) <= 5 Spell(vampiric_touch)
	#shadow_word_pain,cycle_targets=1,max_cycle_targets=5,if=miss_react&ticks_remain<=1
	if True(miss_react) and target.TicksRemain(shadow_word_pain_debuff) <= 1 and DebuffCountOnAny(shadow_word_pain_debuff) <= 5 Spell(shadow_word_pain)
	#vampiric_touch,cycle_targets=1,max_cycle_targets=5,if=remains<cast_time+tick_time&miss_react
	if target.DebuffRemains(vampiric_touch_debuff) < CastTime(vampiric_touch) + target.TickTime(vampiric_touch_debuff) and True(miss_react) and DebuffCountOnAny(vampiric_touch_debuff) <= 5 Spell(vampiric_touch)
	#vampiric_embrace,if=shadow_orb=3&health.pct<=40
	if ShadowOrbs() == 3 and HealthPercent() <= 40 Spell(vampiric_embrace)
	#devouring_plague,if=shadow_orb=3&ticks_remain<=1
	if ShadowOrbs() == 3 and target.TicksRemain(devouring_plague_debuff) <= 1 Spell(devouring_plague)
	#mind_spike,if=active_enemies<=5&buff.surge_of_darkness.react=2
	if Enemies() <= 5 and BuffStacks(surge_of_darkness_buff) == 2 Spell(mind_spike)
	#halo,if=talent.halo.enabled&target.distance<=30&target.distance>=17
	if TalentPoints(halo_talent) and target.Distance() <= 30 and target.Distance() >= 17 Spell(halo)
	#cascade_damage,if=talent.cascade.enabled&(active_enemies>1|(target.distance>=25&stat.mastery_rating<15000)|target.distance>=28)&target.distance<=40&target.distance>=11
	if TalentPoints(cascade_talent) and { Enemies() > 1 or { target.Distance() >= 25 and MasteryRating() < 15000 } or target.Distance() >= 28 } and target.Distance() <= 40 and target.Distance() >= 11 Spell(cascade_damage)
	#divine_star,if=talent.divine_star.enabled&(active_enemies>1|stat.mastery_rating<3500)&target.distance<=24
	if TalentPoints(divine_star_talent) and { Enemies() > 1 or MasteryRating() < 3500 } and target.Distance() <= 24 Spell(divine_star)
	#wait,sec=cooldown.shadow_word_death.remains,if=target.health.pct<20&cooldown.shadow_word_death.remains<0.5&active_enemies<=1
	if target.HealthPercent() < 20 and SpellCooldown(shadow_word_death) < 0.5 and Enemies() <= 1 wait Spell(shadow_word_death)
	#wait,sec=cooldown.mind_blast.remains,if=cooldown.mind_blast.remains<0.5&active_enemies<=1
	if SpellCooldown(mind_blast) < 0.5 and Enemies() <= 1 wait Spell(mind_blast)
	#mind_spike,if=buff.surge_of_darkness.react&active_enemies<=5
	if BuffStacks(surge_of_darkness_buff) and Enemies() <= 5 Spell(mind_spike)
	#mind_sear,chain=1,interrupt=1,if=active_enemies>=3
	if Enemies() >= 3 Spell(mind_sear)
	#mind_flay,chain=1,interrupt=1
	Spell(mind_flay)
	#shadow_word_death,moving=1
	if Speed() > 0 Spell(shadow_word_death usable=1)
	#mind_blast,moving=1,if=buff.divine_insight_shadow.react&cooldown_react
	if Speed() > 0 and BuffPresent(divine_insight_shadow_buff) and Spell(mind_blast) Spell(mind_blast)
	#divine_star,moving=1,if=talent.divine_star.enabled&target.distance<=28
	if Speed() > 0 and TalentPoints(divine_star_talent) and target.Distance() <= 28 Spell(divine_star)
	#cascade_damage,moving=1,if=talent.cascade.enabled&target.distance<=40
	if Speed() > 0 and TalentPoints(cascade_talent) and target.Distance() <= 40 Spell(cascade_damage)
	#shadow_word_pain,moving=1
	if Speed() > 0 Spell(shadow_word_pain)
	#dispersion
	Spell(dispersion)
}

AddFunction ShadowPrecombatActions
{
	#flask,type=warm_sun
	#food,type=mogu_fish_stew
	#power_word_fortitude,if=!aura.stamina.up
	if not BuffPresent(stamina any=1) Spell(power_word_fortitude)
	#inner_fire
	if BuffExpires(inner_fire_buff) Spell(inner_fire)
	#shadowform
	if not Stance(priest_shadowform) Spell(shadowform)
	#snapshot_stats
	#jade_serpent_potion
	UsePotionIntellect()
}

AddIcon specialization=shadow help=main
{
	if InCombat(no) ShadowPrecombatActions()
	ShadowDefaultActions()
}

### Required symbols
# arcane_torrent_mana
# berserking
# blood_fury
# cascade_damage
# cascade_talent
# devouring_plague
# devouring_plague_debuff
# dispersion
# divine_insight_shadow_buff
# divine_star
# divine_star_talent
# halo
# halo_talent
# inner_fire
# inner_fire_buff
# jade_serpent_potion
# mind_blast
# mind_flay
# mind_flay_insanity
# mind_sear
# mind_spike
# mindbender
# mindbender_talent
# power_infusion
# power_infusion_talent
# power_word_fortitude
# shadow_word_death
# shadow_word_death_reset_cooldown_buff
# shadow_word_pain
# shadow_word_pain_debuff
# shadowfiend
# shadowform
# solace_and_insanity_talent
# stamina
# surge_of_darkness_buff
# vampiric_embrace
# vampiric_touch
# vampiric_touch_debuff
]]
	OvaleScripts:RegisterScript("PRIEST", name, desc, code, "reference")
end