From 5376d0a97bb367c354d96b0bd7a78a2ae6225280 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Tue, 9 Sep 2014 03:31:04 +0200
Subject: Also check standard anim names
---
.../Shared/Api/Implementation/LSL_Api.cs | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f4809a7..29e526d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -13510,11 +13510,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (presence == null)
return;
- UUID animID = ScriptUtils.GetAssetIdFromItemName(m_host, anim, (int)AssetType.Animation);
- if (animID == UUID.Zero)
+ UUID animID;
+ if (animState == anim)
{
- llShout(ScriptBaseClass.DEBUG_CHANNEL, "Animation not found");
- return;
+ animID = UUID.Zero;
+ }
+ else if (MovementAnimationsForLSL.ContainsKey(anim))
+ {
+ animID = DefaultAvatarAnimations.AnimsUUID[MovementAnimationsForLSL[anim]];
+ }
+ else
+ {
+ animID = ScriptUtils.GetAssetIdFromItemName(m_host, anim, (int)AssetType.Animation);
+ if (animID == UUID.Zero)
+ {
+ llShout(ScriptBaseClass.DEBUG_CHANNEL, "Animation not found");
+ return;
+ }
}
presence.SetAnimationOverride(state, animID);
--
cgit v1.1
From 18023169e79584cd3ddb4f544f9d485edc9e1b85 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Tue, 9 Sep 2014 04:12:10 +0200
Subject: Actually do the overriding
---
.../Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 8 +++++++-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 7 +++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index fdadd32..3cb8f59 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -196,7 +196,13 @@ namespace OpenSim.Region.Framework.Scenes.Animation
// "[SCENE PRESENCE ANIMATOR]: Setting movement animation {0} for {1}",
// anim, m_scenePresence.Name);
- if (m_animations.TrySetDefaultAnimation(
+ UUID overridenAnim = m_scenePresence.Overrides.GetOverriddenAnimation(anim);
+ if (overridenAnim != UUID.Zero)
+ {
+ m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
+ ret = true;
+ }
+ else if (m_animations.TrySetDefaultAnimation(
anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID))
{
// m_log.DebugFormat(
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4d5f747..8f6b41b 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -239,6 +239,11 @@ namespace OpenSim.Region.Framework.Scenes
///
public ScenePresenceAnimator Animator { get; private set; }
+ ///
+ /// Server Side Animation Override
+ ///
+ public MovementAnimationOverrides Overrides { get; private set; }
+
///
/// Attachments recorded on this avatar.
///
@@ -967,6 +972,7 @@ namespace OpenSim.Region.Framework.Scenes
IsLoggingIn = false;
m_sendCoarseLocationsMethod = SendCoarseLocationsDefault;
Animator = new ScenePresenceAnimator(this);
+ Overrides = new MovementAnimationOverrides();
PresenceType = type;
DrawDistance = world.DefaultDrawDistance;
RegionHandle = world.RegionInfo.RegionHandle;
@@ -6007,6 +6013,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SetAnimationOverride(string animState, UUID animID)
{
+ Overrides.SetOverride(animState, animID);
}
}
}
--
cgit v1.1
From d2324b64c719f429e11b3946936341343d70d750 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Tue, 9 Sep 2014 04:12:58 +0200
Subject: Add missing file
---
.../Scenes/Animation/MovementAnimationOverrides.cs | 76 ++++++++++++++++++++++
1 file changed, 76 insertions(+)
create mode 100644 OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs
diff --git a/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs b/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs
new file mode 100644
index 0000000..04dccc8
--- /dev/null
+++ b/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Xml;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Threading;
+using System.Timers;
+using Timer = System.Timers.Timer;
+using OpenMetaverse;
+using log4net;
+using Nini.Config;
+using OpenSim.Framework;
+using OpenSim.Framework.Client;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes.Animation;
+using OpenSim.Region.Framework.Scenes.Types;
+using OpenSim.Region.Physics.Manager;
+using GridRegion = OpenSim.Services.Interfaces.GridRegion;
+using OpenSim.Services.Interfaces;
+using TeleportFlags = OpenSim.Framework.Constants.TeleportFlags;
+
+namespace OpenSim.Region.Framework.Scenes
+{
+ public class MovementAnimationOverrides
+ {
+ private Dictionary m_overrides = new Dictionary();
+ public void SetOverride(string state, UUID animID)
+ {
+ if (animID == UUID.Zero)
+ {
+ m_overrides.Remove(state);
+ return;
+ }
+
+ lock (m_overrides)
+ m_overrides[state] = animID;
+ }
+
+ public UUID GetOverriddenAnimation(string state)
+ {
+ lock (m_overrides)
+ {
+ if (m_overrides.ContainsKey(state))
+ return m_overrides[state];
+ }
+
+ return UUID.Zero;
+ }
+ }
+}
--
cgit v1.1
From aa84ad369caf922534e85b5d2da12d716d6696f6 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Tue, 9 Sep 2014 04:35:08 +0200
Subject: Add some forgotten calls
---
OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index 3cb8f59..9fd5e64 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -200,6 +200,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation
if (overridenAnim != UUID.Zero)
{
m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
+ m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION});
+ SendAnimPack();
ret = true;
}
else if (m_animations.TrySetDefaultAnimation(
--
cgit v1.1
From 347c5b3070f7ce6ecc2a617e09fd02e4616061ba Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Tue, 9 Sep 2014 05:20:53 +0200
Subject: Add perms check
---
.../Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs | 5 +++++
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 3 +++
2 files changed, 8 insertions(+)
diff --git a/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs b/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs
index 04dccc8..f77d29a 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/MovementAnimationOverrides.cs
@@ -49,6 +49,9 @@ namespace OpenSim.Region.Framework.Scenes
{
public class MovementAnimationOverrides
{
+ private static readonly ILog m_log =
+ LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
private Dictionary m_overrides = new Dictionary();
public void SetOverride(string state, UUID animID)
{
@@ -58,6 +61,8 @@ namespace OpenSim.Region.Framework.Scenes
return;
}
+ m_log.DebugFormat("Setting override for {0} to {1}", state, animID);
+
lock (m_overrides)
m_overrides[state] = animID;
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 29e526d..1536959 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -13497,7 +13497,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
if (m_item.PermsGranter == UUID.Zero)
+ {
+ llShout(ScriptBaseClass.DEBUG_CHANNEL, "No permission to override animations");
return;
+ }
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS) == 0)
{
--
cgit v1.1