Exemplo n.º 1
0
        private void RezActualScript(AgentCircuit circuit, ObjectPart part, RezScript req, AssetData data)
        {
            if (!part.CheckPermissions(Owner, Group, InventoryPermissionsMask.Modify))
            {
                var res = new AlertMessage
                {
                    Message = "ALERT: NoPermModifyObject"
                };
                circuit.SendMessage(res);
                return;
            }
            var item = new ObjectPartInventoryItem
            {
                Name           = req.InventoryBlock.Name,
                AssetID        = data.ID,
                Description    = req.InventoryBlock.Description,
                AssetType      = AssetType.LSLText,
                Creator        = Owner,
                Owner          = Owner,
                Flags          = 0,
                Group          = Group,
                IsGroupOwned   = false,
                InventoryType  = InventoryType.LSL,
                LastOwner      = Owner,
                ParentFolderID = part.ID
            };

            item.Permissions.Base      = req.InventoryBlock.BaseMask;
            item.Permissions.Current   = req.InventoryBlock.OwnerMask;
            item.Permissions.EveryOne  = req.InventoryBlock.EveryoneMask;
            item.Permissions.Group     = req.InventoryBlock.GroupMask;
            item.Permissions.NextOwner = req.InventoryBlock.NextOwnerMask;
            item.SaleInfo.Price        = req.InventoryBlock.SalePrice;
            item.SaleInfo.Type         = req.InventoryBlock.SaleType;

            part.Inventory.Add(item);
            part.SendObjectUpdate();

            ScriptInstance instance;

            try
            {
                SceneInterface scene = part.ObjectGroup.Scene;
                instance            = ScriptLoader.Load(part, item, item.Owner, data, CurrentCulture, openInclude: part.OpenScriptInclude);
                item.ScriptInstance = instance;
                item.ScriptInstance.IsRunningAllowed = scene.CanRunScript(item.Owner, part.ObjectGroup.GlobalPosition, item.AssetID);
                item.ScriptInstance.IsRunning        = true;
                item.ScriptInstance.Reset();
                part.ObjectGroup.Scene.SendObjectPropertiesToAgent(this, part);
            }
            catch
            {
                var res = new AlertMessage
                {
                    Message = this.GetLanguageString(circuit.Agent.CurrentCulture, "CouldNotCompileScript", "Could not compile script")
                };
                circuit.SendMessage(res);
                return;
            }
        }
Exemplo n.º 2
0
        private void RezNewScript(AgentCircuit circuit, ObjectPart part, RezScript req)
        {
            AssetData data;

            try
            {
                /* this is the KAN-Ed llSay script */
                data = circuit.Scene.AssetService["366ac8e9-b391-11dc-8314-0800200c9a66"];
            }
            catch
            {
                var res = new AlertMessage
                {
                    Message = "ALERT: ScriptMissing"
                };
                circuit.SendMessage(res);
                return;
            }

            RezActualScript(circuit, part, req, data);
        }
Exemplo n.º 3
0
        private void RezScriptFromAgentInventory(AgentCircuit circuit, ObjectPart part, RezScript req)
        {
            var           itemID = req.InventoryBlock.ItemID;
            InventoryItem item;

            try
            {
                item = InventoryService.Item[Owner.ID, itemID];
            }
            catch
            {
                var res = new AlertMessage
                {
                    Message = "ALERT: ScriptMissing"
                };
                circuit.SendMessage(res);
                return;
            }

            if (item.AssetType == AssetType.Link)
            {
                try
                {
                    item = InventoryService.Item[Owner.ID, item.AssetID];
                }
                catch
                {
                    var res = new AlertMessage
                    {
                        Message = "ALERT: ScriptMissing"
                    };
                    circuit.SendMessage(res);
                    return;
                }
            }

            if (item.AssetType != AssetType.LSLText)
            {
                var res = new AlertMessage
                {
                    Message = "Unable to rez a non-script asset as script"
                };
                circuit.SendMessage(res);
                return;
            }

            AssetData data;

            /* Fetch asset locally first. It can prevent a lengthy request on foreign services. */
            try
            {
                data = circuit.Scene.AssetService[item.AssetID];
            }
            catch
            {
                /* Fetch asset from agent */
                try
                {
                    data = AssetService[item.AssetID];
                }
                catch
                {
                    var res = new AlertMessage
                    {
                        Message = "ALERT: ScriptMissing"
                    };
                    circuit.SendMessage(res);
                    return;
                }

                /* Do not trust foreign sources for correct flags */
                data.Temporary = false;
                data.Local     = false;

                /* Save asset locally */
                try
                {
                    circuit.Scene.AssetService.Store(data);
                }
                catch
                {
                    var res = new AlertMessage
                    {
                        Message = "ALERT: UnableToLoadScript"
                    };
                    circuit.SendMessage(res);
                    return;
                }
            }

            if (data.Type != AssetType.LSLText)
            {
                var res = new AlertMessage
                {
                    Message = this.GetLanguageString(CurrentCulture, "UnableToRezANonScriptAsScript", "Unable to rez a non-script asset as script")
                };
                circuit.SendMessage(res);
                return;
            }

            RezActualScript(circuit, part, req, data);

            if (0 == (item.Permissions.Current & InventoryPermissionsMask.Copy))
            {
                InventoryService.Item.Delete(Owner.ID, itemID);
            }
        }