From 3a83be1721155d606d564dfd4c3bd36560a95c4a Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Wed, 2 Jan 2008 10:06:43 +0000 Subject: * Did a bit of estate work. Added some fields to EstateSettings.xml for estate managers. * You can put UUIDs in those fields to give other users some ability to help manage a sim you own. * Also started decoding the EstateOwnerMessage packet convolutions. --- OpenSim/Region/Environment/EstateManager.cs | 78 ++++++++++++++++++++++ OpenSim/Region/Environment/PermissionManager.cs | 15 +++-- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 9 ++- 3 files changed, 97 insertions(+), 5 deletions(-) (limited to 'OpenSim/Region/Environment') diff --git a/OpenSim/Region/Environment/EstateManager.cs b/OpenSim/Region/Environment/EstateManager.cs index 3ca9796..d0dbaea 100644 --- a/OpenSim/Region/Environment/EstateManager.cs +++ b/OpenSim/Region/Environment/EstateManager.cs @@ -44,6 +44,15 @@ namespace OpenSim.Region.Environment private Scene m_scene; private RegionInfo m_regInfo; + public enum EstateAccessCodex : uint + { + AccessOptions = 17, + AllowedGroups = 18, + EstateBans = 20, + EstateManagers = 24 + } + + public EstateManager(Scene scene, RegionInfo reginfo) { m_scene = scene; @@ -146,7 +155,13 @@ namespace OpenSim.Region.Environment switch (Helpers.FieldToUTF8String(packet.MethodData.Method)) { case "getinfo": + + sendRegionInfoPacketToAll(); + if (m_scene.PermissionsMngr.GenericEstatePermission(remote_client.AgentId)) + { + sendDetailedEstateData(remote_client, packet); + } break; case "setregioninfo": if (m_scene.PermissionsMngr.CanEditEstateTerrain(remote_client.AgentId)) @@ -189,6 +204,69 @@ namespace OpenSim.Region.Environment } } + private void sendDetailedEstateData(IClientAPI remote_client, EstateOwnerMessagePacket packet) + { + + LLUUID invoice = packet.MethodData.Invoice; + packet.AgentData.TransactionID = LLUUID.Random(); + packet.MethodData.Method = Helpers.StringToField("estateupdateinfo"); + EstateOwnerMessagePacket.ParamListBlock[] returnblock = new EstateOwnerMessagePacket.ParamListBlock[9]; + + for (int i = 0; i < 9; i++) + { + returnblock[i] = new EstateOwnerMessagePacket.ParamListBlock(); + } + + //Sending Estate Settings + returnblock[0].Parameter = Helpers.StringToField(m_scene.RegionInfo.MasterAvatarFirstName + m_scene.RegionInfo.MasterAvatarLastName); + returnblock[1].Parameter = Helpers.StringToField(m_scene.RegionInfo.MasterAvatarAssignedUUID.ToString()); + returnblock[2].Parameter = Helpers.IntToBytes((int)m_scene.RegionInfo.EstateSettings.estateID); + returnblock[3].Parameter = Helpers.IntToBytes(269516800); + returnblock[4].Parameter = Helpers.IntToBytes(0); + returnblock[5].Parameter = Helpers.IntToBytes(1); + returnblock[6].Parameter = Helpers.StringToField(LLUUID.Random().ToString()); + returnblock[7].Parameter = Helpers.IntToBytes(1160895077); + returnblock[8].Parameter = Helpers.IntToBytes(1); + packet.ParamList = returnblock; + remote_client.OutPacket(packet, ThrottleOutPacketType.Task); + + // Stuck here at the moment The client sends a bunch of getinfo methods that need to be decoded the hard way + //Sending Estate Managers + packet = new EstateOwnerMessagePacket(); + packet.AgentData.TransactionID = LLUUID.Random(); + packet.AgentData.AgentID=remote_client.AgentId; + packet.AgentData.SessionID=remote_client.SessionId; + packet.MethodData.Invoice = invoice; + packet.MethodData.Method = Helpers.StringToField("setaccess"); + + LLUUID[] EstateManagers = m_scene.RegionInfo.EstateSettings.estateManagers; + + returnblock = new EstateOwnerMessagePacket.ParamListBlock[6+EstateManagers.Length]; + + for (int i = 0; i < (6 + EstateManagers.Length); i++) + { + returnblock[i] = new EstateOwnerMessagePacket.ParamListBlock(); + } + int j=0; + returnblock[j].Parameter = Helpers.IntToBytes((int)m_scene.RegionInfo.EstateSettings.estateID); j++; + returnblock[j].Parameter = Helpers.IntToBytes((int)EstateAccessCodex.EstateManagers); j++; + returnblock[j].Parameter = Helpers.IntToBytes(0); j++; + returnblock[j].Parameter = Helpers.IntToBytes(0); j++; + returnblock[j].Parameter = Helpers.IntToBytes(0); j++; + returnblock[j].Parameter = Helpers.IntToBytes(EstateManagers.Length); j++; + for (int i = 0; i < EstateManagers.Length; i++) + { + returnblock[j].Parameter = Helpers.StringToField(EstateManagers[i].ToString()); j++; + } + packet.ParamList = returnblock; + remote_client.OutPacket(packet, ThrottleOutPacketType.Task); + + + + + + } + private void estateSetRegionInfoHandler(EstateOwnerMessagePacket packet) { if (packet.ParamList.Length != 9) diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index 76601ec..db1cac5 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs @@ -83,13 +83,20 @@ namespace OpenSim.Region.Environment return m_scene.RegionInfo.MasterAvatarAssignedUUID == user; } - protected virtual bool IsEstateManager(LLUUID user) + public virtual bool IsEstateManager(LLUUID user) { if (m_bypassPermissions) { return true; } + LLUUID[] estatemanagers = m_scene.RegionInfo.EstateSettings.estateManagers; + for (int i = 0; i < estatemanagers.Length; i++) + { + if (estatemanagers[i] == user) + return true; + } + return false; } @@ -414,7 +421,7 @@ namespace OpenSim.Region.Environment #region Estate Permissions - protected virtual bool GenericEstatePermission(LLUUID user) + public virtual bool GenericEstatePermission(LLUUID user) { // Default: deny bool permission = false; @@ -439,8 +446,8 @@ namespace OpenSim.Region.Environment { // Since this is potentially going on a grid... - //return GenericEstatePermission(AgentId); - return m_scene.RegionInfo.MasterAvatarAssignedUUID == user; + return GenericEstatePermission(user); + //return m_scene.RegionInfo.MasterAvatarAssignedUUID == user; } #endregion diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 9454de0..3aa9583 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -320,7 +320,14 @@ namespace OpenSim.Region.Environment.Scenes // TODO: m_animations and m_animationSeqs should always be of the same length. // Move them into an object to (hopefully) avoid threading issues. - m_animations.Add(Animations.AnimsLLUUID["STAND"]); + try + { + m_animations.Add(Animations.AnimsLLUUID["STAND"]); + } + catch (KeyNotFoundException) + { + MainLog.Instance.Warn("AVATAR", "KeyNotFound Exception playing avatar stand animation"); + } m_animationSeqs.Add(1); RegisterToEvents(); -- cgit v1.1