static bool HandleModifyPhaseCommand(StringArguments args, CommandHandler handler) { if (args.Empty()) { return(false); } uint phaseId = args.NextUInt32(); uint visibleMapId = args.NextUInt32(); if (phaseId != 0 && !CliDB.PhaseStorage.ContainsKey(phaseId)) { handler.SendSysMessage(CypherStrings.PhaseNotfound); return(false); } Unit target = handler.GetSelectedUnit(); if (visibleMapId != 0) { MapRecord visibleMap = CliDB.MapStorage.LookupByKey(visibleMapId); if (visibleMap == null || visibleMap.ParentMapID != target.GetMapId()) { handler.SendSysMessage(CypherStrings.PhaseNotfound); return(false); } if (!target.GetPhaseShift().HasVisibleMapId(visibleMapId)) { PhasingHandler.AddVisibleMapId(target, visibleMapId); } else { PhasingHandler.RemoveVisibleMapId(target, visibleMapId); } } if (phaseId != 0) { if (!target.GetPhaseShift().HasPhase(phaseId)) { PhasingHandler.AddPhase(target, phaseId, true); } else { PhasingHandler.RemovePhase(target, phaseId, true); } } return(true); }
public override void SpellHitTarget(Unit target, SpellInfo spell) { if (spell.Id == SpellIds.Insanity) { // Not good target or too many players if (target.GetTypeId() != TypeId.Player || insanityHandled > 4) { return; } // First target - start channel visual and set self as unnattackable if (insanityHandled == 0) { // Channel visual DoCast(me, SpellIds.InsanityVisual, true); // Unattackable me.AddUnitFlag(UnitFlags.NotSelectable); me.SetControlled(true, UnitState.Stunned); } // phase the player target.CastSpell(target, SpellIds.InsanityTarget + insanityHandled, true); SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(SpellIds.InsanityTarget + insanityHandled, GetDifficulty()); if (spellInfo == null) { return; } // summon twisted party members for this target var players = me.GetMap().GetPlayers(); foreach (var player in players) { if (!player || !player.IsAlive()) { continue; } // Summon clone Unit summon = me.SummonCreature(AKCreatureIds.TwistedVisage, me.GetPositionX(), me.GetPositionY(), me.GetPositionZ(), me.GetOrientation(), TempSummonType.CorpseDespawn, 0); if (summon) { // clone player.CastSpell(summon, SpellIds.ClonePlayer, true); // phase the summon PhasingHandler.AddPhase(summon, (uint)spellInfo.GetEffect(0).MiscValueB, true); } } ++insanityHandled; } }
public override void Reset() { Initialize(); instance.SetBossState(DataTypes.HeraldVolazj, EncounterState.NotStarted); instance.DoStopCriteriaTimer(CriteriaTimedTypes.Event, Misc.AchievQuickDemiseStartEvent); // Visible for all players in insanity for (uint i = 173; i <= 177; ++i) { PhasingHandler.AddPhase(me, i, false); } PhasingHandler.AddPhase(me, 169, true); ResetPlayersPhase(); // Cleanup Summons.DespawnAll(); me.RemoveUnitFlag(UnitFlags.NotSelectable); me.SetControlled(false, UnitState.Stunned); }