From 3ec8e8e40b39cdd1643618a9a416a6b17d6e8685 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sun, 27 Dec 2009 16:01:36 +0000 Subject: [PATCH 1/7] Fix the spelling :/ --- OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 096d5e1688..6a71540e49 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -4857,9 +4857,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP UserProfile.FirstLifeImage = Properties.FLImageID; UserProfile.Image = Properties.ImageID; UserProfile.ProfileUrl = Utils.BytesToString(Properties.ProfileURL); - Userprofile.Flags &= ~3; - Userprofile.Flags |= Properties.AllowPublish ? 1 : 0; - Userprofile.Flags |= Properties.MaturePublish ? 2 : 0; + UserProfile.Flags &= ~3; + UserProfile.Flags |= Properties.AllowPublish ? 1 : 0; + UserProfile.Flags |= Properties.MaturePublish ? 2 : 0; handlerUpdateAvatarProperties(this, UserProfile); } From bca2afdb3ca73b743dfdec9a9e672efbdca87243 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sun, 27 Dec 2009 16:07:13 +0000 Subject: [PATCH 2/7] One should not copy/paste so much :) --- OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 6a71540e49..f02c28bebd 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -4857,9 +4857,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP UserProfile.FirstLifeImage = Properties.FLImageID; UserProfile.Image = Properties.ImageID; UserProfile.ProfileUrl = Utils.BytesToString(Properties.ProfileURL); - UserProfile.Flags &= ~3; - UserProfile.Flags |= Properties.AllowPublish ? 1 : 0; - UserProfile.Flags |= Properties.MaturePublish ? 2 : 0; + UserProfile.UserFlags &= ~3; + UserProfile.UserFlags |= Properties.AllowPublish ? 1 : 0; + UserProfile.UserFlags |= Properties.MaturePublish ? 2 : 0; handlerUpdateAvatarProperties(this, UserProfile); } From 0b5cdc539c767b526f14cb7e7d97fd83bea14424 Mon Sep 17 00:00:00 2001 From: Melanie Date: Tue, 29 Dec 2009 18:35:06 +0000 Subject: [PATCH 3/7] Change teleports so the TeleportFlags are sent to the destination sim. It can now determine if a connection is from login, teleport or crossing. Needed for a meaningful banlines implementation --- OpenSim/Client/Linden/LLProxyLoginModule.cs | 2 +- .../Client/Linden/LLStandaloneLoginModule.cs | 2 +- .../MXP/PacketHandler/MXPPacketServer.cs | 2 +- .../Communications/Clients/RegionClient.cs | 5 +++-- .../InterGrid/OpenGridProtocolModule.cs | 2 +- .../Interregion/LocalInterregionComms.cs | 4 ++-- .../Interregion/RESTInterregionComms.cs | 17 ++++++++++------ .../Framework/Interfaces/IInterregionComms.cs | 2 +- .../Hypergrid/HGSceneCommunicationService.cs | 2 +- OpenSim/Region/Framework/Scenes/Scene.cs | 20 +++++++++++++++---- .../Scenes/SceneCommunicationService.cs | 4 ++-- .../Scenes/Tests/ScenePresenceTests.cs | 6 +++--- .../Tests/Common/Setup/SceneSetupHelpers.cs | 2 +- 13 files changed, 44 insertions(+), 26 deletions(-) diff --git a/OpenSim/Client/Linden/LLProxyLoginModule.cs b/OpenSim/Client/Linden/LLProxyLoginModule.cs index efae23495a..9075f15f43 100644 --- a/OpenSim/Client/Linden/LLProxyLoginModule.cs +++ b/OpenSim/Client/Linden/LLProxyLoginModule.cs @@ -268,7 +268,7 @@ namespace OpenSim.Client.Linden else { string reason; - if (scene.NewUserConnection(agentData, out reason)) + if (scene.NewUserConnection(agentData, (uint)TeleportFlags.ViaLogin, out reason)) { success = true; } diff --git a/OpenSim/Client/Linden/LLStandaloneLoginModule.cs b/OpenSim/Client/Linden/LLStandaloneLoginModule.cs index 8739ce5e52..8047f74c8e 100644 --- a/OpenSim/Client/Linden/LLStandaloneLoginModule.cs +++ b/OpenSim/Client/Linden/LLStandaloneLoginModule.cs @@ -199,7 +199,7 @@ namespace OpenSim.Client.Linden Scene scene; if (TryGetRegion(regionHandle, out scene)) { - return scene.NewUserConnection(agent, out reason); + return scene.NewUserConnection(agent, (uint)TeleportFlags.ViaLogin, out reason); } reason = "Region not found."; return false; diff --git a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs index 63381a403b..7d71f18d58 100644 --- a/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs +++ b/OpenSim/Client/MXP/PacketHandler/MXPPacketServer.cs @@ -609,7 +609,7 @@ namespace OpenSim.Client.MXP.PacketHandler agent.Appearance = new AvatarAppearance(); } - return scene.NewUserConnection(agent, out reason); + return scene.NewUserConnection(agent, 0, out reason); } public void PrintDebugInformation() diff --git a/OpenSim/Framework/Communications/Clients/RegionClient.cs b/OpenSim/Framework/Communications/Clients/RegionClient.cs index 297b0464ad..5ceaf39dcf 100644 --- a/OpenSim/Framework/Communications/Clients/RegionClient.cs +++ b/OpenSim/Framework/Communications/Clients/RegionClient.cs @@ -45,7 +45,7 @@ namespace OpenSim.Framework.Communications.Clients { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - public bool DoCreateChildAgentCall(GridRegion region, AgentCircuitData aCircuit, string authKey, out string reason) + public bool DoCreateChildAgentCall(GridRegion region, AgentCircuitData aCircuit, string authKey, uint teleportFlags, out string reason) { reason = String.Empty; @@ -83,7 +83,8 @@ namespace OpenSim.Framework.Communications.Clients } // Add the regionhandle of the destination region ulong regionHandle = GetRegionHandle(region.RegionHandle); - args["destination_handle"] = OSD.FromString(regionHandle.ToString()); + args["destination_handle"] = OSD.FromString(regionHandle.ToString()); + args["teleport_flags"] = OSD.FromString(teleportFlags.ToString()); string strBuffer = ""; byte[] buffer = new byte[1]; diff --git a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs index c727cec860..10a3232019 100644 --- a/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs +++ b/OpenSim/Region/CoreModules/InterGrid/OpenGridProtocolModule.cs @@ -557,7 +557,7 @@ namespace OpenSim.Region.CoreModules.InterGrid // Call 'new user' event handler string reason; - if (!homeScene.NewUserConnection(agentData, out reason)) + if (!homeScene.NewUserConnection(agentData, (uint)TeleportFlags.ViaLogin, out reason)) { responseMap["connect"] = OSD.FromBoolean(false); responseMap["message"] = OSD.FromString(String.Format("Connection refused: {0}", reason)); diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs index bdfe3b17d7..d68c683143 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/LocalInterregionComms.cs @@ -144,7 +144,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion * Agent-related communications */ - public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason) + public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, uint teleportFlags, out string reason) { foreach (Scene s in m_sceneList) @@ -152,7 +152,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion if (s.RegionInfo.RegionHandle == regionHandle) { // m_log.DebugFormat("[LOCAL COMMS]: Found region {0} to send SendCreateChildAgent", regionHandle); - return s.NewUserConnection(aCircuit, out reason); + return s.NewUserConnection(aCircuit, teleportFlags, out reason); } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs index 710e3ca5d9..44458d175f 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Interregion/RESTInterregionComms.cs @@ -157,10 +157,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion * Agent-related communications */ - public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason) + public bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, uint teleportFlags, out string reason) { // Try local first - if (m_localBackend.SendCreateChildAgent(regionHandle, aCircuit, out reason)) + if (m_localBackend.SendCreateChildAgent(regionHandle, aCircuit, teleportFlags, out reason)) return true; // else do the remote thing @@ -173,7 +173,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion { m_regionClient.SendUserInformation(regInfo, aCircuit); - return m_regionClient.DoCreateChildAgentCall(regInfo, aCircuit, "None", out reason); + return m_regionClient.DoCreateChildAgentCall(regInfo, aCircuit, "None", teleportFlags, out reason); } //else // m_log.Warn("[REST COMMS]: Region not found " + regionHandle); @@ -436,11 +436,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Interregion } OSDMap resp = new OSDMap(2); - string reason = String.Empty; - + string reason = String.Empty; + uint teleportFlags = 0; + if (args.ContainsKey("teleport_flags")) + { + teleportFlags = args["teleport_flags"].AsUInteger(); + } + // This is the meaning of POST agent m_regionClient.AdjustUserInformation(aCircuit); - bool result = m_localBackend.SendCreateChildAgent(regionhandle, aCircuit, out reason); + bool result = m_localBackend.SendCreateChildAgent(regionhandle, aCircuit, teleportFlags, out reason); resp["reason"] = OSD.FromString(reason); resp["success"] = OSD.FromBoolean(result); diff --git a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs index 8f4d3d54eb..2d6287f87d 100644 --- a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs +++ b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs @@ -37,7 +37,7 @@ namespace OpenSim.Region.Framework.Interfaces { #region Agents - bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, out string reason); + bool SendCreateChildAgent(ulong regionHandle, AgentCircuitData aCircuit, uint teleportFlags, out string reason); /// /// Full child agent update. diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGSceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGSceneCommunicationService.cs index 0f9c190265..416826c3be 100644 --- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGSceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGSceneCommunicationService.cs @@ -203,7 +203,7 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid string reason = String.Empty; //if (!m_commsProvider.InterRegion.InformRegionOfChildAgent(reg.RegionHandle, agentCircuit)) - if (!m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, agentCircuit, out reason)) + if (!m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, agentCircuit, teleportFlags, out reason)) { avatar.ControllingClient.SendTeleportFailed(String.Format("Destination is not accepting teleports: {0}", reason)); diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index f79eb5decb..0e1e2be434 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -3316,12 +3316,16 @@ namespace OpenSim.Region.Framework.Scenes /// Use NewUserConnection() directly if possible so the return type can refuse connections. /// At the moment nothing actually seems to use this event, /// as everything is switching to calling the NewUserConnection method directly. + /// + /// Now obsoleting this because it doesn't handle teleportFlags propertly + /// /// /// + [Obsolete("Please call NewUserConnection directly.")] public void HandleNewUserConnection(AgentCircuitData agent) { string reason; - NewUserConnection(agent, out reason); + NewUserConnection(agent, 0, out reason); } /// @@ -3334,8 +3338,16 @@ namespace OpenSim.Region.Framework.Scenes /// Outputs the reason for the false response on this string /// True if the region accepts this agent. False if it does not. False will /// also return a reason. - public bool NewUserConnection(AgentCircuitData agent, out string reason) + public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason) { + //Teleport flags: + // + // TeleportFlags.ViaGodlikeLure - Border Crossing + // TeleportFlags.ViaLogin - Login + // TeleportFlags.TeleportFlags.ViaLure - Teleport request sent by another user + // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport + + if (loginsdisabled) { reason = "Logins Disabled"; @@ -3343,9 +3355,9 @@ namespace OpenSim.Region.Framework.Scenes } // Don't disable this log message - it's too helpful m_log.InfoFormat( - "[CONNECTION BEGIN]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5})", + "[CONNECTION BEGIN]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6})", RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname, - agent.AgentID, agent.circuitcode); + agent.AgentID, agent.circuitcode, teleportFlags); reason = String.Empty; if (!AuthenticateUser(agent, out reason)) diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index e649139332..f49d072087 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs @@ -286,7 +286,7 @@ namespace OpenSim.Region.Framework.Scenes string reason = String.Empty; - bool regionAccepted = m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, a, out reason); + bool regionAccepted = m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, a, 0, out reason); if (regionAccepted && newAgent) { @@ -810,7 +810,7 @@ namespace OpenSim.Region.Framework.Scenes // Let's create an agent there if one doesn't exist yet. //if (!m_commsProvider.InterRegion.InformRegionOfChildAgent(reg.RegionHandle, agentCircuit)) - if (!m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, agentCircuit, out reason)) + if (!m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, agentCircuit, teleportFlags, out reason)) { avatar.ControllingClient.SendTeleportFailed(String.Format("Destination is not accepting teleports: {0}", reason)); diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs index f495022177..f00dd66157 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs @@ -117,7 +117,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests agent.child = true; string reason; - scene.NewUserConnection(agent, out reason); + scene.NewUserConnection(agent, (uint)TeleportFlags.ViaLogin, out reason); testclient = new TestClient(agent, scene); scene.AddNewClient(testclient); @@ -153,7 +153,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests if (acd1 == null) fixNullPresence(); - scene.NewUserConnection(acd1, out reason); + scene.NewUserConnection(acd1, 0, out reason); if (testclient == null) testclient = new TestClient(acd1, scene); scene.AddNewClient(testclient); @@ -242,7 +242,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests // Adding child agent to region 1001 string reason; - scene2.NewUserConnection(acd1, out reason); + scene2.NewUserConnection(acd1,0, out reason); scene2.AddNewClient(testclient); ScenePresence presence = scene.GetScenePresence(agent1); diff --git a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs index 8b18d07fb8..b13e8dd208 100644 --- a/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs +++ b/OpenSim/Tests/Common/Setup/SceneSetupHelpers.cs @@ -382,7 +382,7 @@ namespace OpenSim.Tests.Common.Setup // We emulate the proper login sequence here by doing things in three stages // Stage 1: simulate login by telling the scene to expect a new user connection - scene.NewUserConnection(agentData, out reason); + scene.NewUserConnection(agentData, (uint)TeleportFlags.ViaLogin, out reason); // Stage 2: add the new client as a child agent to the scene TestClient client = new TestClient(agentData, scene); From 917fad40da98dc0485b43e9af363d04708570e27 Mon Sep 17 00:00:00 2001 From: Melanie Date: Wed, 30 Dec 2009 00:36:16 +0000 Subject: [PATCH 4/7] Fix an omission in LSL that causes a viewer crash --- .../Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 2b6d9bd67c..6102504891 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -6260,6 +6260,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api LSLError("First parameter to llDialog needs to be a key"); return; } + if (buttons.Length < 1) + { + LSLError("No less than 1 button can be shown"); + return; + } if (buttons.Length > 12) { LSLError("No more than 12 buttons can be shown"); From 25544ac04ad20d8e2ebe9c95152935bd3c4a29df Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Tue, 29 Dec 2009 21:59:19 -0500 Subject: [PATCH 5/7] * Attempts to resolve the megaregion terrain edit rebound. * It does this by tweaking the throttles on child agent connection to a megaregion and multiplying the land throttle by 50. (various bit and byte magic ensue) * While, I doubt this will cause terrain crater sized potholes.. since it actually increases the bandwidth available for land in child regions when MegaRegions area active, more testing would be good. * This, in theory, also shouldn't cause missing objects in child regions.. because all objects are in the root region anyway. As I said, more testing would be good. --- .../RegionCombinerModule.cs | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs index 92f060b4cd..1a99c833f1 100644 --- a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs +++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs @@ -88,7 +88,89 @@ namespace OpenSim.Region.RegionCombinerModule public void RegionLoaded(Scene scene) { if (enabledYN) + { RegionLoadedDoWork(scene); + + scene.EventManager.OnNewPresence += NewPresence; + } + } + + private void NewPresence(ScenePresence presence) + { + if (presence.IsChildAgent) + { + byte[] throttleData; + + try + { + throttleData = presence.ControllingClient.GetThrottlesPacked(1); + } + catch (NotImplementedException) + { + return; + } + + if (throttleData == null) + return; + + if (throttleData.Length == 0) + return; + + if (throttleData.Length != 28) + return; + + byte[] adjData; + int pos = 0; + + if (!BitConverter.IsLittleEndian) + { + byte[] newData = new byte[7 * 4]; + Buffer.BlockCopy(throttleData, 0, newData, 0, 7 * 4); + + for (int i = 0; i < 7; i++) + Array.Reverse(newData, i * 4, 4); + + adjData = newData; + } + else + { + adjData = throttleData; + } + + // 0.125f converts from bits to bytes + int resend = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4; + int land = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4; + int wind = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4; + int cloud = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4; + int task = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4; + int texture = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); pos += 4; + int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); + // State is a subcategory of task that we allocate a percentage to + + + //int total = resend + land + wind + cloud + task + texture + asset; + + byte[] data = new byte[7 * 4]; + int ii = 0; + + Buffer.BlockCopy(Utils.FloatToBytes(resend), 0, data, ii, 4); ii += 4; + Buffer.BlockCopy(Utils.FloatToBytes(land * 50), 0, data, ii, 4); ii += 4; + Buffer.BlockCopy(Utils.FloatToBytes(wind), 0, data, ii, 4); ii += 4; + Buffer.BlockCopy(Utils.FloatToBytes(cloud), 0, data, ii, 4); ii += 4; + Buffer.BlockCopy(Utils.FloatToBytes(task), 0, data, ii, 4); ii += 4; + Buffer.BlockCopy(Utils.FloatToBytes(texture), 0, data, ii, 4); ii += 4; + Buffer.BlockCopy(Utils.FloatToBytes(asset), 0, data, ii, 4); + + try + { + presence.ControllingClient.SetChildAgentThrottle(data); + } + catch (NotImplementedException) + { + return; + } + + } } private void RegionLoadedDoWork(Scene scene) From 16a64c400b866d20ed80287f624fff89cc187145 Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Wed, 30 Dec 2009 15:01:14 -0500 Subject: [PATCH 6/7] * Makes forward and backward key reactions faster by responding to the NUDGE type movements. --- .../Scenes/Animation/ScenePresenceAnimator.cs | 3 +- .../Region/Framework/Scenes/ScenePresence.cs | 41 +++++++++++++++---- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index c314596a20..8b1d70558a 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -156,7 +156,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation Vector3 left = Vector3.Transform(Vector3.UnitY, rotMatrix); // Check control flags - bool heldForward = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_AT_POS; + bool heldForward = + (((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) || ((controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS)); bool heldBack = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG; bool heldLeft = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS; bool heldRight = (controlFlags & AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) == AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG; diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 289ba477ec..4c2de27308 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -169,7 +169,7 @@ namespace OpenSim.Region.Framework.Scenes protected RegionInfo m_regionInfo; protected ulong crossingFromRegion; - private readonly Vector3[] Dir_Vectors = new Vector3[6]; + private readonly Vector3[] Dir_Vectors = new Vector3[9]; // Position of agent's camera in world (region cordinates) protected Vector3 m_CameraCenter; @@ -233,6 +233,8 @@ namespace OpenSim.Region.Framework.Scenes DIR_CONTROL_FLAG_RIGHT = AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG, DIR_CONTROL_FLAG_UP = AgentManager.ControlFlags.AGENT_CONTROL_UP_POS, DIR_CONTROL_FLAG_DOWN = AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG, + DIR_CONTROL_FLAG_FORWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS, + DIR_CONTROL_FLAG_BACKWARD_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG, DIR_CONTROL_FLAG_DOWN_NUDGE = AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG } @@ -717,19 +719,23 @@ namespace OpenSim.Region.Framework.Scenes Dir_Vectors[3] = -Vector3.UnitY; //RIGHT Dir_Vectors[4] = Vector3.UnitZ; //UP Dir_Vectors[5] = -Vector3.UnitZ; //DOWN - Dir_Vectors[5] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge + Dir_Vectors[8] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge + Dir_Vectors[6] = Vector3.UnitX*2; //FORWARD + Dir_Vectors[7] = -Vector3.UnitX; //BACK } private Vector3[] GetWalkDirectionVectors() { - Vector3[] vector = new Vector3[6]; + Vector3[] vector = new Vector3[9]; vector[0] = new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z); //FORWARD vector[1] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK vector[2] = Vector3.UnitY; //LEFT vector[3] = -Vector3.UnitY; //RIGHT vector[4] = new Vector3(m_CameraAtAxis.Z, 0f, m_CameraUpAxis.Z); //UP vector[5] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN - vector[5] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_Nudge + vector[8] = new Vector3(-m_CameraAtAxis.Z, 0f, -m_CameraUpAxis.Z); //DOWN_Nudge + vector[6] = (new Vector3(m_CameraUpAxis.Z, 0f, -m_CameraAtAxis.Z) * 2); //FORWARD Nudge + vector[7] = new Vector3(-m_CameraUpAxis.Z, 0f, m_CameraAtAxis.Z); //BACK Nudge return vector; } @@ -1306,6 +1312,9 @@ namespace OpenSim.Region.Framework.Scenes else dirVectors = Dir_Vectors; + // The fact that m_movementflag is a byte needs to be fixed + // it really should be a uint + uint nudgehack = 250; foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS) { if (((uint)flags & (uint)DCF) != 0) @@ -1315,24 +1324,40 @@ namespace OpenSim.Region.Framework.Scenes try { agent_control_v3 += dirVectors[i]; + //m_log.DebugFormat("[Motion]: {0}, {1}",i, dirVectors[i]); } catch (IndexOutOfRangeException) { // Why did I get this? } - if ((m_movementflag & (uint)DCF) == 0) + if ((m_movementflag & (byte)(uint)DCF) == 0) { + if (DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) + { + m_movementflag |= (byte)nudgehack; + } m_movementflag += (byte)(uint)DCF; update_movementflag = true; } } else { - if ((m_movementflag & (uint)DCF) != 0) + if ((m_movementflag & (byte)(uint)DCF) != 0 || + ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) + && ((m_movementflag & (byte)nudgehack) == nudgehack)) + ) // This or is for Nudge forward { - m_movementflag -= (byte)(uint)DCF; + m_movementflag -= ((byte)(uint)DCF); + update_movementflag = true; + /* + if ((DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_FORWARD_NUDGE || DCF == Dir_ControlFlags.DIR_CONTROL_FLAG_BACKWARD_NUDGE) + && ((m_movementflag & (byte)nudgehack) == nudgehack)) + { + m_log.Debug("Removed Hack flag"); + } + */ } else { @@ -1470,7 +1495,7 @@ namespace OpenSim.Region.Framework.Scenes } } - if (update_movementflag) + if (update_movementflag && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0) && (m_parentID == 0)) Animator.UpdateMovementAnimations(); m_scene.EventManager.TriggerOnClientMovement(this); From e6c71d6df6ef0f2836323c8ae2e59da2d1104f74 Mon Sep 17 00:00:00 2001 From: "Teravus Ovares (Dan Olivares)" Date: Wed, 30 Dec 2009 15:55:49 -0500 Subject: [PATCH 7/7] * Fixes Sitting on the ground. --- .../Scenes/Animation/ScenePresenceAnimator.cs | 5 ++++- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 11 +++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 8b1d70558a..fd526eb214 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs @@ -146,7 +146,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation const float PREJUMP_DELAY = 0.25f; #region Inputs - + if (m_scenePresence.SitGround) + { + return "SIT_GROUND_CONSTRAINED"; + } AgentManager.ControlFlags controlFlags = (AgentManager.ControlFlags)m_scenePresence.AgentControlFlags; PhysicsActor actor = m_scenePresence.PhysicsActor; diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 4c2de27308..277081abd1 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -124,6 +124,7 @@ namespace OpenSim.Region.Framework.Scenes private Vector3? m_forceToApply; private uint m_requestedSitTargetID; private UUID m_requestedSitTargetUUID; + public bool SitGround = false; private SendCourseLocationsMethod m_sendCourseLocationsMethod; @@ -1254,7 +1255,9 @@ namespace OpenSim.Region.Framework.Scenes // TODO: This doesn't prevent the user from walking yet. // Setting parent ID would fix this, if we knew what value // to use. Or we could add a m_isSitting variable. - Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); + //Animator.TrySetMovementAnimation("SIT_GROUND_CONSTRAINED"); + SitGround = true; + } // In the future, these values might need to go global. @@ -1495,7 +1498,7 @@ namespace OpenSim.Region.Framework.Scenes } } - if (update_movementflag && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0) && (m_parentID == 0)) + if (update_movementflag && ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) == 0) && (m_parentID == 0) && !SitGround) Animator.UpdateMovementAnimations(); m_scene.EventManager.TriggerOnClientMovement(this); @@ -1607,8 +1610,12 @@ namespace OpenSim.Region.Framework.Scenes /// public void StandUp() { + if (SitGround) + SitGround = false; + if (m_parentID != 0) { + m_log.Debug("StandupCode Executed"); SceneObjectPart part = m_scene.GetSceneObjectPart(m_parentID); if (part != null) {