From 0b5cdc539c767b526f14cb7e7d97fd83bea14424 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 29 Dec 2009 18:35:06 +0000
Subject: 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
---
.../Region/Framework/Interfaces/IInterregionComms.cs | 2 +-
.../Scenes/Hypergrid/HGSceneCommunicationService.cs | 2 +-
OpenSim/Region/Framework/Scenes/Scene.cs | 20 ++++++++++++++++----
.../Framework/Scenes/SceneCommunicationService.cs | 4 ++--
.../Framework/Scenes/Tests/ScenePresenceTests.cs | 6 +++---
5 files changed, 23 insertions(+), 11 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs
index 8f4d3d5..2d6287f 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 0f9c190..416826c 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 f79eb5d..0e1e2be 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 e649139..f49d072 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 f495022..f00dd66 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);
--
cgit v1.1
From 16a64c400b866d20ed80287f624fff89cc187145 Mon Sep 17 00:00:00 2001
From: Teravus Ovares (Dan Olivares)
Date: Wed, 30 Dec 2009 15:01:14 -0500
Subject: * Makes forward and backward key reactions faster by responding to
the NUDGE type movements.
---
.../Scenes/Animation/ScenePresenceAnimator.cs | 3 +-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 41 +++++++++++++++++-----
2 files changed, 35 insertions(+), 9 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index c314596..8b1d705 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 289ba47..4c2de27 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);
--
cgit v1.1
From e6c71d6df6ef0f2836323c8ae2e59da2d1104f74 Mon Sep 17 00:00:00 2001
From: Teravus Ovares (Dan Olivares)
Date: Wed, 30 Dec 2009 15:55:49 -0500
Subject: * Fixes Sitting on the ground.
---
.../Framework/Scenes/Animation/ScenePresenceAnimator.cs | 5 ++++-
OpenSim/Region/Framework/Scenes/ScenePresence.cs | 11 +++++++++--
2 files changed, 13 insertions(+), 3 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index 8b1d705..fd526eb 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 4c2de27..277081a 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)
{
--
cgit v1.1