From 227fd4eb11db76c7a2da5fdaffd00fc766f38c8c Mon Sep 17 00:00:00 2001 From: Dahlia Trimble Date: Wed, 15 Oct 2008 04:55:13 +0000 Subject: Thanks to T. Sado and nlin for a patch that partially implements llGetAgentInfo (AGENT_FLYING, AGENT_ALWAYS_RUN, AGENT_AWAY, AGENT_MOUSELOOK, AGENT_TYPING). --- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 41 +++++++++++++++++-- .../Shared/Api/Implementation/LSL_Api.cs | 47 +++++++++++++++++++++- 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 6f5372a..0fe2bdb 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -297,6 +297,41 @@ namespace OpenSim.Region.Environment.Scenes set { m_allowMovement = value; } } + public bool SetAlwaysRun + { + get + { + if (PhysicsActor != null) + { + return PhysicsActor.SetAlwaysRun; + } + else + { + return m_setAlwaysRun; + } + } + set + { + m_setAlwaysRun = value; + if (PhysicsActor != null) + { + PhysicsActor.SetAlwaysRun = value; + } + } + } + + public byte State + { + get { return m_state; } + set { m_state = value; } + } + + public uint AgentControlFlags + { + get { return m_AgentControlFlags; } + set { m_AgentControlFlags = value; } + } + /// /// This works out to be the ClientView object associated with this avatar, or it's client connection manager /// @@ -942,9 +977,9 @@ namespace OpenSim.Region.Environment.Scenes // In the future, these values might need to go global. // Here's where you get them. - // m_AgentControlFlags = flags; - // m_headrotation = agentData.AgentData.HeadRotation; - // m_state = agentData.AgentData.State; + m_AgentControlFlags = flags; + m_headrotation = agentData.HeadRotation; + m_state = agentData.State; if (m_allowMovement) { diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 826324f..7d3badb 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -4455,8 +4455,51 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_Integer llGetAgentInfo(string id) { m_host.AddScriptLPS(1); - NotImplemented("llGetAgentInfo"); - return 0; + + // This is partial implementation. + + UUID key = new UUID(); + if (!UUID.TryParse(id, out key)) + { + return 0; + } + + int flags = 0; + + ScenePresence agent = World.GetScenePresence(key); + if (agent == null) + { + return 0; + } + + if (agent.SetAlwaysRun) + { + flags |= ScriptBaseClass.AGENT_ALWAYS_RUN; + } + + if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0) + { + flags |= ScriptBaseClass.AGENT_FLYING; + } + + if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AWAY) != 0) + { + flags |= ScriptBaseClass.AGENT_AWAY; + } + + if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) + { + flags |= ScriptBaseClass.AGENT_MOUSELOOK; + } + + if ((agent.State & (byte)AgentManager.AgentState.Typing) != (byte)0) + { + flags |= ScriptBaseClass.AGENT_TYPING; + } + + //NotImplemented("llGetAgentInfo"); + + return flags; } public LSL_String llGetAgentLanguage(string id) -- cgit v1.1