Core/Pets: Updated pet summoning for latest client version (5 Call Pet spells and stable size 200)

Port From (https://github.com/TrinityCore/TrinityCore/commit/950db60435e7e513633ff5b22ad7f0ed8b1147e4)
This commit is contained in:
hondacrx
2022-03-10 12:02:05 -05:00
parent a77e6865b2
commit c486b2a846
14 changed files with 448 additions and 218 deletions
+38 -6
View File
@@ -5148,13 +5148,20 @@ namespace Game.Spells
}
case SpellEffectName.ResurrectPet:
{
if (unitCaster == null)
Player playerCaster = m_caster.ToPlayer();
if (playerCaster == null || playerCaster.GetPetStable() == null)
return SpellCastResult.BadTargets;
Creature pet = unitCaster.GetGuardianPet();
Pet pet = playerCaster.GetPet();
if (pet != null && pet.IsAlive())
return SpellCastResult.AlreadyHaveSummon;
PetStable petStable = playerCaster.GetPetStable();
var deadPetInfo = petStable.ActivePets.FirstOrDefault(petInfo => petInfo?.Health == 0);
if (deadPetInfo == null)
return SpellCastResult.BadTargets;
break;
}
// This is generic summon effect
@@ -5221,17 +5228,27 @@ namespace Game.Spells
Player playerCaster = unitCaster.ToPlayer();
if (playerCaster != null && playerCaster.GetPetStable() != null)
{
var info = Pet.GetLoadPetInfo(playerCaster.GetPetStable(), (uint)spellEffectInfo.MiscValue, 0, false);
if (info.Item1 != null)
PetSaveMode? petSlot = null;
if (spellEffectInfo.MiscValue == 0)
{
if (info.Item1.Type == PetType.Hunter)
petSlot = (PetSaveMode)spellEffectInfo.CalcValue();
// No pet can be summoned if any pet is dead
foreach (var activePet in playerCaster.GetPetStable().ActivePets)
{
if (info.Item1.Health == 0)
if (activePet?.Health == 0)
{
playerCaster.SendTameFailure(PetTameResult.Dead);
return SpellCastResult.DontReport;
}
}
}
var info = Pet.GetLoadPetInfo(playerCaster.GetPetStable(), (uint)spellEffectInfo.MiscValue, 0, petSlot);
if (info.Item1 != null)
{
if (info.Item1.Type == PetType.Hunter)
{
CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(info.Item1.CreatureId);
if (creatureInfo == null || !creatureInfo.IsTameable(playerCaster.CanTameExoticPets()))
{
@@ -5253,6 +5270,21 @@ namespace Game.Spells
}
break;
}
case SpellEffectName.DismissPet:
{
Player playerCaster = m_caster.ToPlayer();
if (playerCaster == null)
return SpellCastResult.BadTargets;
Pet pet = playerCaster.GetPet();
if (pet == null)
return SpellCastResult.NoPet;
if (!pet.IsAlive())
return SpellCastResult.TargetsDead;
break;
}
case SpellEffectName.SummonPlayer:
{
if (!m_caster.IsTypeId(TypeId.Player))