public InstanceSpawn RezInstanceSpawn()
        {
            InstanceSpawn newCreature = new InstanceSpawn(Spawn, InstanceGroupSpawnID, BossID, Instance);

            Region.AddObject(newCreature, Spawn.ZoneId);
            Destroy();
            return(newCreature);
        }
 private void ReturnToSpawn()
 {
     AI.Debugger?.SendClientMessage("[MR]: Retreating to the spawnpoint.");
     if (_unit.IsInstanceSpawn())
     {
         InstanceSpawn npc = (InstanceSpawn)_unit;
         npc.BuffInterface.RemoveAllBuffs();
         npc.ReceiveHeal(null, npc.MaxHealth);
         npc.SetPosition((ushort)npc.SpawnPoint.X, (ushort)npc.SpawnPoint.Y, (ushort)npc.SpawnPoint.Z, npc.SpawnHeading, npc.Spawn.ZoneId, true);
     }
     else
     {
         Creature npc = (Creature)_unit;
         npc.BuffInterface.RemoveAllBuffs();
         npc.ReceiveHeal(null, npc.MaxHealth);
         npc.SetPosition((ushort)npc.SpawnPoint.X, (ushort)npc.SpawnPoint.Y, (ushort)npc.SpawnPoint.Z, npc.SpawnHeading, npc.Spawn.ZoneId, true);
     }
 }
        public void RespawnInstanceGroup(uint GroupID, bool rezall = false)
        {
            lock (GroupsinCombat)
            {
                if (!GroupsinCombat.Contains(GroupID) || rezall)
                {
                    return;
                }
                GroupsinCombat.Remove(GroupID);

                List <InstanceSpawn> spawns;
                _Spawns.TryGetValue(GroupID, out spawns);
                for (int i = 0; i < spawns.Count; i++)
                {
                    if (spawns[i].IsDead)
                    {
                        InstanceSpawn IS = spawns[i].RezInstanceSpawn();
                        spawns[i] = (IS);
                    }
                }
                _Spawns[GroupID] = spawns;
            }
        }
        private void LoadSpawns()
        {
            List <Instance_Spawn> Obj;


            InstanceService._InstanceSpawns.TryGetValue(ZoneID, out Obj);

            List <uint> deadbossids = new List <uint>();

            if (Lockout != null)
            {
                for (int i = 0; i < Lockout.Bosseskilled.Split(';').Count(); i++)
                {
                    deadbossids.Add(UInt16.Parse(Lockout.Bosseskilled.Split(';')[i].Split(':')[1]));
                }
            }

            if (Obj == null)
            {
                return;
            }

            foreach (var obj in Obj)
            {
                if (deadbossids.Contains(obj.ConnectedBossID))
                {
                    continue;
                }


                if (obj.Realm == 0 || obj.Realm == this.Realm)
                {
                    Creature_spawn spawn = new Creature_spawn();
                    spawn.Guid = (uint)CreatureService.GenerateCreatureSpawnGUID();
                    spawn.BuildFromProto(CreatureService.GetCreatureProto((uint)obj.Entry));
                    if (spawn.Proto == null)
                    {
                        Log.Error("Creature Proto not found", " " + obj.Entry);
                        continue;
                    }

                    spawn.WorldO  = (int)obj.WorldO;
                    spawn.WorldY  = obj.WorldY;
                    spawn.WorldZ  = obj.WorldZ;
                    spawn.WorldX  = obj.WorldX;
                    spawn.ZoneId  = obj.ZoneID;
                    spawn.Enabled = 1;


                    InstanceSpawn IS = new InstanceSpawn(spawn, obj.SpawnGroupID, obj.ConnectedBossID, this);

                    if (obj.SpawnGroupID > 0)
                    {
                        List <InstanceSpawn> spawns;
                        _Spawns.TryGetValue(obj.SpawnGroupID, out spawns);
                        if (spawns == null)
                        {
                            spawns = new List <InstanceSpawn>();
                        }
                        spawns.Add(IS);
                        _Spawns[obj.SpawnGroupID] = spawns;
                    }
                    Region.AddObject(IS, obj.ZoneID);
                }
            }
        }