Пример #1
0
        /// <summary>
        ///     Load region settings data
        /// </summary>
        /// <param name="settingsPath"></param>
        /// <param name="data"></param>
        /// <returns>
        ///     true if settings were loaded successfully, false otherwise
        /// </returns>
        private void LoadRegionSettings(string settingsPath, byte[] data)
        {
            RegionSettings loadedRegionSettings;

            try
            {
                loadedRegionSettings = RegionSettingsSerializer.Deserialize(data);
            }
            catch (Exception e)
            {
                MainConsole.Instance.ErrorFormat(
                    "[ARCHIVER]: Could not parse region settings file {0}.  Ignoring.  Exception was {1}",
                    settingsPath, e);
                return;
            }

            m_scene.RegionInfo.RegionSettings = loadedRegionSettings;
            m_scene.SimulationDataService.Tainted();

            IEstateModule estateModule = m_scene.RequestModuleInterface <IEstateModule>();

            if (estateModule != null)
            {
                estateModule.sendRegionHandshakeToAll();
            }

            return;
        }
        /// <summary>
        ///     Load region settings data
        /// </summary>
        /// <param name="settingsPath"></param>
        /// <param name="data"></param>
        /// <returns>
        ///     true if settings were loaded successfully, false otherwise
        /// </returns>
        void LoadRegionSettings(string settingsPath, byte [] data)
        {
            RegionSettings loadedRegionSettings;

            try {
                loadedRegionSettings = RegionSettingsSerializer.Deserialize(data, m_scene.RegionInfo.RegionID);
                if (m_skipTerrain)
                {
                    // not loading terrain so leave the existing textures as well
                    loadedRegionSettings.TerrainTexture1 = m_scene.RegionInfo.RegionSettings.TerrainTexture1;
                    loadedRegionSettings.TerrainTexture2 = m_scene.RegionInfo.RegionSettings.TerrainTexture2;
                    loadedRegionSettings.TerrainTexture3 = m_scene.RegionInfo.RegionSettings.TerrainTexture3;
                    loadedRegionSettings.TerrainTexture4 = m_scene.RegionInfo.RegionSettings.TerrainTexture4;
                }
            } catch (Exception e) {
                MainConsole.Instance.ErrorFormat(
                    "[Archiver]: Could not parse region settings file {0}.  Ignoring.  Exception was {1}",
                    settingsPath, e);
                return;
            }

            m_scene.RegionInfo.RegionSettings = loadedRegionSettings;
            m_scene.SimulationDataService.Tainted();

            IEstateModule estateModule = m_scene.RequestModuleInterface <IEstateModule> ();

            if (estateModule != null)
            {
                estateModule.sendRegionHandshakeToAll();
            }

            return;
        }
Пример #3
0
        /// <summary>
        /// Load region settings data
        /// </summary>
        /// <param name="settingsPath"></param>
        /// <param name="data"></param>
        /// <returns>
        /// true if settings were loaded successfully, false otherwise
        /// </returns>
        private void LoadRegionSettings(string settingsPath, byte[] data)
        {
            RegionSettings loadedRegionSettings;

            try
            {
                loadedRegionSettings = RegionSettingsSerializer.Deserialize(data);
            }
            catch (Exception e)
            {
                MainConsole.Instance.ErrorFormat(
                    "[ARCHIVER]: Could not parse region settings file {0}.  Ignoring.  Exception was {1}",
                    settingsPath, e);
                return;
            }

            RegionSettings currentRegionSettings = m_scene.RegionInfo.RegionSettings;

            currentRegionSettings.AgentLimit          = loadedRegionSettings.AgentLimit;
            currentRegionSettings.AllowDamage         = loadedRegionSettings.AllowDamage;
            currentRegionSettings.AllowLandJoinDivide = loadedRegionSettings.AllowLandJoinDivide;
            currentRegionSettings.AllowLandResell     = loadedRegionSettings.AllowLandResell;
            currentRegionSettings.BlockFly            = loadedRegionSettings.BlockFly;
            currentRegionSettings.BlockShowInSearch   = loadedRegionSettings.BlockShowInSearch;
            currentRegionSettings.BlockTerraform      = loadedRegionSettings.BlockTerraform;
            currentRegionSettings.DisableCollisions   = loadedRegionSettings.DisableCollisions;
            currentRegionSettings.DisablePhysics      = loadedRegionSettings.DisablePhysics;
            currentRegionSettings.DisableScripts      = loadedRegionSettings.DisableScripts;
            currentRegionSettings.Elevation1NE        = loadedRegionSettings.Elevation1NE;
            currentRegionSettings.Elevation1NW        = loadedRegionSettings.Elevation1NW;
            currentRegionSettings.Elevation1SE        = loadedRegionSettings.Elevation1SE;
            currentRegionSettings.Elevation1SW        = loadedRegionSettings.Elevation1SW;
            currentRegionSettings.Elevation2NE        = loadedRegionSettings.Elevation2NE;
            currentRegionSettings.Elevation2NW        = loadedRegionSettings.Elevation2NW;
            currentRegionSettings.Elevation2SE        = loadedRegionSettings.Elevation2SE;
            currentRegionSettings.Elevation2SW        = loadedRegionSettings.Elevation2SW;
            currentRegionSettings.FixedSun            = loadedRegionSettings.FixedSun;
            currentRegionSettings.ObjectBonus         = loadedRegionSettings.ObjectBonus;
            currentRegionSettings.RestrictPushing     = loadedRegionSettings.RestrictPushing;
            currentRegionSettings.TerrainLowerLimit   = loadedRegionSettings.TerrainLowerLimit;
            currentRegionSettings.TerrainRaiseLimit   = loadedRegionSettings.TerrainRaiseLimit;
            currentRegionSettings.TerrainTexture1     = loadedRegionSettings.TerrainTexture1;
            currentRegionSettings.TerrainTexture2     = loadedRegionSettings.TerrainTexture2;
            currentRegionSettings.TerrainTexture3     = loadedRegionSettings.TerrainTexture3;
            currentRegionSettings.TerrainTexture4     = loadedRegionSettings.TerrainTexture4;
            currentRegionSettings.UseEstateSun        = loadedRegionSettings.UseEstateSun;
            currentRegionSettings.WaterHeight         = loadedRegionSettings.WaterHeight;

            currentRegionSettings.Save();

            IEstateModule estateModule = m_scene.RequestModuleInterface <IEstateModule>();

            if (estateModule != null)
            {
                estateModule.sendRegionHandshakeToAll();
            }

            return;
        }
Пример #4
0
        public void UpdateRegionInfo(RegionInfo oldRegion, RegionInfo region)
        {
            foreach (IScene scene in m_localScenes)
            {
                if (scene.RegionInfo.RegionID == region.RegionID)
                {
                    bool needsGridUpdate =
                        scene.RegionInfo.RegionName != region.RegionName ||
                        scene.RegionInfo.RegionLocX != region.RegionLocX ||
                        scene.RegionInfo.RegionLocY != region.RegionLocY ||
                        scene.RegionInfo.RegionLocZ != region.RegionLocZ ||
                        scene.RegionInfo.AccessLevel != region.AccessLevel ||
                        scene.RegionInfo.RegionType != region.RegionType// ||
                        //scene.RegionInfo.RegionSizeX != region.RegionSizeX //Don't allow for size updates on the fly, that needs a restart
                        //scene.RegionInfo.RegionSizeY != region.RegionSizeY
                        //scene.RegionInfo.RegionSizeZ != region.RegionSizeZ
                    ;
                    bool needsRegistration =
                        scene.RegionInfo.RegionName != region.RegionName ||
                        scene.RegionInfo.RegionLocX != region.RegionLocX ||
                        scene.RegionInfo.RegionLocY != region.RegionLocY
                    ;

                    region.RegionSettings      = scene.RegionInfo.RegionSettings;
                    region.EstateSettings      = scene.RegionInfo.EstateSettings;
                    region.GridSecureSessionID = scene.RegionInfo.GridSecureSessionID;
                    scene.RegionInfo           = region;
                    if (needsRegistration)
                    {
                        scene.RequestModuleInterface <IGridRegisterModule>().RegisterRegionWithGrid(scene, false, false);
                    }
                    else if (needsGridUpdate)
                    {
                        scene.RequestModuleInterface <IGridRegisterModule>().UpdateGridRegion(scene);
                    }
                    //Tell clients about the changes
                    IEstateModule es = scene.RequestModuleInterface <IEstateModule>();
                    if (es != null)
                    {
                        es.sendRegionHandshakeToAll();
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Load region settings data
        /// </summary>
        /// <param name="scene"></param>
        /// <param name="settingsPath"></param>
        /// <param name="data"></param>
        /// <param name="dearchivedScenes"></param>
        /// <returns>
        /// true if settings were loaded successfully, false otherwise
        /// </returns>
        private bool LoadRegionSettings(Scene scene, string settingsPath, byte[] data, DearchiveScenesInfo dearchivedScenes)
        {
            RegionSettings loadedRegionSettings;

            try
            {
                loadedRegionSettings = RegionSettingsSerializer.Deserialize(data);
            }
            catch (Exception e)
            {
                m_log.ErrorFormat(
                    "[ARCHIVER]: Could not parse region settings file {0}.  Ignoring.  Exception was {1}",
                    settingsPath, e);
                return(false);
            }

            RegionSettings currentRegionSettings = scene.RegionInfo.RegionSettings;

            currentRegionSettings.AgentLimit          = loadedRegionSettings.AgentLimit;
            currentRegionSettings.AllowDamage         = loadedRegionSettings.AllowDamage;
            currentRegionSettings.AllowLandJoinDivide = loadedRegionSettings.AllowLandJoinDivide;
            currentRegionSettings.AllowLandResell     = loadedRegionSettings.AllowLandResell;
            currentRegionSettings.BlockFly            = loadedRegionSettings.BlockFly;
            currentRegionSettings.BlockShowInSearch   = loadedRegionSettings.BlockShowInSearch;
            currentRegionSettings.BlockTerraform      = loadedRegionSettings.BlockTerraform;
            currentRegionSettings.DisableCollisions   = loadedRegionSettings.DisableCollisions;
            currentRegionSettings.DisablePhysics      = loadedRegionSettings.DisablePhysics;
            currentRegionSettings.DisableScripts      = loadedRegionSettings.DisableScripts;
            currentRegionSettings.Elevation1NE        = loadedRegionSettings.Elevation1NE;
            currentRegionSettings.Elevation1NW        = loadedRegionSettings.Elevation1NW;
            currentRegionSettings.Elevation1SE        = loadedRegionSettings.Elevation1SE;
            currentRegionSettings.Elevation1SW        = loadedRegionSettings.Elevation1SW;
            currentRegionSettings.Elevation2NE        = loadedRegionSettings.Elevation2NE;
            currentRegionSettings.Elevation2NW        = loadedRegionSettings.Elevation2NW;
            currentRegionSettings.Elevation2SE        = loadedRegionSettings.Elevation2SE;
            currentRegionSettings.Elevation2SW        = loadedRegionSettings.Elevation2SW;
            currentRegionSettings.FixedSun            = loadedRegionSettings.FixedSun;
            currentRegionSettings.SunPosition         = loadedRegionSettings.SunPosition;
            currentRegionSettings.ObjectBonus         = loadedRegionSettings.ObjectBonus;
            currentRegionSettings.RestrictPushing     = loadedRegionSettings.RestrictPushing;
            currentRegionSettings.TerrainLowerLimit   = loadedRegionSettings.TerrainLowerLimit;
            currentRegionSettings.TerrainRaiseLimit   = loadedRegionSettings.TerrainRaiseLimit;
            currentRegionSettings.TerrainTexture1     = loadedRegionSettings.TerrainTexture1;
            currentRegionSettings.TerrainTexture2     = loadedRegionSettings.TerrainTexture2;
            currentRegionSettings.TerrainTexture3     = loadedRegionSettings.TerrainTexture3;
            currentRegionSettings.TerrainTexture4     = loadedRegionSettings.TerrainTexture4;
            currentRegionSettings.UseEstateSun        = loadedRegionSettings.UseEstateSun;
            currentRegionSettings.WaterHeight         = loadedRegionSettings.WaterHeight;
            currentRegionSettings.TelehubObject       = loadedRegionSettings.TelehubObject;
            currentRegionSettings.ClearSpawnPoints();
            foreach (SpawnPoint sp in loadedRegionSettings.SpawnPoints())
            {
                currentRegionSettings.AddSpawnPoint(sp);
            }

            currentRegionSettings.LoadedCreationDateTime = dearchivedScenes.LoadedCreationDateTime;
            currentRegionSettings.LoadedCreationID       = dearchivedScenes.GetOriginalRegionID(scene.RegionInfo.RegionID).ToString();

            currentRegionSettings.Save();

            scene.TriggerEstateSunUpdate();

            IEstateModule estateModule = scene.RequestModuleInterface <IEstateModule>();

            if (estateModule != null)
            {
                estateModule.sendRegionHandshakeToAll();
            }

            return(true);
        }
        /// <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);
        }