/// <summary> /// Create a scene and its initial base structures. /// </summary> /// <param name="regionInfo"></param> /// <param name="configSource"></param> /// <returns></returns> public IScene CreateScene(ISimulationDataStore dataStore, RegionInfo regionInfo) { AgentCircuitManager circuitManager = new AgentCircuitManager(); List<IClientNetworkServer> clientServers = WhiteCoreModuleLoader.PickupModules<IClientNetworkServer>(); List<IClientNetworkServer> allClientServers = new List<IClientNetworkServer>(); foreach (IClientNetworkServer clientServer in clientServers) { clientServer.Initialise((uint)regionInfo.RegionPort, m_configSource, circuitManager); allClientServers.Add(clientServer); } AsyncScene scene = new AsyncScene(); scene.AddModuleInterfaces(m_openSimBase.ApplicationRegistry.GetInterfaces()); scene.Initialize(regionInfo, dataStore, circuitManager, allClientServers); return scene; }
protected internal SceneGraph (IScene parent, RegionInfo regInfo) { Random random = new Random (); m_lastAllocatedLocalId = ((uint)random.NextDouble () * (uint.MaxValue / 2)) + uint.MaxValue / 4; m_parentScene = parent; m_regInfo = regInfo; //Subscript to the scene events m_parentScene.EventManager.OnNewClient += SubscribeToClientEvents; m_parentScene.EventManager.OnClosingClient += UnSubscribeToClientEvents; IConfig whitecorestartupConfig = parent.Config.Configs ["WhiteCoreStartup"]; if (whitecorestartupConfig != null) { m_DefaultObjectName = whitecorestartupConfig.GetString ("DefaultObjectName", m_DefaultObjectName); EnableFakeRaycasting = whitecorestartupConfig.GetBoolean ("EnableFakeRaycasting", false); } }
private void ReadOpenRegionSettings(IConfig instanceSettings, ref RegionInfo region) { if (instanceSettings == null) return; region.OpenRegionSettings.MaxDragDistance = instanceSettings.GetFloat("MaxDragDistance", region.OpenRegionSettings .MaxDragDistance); region.OpenRegionSettings.DefaultDrawDistance = instanceSettings.GetFloat("DefaultDrawDistance", region.OpenRegionSettings .DefaultDrawDistance); region.OpenRegionSettings.MaximumPrimScale = instanceSettings.GetFloat("MaximumPrimScale", region.OpenRegionSettings .MaximumPrimScale); region.OpenRegionSettings.MinimumPrimScale = instanceSettings.GetFloat("MinimumPrimScale", region.OpenRegionSettings .MinimumPrimScale); region.OpenRegionSettings.MaximumPhysPrimScale = instanceSettings.GetFloat("MaximumPhysPrimScale", region.OpenRegionSettings .MaximumPhysPrimScale); region.OpenRegionSettings.MaximumHollowSize = instanceSettings.GetFloat("MaximumHollowSize", region.OpenRegionSettings .MaximumHollowSize); region.OpenRegionSettings.MinimumHoleSize = instanceSettings.GetFloat("MinimumHoleSize", region.OpenRegionSettings .MinimumHoleSize); region.OpenRegionSettings.MaximumLinkCount = instanceSettings.GetInt("MaximumLinkCount", region.OpenRegionSettings .MaximumLinkCount); region.OpenRegionSettings.MaximumLinkCountPhys = instanceSettings.GetInt("MaximumLinkCountPhys", region.OpenRegionSettings .MaximumLinkCountPhys); region.OpenRegionSettings.RenderWater = instanceSettings.GetBoolean("RenderWater", region.OpenRegionSettings.RenderWater); region.OpenRegionSettings.MaximumInventoryItemsTransfer = instanceSettings.GetInt("MaximumInventoryItemsTransfer", region.OpenRegionSettings.MaximumInventoryItemsTransfer); region.OpenRegionSettings.DisplayMinimap = instanceSettings.GetBoolean("DisplayMinimap", region.OpenRegionSettings .DisplayMinimap); region.OpenRegionSettings.AllowPhysicalPrims = instanceSettings.GetBoolean("AllowPhysicalPrims", region.OpenRegionSettings .AllowPhysicalPrims); region.OpenRegionSettings.ForceDrawDistance = instanceSettings.GetBoolean("ForceDrawDistance", region.OpenRegionSettings .ForceDrawDistance); string offset = instanceSettings.GetString("OffsetOfUTC", region.OpenRegionSettings.OffsetOfUTC.ToString()); int off; if (!int.TryParse(offset, out off)) { if (offset == "SLT" || offset == "PST" || offset == "PDT") off = -8; else if (offset == "UTC" || offset == "GMT") off = 0; } region.OpenRegionSettings.OffsetOfUTC = off; region.OpenRegionSettings.OffsetOfUTCDST = instanceSettings.GetBoolean("OffsetOfUTCDST", region.OpenRegionSettings .OffsetOfUTCDST); region.OpenRegionSettings.EnableTeenMode = instanceSettings.GetBoolean("EnableTeenMode", region.OpenRegionSettings .EnableTeenMode); region.OpenRegionSettings.ShowTags = instanceSettings.GetInt("ShowTags", region.OpenRegionSettings.ShowTags); region.OpenRegionSettings.MaxGroups = instanceSettings.GetInt("MaxGroups", region.OpenRegionSettings.MaxGroups); string defaultunderpants = instanceSettings.GetString("DefaultUnderpants", region.OpenRegionSettings.DefaultUnderpants.ToString()); UUID.TryParse(defaultunderpants, out region.OpenRegionSettings.m_DefaultUnderpants); string defaultundershirt = instanceSettings.GetString("DefaultUndershirt", region.OpenRegionSettings.DefaultUndershirt.ToString()); UUID.TryParse(defaultundershirt, out region.OpenRegionSettings.m_DefaultUndershirt); }
/// <summary> /// Modifies the region settings. /// </summary> /// <returns>The region settings.</returns> /// <param name="regInfo">Reg info.</param> /// <param name="advanced">If set to <c>true</c> advanced.</param> bool ModifyRegionSettings (ref RegionInfo regInfo, bool advanced) { bool updated = false; if (regInfo == null || regInfo.NewRegion) return updated; updated |= GetRegionName (ref regInfo); updated |= GetRegionLocation (ref regInfo); updated |= GetRegionSize (ref regInfo); if (advanced) { // region type var oldType = regInfo.RegionType; regInfo.RegionType = MainConsole.Instance.Prompt ("Region Type (Mainland/Estate)", (regInfo.RegionType == "" ? "Estate" : regInfo.RegionType)); if (regInfo.RegionType != oldType) updated = true; updated |= GetRegionOptional (ref regInfo); } return updated; }
public void Dispose() { Groups = null; Parcels = null; Water = null; RevertWater = null; Terrain = null; RevertTerrain = null; RegionInfo = null; }
public void Initialize (RegionInfo regionInfo) { m_regInfo = regionInfo; }
// Initialize the mesh plugin public override void Initialise(IMesher meshmerizer, IScene scene) { mesher = meshmerizer; m_region = scene.RegionInfo; m_scene = scene; WorldExtents = new Vector2(m_region.RegionSizeX, m_region.RegionSizeY); }
/// <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 ); m_fileName = 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 and adds a region from supplied regioninfo. /// </summary> /// <param name="regionInfo">Region info.</param> public void CreateRegion(RegionInfo regionInfo) { if (regionInfo == null) return; if (RegionNameExists(regionInfo.RegionName)) { MainConsole.Instance.InfoFormat ("[SceneManager]: A region already exists with the name '{0}'", regionInfo.RegionName); return; } //if ( RegionAtLocation(regionInfo.RegionLocX, regionInfo.RegionLocY)) //{ //MainConsole.Instance.InfoFormat ("[SceneManager]: A region at @ {0},{1} already exists", // regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize); //} // we should be ok.. MainConsole.Instance.InfoFormat ("[SceneManager]: Creating new region \"{0}\" at @ {1},{2}", regionInfo.RegionName, regionInfo.RegionLocX / Constants.RegionSize, regionInfo.RegionLocY / Constants.RegionSize); var currentInfo = FindCurrentRegionInfo (); var regions = new List<KeyValuePair<ISimulationDataStore, RegionInfo>> (); ISimulationDataStore store = m_selectedDataService.Copy (); regions.Add (new KeyValuePair<ISimulationDataStore, RegionInfo> (store, store.CreateNewRegion (m_OpenSimBase, regionInfo, currentInfo))); StartRegion (store, regionInfo); }
/// <summary> /// Gets the size of the region. /// </summary> /// <returns><c>true</c>, if region size was gotten, <c>false</c> otherwise.</returns> /// <param name="regInfo">Region info.</param> bool GetRegionSize (ref RegionInfo regInfo) { var updated = false; var haveSize = true; var sizeCheck = ""; var oldSize = regInfo.RegionSizeX; do { regInfo.RegionSizeX = int.Parse (MainConsole.Instance.Prompt ("Region size X", regInfo.RegionSizeX.ToString ())); if (regInfo.RegionSizeX > Constants.MaxRegionSize) { MainConsole.Instance.CleanInfo (" The currently recommended maximum size is " + Constants.MaxRegionSize); sizeCheck = MainConsole.Instance.Prompt ("Continue with the X size of " + regInfo.RegionSizeX + "? (yes/no)", "no"); haveSize = sizeCheck.ToLower ().StartsWith ("y", StringComparison.Ordinal); } } while (!haveSize); if (regInfo.RegionSizeX != oldSize) updated = true; // assume square regions regInfo.RegionSizeY = regInfo.RegionSizeX; oldSize = regInfo.RegionSizeY; do { regInfo.RegionSizeY = int.Parse (MainConsole.Instance.Prompt ("Region size Y", regInfo.RegionSizeY.ToString ())); if ((regInfo.RegionSizeY > regInfo.RegionSizeX) && (regInfo.RegionSizeY > Constants.MaxRegionSize)) { MainConsole.Instance.CleanInfo (" The currently recommended maximum size is " + Constants.MaxRegionSize); sizeCheck = MainConsole.Instance.Prompt ("Continue with the Y size of " + regInfo.RegionSizeY + "? (yes/no)", "no"); haveSize = sizeCheck.ToLower ().StartsWith ("y", StringComparison.Ordinal); } } while (!haveSize); if (regInfo.RegionSizeY != oldSize) updated = true; return updated; }
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", webInterface.RegionTypeArgs(translator)); vars.Add ("RegionPresetType", webInterface.RegionPresetArgs(translator)); vars.Add ("RegionTerrain", webInterface.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; }
/// <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; var haveSize = true; var sizeCheck = ""; do { info.RegionSizeX = int.Parse (MainConsole.Instance.Prompt ("Region size X", info.RegionSizeX.ToString ())); if (info.RegionSizeX > Constants.MaxRegionSize) { MainConsole.Instance.CleanInfo (" The currently recommended maximum size is " + Constants.MaxRegionSize); sizeCheck = MainConsole.Instance.Prompt ("Continue with the X size of " + info.RegionSizeX + "? (yes/no)", "no"); haveSize = sizeCheck.ToLower().StartsWith("y"); } } while (! haveSize); // assume square regions info.RegionSizeY = info.RegionSizeX; do { info.RegionSizeY = int.Parse (MainConsole.Instance.Prompt ("Region size Y", info.RegionSizeY.ToString ())); if ( (info.RegionSizeY > info.RegionSizeX) && (info.RegionSizeY > Constants.MaxRegionSize) ) { MainConsole.Instance.CleanInfo (" The currently recommended maximum size is " + Constants.MaxRegionSize); sizeCheck = MainConsole.Instance.Prompt ("Continue with the Y size of " + info.RegionSizeY + "? (yes/no)", "no"); haveSize = sizeCheck.ToLower().StartsWith("y"); } } while (! haveSize); bool bigRegion = ((info.RegionSizeX > Constants.MaxRegionSize) || (info.RegionSizeY > Constants.MaxRegionSize)); // * 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 (bigRegion) terrainOpen = "flatland"; else 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 (bigRegion) terrainFull = "Flatland"; else 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 if (terrainOpen.StartsWith("g")) info.RegionTerrain = "Grassland"; else info.RegionTerrain = "Flatland"; 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 if (bigRegion) info.RegionTerrain = "Flatland"; else 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> (); var user = Authenticator.GetAuthentication (httpRequest); vars.Add ("RegionServerURL", webInterface.GridURL); // This needs to be sorted out for grid regions #region EditRegion if (requestParameters.ContainsKey ("Submit")) { var regionServerURL = requestParameters ["RegionServerURL"].ToString (); // required if (regionServerURL == "") { response = "<h3>" + translator.GetTranslatedString ("RegionServerURLError") + "</h3>"; return null; } var regionID = requestParameters ["RegionID"].ToString (); var regionName = requestParameters ["RegionName"].ToString (); //var OwnerUUID = requestParameters["OwnerUUID"].ToString(); var regionLocX = requestParameters ["RegionLocX"].ToString (); var regionLocY = requestParameters ["RegionLocY"].ToString (); var regionSizeX = requestParameters ["RegionSizeX"].ToString (); var regionSizeY = requestParameters ["RegionSizeY"].ToString (); var regionType = requestParameters ["RegionType"].ToString (); var regionPresetType = requestParameters ["RegionPresetType"].ToString (); var regionTerrain = requestParameters ["RegionTerrain"].ToString (); var regionLoadTerrain = requestParameters.ContainsKey ("RegionLoadTerrain") ? requestParameters ["RegionLoadTerrain"].ToString () : ""; // 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 (); if (regionID != "") newRegion.RegionID = UUID.Parse (regionID); 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 = true; newRegion.ObjectCapacity = 50000; newRegion.Startup = StartupType.Normal; var regionPreset = regionPresetType.ToLower (); //SubString(0,1); 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 = true; 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 = true; 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 = true; 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 = true; 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"; } // TODO: !!! Assumes everything is local for now !!! if (requestParameters.ContainsKey ("NewRegion")) { ISceneManager scenemanager = webInterface.Registry.RequestModuleInterface<ISceneManager> (); if (scenemanager.CreateRegion (newRegion)) { response = "<h3>Successfully created region</h3>" + "<script language=\"javascript\">" + "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" + "</script>"; return null; } response = "<h3>Error creating this region.</h3>"; return null; /* not required?? IGridRegisterModule gridRegister = webInterface.Registry.RequestModuleInterface<IGridRegisterModule> (); if (gridRegister != null) { if (gridRegister.RegisterRegionWithGrid (null, true, false, null)) { response = "<h3>Successfully created region</h3>" + "<script language=\"javascript\">" + "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" + "</script>"; return null; } } response = "<h3> Error registering region with grid</h3>"; } else response = "<h3>Error creating this region.</h3>"; return null; */ } // TODO: This will not work yet :) // update region details var infoConnector = Framework.Utilities.DataManager.RequestPlugin<IRegionInfoConnector> (); if (infoConnector != null) { infoConnector.UpdateRegionInfo (newRegion); response = "<h3>Region details updated.</h3>" + "<script language=\"javascript\">" + "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" + "</script>"; } else response = "<h3>Unable to update Region details!</h3>" + "<script language=\"javascript\">" + "setTimeout(function() {window.location.href = \"/?page=region_manager\";}, 2000);" + "</script>"; return null; } #endregion #region EditRegion // we have or need data if (httpRequest.Query.ContainsKey ("regionid")) { var region = gridService.GetRegionByUUID (null, UUID.Parse (httpRequest.Query ["regionid"].ToString ())); vars.Add ("RegionID", region.RegionID.ToString ()); vars.Add ("RegionName", region.RegionName); UserAccount estateOwnerAccount = null; var estateOwner = UUID.Zero; var estateId = -1; IEstateConnector estateConnector = Framework.Utilities.DataManager.RequestPlugin<IEstateConnector> (); if (estateConnector != null) { EstateSettings estate = estateConnector.GetEstateSettings (region.RegionID); if (estate != null) { estateId = (int)estate.EstateID; estateOwner = estate.EstateOwner; } var accountService = webInterface.Registry.RequestModuleInterface<IUserAccountService> (); if (accountService != null) estateOwnerAccount = accountService.GetUserAccount (null, estate.EstateOwner); } vars.Add ("EstateList", WebHelpers.EstateSelections (webInterface.Registry, estateOwner.ToString (), estateId)); vars.Add ("OwnerUUID", region.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 ("RegionPort", region.InternalPort.ToString ()); vars.Add ("RegionType", WebHelpers.RegionTypeArgs (translator, region.RegionType)); vars.Add ("RegionPresetType", WebHelpers.RegionPresetArgs (translator, region.RegionType)); vars.Add ("RegionTerrain", WebHelpers.RegionTerrainArgs (translator, region.RegionTerrain)); // TODO: This will not work yet :) bool switches = false; var infoConnector = Framework.Utilities.DataManager.RequestPlugin<IRegionInfoConnector> (); if (infoConnector != null) { var regionInfo = infoConnector.GetRegionInfo (region.RegionID); if (regionInfo != null) { vars.Add ("RegionCapacity", regionInfo.ObjectCapacity.ToString ()); vars.Add ("RegionVisibility", WebHelpers.YesNoSelection (translator, regionInfo.SeeIntoThisSimFromNeighbor)); vars.Add ("RegionInfinite", WebHelpers.YesNoSelection (translator, regionInfo.InfiniteRegion)); vars.Add ("RegionDelayStartup", WebHelpers.RegionStartupSelection (translator, regionInfo.Startup)); } } if (!switches) { vars.Add ("RegionCapacity", "Unknown"); vars.Add ("RegionVisibility", WebHelpers.YesNoSelection (translator, true)); vars.Add ("RegionInfinite", WebHelpers.YesNoSelection (translator, true)); vars.Add ("RegionDelayStartup", WebHelpers.RegionStartupSelection (translator, StartupType.Normal)); // normal startup } //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"); vars.Add ("Submit", translator.GetTranslatedString ("SaveUpdates")); } #endregion vars.Add ("RegionPresets", WebHelpers.RegionSelections (webInterface.Registry)); // Labels vars.Add ("UserName", user.Name); vars.Add ("RegionManagerText", translator.GetTranslatedString ("MenuRegionManager")); 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 ("EstateText", translator.GetTranslatedString ("EstateText")); 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 ("Cancel", translator.GetTranslatedString ("Cancel")); vars.Add ("InfoMessage", ""); return vars; }
public GridRegion(RegionInfo ConvertFrom) { Flags = 0; RegionName = ConvertFrom.RegionName; RegionType = ConvertFrom.RegionType; RegionLocX = ConvertFrom.RegionLocX; RegionLocY = ConvertFrom.RegionLocY; RegionLocZ = ConvertFrom.RegionLocZ; InternalPort = ConvertFrom.RegionPort; ExternalHostName = MainServer.Instance.HostName.Replace("https://", "").Replace("http://", ""); HttpPort = MainServer.Instance.Port; RegionID = ConvertFrom.RegionID; TerrainImage = ConvertFrom.RegionSettings.TerrainImageID; TerrainMapImage = ConvertFrom.RegionSettings.TerrainMapImageID; ParcelMapImage = ConvertFrom.RegionSettings.ParcelMapImageID; Access = ConvertFrom.AccessLevel; if (ConvertFrom.EstateSettings != null) EstateOwner = ConvertFrom.EstateSettings.EstateOwner; RegionSizeX = ConvertFrom.RegionSizeX; RegionSizeY = ConvertFrom.RegionSizeY; RegionSizeZ = ConvertFrom.RegionSizeZ; ScopeID = ConvertFrom.ScopeID; AllScopeIDs = ConvertFrom.AllScopeIDs; SessionID = ConvertFrom.GridSecureSessionID; Flags |= (int) RegionFlags.RegionOnline; }
/// <summary> /// Gets the name of the region. /// </summary> /// <returns><c>true</c>, if region name was gotten, <c>false</c> otherwise.</returns> /// <param name="regInfo">Reg info.</param> bool GetRegionName (ref RegionInfo regInfo) { var updated = false; Utilities.MarkovNameGenerator rNames = new Utilities.MarkovNameGenerator (); string regionName = rNames.FirstName (m_regionNameSeed == null ? Utilities.RegionNames : m_regionNameSeed, 3, 7); regionName = regInfo.RegionName; var oldName = regionName; do { regInfo.RegionName = MainConsole.Instance.Prompt ("Region Name (? for suggestion)", regionName); if (regInfo.RegionName == "" || regInfo.RegionName == "?") { regionName = rNames.NextName; regInfo.RegionName = ""; continue; } } while (regInfo.RegionName == ""); rNames.Reset (); if (regInfo.RegionName != oldName) updated = true; return updated; }
/// <summary> /// Creates the new region using addition options. /// </summary> /// <param name="scene">Scene.</param> /// <param name="cmd">Cmd.</param> private void CreateNewRegionExtended(IScene scene, string[] cmd) { string defaultDir = ""; string defaultExt = ".xml"; string regionName = ""; string regionFile = ""; List<string> newParams = new List<string>(cmd); foreach (string param in cmd) { if (param.StartsWith("--config", StringComparison.CurrentCultureIgnoreCase)) { regionFile = param.Remove(0, 9); newParams.Remove(param); } } if (newParams.Count == 3) { regionName = newParams [2]; } if (regionFile == "" ) { CreateNewRegion (regionName); return; } // we have a config file and possibly a region name IConfig config = m_config.Configs["FileBasedSimulationData"]; if (config != null) defaultDir = PathHelpers.ComputeFullPath (config.GetString ("StoreBackupDirectory", "Regions")); regionFile = PathHelpers.VerifyReadFile (regionFile, defaultExt, defaultDir); if (regionFile == "") return; // let's do it... MainConsole.Instance.Info ( "[SceneManager]: Loading region definition...." ); RegionInfo loadRegion = new RegionInfo (); loadRegion.LoadRegionConfig( regionFile ); if (loadRegion.RegionName != regionName) { if ( MainConsole.Instance.Prompt("You have specified a different name than what is specified in the configuration file\n"+ "Do you wish to rename the region to '" + regionName +"'? (yes/no): ") == "yes" ) { loadRegion.RegionName = regionName; } } //check for an existing Scene IScene region = m_scenes.Find((s) => s.RegionInfo.RegionName.ToLower() == regionName); if (region != null) { MainConsole.Instance.InfoFormat( "ERROR: The region '{0}' already exists, please retry", regionName); return; } // indicate this is a new region loadRegion.NewRegion = true; // get some current details var currentInfo = FindCurrentRegionInfo (); // let's do it ISimulationDataStore store = m_selectedDataService.Copy (); //StartRegion (store, store.CreateNewRegion (m_OpenSimBase, newRegion, currentInfo)); var newRegion = store.CreateNewRegion (m_OpenSimBase, loadRegion, currentInfo); if (newRegion.RegionName != "abort") { StartRegion (store, newRegion); // backup all our work foreach (ISimulationDataStore st in m_simulationDataServices) st.ForceBackup (); } }
/// <summary> /// Gets the region location. /// </summary> /// <returns><c>true</c>, if region location was gotten, <c>false</c> otherwise.</returns> /// <param name="regInfo">Reg info.</param> bool GetRegionLocation (ref RegionInfo regInfo) { var updated = false; var loc = regInfo.RegionLocX; regInfo.RegionLocX = int.Parse (MainConsole.Instance.Prompt ("Region Location X", ((regInfo.RegionLocX == 0 ? m_mapcenter_x : regInfo.RegionLocX / Constants.RegionSize)).ToString ())) * Constants.RegionSize; if (regInfo.RegionLocX != loc) updated = true; loc = regInfo.RegionLocY; regInfo.RegionLocY = int.Parse (MainConsole.Instance.Prompt ("Region location Y", ((regInfo.RegionLocY == 0 ? m_mapcenter_y : regInfo.RegionLocY / Constants.RegionSize)).ToString ())) * Constants.RegionSize; if (regInfo.RegionLocY != loc) updated = true; //loc = regInfo.RegionLocZ; //regInfo.RegionLocZ = // int.Parse (MainConsole.Instance.Prompt ("Region location Z", // ((regInfo.RegionLocZ == 0 // ? 0 // : regInfo.RegionLocZ / Constants.RegionSize)).ToString ())) * Constants.RegionSize; //if (regInfo.RegionLocZ != loc) // updated = true; return updated; }
/// <summary> /// Use the asset set information at path to load assets /// </summary> /// <param name="iarFileName"></param> protected void LoadLibraries(string iarFileName) { RegionInfo regInfo = new RegionInfo(); IScene m_MockScene = null; //Make the scene for the IAR loader if (m_registry is IScene) m_MockScene = (IScene) m_registry; else { m_MockScene = new Scene(); m_MockScene.Initialize(regInfo); m_MockScene.AddModuleInterfaces(m_registry.GetInterfaces()); } UserAccount uinfo = m_MockScene.UserAccountService.GetUserAccount(null, m_service.LibraryOwner); //Make the user account for the default IAR if (uinfo == null) { MainConsole.Instance.Warn("Creating user " + m_service.LibraryOwnerName); m_MockScene.UserAccountService.CreateUser(m_service.LibraryOwner, UUID.Zero, m_service.LibraryOwnerName, "", ""); uinfo = m_MockScene.UserAccountService.GetUserAccount(null, m_service.LibraryOwner); m_MockScene.InventoryService.CreateUserInventory(uinfo.PrincipalID, false); } if (m_MockScene.InventoryService.GetRootFolder(m_service.LibraryOwner) == null) m_MockScene.InventoryService.CreateUserInventory(uinfo.PrincipalID, false); List<InventoryFolderBase> rootFolders = m_MockScene.InventoryService.GetFolderFolders(uinfo.PrincipalID, UUID.Zero); bool alreadyExists = rootFolders.Any(folder => folder.Name == iarFileName); if (alreadyExists) { MainConsole.Instance.InfoFormat("[LIBRARY INVENTORY]: Found previously loaded iar file {0}, ignoring.", iarFileName); return; } MainConsole.Instance.InfoFormat("[LIBRARY INVENTORY]: Loading iar file {0}", iarFileName); InventoryFolderBase rootFolder = m_MockScene.InventoryService.GetRootFolder(uinfo.PrincipalID); if (null == rootFolder) { //We need to create the root folder, otherwise the IAR freaks m_MockScene.InventoryService.CreateUserInventory(uinfo.PrincipalID, false); } InventoryArchiveReadRequest archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName, false, m_service.LibraryOwner); try { archread.ReplaceAssets = true; //Replace any old assets List<InventoryNodeBase> nodes = new List<InventoryNodeBase>(archread.Execute(true)); if (nodes.Count == 0) return; InventoryFolderBase f = (InventoryFolderBase) nodes[0]; UUID IARRootID = f.ID; TraverseFolders(IARRootID, m_MockScene); FixParent(IARRootID, m_MockScene, m_service.LibraryRootFolderID); f.Name = iarFileName; f.ParentID = UUID.Zero; f.ID = m_service.LibraryRootFolderID; f.Type = (int) AssetType.RootFolder; f.Version = 1; m_MockScene.InventoryService.UpdateFolder(f); } catch (Exception e) { MainConsole.Instance.DebugFormat("[LIBRARY MODULE]: Exception when processing archive {0}: {1}", iarFileName, e.StackTrace); } finally { archread.Close(); } }
/// <summary> /// Gets the region optional settings. /// </summary> /// <returns><c>true</c>, if region optional was gotten, <c>false</c> otherwise.</returns> /// <param name="regInfo">Reg info.</param> bool GetRegionOptional (ref RegionInfo regInfo) { var updated = false; // allow port selection var oldPort = regInfo.RegionPort; regInfo.RegionPort = int.Parse (MainConsole.Instance.Prompt ("Region Port (Only change if necessary)", regInfo.RegionPort.ToString ())); if (regInfo.RegionPort != oldPort) updated = true; var oldStart = regInfo.Startup; // Startup mode string scriptStart = MainConsole.Instance.Prompt ( "Region Startup - Normal or Delayed startup (normal/delay) : ", "normal").ToLower (); regInfo.Startup = scriptStart.StartsWith ("n") ? StartupType.Normal : StartupType.Medium; if (regInfo.Startup != oldStart) updated = true; var oldSwitch = regInfo.SeeIntoThisSimFromNeighbor; regInfo.SeeIntoThisSimFromNeighbor = MainConsole.Instance.Prompt ( "See into this sim from neighbors (yes/no)", regInfo.SeeIntoThisSimFromNeighbor ? "yes" : "no").ToLower () == "yes"; if (regInfo.SeeIntoThisSimFromNeighbor != oldSwitch) updated = true; oldSwitch = regInfo.InfiniteRegion; regInfo.InfiniteRegion = MainConsole.Instance.Prompt ( "Make an infinite region (yes/no)", regInfo.InfiniteRegion ? "yes" : "no").ToLower () == "yes"; if (regInfo.InfiniteRegion != oldSwitch) updated = true; var oldCap = regInfo.ObjectCapacity; regInfo.ObjectCapacity = int.Parse (MainConsole.Instance.Prompt ("Object capacity", regInfo.ObjectCapacity == 0 ? "50000" : regInfo.ObjectCapacity.ToString ())); if (regInfo.ObjectCapacity != oldCap) updated = true; return updated; }
/// <summary> /// Handles the default inventory save. /// </summary> /// <param name="scene">Scene.</param> /// <param name="cmd">Cmd.</param> private void HandleDefInvSave( IScene scene, string[] cmd ) { if (!m_enabled) return; if (m_busy) return; string fileName = IARName; // optional filename int el = cmd.Length; if (el >= 4) { fileName = cmd[3]; // some file sanity checks string extension = Path.GetExtension (fileName); if (extension == string.Empty) { fileName = fileName + ".iar"; } } string fileDir = Path.GetDirectoryName (fileName); if (fileDir == "") { fileDir = "./DefaultInventory"; fileName = fileDir + '/' + fileName; } if (!Directory.Exists (fileDir)) { MainConsole.Instance.Info ("[LIBDEF]: The folder specified, '" + fileDir + "' does not exist!"); return; } // don't try and write to an existing file if (File.Exists (fileName)) { if (MainConsole.Instance.Prompt ("[LIBDEF]: The inventory file '" + fileName + "' exists. Overwrite?", "yes") != "yes") return; File.Delete (fileName); } // good to go... do it... m_busy = true; m_service = m_registry.RequestModuleInterface<ILibraryService>(); RegionInfo regInfo = new RegionInfo(); IScene m_MockScene = null; //Make the scene for the IAR loader if (m_registry is IScene) m_MockScene = (IScene)m_registry; else { m_MockScene = new Scene(); m_MockScene.Initialize(regInfo); m_MockScene.AddModuleInterfaces(m_registry.GetInterfaces()); } UserAccount uinfo = m_MockScene.UserAccountService.GetUserAccount(null, m_service.LibraryOwner); //Make the user account for the default IAR if (uinfo == null) { uinfo = new UserAccount(m_service.LibraryOwner); uinfo.Name = m_service.LibraryOwnerName; m_MockScene.InventoryService.CreateUserInventory(m_service.LibraryOwner, false); } List<AssetBase> assets = new List<AssetBase> (); if (m_MockScene.InventoryService != null) { //Add the folders to the user's inventory InventoryCollection i = m_MockScene.InventoryService.GetFolderContent (m_service.LibraryOwner, UUID.Zero); if (i != null) { foreach (InventoryItemBase item in i.Items) { AssetBase asset = m_MockScene.RequestModuleInterface<IAssetService> ().Get (item.AssetID.ToString ()); if (asset != null) assets.Add (asset); } } } InventoryFolderBase rootFolder = null; List<InventoryFolderBase> rootFolders = m_MockScene.InventoryService.GetRootFolders (m_service.LibraryOwner); foreach (InventoryFolderBase folder in rootFolders) { if (folder.Name == "My Inventory") continue; rootFolder = folder; break; } if (rootFolder != null) { //Save the IAR of the default assets MainConsole.Instance.Info ("[LIBDEF]: Saving default inventory to " + fileName); InventoryArchiveWriteRequest write = new InventoryArchiveWriteRequest (Guid.NewGuid (), null, m_MockScene, uinfo, "/", new GZipStream (new FileStream (fileName, FileMode.Create), CompressionMode.Compress), true, rootFolder, assets); write.Execute (); } m_busy = false; }
public virtual RegionInfo CreateNewRegion(ISimulationBase simBase, string regionName, Dictionary<string, int> currentInfo) { ReadConfig(simBase); _regionData = new RegionData(); _regionData.Init(); RegionInfo info = new RegionInfo(); info.RegionName = regionName; info.NewRegion = true; info = CreateRegionFromConsole(info, true, currentInfo); if (info == null) return CreateNewRegion(simBase, info, currentInfo); m_fileName = info.RegionName; return info; }
/// <summary> /// Loads the estate settings from an archive. /// </summary> /// <param name="data">Data.</param> /// <param name="filePath">File path.</param> /// <param name="type">Type.</param> /// <param name="scene">Scene.</param> public void LoadModuleFromArchive(byte[] data, string filePath, TarArchiveReader.TarEntryType type, IScene scene) { if (filePath.StartsWith("estatesettings/")) { EstateSettings settings = new EstateSettings(); settings.FromOSD((OSDMap) OSDParser.DeserializeLLSDBinary(data)); scene.RegionInfo.EstateSettings = settings; } else if (filePath.StartsWith("regioninfo/")) { string m_merge = MainConsole.Instance.Prompt( "Should we load the region information from the archive (region name, region position, etc)?", "false"); RegionInfo settings = new RegionInfo(); settings.UnpackRegionInfoData((OSDMap) OSDParser.DeserializeLLSDBinary(data)); if (m_merge == "false") { //Still load the region settings though scene.RegionInfo.RegionSettings = settings.RegionSettings; return; } settings.RegionSettings = scene.RegionInfo.RegionSettings; settings.EstateSettings = scene.RegionInfo.EstateSettings; scene.RegionInfo = settings; } }
/// <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> private 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) { 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 (Flatland/Mainland/Island)", (info.RegionType == "" ? "Flatland" : info.RegionType)); 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 ())); } // 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 (); ForceBackup(); MainConsole.Instance.Info("[FileBasedSimulationData]: Save completed."); } return info; }
public RegionData LoadBackup(string file) { if (!File.Exists(file)) return null; var stream = ArchiveHelpers.GetStream(file); if (stream == null) return null; MainConsole.Instance.Warn("[TarRegionDataLoader]: loading region data: " + file); GZipStream m_loadStream = new GZipStream(stream, CompressionMode.Decompress); TarArchiveReader reader = new TarArchiveReader(m_loadStream); List<uint> foundLocalIDs = new List<uint>(); RegionData regiondata = new RegionData(); regiondata.Init(); byte[] data; string filePath; TarArchiveReader.TarEntryType entryType; System.Collections.Concurrent.ConcurrentQueue<byte[]> groups = new System.Collections.Concurrent.ConcurrentQueue<byte[]>(); //Load the archive data that we need while ((data = reader.ReadEntry(out filePath, out entryType)) != null) { MainConsole.Instance.Warn("."); if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY == entryType) continue; if (filePath.StartsWith("parcels/")) { //Only use if we are not merging LandData parcel = new LandData(); OSD parcelData = OSDParser.DeserializeLLSDBinary(data); parcel.FromOSD((OSDMap) parcelData); if (parcel.OwnerID != UUID.Parse("05948863-b678-433e-87a4-e44d17678d1d")) //The default owner of the 'default' region regiondata.Parcels.Add(parcel); } else if (filePath.StartsWith("newstyleterrain/")) { regiondata.Terrain = data; } else if (filePath.StartsWith("newstylerevertterrain/")) { regiondata.RevertTerrain = data; } else if (filePath.StartsWith("newstylewater/")) { regiondata.Water = data; } else if (filePath.StartsWith("newstylerevertwater/")) { regiondata.RevertWater = data; } else if (filePath.StartsWith("entities/")) { groups.Enqueue(data); } else if (filePath.StartsWith("regioninfo/")) { RegionInfo info = new RegionInfo(); info.FromOSD((OSDMap) OSDParser.DeserializeLLSDBinary(data)); regiondata.RegionInfo = info; } data = null; } m_loadStream.Close(); m_loadStream = null; int threadCount = groups.Count > 16 ? 16 : groups.Count; System.Threading.Thread[] threads = new System.Threading.Thread[threadCount]; for (int i = 0; i < threadCount; i++) { threads[i] = new System.Threading.Thread(() => { byte[] groupData; while (groups.TryDequeue(out groupData)) { MemoryStream ms = new MemoryStream(groupData); ISceneEntity sceneObject = SceneEntitySerializer.SceneObjectSerializer .FromXml2Format(ref ms, null); ms.Close(); ms = null; data = null; if (sceneObject != null) { foreach ( ISceneChildEntity part in sceneObject.ChildrenEntities()) { lock (foundLocalIDs) { if ( !foundLocalIDs.Contains( part.LocalId)) foundLocalIDs.Add(part.LocalId); else part.LocalId = 0; //Reset it! Only use it once! } } regiondata.Groups.Add( sceneObject as SceneObjectGroup); } } }); threads[i].Start(); } for (int i = 0; i < threadCount; i++) threads[i].Join(); foundLocalIDs.Clear(); MainConsole.Instance.Warn("[TarRegionDataLoader]: completed: "); return regiondata; }
public void StartRegion(ISimulationDataStore simData, RegionInfo regionInfo) { MainConsole.Instance.InfoFormat("[SceneManager]: Starting region \"{0}\" at @ {1},{2}", regionInfo.RegionName, regionInfo.RegionLocX/256, regionInfo.RegionLocY/256); ISceneLoader sceneLoader = m_OpenSimBase.ApplicationRegistry.RequestModuleInterface<ISceneLoader>(); if (sceneLoader == null) throw new Exception("No Scene Loader Interface!"); //Get the new scene from the interface IScene scene = sceneLoader.CreateScene(simData, regionInfo); m_scenes.Add(scene); MainConsole.Instance.ConsoleScenes = m_scenes; simData.SetRegion(scene); m_simulationDataServices.Add(simData); if (OnAddedScene != null) OnAddedScene(scene); StartModules(scene); if (OnFinishedAddingScene != null) OnFinishedAddingScene(scene); //Start the heartbeats scene.StartHeartbeat(); //Tell the scene that the startup is complete // Note: this event is added in the scene constructor scene.FinishedStartup("Startup", new List<string>()); }
/// <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, bool 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"] : m_mapcenter_x * Constants.RegionSize; info.RegionLocY = currentInfo ["minY"] > 0 ? currentInfo ["minY"] : m_mapcenter_y * Constants.RegionSize; info.RegionPort = currentInfo ["port"] > 0 ? currentInfo ["port"] + 1 : (int) MainServer.Instance.Port; } else { info.RegionLocX = m_mapcenter_x * Constants.RegionSize; info.RegionLocY = m_mapcenter_y * Constants.RegionSize; info.RegionPort = (int)MainServer.Instance.Port; } prompt = true; } // prompt for user input if (prompt) { GetRegionName (ref info); GetRegionLocation (ref info); GetRegionSize (ref info); bool bigRegion = ((info.RegionSizeX > Constants.MaxRegionSize) || (info.RegionSizeY > Constants.MaxRegionSize)); // * Mainland / Full Region (Private) // * Mainland / Homestead // * Mainland / Openspace // // * Estate / Full Region (Private) // * Estate / Homestead // * Estate / Openspace // // * WhiteCore Home / Full Region (Private) // info.RegionType = MainConsole.Instance.Prompt ("Region Type (Mainland / Estate / Homes)", (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", StringComparison.Ordinal)) { // Mainland regions info.RegionType = "Mainland / "; responses.Add ("Full Region"); responses.Add ("Homestead"); responses.Add ("Openspace"); setupMode = MainConsole.Instance.Prompt ("Mainland region type?", "Full Region", responses).ToLower (); // allow specifying terrain for Openspace if (bigRegion) terrainOpen = "flatland"; else if (setupMode.StartsWith ("o", StringComparison.Ordinal)) terrainOpen = MainConsole.Instance.Prompt ("Openspace terrain ( Grassland, Swamp, Aquatic)?", terrainOpen).ToLower (); } else if (info.RegionType.ToLower ().StartsWith ("e", StringComparison.Ordinal)) { // Estate regions info.RegionType = "Estate / "; responses.Add ("Full Region"); responses.Add ("Homestead"); responses.Add ("Openspace"); setupMode = MainConsole.Instance.Prompt ("Estate region type?", "Full Region", responses).ToLower (); } else { info.RegionType = "WhiteCore Homes / "; responses.Add ("Full Region"); setupMode = MainConsole.Instance.Prompt ("Estate region type?", "Full Region", responses).ToLower (); } // terrain can be specified for Full or custom regions if (bigRegion) terrainFull = "Flatland"; if (setupMode.StartsWith ("f", StringComparison.Ordinal)) { // 'Region land types' setup 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 ("o", StringComparison.Ordinal)) { // 'Openspace' setup info.RegionType = info.RegionType + "Openspace"; if (terrainOpen.StartsWith ("a", StringComparison.Ordinal)) info.RegionTerrain = "Aquatic"; else if (terrainOpen.StartsWith ("s", StringComparison.Ordinal)) info.RegionTerrain = "Swamp"; else if (terrainOpen.StartsWith ("g", StringComparison.Ordinal)) info.RegionTerrain = "Grassland"; else info.RegionTerrain = "Flatland"; info.Startup = StartupType.Medium; info.SeeIntoThisSimFromNeighbor = true; info.InfiniteRegion = true; info.ObjectCapacity = 1000; info.RegionSettings.AgentLimit = 10; info.RegionSettings.AllowLandJoinDivide = false; info.RegionSettings.AllowLandResell = false; } if (setupMode.StartsWith ("h", StringComparison.Ordinal)) { // 'Homestead' setup info.RegionType = info.RegionType + "Homestead"; if (bigRegion) info.RegionTerrain = "Flatland"; else info.RegionTerrain = "Homestead"; info.Startup = StartupType.Medium; info.SeeIntoThisSimFromNeighbor = true; info.InfiniteRegion = true; info.ObjectCapacity = 5000; info.RegionSettings.AgentLimit = 20; info.RegionSettings.AllowLandJoinDivide = false; info.RegionSettings.AllowLandResell = false; } if (setupMode.StartsWith ("f", StringComparison.Ordinal)) { // 'Full Region' setup info.RegionType = info.RegionType + "Full Region"; info.RegionTerrain = terrainFull; info.Startup = StartupType.Normal; info.SeeIntoThisSimFromNeighbor = true; info.InfiniteRegion = true; info.ObjectCapacity = 20000; // assume private region info.RegionSettings.AgentLimit = 100; if (info.RegionType.StartsWith ("M", StringComparison.Ordinal)) { // Mainland info.RegionSettings.AllowLandJoinDivide = false; // defaults are 'true' info.RegionSettings.AllowLandResell = false; info.ObjectCapacity = 22500; } else if (info.RegionType.StartsWith ("H", StringComparison.Ordinal)) // (WhiteCore) Homes { info.RegionSettings.AllowLandJoinDivide = true; info.RegionSettings.AllowLandResell = true; info.ObjectCapacity = 30000; } } // re-proportion allocations based on actual region area <> std area var regFactor = (info.RegionSizeX * info.RegionSizeY) / (Constants.RegionSize * Constants.RegionSize); info.ObjectCapacity = (int)Math.Round ((float)(info.ObjectCapacity * regFactor)); info.RegionSettings.AgentLimit = (int)Math.Round ((float)(info.RegionSettings.AgentLimit * regFactor)); } // 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; }
public void Initialize (RegionInfo regionInfo, ISimulationDataStore dataStore, AgentCircuitManager authen, List<IClientNetworkServer> clientServers) { Initialize (regionInfo); //Set up the clientServer m_clientServers = clientServers; foreach (IClientNetworkServer clientServer in clientServers) { clientServer.AddScene (this); } m_sceneManager = RequestModuleInterface<ISceneManager> (); m_simDataStore = dataStore; m_config = m_sceneManager.ConfigSource; m_authenticateHandler = authen; m_WhiteCoreEventManager = new WhiteCoreEventManager (); m_eventManager = new EventManager (); m_permissions = new ScenePermissions (this); m_sceneGraph = new SceneGraph (this, m_regInfo); #region Region Config IConfig whitecorestartupConfig = m_config.Configs ["WhiteCoreStartup"]; if (whitecorestartupConfig != null) { //Region specific is still honored here, the RegionInfo checks for it, and if it is 0, it didn't set it if (RegionInfo.ObjectCapacity == 0) RegionInfo.ObjectCapacity = whitecorestartupConfig.GetInt ("ObjectCapacity", 80000); } IConfig packetConfig = m_config.Configs ["PacketPool"]; if (packetConfig != null) { PacketPool.Instance.RecyclePackets = packetConfig.GetBoolean ("RecyclePackets", true); PacketPool.Instance.RecycleDataBlocks = packetConfig.GetBoolean ("RecycleDataBlocks", true); } #endregion Region Config m_basesimfps = 45f; m_basesimphysfps = 45f; m_basesimphysfps = Config.Configs ["Physics"].GetFloat ("BasePhysicsFPS", 45f); if (m_basesimphysfps > 45f) m_basesimphysfps = 45f; m_basesimfps = Config.Configs ["Protection"].GetFloat ("BaseRateFramesPerSecond", 45f); if (m_basesimfps > 45f) m_basesimfps = 45f; if (m_basesimphysfps > m_basesimfps) m_basesimphysfps = m_basesimfps; m_updatetimespan = 1000 / m_basesimfps; m_physicstimespan = 1000 / m_basesimphysfps; #region Startup Complete config EventManager.OnAddToStartupQueue += AddToStartupQueue; EventManager.OnModuleFinishedStartup += FinishedStartup; //EventManager.OnStartupComplete += StartupComplete; AddToStartupQueue ("Startup"); #endregion }
public override void Initialise(IMesher meshmerizer, IScene scene) { m_region = scene.RegionInfo; }