Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions engine/player/unique_gear_midnight.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2956,6 +2956,71 @@ void tangle_of_vibrant_vines( special_effect_t& effect )

new dbc_proc_callback_t( effect.player, effect );
}

// 1260633 driver
// 1260627 damage
// 1263141 absorb
void gloomspattered_dreadscale( special_effect_t& effect )
{
struct fractional_absorb_t : public absorb_buff_t
{
double absorb_fraction;

fractional_absorb_t( player_t* player, std::string_view name, const spell_data_t* spell,
const item_t* item = nullptr )
: absorb_buff_t( player, name, spell, item ), absorb_fraction( 1.0 )
{
}

double consume( double amount, action_state_t* state = nullptr ) override
{
return absorb_buff_t::consume( amount * absorb_fraction, state );
}

absorb_buff_t* set_absorb_fraction( double fraction )
{
absorb_fraction = fraction;
return this;
}
};

struct gloomspattered_dreadscale_t : public generic_aoe_proc_t
{
buff_t* absorb;
double shield_amount;

gloomspattered_dreadscale_t( const special_effect_t& effect )
: generic_aoe_proc_t( effect, "gloomspattered_dreadscale", effect.driver(), true ), shield_amount( 0 )
{
auto equip = find_special_effect( effect.player, 1260627 );
assert( equip && "Gloom-Spattered Dreadscale missing equip effect" );

base_dd_min = base_dd_max = equip->driver()->effectN( 1 ).average( effect );

auto absorb_spell = effect.player->find_spell( 1263141 );
absorb = create_buff<fractional_absorb_t>( effect.player, name(), absorb_spell )
->set_absorb_fraction( absorb_spell->effectN( 2 ).percent() )
->set_absorb_source( effect.player->get_stats( "gloomspattered_dreadscale_absorb", this ) );
}

void execute() override
{
generic_aoe_proc_t::execute();

absorb->trigger( -1, shield_amount );
shield_amount = 0;
}

void impact( action_state_t* state ) override
{
generic_aoe_proc_t::impact( state );

shield_amount += state->result_amount;
}
};

effect.execute_action = create_proc_action<gloomspattered_dreadscale_t>( "gloomspattered_dreadscale", effect );
}
} // namespace trinkets

namespace weapons
Expand Down Expand Up @@ -3588,6 +3653,8 @@ void register_special_effects()
register_special_effect( 1247311, DISABLED_EFFECT ); // Drum of Renewed Bonds on use
register_special_effect( 1253120, trinkets::glorious_crusaders_keepsake );
register_special_effect( 1253112, trinkets::sylvan_wakrapuku );
register_special_effect( 1260633, trinkets::gloomspattered_dreadscale );
register_special_effect( 1260627, DISABLED_EFFECT ); // Gloom-Spattered Dreadscale Passive Driver
// Weapons
register_special_effect( { 1253357, 1253359 }, weapons::torments_duality ); // umbral sabre & radiant foil
register_special_effect( 1266257, weapons::lightless_lament );
Expand Down
Loading