Skip to content

Commit 5026519

Browse files
committed
[Gear] Fix Heal/Absorb Target Cache Issues
1 parent 01f83b5 commit 5026519

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

engine/action/absorb.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,15 @@ absorb_buff_t* absorb_t::create_buff(const action_state_t* s)
4242
// Add absorb target stats as a child to the main stats object for reporting
4343
stats->add_child(stats_obj);
4444
}
45-
auto buff = make_buff<absorb_buff_t>(s->target, name_str, &data());
45+
auto buff = make_buff<absorb_buff_t>( actor_pair_t( s->target, player ), name_str, &data() );
4646
buff->set_absorb_source(stats_obj);
4747

4848
return buff;
4949
}
5050

5151
void absorb_t::activate()
5252
{
53-
sim->player_non_sleeping_list.register_callback([this](player_t*) {
54-
target_cache.is_valid = false;
55-
});
53+
sim->player_non_sleeping_list.register_callback( [ this ]( player_t* ) { target_cache.is_valid = false; } );
5654
}
5755

5856
void absorb_t::impact(action_state_t* s)
@@ -116,15 +114,16 @@ double absorb_t::composite_versatility(const action_state_t* state) const
116114
return spell_base_t::composite_versatility(state) + player->cache.heal_versatility();
117115
}
118116

119-
size_t absorb_t::available_targets(std::vector<player_t*>& target_list) const
117+
size_t absorb_t::available_targets( std::vector<player_t*>& target_list ) const
120118
{
121119
target_list.clear();
122-
target_list.push_back(target);
120+
if ( !target->is_sleeping() )
121+
target_list.push_back( target );
123122

124-
for (const auto& t : sim->player_non_sleeping_list)
123+
for ( const auto& t : sim->player_non_sleeping_list )
125124
{
126-
if (t != target)
127-
target_list.push_back(t);
125+
if ( t != target )
126+
target_list.push_back( t );
128127
}
129128

130129
return target_list.size();

engine/action/heal.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,8 @@ int heal_t::num_targets() const
427427
size_t heal_t::available_targets( std::vector<player_t*>& target_list ) const
428428
{
429429
target_list.clear();
430-
target_list.push_back( target );
430+
if ( !target->is_sleeping() )
431+
target_list.push_back( target );
431432

432433
for ( const auto& t : sim->player_non_sleeping_list )
433434
{

engine/player/unique_gear_thewarwithin.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6160,10 +6160,12 @@ struct damage_citrine_t : citrine_base_t<generic_proc_t>
61606160
if ( has_role_mult( e.player, driver_spell ) )
61616161
this->base_multiplier *= role_mult( e.player, driver_spell );
61626162
}
6163+
61636164
void execute() override
61646165
{
61656166
if ( !target->is_enemy() )
61666167
{
6168+
target_cache.is_valid = false;
61676169
target = rng().range( target_list() );
61686170
}
61696171

@@ -6185,6 +6187,8 @@ struct heal_citrine_t : citrine_base_t<generic_heal_t>
61856187
{
61866188
if ( target->is_enemy() )
61876189
{
6190+
target = player;
6191+
target_cache.is_valid = false;
61886192
target = rng().range( target_list() );
61896193
}
61906194

@@ -6205,6 +6209,8 @@ struct absorb_citrine_t : citrine_base_t<absorb_t>
62056209
{
62066210
if ( target->is_enemy() )
62076211
{
6212+
target = player;
6213+
target_cache.is_valid = false;
62086214
target = rng().range( target_list() );
62096215
}
62106216

0 commit comments

Comments
 (0)