Cleanup and fix CreatureGroup
This commit is contained in:
@@ -338,9 +338,10 @@ namespace Framework.Constants
|
||||
|
||||
public enum GroupAIFlags
|
||||
{
|
||||
None = 0, // If any creature from group is attacked, members won't assist and won't follow
|
||||
LeaderAggro = 0x00000001, // The member aggroes if the leader aggroes
|
||||
MemberAggro = 0x00000002, // The leader aggroes if the member aggroes
|
||||
Follow = 0x00000004, // The member will follow the leader
|
||||
None = 0, // No creature group behavior
|
||||
MembersAssistLeader = 0x01, // The member aggroes if the leader aggroes
|
||||
LeaderAssistsMember = 0x02, // The leader aggroes if the member aggroes
|
||||
MembersAssistMember = (MembersAssistLeader | LeaderAssistsMember), // every member will assist if any member is attacked
|
||||
IdleInFormation = 0x200, // The member will follow the leader when pathing idly
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,6 +178,14 @@ namespace Game.Entities
|
||||
if (groupAI == 0)
|
||||
return;
|
||||
|
||||
if (member == m_leader)
|
||||
{
|
||||
if (!groupAI.HasAnyFlag(GroupAIFlags.MembersAssistLeader))
|
||||
return;
|
||||
}
|
||||
else if (!groupAI.HasAnyFlag(GroupAIFlags.LeaderAssistsMember))
|
||||
return;
|
||||
|
||||
foreach (var pair in m_members)
|
||||
{
|
||||
if (m_leader) // avoid crash if leader was killed and reset.
|
||||
@@ -195,7 +203,7 @@ namespace Game.Entities
|
||||
if (other.GetVictim())
|
||||
continue;
|
||||
|
||||
if (((other != m_leader && groupAI.HasAnyFlag(GroupAIFlags.LeaderAggro)) || (other == m_leader && groupAI.HasAnyFlag(GroupAIFlags.MemberAggro))) && other.IsValidAttackTarget(target))
|
||||
if (((other != m_leader && groupAI.HasAnyFlag(GroupAIFlags.MembersAssistLeader)) || (other == m_leader && groupAI.HasAnyFlag(GroupAIFlags.LeaderAssistsMember))) && other.IsValidAttackTarget(target))
|
||||
other.GetAI().AttackStart(target);
|
||||
}
|
||||
}
|
||||
@@ -228,8 +236,7 @@ namespace Game.Entities
|
||||
foreach (var pair in m_members)
|
||||
{
|
||||
Creature member = pair.Key;
|
||||
GroupAIFlags groupAI = (GroupAIFlags)FormationMgr.CreatureGroupMap[member.GetSpawnId()].groupAI;
|
||||
if (member == m_leader || !member.IsAlive() || member.GetVictim() || !groupAI.HasAnyFlag(GroupAIFlags.Follow))
|
||||
if (member == m_leader || !member.IsAlive() || member.GetVictim() || !pair.Value.groupAI.HasAnyFlag((uint)GroupAIFlags.IdleInFormation))
|
||||
continue;
|
||||
|
||||
if (pair.Value.point_1 != 0)
|
||||
|
||||
Reference in New Issue
Block a user