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:
@@ -57,6 +57,7 @@ namespace Framework.Constants
|
|||||||
public const int SpellBattlePetTraining = 125610;
|
public const int SpellBattlePetTraining = 125610;
|
||||||
public const int SpellReviveBattlePets = 125439;
|
public const int SpellReviveBattlePets = 125439;
|
||||||
public const int SpellSummonBattlePet = 118301;
|
public const int SpellSummonBattlePet = 118301;
|
||||||
|
public const int MaxBattlePetLevel = 25;
|
||||||
public static TimeSpan ReviveBattlePetsCooldown = TimeSpan.FromSeconds(180);
|
public static TimeSpan ReviveBattlePetsCooldown = TimeSpan.FromSeconds(180);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -591,6 +591,42 @@ namespace Game.BattlePets
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
public void HealBattlePetsPct(byte pct)
|
public void HealBattlePetsPct(byte pct)
|
||||||
{
|
{
|
||||||
// TODO: After each Pet Battle, any injured companion will automatically
|
// TODO: After each Pet Battle, any injured companion will automatically
|
||||||
|
|||||||
@@ -5259,6 +5259,67 @@ namespace Game.Spells
|
|||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5083,6 +5083,36 @@ namespace Game.Spells
|
|||||||
player.GetSession().GetBattlePetMgr().UnlockSlot(BattlePetSlots.Slot0);
|
player.GetSession().GetBattlePetMgr().UnlockSlot(BattlePetSlots.Slot0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[SpellEffectHandler(SpellEffectName.ChangeBattlepetQuality)]
|
||||||
|
void EffectChangeBattlePetQuality()
|
||||||
|
{
|
||||||
|
if (effectHandleMode != SpellEffectHandleMode.HitTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Player playerCaster = m_caster.ToPlayer();
|
||||||
|
if (playerCaster == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (unitTarget == null || !unitTarget.IsCreature())
|
||||||
|
return;
|
||||||
|
|
||||||
|
var quality = BattlePetBreedQuality.Poor;
|
||||||
|
switch (damage)
|
||||||
|
{
|
||||||
|
case 85:
|
||||||
|
quality = BattlePetBreedQuality.Rare;
|
||||||
|
break;
|
||||||
|
case 75:
|
||||||
|
quality = BattlePetBreedQuality.Uncommon;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Ignore Epic Battle-Stones
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
playerCaster.GetSession().GetBattlePetMgr().ChangeBattlePetQuality(unitTarget.GetBattlePetCompanionGUID(), quality);
|
||||||
|
}
|
||||||
|
|
||||||
[SpellEffectHandler(SpellEffectName.LaunchQuestChoice)]
|
[SpellEffectHandler(SpellEffectName.LaunchQuestChoice)]
|
||||||
void EffectLaunchQuestChoice()
|
void EffectLaunchQuestChoice()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user