Cleanup and fix CreatureGroup

This commit is contained in:
hondacrx
2017-07-10 11:20:34 -04:00
parent 9a33ac4319
commit c0cfdb66df
2 changed files with 15 additions and 7 deletions
+5 -4
View File
@@ -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
}
}
+10 -3
View File
@@ -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)