public override void JustDied(Unit killer) { Talk(TextIds.SayDeath); List <uint> livingAddEntries = new List <uint>(); // Full House achievement foreach (var guid in summons) { Unit unit = Global.ObjAccessor.GetUnit(me, guid); if (unit) { if (unit.IsAlive() && unit.GetEntry() != CreatureIds.VengefulShade) { livingAddEntries.Add(unit.GetEntry()); } } } if (livingAddEntries.Count >= 5) { instance.DoUpdateCriteria(CriteriaTypes.BeSpellTarget, SpellIds.FullHouse, 0, me); } Creature darnavan = ObjectAccessor.GetCreature(me, _darnavanGUID); if (darnavan) { if (darnavan.IsAlive()) { darnavan.SetFaction(35); darnavan.CombatStop(true); darnavan.GetMotionMaster().MoveIdle(); darnavan.SetReactState(ReactStates.Passive); darnavan.m_Events.AddEvent(new DaranavanMoveEvent(darnavan), darnavan.m_Events.CalculateTime(10000)); darnavan.GetAI().Talk(TextIds.SayDarnavanRescued); Player owner = killer.GetCharmerOrOwnerPlayerOrPlayerItself(); if (owner) { Group group = owner.GetGroup(); if (group) { for (GroupReference groupRefe = group.GetFirstMember(); groupRefe != null; groupRefe = groupRefe.next()) { Player member = groupRefe.GetSource(); if (member) { member.KilledMonsterCredit(NPC_DARNAVAN_CREDIT, ObjectGuid.Empty); } } } else { owner.KilledMonsterCredit(NPC_DARNAVAN_CREDIT, ObjectGuid.Empty); } } } } _JustDied(); }
void HandleSetDungeonDifficulty(SetDungeonDifficulty setDungeonDifficulty) { DifficultyRecord difficultyEntry = CliDB.DifficultyStorage.LookupByKey(setDungeonDifficulty.DifficultyID); if (difficultyEntry == null) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent an invalid instance mode {1}!", GetPlayer().GetGUID().ToString(), setDungeonDifficulty.DifficultyID); return; } if (difficultyEntry.InstanceType != MapTypes.Instance) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent an non-dungeon instance mode {1}!", GetPlayer().GetGUID().ToString(), difficultyEntry.Id); return; } if (!difficultyEntry.Flags.HasAnyFlag(DifficultyFlags.CanSelect)) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent unselectable instance mode {1}!", GetPlayer().GetGUID().ToString(), difficultyEntry.Id); return; } Difficulty difficultyID = (Difficulty)difficultyEntry.Id; if (difficultyID == GetPlayer().GetDungeonDifficultyID()) { return; } // cannot reset while in an instance Map map = GetPlayer().GetMap(); if (map && map.IsDungeon()) { Log.outDebug(LogFilter.Network, "WorldSession:HandleSetDungeonDifficulty: player (Name: {0}, {1}) tried to reset the instance while player is inside!", GetPlayer().GetName(), GetPlayer().GetGUID().ToString()); return; } Group group = GetPlayer().GetGroup(); if (group) { if (group.IsLeader(GetPlayer().GetGUID())) { for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.next()) { Player groupGuy = refe.GetSource(); if (!groupGuy) { continue; } if (!groupGuy.IsInMap(groupGuy)) { return; } if (groupGuy.GetMap().IsNonRaidDungeon()) { Log.outDebug(LogFilter.Network, "WorldSession:HandleSetDungeonDifficulty: {0} tried to reset the instance while group member (Name: {1}, {2}) is inside!", GetPlayer().GetGUID().ToString(), groupGuy.GetName(), groupGuy.GetGUID().ToString()); return; } } // the difficulty is set even if the instances can't be reset //_player->SendDungeonDifficulty(true); group.ResetInstances(InstanceResetMethod.ChangeDifficulty, false, false, GetPlayer()); group.SetDungeonDifficultyID(difficultyID); } } else { GetPlayer().ResetInstances(InstanceResetMethod.ChangeDifficulty, false, false); GetPlayer().SetDungeonDifficultyID(difficultyID); GetPlayer().SendDungeonDifficulty(); } }
void HandleSetRaidDifficulty(SetRaidDifficulty setRaidDifficulty) { DifficultyRecord difficultyEntry = CliDB.DifficultyStorage.LookupByKey(setRaidDifficulty.DifficultyID); if (difficultyEntry == null) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent an invalid instance mode {1}!", GetPlayer().GetGUID().ToString(), setRaidDifficulty.DifficultyID); return; } if (difficultyEntry.InstanceType != MapTypes.Raid) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent an non-dungeon instance mode {1}!", GetPlayer().GetGUID().ToString(), difficultyEntry.Id); return; } if (!difficultyEntry.Flags.HasAnyFlag(DifficultyFlags.CanSelect)) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent unselectable instance mode {1}!", GetPlayer().GetGUID().ToString(), difficultyEntry.Id); return; } if (((int)(difficultyEntry.Flags & DifficultyFlags.Legacy) >> 5) != setRaidDifficulty.Legacy) { Log.outDebug(LogFilter.Network, "WorldSession.HandleSetDungeonDifficulty: {0} sent not matching legacy difficulty {1}!", GetPlayer().GetGUID().ToString(), difficultyEntry.Id); return; } Difficulty difficultyID = (Difficulty)difficultyEntry.Id; if (difficultyID == (setRaidDifficulty.Legacy != 0 ? GetPlayer().GetLegacyRaidDifficultyID() : GetPlayer().GetRaidDifficultyID())) { return; } // cannot reset while in an instance Map map = GetPlayer().GetMap(); if (map && map.IsDungeon()) { Log.outDebug(LogFilter.Network, "WorldSession:HandleSetRaidDifficulty: player (Name: {0}, {1} tried to reset the instance while inside!", GetPlayer().GetName(), GetPlayer().GetGUID().ToString()); return; } Group group = GetPlayer().GetGroup(); if (group) { if (group.IsLeader(GetPlayer().GetGUID())) { for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.Next()) { Player groupGuy = refe.GetSource(); if (!groupGuy) { continue; } if (!groupGuy.IsInMap(groupGuy)) { return; } if (groupGuy.GetMap().IsRaid()) { Log.outDebug(LogFilter.Network, "WorldSession:HandleSetRaidDifficulty: player {0} tried to reset the instance while inside!", GetPlayer().GetGUID().ToString()); return; } } // the difficulty is set even if the instances can't be reset group.ResetInstances(InstanceResetMethod.ChangeDifficulty, true, setRaidDifficulty.Legacy != 0, GetPlayer()); if (setRaidDifficulty.Legacy != 0) { group.SetLegacyRaidDifficultyID(difficultyID); } else { group.SetRaidDifficultyID(difficultyID); } } } else { GetPlayer().ResetInstances(InstanceResetMethod.ChangeDifficulty, true, setRaidDifficulty.Legacy != 0); if (setRaidDifficulty.Legacy != 0) { GetPlayer().SetLegacyRaidDifficultyID(difficultyID); } else { GetPlayer().SetRaidDifficultyID(difficultyID); } GetPlayer().SendRaidDifficulty(setRaidDifficulty.Legacy != 0); } }