diff --git a/data/sql/updates/pending_db_world/rev_1655761459265526500.sql b/data/sql/updates/pending_db_world/rev_1655761459265526500.sql new file mode 100644 index 000000000..b2d7a25aa --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1655761459265526500.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `creature_formations` WHERE `leaderGUID` = 49310; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(49310, 49310, 0, 0, 27, 0, 0), +(49310, 49311, 0, 0, 27, 0, 0), +(49310, 49312, 0, 0, 27, 0, 0); diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index daaf52be0..030134f26 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -270,6 +270,11 @@ void CreatureGroup::MemberEvaded(Creature* member) continue; } + if (itr.second.HasGroupFlag(std::underlying_type_t(GroupAIFlags::GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE)) && pMember == m_leader) + { + continue; + } + pMember->Respawn(); } } diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index 6cc3157b8..9a4db6736 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -28,10 +28,11 @@ class CreatureGroup; enum class GroupAIFlags : uint16 { - GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001, - GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002, - GROUP_AI_FLAG_EVADE_TOGETHER = 0x004, - GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008, + GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001, + GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002, + GROUP_AI_FLAG_EVADE_TOGETHER = 0x004, + GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008, + GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010, //GROUP_AI_FLAG_UNK3 = 0x010, //GROUP_AI_FLAG_UNK4 = 0x020, //GROUP_AI_FLAG_UNK5 = 0x040, diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index e049edcc5..c646774b6 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -103,35 +103,6 @@ public: zealot->ResetFaction(); } - // TODO: do this in formations, once a flag is added to prevent leaders from respawning as well. - std::list creatureList; - GetCreatureListWithEntryInGrid(creatureList, me, NPC_ZULGURUB_TIGER, 15.0f); - - if (_catGuids.empty()) - { - for (Creature* creature : creatureList) - { - _catGuids.push_back(creature->GetGUID()); - if (!creature->IsAlive()) - { - creature->Respawn(true); - } - } - } - else - { - for (ObjectGuid guid : _catGuids) - { - if (Creature* creature = ObjectAccessor::GetCreature(*me, guid)) - { - if (!creature->IsAlive()) - { - creature->Respawn(true); - } - } - } - } - _scheduler.SetValidator([this] { return !me->HasUnitState(UNIT_STATE_CASTING);