mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 07:48:02 +00:00
fix(Core/Formations): Implemented GROUP_AI_FLAG_RESPAWN_ON_EVADE flag. (#11512)
Fixes #11364
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1650793587179586100');
|
||||||
|
|
||||||
|
UPDATE `creature_formations` SET `groupAI`=`groupAI`|0x8 WHERE `leaderGuid` IN (84634,84648);
|
||||||
@@ -229,7 +229,7 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)
|
|||||||
void CreatureGroup::MemberEvaded(Creature* member)
|
void CreatureGroup::MemberEvaded(Creature* member)
|
||||||
{
|
{
|
||||||
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;
|
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;
|
||||||
if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER)))
|
if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_MASK)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -243,18 +243,34 @@ void CreatureGroup::MemberEvaded(Creature* member)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pMember == member || pMember->isDead() || pMember->IsInEvadeMode() || !pMember->IsInCombat() ||
|
if (pMember == member || pMember->IsInEvadeMode() || !itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_MASK)))
|
||||||
!itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER)))
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pMember->IsAIEnabled)
|
if (itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER)))
|
||||||
{
|
{
|
||||||
if (CreatureAI* pMemberAI = pMember->AI())
|
if (!pMember->IsAlive() || !pMember->IsInCombat())
|
||||||
{
|
{
|
||||||
pMemberAI->EnterEvadeMode();
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pMember->IsAIEnabled)
|
||||||
|
{
|
||||||
|
if (CreatureAI* pMemberAI = pMember->AI())
|
||||||
|
{
|
||||||
|
pMemberAI->EnterEvadeMode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pMember->IsAlive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pMember->Respawn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,16 +31,18 @@ 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_UNK2 = 0x008,
|
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
||||||
//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,
|
||||||
//GROUP_AI_FLAG_UNK6 = 0x080,
|
//GROUP_AI_FLAG_UNK6 = 0x080,
|
||||||
//GROUP_AI_FLAG_UNK7 = 0x100,
|
//GROUP_AI_FLAG_UNK7 = 0x100,
|
||||||
GROUP_AI_FLAG_FOLLOW_LEADER = 0x200,
|
GROUP_AI_FLAG_FOLLOW_LEADER = 0x200,
|
||||||
|
|
||||||
|
GROUP_AI_FLAG_EVADE_MASK = GROUP_AI_FLAG_EVADE_TOGETHER | GROUP_AI_FLAG_RESPAWN_ON_EVADE,
|
||||||
|
|
||||||
// Used to verify valid and usable flags
|
// Used to verify valid and usable flags
|
||||||
GROUP_AI_FLAG_SUPPORTED = GROUP_AI_FLAG_MEMBER_ASSIST_LEADER | GROUP_AI_FLAG_LEADER_ASSIST_MEMBER | GROUP_AI_FLAG_EVADE_TOGETHER | GROUP_AI_FLAG_FOLLOW_LEADER
|
GROUP_AI_FLAG_SUPPORTED = GROUP_AI_FLAG_MEMBER_ASSIST_LEADER | GROUP_AI_FLAG_LEADER_ASSIST_MEMBER | GROUP_AI_FLAG_EVADE_MASK | GROUP_AI_FLAG_FOLLOW_LEADER
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FormationInfo
|
struct FormationInfo
|
||||||
|
|||||||
Reference in New Issue
Block a user