public SceneObjectGroup CreateEntity(
            UUID ownerID, UUID groupID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape)
        {
            if (Array.IndexOf(creationCapabilities, (PCode)shape.PCode) < 0)
            {
                m_log.DebugFormat("[VEGETATION]: PCode {0} not handled by {1}", shape.PCode, Name);
                return(null);
            }

            SceneObjectGroup sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
            SceneObjectPart  rootPart    = sceneObject.GetChildPart(sceneObject.UUID);

            // if grass or tree, make phantom
            //rootPart.TrimPermissions();
            rootPart.AddFlag(PrimFlags.Phantom);
            if (rootPart.Shape.PCode != (byte)PCode.Grass)
            {
                AdaptTree(ref shape);
            }

            m_scene.AddNewSceneObject(sceneObject, true);
            sceneObject.SetGroup(groupID, null);

            return(sceneObject);
        }
        public ISceneEntity CreateEntity(
            ISceneEntity baseEntity, UUID ownerID, UUID groupID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape)
        {
            if (Array.IndexOf(creationCapabilities, (PCode)shape.PCode) < 0)
            {
                MainConsole.Instance.DebugFormat("[VEGETATION]: PCode {0} not handled by {1}", shape.PCode, Name);
                return(null);
            }

            SceneObjectGroup sceneObject = baseEntity as SceneObjectGroup;
            SceneObjectPart  rootPart    = (SceneObjectPart)sceneObject.GetChildPart(sceneObject.UUID);

            // if grass or tree, make phantom
            //rootPart.TrimPermissions();
            rootPart.AddFlag(PrimFlags.Phantom);
            if (rootPart.Shape.PCode != (byte)PCode.Grass)
            {
                AdaptTree(ref shape);
            }

            m_scene.SceneGraph.AddPrimToScene(sceneObject);
            sceneObject.SetGroup(groupID, ownerID, true);
            sceneObject.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate);

            return(sceneObject);
        }
Example #3
0
        /// <summary>
        /// Start a script which is in this prim's inventory.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource)
        {
//             m_log.DebugFormat("[PRIM INVENTORY]: Starting script {0} {1} in prim {2} {3} in {4}",
//                 item.Name, item.ItemID, m_part.Name, m_part.UUID, m_part.ParentGroup.Scene.RegionInfo.RegionName);

            if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
            {
                return;
            }

            m_part.AddFlag(PrimFlags.Scripted);

            if (!m_part.ParentGroup.Scene.RegionInfo.RegionSettings.DisableScripts)
            {
                if (stateSource == 2 && // Prim crossing
                    m_part.ParentGroup.Scene.m_trustBinaries)
                {
                    lock (m_items)
                    {
                        m_items[item.ItemID].PermsMask    = 0;
                        m_items[item.ItemID].PermsGranter = UUID.Zero;
                    }

                    m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
                        m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource);
                    m_part.ParentGroup.AddActiveScriptCount(1);
                    m_part.ScheduleFullUpdate();
                    return;
                }

                AssetBase asset = m_part.ParentGroup.Scene.AssetService.Get(item.AssetID.ToString());
                if (null == asset)
                {
                    m_log.ErrorFormat(
                        "[PRIM INVENTORY]: Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
                        item.Name, item.ItemID, m_part.AbsolutePosition,
                        m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID);
                }
                else
                {
                    if (m_part.ParentGroup.m_savedScriptState != null)
                    {
                        item.OldItemID = RestoreSavedScriptState(item.LoadedItemID, item.OldItemID, item.ItemID);
                    }

                    lock (m_items)
                    {
                        m_items[item.ItemID].OldItemID    = item.OldItemID;
                        m_items[item.ItemID].PermsMask    = 0;
                        m_items[item.ItemID].PermsGranter = UUID.Zero;
                    }

                    string script = Utils.BytesToString(asset.Data);
                    m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
                        m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource);
                    m_part.ParentGroup.AddActiveScriptCount(1);
                    m_part.ScheduleFullUpdate();
                }
            }
        }
Example #4
0
        /// <summary>
        /// Start all the scripts contained in this prim's inventory
        /// </summary>
        public void CreateScriptInstances(int startParam, bool postOnRez, int stateSource, UUID RezzedFrom)
        {
            List <TaskInventoryItem> LSLItems = GetInventoryScripts();

            if (LSLItems.Count == 0)
            {
                return;
            }
            HasInventoryChanged = true;

            bool SendUpdate = m_part.AddFlag(PrimFlags.Scripted);

            m_part.ParentGroup.Scene.EventManager.TriggerRezScripts(
                m_part, LSLItems.ToArray(), startParam, postOnRez, stateSource, RezzedFrom);
            if (SendUpdate)
            {
                m_part.ScheduleUpdate(PrimUpdateFlags.PrimFlags); //We only need to send a compressed
            }
        }
Example #5
0
        /// <summary>
        /// Start a script which is in this prim's inventory.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public void CreateScriptInstance(TaskInventoryItem item, int startParam, bool postOnRez, string engine, int stateSource)
        {
            // m_log.InfoFormat(
            //     "[PRIM INVENTORY]: " +
            //     "Starting script {0}, {1} in prim {2}, {3}",
            //     item.Name, item.ItemID, Name, UUID);

            if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
            {
                return;
            }

            m_part.AddFlag(PrimFlags.Scripted);

            if (!m_part.ParentGroup.Scene.RegionInfo.RegionSettings.DisableScripts)
            {
                if (stateSource == 1 && // Prim crossing
                    m_part.ParentGroup.Scene.m_trustBinaries)
                {
                    m_items[item.ItemID].PermsMask    = 0;
                    m_items[item.ItemID].PermsGranter = UUID.Zero;
                    m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
                        m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource);
                    m_part.ParentGroup.AddActiveScriptCount(1);
                    m_part.ScheduleFullUpdate();
                    return;
                }
                IAssetCache cache = m_part.ParentGroup.Scene.CommsManager.AssetCache;

                cache.GetAsset(item.AssetID, delegate(UUID assetID, AssetBase asset)
                {
                    if (null == asset)
                    {
                        m_log.ErrorFormat(
                            "[PRIM INVENTORY]: " +
                            "Couldn't start script {0}, {1} since asset ID {2} could not be found",
                            item.Name, item.ItemID, item.AssetID);
                    }
                    else
                    {
                        if (m_part.ParentGroup.m_savedScriptState != null)
                        {
                            RestoreSavedScriptState(item.OldItemID, item.ItemID);
                        }
                        m_items[item.ItemID].PermsMask    = 0;
                        m_items[item.ItemID].PermsGranter = UUID.Zero;
                        string script = Utils.BytesToString(asset.Data);
                        m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
                            m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource);
                        m_part.ParentGroup.AddActiveScriptCount(1);
                        m_part.ScheduleFullUpdate();
                    }
                }, false);
            }
        }
Example #6
0
        public ISceneEntity CreateEntity(
            ISceneEntity baseEntity, UUID ownerID, UUID groupID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape)
        {
            if (Array.IndexOf(creationCapabilities, (PCode)shape.PCode) < 0)
            {
                m_log.DebugFormat("[VEGETATION]: PCode {0} not handled by {1}", shape.PCode, Name);
                return(null);
            }

            SceneObjectGroup sceneObject = baseEntity as SceneObjectGroup;
            SceneObjectPart  rootPart    = (SceneObjectPart)sceneObject.GetChildPart(sceneObject.UUID);

            rootPart.AddFlag(PrimFlags.Phantom);
            if (rootPart.Shape.PCode != (byte)PCode.Grass)
            {
                // Tree size has to be adapted depending on its type
                switch ((Tree)rootPart.Shape.State)
                {
                case Tree.Cypress1:
                case Tree.Cypress2:
                case Tree.Palm1:
                case Tree.Palm2:
                case Tree.WinterAspen:
                    rootPart.Scale = new Vector3(4, 4, 10);
                    break;

                case Tree.WinterPine1:
                case Tree.WinterPine2:
                    rootPart.Scale = new Vector3(4, 4, 20);
                    break;

                case Tree.Dogwood:
                    rootPart.Scale = new Vector3(6.5f, 6.5f, 6.5f);
                    break;

                // case... other tree types
                // tree.Scale = new Vector3(?, ?, ?);
                // break;

                default:
                    rootPart.Scale = new Vector3(4, 4, 4);
                    break;
                }
            }

            m_scene.SceneGraph.AddPrimToScene(sceneObject);
            sceneObject.ScheduleGroupUpdate(PrimUpdateFlags.FullUpdate);
            sceneObject.SetGroup(groupID, null);

            return(sceneObject);
        }
        public SceneObjectGroup CreateEntity(
            UUID ownerID, UUID groupID, Vector3 pos, Quaternion rot, PrimitiveBaseShape shape)
        {
            if (Array.IndexOf(creationCapabilities, (PCode)shape.PCode) < 0)
            {
                m_log.DebugFormat("[VEGETATION]: PCode {0} not handled by {1}", shape.PCode, Name);
                return(null);
            }

            SceneObjectGroup sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
            SceneObjectPart  rootPart    = sceneObject.GetPart(sceneObject.UUID);

            rootPart.AddFlag(PrimFlags.Phantom);

            m_scene.AddNewSceneObject(sceneObject, true);
            sceneObject.SetGroup(groupID, null);

            return(sceneObject);
        }
Example #8
0
        public SceneObjectGroup AddTree(
            UUID uuid, UUID groupID, Vector3 scale, Quaternion rotation, Vector3 position, Tree treeType, bool newTree)
        {
            PrimitiveBaseShape treeShape = new PrimitiveBaseShape();

            treeShape.PathCurve = 16;
            treeShape.PathEnd   = 49900;
            treeShape.PCode     = newTree ? (byte)PCode.NewTree : (byte)PCode.Tree;
            treeShape.Scale     = scale;
            treeShape.State     = (byte)treeType;

            SceneObjectGroup sog      = new SceneObjectGroup(uuid, position, rotation, treeShape);
            SceneObjectPart  rootPart = sog.RootPart;

            rootPart.AddFlag(PrimFlags.Phantom);

            sog.SetGroup(groupID, null);
            m_scene.AddNewSceneObject(sog, true, false);
            sog.IsSelected      = false;
            rootPart.IsSelected = false;
            sog.InvalidateEffectivePerms();
            return(sog);
        }