mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-29 00:23:48 +00:00
feat(Core/Formations): Implement GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON… (#12128)
This commit is contained in:
@@ -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);
|
||||
@@ -270,6 +270,11 @@ void CreatureGroup::MemberEvaded(Creature* member)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE)) && pMember == m_leader)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
pMember->Respawn();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<Creature*> 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);
|
||||
|
||||
Reference in New Issue
Block a user