diff options
Diffstat (limited to '')
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; |