aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs41
1 files changed, 41 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 1b82ad1..9feed38 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4104,6 +4104,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4104 public LSL_String llGetLinkKey(int linknum) 4104 public LSL_String llGetLinkKey(int linknum)
4105 { 4105 {
4106 m_host.AddScriptLPS(1); 4106 m_host.AddScriptLPS(1);
4107 List<UUID> keytable = new List<UUID>();
4108 // parse for sitting avatare-uuids
4109 World.ForEachScenePresence(delegate(ScenePresence presence)
4110 {
4111 if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
4112 keytable.Add(presence.UUID);
4113 });
4114
4115 int totalprims = m_host.ParentGroup.PrimCount + keytable.Count;
4116 if (linknum > m_host.ParentGroup.PrimCount && linknum <= totalprims)
4117 {
4118 return keytable[totalprims - linknum].ToString();
4119 }
4120
4121 if (linknum == 1 && m_host.ParentGroup.PrimCount == 1 && keytable.Count == 1)
4122 {
4123 return m_host.UUID.ToString();
4124 }
4125
4107 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum); 4126 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
4108 if (part != null) 4127 if (part != null)
4109 { 4128 {
@@ -4160,6 +4179,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4160 public LSL_String llGetLinkName(int linknum) 4179 public LSL_String llGetLinkName(int linknum)
4161 { 4180 {
4162 m_host.AddScriptLPS(1); 4181 m_host.AddScriptLPS(1);
4182 // parse for sitting avatare-names
4183 List<String> nametable = new List<String>();
4184 World.ForEachScenePresence(delegate(ScenePresence presence)
4185 {
4186 if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
4187 nametable.Add(presence.ControllingClient.Name);
4188 });
4189
4190 int totalprims = m_host.ParentGroup.PrimCount + nametable.Count;
4191 if (totalprims > m_host.ParentGroup.PrimCount)
4192 {
4193 // sitting Avatar-Name with negativ linknum / SinglePrim
4194 if (linknum < 0 && m_host.ParentGroup.PrimCount == 1 && nametable.Count == 1)
4195 return nametable[0];
4196 // Prim-Name / SinglePrim Sitting Avatar
4197 if (linknum == 1 && m_host.ParentGroup.PrimCount == 1 && nametable.Count == 1)
4198 return m_host.Name;
4199 // LinkNumber > of Real PrimSet = AvatarName
4200 if (linknum > m_host.ParentGroup.PrimCount && linknum <= totalprims)
4201 return nametable[totalprims - linknum];
4202 }
4163 4203
4164 // simplest case, this prims link number 4204 // simplest case, this prims link number
4165 if (m_host.LinkNum == linknum) 4205 if (m_host.LinkNum == linknum)
@@ -4173,6 +4213,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4173 else 4213 else
4174 return UUID.Zero.ToString(); 4214 return UUID.Zero.ToString();
4175 } 4215 }
4216
4176 // Link set 4217 // Link set
4177 SceneObjectPart part = null; 4218 SceneObjectPart part = null;
4178 if (m_host.LinkNum == 1) // this is the Root prim 4219 if (m_host.LinkNum == 1) // this is the Root prim