Core/Trainers: Implemented learning battle pets from trainers

Port From (https://github.com/TrinityCore/TrinityCore/commit/b02f382ed78b784d547c68cdbbb681148708d7d0)
This commit is contained in:
hondacrx
2021-11-29 17:14:38 -05:00
parent 56f1c3d984
commit ecc807f36f
+35 -6
View File
@@ -1,8 +1,9 @@
using System;
using System.Collections.Generic;
using Framework.Constants;
using Framework.Constants;
using Game.BattlePets;
using Game.Networking.Packets;
using Game.Spells;
using System;
using System.Collections.Generic;
namespace Game.Entities
{
@@ -67,6 +68,19 @@ namespace Game.Entities
return;
}
bool sendSpellVisual = true;
var speciesEntry = Global.SpellMgr.GetBattlePetSpecies(trainerSpell.SpellId);
if (speciesEntry != null)
{
if (player.GetSession().GetBattlePetMgr().HasMaxPetCount(speciesEntry, player.GetGUID()))
{
// Don't send any error to client (intended)
return;
}
sendSpellVisual = false;
}
float reputationDiscount = player.GetReputationPriceDiscount(npc);
long moneyCost = (long)(trainerSpell.MoneyCost * reputationDiscount);
if (!player.HasEnoughMoney(moneyCost))
@@ -77,14 +91,29 @@ namespace Game.Entities
player.ModifyMoney(-moneyCost);
npc.SendPlaySpellVisualKit(179, 0, 0); // 53 SpellCastDirected
player.SendPlaySpellVisualKit(362, 1, 0); // 113 EmoteSalute
if (sendSpellVisual)
{
npc.SendPlaySpellVisualKit(179, 0, 0); // 53 SpellCastDirected
player.SendPlaySpellVisualKit(362, 1, 0); // 113 EmoteSalute
}
// learn explicitly or cast explicitly
if (trainerSpell.IsCastable())
player.CastSpell(player, trainerSpell.SpellId, true);
else
player.LearnSpell(trainerSpell.SpellId, false);
{
bool dependent = false;
if (speciesEntry != null)
{
player.GetSession().GetBattlePetMgr().AddPet(speciesEntry.Id, BattlePetMgr.SelectPetDisplay(speciesEntry), BattlePetMgr.RollPetBreed(speciesEntry.Id), BattlePetMgr.GetDefaultPetQuality(speciesEntry.Id));
// If the spell summons a battle pet, we fake that it has been learned and the battle pet is added
// marking as dependent prevents saving the spell to database (intended)
dependent = true;
}
player.LearnSpell(trainerSpell.SpellId, dependent);
}
}
TrainerSpell GetSpell(uint spellId)