Beispiel #1
0
        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);
                }
            }
        }
Beispiel #2
0
        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);
                }
            }
        }