diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncAvatar.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncAvatar.cs index 5e3ade2a9b..aea228353e 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncAvatar.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncAvatar.cs @@ -494,6 +494,23 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule public virtual void SendAnimations(UUID[] animations, int[] seqs, UUID sourceAgentId, UUID[] objectIDs) { m_log.Debug("[REGION SYNC AVATAR] SendAnimations"); + if (m_clientView != null) + { + OSDMap data = new OSDMap(); + data["agentID"] = OSD.FromUUID(m_agentID); + OSDArray animatA = new OSDArray(); + foreach (UUID uu in animations) animatA.Add(OSD.FromUUID(uu)); + data["animations"] = animatA; + OSDArray seqsA = new OSDArray(); + foreach (int ss in seqs) seqsA.Add(OSD.FromInteger(ss)); + data["seqs"] = seqsA; + data["sourceAgentID"] = OSD.FromUUID(sourceAgentId); + OSDArray obIDA = new OSDArray(); + foreach (UUID ii in objectIDs) obIDA.Add(OSD.FromUUID(ii)); + data["objectIDs"] = obIDA; + RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.SendAnimations, OSDParser.SerializeJsonString(data)); + m_clientView.Send(rsm); + } } public virtual void SendChatMessage(string message, byte type, Vector3 fromPos, string fromName, diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs index a9331b95dd..c9211f13fb 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClient.cs @@ -708,6 +708,39 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule String.Format("Agent {0} not found in the scene for SitResponse.", agentID)); } + return; + } + case RegionSyncMessage.MsgType.SendAnimations: + { + OSDMap data = DeserializeMessage(msg); + if (data == null) + { + RegionSyncMessage.HandleError(LogHeader, msg, "Could not deserialize JSON data."); + return; + } + + UUID agentID = data["agentID"].AsUUID(); + + OSDArray animatA = (OSDArray)data["animations"]; + UUID[] animIDs = new UUID[animatA.Count]; + for (int ii = 0; ii < animatA.Count; ii++) animIDs[ii] = animatA[ii].AsUUID(); + + OSDArray seqsA = (OSDArray)data["seqs"]; + int[] seqs = new int[seqsA.Count]; + for (int jj = 0; jj < seqsA.Count; jj++) seqs[jj] = seqsA[jj].AsInteger(); + + UUID sourceAgentID = data["sourceAgentID"].AsUUID(); + + OSDArray obIDA = (OSDArray)data["objectIDs"]; + UUID[] objectIDs = new UUID[obIDA.Count]; + for (int kk = 0; kk < obIDA.Count; kk++) objectIDs[kk] = obIDA[kk].AsUUID(); + + ScenePresence sp; + m_scene.TryGetScenePresence(agentID, out sp); + if (sp != null) + { + sp.ControllingClient.SendAnimations(animIDs, seqs, sourceAgentID, objectIDs); + } return; } case RegionSyncMessage.MsgType.BalanceClientLoad: diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs index 8d7f9fdc4a..eba0445dc9 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncClientView.cs @@ -179,7 +179,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule // *** This is the main receive loop thread for each connected client private void ReceiveLoop() { - m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient); + m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient); m_scene.EventManager.OnChatFromWorld += new EventManager.ChatFromWorldEvent(EventManager_OnChatFromClient); diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncMessage.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncMessage.cs index 2266deb912..6d16e010ba 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncMessage.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncMessage.cs @@ -68,6 +68,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule BalanceClientLoad, // Tells CM a client load target and a place to teleport the extras ChatFromSim, SitResponse, + SendAnimations, // BIDIR EchoRequest, EchoResponse, diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 4a86d93299..a8de2da8e9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -259,7 +259,7 @@ namespace OpenSim.Region.Framework.Scenes [XmlIgnore] public bool IgnoreUndoUpdate = false; - private PrimFlags LocalFlags; + public PrimFlags LocalFlags; [XmlIgnore] private float m_damage = -1.0f; private byte[] m_TextureAnimation;