Core/Spells: Implemented spell effect 204 (SPELL_EFFECT_CHANGE_BATTLEPET_QUALITY)

Port From (https://github.com/TrinityCore/TrinityCore/commit/c4fee8c5cf85aeddc45aad18d7a944efa59022bd)
This commit is contained in:
hondacrx
2022-01-05 20:38:57 -05:00
parent 13f73adf73
commit 5e0fd36ada
4 changed files with 128 additions and 0 deletions
+61
View File
@@ -5259,6 +5259,67 @@ namespace Game.Spells
}
break;
}
case SpellEffectName.ChangeBattlepetQuality:
case SpellEffectName.GrantBattlepetExperience:
{
Player playerCaster = m_caster.ToPlayer();
if (playerCaster == null || !m_targets.GetUnitTarget() || !m_targets.GetUnitTarget().IsCreature())
return SpellCastResult.BadTargets;
var battlePetMgr = playerCaster.GetSession().GetBattlePetMgr();
if (!battlePetMgr.HasJournalLock())
return SpellCastResult.CantDoThatRightNow;
Creature creature = m_targets.GetUnitTarget().ToCreature();
if (creature != null)
{
if (playerCaster.GetSummonedBattlePetGUID().IsEmpty() || creature.GetBattlePetCompanionGUID().IsEmpty())
return SpellCastResult.NoPet;
if (playerCaster.GetSummonedBattlePetGUID() != creature.GetBattlePetCompanionGUID())
return SpellCastResult.BadTargets;
var battlePet = battlePetMgr.GetPet(creature.GetBattlePetCompanionGUID());
if (battlePet != null)
{
var battlePetSpecies = CliDB.BattlePetSpeciesStorage.LookupByKey(battlePet.PacketInfo.Species);
if (battlePetSpecies != null)
{
uint battlePetType = (uint)spellEffectInfo.MiscValue;
if (battlePetType != 0)
if ((battlePetType & (1 << battlePetSpecies.PetTypeEnum)) == 0)
return SpellCastResult.WrongBattlePetType;
if (spellEffectInfo.Effect == SpellEffectName.ChangeBattlepetQuality)
{
BattlePetBreedQuality quality = BattlePetBreedQuality.Poor;
switch (spellEffectInfo.BasePoints)
{
case 85:
quality = BattlePetBreedQuality.Rare;
break;
case 75:
quality = BattlePetBreedQuality.Uncommon;
break;
default:
// Ignore Epic Battle-Stones
break;
}
if (battlePet.PacketInfo.Quality >= (byte)quality)
return SpellCastResult.CantUpgradeBattlePet;
}
if (spellEffectInfo.Effect == SpellEffectName.GrantBattlepetExperience)
if (battlePet.PacketInfo.Level >= SharedConst.MaxBattlePetLevel)
return SpellCastResult.GrantPetLevelFail;
if (battlePetSpecies.GetFlags().HasFlag(BattlePetSpeciesFlags.CantBattle))
return SpellCastResult.BadTargets;
}
}
}
break;
}
default:
break;
}