void Apply(AuraEffect aurEff, AuraEffectHandleModes mode) { List <TempSummon> MinionList = new List <TempSummon>(); GetTarget().GetAllMinionsByEntry(MinionList, (uint)GetSpellInfo().GetEffect(0).MiscValue); // Get the last summoned RoF, save it and despawn older ones foreach (var creature in MinionList) { TempSummon summon = creature.ToTempSummon(); if (ringOfFrost && summon) { if (summon.GetTimer() > ringOfFrost.GetTimer()) { ringOfFrost.DespawnOrUnsummon(); ringOfFrost = summon; } else { summon.DespawnOrUnsummon(); } } else if (summon) { ringOfFrost = summon; } } }
void Apply(AuraEffect aurEff, AuraEffectHandleModes mode) { List <TempSummon> minions = new List <TempSummon>(); GetTarget().GetAllMinionsByEntry(minions, (uint)Global.SpellMgr.GetSpellInfo(SpellIds.RingOfFrostSummon, GetCastDifficulty()).GetEffect(0).MiscValue); // Get the last summoned RoF, save it and despawn older ones foreach (var summon in minions) { TempSummon ringOfFrost = GetRingOfFrostMinion(); if (ringOfFrost) { if (summon.GetTimer() > ringOfFrost.GetTimer()) { ringOfFrost.DespawnOrUnsummon(); _ringOfFrostGUID = summon.GetGUID(); } else { summon.DespawnOrUnsummon(); } } else { _ringOfFrostGUID = summon.GetGUID(); } } }
public void _DespawnAtEvade(TimeSpan delayToRespawn, Creature who = null) { if (delayToRespawn < TimeSpan.FromSeconds(2)) { Log.outError(LogFilter.Scripts, "_DespawnAtEvade called with delay of {0} seconds, defaulting to 2.", delayToRespawn); delayToRespawn = TimeSpan.FromSeconds(2); } if (!who) { who = me; } TempSummon whoSummon = who.ToTempSummon(); if (whoSummon) { Log.outWarn(LogFilter.ScriptsAi, "_DespawnAtEvade called on a temporary summon."); whoSummon.UnSummon(); return; } who.DespawnOrUnsummon(0, delayToRespawn); if (instance != null && who == me) { instance.SetBossState(_bossId, EncounterState.Fail); } }
void InitializeVisualStalker() { Aura aura = GetHitAura(); if (aura != null) { WorldLocation dest = GetExplTargetDest(); if (dest != null) { int duration = GetSpellInfo().CalcDuration(GetOriginalCaster()); TempSummon summon = GetCaster().GetMap().SummonCreature(CreatureIds.HealingRainInvisibleStalker, dest, null, (uint)duration, GetOriginalCaster()); if (summon == null) { return; } summon.CastSpell(summon, SpellIds.HealingRainVisual, true); var script = aura.GetScript <spell_sha_healing_rain_AuraScript>(); if (script != null) { script.SetVisualDummy(summon); } } } }
// helper for summoning wave mobs void Summon(uint entry, Position pos) { TempSummon summon = me.SummonCreature(entry, pos, TempSummonType.CorpseTimedDespawn, 10000); if (summon) { summon.CastSpell(summon, SpellIds.TeleportVisual); } }
void HandleEffectPeriodic(AuraEffect aurEff) { TempSummon ringOfFrost = GetRingOfFrostMinion(); if (ringOfFrost) { GetTarget().CastSpell(ringOfFrost.GetPosition(), SpellIds.RingOfFrostFreeze, new CastSpellExtraArgs(true)); } }
// helper for summoning wave mobs void Summon(uint entry, Position pos) { TempSummon summon = me.SummonCreature(entry, pos, TempSummonType.CorpseTimedDespawn, 10000); if (summon) { summon.GetAI().DoCast(summon, LadySpells.TELEPORT_VISUAL); } }
public override void JustDied(Unit killer) { TempSummon meSummon = me.ToTempSummon(); if (meSummon) { Unit summoner = meSummon.GetSummoner(); if (summoner) { summoner.RemoveAurasDueToSpell(SpellIds.WebWrapWrapped); } } }
public override void JustDied(Unit killer) { TempSummon summ = me.ToTempSummon(); if (summ) { Unit trapped = summ.GetSummoner(); if (trapped) { trapped.RemoveAurasDueToSpell(Spells.Impaled); } } me.DespawnOrUnsummon(); }
public override void EnterEvadeMode(EvadeReason why) { TempSummon meSummon = me.ToTempSummon(); if (meSummon) { Creature summoner = meSummon.GetSummonerCreatureBase(); if (summoner) { summoner.GetAI().DoAction(ActionIds.PetEvade); } else { me.DespawnOrUnsummon(); } return; } base.EnterEvadeMode(why); }
public override void EnterCombat(Unit who) { if (_isWatcher) { _isWatcher = false; TempSummon meSummon = me.ToTempSummon(); if (meSummon) { Creature summoner = meSummon.GetSummonerCreatureBase(); if (summoner) { summoner.GetAI().DoAction(ActionIds.WatcherEngaged); } } } if (me.HasReactState(ReactStates.Passive)) { List <Creature> others = new List <Creature>(); me.GetCreatureListWithEntryInGrid(others, 0, 40.0f); foreach (Creature other in others) { if (other.GetAI().GetData(Misc.DataPetGroup) == _petGroup) { other.SetReactState(ReactStates.Aggressive); other.GetAI().AttackStart(who); } } TempSummon meSummon = me.ToTempSummon(); if (meSummon) { Creature summoner = meSummon.GetSummonerCreatureBase(); if (summoner) { summoner.GetAI().DoAction(ActionIds.PetEngaged); } } } _EnterCombat(); base.EnterCombat(who); }
public void DoAddThreat(Unit victim, float threat) { uint redirectThreadPct = victim.GetRedirectThreatPercent(); Unit redirectTarget = victim.GetRedirectThreatTarget(); // If victim is personnal spawn, redirect all aggro to summoner TempSummon tempSummonVictim = victim.ToTempSummon(); if (tempSummonVictim) { if (tempSummonVictim.IsVisibleBySummonerOnly()) { // Personnal Spawns from same summoner can aggro each other if (!GetOwner().ToTempSummon() || !GetOwner().ToTempSummon().IsVisibleBySummonerOnly() || tempSummonVictim.GetSummonerGUID() != GetOwner().ToTempSummon().GetSummonerGUID()) { redirectThreadPct = 100; redirectTarget = tempSummonVictim.GetSummoner(); } } } // must check > 0.0f, otherwise dead loop if (threat > 0.0f && redirectThreadPct != 0) { if (redirectTarget != null) { float redirectThreat = MathFunctions.CalculatePct(threat, redirectThreadPct); threat -= redirectThreat; if (IsValidProcess(redirectTarget, GetOwner())) { AddThreat(redirectTarget, redirectThreat); } } } AddThreat(victim, threat); }
void ActivateCrystal() { // just to make things easier we'll get the gameobject from the map GameObject invoker = instance.GetGameObject(uiActivationCrystal[0]); if (!invoker) { return; } SpellInfo spellInfoLightning = Global.SpellMgr.GetSpellInfo(SPELL_ARCANE_LIGHTNING); if (spellInfoLightning == null) { return; } // the orb TempSummon trigger = invoker.SummonCreature(NPC_DEFENSE_SYSTEM, ArcaneSphere, TempSummonType.ManualDespawn, 0); if (!trigger) { return; } // visuals trigger.CastSpell(trigger, spellInfoLightning, true, 0, 0, trigger.GetGUID()); // Kill all mobs registered with SetData64(ADD_TRASH_MOB) foreach (var guid in trashMobs) { Creature creature = instance.GetCreature(guid); if (creature && creature.IsAlive()) { trigger.Kill(creature); } } }
public override bool OnUse(Player player, Item item, SpellCastTargets targets, ObjectGuid castId) { GameObject go = null; for (byte i = 0; i < ItemScriptConst.CaribouTraps.Length; ++i) { go = player.FindNearestGameObject(ItemScriptConst.CaribouTraps[i], 5.0f); if (go) { break; } } if (!go) { return(false); } if (go.FindNearestCreature(ItemScriptConst.NpcNesingwaryTrapper, 10.0f, true) || go.FindNearestCreature(ItemScriptConst.NpcNesingwaryTrapper, 10.0f, false) || go.FindNearestGameObject(ItemScriptConst.GoHighQualityFur, 2.0f)) { return(true); } float x, y, z; go.GetClosePoint(out x, out y, out z, go.GetObjectSize() / 3, 7.0f); go.SummonGameObject(ItemScriptConst.GoHighQualityFur, go, Quaternion.WAxis, 1); TempSummon summon = player.SummonCreature(ItemScriptConst.NpcNesingwaryTrapper, x, y, z, go.GetOrientation(), TempSummonType.DeadDespawn, 1000); if (summon) { summon.SetVisible(false); summon.SetReactState(ReactStates.Passive); summon.SetFlag(UnitFields.Flags, UnitFlags.ImmuneToPc); } return(false); }
public CypherStrings VisualizeBoundary(int duration, Unit owner = null, bool fill = false) { if (!owner) { return(0); } if (_boundary.Empty()) { return(CypherStrings.CreatureMovementNotBounded); } List <KeyValuePair <int, int> > Q = new List <KeyValuePair <int, int> >(); List <KeyValuePair <int, int> > alreadyChecked = new List <KeyValuePair <int, int> >(); List <KeyValuePair <int, int> > outOfBounds = new List <KeyValuePair <int, int> >(); Position startPosition = owner.GetPosition(); if (!CheckBoundary(startPosition)) // fall back to creature position { startPosition = me.GetPosition(); if (!CheckBoundary(startPosition)) { startPosition = me.GetHomePosition(); if (!CheckBoundary(startPosition)) // fall back to creature home position { return(CypherStrings.CreatureNoInteriorPointFound); } } } float spawnZ = startPosition.GetPositionZ() + SharedConst.BoundaryVisualizeSpawnHeight; bool boundsWarning = false; Q.Add(new KeyValuePair <int, int>(0, 0)); while (!Q.Empty()) { var front = Q.First(); bool hasOutOfBoundsNeighbor = false; foreach (var off in new List <KeyValuePair <int, int> >() { new KeyValuePair <int, int>(1, 0), new KeyValuePair <int, int>(0, 1), new KeyValuePair <int, int>(-1, 0), new KeyValuePair <int, int>(0, -1) }) { var next = new KeyValuePair <int, int>(front.Key + off.Key, front.Value + off.Value); if (next.Key > SharedConst.BoundaryVisualizeFailsafeLimit || next.Key < -SharedConst.BoundaryVisualizeFailsafeLimit || next.Value > SharedConst.BoundaryVisualizeFailsafeLimit || next.Value < -SharedConst.BoundaryVisualizeFailsafeLimit) { boundsWarning = true; continue; } if (!alreadyChecked.Contains(next)) // never check a coordinate twice { Position nextPos = new Position(startPosition.GetPositionX() + next.Key * SharedConst.BoundaryVisualizeStepSize, startPosition.GetPositionY() + next.Value * SharedConst.BoundaryVisualizeStepSize, startPosition.GetPositionZ()); if (CheckBoundary(nextPos)) { Q.Add(next); } else { outOfBounds.Add(next); hasOutOfBoundsNeighbor = true; } alreadyChecked.Add(next); } else { if (outOfBounds.Contains(next)) { hasOutOfBoundsNeighbor = true; } } } if (fill || hasOutOfBoundsNeighbor) { var pos = new Position(startPosition.GetPositionX() + front.Key * SharedConst.BoundaryVisualizeStepSize, startPosition.GetPositionY() + front.Value * SharedConst.BoundaryVisualizeStepSize, spawnZ); TempSummon point = owner.SummonCreature(SharedConst.BoundaryVisualizeCreature, pos, TempSummonType.TimedDespawn, (uint)(duration * Time.InMilliseconds)); if (point) { point.SetObjectScale(SharedConst.BoundaryVisualizeCreatureScale); point.AddUnitFlag(UnitFlags.ImmuneToPc | UnitFlags.Stunned | UnitFlags.ImmuneToNpc); if (!hasOutOfBoundsNeighbor) { point.AddUnitFlag(UnitFlags.NotSelectable); } } Q.Remove(front); } } return(boundsWarning ? CypherStrings.CreatureMovementMaybeUnbounded : 0); }
public void SetVisualDummy(TempSummon summon) { _visualDummy = summon.GetGUID(); summon.GetPosition(out _x, out _y, out _z); }