From 9e0329f1dc9c5853773c9b40336f98254c734141 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Sun, 15 Mar 2009 19:45:42 +0000 Subject: [PATCH] Fixes Mantis #3294. Thank you kindly, Godfrey, for a patch that: Attached is a patch which provides osAvatarPlayAnimation() the ability to also trigger animations contained within the same prim as the script, as llStartAnimation() does. (It also modifies osAvatarStopAnimation(), otherwise the script wouldn't be able to stop animations it had started.) --- .../Shared/Api/Implementation/OSSL_Api.cs | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 6b3afe0ab8..f4be2670b5 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -593,7 +593,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (World.Entities.ContainsKey((UUID)avatar) && World.Entities[avatarID] is ScenePresence) { ScenePresence target = (ScenePresence)World.Entities[avatarID]; - target.AddAnimation(animation, m_host.UUID); + if (target != null) + { + UUID animID=UUID.Zero; + lock (m_host.TaskInventory) + { + foreach (KeyValuePair inv in m_host.TaskInventory) + { + if (inv.Value.Name == animation) + { + if (inv.Value.Type == (int)AssetType.Animation) + animID = inv.Value.AssetID; + continue; + } + } + } + if (animID == UUID.Zero) + target.AddAnimation(animation, m_host.UUID); + else + target.AddAnimation(animID, m_host.UUID); + } } } @@ -607,7 +626,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (World.Entities.ContainsKey(avatarID) && World.Entities[avatarID] is ScenePresence) { ScenePresence target = (ScenePresence)World.Entities[avatarID]; - target.RemoveAnimation(animation); + if (target != null) + { + UUID animID=UUID.Zero; + lock (m_host.TaskInventory) + { + foreach (KeyValuePair inv in m_host.TaskInventory) + { + if (inv.Value.Name == animation) + { + if (inv.Value.Type == (int)AssetType.Animation) + animID = inv.Value.AssetID; + continue; + } + } + } + if (animID == UUID.Zero) + target.RemoveAnimation(animation); + else + target.RemoveAnimation(animID); + } } }