From c807b455751e061f95fcb4a4e2ffe64e4391a0b2 Mon Sep 17 00:00:00 2001 From: criller7070 Date: Wed, 24 Jun 2026 01:09:32 +0200 Subject: [PATCH 1/2] [Gear] Trinket - Wavecaller's Seastone --- engine/player/unique_gear_midnight.cpp | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/engine/player/unique_gear_midnight.cpp b/engine/player/unique_gear_midnight.cpp index 37d94b8039c..c7fbe7f3469 100644 --- a/engine/player/unique_gear_midnight.cpp +++ b/engine/player/unique_gear_midnight.cpp @@ -3079,6 +3079,49 @@ void sporelords_mycelium( special_effect_t& effect ) } } ); } + +// Wavecaller's Seastone +// 1295058 Driver +// 1295057 Tidal Insight Buff +void wavecallers_seastone( special_effect_t& effect ) +{ + auto buff = create_buff( effect.player, effect.player->find_spell( 1295057 ) ) + ->set_stat_from_effect_type( A_MOD_STAT, effect.driver()->effectN( 1 ).average( effect ) ); + + struct wavecallers_seastone_cb_t : public dbc_proc_callback_t + { + stat_buff_t* tidal_insight; + bool going_up; + + wavecallers_seastone_cb_t( const special_effect_t& e, stat_buff_t* b ) + : dbc_proc_callback_t( e.player, e ), tidal_insight( b ), going_up( true ) + {} + + void reset() override + { + dbc_proc_callback_t::reset(); + going_up = true; + } + + void execute( const spell_data_t*, player_t*, action_state_t* ) override + { + if ( going_up ) + { + tidal_insight->trigger(); + if ( tidal_insight->at_max_stacks() ) + going_up = false; + } + else + { + tidal_insight->decrement(); + if ( !tidal_insight->check() ) + going_up = true; + } + } + }; + + new wavecallers_seastone_cb_t( effect, buff ); +} } // namespace trinkets namespace weapons @@ -4116,6 +4159,9 @@ void register_special_effects() set_min_version( wowv_t( 12, 0, 7 ) ); register_special_effect( 1284696, trinkets::sporelords_mycelium ); reset_version_check(); + set_min_version( wowv_t( 12, 1, 0 ) ); + register_special_effect( 1295058, trinkets::wavecallers_seastone ); + reset_version_check(); // Weapons register_special_effect( { 1253357, 1253359 }, weapons::torments_duality ); // umbral sabre & radiant foil register_special_effect( 1266257, weapons::lightless_lament ); From 9ae8a6084a23bf2fcb9a0f7521151fac12a5b026 Mon Sep 17 00:00:00 2001 From: Christian Seestern Hyllested Date: Wed, 24 Jun 2026 18:50:34 +0200 Subject: [PATCH 2/2] simplified seastone implementation --- engine/player/unique_gear_midnight.cpp | 46 ++++++-------------------- 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/engine/player/unique_gear_midnight.cpp b/engine/player/unique_gear_midnight.cpp index c7fbe7f3469..8669674516f 100644 --- a/engine/player/unique_gear_midnight.cpp +++ b/engine/player/unique_gear_midnight.cpp @@ -3085,42 +3085,16 @@ void sporelords_mycelium( special_effect_t& effect ) // 1295057 Tidal Insight Buff void wavecallers_seastone( special_effect_t& effect ) { - auto buff = create_buff( effect.player, effect.player->find_spell( 1295057 ) ) - ->set_stat_from_effect_type( A_MOD_STAT, effect.driver()->effectN( 1 ).average( effect ) ); - - struct wavecallers_seastone_cb_t : public dbc_proc_callback_t - { - stat_buff_t* tidal_insight; - bool going_up; - - wavecallers_seastone_cb_t( const special_effect_t& e, stat_buff_t* b ) - : dbc_proc_callback_t( e.player, e ), tidal_insight( b ), going_up( true ) - {} - - void reset() override - { - dbc_proc_callback_t::reset(); - going_up = true; - } - - void execute( const spell_data_t*, player_t*, action_state_t* ) override - { - if ( going_up ) - { - tidal_insight->trigger(); - if ( tidal_insight->at_max_stacks() ) - going_up = false; - } - else - { - tidal_insight->decrement(); - if ( !tidal_insight->check() ) - going_up = true; - } - } - }; - - new wavecallers_seastone_cb_t( effect, buff ); + effect.custom_buff = create_buff( effect.player, effect.player->find_spell( 1295057 ) ) + ->set_stat_from_effect_type( A_MOD_STAT, effect.driver()->effectN( 1 ).average( effect ) ) + ->set_stack_change_callback( [ effect ]( buff_t* b, int, int new_ ) { + if ( new_ == b->max_stack() ) + make_event( *effect.player->sim, 0_ms, [ b ] { b->set_reverse( true ); } ); + } ) + ->set_expire_callback( [ effect ]( buff_t* b, int, timespan_t ) { + make_event( *effect.player->sim, 0_ms, [ b ] { b->set_reverse( false ); } ); + } ); + new dbc_proc_callback_t( effect.player, effect ); } } // namespace trinkets