public Creature DoSummonFlyer(uint entry, WorldObject obj, float flightZ, float radius = 5.0f, uint despawnTime = 30000, TempSummonType summonType = TempSummonType.CorpseTimedDespawn) { Position pos = obj.GetRandomNearPosition(radius); pos.posZ += flightZ; return(me.SummonCreature(entry, pos, summonType, despawnTime)); }
public Creature DoSummon(uint entry, Position pos, uint despawnTime = 30000, TempSummonType summonType = TempSummonType.CorpseTimedDespawn) { return(me.SummonCreature(entry, pos, summonType, despawnTime)); }
public void SetTempSummonType(TempSummonType type) { m_type = type; }
public TempSummon SummonPassenger(uint entry, Position pos, TempSummonType summonType, SummonPropertiesRecord properties = null, uint duration = 0, Unit summoner = null, uint spellId = 0, uint vehId = 0) { Map map = GetMap(); if (map == null) { return(null); } UnitTypeMask mask = UnitTypeMask.Summon; if (properties != null) { switch (properties.Control) { case SummonCategory.Pet: mask = UnitTypeMask.Guardian; break; case SummonCategory.Puppet: mask = UnitTypeMask.Puppet; break; case SummonCategory.Vehicle: mask = UnitTypeMask.Minion; break; case SummonCategory.Wild: case SummonCategory.Ally: case SummonCategory.Unk: { switch (properties.Title) { case SummonTitle.Minion: case SummonTitle.Guardian: case SummonTitle.Runeblade: mask = UnitTypeMask.Guardian; break; case SummonTitle.Totem: case SummonTitle.LightWell: mask = UnitTypeMask.Totem; break; case SummonTitle.Vehicle: case SummonTitle.Mount: mask = UnitTypeMask.Summon; break; case SummonTitle.Companion: mask = UnitTypeMask.Minion; break; default: if (properties.GetFlags().HasFlag(SummonPropertiesFlags.JoinSummonerSpawnGroup)) // Mirror Image, Summon Gargoyle { mask = UnitTypeMask.Guardian; } break; } break; } default: return(null); } } TempSummon summon = null; switch (mask) { case UnitTypeMask.Summon: summon = new TempSummon(properties, summoner, false); break; case UnitTypeMask.Guardian: summon = new Guardian(properties, summoner, false); break; case UnitTypeMask.Puppet: summon = new Puppet(properties, summoner); break; case UnitTypeMask.Totem: summon = new Totem(properties, summoner); break; case UnitTypeMask.Minion: summon = new Minion(properties, summoner, false); break; } float x, y, z, o; pos.GetPosition(out x, out y, out z, out o); CalculatePassengerPosition(ref x, ref y, ref z, ref o); if (!summon.Create(map.GenerateLowGuid(HighGuid.Creature), map, entry, new Position(x, y, z, o), null, vehId)) { return(null); } WorldObject phaseShiftOwner = this; if (summoner != null && !(properties != null && properties.GetFlags().HasFlag(SummonPropertiesFlags.IgnoreSummonerPhase))) { phaseShiftOwner = summoner; } PhasingHandler.InheritPhaseShift(summon, phaseShiftOwner); summon.SetCreatedBySpell(spellId); summon.SetTransport(this); summon.m_movementInfo.transport.guid = GetGUID(); summon.m_movementInfo.transport.pos.Relocate(pos); summon.Relocate(x, y, z, o); summon.SetHomePosition(x, y, z, o); summon.SetTransportHomePosition(pos); // @HACK - transport models are not added to map's dynamic LoS calculations // because the current GameObjectModel cannot be moved without recreating summon.AddUnitState(UnitState.IgnorePathfinding); summon.InitStats(duration); if (!map.AddToMap(summon)) { return(null); } _staticPassengers.Add(summon); summon.InitSummon(); summon.SetTempSummonType(summonType); return(summon); }
//Spawns a creature relative to me public Creature DoSpawnCreature(uint entry, float offsetX, float offsetY, float offsetZ, float angle, TempSummonType type, uint despawntime) { return(me.SummonCreature(entry, me.GetPositionX() + offsetX, me.GetPositionY() + offsetY, me.GetPositionZ() + offsetZ, angle, type, despawntime)); }
public TempSummon SummonPassenger(uint entry, Position pos, TempSummonType summonType, SummonPropertiesRecord properties = null, uint duration = 0, Unit summoner = null, uint spellId = 0, uint vehId = 0) { Map map = GetMap(); if (map == null) { return(null); } UnitTypeMask mask = UnitTypeMask.Summon; if (properties != null) { switch (properties.Category) { case SummonCategory.Pet: mask = UnitTypeMask.Guardian; break; case SummonCategory.Puppet: mask = UnitTypeMask.Puppet; break; case SummonCategory.Vehicle: mask = UnitTypeMask.Minion; break; case SummonCategory.Wild: case SummonCategory.Ally: case SummonCategory.Unk: { switch (properties.Type) { case SummonType.Minion: case SummonType.Guardian: case SummonType.Guardian2: mask = UnitTypeMask.Guardian; break; case SummonType.Totem: case SummonType.LightWell: mask = UnitTypeMask.Totem; break; case SummonType.Vehicle: case SummonType.Vehicle2: mask = UnitTypeMask.Summon; break; case SummonType.Minipet: mask = UnitTypeMask.Minion; break; default: if (properties.Flags.HasAnyFlag <uint>(512)) // Mirror Image, Summon Gargoyle { mask = UnitTypeMask.Guardian; } break; } break; } default: return(null); } } List <uint> phases = new List <uint>(); if (summoner) { phases = summoner.GetPhases(); } else { phases = GetPhases(); // If there was no summoner, try to use the transport phases } TempSummon summon = null; switch (mask) { case UnitTypeMask.Summon: summon = new TempSummon(properties, summoner, false); break; case UnitTypeMask.Guardian: summon = new Guardian(properties, summoner, false); break; case UnitTypeMask.Puppet: summon = new Puppet(properties, summoner); break; case UnitTypeMask.Totem: summon = new Totem(properties, summoner); break; case UnitTypeMask.Minion: summon = new Minion(properties, summoner, false); break; } float x, y, z, o; pos.GetPosition(out x, out y, out z, out o); CalculatePassengerPosition(ref x, ref y, ref z, ref o); if (!summon.Create(map.GenerateLowGuid(HighGuid.Creature), map, entry, x, y, z, o, null, vehId)) { return(null); } foreach (var phase in phases) { summon.SetInPhase(phase, false, true); } summon.SetUInt32Value(UnitFields.CreatedBySpell, spellId); summon.SetTransport(this); summon.m_movementInfo.transport.guid = GetGUID(); summon.m_movementInfo.transport.pos.Relocate(pos); summon.Relocate(x, y, z, o); summon.SetHomePosition(x, y, z, o); summon.SetTransportHomePosition(pos); // @HACK - transport models are not added to map's dynamic LoS calculations // because the current GameObjectModel cannot be moved without recreating summon.AddUnitState(UnitState.IgnorePathfinding); summon.InitStats(duration); if (!map.AddToMap(summon)) { return(null); } _staticPassengers.Add(summon); summon.InitSummon(); summon.SetTempSummonType(summonType); return(summon); }