コード例 #1
0
        public void ChangeBattlePetQuality(ObjectGuid guid, BattlePetBreedQuality quality)
        {
            if (!HasJournalLock())
            {
                return;
            }

            BattlePet pet = GetPet(guid);

            if (pet == null)
            {
                return;
            }

            if (quality > BattlePetBreedQuality.Rare)
            {
                return;
            }

            var battlePetSpecies = CliDB.BattlePetSpeciesStorage.LookupByKey(pet.PacketInfo.Species);

            if (battlePetSpecies != null)
            {
                if (battlePetSpecies.GetFlags().HasFlag(BattlePetSpeciesFlags.CantBattle))
                {
                    return;
                }
            }

            byte qualityValue = (byte)quality;

            if (pet.PacketInfo.Quality >= qualityValue)
            {
                return;
            }

            pet.PacketInfo.Quality = qualityValue;
            pet.CalculateStats();
            pet.PacketInfo.Health = pet.PacketInfo.MaxHealth;

            if (pet.SaveInfo != BattlePetSaveInfo.New)
            {
                pet.SaveInfo = BattlePetSaveInfo.Changed;
            }

            List <BattlePet> updates = new();

            updates.Add(pet);
            SendUpdates(updates, false);

            // UF::PlayerData::CurrentBattlePetBreedQuality isn't updated (Intended)
            // _owner.GetPlayer().SetCurrentBattlePetBreedQuality(qualityValue);
        }
コード例 #2
0
        public void AddPet(uint species, uint display, ushort breed, BattlePetBreedQuality quality, ushort level = 1)
        {
            BattlePetSpeciesRecord battlePetSpecies = CliDB.BattlePetSpeciesStorage.LookupByKey(species);

            if (battlePetSpecies == null) // should never happen
            {
                return;
            }

            if (!battlePetSpecies.GetFlags().HasFlag(BattlePetSpeciesFlags.WellKnown)) // Not learnable
            {
                return;
            }

            BattlePet pet = new();

            pet.PacketInfo.Guid       = ObjectGuid.Create(HighGuid.BattlePet, Global.ObjectMgr.GetGenerator(HighGuid.BattlePet).Generate());
            pet.PacketInfo.Species    = species;
            pet.PacketInfo.CreatureID = battlePetSpecies.CreatureID;
            pet.PacketInfo.DisplayID  = display;
            pet.PacketInfo.Level      = level;
            pet.PacketInfo.Exp        = 0;
            pet.PacketInfo.Flags      = 0;
            pet.PacketInfo.Breed      = breed;
            pet.PacketInfo.Quality    = (byte)quality;
            pet.PacketInfo.Name       = "";
            pet.CalculateStats();
            pet.PacketInfo.Health = pet.PacketInfo.MaxHealth;

            Player player = _owner.GetPlayer();

            if (battlePetSpecies.GetFlags().HasFlag(BattlePetSpeciesFlags.NotAccountWide))
            {
                pet.PacketInfo.OwnerInfo.Value      = new();
                pet.PacketInfo.OwnerInfo.Value.Guid = player.GetGUID();
                pet.PacketInfo.OwnerInfo.Value.PlayerVirtualRealm = Global.WorldMgr.GetVirtualRealmAddress();
                pet.PacketInfo.OwnerInfo.Value.PlayerNativeRealm  = Global.WorldMgr.GetVirtualRealmAddress();
            }

            pet.SaveInfo = BattlePetSaveInfo.New;

            _pets[pet.PacketInfo.Guid.GetCounter()] = pet;

            List <BattlePet> updates = new();

            updates.Add(pet);
            SendUpdates(updates, true);

            player.UpdateCriteria(CriteriaType.UniquePetsOwned);
            player.UpdateCriteria(CriteriaType.LearnedNewPet, species);
        }
コード例 #3
0
        static void LoadDefaultPetQualities()
        {
            SQLResult result = DB.World.Query("SELECT speciesId, quality FROM battle_pet_quality");

            if (result.IsEmpty())
            {
                Log.outInfo(LogFilter.ServerLoading, "Loaded 0 battle pet qualities. DB table `battle_pet_quality` is empty.");
                return;
            }

            do
            {
                uint speciesId = result.Read <uint>(0);
                BattlePetBreedQuality quality = (BattlePetBreedQuality)result.Read <byte>(1);

                var battlePetSpecies = CliDB.BattlePetSpeciesStorage.LookupByKey(speciesId);
                if (battlePetSpecies == null)
                {
                    Log.outError(LogFilter.Sql, $"Non-existing BattlePetSpecies.db2 entry {speciesId} was referenced in `battle_pet_quality` by row ({speciesId}, {quality}).");
                    continue;
                }

                if (quality >= BattlePetBreedQuality.Max)
                {
                    Log.outError(LogFilter.Sql, $"BattlePetSpecies.db2 entry {speciesId} was referenced in `battle_pet_quality` with non-existing quality {quality}).");
                    continue;
                }

                if (battlePetSpecies.GetFlags().HasFlag(BattlePetSpeciesFlags.WellKnown) && quality > BattlePetBreedQuality.Rare)
                {
                    Log.outError(LogFilter.Sql, $"Learnable BattlePetSpecies.db2 entry {speciesId} was referenced in `battle_pet_quality` with invalid quality {quality}. Maximum allowed quality is BattlePetBreedQuality::Rare.");
                    continue;
                }

                _defaultQualityPerSpecies[speciesId] = quality;
            } while (result.NextRow());

            Log.outInfo(LogFilter.ServerLoading, "Loaded {0} battle pet qualities.", _defaultQualityPerSpecies.Count);
        }