protected override void DetachAttachment(DetachEntry entry) { ObjectGroup grp = CurrentScene.ObjectGroups[entry.ObjectID]; try { CurrentScene.Remove(grp); } catch { return; } Attachments.Remove(grp.ID); /* only serialize changed and/or scripted attachments */ bool isChanged = false; bool isScripted = false; foreach (ObjectPart part in grp.Values) { isChanged = isChanged || part.IsChanged; isScripted = isScripted || part.IsScripted; ObjectPart.PrimitiveShape shape = part.Shape; shape.State = 0; part.Shape = shape; } if (isChanged || isScripted) { UUID newAssetID; try { AssetData data = grp.Asset(); newAssetID = data.ID; AssetService.Store(data); } catch { return; } try { InventoryItem item = InventoryService.Item[ID, entry.ItemID]; if (item.AssetType != AssetType.Object) { return; } else { item.AssetID = newAssetID; InventoryService.Item.Update(item); } } catch { return; } } }
protected override void DetachAttachment(DetachEntry entry) { var grp = Circuits[entry.SceneID].Scene.ObjectGroups[entry.ObjectID]; try { Circuits[entry.SceneID].Scene.Remove(grp); } catch { return; } Attachments.Remove(grp.ID); /* only serialize changed and/or scripted attachments */ var isChanged = false; var isScripted = false; foreach (var part in grp.Values) { isChanged = isChanged || part.IsChanged; isScripted = isScripted || part.IsScripted; ObjectPart.PrimitiveShape shape = part.Shape; shape.State = 0; part.Shape = shape; } if (isChanged || isScripted) { UUID newAssetID; try { var data = grp.Asset(); newAssetID = data.ID; AssetService.Store(data); } catch { SendAlertMessage(this.GetLanguageString(CurrentCulture, "CouldNotStoreAttachmentData", "Could not store attachment data"), SceneID); return; } try { var item = InventoryService.Item[ID, entry.ItemID]; if (item.AssetType != AssetType.Object) { SendAlertMessage(this.GetLanguageString(CurrentCulture, "CouldNotStoreAttachmentData", "Could not store attachment data"), SceneID); } else { item.AssetID = newAssetID; /* we stored the new perm flags in asset, so no need for overwrite anymore */ item.Flags &= ~InventoryFlags.PermOverwriteMask; InventoryService.Item.Update(item); } } catch { SendAlertMessage(this.GetLanguageString(CurrentCulture, "CouldNotStoreAttachmentDataWithinItem", "Could not store attachment data within item"), SceneID); } } }
protected abstract void DetachAttachment(DetachEntry entry);