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)]