diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 0ea04a636a..53c71aa474 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -5770,6 +5770,43 @@ namespace OpenSim.Region.Framework.Scenes return false; } + public bool RemoveAnimation(string anim) + { + if (ParentGroup == null || ParentGroup.IsDeleted || ParentGroup.inTransit || string.IsNullOrWhiteSpace(anim)) + return false; + + lock (animsLock) + { + if (Animations == null || Animations.Count == 0) + return false; + + if (!UUID.TryParse(anim, out UUID animId)) + { + if (AnimationsNames == null || AnimationsNames.Count == 0) + return false; + + foreach (KeyValuePair kvp in AnimationsNames) + { + if (anim.Equals(kvp.Value, StringComparison.InvariantCultureIgnoreCase)) + { + animId = kvp.Key; + break; + } + } + } + + if (Animations.ContainsKey(animId)) + { + Animations.Remove(animId); + if (AnimationsNames != null) + AnimationsNames.Remove(animId); + ScheduleUpdate(PrimUpdateFlags.Animations); + return true; + } + } + return false; + } + public int ClearObjectAnimations() { int ret = 0; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 0c0ca40c25..9de2c8ca78 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -4192,11 +4192,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llStopObjectAnimation(string anim) { - UUID animID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, anim, AssetType.Animation); - if (animID == UUID.Zero) - animID = DefaultAvatarAnimations.GetDefaultAnimation(anim); - if (animID != UUID.Zero) - m_host.RemoveAnimation(animID); + m_host.RemoveAnimation(anim); } public LSL_List llGetObjectAnimationNames()