Exemple #1
0
        public static void AddCreatureToGroup(uint groupId, Creature member)
        {
            Map map = member.GetMap();

            if (!map)
            {
                return;
            }

            var creatureGroup = map.CreatureGroupHolder.LookupByKey(groupId);

            //Add member to an existing group
            if (creatureGroup != null)
            {
                Log.outDebug(LogFilter.Unit, "Group found: {0}, inserting creature GUID: {1}, Group InstanceID {2}", groupId, member.GetGUID().ToString(), member.GetInstanceId());
                creatureGroup.AddMember(member);
            }
            //Create new group
            else
            {
                Log.outDebug(LogFilter.Unit, "Group not found: {0}. Creating new group.", groupId);
                CreatureGroup group = new CreatureGroup(groupId);
                map.CreatureGroupHolder[groupId] = group;
                group.AddMember(member);
            }
        }
Exemple #2
0
        public void Reward()
        {
            // 3. Reward killer (and group, if necessary).
            if (_group)
            {
                // 3.1. If killer is in group, reward group.
                _RewardGroup();
            }
            else
            {
                // 3.2. Reward single killer (not group case).
                // 3.2.1. Initialize initial XP amount based on killer's level.
                _InitXP(_killer);
                // To avoid unnecessary calculations and calls,
                // proceed only if XP is not ZERO or player is not on Battleground
                // (Battlegroundrewards only XP, that's why).
                if (!_isBattleground || _xp != 0)
                {
                    // 3.2.2. Reward killer.
                    _RewardPlayer(_killer, false);
                }
            }

            // 5. Credit instance encounter.
            // 6. Update guild achievements.
            // 7. Credit scenario criterias
            Creature victim = _victim.ToCreature();

            if (victim != null)
            {
                if (victim.IsDungeonBoss())
                {
                    InstanceScript instance = _victim.GetInstanceScript();
                    if (instance != null)
                    {
                        instance.UpdateEncounterStateForKilledCreature(_victim.GetEntry(), _victim);
                    }
                }

                uint guildId = victim.GetMap().GetOwnerGuildId();
                var  guild   = Global.GuildMgr.GetGuildById(guildId);
                if (guild != null)
                {
                    guild.UpdateCriteria(CriteriaTypes.KillCreature, victim.GetEntry(), 1, 0, victim, _killer);
                }

                Scenario scenario = victim.GetScenario();
                if (scenario != null)
                {
                    scenario.UpdateCriteria(CriteriaTypes.KillCreature, victim.GetEntry(), 1, 0, victim, _killer);
                }
            }
        }
Exemple #3
0
        public static void RemoveCreatureFromGroup(CreatureGroup group, Creature member)
        {
            Log.outDebug(LogFilter.Unit, "Deleting member GUID: {0} from group {1}", group.GetId(), member.GetSpawnId());
            group.RemoveMember(member);

            if (group.isEmpty())
            {
                Map map = member.GetMap();
                if (!map)
                {
                    return;
                }

                Log.outDebug(LogFilter.Unit, "Deleting group with InstanceID {0}", member.GetInstanceId());
                map.CreatureGroupHolder.Remove(group.GetId());
            }
        }