// Flame Shock Spell =======================================================
struct flame_shock_t : public shaman_spell_t
{
double td_multiplier;
flame_shock_t( player_t* player, const std::string& options_str ) :
shaman_spell_t( "flame_shock", player, SCHOOL_FIRE, TREE_ELEMENTAL )
{
shaman_t* p = player -> cast_shaman();
option_t options[] =
{
{ NULL, OPT_UNKNOWN, NULL }
};
parse_options( options, options_str );
static rank_t ranks[] =
{
{ 80, 9, 500, 500, 139, 0.17 },
{ 75, 8, 425, 425, 119, 0.17 },
{ 70, 7, 377, 377, 105, 500 },
{ 60, 6, 309, 309, 86, 450 },
{ 0, 0, 0, 0, 0, 0 }
};
init_rank( ranks, 49233 );
base_execute_time = 0;
base_tick_time = 3.0;
num_ticks = 6;
may_crit = true;
direct_power_mod = 0.5*1.5/3.5;
tick_power_mod = 0.100;
base_hit += p -> talents.elemental_precision * 0.01;
base_dd_multiplier *= 1.0 + ( p -> talents.concussion * 0.01 +
p -> talents.booming_echoes * 0.10 +
p -> set_bonus.tier9_4pc_melee() * 0.25 );
base_td_multiplier *= 1.0 + ( p -> talents.concussion * 0.01 +
p -> set_bonus.tier9_4pc_melee() * 0.25 +
util_t::talent_rank( p -> talents.storm_earth_and_fire, 3, 0.20 ) +
p -> set_bonus.tier8_2pc_caster() * 0.2 );
base_cost_reduction += ( p -> talents.convection * 0.02 +
p -> talents.mental_quickness * 0.02 +
p -> talents.shamanistic_focus * 0.45 );
base_crit_bonus_multiplier *= 1.0 + ( p -> talents.elemental_fury * 0.20 +
p -> glyphs.flame_shock * 0.60 );
cooldown = p -> get_cooldown( "shock" );
cooldown -> duration = 6.0;
cooldown -> duration -= ( p -> talents.reverberation * 0.2 +
p -> talents.booming_echoes * 1.0 );
if ( p -> glyphs.flame_shock ) tick_may_crit = true;
// T8 2pc not yet changed
if ( p -> set_bonus.tier8_2pc_caster() ) tick_may_crit = true;
tick_may_crit = true;
if ( p -> glyphs.shocking )
{
trigger_gcd = 1.0;
min_gcd = 1.0;
}
observer = &( p -> active_flame_shock );
}
virtual void execute()
{
shaman_t* p = player -> cast_shaman();
num_ticks = ( p -> set_bonus.tier9_2pc_caster() ) ? 9 : 6;
added_ticks = 0;
shaman_spell_t::execute();
p -> buffs_stonebreaker -> trigger();
p -> buffs_tundra -> trigger();
}
virtual int scale_ticks_with_haste() SC_CONST
{
return 1;
}
};
[свернуть]