mantis 8908: use the prim idea of running animations, (by name or by key) on llStopObjectAnimation(), ignoring the prim inventory (unlike sl?)

This commit is contained in:
UbitUmarov
2021-07-15 22:05:04 +01:00
parent cf0b1b1840
commit 2408ce790a
2 changed files with 38 additions and 5 deletions

View File

@@ -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<UUID, string> 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;

View File

@@ -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()