Skip to content

Commit d7a80b8

Browse files
[Gear] Gloom-Spattered Dreadscale (#11291)
* [Gear] Gloom-Spattered Dreadscale * * Remove absorb action * Accumulate shield amount on impact and trigger and reset on execute * Get spell coefficient from on-equip effect * * Fix absorb reporting
1 parent 46e100e commit d7a80b8

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

engine/player/unique_gear_midnight.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2920,6 +2920,71 @@ void tangle_of_vibrant_vines( special_effect_t& effect )
29202920

29212921
new dbc_proc_callback_t( effect.player, effect );
29222922
}
2923+
2924+
// 1260633 driver
2925+
// 1260627 damage
2926+
// 1263141 absorb
2927+
void gloomspattered_dreadscale( special_effect_t& effect )
2928+
{
2929+
struct fractional_absorb_t : public absorb_buff_t
2930+
{
2931+
double absorb_fraction;
2932+
2933+
fractional_absorb_t( player_t* player, std::string_view name, const spell_data_t* spell,
2934+
const item_t* item = nullptr )
2935+
: absorb_buff_t( player, name, spell, item ), absorb_fraction( 1.0 )
2936+
{
2937+
}
2938+
2939+
double consume( double amount, action_state_t* state = nullptr ) override
2940+
{
2941+
return absorb_buff_t::consume( amount * absorb_fraction, state );
2942+
}
2943+
2944+
absorb_buff_t* set_absorb_fraction( double fraction )
2945+
{
2946+
absorb_fraction = fraction;
2947+
return this;
2948+
}
2949+
};
2950+
2951+
struct gloomspattered_dreadscale_t : public generic_aoe_proc_t
2952+
{
2953+
buff_t* absorb;
2954+
double shield_amount;
2955+
2956+
gloomspattered_dreadscale_t( const special_effect_t& effect )
2957+
: generic_aoe_proc_t( effect, "gloomspattered_dreadscale", effect.driver(), true ), shield_amount( 0 )
2958+
{
2959+
auto equip = find_special_effect( effect.player, 1260627 );
2960+
assert( equip && "Gloom-Spattered Dreadscale missing equip effect" );
2961+
2962+
base_dd_min = base_dd_max = equip->driver()->effectN( 1 ).average( effect );
2963+
2964+
auto absorb_spell = effect.player->find_spell( 1263141 );
2965+
absorb = create_buff<fractional_absorb_t>( effect.player, name(), absorb_spell )
2966+
->set_absorb_fraction( absorb_spell->effectN( 2 ).percent() )
2967+
->set_absorb_source( effect.player->get_stats( "gloomspattered_dreadscale_absorb", this ) );
2968+
}
2969+
2970+
void execute() override
2971+
{
2972+
generic_aoe_proc_t::execute();
2973+
2974+
absorb->trigger( -1, shield_amount );
2975+
shield_amount = 0;
2976+
}
2977+
2978+
void impact( action_state_t* state ) override
2979+
{
2980+
generic_aoe_proc_t::impact( state );
2981+
2982+
shield_amount += state->result_amount;
2983+
}
2984+
};
2985+
2986+
effect.execute_action = create_proc_action<gloomspattered_dreadscale_t>( "gloomspattered_dreadscale", effect );
2987+
}
29232988
} // namespace trinkets
29242989

29252990
namespace weapons
@@ -3552,6 +3617,8 @@ void register_special_effects()
35523617
register_special_effect( 1247311, DISABLED_EFFECT ); // Drum of Renewed Bonds on use
35533618
register_special_effect( 1253120, trinkets::glorious_crusaders_keepsake );
35543619
register_special_effect( 1253112, trinkets::sylvan_wakrapuku );
3620+
register_special_effect( 1260633, trinkets::gloomspattered_dreadscale );
3621+
register_special_effect( 1260627, DISABLED_EFFECT ); // Gloom-Spattered Dreadscale Passive Driver
35553622
// Weapons
35563623
register_special_effect( { 1253357, 1253359 }, weapons::torments_duality ); // umbral sabre & radiant foil
35573624
register_special_effect( 1266257, weapons::lightless_lament );

0 commit comments

Comments
 (0)