diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 39eeed124..63d63c925 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -720,9 +720,18 @@ void BossAI::DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /* { if (!_healthCheckEvents.empty()) { + for (auto& check : _healthCheckEvents) + { + if (check._valid && me->HealthBelowPctDamaged(check._healthPct, damage)) + { + check._exec(); + check._valid = false; + } + } + _healthCheckEvents.remove_if([&](HealthCheckEventData data) -> bool { - return _ProccessHealthCheckEvent(data._healthPct, damage, data._exec); + return !data._valid; }); } } @@ -746,17 +755,6 @@ void BossAI::ScheduleHealthCheckEvent(std::initializer_list healthPct, st } } -bool BossAI::_ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function exec) const -{ - if (me->HealthBelowPctDamaged(healthPct, damage)) - { - exec(); - return true; - } - - return false; -} - // WorldBossAI - for non-instanced bosses WorldBossAI::WorldBossAI(Creature* creature) : diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index cc9c116f4..709d6698b 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -449,10 +449,11 @@ private: struct HealthCheckEventData { - HealthCheckEventData(uint8 healthPct, std::function exec) : _healthPct(healthPct), _exec(exec) { }; + HealthCheckEventData(uint8 healthPct, std::function exec, bool valid = true) : _healthPct(healthPct), _exec(exec), _valid(valid) { }; uint8 _healthPct; std::function _exec; + bool _valid; }; class BossAI : public ScriptedAI @@ -497,7 +498,6 @@ protected: void _JustDied(); void _JustReachedHome() { me->setActive(false); } void _EnterEvadeMode(EvadeReason why = EVADE_REASON_OTHER); - [[nodiscard]] bool _ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function exec) const; void TeleportCheaters();