From 980f09ef22410a1e80a24d86cc6b1b1b9e87062e Mon Sep 17 00:00:00 2001 From: Nefertumm Date: Sun, 26 Jun 2022 04:45:29 -0300 Subject: [PATCH] fix(Core/ZulGurub): Arlokk reset behaviour (#12154) * fix(Core/ZulGurub): Arlokk reset behaviour * remove comment --- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 68 ++++++++----------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index deb48fa13..c7f11c2f6 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -105,7 +105,8 @@ public: me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_DAGGER)); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(WEAPON_DAGGER)); me->SetWalk(false); - me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0]); + me->SetHomePosition(PosMoveOnSpawn[0]); + me->GetMotionMaster()->MoveTargetedHome(); } void JustDied(Unit* /*killer*/) override @@ -131,31 +132,37 @@ public: { uint8 sideA = 0; uint8 sideB = 0; - for (std::list::const_iterator itr = triggerList.begin(); itr != triggerList.end(); ++itr) + for (auto const& trigger : triggerList) { - if (Creature* trigger = *itr) + if (trigger->GetPositionY() < -1625.0f) { - if (trigger->GetPositionY() < -1625.0f) - { - _triggersSideAGUID[sideA] = trigger->GetGUID(); - ++sideA; - } - else - { - _triggersSideBGUID[sideB] = trigger->GetGUID(); - ++sideB; - } + _triggersSideAGUID[sideA] = trigger->GetGUID(); + ++sideA; + } + else + { + _triggersSideBGUID[sideB] = trigger->GetGUID(); + ++sideB; } } } } + void JustReachedHome() override + { + if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GONG_OF_BETHEKK))) + object->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + me->DespawnOrUnsummon(); + } + void EnterEvadeMode(EvadeReason why) override { BossAI::EnterEvadeMode(why); - if (GameObject* object = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_GONG_OF_BETHEKK))) - object->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - me->DespawnOrUnsummon(4000); + + std::list panthers; + GetCreatureListWithEntryInGrid(panthers, me, NPC_ZULIAN_PROWLER, 200.f); + for (auto const& panther : panthers) + panther->DespawnOrUnsummon(); } void SetData(uint32 id, uint32 /*value*/) override @@ -221,33 +228,27 @@ public: } case EVENT_TRANSFORM: { - DoCast(me, SPELL_PANTHER_TRANSFORM); // SPELL_AURA_TRANSFORM + DoCastSelf(SPELL_PANTHER_TRANSFORM); // SPELL_AURA_TRANSFORM me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP)); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(EQUIP_UNEQUIP)); - /* - const CreatureTemplate* cinfo = me->GetCreatureTemplate(); - me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); - me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); - me->UpdateDamagePhysical(BASE_ATTACK); - */ me->AttackStop(); DoResetThreat(); me->SetReactState(REACT_PASSIVE); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - DoCast(me, SPELL_VANISH_VISUAL); - DoCast(me, SPELL_VANISH); + DoCastSelf(SPELL_VANISH_VISUAL); + DoCastSelf(SPELL_VANISH); events.ScheduleEvent(EVENT_VANISH, 1000, 0, PHASE_ONE); break; } case EVENT_VANISH: - DoCast(me, SPELL_SUPER_INVIS); + DoCastSelf(SPELL_SUPER_INVIS); me->SetWalk(false); me->GetMotionMaster()->MovePoint(0, frand(-11551.0f, -11508.0f), frand(-1638.0f, -1617.0f), me->GetPositionZ()); events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); break; case EVENT_VANISH_2: - DoCast(me, SPELL_VANISH); - DoCast(me, SPELL_SUPER_INVIS); + DoCastSelf(SPELL_VANISH); + DoCastSelf(SPELL_SUPER_INVIS); events.ScheduleEvent(EVENT_VISIBLE, urand(7000, 10000), 0, PHASE_ONE); break; case EVENT_VISIBLE: @@ -272,12 +273,6 @@ public: DoCast(me, SPELL_VANISH_VISUAL); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_DAGGER)); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(WEAPON_DAGGER)); - /* - const CreatureTemplate* cinfo = me->GetCreatureTemplate(); - me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg)); - me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg)); - me->UpdateDamagePhysical(BASE_ATTACK); - */ me->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND, TOTAL_PCT, 35.0f, false); // hack events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(4000, 7000), 0, PHASE_ONE); events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); @@ -322,11 +317,6 @@ enum ZulianProwlerEvents EVENT_ATTACK = 1 }; -/*Position const PosProwlerCenter[1] = -{ - { -11556.7f, -1631.344f, 41.2994f, 0.0f } -};*/ - class npc_zulian_prowler : public CreatureScript { public: