private void LoadPets()
        {
            IPetRecord activePetRecord = null;

            // load info for summoned pets
            if (m_record.PetSummonedCount > 0)
            {
                var pets = SummonedPetRecord.LoadSummonedPetRecords(m_record.EntityLowId);
                foreach (var pet in pets)
                {
                    if (pet.IsActivePet)
                    {
                        activePetRecord = pet;
                    }
                    SummonedPetRecords.Add(pet);
                }
            }

            // load info for permanent pets
            if (m_record.PetCount > 0)
            {
                var pets = PermanentPetRecord.LoadPermanentPetRecords(m_record.EntityLowId);
                foreach (var pet in pets)
                {
                    if (pet.IsActivePet)
                    {
                        activePetRecord = pet;
                    }
                    StabledPetRecords.Add(pet);
                }
            }


            // load active pet
            if (m_record.PetEntryId != 0 && IsPetActive)
            {
                if (activePetRecord != null)
                {
                    var entry = activePetRecord.Entry;
                    if (entry == null)
                    {
                        log.Warn("{0} has invalid PetEntryId: {1} ({2})", this, m_record.PetEntryId, (uint)m_record.PetEntryId);

                        // put back for later (maybe NPCs were not loaded or loaded incorrectly):
                        AddPetRecord(activePetRecord);
                    }
                    else
                    {
                        SpawnActivePet(activePetRecord);
                    }
                }
                else
                {
                    // active Pet does not exist in DB
                    m_record.PetEntryId  = 0;
                    m_record.IsPetActive = false;
                }
            }
        }
        void SpawnActivePet(IPetRecord record)
        {
            //AddPostUpdateMessage(() =>
            AddMessage(() =>
            {
                var petSettings = m_record as IActivePetSettings;
                var pet         = SpawnPet(record, ref m_position, petSettings.PetDuration);

                pet.CreationSpellId = petSettings.PetSummonSpellId;
                pet.Health          = petSettings.PetHealth;
                pet.Power           = petSettings.PetPower;
            });
        }
 void AddPetRecord(IPetRecord record)
 {
     if (record is SummonedPetRecord)
     {
         SummonedPetRecords.Add((SummonedPetRecord)record);
     }
     else if (record is PermanentPetRecord)
     {
         StabledPetRecords.Add((PermanentPetRecord)record);
     }
     else
     {
         log.Warn("Unclassified PetRecord: " + record);
     }
 }
        public NPC SpawnPet(IPetRecord record, ref Vector3 position, int duration)
        {
            var pet = CreateMinion(record.Entry, duration);

            pet.PetRecord = record;
            pet.Position  = position;
            if (record.PetNumber != 0)
            {
                //pet.PetNumber = record.PetNumber;
                pet.EntityId = new EntityId(NPCMgr.GenerateUniqueLowId(), record.PetNumber, HighId.UnitPet);
            }

            InitializeMinion(pet);
            if (IsPetActive)
            {
                m_Map.AddObject(pet);
            }
            return(pet);
        }
 public NPC SpawnPet(IPetRecord record, int duration)
 {
     return(SpawnPet(record, ref m_position, duration));
 }
 public NPC SpawnPet(IPetRecord record)
 {
     return(SpawnPet(record, ref m_position, 0));
 }