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:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user