diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 6ec3081..977f39e 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -24,7 +24,7 @@ | |||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
@@ -6371,22 +6371,48 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6371 | return agentSize; | 6371 | return agentSize; |
6372 | } | 6372 | } |
6373 | 6373 | ||
6374 | public LSL_Integer llSameGroup(string agent) | 6374 | public LSL_Integer llSameGroup(string id) |
6375 | { | 6375 | { |
6376 | m_host.AddScriptLPS(1); | 6376 | m_host.AddScriptLPS(1); |
6377 | UUID agentId = new UUID(); | 6377 | UUID uuid = new UUID(); |
6378 | if (!UUID.TryParse(agent, out agentId)) | 6378 | if (!UUID.TryParse(id, out uuid)) |
6379 | return new LSL_Integer(0); | 6379 | return new LSL_Integer(0); |
6380 | if (agentId == m_host.GroupID) | 6380 | |
6381 | // Check if it's a group key | ||
6382 | if (uuid == m_host.ParentGroup.RootPart.GroupID) | ||
6381 | return new LSL_Integer(1); | 6383 | return new LSL_Integer(1); |
6382 | ScenePresence presence = World.GetScenePresence(agentId); | 6384 | |
6383 | if (presence == null || presence.IsChildAgent) // Return false for child agents | 6385 | // We got passed a UUID.Zero |
6386 | if (uuid == UUID.Zero) | ||
6384 | return new LSL_Integer(0); | 6387 | return new LSL_Integer(0); |
6385 | IClientAPI client = presence.ControllingClient; | 6388 | |
6386 | if (m_host.GroupID == client.ActiveGroupId) | 6389 | // Handle the case where id names an avatar |
6387 | return new LSL_Integer(1); | 6390 | ScenePresence presence = World.GetScenePresence(uuid); |
6388 | else | 6391 | if (presence != null) |
6392 | { | ||
6393 | if (presence.IsChildAgent) | ||
6394 | return new LSL_Integer(0); | ||
6395 | |||
6396 | IClientAPI client = presence.ControllingClient; | ||
6397 | if (m_host.ParentGroup.RootPart.GroupID == client.ActiveGroupId) | ||
6398 | return new LSL_Integer(1); | ||
6399 | |||
6400 | return new LSL_Integer(0); | ||
6401 | } | ||
6402 | |||
6403 | // Handle object case | ||
6404 | SceneObjectPart part = World.GetSceneObjectPart(uuid); | ||
6405 | if (part != null) | ||
6406 | { | ||
6407 | // This will handle both deed and non-deed and also the no | ||
6408 | // group case | ||
6409 | if (part.ParentGroup.RootPart.GroupID == m_host.ParentGroup.RootPart.GroupID) | ||
6410 | return new LSL_Integer(1); | ||
6411 | |||
6389 | return new LSL_Integer(0); | 6412 | return new LSL_Integer(0); |
6413 | } | ||
6414 | |||
6415 | return new LSL_Integer(0); | ||
6390 | } | 6416 | } |
6391 | 6417 | ||
6392 | public void llUnSit(string id) | 6418 | public void llUnSit(string id) |