@@ -255,7 +255,6 @@ struct mage_t final : public player_t
255
255
// Events
256
256
struct events_t
257
257
{
258
- event_t* enlightened;
259
258
event_t* flame_accelerant;
260
259
event_t* icicle;
261
260
event_t* merged_buff_execute;
@@ -337,8 +336,7 @@ struct mage_t final : public player_t
337
336
buff_t* clearcasting;
338
337
buff_t* clearcasting_channel; // Hidden buff which governs tick and channel time
339
338
buff_t* concentration;
340
- buff_t* enlightened_damage;
341
- buff_t* enlightened_mana;
339
+ buff_t* enlightened;
342
340
buff_t* evocation;
343
341
buff_t* high_voltage;
344
342
buff_t* impetus;
@@ -564,7 +562,6 @@ struct mage_t final : public player_t
564
562
{
565
563
bool brain_freeze_active;
566
564
bool fingers_of_frost_active;
567
- timespan_t last_enlightened_update;
568
565
timespan_t gained_full_icicles;
569
566
bool had_low_mana;
570
567
bool trigger_ff_empowerment;
@@ -957,7 +954,6 @@ struct mage_t final : public player_t
957
954
void add_precombat_buff_state( buff_t*, int, double, timespan_t ) override;
958
955
void invalidate_cache( cache_e ) override;
959
956
void init_resources( bool ) override;
960
- void do_dynamic_regen( bool = false ) override;
961
957
void recalculate_resource_max( resource_e, gain_t* = nullptr ) override;
962
958
void reset() override;
963
959
std::unique_ptr<expr_t> create_expression( std::string_view ) override;
@@ -1036,7 +1032,6 @@ struct mage_t final : public player_t
1036
1032
void consume_burden_of_power();
1037
1033
void trigger_splinter( player_t* target, int count = -1 );
1038
1034
void trigger_time_manipulation();
1039
- void update_enlightened( bool double_regen = false );
1040
1035
};
1041
1036
1042
1037
namespace pets {
@@ -7239,25 +7234,6 @@ struct mage_event_t : public event_t
7239
7234
{ }
7240
7235
};
7241
7236
7242
- struct enlightened_event_t final : public mage_event_t
7243
- {
7244
- enlightened_event_t( mage_t& m, timespan_t delta_time ) :
7245
- mage_event_t( m, delta_time )
7246
- { }
7247
-
7248
- const char* name() const override
7249
- { return "enlightened_event"; }
7250
-
7251
- void execute() override
7252
- {
7253
- mage->events.enlightened = nullptr;
7254
- // Do a non-forced regen first to figure out if we have enough mana to swap the buffs.
7255
- mage->do_dynamic_regen();
7256
- mage->update_enlightened( true );
7257
- mage->events.enlightened = make_event<enlightened_event_t>( sim(), *mage, 2.0_s );
7258
- }
7259
- };
7260
-
7261
7237
struct icicle_event_t final : public mage_event_t
7262
7238
{
7263
7239
player_t* target;
@@ -8360,12 +8336,14 @@ void mage_t::create_buffs()
8360
8336
->set_default_value_from_effect( 1 )
8361
8337
->set_activated( false )
8362
8338
->set_trigger_spell( talents.concentration );
8363
- buffs.enlightened_damage = make_buff( this, "enlightened_damage", find_spell( 321388 ) )
8364
- ->set_default_value_from_effect( 1 )
8365
- ->add_invalidate( CACHE_PLAYER_DAMAGE_MULTIPLIER );
8366
- buffs.enlightened_mana = make_buff( this, "enlightened_mana", find_spell( 321390 ) )
8367
- ->set_default_value_from_effect( 1 )
8368
- ->set_affects_regen( true );
8339
+ buffs.enlightened = make_buff( this, "enlightened", find_spell( 1217242 ) )
8340
+ ->set_schools_from_effect( 4 )
8341
+ ->add_invalidate( CACHE_PLAYER_DAMAGE_MULTIPLIER )
8342
+ ->set_affects_regen( true )
8343
+ ->set_freeze_stacks( true ) // We want to bump the buff manually
8344
+ ->set_tick_callback( [ this ] ( buff_t* b, int, timespan_t )
8345
+ { b->bump( 0, resources.pct( RESOURCE_MANA ) ); } )
8346
+ ->set_chance( talents.enlightened.ok() );
8369
8347
buffs.evocation = make_buff( this, "evocation", find_spell( 12051 ) )
8370
8348
->set_default_value_from_effect( 1 )
8371
8349
->set_cooldown( 0_ms )
@@ -8776,8 +8754,9 @@ double mage_t::resource_regen_per_second( resource_e rt ) const
8776
8754
{
8777
8755
reg *= 1.0 + 0.01 * spec.arcane_mage->effectN( 4 ).average( this );
8778
8756
reg *= 1.0 + cache.mastery() * spec.savant->effectN( 4 ).mastery_value();
8779
- reg *= 1.0 + buffs.enlightened_mana->check_value();
8780
8757
reg *= 1.0 + buffs.evocation->check_value();
8758
+ if ( buffs.enlightened->check() )
8759
+ reg *= 1.0 + ( 1.0 - buffs.enlightened->check_value() ) * buffs.enlightened->data().effectN( 3 ).percent();
8781
8760
}
8782
8761
8783
8762
return reg;
@@ -8791,15 +8770,6 @@ void mage_t::invalidate_cache( cache_e c )
8791
8770
recalculate_resource_max( RESOURCE_MANA );
8792
8771
}
8793
8772
8794
- void mage_t::do_dynamic_regen( bool forced )
8795
- {
8796
- player_t::do_dynamic_regen( forced );
8797
-
8798
- // Only update Enlightened buffs on resource updates that actually occur in game.
8799
- if ( forced && talents.enlightened.ok() )
8800
- make_event( *sim, [ this ] { update_enlightened(); } );
8801
- }
8802
-
8803
8773
void mage_t::recalculate_resource_max( resource_e rt, gain_t* source )
8804
8774
{
8805
8775
double max = resources.max[ rt ];
@@ -8842,8 +8812,8 @@ double mage_t::composite_player_multiplier( school_e school ) const
8842
8812
{
8843
8813
double m = player_t::composite_player_multiplier( school );
8844
8814
8845
- if ( buffs.enlightened_damage ->has_common_school( school ) )
8846
- m *= 1.0 + buffs.enlightened_damage ->check_value();
8815
+ if ( buffs.enlightened->check() && buffs.enlightened ->has_common_school( school ) )
8816
+ m *= 1.0 + buffs.enlightened ->check_value() * buffs.enlightened->data().effectN( 2 ).percent ();
8847
8817
if ( buffs.impetus->has_common_school( school ) )
8848
8818
m *= 1.0 + buffs.impetus->check_value();
8849
8819
@@ -9001,18 +8971,11 @@ void mage_t::arise()
9001
8971
9002
8972
buffs.flame_accelerant->trigger();
9003
8973
buffs.incanters_flow->trigger();
8974
+ buffs.enlightened->trigger( -1, resources.pct( RESOURCE_MANA ) );
9004
8975
9005
8976
if ( options.initial_spellfire_spheres > 0 )
9006
8977
buffs.spellfire_sphere->trigger( options.initial_spellfire_spheres );
9007
8978
9008
- if ( talents.enlightened.ok() )
9009
- {
9010
- update_enlightened();
9011
-
9012
- timespan_t first_tick = rng().real() * 2.0_s;
9013
- events.enlightened = make_event<events::enlightened_event_t>( *sim, *this, first_tick );
9014
- }
9015
-
9016
8979
if ( talents.flame_accelerant.ok() )
9017
8980
{
9018
8981
timespan_t first_tick = rng().real() * talents.flame_accelerant->effectN( 1 ).period();
@@ -9335,30 +9298,6 @@ stat_e mage_t::convert_hybrid_stat( stat_e s ) const
9335
9298
}
9336
9299
}
9337
9300
9338
- void mage_t::update_enlightened( bool double_regen )
9339
- {
9340
- if ( !talents.enlightened.ok() )
9341
- return;
9342
-
9343
- bool damage_buff = resources.pct( RESOURCE_MANA ) > talents.enlightened->effectN( 1 ).percent();
9344
- if ( damage_buff && !buffs.enlightened_damage->check() )
9345
- {
9346
- // Periodic mana regen happens twice whenever the mana regen buff from Enlightened expires.
9347
- if ( bugs && double_regen && sim->current_time() > state.last_enlightened_update )
9348
- regen( sim->current_time() - state.last_enlightened_update );
9349
-
9350
- buffs.enlightened_damage->trigger();
9351
- buffs.enlightened_mana->expire();
9352
- }
9353
- else if ( !damage_buff && !buffs.enlightened_mana->check() )
9354
- {
9355
- buffs.enlightened_damage->expire();
9356
- buffs.enlightened_mana->trigger();
9357
- }
9358
-
9359
- state.last_enlightened_update = sim->current_time();
9360
- }
9361
-
9362
9301
action_t* mage_t::get_icicle()
9363
9302
{
9364
9303
action_t* a = nullptr;
0 commit comments