From 4062391ef66abe822f3f74f292007607beb4da02 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Sun, 28 Apr 2024 19:09:04 +0200 Subject: [PATCH] use event instead of update(diff) --- .../Northrend/Naxxramas/boss_maexxna.cpp | 47 +++++++------------ 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index 7f94f1d862..f0bf33847f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -46,7 +46,8 @@ enum Events EVENT_NECROTIC_POISON = 3, EVENT_WEB_WRAP = 4, EVENT_HEALTH_CHECK = 5, - EVENT_SUMMON_SPIDERLINGS = 6 + EVENT_SUMMON_SPIDERLINGS = 6, + EVENT_WEB_WRAP_APPLY_STUN = 7 }; enum Emotes @@ -113,7 +114,7 @@ public: EventMap events; SummonList summons; - std::vector> wraps; + GuidList wraps; bool IsInRoom() { @@ -221,32 +222,9 @@ public: target->KnockbackFrom(randomPos.GetPositionX(), randomPos.GetPositionY(), -horizontalSpeed, verticalSpeed); me->CastSpell(target, SPELL_WEB_WRAP_PACIFY_5, true); // pacify silence for 5 seconds - wraps.push_back(std::make_pair(uint32(2000), target->GetGUID())); - } - } - - void UpdateWraps(uint32 diff) - { - bool wdone = false; - for (auto& p : wraps) - { - if (p.first < diff) - { - if (Player* player = ObjectAccessor::GetPlayer(*me, p.second)) - { - player->CastSpell(player, SPELL_WEB_WRAP_STUN, true); - } - wdone = true; - } - else - { - p.first -= diff; - } - } - if (wdone) - { - wraps.clear(); + wraps.push_back(target->GetGUID()); } + events.ScheduleEvent(EVENT_WEB_WRAP_APPLY_STUN, 2s); } void UpdateAI(uint32 diff) override @@ -257,8 +235,6 @@ public: if (!UpdateVictim()) return; - UpdateWraps(diff); - events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; @@ -295,10 +271,23 @@ public: events.Repeat(1s); break; case EVENT_WEB_WRAP: + Talk(EMOTE_WEB_WRAP); DoCastWebWrap(); events.Repeat(40s); break; + case EVENT_WEB_WRAP_APPLY_STUN: + { + for (auto& p : wraps) + { + if (Player* player = ObjectAccessor::GetPlayer(*me, p)) + { + player->CastSpell(player, SPELL_WEB_WRAP_STUN, true); + } + } + wraps.clear(); + break; + } } DoMeleeAttackIfReady(); }