Ejemplo n.º 1
0
        public OSDMap UnpackTaskItem(BotClient Client, SimObject exportPrim, InventoryItem item, OutputDelegate Failure, out bool missing)
        {
            UUID itemID = item.UUID;

            lock (CompletedTaskItem) if (CompletedTaskItem.Contains(itemID))
                {
                    missing = false;
                    return(OSDSerializeMembers(item));
                }
            lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID))
                {
                    TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType);
                    missing = false;
                    return(OSDSerializeMembers(item));
                }
            if (showsMissingOnly)
            {
                Failure("NEED TASKITEM: " + ItemDesc(item, exportPrim));
                missing = true;
                return(OSDSerializeMembers(item));
            }
            ExportTaskAsset ho;
            AutoResetEvent  waitUntilDL = new AutoResetEvent(false);

            lock (TaskAssetWaiting) if (!TaskAssetWaiting.TryGetValue(itemID, out ho))
                {
                    TaskAssetWaiting[itemID] = ho = new ExportTaskAsset {
                        SourceItem = item, O = exportPrim
                    };
                    ho.waiting = waitUntilDL;
                }
            waitUntilDL = ho.waiting;
            lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID))
                {
                    TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType);
                    missing = false;
                    return(OSDSerializeMembers(item));
                }
            SlowlyDo(ho.Request);
            missing = waitUntilDL == null || !waitUntilDL.WaitOne(4000);
            if (CogbotHelpers.IsNullOrZero(item.AssetUUID))
            {
                Failure("ASSET ZERO " + ItemDesc(item, exportPrim));
                missing = true;
            }
            AddRelated(item.AssetUUID, item.AssetType);
            FindOrCreateAsset(item.AssetUUID, item.AssetType);
            return(OSDSerializeMembers(item));
        }
Ejemplo n.º 2
0
        public OSDMap UnpackTaskItem(BotClient Client, SimObject exportPrim, InventoryItem item, OutputDelegate Failure, out bool missing)
        {
            UUID itemID = item.UUID;
            lock (CompletedTaskItem) if (CompletedTaskItem.Contains(itemID))
            {
                missing = false;
                return OSDSerializeMembers(item);
            }
            lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID))
            {
                TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType);
                missing = false;
                return OSDSerializeMembers(item);
            }
            if (showsMissingOnly)
            {
                Failure("NEED TASKITEM: " + ItemDesc(item, exportPrim));
                missing = true;
                return OSDSerializeMembers(item);
            }
            ExportTaskAsset ho;
            AutoResetEvent waitUntilDL = new AutoResetEvent(false);
            lock (TaskAssetWaiting) if (!TaskAssetWaiting.TryGetValue(itemID, out ho))
            {
                TaskAssetWaiting[itemID] = ho = new ExportTaskAsset { SourceItem = item, O = exportPrim };
                ho.waiting = waitUntilDL;

            }
            waitUntilDL = ho.waiting;
            lock (CompletedTaskItem) if (!CogbotHelpers.IsNullOrZero(item.AssetUUID) && CompletedAssets.Contains(item.AssetUUID))
            {
                TaskItemComplete(exportPrim.ID, itemID, item.AssetUUID, item.AssetType);
                missing = false;
                return OSDSerializeMembers(item);
            }
            SlowlyDo(ho.Request);
            missing = waitUntilDL == null || !waitUntilDL.WaitOne(4000);
            if (CogbotHelpers.IsNullOrZero(item.AssetUUID))
            {
                Failure("ASSET ZERO " + ItemDesc(item, exportPrim));
                missing = true;
            }
            AddRelated(item.AssetUUID, item.AssetType);
            FindOrCreateAsset(item.AssetUUID, item.AssetType);
            return OSDSerializeMembers(item);
        }