/// <summary>
        /// Initializes a new region using the passed regioninfo
        /// </summary>
        /// <returns></returns>
        /// <param name="simBase">Sim base.</param>
        /// <param name="regionInfo">Region info.</param>
        /// <param name="currentInfo">Current region info.</param>
        public virtual RegionInfo CreateNewRegion(ISimulationBase simBase, RegionInfo regionInfo, Dictionary <string, int> currentInfo)
        {
            ReadConfig(simBase);
            _regionData = new RegionData();
            _regionData.Init();

            // something wrong here, prompt for details
            if (regionInfo == null)
            {
                return(CreateNewRegion(simBase, currentInfo));
            }

            BackupFile = regionInfo.RegionName;

            if (m_scene != null)
            {
                IGridRegisterModule gridRegister = m_scene.RequestModuleInterface <IGridRegisterModule>();
                //Re-register so that if the position has changed, we get the new neighbors
                gridRegister.RegisterRegionWithGrid(m_scene, true, false, null);

                ForceBackup();

                MainConsole.Instance.Info("[FileBasedSimulationData]: Save completed.");
            }

            return(regionInfo);
        }
Example #2
0
        public void CreateMapTileAsync(AssetBase Mapasset, AssetBase Terrainasset, UUID lastMapRegionUUID, UUID lastTerrainRegionUUID)
        {
            IMapImageGenerator terrain = m_scene.RequestModuleInterface <IMapImageGenerator>();

            if (terrain == null)
            {
                return;
            }

            //Delete the old assets
            if (lastMapRegionUUID != UUID.Zero)
            {
                m_scene.AssetService.Delete(lastMapRegionUUID.ToString());
            }
            if (lastTerrainRegionUUID != UUID.Zero)
            {
                m_scene.AssetService.Delete(lastTerrainRegionUUID.ToString());
            }

            byte[] terraindata, mapdata;
            terrain.CreateMapTile(out terraindata, out mapdata);
            if (terraindata != null)
            {
                Terrainasset.Data = terraindata;
                m_scene.AssetService.Store(Terrainasset);
            }

            if (mapdata != null)
            {
                Mapasset.Data = mapdata;
                m_scene.AssetService.Store(Mapasset);
                RegenerateMaptile(Mapasset.ID, Mapasset.Data);
            }
            else if (Terrainasset != null)
            {
                RegenerateMaptile(Terrainasset.ID, Terrainasset.Data);
            }

            if (Terrainasset != null)
            {
                Terrainasset.Data = null;
                Terrainasset      = null;
            }
            if (Mapasset != null)
            {
                Mapasset.Data = null;
                Mapasset      = null;
            }

            //Update the grid map
            IGridRegisterModule gridRegModule = m_scene.RequestModuleInterface <IGridRegisterModule>();

            if (gridRegModule != null)
            {
                gridRegModule.UpdateGridRegion(m_scene);
            }
        }
Example #3
0
        public void RemoveRegion(IScene scene)
        {
            scene.SimulationDataService.RemoveRegion();
            IGridRegisterModule gridRegisterModule = scene.RequestModuleInterface <IGridRegisterModule>();

            gridRegisterModule.DeleteRegion(scene);
            MainConsole.Instance.Warn("Region " + scene.RegionInfo.RegionName + " was removed, restarting the instance in 10 seconds");
            System.Threading.Thread.Sleep(10000);
            Environment.Exit(0);
        }
Example #4
0
 private void OnUpdateRegion(object source, ElapsedEventArgs e)
 {
     if (m_scene != null)
     {
         IGridRegisterModule gridRegModule = m_scene.RequestModuleInterface <IGridRegisterModule>();
         if (gridRegModule != null)
         {
             gridRegModule.UpdateGridRegion(m_scene);
         }
     }
 }
Example #5
0
        private RegionInfo CreateRegionFromConsole(RegionInfo info)
        {
            if (info == null)
            {
                info          = new RegionInfo();
                info.RegionID = UUID.Random();
            }
            info.RegionName = MainConsole.Instance.Prompt("Region Name: ", info.RegionName);

            info.RegionLocX =
                int.Parse(MainConsole.Instance.Prompt("Region Location X: ",
                                                      ((info.RegionLocX == 0 ? 1000 : info.RegionLocX / Constants.RegionSize)).ToString())) *
                Constants.RegionSize;
            info.RegionLocY =
                int.Parse(MainConsole.Instance.Prompt("Region location Y: ",
                                                      ((info.RegionLocY == 0 ? 1000 : info.RegionLocY / Constants.RegionSize)).ToString())) *
                Constants.RegionSize;

            info.RegionSizeX = int.Parse(MainConsole.Instance.Prompt("Region size X: ", info.RegionSizeX.ToString()));
            info.RegionSizeY = int.Parse(MainConsole.Instance.Prompt("Region size Y: ", info.RegionSizeY.ToString()));

            info.RegionType = MainConsole.Instance.Prompt("Region Type: ",
                                                          (info.RegionType == "" ? "Mainland" : info.RegionType));

            info.SeeIntoThisSimFromNeighbor =
                bool.Parse(
                    MainConsole.Instance.Prompt("See into this sim from neighbors: ",
                                                info.SeeIntoThisSimFromNeighbor.ToString().ToLower(),
                                                new List <string>()
            {
                "true", "false"
            }).ToLower());

            info.ObjectCapacity =
                int.Parse(MainConsole.Instance.Prompt("Object capacity: ",
                                                      info.ObjectCapacity == 0
                                                          ? "50000"
                                                          : info.ObjectCapacity.ToString()));

            if (m_scene != null)
            {
                IGridRegisterModule gridRegister = m_scene.RequestModuleInterface <IGridRegisterModule>();
                gridRegister.UpdateGridRegion(m_scene);

                ForceBackup();

                MainConsole.Instance.Info("[FileBasedSimulationData]: Save completed.");
            }

            return(info);
        }
        private object EventManager_OnGenericEvent(string FunctionName, object parameters)
        {
            if (FunctionName != "PreRegisterRegion")
            {
                return(null);
            }
            IConfig handlerConfig = m_config.Configs["Handlers"];

            if (handlerConfig.GetString("SimulationInHandler", "") != Name)
            {
                return(null);
            }

            if (m_LocalSimulationService != null)
            {
                return(null);
            }

            bool        secure = handlerConfig.GetBoolean("SecureSimulation", true);
            IHttpServer server =
                m_registry.RequestModuleInterface <ISimulationBase>().GetHttpServer(
                    (uint)handlerConfig.GetInt("SimulationInHandlerPort"));

            m_LocalSimulationService = m_registry.RequestModuleInterface <ISimulationService>();

            string path = "/" + UUID.Random().ToString() + "/agent/";

            IGridRegisterModule registerModule = m_registry.RequestModuleInterface <IGridRegisterModule>();

            if (registerModule != null && secure)
            {
                registerModule.AddGenericInfo("SimulationAgent", path);
            }
            else
            {
                secure = false;
                path   = "/agent/";
            }

            server.AddHTTPHandler(path,
                                  new AgentHandler(m_LocalSimulationService.GetInnerService(), m_registry, secure).
                                  Handler);
            server.AddHTTPHandler("/object/",
                                  new ObjectHandler(m_LocalSimulationService.GetInnerService(), m_config).Handler);
            return(null);
        }
Example #7
0
        /// <summary>
        /// The god has requested that we update something in the region configs
        /// </summary>
        /// <param name="client"></param>
        /// <param name="BillableFactor"></param>
        /// <param name="PricePerMeter"></param>
        /// <param name="EstateID"></param>
        /// <param name="RegionFlags"></param>
        /// <param name="SimName"></param>
        /// <param name="RedirectX"></param>
        /// <param name="RedirectY"></param>
        public void GodUpdateRegionInfoUpdate(IClientAPI client, float BillableFactor, int PricePerMeter, ulong EstateID, ulong RegionFlags, byte[] SimName, int RedirectX, int RedirectY)
        {
            //Check god perms
            if (!((Scene)client.Scene).Permissions.IsGod(client.AgentId))
            {
                return;
            }

            //Update their current region with new information
            string oldRegionName = client.Scene.RegionInfo.RegionName;

            client.Scene.RegionInfo.RegionName = Utils.BytesToString(SimName);

            //Set the region loc X and Y
            if (RedirectX != 0)
            {
                client.Scene.RegionInfo.RegionLocX = RedirectX * (int)Constants.RegionSize;
            }
            if (RedirectY != 0)
            {
                client.Scene.RegionInfo.RegionLocY = RedirectY * (int)Constants.RegionSize;
            }

            //Update the estate ID
            if (client.Scene.RegionInfo.EstateSettings.EstateID != EstateID)
            {
                //If they are changing estates, we have to ask them for the password to the estate, so send them an llTextBox
                string        Password = "";
                IWorldComm    comm     = client.Scene.RequestModuleInterface <IWorldComm>();
                IDialogModule dialog   = client.Scene.RequestModuleInterface <IDialogModule>();
                //If the comms module is not null, we send the user a text box on a random channel so that they cannot be tapped into
                if (comm != null && dialog != null)
                {
                    int Channel = new Random().Next(1000, 100000);
                    //Block the channel so NOONE can access it until the question is answered
                    comm.AddBlockedChannel(Channel);
                    ChannelDirectory.Add(client.AgentId, new EstateChange()
                    {
                        Channel = Channel, EstateID = (uint)EstateID, OldEstateID = ((Scene)client.Scene).RegionInfo.EstateSettings.EstateID
                    });
                    //Set the ID temperarily, if it doesn't work, we will revert it later
                    ((Scene)client.Scene).RegionInfo.EstateSettings.EstateID = (uint)EstateID;
                    client.OnChatFromClient += OnChatFromClient;
                    dialog.SendTextBoxToUser(client.AgentId, "Please type the password for the estate you wish to join. (Note: this channel is secured and will not be able to be listened in on)", Channel, "Server", UUID.Zero, UUID.Zero);
                }
                else
                {
                    bool changed = DataManager.DataManager.RequestPlugin <IEstateConnector>().LinkRegion(((Scene)client.Scene).RegionInfo.RegionID, (int)EstateID, Util.Md5Hash(Password));
                    if (!changed)
                    {
                        client.SendAgentAlertMessage("Unable to connect to the given estate.", false);
                    }
                    else
                    {
                        client.Scene.RegionInfo.EstateSettings.EstateID = (uint)EstateID;
                        client.Scene.RegionInfo.EstateSettings.Save();
                    }
                }
            }

            //Set the other settings
            client.Scene.RegionInfo.EstateSettings.BillableFactor = BillableFactor;
            client.Scene.RegionInfo.EstateSettings.PricePerMeter  = PricePerMeter;
            client.Scene.RegionInfo.EstateSettings.SetFromFlags(RegionFlags);

            client.Scene.RegionInfo.RegionSettings.AllowDamage    = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.AllowDamage) == (ulong)OpenMetaverse.RegionFlags.AllowDamage);
            client.Scene.RegionInfo.RegionSettings.FixedSun       = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SunFixed) == (ulong)OpenMetaverse.RegionFlags.SunFixed);
            client.Scene.RegionInfo.RegionSettings.BlockTerraform = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.BlockTerraform) == (ulong)OpenMetaverse.RegionFlags.BlockTerraform);
            client.Scene.RegionInfo.RegionSettings.Sandbox        = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.Sandbox) == (ulong)OpenMetaverse.RegionFlags.Sandbox);

            //Update skipping scripts/physics/collisions
            IEstateModule mod = client.Scene.RequestModuleInterface <IEstateModule>();

            if (mod != null)
            {
                mod.SetSceneCoreDebug(((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipScripts) == (ulong)OpenMetaverse.RegionFlags.SkipScripts),
                                      ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipCollisions) == (ulong)OpenMetaverse.RegionFlags.SkipCollisions),
                                      ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipPhysics) == (ulong)OpenMetaverse.RegionFlags.SkipPhysics));
            }

            //Save the changes
            client.Scene.RegionInfo.EstateSettings.Save();
            client.Scene.RegionInfo.RegionSettings.Save();

            //Save the changes
            IConfig config = m_config.Configs["RegionStartup"];

            if (config != null)
            {
                //TERRIBLE! Needs to be modular, but we can't access the module from a scene module!
                if (config.GetString("Default") == "RegionLoaderDataBaseSystem")
                {
                    SaveChangesDatabase(client.Scene.RegionInfo);
                }
                else
                {
                    SaveChangesFile(oldRegionName, client.Scene.RegionInfo);
                }
            }
            else
            {
                SaveChangesFile(oldRegionName, client.Scene.RegionInfo);
            }


            //Tell the clients to update all references to the new settings
            foreach (IScenePresence sp in client.Scene.GetScenePresences())
            {
                HandleRegionInfoRequest(sp.ControllingClient, ((Scene)client.Scene));
            }

            //Update the grid server as well
            IGridRegisterModule gridRegisterModule = client.Scene.RequestModuleInterface <IGridRegisterModule>();

            if (gridRegisterModule != null)
            {
                gridRegisterModule.UpdateGridRegion(client.Scene);
            }
        }
Example #8
0
        public LSL_Integer llEdgeOfWorld(LSL_Vector pos, LSL_Vector dir)
        {
            if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID))
            {
                return(0);
            }

            // edge will be used to pass the Region Coordinates offset
            // we want to check for a neighboring sim
            LSL_Vector edge = new LSL_Vector(0, 0, 0);

            if (dir.x == 0)
            {
                if (dir.y == 0)
                {
                    // Direction vector is 0,0 so return
                    // false since we're staying in the sim
                    return(0);
                }
                // Y is the only valid direction
                edge.y = dir.y / Math.Abs(dir.y);
            }
            else
            {
                LSL_Float mag;
                if (dir.x > 0)
                {
                    mag = (World.RegionInfo.RegionSizeX - pos.x) / dir.x;
                }
                else
                {
                    mag = (pos.x / dir.x);
                }

                mag = Math.Abs(mag);

                edge.y = pos.y + (dir.y * mag);

                if (edge.y > World.RegionInfo.RegionSizeY || edge.y < 0)
                {
                    // Y goes out of bounds first
                    edge.y = dir.y / Math.Abs(dir.y);
                }
                else
                {
                    // X goes out of bounds first or its a corner exit
                    edge.y = 0;
                    edge.x = dir.x / Math.Abs(dir.x);
                }
            }
            IGridRegisterModule service   = World.RequestModuleInterface <IGridRegisterModule>();
            List <GridRegion>   neighbors = new List <GridRegion>();

            if (service != null)
            {
                neighbors = service.GetNeighbors(World);
            }

            int neighborX = World.RegionInfo.RegionLocX + (int)dir.x;
            int neighborY = World.RegionInfo.RegionLocY + (int)dir.y;

            if (neighbors.Any(neighbor => neighbor.RegionLocX == neighborX && neighbor.RegionLocY == neighborY))
            {
                return(LSL_Integer.TRUE);
            }

            return(LSL_Integer.FALSE);
        }
Example #9
0
        protected void SetRegionInfoOption(string module, string[] cmdparams)
        {
            IScene scene = MainConsole.Instance.ConsoleScene;

            if (scene == null)
            {
                scene = m_scenes[0];
            }
            #region 3 Params needed
            if (cmdparams.Length < 4)
            {
                m_log.Warn("Not enough parameters!");
                return;
            }
            if (cmdparams[2] == "Maturity")
            {
                if (cmdparams[3] == "PG")
                {
                    scene.RegionInfo.AccessLevel = Util.ConvertMaturityToAccessLevel(0);
                }
                else if (cmdparams[3] == "Mature")
                {
                    scene.RegionInfo.AccessLevel = Util.ConvertMaturityToAccessLevel(1);
                }
                else if (cmdparams[3] == "Adult")
                {
                    scene.RegionInfo.AccessLevel = Util.ConvertMaturityToAccessLevel(2);
                }
                else
                {
                    m_log.Warn("Your parameter did not match any existing parameters. Try PG, Mature, or Adult");
                    return;
                }
                scene.RegionInfo.RegionSettings.Save();
                //Tell the grid about the changes
                IGridRegisterModule gridRegModule = scene.RequestModuleInterface <IGridRegisterModule>();
                if (gridRegModule != null)
                {
                    gridRegModule.UpdateGridRegion(scene);
                }
            }
            #endregion
            #region 4 Params needed
            if (cmdparams.Length < 4)
            {
                m_log.Warn("Not enough parameters!");
                return;
            }
            if (cmdparams[2] == "AddEstateBan".ToLower())
            {
                EstateBan EB = new EstateBan();
                EB.BannedUserID = m_scenes[0].UserAccountService.GetUserAccount(UUID.Zero, cmdparams[3], cmdparams[4]).PrincipalID;
                scene.RegionInfo.EstateSettings.AddBan(EB);
            }
            if (cmdparams[2] == "AddEstateManager".ToLower())
            {
                scene.RegionInfo.EstateSettings.AddEstateManager(m_scenes[0].UserAccountService.GetUserAccount(UUID.Zero, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "AddEstateAccess".ToLower())
            {
                scene.RegionInfo.EstateSettings.AddEstateUser(m_scenes[0].UserAccountService.GetUserAccount(UUID.Zero, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "RemoveEstateBan".ToLower())
            {
                scene.RegionInfo.EstateSettings.RemoveBan(m_scenes[0].UserAccountService.GetUserAccount(UUID.Zero, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "RemoveEstateManager".ToLower())
            {
                scene.RegionInfo.EstateSettings.RemoveEstateManager(m_scenes[0].UserAccountService.GetUserAccount(UUID.Zero, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "RemoveEstateAccess".ToLower())
            {
                scene.RegionInfo.EstateSettings.RemoveEstateUser(m_scenes[0].UserAccountService.GetUserAccount(UUID.Zero, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            #endregion
            scene.RegionInfo.RegionSettings.Save();
            scene.RegionInfo.EstateSettings.Save();
        }
Example #10
0
        /// <summary>
        ///     The god has requested that we update something in the region configuration
        /// </summary>
        /// <param name="client"></param>
        /// <param name="BillableFactor"></param>
        /// <param name="PricePerMeter"></param>
        /// <param name="EstateID"></param>
        /// <param name="RegionFlags"></param>
        /// <param name="SimName"></param>
        /// <param name="RedirectX"></param>
        /// <param name="RedirectY"></param>
        public void GodUpdateRegionInfoUpdate(IClientAPI client, float BillableFactor, int PricePerMeter, ulong EstateID,
                                              ulong RegionFlags, byte [] SimName, int RedirectX, int RedirectY)
        {
            IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();

            //Check god perms
            if (!client.Scene.Permissions.IsGod(client.AgentId))
            {
                return;
            }

            string oldRegionName = client.Scene.RegionInfo.RegionName;

            //Update their current region with new information
            if (Utils.BytesToString(SimName) != oldRegionName)
            {
                client.Scene.RegionInfo.RegionName = Utils.BytesToString(SimName);
                MainConsole.Instance.InfoFormat("[God] Region {0} has been renamed to {1}", oldRegionName, Utils.BytesToString(SimName));
                client.SendAgentAlertMessage("Region has been renamed to " + Utils.BytesToString(SimName), true);
            }

            // Save the old region locations
            int oldRegionLocX = client.Scene.RegionInfo.RegionLocX;
            int oldRegionLocY = client.Scene.RegionInfo.RegionLocY;
            int newRegionLocX = oldRegionLocX;
            int newRegionLocY = oldRegionLocY;

            //Set the region loc X and Y
            if (RedirectX != 0)
            {
                client.Scene.RegionInfo.RegionLocX = RedirectX * Constants.RegionSize;
                newRegionLocX = RedirectX;
            }
            if (RedirectY != 0)
            {
                client.Scene.RegionInfo.RegionLocY = RedirectY * Constants.RegionSize;
                newRegionLocY = RedirectY;
            }

            // Check if there's changes to display the new coords on the console and inworld
            if (newRegionLocX != oldRegionLocX || newRegionLocY != oldRegionLocY)
            {
                var oldMapLocX = oldRegionLocX / Constants.RegionSize;
                var oldMapLocY = oldRegionLocY / Constants.RegionSize;
                var newMapLocX = newRegionLocX / Constants.RegionSize;
                var newMapLocY = newRegionLocY / Constants.RegionSize;

                MainConsole.Instance.InfoFormat("[God] Region {0} has been moved from {1},{2} to {3},{4}",
                                                client.Scene.RegionInfo.RegionName,
                                                oldMapLocX, oldMapLocY,
                                                newMapLocX, newMapLocY);
                client.SendAgentAlertMessage("Region has been moved from " + oldMapLocX + "," + oldMapLocY
                                             + " to " + newMapLocX + "," + newMapLocY, true);
            }

            //Update the estate ID
            if (client.Scene.RegionInfo.EstateSettings.EstateID != EstateID)
            {
                bool changed = estateConnector.LinkRegion(client.Scene.RegionInfo.RegionID, (int)EstateID);
                if (!changed)
                {
                    client.SendAgentAlertMessage("Unable to connect to the given estate.", false);
                }
                else
                {
                    client.Scene.RegionInfo.EstateSettings.EstateID = (uint)EstateID;
                    estateConnector.SaveEstateSettings(client.Scene.RegionInfo.EstateSettings);
                }
            }

            //Set/Reset Estate settings
            client.Scene.RegionInfo.EstateSettings.BillableFactor = BillableFactor;
            client.Scene.RegionInfo.EstateSettings.PricePerMeter  = PricePerMeter;
            client.Scene.RegionInfo.EstateSettings.SetFromFlags(RegionFlags);

            // Set/Reset Region flags
            client.Scene.RegionInfo.RegionSettings.AllowDamage =
                ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.AllowDamage) == (ulong)OpenMetaverse.RegionFlags.AllowDamage);
            client.Scene.RegionInfo.RegionSettings.FixedSun = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SunFixed) ==
                                                               (ulong)OpenMetaverse.RegionFlags.SunFixed);
            client.Scene.RegionInfo.RegionSettings.BlockTerraform =
                ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.BlockTerraform) == (ulong)OpenMetaverse.RegionFlags.BlockTerraform);
            client.Scene.RegionInfo.RegionSettings.Sandbox =
                ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.Sandbox) == (ulong)OpenMetaverse.RegionFlags.Sandbox);

            //Update skipping scripts/physics/collisions
            IEstateModule mod = client.Scene.RequestModuleInterface <IEstateModule> ();

            if (mod != null)
            {
                mod.SetSceneCoreDebug(
                    ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipScripts) == (ulong)OpenMetaverse.RegionFlags.SkipScripts),
                    ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipCollisions) == (ulong)OpenMetaverse.RegionFlags.SkipCollisions),
                    ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipPhysics) == (ulong)OpenMetaverse.RegionFlags.SkipPhysics));
            }

            //Save the changes
            estateConnector.SaveEstateSettings(client.Scene.RegionInfo.EstateSettings);

            //Tell the clients to update all references to the new settings
            foreach (IScenePresence sp in client.Scene.GetScenePresences())
            {
                HandleRegionInfoRequest(sp.ControllingClient, client.Scene);
            }

            //Update the grid server as well
            IGridRegisterModule gridRegisterModule = client.Scene.RequestModuleInterface <IGridRegisterModule> ();

            if (gridRegisterModule != null)
            {
                gridRegisterModule.UpdateGridRegion(client.Scene);
            }
        }
Example #11
0
        /// <summary>
        ///   The god has requested that we update something in the region configs
        /// </summary>
        /// <param name = "client"></param>
        /// <param name = "BillableFactor"></param>
        /// <param name = "PricePerMeter"></param>
        /// <param name = "EstateID"></param>
        /// <param name = "RegionFlags"></param>
        /// <param name = "SimName"></param>
        /// <param name = "RedirectX"></param>
        /// <param name = "RedirectY"></param>
        public void GodUpdateRegionInfoUpdate(IClientAPI client, float BillableFactor, int PricePerMeter, ulong EstateID,
                                              ulong RegionFlags, byte[] SimName, int RedirectX, int RedirectY)
        {
            //Check god perms
            if (!client.Scene.Permissions.IsGod(client.AgentId))
            {
                return;
            }

            //Update their current region with new information
            string oldRegionName = client.Scene.RegionInfo.RegionName;

            client.Scene.RegionInfo.RegionName = Utils.BytesToString(SimName);

            //Set the region loc X and Y
            if (RedirectX != 0)
            {
                client.Scene.RegionInfo.RegionLocX = RedirectX * Constants.RegionSize;
            }
            if (RedirectY != 0)
            {
                client.Scene.RegionInfo.RegionLocY = RedirectY * Constants.RegionSize;
            }

            //Update the estate ID
            if (client.Scene.RegionInfo.EstateSettings.EstateID != EstateID)
            {
                bool changed = DataManager.DataManager.RequestPlugin <IEstateConnector>().LinkRegion(
                    client.Scene.RegionInfo.RegionID, (int)EstateID);
                if (!changed)
                {
                    client.SendAgentAlertMessage("Unable to connect to the given estate.", false);
                }
                else
                {
                    client.Scene.RegionInfo.EstateSettings.EstateID = (uint)EstateID;
                    client.Scene.RegionInfo.EstateSettings.Save();
                }
            }

            //Set the other settings
            client.Scene.RegionInfo.EstateSettings.BillableFactor = BillableFactor;
            client.Scene.RegionInfo.EstateSettings.PricePerMeter  = PricePerMeter;
            client.Scene.RegionInfo.EstateSettings.SetFromFlags(RegionFlags);

            client.Scene.RegionInfo.RegionSettings.AllowDamage = ((RegionFlags &
                                                                   (ulong)OpenMetaverse.RegionFlags.AllowDamage) ==
                                                                  (ulong)OpenMetaverse.RegionFlags.AllowDamage);
            client.Scene.RegionInfo.RegionSettings.FixedSun = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SunFixed) ==
                                                               (ulong)OpenMetaverse.RegionFlags.SunFixed);
            client.Scene.RegionInfo.RegionSettings.BlockTerraform = ((RegionFlags &
                                                                      (ulong)OpenMetaverse.RegionFlags.BlockTerraform) ==
                                                                     (ulong)OpenMetaverse.RegionFlags.BlockTerraform);
            client.Scene.RegionInfo.RegionSettings.Sandbox = ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.Sandbox) ==
                                                              (ulong)OpenMetaverse.RegionFlags.Sandbox);

            //Update skipping scripts/physics/collisions
            IEstateModule mod = client.Scene.RequestModuleInterface <IEstateModule>();

            if (mod != null)
            {
                mod.SetSceneCoreDebug(
                    ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipScripts) ==
                     (ulong)OpenMetaverse.RegionFlags.SkipScripts),
                    ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipCollisions) ==
                     (ulong)OpenMetaverse.RegionFlags.SkipCollisions),
                    ((RegionFlags & (ulong)OpenMetaverse.RegionFlags.SkipPhysics) ==
                     (ulong)OpenMetaverse.RegionFlags.SkipPhysics));
            }

            //Save the changes
            client.Scene.RegionInfo.EstateSettings.Save();
            client.Scene.RegionInfo.RegionSettings.Save();

            //Save the changes
            IConfig config = m_config.Configs["RegionStartup"];

            if (config != null)
            {
                //TERRIBLE! Needs to be modular, but we can't access the module from a scene module!
                if (config.GetString("Default") == "RegionLoaderDataBaseSystem")
                {
                    SaveChangesDatabase(client.Scene.RegionInfo);
                }
                else
                {
                    SaveChangesFile(oldRegionName, client.Scene.RegionInfo);
                }
            }
            else
            {
                SaveChangesFile(oldRegionName, client.Scene.RegionInfo);
            }


            //Tell the clients to update all references to the new settings
            foreach (IScenePresence sp in client.Scene.GetScenePresences())
            {
                HandleRegionInfoRequest(sp.ControllingClient, client.Scene);
            }

            //Update the grid server as well
            IGridRegisterModule gridRegisterModule = client.Scene.RequestModuleInterface <IGridRegisterModule>();

            if (gridRegisterModule != null)
            {
                gridRegisterModule.UpdateGridRegion(client.Scene);
            }
        }
        /// <summary>
        /// Creates/updates a region from console.
        /// </summary>
        /// <returns>The region from console.</returns>
        /// <param name="info">Info.</param>
        /// <param name="prompt">If set to <c>true</c> prompt.</param>
        /// <param name="currentInfo">Current info.</param>
        RegionInfo CreateRegionFromConsole(RegionInfo info, Boolean prompt, Dictionary <string, int> currentInfo)
        {
            if (info == null || info.NewRegion)
            {
                if (info == null)
                {
                    info = new RegionInfo();
                }

                info.RegionID = UUID.Random();

                if (currentInfo != null)
                {
                    info.RegionLocX = currentInfo ["minX"] > 0 ? currentInfo ["minX"] : 1000 * Constants.RegionSize;
                    info.RegionLocY = currentInfo ["minY"] > 0 ? currentInfo ["minY"] : 1000 * Constants.RegionSize;
                    info.RegionPort = currentInfo ["port"] > 0 ? currentInfo ["port"] + 1 : 9000;
                }
                else
                {
                    info.RegionLocX = 1000 * Constants.RegionSize;
                    info.RegionLocY = 1000 * Constants.RegionSize;
                    info.RegionPort = 9000;
                }
                prompt = true;
            }

            // prompt for user input
            if (prompt)
            {
                Utilities.MarkovNameGenerator rNames = new Utilities.MarkovNameGenerator();
                string regionName = rNames.FirstName(m_regionNameSeed == null ? Utilities.RegionNames: m_regionNameSeed, 3, 7);
                if (info.RegionName != "")
                {
                    regionName = info.RegionName;
                }

                do
                {
                    info.RegionName = MainConsole.Instance.Prompt("Region Name (? for suggestion)", regionName);
                    if (info.RegionName == "" || info.RegionName == "?")
                    {
                        regionName      = rNames.NextName;
                        info.RegionName = "";
                        continue;
                    }
                }while (info.RegionName == "");
                rNames.Reset();

                info.RegionLocX =
                    int.Parse(MainConsole.Instance.Prompt("Region Location X",
                                                          ((info.RegionLocX == 0
                            ? 1000
                            : info.RegionLocX / Constants.RegionSize)).ToString())) * Constants.RegionSize;

                info.RegionLocY =
                    int.Parse(MainConsole.Instance.Prompt("Region location Y",
                                                          ((info.RegionLocY == 0
                            ? 1000
                            : info.RegionLocY / Constants.RegionSize)).ToString())) * Constants.RegionSize;

                //info.RegionLocZ =
                //    int.Parse (MainConsole.Instance.Prompt ("Region location Z",
                //        ((info.RegionLocZ == 0
                //            ? 0
                //            : info.RegionLocZ / Constants.RegionSize)).ToString ())) * Constants.RegionSize;

                info.RegionSizeX = int.Parse(MainConsole.Instance.Prompt("Region size X", info.RegionSizeX.ToString()));
                info.RegionSizeY = int.Parse(MainConsole.Instance.Prompt("Region size Y", info.RegionSizeY.ToString()));

                // * Mainland / Full Region (Private)
                // * Mainland / Homestead
                // * Mainland / Openspace
                //
                // * Estate / Full Region   (Private)
                //
                info.RegionType = MainConsole.Instance.Prompt("Region Type (Mainland/Estate)",
                                                              (info.RegionType == "" ? "Estate" : info.RegionType));

                // Region presets or advanced setup
                string setupMode;
                string terrainOpen = "Grassland";
                string terrainFull = "Grassland";
                var    responses   = new List <string>();
                if (info.RegionType.ToLower().StartsWith("m"))
                {
                    // Mainland regions
                    info.RegionType = "Mainland / ";
                    responses.Add("Full Region");
                    responses.Add("Homestead");
                    responses.Add("Openspace");
                    responses.Add("Whitecore");                             // TODO: remove?
                    responses.Add("Custom");
                    setupMode = MainConsole.Instance.Prompt("Mainland region type?", "Full Region", responses).ToLower();

                    // allow specifying terrain for Openspace
                    if (setupMode.StartsWith("o"))
                    {
                        terrainOpen = MainConsole.Instance.Prompt("Openspace terrain ( Grassland, Swamp, Aquatic)?", terrainOpen).ToLower();
                    }
                }
                else
                {
                    // Estate regions
                    info.RegionType = "Estate / ";
                    responses.Add("Full Region");
                    responses.Add("Whitecore");                             // TODO: WhiteCore 'standard' setup, rename??
                    responses.Add("Custom");
                    setupMode = MainConsole.Instance.Prompt("Estate region type?", "Full Region", responses).ToLower();
                }

                // terrain can be specified for Full or custom regions
                if (setupMode.StartsWith("f") || setupMode.StartsWith("c"))
                {
                    var tresp = new List <string>();
                    tresp.Add("Flatland");
                    tresp.Add("Grassland");
                    tresp.Add("Hills");
                    tresp.Add("Mountainous");
                    tresp.Add("Island");
                    tresp.Add("Swamp");
                    tresp.Add("Aquatic");
                    string tscape = MainConsole.Instance.Prompt("Terrain Type?", terrainFull, tresp);
                    terrainFull = tscape;
                    // TODO: This would be where we allow selection of preset terrain files
                }

                if (setupMode.StartsWith("c"))
                {
                    info.RegionType    = info.RegionType + "Custom";
                    info.RegionTerrain = terrainFull;

                    // allow port selection
                    info.RegionPort = int.Parse(MainConsole.Instance.Prompt("Region Port", info.RegionPort.ToString()));

                    // Startup mode
                    string scriptStart = MainConsole.Instance.Prompt(
                        "Region Startup - Normal or Delayed startup (normal/delay) : ", "normal").ToLower();
                    info.Startup = scriptStart.StartsWith("n") ? StartupType.Normal : StartupType.Medium;

                    info.SeeIntoThisSimFromNeighbor = MainConsole.Instance.Prompt(
                        "See into this sim from neighbors (yes/no)",
                        info.SeeIntoThisSimFromNeighbor ? "yes" : "no").ToLower() == "yes";

                    info.InfiniteRegion = MainConsole.Instance.Prompt(
                        "Make an infinite region (yes/no)",
                        info.InfiniteRegion ? "yes" : "no").ToLower() == "yes";

                    info.ObjectCapacity =
                        int.Parse(MainConsole.Instance.Prompt("Object capacity",
                                                              info.ObjectCapacity == 0
                                               ? "50000"
                                               : info.ObjectCapacity.ToString()));
                }

                if (setupMode.StartsWith("w"))
                {
                    // 'standard' setup
                    info.RegionType = info.RegionType + "Whitecore";
                    //info.RegionPort;            // use auto assigned port
                    info.RegionTerrain = "Flatland";
                    info.Startup       = StartupType.Normal;
                    info.SeeIntoThisSimFromNeighbor = true;
                    info.InfiniteRegion             = false;
                    info.ObjectCapacity             = 50000;
                }
                if (setupMode.StartsWith("o"))
                {
                    // 'Openspace' setup
                    info.RegionType = info.RegionType + "Openspace";
                    //info.RegionPort;            // use auto assigned port

                    if (terrainOpen.StartsWith("a"))
                    {
                        info.RegionTerrain = "Aquatic";
                    }
                    else if (terrainOpen.StartsWith("s"))
                    {
                        info.RegionTerrain = "Swamp";
                    }
                    else
                    {
                        info.RegionTerrain = "Grassland";
                    }

                    info.Startup = StartupType.Medium;
                    info.SeeIntoThisSimFromNeighbor         = true;
                    info.InfiniteRegion                     = false;
                    info.ObjectCapacity                     = 750;
                    info.RegionSettings.AgentLimit          = 10;
                    info.RegionSettings.AllowLandJoinDivide = false;
                    info.RegionSettings.AllowLandResell     = false;
                }
                if (setupMode.StartsWith("h"))
                {
                    // 'Homestead' setup
                    info.RegionType = info.RegionType + "Homestead";
                    //info.RegionPort;            // use auto assigned port
                    info.RegionTerrain = "Homestead";
                    info.Startup       = StartupType.Medium;
                    info.SeeIntoThisSimFromNeighbor         = true;
                    info.InfiniteRegion                     = false;
                    info.ObjectCapacity                     = 3750;
                    info.RegionSettings.AgentLimit          = 20;
                    info.RegionSettings.AllowLandJoinDivide = false;
                    info.RegionSettings.AllowLandResell     = false;
                }

                if (setupMode.StartsWith("f"))
                {
                    // 'Full Region' setup
                    info.RegionType = info.RegionType + "Full Region";
                    //info.RegionPort;            // use auto assigned port
                    info.RegionTerrain = terrainFull;
                    info.Startup       = StartupType.Normal;
                    info.SeeIntoThisSimFromNeighbor = true;
                    info.InfiniteRegion             = false;
                    info.ObjectCapacity             = 15000;
                    info.RegionSettings.AgentLimit  = 100;
                    if (info.RegionType.StartsWith("M"))                            // defaults are 'true'
                    {
                        info.RegionSettings.AllowLandJoinDivide = false;
                        info.RegionSettings.AllowLandResell     = false;
                    }
                }
            }

            // are we updating or adding??
            if (m_scene != null)
            {
                IGridRegisterModule gridRegister = m_scene.RequestModuleInterface <IGridRegisterModule>();
                //Re-register so that if the position has changed, we get the new neighbors
                gridRegister.RegisterRegionWithGrid(m_scene, true, false, null);

                // Tell clients about changes
                IEstateModule es = m_scene.RequestModuleInterface <IEstateModule> ();
                if (es != null)
                {
                    es.sendRegionHandshakeToAll();
                }

                // in case we have changed the name
                if (m_scene.SimulationDataService.BackupFile != info.RegionName)
                {
                    string oldFile = BuildSaveFileName(m_scene.SimulationDataService.BackupFile);
                    if (File.Exists(oldFile))
                    {
                        File.Delete(oldFile);
                    }
                    m_scene.SimulationDataService.BackupFile = info.RegionName;
                }

                m_scene.SimulationDataService.ForceBackup();

                MainConsole.Instance.InfoFormat("[FileBasedSimulationData]: Save of {0} completed.", info.RegionName);
            }

            return(info);
        }
Example #13
0
        private RegionInfo CreateRegionFromConsole(RegionInfo info)
        {
            if (info == null)
            {
                info            = new RegionInfo();
                info.RegionID   = UUID.Random();
                info.RegionPort = 9000;
            }
            info.RegionName = MainConsole.Instance.Prompt("Region Name: ", info.RegionName);

            info.RegionLocX =
                int.Parse(MainConsole.Instance.Prompt("Region Location X: ",
                                                      ((info.RegionLocX == 0 ? 1000 : info.RegionLocX / Constants.RegionSize)).ToString())) * Constants.RegionSize;
            info.RegionLocY =
                int.Parse(MainConsole.Instance.Prompt("Region location Y: ",
                                                      ((info.RegionLocY == 0 ? 1000 : info.RegionLocY / Constants.RegionSize)).ToString())) *
                Constants.RegionSize;

            info.RegionSizeX = int.Parse(MainConsole.Instance.Prompt("Region size X: ", info.RegionSizeX.ToString()));
            info.RegionSizeY = int.Parse(MainConsole.Instance.Prompt("Region size Y: ", info.RegionSizeY.ToString()));

            info.RegionPort = int.Parse(MainConsole.Instance.Prompt("Region Port: ", info.RegionPort.ToString()));

            info.RegionType = MainConsole.Instance.Prompt("Region Type: ",
                                                          (info.RegionType == "" ? "Flatland" : info.RegionType));

            info.SeeIntoThisSimFromNeighbor =
                bool.Parse(
                    MainConsole.Instance.Prompt("See into this sim from neighbors: ",
                                                info.SeeIntoThisSimFromNeighbor.ToString().ToLower(),
                                                new List <string>()
            {
                "true", "false"
            }).ToLower());
            info.InfiniteRegion =
                bool.Parse(
                    MainConsole.Instance.Prompt("Make an infinite region: ",
                                                info.InfiniteRegion.ToString().ToLower(),
                                                new List <string>()
            {
                "true", "false"
            }).ToLower());

            info.ObjectCapacity =
                int.Parse(MainConsole.Instance.Prompt("Object capacity: ",
                                                      info.ObjectCapacity == 0
                                                          ? "50000"
                                                          : info.ObjectCapacity.ToString()));

            if (m_scene != null)
            {
                IGridRegisterModule gridRegister = m_scene.RequestModuleInterface <IGridRegisterModule>();
                //Re-register so that if the position has changed, we get the new neighbors
                gridRegister.RegisterRegionWithGrid(m_scene, true, false, null);

                ForceBackup();

                MainConsole.Instance.Info("[FileBasedSimulationData]: Save completed.");
            }

            return(info);
        }
Example #14
0
        public void CreateMapTileAsync(object worthless)
        {
            IMapImageGenerator terrain = m_scene.RequestModuleInterface <IMapImageGenerator>();

            if (terrain == null)
            {
                return;
            }

            bool changed = false;

            byte[] terraindata, mapdata;
            terrain.CreateMapTile(out terraindata, out mapdata);
            if (terraindata != null)
            {
                UUID newID = UUID.Zero;
                if (m_scene.RegionInfo.RegionSettings.TerrainMapImageID != UUID.Zero)
                {
                    m_scene.AssetService.UpdateContent(m_scene.RegionInfo.RegionSettings.TerrainMapImageID, terraindata, out newID);
                    m_scene.RegionInfo.RegionSettings.TerrainMapImageID = newID;
                    changed = true;
                }

                if (m_scene.RegionInfo.RegionSettings.TerrainMapImageID == UUID.Zero)
                {
                    AssetBase Terrainasset = new AssetBase(
                        UUID.Random(),
                        "terrainMapImage_" + m_scene.RegionInfo.RegionID.ToString(),
                        AssetType.Simstate,
                        m_scene.RegionInfo.RegionID)
                    {
                        Data        = terraindata,
                        Description = m_scene.RegionInfo.RegionName,
                        Flags       = AssetFlags.Deletable | AssetFlags.Rewritable | AssetFlags.Maptile
                    };
                    newID = m_scene.AssetService.Store(Terrainasset);
                }

                if (m_scene.RegionInfo.RegionSettings.TerrainMapImageID != newID)
                {
                    m_scene.RegionInfo.RegionSettings.TerrainMapImageID = newID;
                    changed = true;
                }
            }

            if (mapdata != null)
            {
                UUID newID = UUID.Zero;
                if (m_scene.RegionInfo.RegionSettings.TerrainImageID != UUID.Zero)
                {
                    m_scene.AssetService.UpdateContent(m_scene.RegionInfo.RegionSettings.TerrainImageID, mapdata, out newID);
                    m_scene.RegionInfo.RegionSettings.TerrainImageID = newID;
                    changed = true;
                }

                if (m_scene.RegionInfo.RegionSettings.TerrainImageID == UUID.Zero)
                {
                    AssetBase Mapasset = new AssetBase(
                        UUID.Random(),
                        "terrainImage_" + m_scene.RegionInfo.RegionID.ToString(),
                        AssetType.Simstate,
                        m_scene.RegionInfo.RegionID)
                    {
                        Data        = mapdata,
                        Description = m_scene.RegionInfo.RegionName,
                        Flags       = AssetFlags.Deletable | AssetFlags.Rewritable | AssetFlags.Maptile
                    };
                    newID = m_scene.AssetService.Store(Mapasset);
                }

                if (m_scene.RegionInfo.RegionSettings.TerrainImageID != newID)
                {
                    m_scene.RegionInfo.RegionSettings.TerrainImageID = newID;
                    changed = true;
                }
            }

            if (changed)//Make sure to update the db with the new settings
            {
                m_scene.RegionInfo.RegionSettings.Save();
            }

            //Update the grid map
            IGridRegisterModule gridRegModule = m_scene.RequestModuleInterface <IGridRegisterModule>();

            if (gridRegModule != null)
            {
                gridRegModule.UpdateGridRegion(m_scene);
            }
        }
Example #15
0
        public void CreateMapTileAsync(object worthless)
        {
            IMapImageGenerator terrain = m_scene.RequestModuleInterface <IMapImageGenerator>();

            if (terrain == null)
            {
                return;
            }

            byte[] terraindata, mapdata;
            terrain.CreateMapTile(out terraindata, out mapdata);
            if (terraindata != null)
            {
                if (m_scene.RegionInfo.RegionSettings.TerrainMapImageID != UUID.Zero)
                {
                    m_scene.RegionInfo.RegionSettings.TerrainMapImageID =
                        m_scene.AssetService.UpdateContent(m_scene.RegionInfo.RegionSettings.TerrainMapImageID,
                                                           terraindata);
                }
                if (m_scene.RegionInfo.RegionSettings.TerrainMapImageID == UUID.Zero)
                //Do not optimize away! UpdateContent can fail sometimes!
                {
                    AssetBase Terrainasset = new AssetBase(
                        UUID.Random(),
                        "terrainMapImage_" + m_scene.RegionInfo.RegionID.ToString(),
                        AssetType.Simstate,
                        m_scene.RegionInfo.RegionID)
                    {
                        Data        = terraindata,
                        Description = m_scene.RegionInfo.RegionName,
                        Flags       =
                            AssetFlags.Deletable | AssetFlags.Rewritable |
                            AssetFlags.Maptile
                    };
                    m_scene.RegionInfo.RegionSettings.TerrainMapImageID = m_scene.AssetService.Store(Terrainasset);
                }
            }

            if (mapdata != null)
            {
                if (m_scene.RegionInfo.RegionSettings.TerrainImageID != UUID.Zero)
                {
                    m_scene.RegionInfo.RegionSettings.TerrainImageID =
                        m_scene.AssetService.UpdateContent(m_scene.RegionInfo.RegionSettings.TerrainImageID, mapdata);
                }
                if (m_scene.RegionInfo.RegionSettings.TerrainImageID == UUID.Zero)
                //Do not optimize away! UpdateContent can fail sometimes!
                {
                    AssetBase Mapasset = new AssetBase(
                        UUID.Random(),
                        "terrainImage_" + m_scene.RegionInfo.RegionID.ToString(),
                        AssetType.Simstate,
                        m_scene.RegionInfo.RegionID)
                    {
                        Data        = mapdata,
                        Description = m_scene.RegionInfo.RegionName,
                        Flags       =
                            AssetFlags.Deletable | AssetFlags.Rewritable | AssetFlags.Maptile
                    };
                    m_scene.RegionInfo.RegionSettings.TerrainImageID = m_scene.AssetService.Store(Mapasset);
                }
            }

            byte[] overlay = GenerateOverlay();
            if (overlay != null)
            {
                if (m_scene.RegionInfo.RegionSettings.ParcelMapImageID != UUID.Zero)
                {
                    m_scene.RegionInfo.RegionSettings.ParcelMapImageID =
                        m_scene.AssetService.UpdateContent(m_scene.RegionInfo.RegionSettings.ParcelMapImageID, overlay);
                }
                if (m_scene.RegionInfo.RegionSettings.ParcelMapImageID == UUID.Zero)
                //Do not optimize away! UpdateContent can fail sometimes!
                {
                    AssetBase Parcelasset = new AssetBase(
                        UUID.Random(),
                        "terrainMapImage_" + m_scene.RegionInfo.RegionID.ToString(),
                        AssetType.Simstate,
                        m_scene.RegionInfo.RegionID)
                    {
                        Data        = overlay,
                        Description = m_scene.RegionInfo.RegionName,
                        Flags       =
                            AssetFlags.Deletable | AssetFlags.Rewritable |
                            AssetFlags.Maptile
                    };
                    m_scene.RegionInfo.RegionSettings.ParcelMapImageID = m_scene.AssetService.Store(Parcelasset);
                }
            }
            else
            {
                m_scene.RegionInfo.RegionSettings.ParcelMapImageID = UUID.Zero;
            }

            m_scene.RegionInfo.RegionSettings.TerrainMapLastRegenerated = DateTime.Now;

            //Update the grid map
            IGridRegisterModule gridRegModule = m_scene.RequestModuleInterface <IGridRegisterModule>();

            if (gridRegModule != null)
            {
                gridRegModule.UpdateGridRegion(m_scene);
            }
        }
Example #16
0
        public Dictionary <string, object> Fill(WebInterface webInterface, string filename, OSHttpRequest httpRequest,
                                                OSHttpResponse httpResponse, Dictionary <string, object> requestParameters,
                                                ITranslator translator, out string response)
        {
            response = null;
            var vars        = new Dictionary <string, object>();
            var gridService = webInterface.Registry.RequestModuleInterface <IGridService> ();


            if (requestParameters.ContainsKey("Submit"))
            {
                string RegionServerURL = requestParameters["RegionServerURL"].ToString();
                // required
                if (RegionServerURL == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionServerURLError") + "</h3>";
                    return(null);
                }

                string RegionName = requestParameters["RegionName"].ToString();
                //string OwnerUUID = requestParameters["OwnerUUID"].ToString();
                string RegionLocX  = requestParameters["RegionLocX"].ToString();
                string RegionLocY  = requestParameters["RegionLocY"].ToString();
                string RegionSizeX = requestParameters["RegionSizeX"].ToString();
                string RegionSizeY = requestParameters["RegionSizeY"].ToString();

                string RegionType       = requestParameters["RegionType"].ToString();
                string RegionPresetType = requestParameters["RegionPresetType"].ToString();
                string RegionTerrain    = requestParameters["RegionTerrain"].ToString();

                string RegionLoadTerrain = requestParameters.ContainsKey("RegionLoadTerrain")
                    ? requestParameters["RegionLoadTerrain"].ToString()
                    : "";
                //bool ToSAccept = requestParameters.ContainsKey("ToSAccept") &&
                //    requestParameters["ToSAccept"].ToString() == "Accepted";

                // string UserType = requestParameters.ContainsKey("UserType")         // only admins can set membership
                //     ? requestParameters ["UserType"].ToString ()
                //     : "Resident";


                // a bit of idiot proofing
                if (RegionName == "")
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionNameError") + "</h3>";
                    return(null);
                }
                if ((RegionLocX == "") || (RegionLocY == ""))
                {
                    response = "<h3>" + translator.GetTranslatedString("RegionLocationError") + "</h3>";
                    return(null);
                }

                // so far so good...
                // build the new region details
                int RegionPort = int.Parse(requestParameters ["RegionPort"].ToString());

                var newRegion = new RegionInfo();

                newRegion.RegionName  = RegionName;
                newRegion.RegionType  = RegionType;
                newRegion.RegionLocX  = int.Parse(RegionLocX);
                newRegion.RegionLocY  = int.Parse(RegionLocY);
                newRegion.RegionSizeX = int.Parse(RegionSizeX);
                newRegion.RegionSizeY = int.Parse(RegionSizeY);

                newRegion.RegionPort = RegionPort;
                newRegion.SeeIntoThisSimFromNeighbor = true;
                newRegion.InfiniteRegion             = false;
                newRegion.ObjectCapacity             = 50000;
                newRegion.Startup = StartupType.Normal;

                var regionPreset = RegionPresetType.ToLower();
                if (regionPreset.StartsWith("c", System.StringComparison.Ordinal))
                {
                    newRegion.RegionPort = int.Parse(requestParameters["RegionPort"].ToString());
                    newRegion.SeeIntoThisSimFromNeighbor = (requestParameters["RegionVisibility"].ToString().ToLower() == "yes");
                    newRegion.InfiniteRegion             = (requestParameters["RegionInfinite"].ToString().ToLower() == "yes");
                    newRegion.ObjectCapacity             = int.Parse(requestParameters["RegionCapacity"].ToString());

                    string delayStartup = requestParameters["RegionDelayStartup"].ToString();
                    newRegion.Startup = delayStartup.StartsWith("n", System.StringComparison.Ordinal) ? StartupType.Normal : StartupType.Medium;
                }

                if (regionPreset.StartsWith("w", System.StringComparison.Ordinal))
                {
                    // 'standard' setup
                    newRegion.RegionType = newRegion.RegionType + "Whitecore";
                    //info.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = "Flatland";
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = false;
                    newRegion.ObjectCapacity             = 50000;
                    newRegion.RegionPort = RegionPort;
                }
                if (regionPreset.StartsWith("o", System.StringComparison.Ordinal))
                {
                    // 'Openspace' setup
                    newRegion.RegionType = newRegion.RegionType + "Openspace";
                    //newRegion.RegionPort;            // use auto assigned port
                    if (RegionTerrain.StartsWith("a", System.StringComparison.Ordinal))
                    {
                        newRegion.RegionTerrain = "Aquatic";
                    }
                    else
                    {
                        newRegion.RegionTerrain = "Grassland";
                    }
                    newRegion.Startup = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = false;
                    newRegion.ObjectCapacity                     = 750;
                    newRegion.RegionSettings.AgentLimit          = 10;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }
                if (regionPreset.StartsWith("h", System.StringComparison.Ordinal))
                {
                    // 'Homestead' setup
                    newRegion.RegionType = newRegion.RegionType + "Homestead";
                    //info.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = "Homestead";
                    newRegion.Startup       = StartupType.Medium;
                    newRegion.SeeIntoThisSimFromNeighbor         = true;
                    newRegion.InfiniteRegion                     = false;
                    newRegion.ObjectCapacity                     = 3750;
                    newRegion.RegionSettings.AgentLimit          = 20;
                    newRegion.RegionSettings.AllowLandJoinDivide = false;
                    newRegion.RegionSettings.AllowLandResell     = false;
                }

                if (regionPreset.StartsWith("f", System.StringComparison.Ordinal))
                {
                    // 'Full Region' setup
                    newRegion.RegionType = newRegion.RegionType + "Full Region";
                    //newRegion.RegionPort;            // use auto assigned port
                    newRegion.RegionTerrain = RegionTerrain;
                    newRegion.Startup       = StartupType.Normal;
                    newRegion.SeeIntoThisSimFromNeighbor = true;
                    newRegion.InfiniteRegion             = false;
                    newRegion.ObjectCapacity             = 15000;
                    newRegion.RegionSettings.AgentLimit  = 100;
                    if (newRegion.RegionType.StartsWith("M", System.StringComparison.Ordinal))                            // defaults are 'true'
                    {
                        newRegion.RegionSettings.AllowLandJoinDivide = false;
                        newRegion.RegionSettings.AllowLandResell     = false;
                    }
                }

                if (RegionLoadTerrain.Length > 0)
                {
                    // we are loading terrain from a file... handled later
                    newRegion.RegionTerrain = "Custom";
                }

                // Disabled as this is a work in progress and will break with the current scenemanager (Dec 5 - greythane-
                // TODO: !!! Assumes everything is local for now !!!
                ISceneManager scenemanager = webInterface.Registry.RequestModuleInterface <ISceneManager> ();
                if (scenemanager.CreateRegion(newRegion))
                {
                    IGridRegisterModule gridRegister = webInterface.Registry.RequestModuleInterface <IGridRegisterModule>();
                    if (gridRegister != null)
                    {
                        if (gridRegister.RegisterRegionWithGrid(null, true, false, null))
                        {
                            response = "<h3>Successfully created region, redirecting to main page</h3>" +
                                       "<script language=\"javascript\">" +
                                       "setTimeout(function() {window.location.href = \"index.html\";}, 3000);" +
                                       "</script>";
                        }
                    }

                    //                        response = "<h3>" + error + "</h3>";
                    response = "<h3> Error registering region with grid</h3>";
                }
                else
                {
                    response = "<h3>Error creating this region.</h3>";
                }
                return(null);
            }

            // we have or need data
            if (httpRequest.Query.ContainsKey("regionid"))
            {
                var region = gridService.GetRegionByUUID(null, UUID.Parse(httpRequest.Query ["regionid"].ToString()));

                vars.Add("RegionName", region.RegionName);

                UserAccount estateOwnerAccount = null;
                var         estateOwner        = UUID.Zero;

                IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin <IEstateConnector> ();
                if (estateConnector != null)
                {
                    EstateSettings estate = estateConnector.GetEstateSettings(region.RegionID);
                    if (estate != null)
                    {
                        estateOwner = estate.EstateOwner;
                    }

                    var accountService = webInterface.Registry.RequestModuleInterface <IUserAccountService> ();
                    if (accountService != null)
                    {
                        estateOwnerAccount = accountService.GetUserAccount(null, estate.EstateOwner);
                    }
                }
                vars.Add("OwnerUUID", estateOwner);
                vars.Add("OwnerName", estateOwnerAccount != null ? estateOwnerAccount.Name : "No account found");

                vars.Add("RegionLocX", region.RegionLocX / Constants.RegionSize);
                vars.Add("RegionLocY", region.RegionLocY / Constants.RegionSize);
                vars.Add("RegionSizeX", region.RegionSizeX);
                vars.Add("RegionSizeY", region.RegionSizeY);
                vars.Add("RegionType", region.RegionType);
                vars.Add("RegionTerrain", region.RegionTerrain);
                vars.Add("RegionOnline",
                         (region.Flags & (int)RegionFlags.RegionOnline) == (int)RegionFlags.RegionOnline
                          ? translator.GetTranslatedString("Online")
                          : translator.GetTranslatedString("Offline"));

                IWebHttpTextureService webTextureService = webInterface.Registry.
                                                           RequestModuleInterface <IWebHttpTextureService> ();
                if (webTextureService != null && region.TerrainMapImage != UUID.Zero)
                {
                    vars.Add("RegionImageURL", webTextureService.GetTextureURL(region.TerrainMapImage));
                }
                else
                {
                    vars.Add("RegionImageURL", "images/icons/no_picture.jpg");
                }
            }
            else
            {
                // default values

                // check for user region name  seed
                string[] m_regionNameSeed = null;
                IConfig  regionConfig     =
                    webInterface.Registry.RequestModuleInterface <ISimulationBase>().ConfigSource.Configs["FileBasedSimulationData"];

                if (regionConfig != null)
                {
                    string regionNameSeed = regionConfig.GetString("RegionNameSeed", "");
                    if (regionNameSeed != "")
                    {
                        m_regionNameSeed = regionNameSeed.Split(',');
                    }
                }

                var    rNames     = new Utilities.MarkovNameGenerator();
                string regionName = rNames.FirstName(m_regionNameSeed == null ? Utilities.RegionNames: m_regionNameSeed, 3, 7);
                vars.Add("RegionName", regionName);

                var scenemanager = webInterface.Registry.RequestModuleInterface <ISceneManager> ();
                var gconnector   = Framework.Utilities.DataManager.RequestPlugin <IGenericsConnector>();
                var settings     = gconnector.GetGeneric <WebUISettings>(UUID.Zero, "WebUISettings", "Settings");
                if (settings == null)
                {
                    settings = new WebUISettings();
                }

                // get some current details
                //List<GridRegion> regions = gridService.GetRegionsByName(null, "", null,null);

                var currentInfo = scenemanager.FindCurrentRegionInfo();
                //Dictionary<string, int> currentInfo = null;
                if (currentInfo != null)
                {
                    vars.Add("RegionLocX", currentInfo ["minX"] > 0 ? currentInfo ["minX"] : settings.MapCenter.X);
                    vars.Add("RegionLocY", currentInfo ["minY"] > 0 ? currentInfo ["minY"] : settings.MapCenter.Y);
                    vars.Add("RegionPort", currentInfo ["port"] > 0 ? currentInfo ["port"] + 1 : 9000);
                }
                else
                {
                    vars.Add("RegionLocX", settings.MapCenter.X);
                    vars.Add("RegionLocY", settings.MapCenter.Y);
                    vars.Add("RegionPort", 9000);
                }


                vars.Add("RegionSizeX", Constants.RegionSize);
                vars.Add("RegionSizeY", Constants.RegionSize);
                vars.Add("RegionType", WebHelpers.RegionTypeArgs(translator));
                vars.Add("RegionPresetType", WebHelpers.RegionPresetArgs(translator));
                vars.Add("RegionTerrain", WebHelpers.RegionTerrainArgs(translator));
            }

            // Labels
            //vars.Add ("RegionInformationText", translator.GetTranslatedString ("RegionInformationText"));
            vars.Add("RegionNameText", translator.GetTranslatedString("RegionNameText"));
            vars.Add("RegionLocationText", translator.GetTranslatedString("RegionLocationText"));
            vars.Add("RegionSizeText", translator.GetTranslatedString("RegionSizeText"));
            vars.Add("RegionTypeText", translator.GetTranslatedString("RegionTypeText"));
            vars.Add("RegionPresetText", translator.GetTranslatedString("RegionPresetText"));
            vars.Add("RegionTerrainText", translator.GetTranslatedString("RegionTerrainText"));
            vars.Add("OwnerNameText", translator.GetTranslatedString("OwnerNameText"));
            vars.Add("RegionPortText", translator.GetTranslatedString("RegionPortText"));
            vars.Add("RegionDelayStartupText", translator.GetTranslatedString("RegionDelayStartupText"));
            vars.Add("RegionVisibilityText", translator.GetTranslatedString("RegionVisibilityText"));
            vars.Add("RegionInfiniteText", translator.GetTranslatedString("RegionInfiniteText"));
            vars.Add("RegionCapacityText", translator.GetTranslatedString("RegionCapacityText"));
            vars.Add("Yes", translator.GetTranslatedString("Yes"));
            vars.Add("No", translator.GetTranslatedString("No"));
            vars.Add("Accept", translator.GetTranslatedString("Accept"));
            vars.Add("Submit", translator.GetTranslatedString("Submit"));
            vars.Add("SubmitURL", "home.html");
            vars.Add("ErrorMessage", "");



            return(vars);
        }
Example #17
0
        protected void SetRegionInfoOption(IScene scene, string[] cmdparams)
        {
            #region 3 Params needed

            if (cmdparams.Length < 4)
            {
                MainConsole.Instance.Warn("Not enough parameters!");
                return;
            }
            if (cmdparams[2] == "Maturity")
            {
                switch (cmdparams[3])
                {
                case "PG":
                    m_scene.RegionInfo.AccessLevel = Util.ConvertMaturityToAccessLevel(0);
                    break;

                case "Mature":
                    m_scene.RegionInfo.AccessLevel = Util.ConvertMaturityToAccessLevel(1);
                    break;

                case "Adult":
                    m_scene.RegionInfo.AccessLevel = Util.ConvertMaturityToAccessLevel(2);
                    break;

                default:
                    MainConsole.Instance.Warn(
                        "Your parameter did not match any existing parameters. Try PG, Mature, or Adult");
                    return;
                }
                //Tell the grid about the changes
                IGridRegisterModule gridRegModule = m_scene.RequestModuleInterface <IGridRegisterModule>();
                if (gridRegModule != null)
                {
                    gridRegModule.UpdateGridRegion(m_scene);
                }
            }

            #endregion

            #region 4 Params needed

            if (cmdparams.Length < 4)
            {
                MainConsole.Instance.Warn("Not enough parameters!");
                return;
            }
            if (cmdparams[2] == "AddEstateBan".ToLower())
            {
                EstateBan EB = new EstateBan
                {
                    BannedUserID =
                        m_scene.UserAccountService.GetUserAccount(null, cmdparams[3],
                                                                  cmdparams[4]).PrincipalID
                };
                m_scene.RegionInfo.EstateSettings.AddBan(EB);
            }
            if (cmdparams[2] == "AddEstateManager".ToLower())
            {
                m_scene.RegionInfo.EstateSettings.AddEstateManager(
                    m_scene.UserAccountService.GetUserAccount(null, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "AddEstateAccess".ToLower())
            {
                m_scene.RegionInfo.EstateSettings.AddEstateUser(
                    m_scene.UserAccountService.GetUserAccount(null, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "RemoveEstateBan".ToLower())
            {
                m_scene.RegionInfo.EstateSettings.RemoveBan(
                    m_scene.UserAccountService.GetUserAccount(null, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "RemoveEstateManager".ToLower())
            {
                m_scene.RegionInfo.EstateSettings.RemoveEstateManager(
                    m_scene.UserAccountService.GetUserAccount(null, cmdparams[3], cmdparams[4]).PrincipalID);
            }
            if (cmdparams[2] == "RemoveEstateAccess".ToLower())
            {
                m_scene.RegionInfo.EstateSettings.RemoveEstateUser(
                    m_scene.UserAccountService.GetUserAccount(null, cmdparams[3], cmdparams[4]).PrincipalID);
            }

            #endregion

            Aurora.Framework.Utilities.DataManager.RequestPlugin <IEstateConnector>().
            SaveEstateSettings(m_scene.RegionInfo.EstateSettings);
        }