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