From 263633e274082135b21b8183b92280b768d18883 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 18 Jul 2008 02:40:47 +0000 Subject: Patch #9151 Makes the estate dialog fully functional. Implements all client facing functionality. Moves estate data from estate_settings.xml, which is used to provide defaults, to the region data store. Creates one estate for each region, and places the region in it. Converts all region bans to estate bans. --- OpenSim/Region/Application/OpenSimBase.cs | 1 - .../Region/ClientStack/LindenUDP/LLClientView.cs | 64 ++++-- .../Region/Communications/OGS1/OGS1GridServices.cs | 4 +- .../Environment/Interfaces/IEstateDataStore.cs | 41 ++++ .../Environment/Interfaces/IRegionDataStore.cs | 4 - .../Modules/World/Estate/EstateManagementModule.cs | 234 +++++++++++++++------ .../Environment/Modules/World/Land/LandObject.cs | 6 +- .../Environment/Modules/World/NPC/NPCAvatar.cs | 7 +- .../Modules/World/Permissions/PermissionsModule.cs | 12 +- OpenSim/Region/Environment/Scenes/Scene.cs | 25 +-- OpenSim/Region/Environment/StorageManager.cs | 18 ++ .../Region/Examples/SimpleModule/MyNpcCharacter.cs | 7 +- .../OpenSim.DataStore.MSSQL/MSSQLDataStore.cs | 17 -- 13 files changed, 295 insertions(+), 145 deletions(-) create mode 100644 OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index c9cc062..380df73 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs @@ -520,7 +520,6 @@ namespace OpenSim //moved these here as the terrain texture has to be created after the modules are initialized // and has to happen before the region is registered with the grid. scene.CreateTerrainTexture(false); - scene.LoadRegionBanlist(); try { diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index b170f28..2c05097 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -166,6 +166,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP private GenericCall4 handlerDeRezObject = null; //OnDeRezObject; private ModifyTerrain handlerModifyTerrain = null; private BakeTerrain handlerBakeTerrain = null; + private EstateChangeInfo handlerEstateChangeInfo = null; private Action handlerRegionHandShakeReply = null; //OnRegionHandShakeReply; private GenericCall2 handlerRequestWearables = null; //OnRequestWearables; private Action handlerRequestAvatarsData = null; //OnRequestAvatarsData; @@ -920,6 +921,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP public event CommitEstateTerrainTextureRequest OnCommitEstateTerrainTextureRequest; public event SetRegionTerrainSettings OnSetRegionTerrainSettings; public event BakeTerrain OnBakeTerrain; + public event EstateChangeInfo OnEstateChangeInfo; public event EstateRestartSimRequest OnEstateRestartSimRequest; public event EstateChangeCovenantRequest OnEstateChangeCovenantRequest; public event UpdateEstateAccessDeltaRequest OnUpdateEstateAccessDeltaRequest; @@ -2614,18 +2616,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP this.OutPacket(packet, ThrottleOutPacketType.Task); } - public void SendBannedUserList(LLUUID invoice, List banlist, uint estateID) + public void SendBannedUserList(LLUUID invoice, EstateBan[] bl, uint estateID) { - RegionBanListItem[] bl = banlist.ToArray(); - - LLUUID[] BannedUsers = new LLUUID[bl.Length]; - + ListBannedUsers = new List(); for (int i = 0; i < bl.Length; i++) { if (bl[i] == null) continue; - BannedUsers[i] = bl[i].bannedUUID; + if (bl[i].bannedUUID == LLUUID.Zero) + continue; + BannedUsers.Add(bl[i].bannedUUID); } EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); @@ -2635,9 +2636,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP packet.MethodData.Invoice = invoice; packet.MethodData.Method = Helpers.StringToField("setaccess"); - EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + BannedUsers.Length]; + EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[6 + BannedUsers.Count]; - for (int i = 0; i < (6 + BannedUsers.Length); i++) + for (int i = 0; i < (6 + BannedUsers.Count); i++) { returnblock[i] = new EstateOwnerMessagePacket.ParamListBlock(); } @@ -2647,12 +2648,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP returnblock[j].Parameter = Helpers.StringToField(((int)Constants.EstateAccessCodex.EstateBans).ToString()); j++; returnblock[j].Parameter = Helpers.StringToField("0"); j++; returnblock[j].Parameter = Helpers.StringToField("0"); j++; - returnblock[j].Parameter = Helpers.StringToField(BannedUsers.Length.ToString()); j++; + returnblock[j].Parameter = Helpers.StringToField(BannedUsers.Count.ToString()); j++; returnblock[j].Parameter = Helpers.StringToField("0"); j++; - for (int i = 0; i < BannedUsers.Length; i++) + foreach (LLUUID banned in BannedUsers) { - returnblock[j].Parameter = BannedUsers[i].GetBytes(); j++; + returnblock[j].Parameter = banned.GetBytes(); j++; } packet.ParamList = returnblock; packet.Header.Reliable = false; @@ -2687,11 +2688,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP this.OutPacket(rinfopack, ThrottleOutPacketType.Task); } - public void SendEstateCovenantInformation() + public void SendEstateCovenantInformation(LLUUID covenant) { EstateCovenantReplyPacket einfopack = new EstateCovenantReplyPacket(); EstateCovenantReplyPacket.DataBlock edata = new EstateCovenantReplyPacket.DataBlock(); - edata.CovenantID = m_scene.RegionInfo.CovenantID; + edata.CovenantID = covenant; edata.CovenantTimestamp = 0; edata.EstateOwnerID = m_scene.RegionInfo.MasterAvatarAssignedUUID; edata.EstateName = @@ -2700,7 +2701,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP this.OutPacket(einfopack, ThrottleOutPacketType.Task); } - public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID) + public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant) { EstateOwnerMessagePacket packet = new EstateOwnerMessagePacket(); packet.MethodData.Invoice = invoice; @@ -2718,13 +2719,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP returnblock[1].Parameter = Helpers.StringToField(m_scene.RegionInfo.MasterAvatarAssignedUUID.ToString()); returnblock[2].Parameter = Helpers.StringToField(estateID.ToString()); - // TODO: Resolve Magic numbers here - returnblock[3].Parameter = Helpers.StringToField("269516800"); - returnblock[4].Parameter = Helpers.StringToField("0"); - returnblock[5].Parameter = Helpers.StringToField("1"); - returnblock[6].Parameter = Helpers.StringToField(m_scene.RegionInfo.RegionID.ToString()); - returnblock[7].Parameter = Helpers.StringToField("1160895077"); - returnblock[8].Parameter = Helpers.StringToField("1"); + returnblock[3].Parameter = Helpers.StringToField(estateFlags.ToString()); + returnblock[4].Parameter = Helpers.StringToField(sunPosition.ToString()); + returnblock[5].Parameter = Helpers.StringToField(parentEstate.ToString()); + returnblock[6].Parameter = Helpers.StringToField(covenant.ToString()); + returnblock[7].Parameter = Helpers.StringToField("1160895077"); // what is this? + returnblock[8].Parameter = Helpers.StringToField("1"); // what is this? packet.ParamList = returnblock; packet.Header.Reliable = false; @@ -5959,10 +5959,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP tmp = Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter); if (!tmp.Contains(".")) tmp += ".00"; float TerrainLowerLimit = (float)Convert.ToDecimal(tmp); + bool UseEstateSun = convertParamStringToBool(messagePacket.ParamList[3].Parameter); bool UseFixedSun = convertParamStringToBool(messagePacket.ParamList[4].Parameter); float SunHour = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(messagePacket.ParamList[5].Parameter)); + bool UseGlobal = convertParamStringToBool(messagePacket.ParamList[6].Parameter); + bool EstateFixedSun = convertParamStringToBool(messagePacket.ParamList[7].Parameter); + float EstateSunHour = (float)Convert.ToDecimal(Helpers.FieldToUTF8String(messagePacket.ParamList[8].Parameter)); - OnSetRegionTerrainSettings(WaterHeight, TerrainRaiseLimit, TerrainLowerLimit, UseFixedSun, SunHour); + OnSetRegionTerrainSettings(WaterHeight, TerrainRaiseLimit, TerrainLowerLimit, UseEstateSun, UseFixedSun, SunHour, UseGlobal, EstateFixedSun, EstateSunHour); } catch (Exception ex) @@ -6076,6 +6080,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP } break; + case "estatechangeinfo": + if (((Scene)m_scene).ExternalChecks.ExternalChecksCanIssueEstateCommand(this.AgentId)) + { + LLUUID invoice = messagePacket.MethodData.Invoice; + LLUUID SenderID = messagePacket.AgentData.AgentID; + UInt32 param1 = Convert.ToUInt32(Helpers.FieldToUTF8String(messagePacket.ParamList[1].Parameter)); + UInt32 param2 = Convert.ToUInt32(Helpers.FieldToUTF8String(messagePacket.ParamList[2].Parameter)); + + handlerEstateChangeInfo = OnEstateChangeInfo; + if (handlerEstateChangeInfo != null) + { + handlerEstateChangeInfo(this, invoice, SenderID, param1, param2); + } + } + break; + default: m_log.Error("EstateOwnerMessage: Unknown method requested\n" + messagePacket.ToString()); break; diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs index 6f4a563..d8a6daf 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs @@ -623,7 +623,7 @@ namespace OpenSim.Region.Communications.OGS1 { if (regions[i].RegionHandle == regionHandle) { - if (regions[i].CheckIfUserBanned(agentData.AgentID)) + if (regions[i].EstateSettings.IsBanned(agentData.AgentID)) { banned = true; break; @@ -1158,7 +1158,7 @@ namespace OpenSim.Region.Communications.OGS1 { if (regions[i].RegionHandle == regionHandle) { - if (regions[i].CheckIfUserBanned(agentID)) + if (regions[i].EstateSettings.IsBanned(agentID)) { banned = true; break; diff --git a/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs b/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs new file mode 100644 index 0000000..ecac2ca --- /dev/null +++ b/OpenSim/Region/Environment/Interfaces/IEstateDataStore.cs @@ -0,0 +1,41 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using OpenSim.Framework; +using libsecondlife; + +namespace OpenSim.Region.Environment.Interfaces +{ + public interface IEstateDataStore + { + void Initialise(string connectstring); + + EstateSettings LoadEstateSettings(LLUUID regionID); + void StoreEstateSettings(EstateSettings es); + } +} diff --git a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs index c189f95..0316f20 100644 --- a/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs +++ b/OpenSim/Region/Environment/Interfaces/IRegionDataStore.cs @@ -72,10 +72,6 @@ namespace OpenSim.Region.Environment.Interfaces void RemoveLandObject(LLUUID globalID); List LoadLandObjects(LLUUID regionUUID); - List LoadRegionBanList(LLUUID regionUUID); - void AddToRegionBanlist(RegionBanListItem item); - void RemoveFromRegionBanlist(RegionBanListItem item); - void StoreRegionSettings(RegionSettings rs); RegionSettings LoadRegionSettings(LLUUID regionUUID); diff --git a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs index ac6a075..c5c0370 100644 --- a/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Estate/EstateManagementModule.cs @@ -49,9 +49,26 @@ namespace OpenSim.Region.Environment.Modules.World.Estate private void sendDetailedEstateData(IClientAPI remote_client, LLUUID invoice) { - remote_client.SendDetailedEstateData(invoice,m_scene.RegionInfo.EstateSettings.estateName,m_scene.RegionInfo.EstateSettings.estateID); - remote_client.SendEstateManagersList(invoice,m_scene.RegionInfo.EstateSettings.estateManagers,m_scene.RegionInfo.EstateSettings.estateID); - remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.regionBanlist, m_scene.RegionInfo.EstateSettings.estateID); + //SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant) + + uint sun = 0; + if(!m_scene.RegionInfo.EstateSettings.UseGlobalTime) + sun=(uint)(m_scene.RegionInfo.EstateSettings.SunPosition*1024.0) + 0x1800; + remote_client.SendDetailedEstateData(invoice, + m_scene.RegionInfo.EstateSettings.EstateName, + m_scene.RegionInfo.EstateSettings.EstateID, + m_scene.RegionInfo.EstateSettings.ParentEstateID, + GetEstateFlags(), + sun, + m_scene.RegionInfo.RegionSettings.Covenant); + + remote_client.SendEstateManagersList(invoice, + m_scene.RegionInfo.EstateSettings.EstateManagers, + m_scene.RegionInfo.EstateSettings.EstateID); + + remote_client.SendBannedUserList(invoice, + m_scene.RegionInfo.EstateSettings.EstateBans, + m_scene.RegionInfo.EstateSettings.EstateID); } private void estateSetRegionInfoHandler(bool blockTerraform, bool noFly, bool allowDamage, bool blockLandResell, int maxAgents, float objectBonusFactor, @@ -150,8 +167,10 @@ namespace OpenSim.Region.Environment.Modules.World.Estate sendRegionHandshakeToAll(); } - public void setRegionTerrainSettings(float WaterHeight, float TerrainRaiseLimit, float TerrainLowerLimit, - bool UseFixedSun, float SunHour) + public void setRegionTerrainSettings(float WaterHeight, + float TerrainRaiseLimit, float TerrainLowerLimit, + bool UseEstateSun, bool UseFixedSun, float SunHour, + bool UseGlobal, bool EstateFixedSun, float EstateSunHour) { // Water Height m_scene.RegionInfo.RegionSettings.WaterHeight = WaterHeight; @@ -161,10 +180,11 @@ namespace OpenSim.Region.Environment.Modules.World.Estate m_scene.RegionInfo.RegionSettings.TerrainLowerLimit = TerrainLowerLimit; // Time of day / fixed sun + m_scene.RegionInfo.RegionSettings.UseEstateSun = UseEstateSun; m_scene.RegionInfo.RegionSettings.FixedSun = UseFixedSun; m_scene.RegionInfo.RegionSettings.SunPosition = SunHour; - m_scene.EventManager.TriggerEstateToolsTimeUpdate(m_scene.RegionInfo.RegionHandle, UseFixedSun, UseFixedSun, SunHour); + m_scene.EventManager.TriggerEstateToolsTimeUpdate(m_scene.RegionInfo.RegionHandle, UseFixedSun, UseEstateSun, SunHour); //m_log.Debug("[ESTATE]: UFS: " + UseFixedSun.ToString()); //m_log.Debug("[ESTATE]: SunHour: " + SunHour.ToString()); @@ -180,20 +200,23 @@ namespace OpenSim.Region.Environment.Modules.World.Estate private void handleChangeEstateCovenantRequest(IClientAPI remoteClient, LLUUID estateCovenantID) { - m_scene.RegionInfo.CovenantID = estateCovenantID; - m_scene.RegionInfo.SaveEstatecovenantUUID(estateCovenantID); + m_scene.RegionInfo.RegionSettings.Covenant = estateCovenantID; + m_scene.RegionInfo.RegionSettings.Save(); } private void handleEstateAccessDeltaRequest(IClientAPI remote_client, LLUUID invoice, int estateAccessType, LLUUID user) { // EstateAccessDelta handles Estate Managers, Sim Access, Sim Banlist, allowed Groups.. etc. + if (user == m_scene.RegionInfo.MasterAvatarAssignedUUID) + return; // never process owner + switch (estateAccessType) { case 64: if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { - RegionBanListItem[] banlistcheck = m_scene.RegionInfo.regionBanlist.ToArray(); + EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; bool alreadyInList = false; @@ -209,15 +232,15 @@ namespace OpenSim.Region.Environment.Modules.World.Estate if (!alreadyInList) { - RegionBanListItem item = new RegionBanListItem(); + EstateBan item = new EstateBan(); item.bannedUUID = user; - item.regionUUID = m_scene.RegionInfo.RegionID; + item.estateID = m_scene.RegionInfo.EstateSettings.EstateID; item.bannedIP = "0.0.0.0"; item.bannedIPHostMask = "0.0.0.0"; - m_scene.RegionInfo.regionBanlist.Add(item); - m_scene.AddToRegionBanlist(item); + m_scene.RegionInfo.EstateSettings.AddBan(item); + m_scene.RegionInfo.EstateSettings.Save(); ScenePresence s = m_scene.GetScenePresence(user); if (s != null) @@ -231,7 +254,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate remote_client.SendAlertMessage("User is already on the region ban list"); } //m_scene.RegionInfo.regionBanlist.Add(Manager(user); - remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.regionBanlist, m_scene.RegionInfo.EstateSettings.estateID); + remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); } else { @@ -241,10 +264,10 @@ namespace OpenSim.Region.Environment.Modules.World.Estate case 128: if (m_scene.ExternalChecks.ExternalChecksCanIssueEstateCommand(remote_client.AgentId) || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { - RegionBanListItem[] banlistcheck = m_scene.RegionInfo.regionBanlist.ToArray(); + EstateBan[] banlistcheck = m_scene.RegionInfo.EstateSettings.EstateBans; bool alreadyInList = false; - RegionBanListItem listitem = null; + EstateBan listitem = null; for (int i = 0; i < banlistcheck.Length; i++) { @@ -258,15 +281,15 @@ namespace OpenSim.Region.Environment.Modules.World.Estate } if (alreadyInList && listitem != null) { - m_scene.RegionInfo.regionBanlist.Remove(listitem); - m_scene.RemoveFromRegionBanlist(listitem); + m_scene.RegionInfo.EstateSettings.RemoveBan(listitem.bannedUUID); + m_scene.RegionInfo.EstateSettings.Save(); } else { remote_client.SendAlertMessage("User is not on the region ban list"); } //m_scene.RegionInfo.regionBanlist.Add(Manager(user); - remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.regionBanlist, m_scene.RegionInfo.EstateSettings.estateID); + remote_client.SendBannedUserList(invoice, m_scene.RegionInfo.EstateSettings.EstateBans, m_scene.RegionInfo.EstateSettings.EstateID); } else { @@ -280,7 +303,8 @@ namespace OpenSim.Region.Environment.Modules.World.Estate if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { m_scene.RegionInfo.EstateSettings.AddEstateManager(user); - remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.estateManagers, m_scene.RegionInfo.EstateSettings.estateID); + m_scene.RegionInfo.EstateSettings.Save(); + remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } else { @@ -294,7 +318,9 @@ namespace OpenSim.Region.Environment.Modules.World.Estate if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.ExternalChecks.ExternalChecksBypassPermissions()) { m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user); - remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.estateManagers, m_scene.RegionInfo.EstateSettings.estateID); + m_scene.RegionInfo.EstateSettings.Save(); + + remote_client.SendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.EstateManagers, m_scene.RegionInfo.EstateSettings.EstateID); } else { @@ -358,28 +384,24 @@ namespace OpenSim.Region.Environment.Modules.World.Estate { RegionInfoForEstateMenuArgs args = new RegionInfoForEstateMenuArgs(); - args.billableFactor = m_scene.RegionInfo.EstateSettings.billableFactor; - args.estateID = m_scene.RegionInfo.EstateSettings.estateID; + args.billableFactor = m_scene.RegionInfo.EstateSettings.BillableFactor; + args.estateID = m_scene.RegionInfo.EstateSettings.EstateID; args.maxAgents = (byte)m_scene.RegionInfo.RegionSettings.AgentLimit; args.objectBonusFactor = (float)m_scene.RegionInfo.RegionSettings.ObjectBonus; - args.parentEstateID = m_scene.RegionInfo.EstateSettings.parentEstateID; - args.pricePerMeter = m_scene.RegionInfo.EstateSettings.pricePerMeter; - args.redirectGridX = m_scene.RegionInfo.EstateSettings.redirectGridX; - args.redirectGridY = m_scene.RegionInfo.EstateSettings.redirectGridY; + args.parentEstateID = m_scene.RegionInfo.EstateSettings.ParentEstateID; + args.pricePerMeter = m_scene.RegionInfo.EstateSettings.PricePerMeter; + args.redirectGridX = m_scene.RegionInfo.EstateSettings.RedirectGridX; + args.redirectGridY = m_scene.RegionInfo.EstateSettings.RedirectGridY; args.regionFlags = GetRegionFlags(); byte mature = 13; if(m_scene.RegionInfo.RegionSettings.Maturity == 1) mature = 21; args.simAccess = mature; - if (m_scene.RegionInfo.RegionSettings.FixedSun) - args.sunHour = (float)m_scene.RegionInfo.RegionSettings.SunPosition; - else - args.sunHour = m_scene.EventManager.GetSunLindenHour(); - + args.sunHour = (float)m_scene.RegionInfo.RegionSettings.SunPosition; args.terrainLowerLimit = (float)m_scene.RegionInfo.RegionSettings.TerrainLowerLimit; args.terrainRaiseLimit = (float)m_scene.RegionInfo.RegionSettings.TerrainRaiseLimit; - args.useEstateSun = !m_scene.RegionInfo.RegionSettings.FixedSun; + args.useEstateSun = m_scene.RegionInfo.RegionSettings.UseEstateSun; args.waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; args.simName = m_scene.RegionInfo.RegionName; @@ -387,9 +409,9 @@ namespace OpenSim.Region.Environment.Modules.World.Estate remote_client.SendRegionInfoToEstateMenu(args); } - private static void HandleEstateCovenantRequest(IClientAPI remote_client) + private void HandleEstateCovenantRequest(IClientAPI remote_client) { - remote_client.SendEstateCovenantInformation(); + remote_client.SendEstateCovenantInformation(m_scene.RegionInfo.RegionSettings.Covenant); } private void HandleLandStatRequest(int parcelID, uint reportType, uint requestFlags, string filter, IClientAPI remoteClient) { @@ -508,7 +530,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate { RegionHandshakeArgs args = new RegionHandshakeArgs(); bool estatemanager = false; - LLUUID[] EstateManagers = m_scene.RegionInfo.EstateSettings.estateManagers; + LLUUID[] EstateManagers = m_scene.RegionInfo.EstateSettings.EstateManagers; for (int i = 0; i < EstateManagers.Length; i++) { if (EstateManagers[i] == remoteClient.AgentId) @@ -517,7 +539,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate args.isEstateManager = estatemanager; - args.billableFactor = m_scene.RegionInfo.EstateSettings.billableFactor; + args.billableFactor = m_scene.RegionInfo.EstateSettings.BillableFactor; args.terrainStartHeight0 = (float)m_scene.RegionInfo.RegionSettings.Elevation1SW; args.terrainHeightRange0 = (float)m_scene.RegionInfo.RegionSettings.Elevation2SW; args.terrainStartHeight1 = (float)m_scene.RegionInfo.RegionSettings.Elevation1NW; @@ -554,6 +576,73 @@ namespace OpenSim.Region.Environment.Modules.World.Estate ); } + public void handleEstateChangeInfo(IClientAPI remoteClient, LLUUID invoice, LLUUID senderID, UInt32 parms1, UInt32 parms2) + { + if(parms2 == 0) + { + m_scene.RegionInfo.EstateSettings.UseGlobalTime = true; + m_scene.RegionInfo.EstateSettings.SunPosition = 0.0; + } + else + { + m_scene.RegionInfo.EstateSettings.UseGlobalTime = false; + m_scene.RegionInfo.EstateSettings.SunPosition = (double)(parms2 - 0x1800)/1024.0; + } + + if((parms1 & 0x00000010) != 0) + m_scene.RegionInfo.EstateSettings.FixedSun = true; + else + m_scene.RegionInfo.EstateSettings.FixedSun = false; + + if((parms1 & 0x00008000) != 0) + m_scene.RegionInfo.EstateSettings.PublicAccess = true; + else + m_scene.RegionInfo.EstateSettings.PublicAccess = false; + + if((parms1 & 0x10000000) != 0) + m_scene.RegionInfo.EstateSettings.AllowVoice = true; + else + m_scene.RegionInfo.EstateSettings.AllowVoice = false; + + if((parms1 & 0x00100000) != 0) + m_scene.RegionInfo.EstateSettings.AllowDirectTeleport = true; + else + m_scene.RegionInfo.EstateSettings.AllowDirectTeleport = false; + + if((parms1 & 0x00800000) != 0) + m_scene.RegionInfo.EstateSettings.DenyAnonymous = true; + else + m_scene.RegionInfo.EstateSettings.DenyAnonymous = false; + + if((parms1 & 0x01000000) != 0) + m_scene.RegionInfo.EstateSettings.DenyIdentified = true; + else + m_scene.RegionInfo.EstateSettings.DenyIdentified = false; + + if((parms1 & 0x02000000) != 0) + m_scene.RegionInfo.EstateSettings.DenyTransacted = true; + else + m_scene.RegionInfo.EstateSettings.DenyTransacted = false; + + m_scene.RegionInfo.EstateSettings.Save(); + + float sun = (float)m_scene.RegionInfo.RegionSettings.SunPosition; + if(m_scene.RegionInfo.RegionSettings.UseEstateSun) + { + sun = (float)m_scene.RegionInfo.EstateSettings.SunPosition; + if(m_scene.RegionInfo.EstateSettings.UseGlobalTime) + sun = m_scene.EventManager.GetSunLindenHour(); + } + + m_scene.EventManager.TriggerEstateToolsTimeUpdate( + m_scene.RegionInfo.RegionHandle, + m_scene.RegionInfo.EstateSettings.FixedSun || + m_scene.RegionInfo.RegionSettings.FixedSun, + m_scene.RegionInfo.RegionSettings.UseEstateSun, sun); + + sendDetailedEstateData(remoteClient, invoice); + } + #endregion #region IRegionModule Members @@ -594,8 +683,12 @@ namespace OpenSim.Region.Environment.Modules.World.Estate setRegionTerrainSettings(height, (float)m_scene.RegionInfo.RegionSettings.TerrainRaiseLimit, (float)m_scene.RegionInfo.RegionSettings.TerrainLowerLimit, + m_scene.RegionInfo.RegionSettings.UseEstateSun, m_scene.RegionInfo.RegionSettings.FixedSun, - (float)m_scene.RegionInfo.RegionSettings.SunPosition); + (float)m_scene.RegionInfo.RegionSettings.SunPosition, + m_scene.RegionInfo.EstateSettings.UseGlobalTime, + m_scene.RegionInfo.EstateSettings.FixedSun, + (float)m_scene.RegionInfo.EstateSettings.SunPosition); sendRegionInfoPacketToAll(); } @@ -613,6 +706,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate client.OnSetRegionTerrainSettings += setRegionTerrainSettings; client.OnEstateRestartSimRequest += handleEstateRestartSimRequest; client.OnEstateChangeCovenantRequest += handleChangeEstateCovenantRequest; + client.OnEstateChangeInfo += handleEstateChangeInfo; client.OnUpdateEstateAccessDeltaRequest += handleEstateAccessDeltaRequest; client.OnSimulatorBlueBoxMessageRequest += SendSimulatorBlueBoxMessage; client.OnEstateBlueBoxMessageRequest += SendEstateBlueBoxMessage; @@ -652,41 +746,53 @@ namespace OpenSim.Region.Environment.Modules.World.Estate if(m_scene.RegionInfo.RegionSettings.BlockShowInSearch) flags |= (Simulator.RegionFlags)(1 << 29); - // Partially implemented - // if(m_scene.RegionInfo.RegionSettings.FixedSun) flags |= Simulator.RegionFlags.SunFixed; + if(m_scene.RegionInfo.RegionSettings.Sandbox) + flags |= Simulator.RegionFlags.Sandbox; + + // Handled in LandObject.cs: AllowLandmark + // Handled in LandObject.cs: AllowSetHome - // Not implemented - // - // TODO: ExternallyVisible - flags |= Simulator.RegionFlags.ExternallyVisible; - // TODO: PublicAllowed - flags |= Simulator.RegionFlags.PublicAllowed; - // TODO: AllowDirectTeleport - flags |= Simulator.RegionFlags.AllowDirectTeleport; - // TODO: AllowVoice - flags |= Simulator.RegionFlags.AllowVoice; - - // TDOD: AllowLandmark - // TDOD: AllowSetHome - // TODO: ResetHomeOnTeleport - // TODO: TaxFree ? (Linden-ism) - // TODO: Sandbox ? // TODO: SkipUpdateInterestList - // TODO: ExternallyVisible - // TODO: DenyAnonymous - // TODO: DenyIdentified - // TODO: DenyTransacted - // TODO: AbuseEmailToEstateOwner - // TODO: BlockDwell - // TODO: EstateSkipScripts // Omitted // // Omitted: NullLayer (what is that?) // Omitted: SkipAgentAction (what does it do?) - // Omitted: MainlandVisible (Do we need it) + + return (uint)flags; + } + + public uint GetEstateFlags() + { + Simulator.RegionFlags flags = Simulator.RegionFlags.None; + + if(m_scene.RegionInfo.EstateSettings.FixedSun) + flags |= Simulator.RegionFlags.SunFixed; + if(m_scene.RegionInfo.EstateSettings.PublicAccess) + flags |= (Simulator.RegionFlags.PublicAllowed | + Simulator.RegionFlags.ExternallyVisible); + if(m_scene.RegionInfo.EstateSettings.AllowVoice) + flags |= Simulator.RegionFlags.AllowVoice; + if(m_scene.RegionInfo.EstateSettings.AllowDirectTeleport) + flags |= Simulator.RegionFlags.AllowDirectTeleport; + if(m_scene.RegionInfo.EstateSettings.DenyAnonymous) + flags |= Simulator.RegionFlags.DenyAnonymous; + if(m_scene.RegionInfo.EstateSettings.DenyIdentified) + flags |= Simulator.RegionFlags.DenyIdentified; + if(m_scene.RegionInfo.EstateSettings.DenyTransacted) + flags |= Simulator.RegionFlags.DenyTransacted; + if(m_scene.RegionInfo.EstateSettings.AbuseEmailToEstateOwner) + flags |= Simulator.RegionFlags.AbuseEmailToEstateOwner; + if(m_scene.RegionInfo.EstateSettings.BlockDwell) + flags |= Simulator.RegionFlags.BlockDwell; + if(m_scene.RegionInfo.EstateSettings.EstateSkipScripts) + flags |= Simulator.RegionFlags.EstateSkipScripts; + if(m_scene.RegionInfo.EstateSettings.ResetHomeOnTeleport) + flags |= Simulator.RegionFlags.ResetHomeOnTeleport; + if(m_scene.RegionInfo.EstateSettings.TaxFree) + flags |= Simulator.RegionFlags.TaxFree; return (uint)flags; } diff --git a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs index e52896a..5aed2a7 100644 --- a/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/World/Land/LandObject.cs @@ -162,9 +162,13 @@ namespace OpenSim.Region.Environment.Modules.World.Land public void sendLandProperties(int sequence_id, bool snap_selection, int request_result, IClientAPI remote_client) { IEstateModule estateModule = m_scene.RequestModuleInterface(); - uint regionFlags = 67108864; + uint regionFlags = 336723974 & ~((uint)(Simulator.RegionFlags.AllowLandmark | Simulator.RegionFlags.AllowSetHome)); if(estateModule != null) regionFlags = estateModule.GetRegionFlags(); + if((landData.landFlags & (uint)Parcel.ParcelFlags.AllowLandmark) != 0) + regionFlags |= (uint)Simulator.RegionFlags.AllowLandmark; + if(landData.ownerID == remote_client.AgentId) + regionFlags |= (uint)Simulator.RegionFlags.AllowSetHome; remote_client.SendLandProperties(remote_client, sequence_id, snap_selection, request_result, landData, (float)m_scene.RegionInfo.RegionSettings.ObjectBonus, diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs index 10971db..040b9b7 100644 --- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs @@ -291,6 +291,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC public event EstateBlueBoxMessageRequest OnEstateBlueBoxMessageRequest; public event EstateDebugRegionRequest OnEstateDebugRegionRequest; public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest; + public event EstateChangeInfo OnEstateChangeInfo; public event ScriptReset OnScriptReset; public event GetScriptRunning OnGetScriptRunning; public event SetScriptRunning OnSetScriptRunning; @@ -752,17 +753,17 @@ namespace OpenSim.Region.Environment.Modules.World.NPC { } - public void SendBannedUserList(LLUUID invoice, List banlist, uint estateID) + public void SendBannedUserList(LLUUID invoice, EstateBan[] banlist, uint estateID) { } public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args) { } - public void SendEstateCovenantInformation() + public void SendEstateCovenantInformation(LLUUID covenant) { } - public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID) + public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant) { } diff --git a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs index 41bb610..b0d9a26 100644 --- a/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs @@ -246,17 +246,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions protected bool IsEstateManager(LLUUID user) { - if (user != LLUUID.Zero) - { - LLUUID[] estatemanagers = m_scene.RegionInfo.EstateSettings.estateManagers; - foreach (LLUUID estatemanager in estatemanagers) - { - if (estatemanager == user) - return true; - } - } - - return false; + return m_scene.RegionInfo.EstateSettings.IsEstateManager(user); } #endregion diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index ad9646f..4aa9cf9 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -271,9 +271,14 @@ namespace OpenSim.Region.Environment.Scenes // Load region settings // First try database m_regInfo.RegionSettings = m_storageManager.DataStore.LoadRegionSettings(m_regInfo.RegionID); - // Hook up save event m_regInfo.RegionSettings.OnSave += m_storageManager.DataStore.StoreRegionSettings; + if(m_storageManager.EstateDataStore != null) + { + m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID); + m_regInfo.EstateSettings.OnSave += m_storageManager.EstateDataStore.StoreEstateSettings; + } + //Bind Storage Manager functions to some land manager functions for this scene @@ -1445,20 +1450,6 @@ namespace OpenSim.Region.Environment.Scenes } } - public void LoadRegionBanlist() - { - List regionbanlist = m_storageManager.DataStore.LoadRegionBanList(m_regInfo.RegionID); - m_regInfo.regionBanlist = regionbanlist; - } - public void AddToRegionBanlist(RegionBanListItem item) - { - m_storageManager.DataStore.AddToRegionBanlist(item); - } - - public void RemoveFromRegionBanlist(RegionBanListItem item) - { - m_storageManager.DataStore.RemoveFromRegionBanlist(item); - } #endregion #region Primitives Methods @@ -1916,7 +1907,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart RootPrim = GetSceneObjectPart(primID); if (RootPrim != null) { - if (m_regInfo.CheckIfUserBanned(RootPrim.OwnerID)) + if (m_regInfo.EstateSettings.IsBanned(RootPrim.OwnerID)) { SceneObjectGroup grp = RootPrim.ParentGroup; if (grp != null) @@ -2410,7 +2401,7 @@ namespace OpenSim.Region.Environment.Scenes { if (regionHandle == m_regInfo.RegionHandle) { - if (m_regInfo.CheckIfUserBanned(agent.AgentID)) + if (m_regInfo.EstateSettings.IsBanned(agent.AgentID)) { m_log.WarnFormat( "[CONNECTION DEBUGGING]: Denied access to: {0} [{1}] at {2} because the user is on the region banlist", diff --git a/OpenSim/Region/Environment/StorageManager.cs b/OpenSim/Region/Environment/StorageManager.cs index b9a42a2..768e12c 100644 --- a/OpenSim/Region/Environment/StorageManager.cs +++ b/OpenSim/Region/Environment/StorageManager.cs @@ -43,6 +43,13 @@ namespace OpenSim.Region.Environment get { return m_dataStore; } } + private IEstateDataStore m_estateDataStore; + + public IEstateDataStore EstateDataStore + { + get { return m_estateDataStore; } + } + public StorageManager(IRegionDataStore storage) { m_dataStore = storage; @@ -69,6 +76,17 @@ namespace OpenSim.Region.Environment m_log.Info("[DATASTORE]: Added IRegionDataStore Interface"); } + + typeInterface = pluginType.GetInterface("IEstateDataStore", true); + + if(typeInterface != null) + { + IEstateDataStore estPlug = + (IEstateDataStore) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + estPlug.Initialise(connectionstring); + + m_estateDataStore = estPlug; + } } } diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 94983ee..6179ccf 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -158,6 +158,7 @@ namespace OpenSim.Region.Examples.SimpleModule public event ObjectDeselect OnObjectDeselect; public event RegionInfoRequest OnRegionInfoRequest; public event EstateCovenantRequest OnEstateCovenantRequest; + public event EstateChangeInfo OnEstateChangeInfo; public event ObjectDuplicateOnRay OnObjectDuplicateOnRay; @@ -741,17 +742,17 @@ namespace OpenSim.Region.Examples.SimpleModule { } - public void SendBannedUserList(LLUUID invoice, List banlist, uint estateID) + public void SendBannedUserList(LLUUID invoice, EstateBan[] banlist, uint estateID) { } public void SendRegionInfoToEstateMenu(RegionInfoForEstateMenuArgs args) { } - public void SendEstateCovenantInformation() + public void SendEstateCovenantInformation(LLUUID covenant) { } - public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID) + public void SendDetailedEstateData(LLUUID invoice, string estateName, uint estateID, uint parentEstate, uint estateFlags, uint sunPosition, LLUUID covenant) { } diff --git a/OpenSim/Region/Storage/OpenSim.DataStore.MSSQL/MSSQLDataStore.cs b/OpenSim/Region/Storage/OpenSim.DataStore.MSSQL/MSSQLDataStore.cs index 6dfcb3c..edbb1b7 100644 --- a/OpenSim/Region/Storage/OpenSim.DataStore.MSSQL/MSSQLDataStore.cs +++ b/OpenSim/Region/Storage/OpenSim.DataStore.MSSQL/MSSQLDataStore.cs @@ -322,23 +322,6 @@ namespace OpenSim.DataStore.MSSQL return new List(); } - public List LoadRegionBanList(LLUUID regionUUID) - { - List regionbanlist = new List(); - return regionbanlist; - } - - public void AddToRegionBanlist(RegionBanListItem item) - { - - } - - public void RemoveFromRegionBanlist(RegionBanListItem item) - { - - } - - public void Commit() { lock (ds) -- cgit v1.1