示例#1
0
        /// <summary>
        /// Tries to make the stabled pet the ActivePet
        /// </summary>
        /// <param name="stabledPermanentPet">The stabled pet to make Active.</param>
        /// <returns>True if the stabled was made Active.</returns>
        public void DeStablePet(PermanentPetRecord stabledPermanentPet)
        {
            m_StabledPetRecords.Remove(stabledPermanentPet);
            var pet = SpawnPet(stabledPermanentPet);

            pet.PermanentPetRecord.StabledSince = null;
        }
示例#2
0
        /// <summary>
        /// Tries to swap the ActivePet for a Stabled one.
        /// </summary>
        /// <param name="stabledPermanentPet">The stabled pet to swap out.</param>
        /// <returns>True if the Stabled Pet was swapped.</returns>
        public bool TrySwapStabledPet(PermanentPetRecord stabledPermanentPet)
        {
            if (StabledPetRecords.Count >= (StableSlotCount + 1))
            {
                return(false);
            }

            var pet = m_activePet;

            if (pet == null)
            {
                return(false);
            }

            var record = pet.PetRecord as PermanentPetRecord;

            if (record == null)
            {
                return(false);
            }

            // Always set the stabled flag before changing the ActivePet
            // or the pet will be deleted!
            record.IsStabled = true;
            DeStablePet(stabledPermanentPet);
            return(true);
        }
示例#3
0
        static bool DeleteCharAccessories(uint charId)
        {
            try
            {
                SpellRecord.DeleteAll("OwnerId = " + charId);
                AuraRecord.DeleteAll("OwnerId = " + charId);
                ItemRecord.DeleteAll("OwnerId = " + charId);
                SkillRecord.DeleteAll("OwnerId = " + charId);
                SpecProfile.DeleteAll("CharacterId = " + charId);
                ReputationRecord.DeleteAll("OwnerId = " + charId);
                QuestRecord.DeleteAll("OwnerId = " + charId);
                SummonedPetRecord.DeleteAll("OwnerLowId = " + charId);
                PermanentPetRecord.DeleteAll("OwnerLowId = " + charId);

                MailMgr.ReturnValueMailFor(charId);
                MailMessage.DeleteAll("ReceiverId = " + charId);

                RelationMgr.Instance.RemoveRelations(charId);
                InstanceMgr.RemoveLog(charId);
                GroupMgr.Instance.RemoveOfflineCharacter(charId);
                AchievementRecord.DeleteAll("CharacterId = " + charId);
                AchievementProgressRecord.DeleteAll("CharacterId = " + charId);

                return(true);
            }
            catch (Exception ex)
            {
                LogUtil.ErrorException(ex, "Failed to delete character with Id: " + charId);

                return(false);
            }
        }
示例#4
0
        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;
                }
            }
        }
示例#5
0
        private static void ReadButton(NPC pet, RealmPacketIn packet)
        {
            uint               num                = packet.ReadUInt32();
            PetActionEntry     petActionEntry     = packet.ReadUInt32();
            PermanentPetRecord permanentPetRecord = pet.PermanentPetRecord;

            if (num > permanentPetRecord.ActionButtons.Length)
            {
                return;
            }
            permanentPetRecord.ActionButtons[num] = petActionEntry;
        }