// Corruption Spell ===========================================================
struct corruption_t : public warlock_spell_t
{
int tier10_4pc;
bool tier10_4pc_effect;
corruption_t( player_t* player, const std::string& options_str ) :
warlock_spell_t( "corruption", player, SCHOOL_SHADOW, TREE_AFFLICTION ), tier10_4pc( 0 ), tier10_4pc_effect( false )
{
warlock_t* p = player -> cast_warlock();
option_t options[] =
{
{ "tier10_4pc", OPT_BOOL, &tier10_4pc },
{ NULL, OPT_UNKNOWN, NULL }
};
parse_options( options, options_str );
static rank_t ranks[] =
{
{ 77, 10, 0, 0, 180, 0.14 },
{ 71, 9, 0, 0, 165, 0.14 },
{ 65, 8, 0, 0, 150, 370 },
{ 60, 7, 0, 0, 137, 340 },
{ 0, 0, 0, 0, 0, 0 }
};
init_rank( ranks, 47813 );
base_execute_time = 0.0;
base_tick_time = 3.0;
num_ticks = 6;
tick_power_mod = base_tick_time / 15.0;
base_cost *= 1.0 - p -> talents.suppression * 0.02;
base_multiplier *= 1.0 + ( p -> talents.shadow_mastery * 0.03 +
p -> talents.contagion * 0.01 +
p -> talents.improved_corruption * 0.02 +
p -> set_bonus.tier9_4pc_caster() * 0.10 +
( ( p -> talents.siphon_life ) ? 0.05 : 0 ) );
tick_power_mod += p -> talents.empowered_corruption * 0.02;
tick_power_mod += p -> talents.everlasting_affliction * 0.01;
if ( p -> talents.pandemic )
{
base_crit_bonus_multiplier = 2;
tick_may_crit = true;
base_crit += p -> talents.malediction * 0.03 +
p -> set_bonus.tier10_2pc_caster() * 0.05;
}
observer = &( p -> active_corruption );
}
virtual void execute()
{
base_td = base_td_init;
warlock_spell_t::execute();
if ( result_is_hit() ) {
warlock_t* p = player -> cast_warlock();
tier10_4pc_effect = p -> buffs_tier10_4pc_caster -> up();
num_ticks = 6;
}
}
virtual int scale_ticks_with_haste() SC_CONST
{
warlock_t* p = player -> cast_warlock();
if ( p -> hasted_corruption == 0 )
return 0;
return ( ( p -> hasted_corruption > 0 ) || p -> glyphs.quick_decay );
}
virtual void tick()
{
warlock_t* p = player -> cast_warlock();
warlock_spell_t::tick();
p -> buffs_eradication -> trigger();
p -> buffs_shadow_trance -> trigger( 1, 1.0, p -> talents.nightfall * 0.02 );
p -> buffs_shadow_trance -> trigger( 1, 1.0, p -> glyphs.corruption * 0.04 );
p -> buffs_tier7_2pc_caster -> trigger();
if ( p -> set_bonus.tier6_2pc_caster() ) p -> resource_gain( RESOURCE_HEALTH, 70 );
trigger_molten_core( this );
}
virtual bool ready()
{
if ( tier10_4pc )
{
warlock_t* p = player -> cast_warlock();
if ( ! tier10_4pc_effect && p -> buffs_tier10_4pc_caster -> up() )
{
recast = true;
bool ret = warlock_spell_t::ready();
recast = false;
return ret;
}
}
return warlock_spell_t::ready();
}
};
[свернуть]