public int CreateNewEstate(EstateSettings es, UUID RegionID) { object remoteValue = DoRemote(es.ToOSD(), RegionID); if (remoteValue != null || m_doRemoteOnly) return (int) remoteValue; int estateID = GetEstate(es.EstateOwner, es.EstateName); if (estateID > 0) { if (LinkRegion(RegionID, estateID)) return estateID; return 0; } es.EstateID = GetNewEstateID(); SaveEstateSettings(es, true); LinkRegion(RegionID, (int) es.EstateID); return (int) es.EstateID; }
private bool CheckEstateGroups(EstateSettings ES, AgentCircuitData agent) { IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); if (gm != null && ES.EstateGroups.Count > 0) { GroupMembershipData[] gmds = gm.GetMembershipData(agent.AgentID); return gmds.Any(gmd => ES.EstateGroups.Contains(gmd.GroupID)); } return false; }
private EstateSettings CreateEstateInfo(IScene scene) { EstateSettings ES = new EstateSettings(); while (true) { IEstateConnector EstateConnector = Framework.Utilities.DataManager.RequestPlugin<IEstateConnector>(); string name = MainConsole.Instance.Prompt("Estate owner name", LastEstateOwner); UserAccount account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.AllScopeIDs, name); if (account == null) { string createNewUser = MainConsole.Instance.Prompt( "Could not find user " + name + ". Would you like to create this user?", "yes"); if (createNewUser == "yes") { // Create a new account string password = MainConsole.Instance.PasswordPrompt(name + "'s password"); string email = MainConsole.Instance.Prompt(name + "'s email", ""); scene.UserAccountService.CreateUser(name, Util.Md5Hash(password), email); account = scene.UserAccountService.GetUserAccount(scene.RegionInfo.AllScopeIDs, name); if (account == null) { MainConsole.Instance.ErrorFormat( "[EstateService]: Unable to store account. If this simulator is connected to a grid, you must create the estate owner account first at the grid level."); continue; } } else continue; } LastEstateOwner = account.Name; List<EstateSettings> ownerEstates = EstateConnector.GetEstates(account.PrincipalID); string response = (ownerEstates != null && ownerEstates.Count > 0) ? "yes" : "no"; if (ownerEstates != null && ownerEstates.Count > 0) { MainConsole.Instance.WarnFormat("Found user. {0} has {1} estates currently. {2}", account.Name, ownerEstates.Count, "These estates are the following:"); foreach (EstateSettings t in ownerEstates) { MainConsole.Instance.Warn(t.EstateName); } response = MainConsole.Instance.Prompt( "Do you wish to join one of these existing estates? (Options are {yes, no, cancel})", response, new List<string> {"yes", "no", "cancel"}); } else { MainConsole.Instance.WarnFormat("Found user. {0} has no estates currently. Creating a new estate.", account.Name); } if (response == "no") { // Create a new estate // ES could be null ES.EstateName = MainConsole.Instance.Prompt("New estate name (or cancel to go back)", "My Estate"); if (ES.EstateName == "cancel") continue; //Set to auto connect to this region next LastEstateName = ES.EstateName; ES.EstateOwner = account.PrincipalID; ES.EstateID = (uint) EstateConnector.CreateNewEstate(ES, scene.RegionInfo.RegionID); if (ES.EstateID == 0) { MainConsole.Instance.Warn("There was an error in creating this estate: " + ES.EstateName); //EstateName holds the error. See LocalEstateConnector for more info. continue; } break; } if (response == "yes") { if (ownerEstates != null && ownerEstates.Count != 1) { if (LastEstateName == "") LastEstateName = ownerEstates[0].EstateName; List<string> responses = ownerEstates.Select(settings => settings.EstateName).ToList(); responses.Add("None"); responses.Add("Cancel"); response = MainConsole.Instance.Prompt("Estate name to join", LastEstateName, responses); if (response == "None" || response == "Cancel") continue; LastEstateName = response; } else if (ownerEstates != null) LastEstateName = ownerEstates[0].EstateName; int estateID = EstateConnector.GetEstate(account.PrincipalID, LastEstateName); if (estateID == 0) { MainConsole.Instance.Warn("The name you have entered matches no known estate. Please try again"); continue; } //We save the Password because we have to reset it after we tell the EstateService about it, as it clears it for security reasons if (EstateConnector.LinkRegion(scene.RegionInfo.RegionID, estateID)) { if ((ES = EstateConnector.GetEstateSettings(scene.RegionInfo.RegionID)) == null || ES.EstateID == 0) //We could do by EstateID now, but we need to completely make sure that it fully is set up { MainConsole.Instance.Warn("The connection to the server was broken, please try again soon."); continue; } MainConsole.Instance.Warn("Successfully joined the estate!"); break; } MainConsole.Instance.Warn("Joining the estate failed. Please try again."); continue; } } return ES; }
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; } }
public override void FinishedMigration(IDataConnector genericData) { if (!genericData.TableExists("estates")) return; DataReaderConnection dr = genericData.QueryData("WHERE `Key` = 'EstateID'", "estates", "`ID`, `Key`, `Value`"); if (dr != null) { try { while (dr.DataReader.Read()) { try { UUID ID = UUID.Parse(dr.DataReader["ID"].ToString()); string value = dr.DataReader["Value"].ToString(); QueryFilter filter = new QueryFilter(); filter.andFilters["`ID`"] = value; filter.andFilters["`Key`"] = "EstateSettings"; List<string> results = genericData.Query(new string[1] {"`Value`"}, "estates", filter, null, null, null); if ((results != null) && (results.Count >= 1)) { EstateSettings es = new EstateSettings(); es.FromOSD((OSDMap) OSDParser.DeserializeLLSDXml(results[0])); genericData.Insert("estateregions", new object[] {ID, value}); filter = new QueryFilter(); filter.andFilters["`EstateID`"] = value; List<string> exist = genericData.Query(new string[1] {"`EstateID`"}, "estatesettings", filter, null, null, null); if (exist == null || exist.Count == 0) { genericData.Insert("estatesettings", new object[] { value, es.EstateName, es.EstateOwner, es.ParentEstateID, es.ToOSD() }); } } } catch { } } } catch { } finally { dr.DataReader.Close(); genericData.CloseDatabase(dr); } } }
private EstateSettings GetEstate(int estateID) { QueryFilter filter = new QueryFilter(); filter.andFilters["EstateID"] = estateID; List<string> retVals = GD.Query(new string[1] {"*"}, m_estateTable, filter, null, null, null); EstateSettings settings = new EstateSettings { EstateID = 0 }; if (retVals.Count > 0) settings.FromOSD((OSDMap) OSDParser.DeserializeJson(retVals[4])); return settings; }
protected void SaveEstateSettings(EstateSettings es, bool doInsert) { Dictionary<string, object> values = new Dictionary<string, object>(5); values["EstateID"] = es.EstateID; values["EstateName"] = es.EstateName; values["EstateOwner"] = es.EstateOwner; values["ParentEstateID"] = es.ParentEstateID; values["Settings"] = OSDParser.SerializeJsonString(es.ToOSD()); if (!doInsert) { QueryFilter filter = new QueryFilter(); filter.andFilters["EstateID"] = es.EstateID; GD.Update(m_estateTable, values, null, filter, null, null); } else { GD.Insert(m_estateTable, values); } }
public void SaveEstateSettings(EstateSettings es) { object remoteValue = DoRemote(es.ToOSD()); if (remoteValue != null || m_doRemoteOnly) return; SaveEstateSettings(es, false); }
public EstateSettings GetEstateSettings(UUID regionID) { object remoteValue = DoRemote(regionID); if (remoteValue != null || m_doRemoteOnly) return (EstateSettings)remoteValue; EstateSettings settings = new EstateSettings() {EstateID = 0}; int estateID = GetEstateID(regionID); if (estateID == 0) return settings; settings = GetEstate(estateID); return settings; }