@@ -1070,8 +1070,9 @@ struct shaman_t : public parse_player_effects_t
1070
1070
1071
1071
// Doom Winds damage
1072
1072
action_t* doom_winds;
1073
-
1073
+
1074
1074
action_t* set_ascendance;
1075
+ action_t* tww3_primordial_storm;
1075
1076
} action;
1076
1077
1077
1078
// Pets
@@ -1891,6 +1892,7 @@ struct shaman_t : public parse_player_effects_t
1891
1892
void trigger_arc_discharge( const action_state_t* state );
1892
1893
void trigger_flowing_spirits( action_t* action );
1893
1894
void trigger_lively_totems( const action_state_t* state );
1895
+ void trigger_tww3_totemic_enh_2pc( const action_state_t* state );
1894
1896
1895
1897
// Legendary
1896
1898
void trigger_legacy_of_the_frost_witch( const action_state_t* state, unsigned consumed_stacks );
@@ -9634,7 +9636,7 @@ struct ascendance_t : public shaman_spell_t
9634
9636
9635
9637
struct ascendance_dre_t : public ascendance_t
9636
9638
{
9637
- ascendance_dre_t( shaman_t* player, spell_variant var_ ) : ascendance_t( player, "ascendance_dre", {}, var_)
9639
+ ascendance_dre_t( shaman_t* player, spell_variant var_ ) : ascendance_t( player, "ascendance_dre", {}, var_)
9638
9640
{
9639
9641
background = true;
9640
9642
cooldown->duration = 0_s;
@@ -10901,15 +10903,24 @@ struct primordial_storm_t : public shaman_spell_t
10901
10903
{
10902
10904
struct primordial_damage_t : public shaman_attack_t
10903
10905
{
10904
- primordial_damage_t( primordial_storm_t* parent, util::string_view name, const spell_data_t* s ) :
10905
- shaman_attack_t( name, parent->p(), s )
10906
+ primordial_damage_t( primordial_storm_t* parent, util::string_view name, const spell_data_t* s,
10907
+ spell_variant type_ ) :
10908
+ shaman_attack_t( ::action_name( name, type_ ), parent->p(), s, type_ )
10906
10909
{
10907
10910
// Inherit Maelstrom Weapon stacks from the parent cast
10908
10911
mw_parent = parent;
10909
10912
background = true;
10910
10913
10911
10914
aoe = -1;
10912
10915
reduced_aoe_targets = p()->talent.primordial_storm->effectN( 3 ).base_value();
10916
+
10917
+ switch ( type_ )
10918
+ {
10919
+ case spell_variant::TWW3:
10920
+ base_multiplier *= 1.0 + p()->sets->set( HERO_TOTEMIC, TWW3, B2 )->effectN( 1 ).percent();
10921
+ default:
10922
+ break;
10923
+ }
10913
10924
}
10914
10925
10915
10926
double action_multiplier() const override
@@ -10929,24 +10940,34 @@ struct primordial_storm_t : public shaman_spell_t
10929
10940
10930
10941
primordial_damage_t* fire, *frost, *nature;
10931
10942
10932
- primordial_storm_t( shaman_t* player, util::string_view options_str ) :
10933
- shaman_spell_t( "primordial_storm", player, player->find_spell( 1218090 ) )
10943
+ primordial_storm_t( shaman_t* player, spell_variant type_, util::string_view options_str = {} ) :
10944
+ shaman_spell_t( ::action_name( "primordial_storm", type_ ), player,
10945
+ player->find_spell( 1218090 ), type_ )
10934
10946
{
10935
10947
parse_options( options_str );
10936
10948
10937
10949
fire = new primordial_damage_t( this, "primordial_fire",
10938
- player->find_spell( 1218113 ) );
10950
+ player->find_spell( 1218113 ), type_ );
10939
10951
frost = new primordial_damage_t( this, "primordial_frost",
10940
- player->find_spell( 1218116 ) );
10952
+ player->find_spell( 1218116 ), type_ );
10941
10953
nature = new primordial_damage_t( this, "primordial_lightning",
10942
- player->find_spell( 1218118 ) );
10954
+ player->find_spell( 1218118 ), type_ );
10943
10955
10944
10956
add_child( fire );
10945
10957
add_child( frost );
10946
10958
add_child( nature );
10947
10959
10948
10960
// Spell data does not indicate this, textual description does
10949
10961
affected_by_maelstrom_weapon = true;
10962
+
10963
+ switch ( type_ )
10964
+ {
10965
+ case spell_variant::TWW3:
10966
+ background = true;
10967
+ break;
10968
+ default:
10969
+ break;
10970
+ }
10950
10971
}
10951
10972
10952
10973
void trigger_lightning_damage()
@@ -11295,6 +11316,8 @@ struct voltaic_blaze_t : public shaman_spell_t
11295
11316
shaman_spell_t::execute();
11296
11317
11297
11318
p()->buff.whirling_earth->decrement();
11319
+
11320
+ p()->trigger_tww3_totemic_enh_2pc( execute_state );
11298
11321
}
11299
11322
11300
11323
void impact( action_state_t* state ) override
@@ -11593,7 +11616,7 @@ action_t* shaman_t::create_action( util::string_view name, util::string_view opt
11593
11616
if ( name == "voltaic_blaze" )
11594
11617
return new voltaic_blaze_t( this, options_str );
11595
11618
if ( name == "primordial_storm" )
11596
- return new primordial_storm_t( this, options_str );
11619
+ return new primordial_storm_t( this, spell_variant::NORMAL, options_str );
11597
11620
11598
11621
// restoration
11599
11622
if ( name == "spiritwalkers_grace" )
@@ -11866,6 +11889,11 @@ void shaman_t::create_actions()
11866
11889
action.set_ascendance = new ascendance_dre_t( this, spell_variant::TWW3 );
11867
11890
}
11868
11891
11892
+ if ( sets->has_set_bonus( HERO_TOTEMIC, TWW3, B2 ) && specialization() == SHAMAN_ENHANCEMENT )
11893
+ {
11894
+ action.tww3_primordial_storm = new primordial_storm_t( this, spell_variant::TWW3 );
11895
+ }
11896
+
11869
11897
if ( talent.tempest_strikes.ok() )
11870
11898
{
11871
11899
action.tempest_strikes = new tempest_strikes_damage_t( this );
@@ -13570,6 +13598,8 @@ void shaman_t::trigger_whirling_fire( const action_state_t* state )
13570
13598
buff.hot_hand->extend_duration_or_trigger( buff.whirling_fire->data().effectN( 1 ).time_value() );
13571
13599
13572
13600
buff.whirling_fire->decrement();
13601
+
13602
+ trigger_tww3_totemic_enh_2pc( state );
13573
13603
}
13574
13604
13575
13605
void shaman_t::trigger_stormblast( const action_state_t* state )
@@ -13698,6 +13728,8 @@ void shaman_t::trigger_whirling_air( const action_state_t* state )
13698
13728
}
13699
13729
13700
13730
buff.whirling_air->decrement();
13731
+
13732
+ trigger_tww3_totemic_enh_2pc( state );
13701
13733
}
13702
13734
13703
13735
void shaman_t::trigger_reactivity( const action_state_t* state )
@@ -14024,6 +14056,22 @@ void shaman_t::trigger_lively_totems( const action_state_t* state )
14024
14056
}
14025
14057
}
14026
14058
14059
+ void shaman_t::trigger_tww3_totemic_enh_2pc( const action_state_t* state )
14060
+ {
14061
+ if ( !sets->has_set_bonus( HERO_TOTEMIC, TWW3, B2 ) || specialization() != SHAMAN_ENHANCEMENT )
14062
+ {
14063
+ return;
14064
+ }
14065
+
14066
+ if ( buff.whirling_air->check() || buff.whirling_earth->check() || buff.whirling_fire->check() )
14067
+ {
14068
+ return;
14069
+ }
14070
+
14071
+ sim->print_debug( "{} triggering tww3 totemic enhancement 2pc set bonus", this->name() );
14072
+ action.tww3_primordial_storm->execute_on_target( state->target );
14073
+ }
14074
+
14027
14075
// shaman_t::init_buffs =====================================================
14028
14076
14029
14077
void shaman_t::create_buffs()
@@ -14334,7 +14382,7 @@ void shaman_t::create_buffs()
14334
14382
->set_trigger_spell( sets->set( SHAMAN_ENHANCEMENT, TWW2, B4 ) );
14335
14383
buff.ancestral_wisdom = make_buff( this, "ancestral_wisdom", find_spell( 1238279 ) )
14336
14384
->set_trigger_spell( spell.tww3_farseer_4pc )
14337
- ->set_stack_change_callback( [ this ]( buff_t*, int, int cur ) {
14385
+ ->set_stack_change_callback( [ this ]( buff_t*, int, int ) {
14338
14386
cooldown.lava_burst->adjust_recharge_multiplier();
14339
14387
} );
14340
14388
buff.storms_eye = make_buff( this, "storms_eye", find_spell(1239315) )
0 commit comments