diff options
11 files changed, 253 insertions, 83 deletions
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs index 0bfd73a..8d93354 100644 --- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs | |||
@@ -697,6 +697,7 @@ namespace OpenSim.Data.SQLite | |||
697 | DataRow landRow = land.Rows.Find(globalID.ToString()); | 697 | DataRow landRow = land.Rows.Find(globalID.ToString()); |
698 | if (landRow != null) | 698 | if (landRow != null) |
699 | { | 699 | { |
700 | landRow.Delete(); | ||
700 | land.Rows.Remove(landRow); | 701 | land.Rows.Remove(landRow); |
701 | } | 702 | } |
702 | List<DataRow> rowsToDelete = new List<DataRow>(); | 703 | List<DataRow> rowsToDelete = new List<DataRow>(); |
@@ -707,6 +708,7 @@ namespace OpenSim.Data.SQLite | |||
707 | } | 708 | } |
708 | for (int iter = 0; iter < rowsToDelete.Count; iter++) | 709 | for (int iter = 0; iter < rowsToDelete.Count; iter++) |
709 | { | 710 | { |
711 | rowsToDelete[iter].Delete(); | ||
710 | landaccesslist.Rows.Remove(rowsToDelete[iter]); | 712 | landaccesslist.Rows.Remove(rowsToDelete[iter]); |
711 | } | 713 | } |
712 | } | 714 | } |
@@ -755,6 +757,7 @@ namespace OpenSim.Data.SQLite | |||
755 | } | 757 | } |
756 | for (int iter = 0; iter < rowsToDelete.Count; iter++) | 758 | for (int iter = 0; iter < rowsToDelete.Count; iter++) |
757 | { | 759 | { |
760 | rowsToDelete[iter].Delete(); | ||
758 | landaccesslist.Rows.Remove(rowsToDelete[iter]); | 761 | landaccesslist.Rows.Remove(rowsToDelete[iter]); |
759 | } | 762 | } |
760 | rowsToDelete.Clear(); | 763 | rowsToDelete.Clear(); |
diff --git a/OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs b/OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs index 1ad1e66..644864a 100644 --- a/OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLiteLegacy/SQLiteSimulationData.cs | |||
@@ -657,6 +657,7 @@ namespace OpenSim.Data.SQLiteLegacy | |||
657 | DataRow landRow = land.Rows.Find(globalID.ToString()); | 657 | DataRow landRow = land.Rows.Find(globalID.ToString()); |
658 | if (landRow != null) | 658 | if (landRow != null) |
659 | { | 659 | { |
660 | landRow.Delete(); | ||
660 | land.Rows.Remove(landRow); | 661 | land.Rows.Remove(landRow); |
661 | } | 662 | } |
662 | List<DataRow> rowsToDelete = new List<DataRow>(); | 663 | List<DataRow> rowsToDelete = new List<DataRow>(); |
@@ -667,6 +668,7 @@ namespace OpenSim.Data.SQLiteLegacy | |||
667 | } | 668 | } |
668 | for (int iter = 0; iter < rowsToDelete.Count; iter++) | 669 | for (int iter = 0; iter < rowsToDelete.Count; iter++) |
669 | { | 670 | { |
671 | rowsToDelete[iter].Delete(); | ||
670 | landaccesslist.Rows.Remove(rowsToDelete[iter]); | 672 | landaccesslist.Rows.Remove(rowsToDelete[iter]); |
671 | } | 673 | } |
672 | 674 | ||
@@ -717,6 +719,7 @@ namespace OpenSim.Data.SQLiteLegacy | |||
717 | } | 719 | } |
718 | for (int iter = 0; iter < rowsToDelete.Count; iter++) | 720 | for (int iter = 0; iter < rowsToDelete.Count; iter++) |
719 | { | 721 | { |
722 | rowsToDelete[iter].Delete(); | ||
720 | landaccesslist.Rows.Remove(rowsToDelete[iter]); | 723 | landaccesslist.Rows.Remove(rowsToDelete[iter]); |
721 | } | 724 | } |
722 | rowsToDelete.Clear(); | 725 | rowsToDelete.Clear(); |
diff --git a/OpenSim/Framework/InventoryItemBase.cs b/OpenSim/Framework/InventoryItemBase.cs index ce4fc38..a663680 100644 --- a/OpenSim/Framework/InventoryItemBase.cs +++ b/OpenSim/Framework/InventoryItemBase.cs | |||
@@ -117,7 +117,7 @@ namespace OpenSim.Framework | |||
117 | } | 117 | } |
118 | protected UUID m_creatorIdAsUuid = UUID.Zero; | 118 | protected UUID m_creatorIdAsUuid = UUID.Zero; |
119 | 119 | ||
120 | protected string m_creatorData; | 120 | protected string m_creatorData = string.Empty; |
121 | public string CreatorData // = <profile url>;<name> | 121 | public string CreatorData // = <profile url>;<name> |
122 | { | 122 | { |
123 | get { return m_creatorData; } | 123 | get { return m_creatorData; } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 1744fb3..1f49a01 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -111,7 +111,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
111 | return; | 111 | return; |
112 | 112 | ||
113 | if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) | 113 | if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) |
114 | { | ||
115 | remoteClient.SendAgentAlertMessage( | ||
116 | "You don't have sufficient permissions to attach this object", false); | ||
117 | |||
114 | return; | 118 | return; |
119 | } | ||
115 | 120 | ||
116 | // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should | 121 | // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should |
117 | // be removed when that functionality is implemented in opensim | 122 | // be removed when that functionality is implemented in opensim |
@@ -141,76 +146,66 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
141 | { | 146 | { |
142 | Vector3 attachPos = group.AbsolutePosition; | 147 | Vector3 attachPos = group.AbsolutePosition; |
143 | 148 | ||
144 | if (m_scene.Permissions.CanTakeObject(group.UUID, remoteClient.AgentId)) | 149 | // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should |
150 | // be removed when that functionality is implemented in opensim | ||
151 | AttachmentPt &= 0x7f; | ||
152 | |||
153 | // If the attachment point isn't the same as the one previously used | ||
154 | // set it's offset position = 0 so that it appears on the attachment point | ||
155 | // and not in a weird location somewhere unknown. | ||
156 | if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint()) | ||
145 | { | 157 | { |
146 | // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should | 158 | attachPos = Vector3.Zero; |
147 | // be removed when that functionality is implemented in opensim | 159 | } |
148 | AttachmentPt &= 0x7f; | ||
149 | |||
150 | // If the attachment point isn't the same as the one previously used | ||
151 | // set it's offset position = 0 so that it appears on the attachment point | ||
152 | // and not in a weird location somewhere unknown. | ||
153 | if (AttachmentPt != 0 && AttachmentPt != (uint)group.GetAttachmentPoint()) | ||
154 | { | ||
155 | attachPos = Vector3.Zero; | ||
156 | } | ||
157 | 160 | ||
158 | // AttachmentPt 0 means the client chose to 'wear' the attachment. | 161 | // AttachmentPt 0 means the client chose to 'wear' the attachment. |
159 | if (AttachmentPt == 0) | 162 | if (AttachmentPt == 0) |
160 | { | 163 | { |
161 | // Check object for stored attachment point | 164 | // Check object for stored attachment point |
162 | AttachmentPt = (uint)group.GetAttachmentPoint(); | 165 | AttachmentPt = (uint)group.GetAttachmentPoint(); |
163 | } | 166 | } |
164 | 167 | ||
165 | // if we still didn't find a suitable attachment point....... | 168 | // if we still didn't find a suitable attachment point....... |
166 | if (AttachmentPt == 0) | 169 | if (AttachmentPt == 0) |
167 | { | 170 | { |
168 | // Stick it on left hand with Zero Offset from the attachment point. | 171 | // Stick it on left hand with Zero Offset from the attachment point. |
169 | AttachmentPt = (uint)AttachmentPoint.LeftHand; | 172 | AttachmentPt = (uint)AttachmentPoint.LeftHand; |
170 | attachPos = Vector3.Zero; | 173 | attachPos = Vector3.Zero; |
171 | } | 174 | } |
172 | 175 | ||
173 | group.SetAttachmentPoint((byte)AttachmentPt); | 176 | group.SetAttachmentPoint((byte)AttachmentPt); |
174 | group.AbsolutePosition = attachPos; | 177 | group.AbsolutePosition = attachPos; |
175 | 178 | ||
176 | // Remove any previous attachments | 179 | // Remove any previous attachments |
177 | ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId); | 180 | ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId); |
178 | UUID itemID = UUID.Zero; | 181 | UUID itemID = UUID.Zero; |
179 | if (sp != null) | 182 | if (sp != null) |
183 | { | ||
184 | foreach (SceneObjectGroup grp in sp.Attachments) | ||
180 | { | 185 | { |
181 | foreach (SceneObjectGroup grp in sp.Attachments) | 186 | if (grp.GetAttachmentPoint() == (byte)AttachmentPt) |
182 | { | 187 | { |
183 | if (grp.GetAttachmentPoint() == (byte)AttachmentPt) | 188 | itemID = grp.GetFromItemID(); |
184 | { | 189 | break; |
185 | itemID = grp.GetFromItemID(); | ||
186 | break; | ||
187 | } | ||
188 | } | 190 | } |
189 | if (itemID != UUID.Zero) | ||
190 | DetachSingleAttachmentToInv(itemID, remoteClient); | ||
191 | } | 191 | } |
192 | if (itemID != UUID.Zero) | ||
193 | DetachSingleAttachmentToInv(itemID, remoteClient); | ||
194 | } | ||
192 | 195 | ||
193 | if (group.GetFromItemID() == UUID.Zero) | 196 | if (group.GetFromItemID() == UUID.Zero) |
194 | { | 197 | { |
195 | m_scene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId, out itemID); | 198 | m_scene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId, out itemID); |
196 | } | ||
197 | else | ||
198 | { | ||
199 | itemID = group.GetFromItemID(); | ||
200 | } | ||
201 | |||
202 | ShowAttachInUserInventory(remoteClient, AttachmentPt, itemID, group); | ||
203 | |||
204 | AttachToAgent(sp, group, AttachmentPt, attachPos, silent); | ||
205 | } | 199 | } |
206 | else | 200 | else |
207 | { | 201 | { |
208 | remoteClient.SendAgentAlertMessage( | 202 | itemID = group.GetFromItemID(); |
209 | "You don't have sufficient permissions to attach this object", false); | ||
210 | |||
211 | return false; | ||
212 | } | 203 | } |
213 | 204 | ||
205 | ShowAttachInUserInventory(remoteClient, AttachmentPt, itemID, group); | ||
206 | |||
207 | AttachToAgent(sp, group, AttachmentPt, attachPos, silent); | ||
208 | |||
214 | return true; | 209 | return true; |
215 | } | 210 | } |
216 | 211 | ||
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs index 358d0a7..2d7244e 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs | |||
@@ -130,7 +130,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
130 | 130 | ||
131 | List<string> mainParams = ops.Parse(cmdparams); | 131 | List<string> mainParams = ops.Parse(cmdparams); |
132 | 132 | ||
133 | if (cmdparams.Length > 2) | 133 | if (mainParams.Count > 2) |
134 | { | 134 | { |
135 | ArchiveRegion(mainParams[2], options); | 135 | ArchiveRegion(mainParams[2], options); |
136 | } | 136 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a29b7f1..06f8ac1 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1733,7 +1733,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1733 | // Autoreturn has a null client. Nothing else does. So | 1733 | // Autoreturn has a null client. Nothing else does. So |
1734 | // allow only returns | 1734 | // allow only returns |
1735 | if (action != DeRezAction.Return) | 1735 | if (action != DeRezAction.Return) |
1736 | { | ||
1737 | m_log.WarnFormat( | ||
1738 | "[AGENT INVENTORY]: Ignoring attempt to {0} {1} {2} without a client", | ||
1739 | action, grp.Name, grp.UUID); | ||
1736 | return; | 1740 | return; |
1741 | } | ||
1737 | 1742 | ||
1738 | permissionToTakeCopy = false; | 1743 | permissionToTakeCopy = false; |
1739 | } | 1744 | } |
@@ -1741,13 +1746,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1741 | { | 1746 | { |
1742 | if (!Permissions.CanTakeCopyObject(grp.UUID, remoteClient.AgentId)) | 1747 | if (!Permissions.CanTakeCopyObject(grp.UUID, remoteClient.AgentId)) |
1743 | permissionToTakeCopy = false; | 1748 | permissionToTakeCopy = false; |
1749 | |||
1744 | if (!Permissions.CanTakeObject(grp.UUID, remoteClient.AgentId)) | 1750 | if (!Permissions.CanTakeObject(grp.UUID, remoteClient.AgentId)) |
1745 | permissionToTake = false; | 1751 | permissionToTake = false; |
1746 | 1752 | ||
1747 | if (!Permissions.CanDeleteObject(grp.UUID, remoteClient.AgentId)) | 1753 | if (!Permissions.CanDeleteObject(grp.UUID, remoteClient.AgentId)) |
1748 | permissionToDelete = false; | 1754 | permissionToDelete = false; |
1749 | } | 1755 | } |
1750 | |||
1751 | } | 1756 | } |
1752 | 1757 | ||
1753 | // Handle god perms | 1758 | // Handle god perms |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs index 06890a0..d67638a 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs | |||
@@ -27,13 +27,15 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | ||
30 | using System.Text; | 31 | using System.Text; |
32 | using log4net; | ||
31 | using OpenMetaverse; | 33 | using OpenMetaverse; |
32 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
33 | using OpenSim.Region.Framework.Interfaces; | 35 | using OpenSim.Region.Framework.Interfaces; |
34 | 36 | ||
35 | namespace OpenSim.Region.Framework.Scenes | 37 | namespace OpenSim.Region.Framework.Scenes |
36 | { | 38 | { |
37 | #region Delegates | 39 | #region Delegates |
38 | public delegate uint GenerateClientFlagsHandler(UUID userID, UUID objectID); | 40 | public delegate uint GenerateClientFlagsHandler(UUID userID, UUID objectID); |
39 | public delegate void SetBypassPermissionsHandler(bool value); | 41 | public delegate void SetBypassPermissionsHandler(bool value); |
@@ -88,6 +90,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
88 | 90 | ||
89 | public class ScenePermissions | 91 | public class ScenePermissions |
90 | { | 92 | { |
93 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
94 | |||
91 | private Scene m_scene; | 95 | private Scene m_scene; |
92 | 96 | ||
93 | public ScenePermissions(Scene scene) | 97 | public ScenePermissions(Scene scene) |
@@ -242,6 +246,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
242 | #region DELETE OBJECT | 246 | #region DELETE OBJECT |
243 | public bool CanDeleteObject(UUID objectID, UUID deleter) | 247 | public bool CanDeleteObject(UUID objectID, UUID deleter) |
244 | { | 248 | { |
249 | bool result = true; | ||
250 | |||
245 | DeleteObjectHandler handler = OnDeleteObject; | 251 | DeleteObjectHandler handler = OnDeleteObject; |
246 | if (handler != null) | 252 | if (handler != null) |
247 | { | 253 | { |
@@ -249,10 +255,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
249 | foreach (DeleteObjectHandler h in list) | 255 | foreach (DeleteObjectHandler h in list) |
250 | { | 256 | { |
251 | if (h(objectID, deleter, m_scene) == false) | 257 | if (h(objectID, deleter, m_scene) == false) |
252 | return false; | 258 | { |
259 | result = false; | ||
260 | break; | ||
261 | } | ||
253 | } | 262 | } |
254 | } | 263 | } |
255 | return true; | 264 | |
265 | // m_log.DebugFormat( | ||
266 | // "[SCENE PERMISSIONS]: CanDeleteObject() fired for object {0}, deleter {1}, result {2}", | ||
267 | // objectID, deleter, result); | ||
268 | |||
269 | return result; | ||
256 | } | 270 | } |
257 | 271 | ||
258 | #endregion | 272 | #endregion |
@@ -260,6 +274,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
260 | #region TAKE OBJECT | 274 | #region TAKE OBJECT |
261 | public bool CanTakeObject(UUID objectID, UUID AvatarTakingUUID) | 275 | public bool CanTakeObject(UUID objectID, UUID AvatarTakingUUID) |
262 | { | 276 | { |
277 | bool result = true; | ||
278 | |||
263 | TakeObjectHandler handler = OnTakeObject; | 279 | TakeObjectHandler handler = OnTakeObject; |
264 | if (handler != null) | 280 | if (handler != null) |
265 | { | 281 | { |
@@ -267,10 +283,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
267 | foreach (TakeObjectHandler h in list) | 283 | foreach (TakeObjectHandler h in list) |
268 | { | 284 | { |
269 | if (h(objectID, AvatarTakingUUID, m_scene) == false) | 285 | if (h(objectID, AvatarTakingUUID, m_scene) == false) |
270 | return false; | 286 | { |
287 | result = false; | ||
288 | break; | ||
289 | } | ||
271 | } | 290 | } |
272 | } | 291 | } |
273 | return true; | 292 | |
293 | // m_log.DebugFormat( | ||
294 | // "[SCENE PERMISSIONS]: CanTakeObject() fired for object {0}, taker {1}, result {2}", | ||
295 | // objectID, AvatarTakingUUID, result); | ||
296 | |||
297 | return result; | ||
274 | } | 298 | } |
275 | 299 | ||
276 | #endregion | 300 | #endregion |
@@ -278,6 +302,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
278 | #region TAKE COPY OBJECT | 302 | #region TAKE COPY OBJECT |
279 | public bool CanTakeCopyObject(UUID objectID, UUID userID) | 303 | public bool CanTakeCopyObject(UUID objectID, UUID userID) |
280 | { | 304 | { |
305 | bool result = true; | ||
306 | |||
281 | TakeCopyObjectHandler handler = OnTakeCopyObject; | 307 | TakeCopyObjectHandler handler = OnTakeCopyObject; |
282 | if (handler != null) | 308 | if (handler != null) |
283 | { | 309 | { |
@@ -285,10 +311,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
285 | foreach (TakeCopyObjectHandler h in list) | 311 | foreach (TakeCopyObjectHandler h in list) |
286 | { | 312 | { |
287 | if (h(objectID, userID, m_scene) == false) | 313 | if (h(objectID, userID, m_scene) == false) |
288 | return false; | 314 | { |
315 | result = false; | ||
316 | break; | ||
317 | } | ||
289 | } | 318 | } |
290 | } | 319 | } |
291 | return true; | 320 | |
321 | // m_log.DebugFormat( | ||
322 | // "[SCENE PERMISSIONS]: CanTakeCopyObject() fired for object {0}, user {1}, result {2}", | ||
323 | // objectID, userID, result); | ||
324 | |||
325 | return result; | ||
292 | } | 326 | } |
293 | 327 | ||
294 | #endregion | 328 | #endregion |
@@ -383,6 +417,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
383 | #region RETURN OBJECT | 417 | #region RETURN OBJECT |
384 | public bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects) | 418 | public bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects) |
385 | { | 419 | { |
420 | bool result = true; | ||
421 | |||
386 | ReturnObjectsHandler handler = OnReturnObjects; | 422 | ReturnObjectsHandler handler = OnReturnObjects; |
387 | if (handler != null) | 423 | if (handler != null) |
388 | { | 424 | { |
@@ -390,10 +426,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
390 | foreach (ReturnObjectsHandler h in list) | 426 | foreach (ReturnObjectsHandler h in list) |
391 | { | 427 | { |
392 | if (h(land, user, objects, m_scene) == false) | 428 | if (h(land, user, objects, m_scene) == false) |
393 | return false; | 429 | { |
430 | result = false; | ||
431 | break; | ||
432 | } | ||
394 | } | 433 | } |
395 | } | 434 | } |
396 | return true; | 435 | |
436 | // m_log.DebugFormat( | ||
437 | // "[SCENE PERMISSIONS]: CanReturnObjects() fired for user {0} for {1} objects on {2}, result {3}", | ||
438 | // user, objects.Count, land.LandData.Name, result); | ||
439 | |||
440 | return result; | ||
397 | } | 441 | } |
398 | 442 | ||
399 | #endregion | 443 | #endregion |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index c2810b2..4ec530e 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -2607,6 +2607,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2607 | //if (part.UUID != m_rootPart.UUID) | 2607 | //if (part.UUID != m_rootPart.UUID) |
2608 | 2608 | ||
2609 | HasGroupChanged = true; | 2609 | HasGroupChanged = true; |
2610 | part.TriggerScriptChangedEvent(Changed.SCALE); | ||
2610 | ScheduleGroupForFullUpdate(); | 2611 | ScheduleGroupForFullUpdate(); |
2611 | 2612 | ||
2612 | //if (part.UUID == m_rootPart.UUID) | 2613 | //if (part.UUID == m_rootPart.UUID) |
@@ -2758,6 +2759,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2758 | part.IgnoreUndoUpdate = false; | 2759 | part.IgnoreUndoUpdate = false; |
2759 | part.StoreUndoState(); | 2760 | part.StoreUndoState(); |
2760 | HasGroupChanged = true; | 2761 | HasGroupChanged = true; |
2762 | m_rootPart.TriggerScriptChangedEvent(Changed.SCALE); | ||
2761 | ScheduleGroupForTerseUpdate(); | 2763 | ScheduleGroupForTerseUpdate(); |
2762 | } | 2764 | } |
2763 | } | 2765 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 2155e26..ba592c4 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1002,21 +1002,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1002 | public PrimitiveBaseShape Shape | 1002 | public PrimitiveBaseShape Shape |
1003 | { | 1003 | { |
1004 | get { return m_shape; } | 1004 | get { return m_shape; } |
1005 | set | 1005 | set { m_shape = value; } |
1006 | { | ||
1007 | bool shape_changed = false; | ||
1008 | // TODO: this should really be restricted to the right | ||
1009 | // set of attributes on shape change. For instance, | ||
1010 | // changing the lighting on a shape shouldn't cause | ||
1011 | // this. | ||
1012 | if (m_shape != null) | ||
1013 | shape_changed = true; | ||
1014 | |||
1015 | m_shape = value; | ||
1016 | |||
1017 | if (shape_changed) | ||
1018 | TriggerScriptChangedEvent(Changed.SHAPE); | ||
1019 | } | ||
1020 | } | 1006 | } |
1021 | 1007 | ||
1022 | public Vector3 Scale | 1008 | public Vector3 Scale |
@@ -4570,6 +4556,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4570 | ParentGroup.RootPart.Rezzed = DateTime.UtcNow; | 4556 | ParentGroup.RootPart.Rezzed = DateTime.UtcNow; |
4571 | 4557 | ||
4572 | ParentGroup.HasGroupChanged = true; | 4558 | ParentGroup.HasGroupChanged = true; |
4559 | TriggerScriptChangedEvent(Changed.SHAPE); | ||
4573 | ScheduleFullUpdate(); | 4560 | ScheduleFullUpdate(); |
4574 | } | 4561 | } |
4575 | 4562 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserTests.cs new file mode 100644 index 0000000..b3b99f4 --- /dev/null +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserTests.cs | |||
@@ -0,0 +1,129 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
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. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.Reflection; | ||
31 | using Nini.Config; | ||
32 | using NUnit.Framework; | ||
33 | using NUnit.Framework.SyntaxHelpers; | ||
34 | using OpenMetaverse; | ||
35 | using OpenSim.Framework; | ||
36 | using OpenSim.Framework.Communications; | ||
37 | using OpenSim.Region.CoreModules.World.Permissions; | ||
38 | using OpenSim.Region.Framework.Scenes; | ||
39 | using OpenSim.Tests.Common; | ||
40 | using OpenSim.Tests.Common.Mock; | ||
41 | using OpenSim.Tests.Common.Setup; | ||
42 | |||
43 | namespace OpenSim.Region.Framework.Scenes.Tests | ||
44 | { | ||
45 | /// <summary> | ||
46 | /// Tests manipulation of scene objects by users. | ||
47 | /// </summary> | ||
48 | /// | ||
49 | /// This is at a level above the SceneObjectBasicTests, which act on the scene directly. | ||
50 | /// FIXME: These tests are very incomplete - they only test for a few conditions. | ||
51 | [TestFixture] | ||
52 | public class SceneObjectUserTests | ||
53 | { | ||
54 | /// <summary> | ||
55 | /// Test deleting an object from a scene. | ||
56 | /// </summary> | ||
57 | [Test] | ||
58 | public void TestDeRezSceneObject() | ||
59 | { | ||
60 | TestHelper.InMethod(); | ||
61 | // log4net.Config.XmlConfigurator.Configure(); | ||
62 | |||
63 | UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); | ||
64 | |||
65 | TestScene scene = SceneSetupHelpers.SetupScene(); | ||
66 | IConfigSource configSource = new IniConfigSource(); | ||
67 | IConfig config = configSource.AddConfig("Startup"); | ||
68 | config.Set("serverside_object_permissions", true); | ||
69 | SceneSetupHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); | ||
70 | TestClient client = SceneSetupHelpers.AddRootAgent(scene, userId); | ||
71 | |||
72 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. | ||
73 | AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; | ||
74 | sogd.Enabled = false; | ||
75 | |||
76 | SceneObjectPart part | ||
77 | = new SceneObjectPart(userId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); | ||
78 | part.Name = "obj1"; | ||
79 | scene.AddNewSceneObject(new SceneObjectGroup(part), false); | ||
80 | List<uint> localIds = new List<uint>(); | ||
81 | localIds.Add(part.LocalId); | ||
82 | |||
83 | scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); | ||
84 | sogd.InventoryDeQueueAndDelete(); | ||
85 | |||
86 | SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); | ||
87 | Assert.That(retrievedPart, Is.Null); | ||
88 | } | ||
89 | |||
90 | /// <summary> | ||
91 | /// Test deleting an object from a scene where the deleter is not the owner | ||
92 | /// </summary> | ||
93 | /// | ||
94 | /// This test assumes that the deleter is not a god. | ||
95 | [Test] | ||
96 | public void TestDeRezSceneObjectNotOwner() | ||
97 | { | ||
98 | TestHelper.InMethod(); | ||
99 | // log4net.Config.XmlConfigurator.Configure(); | ||
100 | |||
101 | UUID userId = UUID.Parse("10000000-0000-0000-0000-000000000001"); | ||
102 | UUID objectOwnerId = UUID.Parse("20000000-0000-0000-0000-000000000001"); | ||
103 | |||
104 | TestScene scene = SceneSetupHelpers.SetupScene(); | ||
105 | IConfigSource configSource = new IniConfigSource(); | ||
106 | IConfig config = configSource.AddConfig("Startup"); | ||
107 | config.Set("serverside_object_permissions", true); | ||
108 | SceneSetupHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); | ||
109 | TestClient client = SceneSetupHelpers.AddRootAgent(scene, userId); | ||
110 | |||
111 | // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. | ||
112 | AsyncSceneObjectGroupDeleter sogd = scene.SceneObjectGroupDeleter; | ||
113 | sogd.Enabled = false; | ||
114 | |||
115 | SceneObjectPart part | ||
116 | = new SceneObjectPart(objectOwnerId, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero); | ||
117 | part.Name = "obj1"; | ||
118 | scene.AddNewSceneObject(new SceneObjectGroup(part), false); | ||
119 | List<uint> localIds = new List<uint>(); | ||
120 | localIds.Add(part.LocalId); | ||
121 | |||
122 | scene.DeRezObjects(client, localIds, UUID.Zero, DeRezAction.Delete, UUID.Zero); | ||
123 | sogd.InventoryDeQueueAndDelete(); | ||
124 | |||
125 | SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); | ||
126 | Assert.That(retrievedPart.UUID, Is.EqualTo(part.UUID)); | ||
127 | } | ||
128 | } | ||
129 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs index ab5968c..ef52363 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTests.cs | |||
@@ -65,6 +65,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
65 | [TestFixtureSetUp] | 65 | [TestFixtureSetUp] |
66 | public void Init() | 66 | public void Init() |
67 | { | 67 | { |
68 | TestHelper.InMethod(); | ||
69 | |||
68 | scene = SceneSetupHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); | 70 | scene = SceneSetupHelpers.SetupScene("Neighbour x", UUID.Random(), 1000, 1000); |
69 | scene2 = SceneSetupHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000); | 71 | scene2 = SceneSetupHelpers.SetupScene("Neighbour x+1", UUID.Random(), 1001, 1000); |
70 | scene3 = SceneSetupHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000); | 72 | scene3 = SceneSetupHelpers.SetupScene("Neighbour x-1", UUID.Random(), 999, 1000); |