aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs41
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs35
5 files changed, 71 insertions, 20 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index e44705c..263ac27 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Region.Environment.Scenes
67 /// </summary> 67 /// </summary>
68 public int PrimCount 68 public int PrimCount
69 { 69 {
70 get { return 1; } 70 get { return m_parts.Count; }
71 } 71 }
72 72
73 public LLQuaternion GroupRotation 73 public LLQuaternion GroupRotation
@@ -240,8 +240,9 @@ namespace OpenSim.Region.Environment.Scenes
240 m_scene = scene; 240 m_scene = scene;
241 part.SetParent(this); 241 part.SetParent(this);
242 part.ParentID = 0; 242 part.ParentID = 0;
243 243 part.LinkNum = 0;
244 m_parts.Add(part.UUID, part); 244 m_parts.Add(part.UUID, part);
245
245 SetPartAsRoot(part); 246 SetPartAsRoot(part);
246 247
247 RegionHandle = regionHandle; 248 RegionHandle = regionHandle;
@@ -267,7 +268,7 @@ namespace OpenSim.Region.Environment.Scenes
267 reader.ReadStartElement("SceneObjectGroup"); 268 reader.ReadStartElement("SceneObjectGroup");
268 reader.ReadStartElement("RootPart"); 269 reader.ReadStartElement("RootPart");
269 m_rootPart = SceneObjectPart.FromXml(reader); 270 m_rootPart = SceneObjectPart.FromXml(reader);
270 271 AddPart(m_rootPart);
271 reader.ReadEndElement(); 272 reader.ReadEndElement();
272 273
273 while (reader.Read()) 274 while (reader.Read())
@@ -293,7 +294,7 @@ namespace OpenSim.Region.Environment.Scenes
293 reader.Close(); 294 reader.Close();
294 sr.Close(); 295 sr.Close();
295 296
296 AddPart(m_rootPart); 297
297 298
298 m_rootPart.LocalID = m_scene.PrimIDAllocate(); 299 m_rootPart.LocalID = m_scene.PrimIDAllocate();
299 m_rootPart.ParentID = 0; 300 m_rootPart.ParentID = 0;
@@ -318,6 +319,10 @@ namespace OpenSim.Region.Environment.Scenes
318 319
319 reader.ReadStartElement("SceneObjectGroup"); 320 reader.ReadStartElement("SceneObjectGroup");
320 m_rootPart = SceneObjectPart.FromXml(reader); 321 m_rootPart = SceneObjectPart.FromXml(reader);
322 m_rootPart.SetParent(this);
323 m_parts.Add(m_rootPart.UUID, m_rootPart);
324 m_rootPart.ParentID = 0;
325 m_rootPart.LinkNum = 0;
321 326
322 reader.Read(); 327 reader.Read();
323 bool more = true; 328 bool more = true;
@@ -346,9 +351,7 @@ namespace OpenSim.Region.Environment.Scenes
346 } 351 }
347 reader.Close(); 352 reader.Close();
348 sr.Close(); 353 sr.Close();
349 m_rootPart.SetParent(this); 354
350 m_parts.Add(m_rootPart.UUID, m_rootPart);
351 m_rootPart.ParentID = 0;
352 UpdateParentIDs(); 355 UpdateParentIDs();
353 356
354 ScheduleGroupForFullUpdate(); 357 ScheduleGroupForFullUpdate();
@@ -431,6 +434,7 @@ namespace OpenSim.Region.Environment.Scenes
431 LLVector3 rootOffset = new LLVector3(0, 0, 0); 434 LLVector3 rootOffset = new LLVector3(0, 0, 0);
432 SceneObjectPart newPart = 435 SceneObjectPart newPart =
433 new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset); 436 new SceneObjectPart(m_regionHandle, this, ownerID, localID, shape, pos, rot, rootOffset);
437 newPart.LinkNum = m_parts.Count;
434 m_parts.Add(newPart.UUID, newPart); 438 m_parts.Add(newPart.UUID, newPart);
435 SetPartAsRoot(newPart); 439 SetPartAsRoot(newPart);
436 440
@@ -586,6 +590,7 @@ namespace OpenSim.Region.Environment.Scenes
586 { 590 {
587 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID); 591 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID);
588 newPart.SetParent(this); 592 newPart.SetParent(this);
593 newPart.LinkNum = m_parts.Count;
589 m_parts.Add(newPart.UUID, newPart); 594 m_parts.Add(newPart.UUID, newPart);
590 SetPartAsRoot(newPart); 595 SetPartAsRoot(newPart);
591 } 596 }
@@ -615,6 +620,7 @@ namespace OpenSim.Region.Environment.Scenes
615 { 620 {
616 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID); 621 SceneObjectPart newPart = part.Copy(m_scene.PrimIDAllocate(), OwnerID, GroupID);
617 newPart.SetParent(this); 622 newPart.SetParent(this);
623 newPart.LinkNum = m_parts.Count;
618 m_parts.Add(newPart.UUID, newPart); 624 m_parts.Add(newPart.UUID, newPart);
619 SetPartAsNonRoot(newPart); 625 SetPartAsNonRoot(newPart);
620 } 626 }
@@ -627,6 +633,7 @@ namespace OpenSim.Region.Environment.Scenes
627 foreach (SceneObjectPart part in partsList) 633 foreach (SceneObjectPart part in partsList)
628 { 634 {
629 part.UUID = LLUUID.Random(); 635 part.UUID = LLUUID.Random();
636 part.LinkNum = m_parts.Count;
630 m_parts.Add(part.UUID, part); 637 m_parts.Add(part.UUID, part);
631 } 638 }
632 } 639 }
@@ -770,6 +777,23 @@ namespace OpenSim.Region.Environment.Scenes
770 #region SceneGroupPart Methods 777 #region SceneGroupPart Methods
771 778
772 /// <summary> 779 /// <summary>
780 /// Get the child part by LinkNum
781 /// </summary>
782 /// <param name="linknum"></param>
783 /// <returns>null if no child part with that linknum or child part</returns>
784 public SceneObjectPart GetLinkNumPart(int linknum)
785 {
786 foreach (SceneObjectPart part in m_parts.Values)
787 {
788 if (part.LinkNum == linknum)
789 {
790 return part;
791 }
792 }
793 return null;
794 }
795
796 /// <summary>
773 /// Get a child part with a given UUID 797 /// Get a child part with a given UUID
774 /// </summary> 798 /// </summary>
775 /// <param name="primID"></param> 799 /// <param name="primID"></param>
@@ -868,6 +892,7 @@ namespace OpenSim.Region.Environment.Scenes
868 Quaternion newRot = parentRot.Inverse() * oldRot; 892 Quaternion newRot = parentRot.Inverse() * oldRot;
869 linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w); 893 linkPart.RotationOffset = new LLQuaternion(newRot.x, newRot.y, newRot.z, newRot.w);
870 linkPart.ParentID = m_rootPart.LocalID; 894 linkPart.ParentID = m_rootPart.LocalID;
895 linkPart.LinkNum = m_parts.Count;
871 m_parts.Add(linkPart.UUID, linkPart); 896 m_parts.Add(linkPart.UUID, linkPart);
872 linkPart.SetParent(this); 897 linkPart.SetParent(this);
873 898
@@ -979,6 +1004,7 @@ namespace OpenSim.Region.Environment.Scenes
979 { 1004 {
980 part.SetParent(this); 1005 part.SetParent(this);
981 part.ParentID = m_rootPart.LocalID; 1006 part.ParentID = m_rootPart.LocalID;
1007 part.LinkNum = m_parts.Count;
982 m_parts.Add(part.UUID, part); 1008 m_parts.Add(part.UUID, part);
983 1009
984 Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z); 1010 Vector3 axiomOldPos = new Vector3(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z);
@@ -1612,6 +1638,7 @@ namespace OpenSim.Region.Environment.Scenes
1612 public void AddPart(SceneObjectPart part) 1638 public void AddPart(SceneObjectPart part)
1613 { 1639 {
1614 part.SetParent(this); 1640 part.SetParent(this);
1641 part.LinkNum = m_parts.Count;
1615 m_parts.Add(part.UUID, part); 1642 m_parts.Add(part.UUID, part);
1616 } 1643 }
1617 1644
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index f6c0ee3..5e5b8b5 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -364,6 +364,13 @@ namespace OpenSim.Region.Environment.Scenes
364 set { m_touchName = value; } 364 set { m_touchName = value; }
365 } 365 }
366 366
367 private int m_linkNum = 0;
368 public int LinkNum
369 {
370 get { return m_linkNum; }
371 set { m_linkNum = value; }
372 }
373
367 private byte m_clickAction = 0; 374 private byte m_clickAction = 0;
368 public byte ClickAction 375 public byte ClickAction
369 { 376 {
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
index 10e71b3..60e2a0e 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
@@ -268,7 +268,7 @@ namespace OpenSim.Region.ScriptEngine.Common
268 //wiki: key llGetLinkKey(integer linknum) 268 //wiki: key llGetLinkKey(integer linknum)
269 string llGetLinkKey(int linknum); 269 string llGetLinkKey(int linknum);
270 //wiki: llGetLinkName(integer linknum) 270 //wiki: llGetLinkName(integer linknum)
271 void llGetLinkName(int linknum); 271 string llGetLinkName(int linknum);
272 //wiki: integer llGetInventoryNumber(integer type) 272 //wiki: integer llGetInventoryNumber(integer type)
273 int llGetInventoryNumber(int type); 273 int llGetInventoryNumber(int type);
274 //wiki: string llGetInventoryName(integer type, integer number) 274 //wiki: string llGetInventoryName(integer type, integer number)
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
index 99f8d3b..d669c15 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
@@ -860,9 +860,9 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
860 return m_LSL_Functions.llGetLinkKey(linknum); 860 return m_LSL_Functions.llGetLinkKey(linknum);
861 } 861 }
862 862
863 public void llGetLinkName(int linknum) 863 public string llGetLinkName(int linknum)
864 { 864 {
865 m_LSL_Functions.llGetLinkName(linknum); 865 return m_LSL_Functions.llGetLinkName(linknum);
866 } 866 }
867 867
868 public int llGetInventoryNumber(int type) 868 public int llGetInventoryNumber(int type)
@@ -2122,4 +2122,4 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
2122 public vector ZERO_VECTOR = new vector(0, 0, 0); 2122 public vector ZERO_VECTOR = new vector(0, 0, 0);
2123 public rotation ZERO_ROTATION = new rotation(0, 0, 0, 0); 2123 public rotation ZERO_ROTATION = new rotation(0, 0, 0, 0);
2124 } 2124 }
2125} \ No newline at end of file 2125}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
index 00e79c0..61c4b10 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
@@ -1128,7 +1128,11 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
1128 1128
1129 public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain) 1129 public void llTargetOmega(LSL_Types.Vector3 axis, double spinrate, double gain)
1130 { 1130 {
1131 NotImplemented("llTargetOmega"); 1131 m_host.RotationalVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
1132 m_host.AngularVelocity = new LLVector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
1133 m_host.ScheduleTerseUpdate();
1134 m_host.SendTerseUpdateToAllClients();
1135 //NotImplemented("llTargetOmega");
1132 } 1136 }
1133 1137
1134 public int llGetStartParameter() 1138 public int llGetStartParameter()
@@ -1161,8 +1165,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
1161 1165
1162 public int llGetLinkNumber() 1166 public int llGetLinkNumber()
1163 { 1167 {
1164 NotImplemented("llGetLinkNumber"); 1168 return m_host.LinkNum;
1165 return 0;
1166 } 1169 }
1167 1170
1168 public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face) 1171 public void llSetLinkColor(int linknumber, LSL_Types.Vector3 color, int face)
@@ -1187,13 +1190,28 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
1187 1190
1188 public string llGetLinkKey(int linknum) 1191 public string llGetLinkKey(int linknum)
1189 { 1192 {
1190 NotImplemented("llGetLinkKey"); 1193 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
1191 return ""; 1194 if (part != null)
1195 {
1196 return part.UUID.ToStringHyphenated();
1197 }
1198 else
1199 {
1200 return "00000000-0000-0000-0000-000000000000";
1201 }
1192 } 1202 }
1193 1203
1194 public void llGetLinkName(int linknum) 1204 public string llGetLinkName(int linknum)
1195 { 1205 {
1196 NotImplemented("llGetLinkName"); 1206 SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(linknum);
1207 if (part != null)
1208 {
1209 return part.Name;
1210 }
1211 else
1212 {
1213 return "00000000-0000-0000-0000-000000000000";
1214 }
1197 } 1215 }
1198 1216
1199 public int llGetInventoryNumber(int type) 1217 public int llGetInventoryNumber(int type)
@@ -2194,8 +2212,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
2194 2212
2195 public int llGetNumberOfPrims() 2213 public int llGetNumberOfPrims()
2196 { 2214 {
2197 NotImplemented("llGetNumberOfPrims"); 2215 return m_host.ParentGroup.PrimCount;
2198 return 0;
2199 } 2216 }
2200 2217
2201 public string llGetNumberOfNotecardLines(string name) 2218 public string llGetNumberOfNotecardLines(string name)