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;
|
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();
|
pMember->Respawn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,11 @@ class CreatureGroup;
|
|||||||
|
|
||||||
enum class GroupAIFlags : uint16
|
enum class GroupAIFlags : uint16
|
||||||
{
|
{
|
||||||
GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001,
|
GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001,
|
||||||
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
|
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
|
||||||
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
|
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
|
||||||
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
||||||
|
GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010,
|
||||||
//GROUP_AI_FLAG_UNK3 = 0x010,
|
//GROUP_AI_FLAG_UNK3 = 0x010,
|
||||||
//GROUP_AI_FLAG_UNK4 = 0x020,
|
//GROUP_AI_FLAG_UNK4 = 0x020,
|
||||||
//GROUP_AI_FLAG_UNK5 = 0x040,
|
//GROUP_AI_FLAG_UNK5 = 0x040,
|
||||||
|
|||||||
@@ -103,35 +103,6 @@ public:
|
|||||||
zealot->ResetFaction();
|
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]
|
_scheduler.SetValidator([this]
|
||||||
{
|
{
|
||||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||||
|
|||||||
Reference in New Issue
Block a user