From ae652fd03bcde55db30fb109fec87697c77007ac Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 10 Mar 2022 09:50:07 -0500 Subject: [PATCH] Core/Pets: Fixed crash happening when current pet is forcibly removed while being temporarily unsummoned (like on a mount) Port From (https://github.com/TrinityCore/TrinityCore/commit/688d1d9533bc42dfd5684f30b8e1c2deff2795c4) --- Source/Game/Entities/Player/Player.cs | 17 ++++++++++++++++- Source/Game/Spells/SpellEffects.cs | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 38c238e8e..3d0501568 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -4834,8 +4834,23 @@ namespace Game.Entities m_temporaryUnsummonedPetNumber = 0; } - if (!pet || pet.GetOwnerGUID() != GetGUID()) + if (pet == null) + { + if (mode == PetSaveMode.NotInSlot && m_petStable.CurrentPet != null) + { + // Handle removing pet while it is in "temporarily unsummoned" state, for example on mount + PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_CHAR_PET_SLOT_BY_ID); + stmt.AddValue(0, (byte)PetSaveMode.NotInSlot); + stmt.AddValue(1, GetGUID().GetCounter()); + stmt.AddValue(2, m_petStable.CurrentPet.PetNumber); + DB.Characters.Execute(stmt); + + m_petStable.UnslottedPets.Add(m_petStable.CurrentPet); + m_petStable.CurrentPet = null; + } + return; + } pet.CombatStop(); diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 0c3b08b4a..38d06c2b2 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -3351,7 +3351,7 @@ namespace Game.Spells Pet pet = unitTarget.ToPet(); ExecuteLogEffectUnsummonObject(effectInfo.Effect, pet); - pet.GetOwner().RemovePet(pet, PetSaveMode.NotInSlot); + pet.Remove(PetSaveMode.NotInSlot); } [SpellEffectHandler(SpellEffectName.SummonObjectSlot1)]