Core/Pets: Pet management refactoring

Port From (https://github.com/TrinityCore/TrinityCore/commit/ca92686b44cc8c53a8991bf02d6e8534797fc115)
This commit is contained in:
hondacrx
2022-03-10 09:39:55 -05:00
parent 9d5dd66215
commit 718302fa18
14 changed files with 549 additions and 378 deletions
+29
View File
@@ -5217,6 +5217,35 @@ namespace Game.Spells
if (!unitCaster.GetCharmedGUID().IsEmpty())
return SpellCastResult.AlreadyHaveCharm;
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)
{
playerCaster.SendTameFailure(PetTameResult.NoPetAvailable);
return SpellCastResult.DontReport;
}
if (info.Item1.Type == PetType.Hunter && info.Item1.Health == 0)
{
playerCaster.SendTameFailure(PetTameResult.Dead);
return SpellCastResult.DontReport;
}
CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(info.Item1.CreatureId);
if (creatureInfo == null || !creatureInfo.IsTameable(playerCaster.CanTameExoticPets()))
{
// if problem in exotic pet
if (creatureInfo != null && creatureInfo.IsTameable(true))
playerCaster.SendTameFailure(PetTameResult.CantControlExotic);
else
playerCaster.SendTameFailure(PetTameResult.NoPetAvailable);
return SpellCastResult.DontReport;
}
}
break;
}
case SpellEffectName.SummonPlayer:
+2 -2
View File
@@ -2293,14 +2293,14 @@ namespace Game.Spells
}
if (owner.IsTypeId(TypeId.Player))
owner.ToPlayer().RemovePet(OldSummon, (OldSummon.GetPetType() == PetType.Hunter ? PetSaveMode.AsDeleted : PetSaveMode.NotInSlot), false);
owner.ToPlayer().RemovePet(OldSummon, PetSaveMode.NotInSlot, false);
else
return;
}
float x, y, z;
owner.GetClosePoint(out x, out y, out z, owner.GetCombatReach());
Pet pet = owner.SummonPet(petentry, x, y, z, owner.Orientation, PetType.Summon, 0, true);
Pet pet = owner.SummonPet(petentry, x, y, z, owner.Orientation, PetType.Summon, 0);
if (!pet)
return;