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