Permalink
Browse files

Merge branch 'legion-dev' of https://github.com/simulationcraft/simc

…into legion-dev

# Conflicts:
#	profiles/Tier19H/Demon_Hunter_Havoc_T19H.simc
#	profiles/Tier19M/Demon_Hunter_Havoc_T19M.simc
#	profiles/Tier19P/Demon_Hunter_Havoc_T19P.simc
  • Loading branch information...
2 parents d29460c + 087e314 commit 1d9d1092bf97b75e7b01585287420d12046fb944 @Zarania Zarania committed Jan 1, 2017
@@ -6918,8 +6918,8 @@ void death_knight_t::default_apl_frost()
// Priotize Obliterate if Koltira's Newfound Will is equipped and talent Frozen Pulse and T19 2pc bonus active
generic -> add_action( this, "Obliterate", "if=equipped.132366&talent.frozen_pulse.enabled&set_bonus.tier19_2pc=1" );
- // Howling Blast @rime proc
- generic -> add_action( this, "Howling Blast", "if=buff.rime.react" );
+ // Howling Blast at Rime proc, but only if Obliteration is not up
+ generic -> add_action( this, "Howling Blast", "if=buff.rime.react&!buff.obliteration.up" );
// Prevent RP waste
generic -> add_action( this, "Frost Strike", "if=runic_power.deficit<=10" );
@@ -253,7 +253,7 @@ struct monk_t: public player_t
// Legendaries
buff_t* hidden_masters_forbidden_touch;
- buff_t* emperors_electric_charge;
+ buff_t* the_emperors_capacitor;
} buff;
public:
@@ -591,7 +591,7 @@ struct monk_t: public player_t
// Legendaries
const spell_data_t* hidden_masters_forbidden_touch;
- const spell_data_t* the_emperor_capacitor;
+ const spell_data_t* the_emperors_capacitor;
} passives;
struct legendary_t
@@ -2329,7 +2329,7 @@ struct monk_action_t: public Base
// The Emperor's Capacitor Legendary
if ( p() -> legendary.the_emperors_capacitor )
- p() -> buff.emperors_electric_charge -> trigger( ab::cost() );
+ p() -> buff.the_emperors_capacitor -> trigger( ab::cost() );
}
// Chi Savings on Dodge & Parry & Miss
if ( ab::resource_consumed > 0 )
@@ -2573,15 +2573,20 @@ struct eye_of_the_tiger_heal_tick_t : public monk_heal_t
{
background = true;
hasted_ticks = false;
+ may_crit = tick_may_crit = true;
target = player;
}
double action_multiplier() const override
{
double am = monk_heal_t::action_multiplier();
+ am *= 1 + p() -> spec.brewmaster_monk -> effectN( 2 ).percent();
+
am *= 1 + p() -> spec.brewmaster_monk -> effectN( 7 ).percent();
+ am *= 1 + p() -> spec.windwalker_monk -> effectN( 2 ).percent();
+
return am;
}
};
@@ -2593,6 +2598,7 @@ struct eye_of_the_tiger_dmg_tick_t: public monk_spell_t
{
background = true;
hasted_ticks = false;
+ may_crit = tick_may_crit = true;
attack_power_mod.direct = 0;
attack_power_mod.tick = data().effectN( 2 ).ap_coeff();
}
@@ -2601,8 +2607,12 @@ struct eye_of_the_tiger_dmg_tick_t: public monk_spell_t
{
double am = monk_spell_t::action_multiplier();
+ am *= 1 + p() -> spec.brewmaster_monk -> effectN( 2 ).percent();
+
am *= 1 + p() -> spec.brewmaster_monk -> effectN( 7 ).percent();
+ am *= 1 + p() -> spec.windwalker_monk -> effectN( 2 ).percent();
+
return am;
}
};
@@ -4738,8 +4748,8 @@ struct crackling_jade_lightning_t: public monk_spell_t
{
double c = monk_spell_t::cost_per_tick( resource );
- if ( p() -> buff.emperors_electric_charge -> up() )
- c *= 1 + ( p() -> buff.emperors_electric_charge -> current_stack * p() -> passives.the_emperor_capacitor -> effectN( 2 ).percent() );
+ if ( p() -> buff.the_emperors_capacitor -> up() )
+ c *= 1 + ( p() -> buff.the_emperors_capacitor -> current_stack * p() -> passives.the_emperors_capacitor -> effectN( 2 ).percent() );
return c;
}
@@ -4751,8 +4761,8 @@ struct crackling_jade_lightning_t: public monk_spell_t
if ( p() -> buff.combo_strikes -> up() )
pm *= 1 + p() -> cache.mastery_value();
- if ( p() -> buff.emperors_electric_charge -> up() )
- pm *= 1 + p() -> buff.emperors_electric_charge -> stack_value();
+ if ( p() -> buff.the_emperors_capacitor -> up() )
+ pm *= 1 + p() -> buff.the_emperors_capacitor -> stack_value();
return pm;
}
@@ -4781,8 +4791,8 @@ struct crackling_jade_lightning_t: public monk_spell_t
{
monk_spell_t::last_tick( dot );
- if ( p() -> buff.emperors_electric_charge -> up() )
- p() -> buff.emperors_electric_charge -> expire();
+ if ( p() -> buff.the_emperors_capacitor -> up() )
+ p() -> buff.the_emperors_capacitor -> expire();
// Reset swing timer
if ( player -> main_hand_attack )
@@ -4886,7 +4896,7 @@ struct breath_of_fire_t: public monk_spell_t
{
double am = monk_spell_t::action_multiplier();
- am *= 1 + p() -> spec.brewmaster_monk -> effectN( 1 ).percent();
+ am *= 1 + p() -> spec.brewmaster_monk -> effectN( 2 ).percent();
if ( p() -> artifact.hot_blooded.rank() )
am *= 1 + p() -> artifact.hot_blooded.data().effectN( 1 ).percent();
@@ -4908,6 +4918,15 @@ struct breath_of_fire_t: public monk_spell_t
add_child( dragonfire );
}
+ double action_multiplier() const override
+ {
+ double am = monk_spell_t::action_multiplier();
+
+ am *= 1 + p() -> spec.brewmaster_monk -> effectN( 1 ).percent();
+
+ return am;
+ }
+
virtual void update_ready( timespan_t ) override
{
timespan_t cd = cooldown -> duration;
@@ -7469,7 +7488,7 @@ void monk_t::init_spells()
// Legendaries
passives.hidden_masters_forbidden_touch = find_spell( 213114 );
- passives.the_emperor_capacitor = find_spell( 235054 );
+ passives.the_emperors_capacitor = find_spell( 235054 );
// Mastery spells =========================================
mastery.combo_strikes = find_mastery_spell( MONK_WINDWALKER );
@@ -7763,8 +7782,8 @@ void monk_t::create_buffs()
buff.hidden_masters_forbidden_touch = new buffs::hidden_masters_forbidden_touch_t(
*this, "hidden_masters_forbidden_touch", passives.hidden_masters_forbidden_touch );
- buff.emperors_electric_charge = buff_creator_t( this, "emperors_electric_charge", passives.the_emperor_capacitor )
- .default_value( passives.the_emperor_capacitor -> effectN( 1 ).percent() );
+ buff.the_emperors_capacitor = buff_creator_t( this, "the_emperors_capacitor", passives.the_emperors_capacitor )
+ .default_value( passives.the_emperors_capacitor -> effectN( 1 ).percent() );
}
// monk_t::init_gains =======================================================
@@ -5432,10 +5432,10 @@ void priest_t::apl_shadow()
"call_action_list,name=check,if=talent.surrender_to_madness.enabled&!buff"
".surrender_to_madness.up" );
default_list->add_action(
- "call_action_list,name=s2m,if=buff.voidform.up&buff.surrender_to_madness."
+ "run_action_list,name=s2m,if=buff.voidform.up&buff.surrender_to_madness."
"up" );
- default_list->add_action( "call_action_list,name=vf,if=buff.voidform.up" );
- default_list->add_action( "call_action_list,name=main" );
+ default_list->add_action( "run_action_list,name=vf,if=buff.voidform.up" );
+ default_list->add_action( "run_action_list,name=main" );
// s2mcheck APL
check->add_action(
@@ -5448,8 +5448,9 @@ void priest_t::apl_shadow()
"variable,op=set,name=actors_fight_time_mod,value=((450-(time+target."
"time_to_die))%5),if=time+target.time_to_die<=450" );
check->add_action(
- "variable,op=set,name=s2mcheck,value=0.8*(116+set_bonus.tier19_2pc"
- "*(4-variable.s2mbeltcheck*4)+4*variable.s2mbeltcheck+((raw_haste_pct*8)*"
+ "variable,op=set,name=s2mcheck,value=0.8*(83-(5*talent.sanlayn.enabled)"
+ "+(33*talent.reaper_of_souls.enabled)+set_bonus.tier19_2pc*4+8*variable"
+ ".s2mbeltcheck+((raw_haste_pct*10))*"
"(2+(0.8*set_bonus.tier19_2pc)+(1*talent.reaper_of_souls.enabled)+"
"(2*artifact.mass_hysteria.rank)-(1*talent.sanlayn.enabled))))-("
"variable.actors_fight_time_mod*nonexecute_actors_pct)" );
@@ -5488,14 +5489,15 @@ void priest_t::apl_shadow()
"vampiric_touch,if=!talent.misery.enabled&!ticking&talent.legacy_of_"
"the_void.enabled&insanity>=70,cycle_targets=1" );
main->add_action(
- "shadow_word_death,if=cooldown.shadow_word_death.charges=2&insanity<="
+ "shadow_word_death,if=(active_enemies<=4|(talent.reaper_of_souls.enabled"
+ "&active_enemies<=2))&cooldown.shadow_word_death.charges=2&insanity<="
"(90-20*talent.reaper_of_souls.enabled)" );
main->add_action(
- "mind_blast,if=talent.legacy_of_the_void.enabled&(insanity<=81|(insanity<"
- "=75.2&talent.fortress_of_the_mind.enabled))" );
+ "mind_blast,if=active_enemies<=4&talent.legacy_of_the_void.enabled&(insanity"
+ "<=81|(insanity<=75.2&talent.fortress_of_the_mind.enabled))" );
main->add_action(
- "mind_blast,if=!talent.legacy_of_the_void.enabled|(insanity<=96|("
- "insanity<=95.2&talent.fortress_of_the_mind.enabled))" );
+ "mind_blast,if=active_enemies<=4&!talent.legacy_of_the_void.enabled|(insanity"
+ "<=96|(insanity<=95.2&talent.fortress_of_the_mind.enabled))" );
main->add_action(
"shadow_word_pain,if=!talent.misery.enabled&!ticking&target.time_to_die"
">10&(active_enemies<5&(talent.auspicious_spirits.enabled|talent.shadowy_"
@@ -5521,45 +5523,33 @@ void priest_t::apl_shadow()
s2m->add_action( "mindbender,if=talent.mindbender.enabled" );
s2m->add_action(
"void_torrent,if=dot.shadow_word_pain.remains>5.5&dot.vampiric_"
- "touch.remains>5.5" );
+ "touch.remains>5.5&!buff.power_infusion.up" );
s2m->add_action( "berserking,if=buff.voidform.stack>=65" );
s2m->add_action(
"shadow_word_death,if=current_insanity_drain*gcd.max>insanity&!buff."
"power_infusion.up&(insanity-(current_insanity_drain*gcd.max)+(20+40*"
"talent.reaper_of_souls.enabled)<100)" );
s2m->add_action(
"power_infusion,if=cooldown.shadow_word_death.charges=0&cooldown.shadow_"
- "word_death.remains>3*gcd.max" );
- s2m->add_action(
- "void_bolt,if=dot.shadow_word_pain.remains<3.5*gcd&dot.vampiric_touch."
- "remains<3.5*gcd&target.time_to_die>10,cycle_targets=1" );
- s2m->add_action(
- "void_bolt,if=dot.shadow_word_pain.remains<3.5*gcd&(talent.auspicious_"
- "spirits.enabled|talent.shadowy_insight.enabled)&target.time_to_die>10,"
- "cycle_targets=1" );
- s2m->add_action(
- "void_bolt,if=dot.vampiric_touch.remains<3.5*gcd&(talent.sanlayn.enabled|"
- "(talent.auspicious_spirits.enabled&artifact.unleash_the_shadows.rank))&"
- "target.time_to_die>10,cycle_targets=1" );
- s2m->add_action(
- "void_bolt,if=dot.shadow_word_pain.remains<3.5*gcd&artifact.sphere_of_"
- "insanity.rank&target.time_to_die>10,cycle_targets=1" );
+ "word_death.remains>3*gcd.max&buff.voidform.stack>50" );
s2m->add_action( "void_bolt" );
s2m->add_action(
- "shadow_word_death,if=current_insanity_drain*gcd.max>insanity&(insanity-"
+ "shadow_word_death,if=(active_enemies<=4|(talent.reaper_of_souls.enabled&active_"
+ "enemies<=2))&current_insanity_drain*gcd.max>insanity&(insanity-"
"(current_insanity_drain*gcd.max)+(20+40*talent.reaper_of_souls.enabled))<100" );
s2m->add_action(
"wait,sec=action.void_bolt.usable_in,if=action.void_bolt.usable_in<gcd."
"max*0.28" );
s2m->add_action(
"dispersion,if=current_insanity_drain*gcd.max>insanity-5&!buff.power_"
"infusion.up" );
- s2m->add_action( "mind_blast" );
+ s2m->add_action( "mind_blast,if=active_enemies<=5" );
s2m->add_action(
"wait,sec=action.mind_blast.usable_in,if=action.mind_blast.usable_in<gcd."
- "max*0.28" );
+ "max*0.28&active_enemies<=5" );
s2m->add_action(
- "shadow_word_death,if=cooldown.shadow_word_death.charges=2" );
+ "shadow_word_death,if=(active_enemies<=4|(talent.reaper_of_souls.enabled&"
+ "active_enemies<=2))&cooldown.shadow_word_death.charges=2" );
s2m->add_action(
"shadowfiend,if=!talent.mindbender.enabled,if=buff.voidform.stack>15" );
s2m->add_action(
@@ -5614,39 +5604,29 @@ void priest_t::apl_shadow()
"|(talent.surrender_to_madness.enabled&target.time_to_die>variable.s2mcheck-"
"(buff.insanity_drain_stacks.stack)+30))" );
vf->add_action(
- "power_infusion,if=buff.insanity_drain_stacks.stack>=10+2*set_bonus.tier19_2pc&"
- "(!talent.surrender_to_madness.enabled|(talent.surrender_to_madness.enabled&"
- "target.time_to_die>variable.s2mcheck-(buff.insanity_drain_stacks.stack)+61))" );
+ "power_infusion,if=buff.insanity_drain_stacks.stack>=(10+2*set_bonus.tier19_2pc+"
+ "5*buff.bloodlust.up+5*variable.s2mbeltcheck)&(!talent.surrender_to_madness.enabled"
+ "|(talent.surrender_to_madness.enabled&target.time_to_die>variable.s2mcheck-(buff."
+ "insanity_drain_stacks.stack)+61))" );
vf->add_action(
"berserking,if=buff.voidform.stack>=10&buff.insanity_drain_stacks.stack<=20&"
"(!talent.surrender_to_madness.enabled|(talent.surrender_to_madness.enabled&"
"target.time_to_die>variable.s2mcheck-(buff.insanity_drain_stacks.stack)+60))" );
- vf->add_action(
- "void_bolt,if=dot.shadow_word_pain.remains<3.5*gcd&dot.vampiric_touch."
- "remains<3.5*gcd&target.time_to_die>10,cycle_targets=1" );
- vf->add_action(
- "void_bolt,if=dot.shadow_word_pain.remains<3.5*gcd&(talent.auspicious_"
- "spirits.enabled|talent.shadowy_insight.enabled)&target.time_to_die>10,"
- "cycle_targets=1" );
- vf->add_action(
- "void_bolt,if=dot.vampiric_touch.remains<3.5*gcd&(talent.sanlayn.enabled|"
- "(talent.auspicious_spirits.enabled&artifact.unleash_the_shadows.rank))&"
- "target.time_to_die>10,cycle_targets=1" );
- vf->add_action(
- "void_bolt,if=dot.shadow_word_pain.remains<3.5*gcd&artifact.sphere_of_"
- "insanity.rank&target.time_to_die>10,cycle_targets=1" );
vf->add_action( "void_bolt" );
vf->add_action(
- "shadow_word_death,if=current_insanity_drain*gcd.max>insanity&(insanity-"
+ "shadow_word_death,if=(active_enemies<=4|(talent.reaper_of_souls.enabled&active_"
+ "enemies<=2))&current_insanity_drain*gcd.max>insanity&(insanity-"
"(current_insanity_drain*gcd.max)+(10+20*talent.reaper_of_souls.enabled))<100" );
vf->add_action(
"wait,sec=action.void_bolt.usable_in,if=action.void_bolt.usable_in<gcd."
"max*0.28" );
- vf->add_action( "mind_blast" );
+ vf->add_action( "mind_blast,if=active_enemies<=4" );
vf->add_action(
"wait,sec=action.mind_blast.usable_in,if=action.mind_blast.usable_in<gcd."
- "max*0.28" );
- vf->add_action( "shadow_word_death,if=cooldown.shadow_word_death.charges=2" );
+ "max*0.28&active_enemies<=4" );
+ vf->add_action(
+ "shadow_word_death,if=(active_enemies<=4|(talent.reaper_of_souls"
+ ".enabled&active_enemies<=2))&cooldown.shadow_word_death.charges=2" );
vf->add_action(
"shadowfiend,if=!talent.mindbender.enabled,if=buff.voidform.stack>15" );
vf->add_action(
@@ -5331,7 +5331,7 @@ void rogue_t::trigger_shadow_techniques( const action_state_t* state )
}
trigger_combo_point_gain( cp, gains.shadow_techniques, state -> action );
- shadow_techniques = rng().range( 3, 5 );
+ shadow_techniques = rng().range( 4, 5 );
}
}
@@ -7949,7 +7949,7 @@ void rogue_t::reset()
poisoned_enemies = 0;
df_counter = 0;
- shadow_techniques = rng().range( 3, 5 );
+ shadow_techniques = rng().range( 4, 5 );
weapon_data[ WEAPON_MAIN_HAND ].reset();
weapon_data[ WEAPON_OFF_HAND ].reset();
Oops, something went wrong.

0 comments on commit 1d9d109

Please sign in to comment.