public void MemberAttackStart(Creature member, Unit target) { GroupAIFlags groupAI = (GroupAIFlags)FormationMgr.CreatureGroupMap[member.GetSpawnId()].groupAI; 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. { Log.outDebug(LogFilter.Unit, "GROUP ATTACK: group instance id {0} calls member instid {1}", m_leader.GetInstanceId(), member.GetInstanceId()); } Creature other = pair.Key; // Skip self if (other == member) { continue; } if (!other.IsAlive()) { continue; } if (other.GetVictim()) { continue; } if (((other != m_leader && groupAI.HasAnyFlag(GroupAIFlags.MembersAssistLeader)) || (other == m_leader && groupAI.HasAnyFlag(GroupAIFlags.LeaderAssistsMember))) && other.IsValidAttackTarget(target)) { other.GetAI().AttackStart(target); } } }
public void MemberEngagingTarget(Creature member, Unit target) { GroupAIFlags groupAI = (GroupAIFlags)FormationMgr.CreatureGroupMap[member.GetSpawnId()].groupAI; 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) { Creature other = pair.Key; // Skip self if (other == member) { continue; } if (!other.IsAlive()) { continue; } if (((other != m_leader && groupAI.HasAnyFlag(GroupAIFlags.MembersAssistLeader)) || (other == m_leader && groupAI.HasAnyFlag(GroupAIFlags.LeaderAssistsMember))) && other.IsValidAttackTarget(target)) { other.EngageWithTarget(target); } } }