aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorKitto Flora2010-08-04 21:08:14 +0000
committerKitto Flora2010-08-04 21:08:14 +0000
commit0871d20adbe1800655b8a7e9d16f71090bbf5c87 (patch)
tree83a3e62f4aad08af9d98f7de880f2942b45c498c /OpenSim/Region
parentFixes fresh hollowed prim collision shape. (diff)
parentSend attachment updates only to the owner if it's a HUD (diff)
downloadopensim-SC-0871d20adbe1800655b8a7e9d16f71090bbf5c87.zip
opensim-SC-0871d20adbe1800655b8a7e9d16f71090bbf5c87.tar.gz
opensim-SC-0871d20adbe1800655b8a7e9d16f71090bbf5c87.tar.bz2
opensim-SC-0871d20adbe1800655b8a7e9d16f71090bbf5c87.tar.xz
Merge branch 'careminster-presence-refactor' of ssh://3dhosting.de/var/git/careminster into careminster-presence-refactor
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Application/ConfigurationLoader.cs15
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs9
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs13
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs18
-rw-r--r--OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs40
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs2
10 files changed, 80 insertions, 38 deletions
diff --git a/OpenSim/Region/Application/ConfigurationLoader.cs b/OpenSim/Region/Application/ConfigurationLoader.cs
index cac5fa9..09f7bea 100644
--- a/OpenSim/Region/Application/ConfigurationLoader.cs
+++ b/OpenSim/Region/Application/ConfigurationLoader.cs
@@ -308,21 +308,6 @@ namespace OpenSim
308 } 308 }
309 309
310 { 310 {
311 IConfig config = defaultConfig.Configs["StandAlone"];
312
313 if (null == config)
314 config = defaultConfig.AddConfig("StandAlone");
315
316 config.Set("accounts_authenticate", true);
317 config.Set("welcome_message", "Welcome to OpenSimulator");
318 config.Set("inventory_plugin", "OpenSim.Data.SQLite.dll");
319 config.Set("inventory_source", "");
320 config.Set("userDatabase_plugin", "OpenSim.Data.SQLite.dll");
321 config.Set("user_source", "");
322 config.Set("LibrariesXMLFile", string.Format(".{0}inventory{0}Libraries.xml", Path.DirectorySeparatorChar));
323 }
324
325 {
326 IConfig config = defaultConfig.Configs["Network"]; 311 IConfig config = defaultConfig.Configs["Network"];
327 312
328 if (null == config) 313 if (null == config)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index a9f9d60..4ab719d 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -3485,6 +3485,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3485 /// </summary> 3485 /// </summary>
3486 public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) 3486 public void SendPrimUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
3487 { 3487 {
3488 if (entity is SceneObjectPart)
3489 {
3490 SceneObjectPart e = (SceneObjectPart)entity;
3491 SceneObjectGroup g = e.ParentGroup;
3492 if (g.RootPart.Shape.State > 30) // HUD
3493 if (g.OwnerID != AgentId)
3494 return; // Don't send updates for other people's HUDs
3495 }
3496
3488 double priority = m_prioritizer.GetUpdatePriority(this, entity); 3497 double priority = m_prioritizer.GetUpdatePriority(this, entity);
3489 3498
3490 lock (m_entityUpdates.SyncRoot) 3499 lock (m_entityUpdates.SyncRoot)
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 50d2f9d..06b1b00 100644
--- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
@@ -218,7 +218,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
218 fromPos = avatar.AbsolutePosition; 218 fromPos = avatar.AbsolutePosition;
219 fromName = avatar.Name; 219 fromName = avatar.Name;
220 fromID = c.Sender.AgentId; 220 fromID = c.Sender.AgentId;
221 if (avatar.GodLevel > 200) 221 if (avatar.GodLevel >= 200)
222 { 222 {
223 fromNamePrefix = m_adminPrefix; 223 fromNamePrefix = m_adminPrefix;
224 } 224 }
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs
index ffdac58..cbea54c 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs
@@ -187,7 +187,8 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
187 delegate(bool success) 187 delegate(bool success)
188 { 188 {
189 if (dialog == (uint)InstantMessageDialog.StartTyping || 189 if (dialog == (uint)InstantMessageDialog.StartTyping ||
190 dialog == (uint)InstantMessageDialog.StopTyping) 190 dialog == (uint)InstantMessageDialog.StopTyping ||
191 dialog == (uint)InstantMessageDialog.MessageFromObject)
191 { 192 {
192 return; 193 return;
193 } 194 }
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index 83209fc..d025f0c 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -185,13 +185,16 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
185 { 185 {
186 UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage; 186 UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage;
187 187
188 // If this event has handlers, then the IM will be considered 188 // If this event has handlers, then an IM from an agent will be
189 // delivered. This will suppress the error message. 189 // considered delivered. This will suppress the error message.
190 // 190 //
191 if (handlerUndeliveredMessage != null) 191 if (handlerUndeliveredMessage != null)
192 { 192 {
193 handlerUndeliveredMessage(im); 193 handlerUndeliveredMessage(im);
194 result(true); 194 if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent)
195 result(true);
196 else
197 result(false);
195 return; 198 return;
196 } 199 }
197 200
@@ -504,14 +507,14 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
504 // 507 //
505 if (upd.RegionID == prevRegionID) 508 if (upd.RegionID == prevRegionID)
506 { 509 {
507 m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); 510 // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message");
508 HandleUndeliveredMessage(im, result); 511 HandleUndeliveredMessage(im, result);
509 return; 512 return;
510 } 513 }
511 } 514 }
512 else 515 else
513 { 516 {
514 m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); 517 // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message");
515 HandleUndeliveredMessage(im, result); 518 HandleUndeliveredMessage(im, result);
516 return; 519 return;
517 } 520 }
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index 0d04491..98545f9 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -153,7 +153,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
153 153
154 private void OnInstantMessage(IClientAPI client, GridInstantMessage im) 154 private void OnInstantMessage(IClientAPI client, GridInstantMessage im)
155 { 155 {
156 m_log.InfoFormat("[INVENTORY TRANSFER]: OnInstantMessage {0}", im.dialog); 156 //m_log.InfoFormat("[INVENTORY TRANSFER]: OnInstantMessage {0}", im.dialog);
157 157
158 Scene scene = FindClientScene(client.AgentId); 158 Scene scene = FindClientScene(client.AgentId);
159 159
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 927eeab..1d1a0a1 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -549,6 +549,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
549 549
550 if (uinfo != null) 550 if (uinfo != null)
551 { 551 {
552 if (uinfo.HomeRegionID == UUID.Zero)
553 {
554 // can't find the Home region: Tell viewer and abort
555 client.SendTeleportFailed("You don't have a home position set.");
556 return;
557 }
552 GridRegion regionInfo = m_aScene.GridService.GetRegionByUUID(UUID.Zero, uinfo.HomeRegionID); 558 GridRegion regionInfo = m_aScene.GridService.GetRegionByUUID(UUID.Zero, uinfo.HomeRegionID);
553 if (regionInfo == null) 559 if (regionInfo == null)
554 { 560 {
@@ -556,7 +562,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
556 client.SendTeleportFailed("Your home region could not be found."); 562 client.SendTeleportFailed("Your home region could not be found.");
557 return; 563 return;
558 } 564 }
559 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: User's home region is {0} {1} ({2}-{3})", 565 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: User's home region is {0} {1} ({2}-{3})",
560 regionInfo.RegionName, regionInfo.RegionID, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize); 566 regionInfo.RegionName, regionInfo.RegionID, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize);
561 567
562 // a little eekie that this goes back to Scene and with a forced cast, will fix that at some point... 568 // a little eekie that this goes back to Scene and with a forced cast, will fix that at some point...
@@ -564,6 +570,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
564 client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt, 570 client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt,
565 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome)); 571 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
566 } 572 }
573 else
574 {
575 // can't find the Home region: Tell viewer and abort
576 client.SendTeleportFailed("Your home region could not be found.");
577 return;
578 }
567 } 579 }
568 580
569 #endregion 581 #endregion
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index efe3365..d857a1c 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1935,8 +1935,14 @@ namespace OpenSim.Region.Framework.Scenes
1935//Console.WriteLine("Scripted, unoccupied"); 1935//Console.WriteLine("Scripted, unoccupied");
1936 part.SetAvatarOnSitTarget(UUID); // set that Av will be on it 1936 part.SetAvatarOnSitTarget(UUID); // set that Av will be on it
1937 offset = new Vector3(avSitOffSet.X, avSitOffSet.Y, avSitOffSet.Z); // change ofset to the scripted one 1937 offset = new Vector3(avSitOffSet.X, avSitOffSet.Y, avSitOffSet.Z); // change ofset to the scripted one
1938 sitOrientation = avSitOrientation; // Change rotatione to the scripted one 1938
1939 OffsetRotation = avSitOrientation; 1939 Quaternion nrot = avSitOrientation;
1940 if (!part.IsRoot)
1941 {
1942 nrot = part.RotationOffset * avSitOrientation;
1943 }
1944 sitOrientation = nrot; // Change rotatione to the scripted one
1945 OffsetRotation = nrot;
1940 autopilot = false; // Jump direct to scripted llSitPos() 1946 autopilot = false; // Jump direct to scripted llSitPos()
1941 } 1947 }
1942 else 1948 else
@@ -2010,7 +2016,7 @@ namespace OpenSim.Region.Framework.Scenes
2010 // offsetr = (part.OffsetPosition * Quaternion.Inverse(part.ParentGroup.RootPart.RotationOffset)) + (offset * partIRot); 2016 // offsetr = (part.OffsetPosition * Quaternion.Inverse(part.ParentGroup.RootPart.RotationOffset)) + (offset * partIRot);
2011 // if (part.LinkNum < 2) 091216 All this was necessary because of the GetWorldRotation error. 2017 // if (part.LinkNum < 2) 091216 All this was necessary because of the GetWorldRotation error.
2012 // { // Single, or Root prim of linkset, target is ClickOffset * RootRot 2018 // { // Single, or Root prim of linkset, target is ClickOffset * RootRot
2013 offsetr = offset * partIRot; 2019 //offsetr = offset * partIRot;
2014// 2020//
2015 // else 2021 // else
2016 // { // Child prim, offset is (ChildOffset * RootRot) + (ClickOffset * ChildRot) 2022 // { // Child prim, offset is (ChildOffset * RootRot) + (ClickOffset * ChildRot)
@@ -2029,7 +2035,7 @@ namespace OpenSim.Region.Framework.Scenes
2029//Console.WriteLine("Camera Eye ={0}", cameraEyeOffset); 2035//Console.WriteLine("Camera Eye ={0}", cameraEyeOffset);
2030 2036
2031 //NOTE: SendSitResponse should be relative to the GROUP *NOT* THE PRIM if we're sitting on a child 2037 //NOTE: SendSitResponse should be relative to the GROUP *NOT* THE PRIM if we're sitting on a child
2032 ControllingClient.SendSitResponse(part.ParentGroup.UUID, offsetr + part.OffsetPosition, sitOrientation, autopilot, cameraAtOffset, cameraEyeOffset, forceMouselook); 2038 ControllingClient.SendSitResponse(part.ParentGroup.UUID, ((offset * part.RotationOffset) + part.OffsetPosition), sitOrientation, autopilot, cameraAtOffset, cameraEyeOffset, forceMouselook);
2033 2039
2034 m_requestedSitTargetUUID = part.UUID; //KF: Correct autopilot target 2040 m_requestedSitTargetUUID = part.UUID; //KF: Correct autopilot target
2035 // This calls HandleAgentSit twice, once from here, and the client calls 2041 // This calls HandleAgentSit twice, once from here, and the client calls
@@ -2343,6 +2349,10 @@ namespace OpenSim.Region.Framework.Scenes
2343 Quaternion sitTargetOrient = part.SitTargetOrientation; 2349 Quaternion sitTargetOrient = part.SitTargetOrientation;
2344 m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z); 2350 m_pos = new Vector3(sitTargetPos.X, sitTargetPos.Y, sitTargetPos.Z);
2345 m_pos += SIT_TARGET_ADJUSTMENT; 2351 m_pos += SIT_TARGET_ADJUSTMENT;
2352 if (!part.IsRoot)
2353 {
2354 m_pos *= part.RotationOffset;
2355 }
2346 m_bodyRot = sitTargetOrient; 2356 m_bodyRot = sitTargetOrient;
2347 m_parentPosition = part.AbsolutePosition; 2357 m_parentPosition = part.AbsolutePosition;
2348 part.IsOccupied = true; 2358 part.IsOccupied = true;
diff --git a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
index 6aa28e0..2105be1 100644
--- a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
@@ -131,6 +131,7 @@ namespace OpenSim.Region.Physics.OdePlugin
131 //public GCHandle gc; 131 //public GCHandle gc;
132 private CollisionLocker ode; 132 private CollisionLocker ode;
133 133
134 private bool m_meshfailed = false;
134 private bool m_taintforce = false; 135 private bool m_taintforce = false;
135 private bool m_taintaddangularforce = false; 136 private bool m_taintaddangularforce = false;
136 private Vector3 m_force; 137 private Vector3 m_force;
@@ -1882,12 +1883,20 @@ namespace OpenSim.Region.Physics.OdePlugin
1882 1883
1883 m_targetSpace = targetspace; 1884 m_targetSpace = targetspace;
1884 1885
1885 if (_mesh == null) 1886 if (_mesh == null && m_meshfailed == false)
1886 { 1887 {
1887 if (_parent_scene.needsMeshing(_pbs)) 1888 if (_parent_scene.needsMeshing(_pbs))
1888 { 1889 {
1889 // Don't need to re-enable body.. it's done in SetMesh 1890 // Don't need to re-enable body.. it's done in SetMesh
1890 _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); 1891 try
1892 {
1893 _mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
1894 }
1895 catch
1896 {
1897 //Don't continuously try to mesh prims when meshing has failed
1898 m_meshfailed = true;
1899 }
1891 // createmesh returns null when it's a shape that isn't a cube. 1900 // createmesh returns null when it's a shape that isn't a cube.
1892 // m_log.Debug(m_localID); 1901 // m_log.Debug(m_localID);
1893 } 1902 }
@@ -2127,7 +2136,7 @@ Console.WriteLine(" JointCreateFixed");
2127 // we don't need to do space calculation because the client sends a position update also. 2136 // we don't need to do space calculation because the client sends a position update also.
2128 2137
2129 // Construction of new prim 2138 // Construction of new prim
2130 if (_parent_scene.needsMeshing(_pbs)) 2139 if (_parent_scene.needsMeshing(_pbs) && m_meshfailed == false)
2131 { 2140 {
2132 float meshlod = _parent_scene.meshSculptLOD; 2141 float meshlod = _parent_scene.meshSculptLOD;
2133 2142
@@ -2137,8 +2146,15 @@ Console.WriteLine(" JointCreateFixed");
2137 2146
2138 IMesh mesh = null; 2147 IMesh mesh = null;
2139 2148
2140 if (_parent_scene.needsMeshing(_pbs)) 2149 try
2141 mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); 2150 {
2151 if (_parent_scene.needsMeshing(_pbs))
2152 mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
2153 }
2154 catch
2155 {
2156 m_meshfailed = true;
2157 }
2142 2158
2143 //IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); 2159 //IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
2144//Console.WriteLine("changesize 1"); 2160//Console.WriteLine("changesize 1");
@@ -2233,17 +2249,23 @@ Console.WriteLine(" JointCreateFixed");
2233 if (_size.Z <= 0) _size.Z = 0.01f; 2249 if (_size.Z <= 0) _size.Z = 0.01f;
2234 // Construction of new prim 2250 // Construction of new prim
2235 2251
2236 if (_parent_scene.needsMeshing(_pbs)) 2252 if (_parent_scene.needsMeshing(_pbs) && m_meshfailed == false)
2237 { 2253 {
2238 // Don't need to re-enable body.. it's done in SetMesh 2254 // Don't need to re-enable body.. it's done in SetMesh
2239 float meshlod = _parent_scene.meshSculptLOD; 2255 float meshlod = _parent_scene.meshSculptLOD;
2240 2256
2241 if (IsPhysical) 2257 if (IsPhysical)
2242 meshlod = _parent_scene.MeshSculptphysicalLOD; 2258 meshlod = _parent_scene.MeshSculptphysicalLOD;
2243 2259 try
2244 IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical); 2260 {
2261 IMesh mesh = _parent_scene.mesher.CreateMesh(oldname, _pbs, _size, meshlod, IsPhysical);
2262 CreateGeom(m_targetSpace, mesh);
2263 }
2264 catch
2265 {
2266 m_meshfailed = true;
2267 }
2245 // createmesh returns null when it doesn't mesh. 2268 // createmesh returns null when it doesn't mesh.
2246 CreateGeom(m_targetSpace, mesh);
2247 } 2269 }
2248 else 2270 else
2249 { 2271 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 52d3285..0a1a10c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2116,7 +2116,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2116 } 2116 }
2117 else 2117 else
2118 { 2118 {
2119 LSL_Vector rel_vec = SetPosAdjust(currentPos, targetPos); 2119 LSL_Vector rel_vec = SetPosAdjust(new LSL_Vector(part.OffsetPosition.X, part.OffsetPosition.Y, part.OffsetPosition.Z), targetPos);
2120 part.OffsetPosition = new Vector3((float)rel_vec.x, (float)rel_vec.y, (float)rel_vec.z); 2120 part.OffsetPosition = new Vector3((float)rel_vec.x, (float)rel_vec.y, (float)rel_vec.z);
2121 SceneObjectGroup parent = part.ParentGroup; 2121 SceneObjectGroup parent = part.ParentGroup;
2122 parent.HasGroupChanged = true; 2122 parent.HasGroupChanged = true;