Merge branch 'master' into httptests
						commit
						6172446e2a
					
				|  | @ -756,7 +756,7 @@ namespace OpenSim.Groups | ||||||
| 
 | 
 | ||||||
|             if (avatar != null) |             if (avatar != null) | ||||||
|             { |             { | ||||||
|                 if (avatar.UserLevel < m_levelGroupCreate) |                 if (avatar.GodController.UserLevel < m_levelGroupCreate) | ||||||
|                 { |                 { | ||||||
|                     remoteClient.SendCreateGroupReply(UUID.Zero, false, String.Format("Insufficient permissions to create a group. Requires level {0}", m_levelGroupCreate)); |                     remoteClient.SendCreateGroupReply(UUID.Zero, false, String.Format("Insufficient permissions to create a group. Requires level {0}", m_levelGroupCreate)); | ||||||
|                     return UUID.Zero; |                     return UUID.Zero; | ||||||
|  |  | ||||||
|  | @ -89,6 +89,8 @@ namespace OpenSim.Framework | ||||||
|         public Vector3 AtAxis; |         public Vector3 AtAxis; | ||||||
|         public Vector3 LeftAxis; |         public Vector3 LeftAxis; | ||||||
|         public Vector3 UpAxis; |         public Vector3 UpAxis; | ||||||
|  |         //public int GodLevel; | ||||||
|  |         public OSD GodData = new OSDMap(); | ||||||
|         public bool ChangedGrid; |         public bool ChangedGrid; | ||||||
| 
 | 
 | ||||||
|         // This probably shouldn't be here |         // This probably shouldn't be here | ||||||
|  | @ -116,6 +118,13 @@ namespace OpenSim.Framework | ||||||
| 
 | 
 | ||||||
|             args["far"] = OSD.FromReal(Far); |             args["far"] = OSD.FromReal(Far); | ||||||
|             args["changed_grid"] = OSD.FromBoolean(ChangedGrid); |             args["changed_grid"] = OSD.FromBoolean(ChangedGrid); | ||||||
|  |             //args["god_level"] = OSD.FromString(GodLevel.ToString()); | ||||||
|  |             args["god_data"] = GodData; | ||||||
|  |             OSDMap g = (OSDMap)GodData; | ||||||
|  |             // Set legacy value | ||||||
|  |             // TODO: remove after 0.9 is superseded | ||||||
|  |             if (g.ContainsKey("ViewerUiIsGod")) | ||||||
|  |                 args["god_level"] = g["ViewerUiIsGod"].AsBoolean() ? 200 : 0;; | ||||||
| 
 | 
 | ||||||
|             if ((Throttles != null) && (Throttles.Length > 0)) |             if ((Throttles != null) && (Throttles.Length > 0)) | ||||||
|                 args["throttles"] = OSD.FromBinary(Throttles); |                 args["throttles"] = OSD.FromBinary(Throttles); | ||||||
|  | @ -174,6 +183,11 @@ namespace OpenSim.Framework | ||||||
|             if (args["changed_grid"] != null) |             if (args["changed_grid"] != null) | ||||||
|                 ChangedGrid = args["changed_grid"].AsBoolean(); |                 ChangedGrid = args["changed_grid"].AsBoolean(); | ||||||
| 
 | 
 | ||||||
|  |             //if (args["god_level"] != null) | ||||||
|  |             //    Int32.TryParse(args["god_level"].AsString(), out GodLevel); | ||||||
|  |             if (args["god_data"] != null) | ||||||
|  |                 GodData = args["god_data"]; | ||||||
|  | 
 | ||||||
|             if (args["far"] != null) |             if (args["far"] != null) | ||||||
|                 Far = (float)(args["far"].AsReal()); |                 Far = (float)(args["far"].AsReal()); | ||||||
| 
 | 
 | ||||||
|  | @ -348,7 +362,8 @@ namespace OpenSim.Framework | ||||||
|         public Quaternion BodyRotation; |         public Quaternion BodyRotation; | ||||||
|         public uint ControlFlags; |         public uint ControlFlags; | ||||||
|         public float EnergyLevel; |         public float EnergyLevel; | ||||||
|         public Byte GodLevel; |         public OSD GodData = new OSDMap(); | ||||||
|  |         //public Byte GodLevel; | ||||||
|         public bool AlwaysRun; |         public bool AlwaysRun; | ||||||
|         public UUID PreyAgent; |         public UUID PreyAgent; | ||||||
|         public Byte AgentAccess; |         public Byte AgentAccess; | ||||||
|  | @ -422,7 +437,11 @@ namespace OpenSim.Framework | ||||||
|             args["control_flags"] = OSD.FromString(ControlFlags.ToString()); |             args["control_flags"] = OSD.FromString(ControlFlags.ToString()); | ||||||
| 
 | 
 | ||||||
|             args["energy_level"] = OSD.FromReal(EnergyLevel); |             args["energy_level"] = OSD.FromReal(EnergyLevel); | ||||||
|             args["god_level"] = OSD.FromString(GodLevel.ToString()); |             //args["god_level"] = OSD.FromString(GodLevel.ToString()); | ||||||
|  |             args["god_data"] = GodData; | ||||||
|  |             OSDMap g = (OSDMap)GodData; | ||||||
|  |             if (g.ContainsKey("ViewerUiIsGod")) | ||||||
|  |                 args["god_level"] = g["ViewerUiIsGod"].AsBoolean() ? 200 : 0;; | ||||||
|             args["always_run"] = OSD.FromBoolean(AlwaysRun); |             args["always_run"] = OSD.FromBoolean(AlwaysRun); | ||||||
|             args["prey_agent"] = OSD.FromUUID(PreyAgent); |             args["prey_agent"] = OSD.FromUUID(PreyAgent); | ||||||
|             args["agent_access"] = OSD.FromString(AgentAccess.ToString()); |             args["agent_access"] = OSD.FromString(AgentAccess.ToString()); | ||||||
|  | @ -600,8 +619,11 @@ namespace OpenSim.Framework | ||||||
|             if (args["energy_level"] != null) |             if (args["energy_level"] != null) | ||||||
|                 EnergyLevel = (float)(args["energy_level"].AsReal()); |                 EnergyLevel = (float)(args["energy_level"].AsReal()); | ||||||
| 
 | 
 | ||||||
|             if (args["god_level"] != null) |             //if (args["god_level"] != null) | ||||||
|                 Byte.TryParse(args["god_level"].AsString(), out GodLevel); |             //    Byte.TryParse(args["god_level"].AsString(), out GodLevel); | ||||||
|  | 
 | ||||||
|  |             if (args["god_data"] != null) | ||||||
|  |                 GodData = args["god_data"]; | ||||||
| 
 | 
 | ||||||
|             if (args["always_run"] != null) |             if (args["always_run"] != null) | ||||||
|                 AlwaysRun = args["always_run"].AsBoolean(); |                 AlwaysRun = args["always_run"].AsBoolean(); | ||||||
|  |  | ||||||
|  | @ -537,7 +537,7 @@ namespace OpenSim.Region.ClientStack.Linden | ||||||
|                 // check user level |                 // check user level | ||||||
|                 if (avatar != null) |                 if (avatar != null) | ||||||
|                 { |                 { | ||||||
|                     if (avatar.UserLevel < m_levelUpload) |                     if (avatar.GodController.UserLevel < m_levelUpload) | ||||||
|                     { |                     { | ||||||
|                         LLSDAssetUploadError resperror = new LLSDAssetUploadError(); |                         LLSDAssetUploadError resperror = new LLSDAssetUploadError(); | ||||||
|                         resperror.message = "Insufficient permissions to upload"; |                         resperror.message = "Insufficient permissions to upload"; | ||||||
|  |  | ||||||
|  | @ -11455,7 +11455,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | ||||||
|                 ScenePresence p; |                 ScenePresence p; | ||||||
|                 if (scene.TryGetScenePresence(sender.AgentId, out p)) |                 if (scene.TryGetScenePresence(sender.AgentId, out p)) | ||||||
|                 { |                 { | ||||||
|                     if (p.GodLevel >= 200) |                     if (p.GodController.GodLevel >= 200) | ||||||
|                     { |                     { | ||||||
|                         groupProfileReply.GroupData.OpenEnrollment = true; |                         groupProfileReply.GroupData.OpenEnrollment = true; | ||||||
|                         groupProfileReply.GroupData.MembershipFee = 0; |                         groupProfileReply.GroupData.MembershipFee = 0; | ||||||
|  |  | ||||||
|  | @ -255,7 +255,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | ||||||
|                 // check user level |                 // check user level | ||||||
|                 if (avatar != null) |                 if (avatar != null) | ||||||
|                 { |                 { | ||||||
|                     if (avatar.UserLevel < m_levelUpload) |                     if (avatar.GodController.UserLevel < m_levelUpload) | ||||||
|                     { |                     { | ||||||
|                         remoteClient.SendAgentAlertMessage("Unable to upload asset. Insufficient permissions.", false); |                         remoteClient.SendAgentAlertMessage("Unable to upload asset. Insufficient permissions.", false); | ||||||
|                         return; |                         return; | ||||||
|  |  | ||||||
|  | @ -229,7 +229,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat | ||||||
|                     fromPos = avatar.AbsolutePosition; |                     fromPos = avatar.AbsolutePosition; | ||||||
|                     fromName = avatar.Name; |                     fromName = avatar.Name; | ||||||
|                     fromID = c.Sender.AgentId; |                     fromID = c.Sender.AgentId; | ||||||
|                     if (avatar.GodLevel >= 200) |                     if (avatar.GodController.GodLevel >= 200) | ||||||
|                     { // let gods speak to outside or things may get confusing |                     { // let gods speak to outside or things may get confusing | ||||||
|                         fromNamePrefix = m_adminPrefix; |                         fromNamePrefix = m_adminPrefix; | ||||||
|                         checkParcelHide = false; |                         checkParcelHide = false; | ||||||
|  | @ -305,7 +305,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat | ||||||
|                     { |                     { | ||||||
|                         if (checkParcelHide) |                         if (checkParcelHide) | ||||||
|                         { |                         { | ||||||
|                             if (sourceParcelID != Presencecheck.LandData.GlobalID && presence.GodLevel < 200) |                             if (sourceParcelID != Presencecheck.LandData.GlobalID && presence.GodController.GodLevel < 200) | ||||||
|                                 return; |                                 return; | ||||||
|                         } |                         } | ||||||
|                         if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true) |                         if (c.Sender == null || Presencecheck.IsEitherBannedOrRestricted(c.Sender.AgentId) != true) | ||||||
|  |  | ||||||
|  | @ -118,7 +118,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | ||||||
|                 // If we're in god mode, we reverse the meaning. Offer |                 // If we're in god mode, we reverse the meaning. Offer | ||||||
|                 // calling card becomes "Take a calling card" for that |                 // calling card becomes "Take a calling card" for that | ||||||
|                 // person, no matter if they agree or not. |                 // person, no matter if they agree or not. | ||||||
|                 if (sp.GodLevel >= 200) |                 if (sp.GodController.GodLevel >= 200) | ||||||
|                 { |                 { | ||||||
|                     CreateCallingCard(client.AgentId, destID, UUID.Zero, true); |                     CreateCallingCard(client.AgentId, destID, UUID.Zero, true); | ||||||
|                     return; |                     return; | ||||||
|  |  | ||||||
|  | @ -141,7 +141,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | ||||||
|                     if (avatar == null) |                     if (avatar == null) | ||||||
|                         return; |                         return; | ||||||
| 
 | 
 | ||||||
|                     if (avatar.UserLevel < m_levelHGFriends) |                     if (avatar.GodController.UserLevel < m_levelHGFriends) | ||||||
|                     { |                     { | ||||||
|                         client.SendAgentAlertMessage("Unable to send friendship invitation to foreigner. Insufficient permissions.", false); |                         client.SendAgentAlertMessage("Unable to send friendship invitation to foreigner. Insufficient permissions.", false); | ||||||
|                         return; |                         return; | ||||||
|  | @ -844,4 +844,4 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -173,7 +173,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | ||||||
| 
 | 
 | ||||||
|             sp.GrantGodlikePowers(token, godLike); |             sp.GrantGodlikePowers(token, godLike); | ||||||
| 
 | 
 | ||||||
|             if (godLike && sp.GodLevel < 200 && DialogModule != null) |             if (godLike && sp.GodController.GodLevel < 200 && DialogModule != null) | ||||||
|                DialogModule.SendAlertToUser(agentID, "Request for god powers denied"); |                DialogModule.SendAlertToUser(agentID, "Request for god powers denied"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -194,14 +194,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | ||||||
|             int godlevel = 200; |             int godlevel = 200; | ||||||
|             // update level so higher gods can kick lower ones |             // update level so higher gods can kick lower ones | ||||||
|             ScenePresence god = m_scene.GetScenePresence(godID); |             ScenePresence god = m_scene.GetScenePresence(godID); | ||||||
|             if(god != null && god.GodLevel > godlevel) |             if(god != null && god.GodController.GodLevel > godlevel) | ||||||
|                 godlevel =  god.GodLevel; |                 godlevel =  god.GodController.GodLevel; | ||||||
| 
 | 
 | ||||||
|             if(agentID == ALL_AGENTS) |             if(agentID == ALL_AGENTS) | ||||||
|             { |             { | ||||||
|                 m_scene.ForEachRootScenePresence(delegate(ScenePresence p) |                 m_scene.ForEachRootScenePresence(delegate(ScenePresence p) | ||||||
|                     { |                     { | ||||||
|                         if (p.UUID != godID && godlevel > p.GodLevel) |                         if (p.UUID != godID && godlevel > p.GodController.GodLevel) | ||||||
|                             doKickmodes(godID, p, kickflags, reason); |                             doKickmodes(godID, p, kickflags, reason); | ||||||
|                     }); |                     }); | ||||||
|                 return; |                 return; | ||||||
|  | @ -224,7 +224,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (godlevel <= sp.GodLevel) // no god wars |             if (godlevel <= sp.GodController.GodLevel) // no god wars | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             if(sp.UUID == godID) |             if(sp.UUID == godID) | ||||||
|  |  | ||||||
|  | @ -169,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure | ||||||
| 
 | 
 | ||||||
|             GridInstantMessage m; |             GridInstantMessage m; | ||||||
| 
 | 
 | ||||||
|             if (scene.Permissions.IsAdministrator(client.AgentId) && presence.GodLevel >= 200 && (!scene.Permissions.IsAdministrator(targetid))) |             if (scene.Permissions.IsAdministrator(client.AgentId) && presence.GodController.GodLevel >= 200 && (!scene.Permissions.IsAdministrator(targetid))) | ||||||
|             { |             { | ||||||
|                 m = new GridInstantMessage(scene, client.AgentId, |                 m = new GridInstantMessage(scene, client.AgentId, | ||||||
|                         client.FirstName+" "+client.LastName, targetid, |                         client.FirstName+" "+client.LastName, targetid, | ||||||
|  |  | ||||||
|  | @ -2077,6 +2077,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                 agentpos.Position = sp.AbsolutePosition; |                 agentpos.Position = sp.AbsolutePosition; | ||||||
|                 agentpos.Velocity = sp.Velocity; |                 agentpos.Velocity = sp.Velocity; | ||||||
|                 agentpos.RegionHandle = currentRegionHandler; |                 agentpos.RegionHandle = currentRegionHandler; | ||||||
|  |                 //agentpos.GodLevel = sp.GodLevel; | ||||||
|  |                 agentpos.GodData = sp.GodController.State(); | ||||||
|                 agentpos.Throttles = spClient.GetThrottlesPacked(1); |                 agentpos.Throttles = spClient.GetThrottlesPacked(1); | ||||||
|                 //            agentpos.ChildrenCapSeeds = seeds; |                 //            agentpos.ChildrenCapSeeds = seeds; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -272,7 +272,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             { |             { | ||||||
|                 // this user is going to another grid |                 // this user is going to another grid | ||||||
|                 // for local users, check if HyperGrid teleport is allowed, based on user level |                 // for local users, check if HyperGrid teleport is allowed, based on user level | ||||||
|                 if (Scene.UserManagementModule.IsLocalGridUser(sp.UUID) && sp.UserLevel < m_levelHGTeleport) |                 if (Scene.UserManagementModule.IsLocalGridUser(sp.UUID) && sp.GodController.UserLevel < m_levelHGTeleport) | ||||||
|                 { |                 { | ||||||
|                     m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to HG teleport agent due to insufficient UserLevel."); |                     m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to HG teleport agent due to insufficient UserLevel."); | ||||||
|                     reason = "Hypergrid teleport not allowed"; |                     reason = "Hypergrid teleport not allowed"; | ||||||
|  |  | ||||||
|  | @ -1977,7 +1977,7 @@ namespace OpenSim.Region.CoreModules.World.Land | ||||||
|             ScenePresence SP; |             ScenePresence SP; | ||||||
|             ((Scene)client.Scene).TryGetScenePresence(client.AgentId, out SP); |             ((Scene)client.Scene).TryGetScenePresence(client.AgentId, out SP); | ||||||
|             List<SceneObjectGroup> returns = new List<SceneObjectGroup>(); |             List<SceneObjectGroup> returns = new List<SceneObjectGroup>(); | ||||||
|             if (SP.UserLevel != 0) |             if (SP.GodController.UserLevel != 0) | ||||||
|             { |             { | ||||||
|                 if (flags == 0) //All parcels, scripted or not |                 if (flags == 0) //All parcels, scripted or not | ||||||
|                 { |                 { | ||||||
|  | @ -2043,7 +2043,7 @@ namespace OpenSim.Region.CoreModules.World.Land | ||||||
|             ((Scene)client.Scene).TryGetScenePresence(client.AgentId, out parcelManager); |             ((Scene)client.Scene).TryGetScenePresence(client.AgentId, out parcelManager); | ||||||
|             System.Threading.Timer Timer; |             System.Threading.Timer Timer; | ||||||
| 
 | 
 | ||||||
|             if (targetAvatar.UserLevel == 0) |             if (targetAvatar.GodController.UserLevel == 0) | ||||||
|             { |             { | ||||||
|                 ILandObject land = ((Scene)client.Scene).LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y); |                 ILandObject land = ((Scene)client.Scene).LandChannel.GetLandObject(targetAvatar.AbsolutePosition.X, targetAvatar.AbsolutePosition.Y); | ||||||
|                 if (!((Scene)client.Scene).Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze, true)) |                 if (!((Scene)client.Scene).Permissions.CanEditParcelProperties(client.AgentId, land, GroupPowers.LandEjectAndFreeze, true)) | ||||||
|  |  | ||||||
|  | @ -547,7 +547,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | ||||||
|             { |             { | ||||||
|                 ScenePresence sp = m_scene.GetScenePresence(user); |                 ScenePresence sp = m_scene.GetScenePresence(user); | ||||||
|                 if (sp != null) |                 if (sp != null) | ||||||
|                     return (sp.UserLevel >= 200); |                     return (sp.GodController.UserLevel >= 200); | ||||||
| 
 | 
 | ||||||
|                 UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, user); |                 UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, user); | ||||||
|                 if (account != null) |                 if (account != null) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,228 @@ | ||||||
|  | /* | ||||||
|  |  * 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 OpenSimulator 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 System.Xml; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Reflection; | ||||||
|  | using System.Threading; | ||||||
|  | using System.Timers; | ||||||
|  | using Timer = System.Timers.Timer; | ||||||
|  | using OpenMetaverse; | ||||||
|  | using OpenMetaverse.StructuredData; | ||||||
|  | using log4net; | ||||||
|  | using Nini.Config; | ||||||
|  | using OpenSim.Framework; | ||||||
|  | using OpenSim.Framework.Client; | ||||||
|  | using OpenSim.Framework.Monitoring; | ||||||
|  | using OpenSim.Region.Framework.Interfaces; | ||||||
|  | using OpenSim.Region.Framework.Scenes.Types; | ||||||
|  | using OpenSim.Services.Interfaces; | ||||||
|  | 
 | ||||||
|  | namespace OpenSim.Region.Framework.Scenes | ||||||
|  | { | ||||||
|  |     public class GodController | ||||||
|  |     { | ||||||
|  |         ScenePresence m_scenePresence; | ||||||
|  |         Scene m_scene; | ||||||
|  |         protected bool m_allowGridGods; | ||||||
|  |         protected bool m_regionOwnerIsGod; | ||||||
|  |         protected bool m_regionManagerIsGod; | ||||||
|  |         protected bool m_parcelOwnerIsGod; | ||||||
|  |         protected bool m_forceGodModeAlwaysOn; | ||||||
|  |         protected bool m_allowGodActionsWithoutGodMode; | ||||||
|  | 
 | ||||||
|  |         protected bool m_viewerUiIsGod = false; | ||||||
|  | 
 | ||||||
|  |         protected int m_userLevel = 0; | ||||||
|  | 
 | ||||||
|  |         public GodController(Scene scene, ScenePresence sp) | ||||||
|  |         { | ||||||
|  |             m_scene = scene; | ||||||
|  |             m_scenePresence = sp; | ||||||
|  | 
 | ||||||
|  |             IConfigSource config = scene.Config; | ||||||
|  | 
 | ||||||
|  |             string[] sections = new string[] { "Startup", "Permissions" }; | ||||||
|  | 
 | ||||||
|  |             // God level is based on UserLevel. Gods will have that | ||||||
|  |             // level grid-wide. Others may become god locally but grid | ||||||
|  |             // gods are god everywhere. | ||||||
|  |             m_allowGridGods = | ||||||
|  |                     Util.GetConfigVarFromSections<bool>(config, | ||||||
|  |                     "allow_grid_gods", sections, false); | ||||||
|  | 
 | ||||||
|  |             // The owner of a region is a god in his region only. | ||||||
|  |             m_regionOwnerIsGod = | ||||||
|  |                     Util.GetConfigVarFromSections<bool>(config, | ||||||
|  |                     "region_owner_is_god", sections, true); | ||||||
|  | 
 | ||||||
|  |             // Region managers are gods in the regions they manage. | ||||||
|  |             m_regionManagerIsGod = | ||||||
|  |                     Util.GetConfigVarFromSections<bool>(config, | ||||||
|  |                     "region_manager_is_god", sections, false); | ||||||
|  | 
 | ||||||
|  |             // Parcel owners are gods in their own parcels only. | ||||||
|  |             m_parcelOwnerIsGod = | ||||||
|  |                     Util.GetConfigVarFromSections<bool>(config, | ||||||
|  |                     "parcel_owner_is_god", sections, false); | ||||||
|  | 
 | ||||||
|  |             // God mode should be turned on in the viewer whenever | ||||||
|  |             // the user has god rights somewhere. They may choose | ||||||
|  |             // to turn it off again, though. | ||||||
|  |             m_forceGodModeAlwaysOn = | ||||||
|  |                     Util.GetConfigVarFromSections<bool>(config, | ||||||
|  |                     "automatic_gods", sections, false); | ||||||
|  | 
 | ||||||
|  |             // The user can execute any and all god functions, as | ||||||
|  |             // permitted by the viewer UI, without actually "godding | ||||||
|  |             // up". This is the default state in 0.8.2. | ||||||
|  |             m_allowGodActionsWithoutGodMode = | ||||||
|  |                     Util.GetConfigVarFromSections<bool>(config, | ||||||
|  |                     "implicit_gods", sections, false); | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected bool CanBeGod() | ||||||
|  |         { | ||||||
|  |             bool canBeGod = false; | ||||||
|  | 
 | ||||||
|  |             if (m_allowGridGods && m_userLevel > 0) | ||||||
|  |                 canBeGod = true; | ||||||
|  | 
 | ||||||
|  |             if (m_regionOwnerIsGod && m_scene.RegionInfo.EstateSettings.IsEstateOwner(m_scenePresence.UUID)) | ||||||
|  |                 canBeGod = true; | ||||||
|  | 
 | ||||||
|  |             if (m_regionManagerIsGod && m_scene.Permissions.IsEstateManager(m_scenePresence.UUID)) | ||||||
|  |                 canBeGod = true; | ||||||
|  | 
 | ||||||
|  |             if (!canBeGod && m_parcelOwnerIsGod) // Skip expensive check if we're already god! | ||||||
|  |             { | ||||||
|  |                 Vector3 pos = m_scenePresence.AbsolutePosition; | ||||||
|  |                 ILandObject parcel = m_scene.LandChannel.GetLandObject(pos.X, pos.Y); | ||||||
|  |                 if (parcel != null && parcel.LandData.OwnerID == m_scenePresence.UUID) | ||||||
|  |                     canBeGod = true; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return canBeGod; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         protected void SyncViewerState() | ||||||
|  |         { | ||||||
|  |             bool canBeGod = CanBeGod(); | ||||||
|  | 
 | ||||||
|  |             bool shoudBeGod = m_forceGodModeAlwaysOn ? canBeGod : (m_viewerUiIsGod && canBeGod); | ||||||
|  | 
 | ||||||
|  |             int godLevel = m_allowGridGods ? m_userLevel : 200; | ||||||
|  |             if (!shoudBeGod) | ||||||
|  |                 godLevel = 0; | ||||||
|  | 
 | ||||||
|  |             if (m_viewerUiIsGod != shoudBeGod) | ||||||
|  |             { | ||||||
|  |                 m_scenePresence.ControllingClient.SendAdminResponse(UUID.Zero, (uint)godLevel); | ||||||
|  |                 m_viewerUiIsGod = shoudBeGod; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public bool RequestGodMode(bool god) | ||||||
|  |         { | ||||||
|  |             if (!god) | ||||||
|  |             { | ||||||
|  |                 if (m_viewerUiIsGod) | ||||||
|  |                     m_scenePresence.ControllingClient.SendAdminResponse(UUID.Zero, 0); | ||||||
|  | 
 | ||||||
|  |                 m_viewerUiIsGod = false; | ||||||
|  | 
 | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!CanBeGod()) | ||||||
|  |                 return false; | ||||||
|  | 
 | ||||||
|  |             int godLevel = m_allowGridGods ? m_userLevel : 200; | ||||||
|  | 
 | ||||||
|  |             if (!m_viewerUiIsGod) | ||||||
|  |                 m_scenePresence.ControllingClient.SendAdminResponse(UUID.Zero, (uint)godLevel); | ||||||
|  | 
 | ||||||
|  |             m_viewerUiIsGod = true; | ||||||
|  | 
 | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public OSD State() | ||||||
|  |         { | ||||||
|  |             OSDMap godMap = new OSDMap(2); | ||||||
|  | 
 | ||||||
|  |             godMap.Add("ViewerUiIsGod", OSD.FromBoolean(m_viewerUiIsGod)); | ||||||
|  | 
 | ||||||
|  |             return godMap; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public void SetState(OSD state) | ||||||
|  |         { | ||||||
|  |             OSDMap s = (OSDMap)state; | ||||||
|  | 
 | ||||||
|  |             if (s.ContainsKey("ViewerUiIsGod")) | ||||||
|  |                 m_viewerUiIsGod = s["ViewerUiIsGod"].AsBoolean(); | ||||||
|  | 
 | ||||||
|  |             SyncViewerState(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public int UserLevel | ||||||
|  |         { | ||||||
|  |             get { return m_userLevel; } | ||||||
|  |             set { m_userLevel = UserLevel; } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public int GodLevel | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 int godLevel = m_allowGridGods ? m_userLevel : 200; | ||||||
|  |                 if (!m_viewerUiIsGod) | ||||||
|  |                     godLevel = 0; | ||||||
|  | 
 | ||||||
|  |                 return godLevel; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public int EffectiveLevel | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 int godLevel = m_allowGridGods ? m_userLevel : 200; | ||||||
|  |                 if (m_viewerUiIsGod) | ||||||
|  |                     return godLevel; | ||||||
|  | 
 | ||||||
|  |                 if (m_allowGodActionsWithoutGodMode && CanBeGod()) | ||||||
|  |                     return godLevel; | ||||||
|  | 
 | ||||||
|  |                 return 0; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -1207,7 +1207,6 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
| 
 | 
 | ||||||
|             #endregion Interest Management |             #endregion Interest Management | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|             StatsReporter = new SimStatsReporter(this); |             StatsReporter = new SimStatsReporter(this); | ||||||
| 
 | 
 | ||||||
|             StatsReporter.OnSendStatsResult += SendSimStatsPackets; |             StatsReporter.OnSendStatsResult += SendSimStatsPackets; | ||||||
|  |  | ||||||
|  | @ -501,21 +501,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             get { return m_invulnerable; } |             get { return m_invulnerable; } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private int m_userLevel; |         public GodController GodController { get; private set; } | ||||||
| 
 |  | ||||||
|         public int UserLevel |  | ||||||
|         { |  | ||||||
|             get { return m_userLevel; } |  | ||||||
|             private set { m_userLevel = value; } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         private int m_godLevel; |  | ||||||
| 
 |  | ||||||
|         public int GodLevel |  | ||||||
|         { |  | ||||||
|             get { return m_godLevel; } |  | ||||||
|             private set { m_godLevel = value; } |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         private ulong m_rootRegionHandle; |         private ulong m_rootRegionHandle; | ||||||
|         private Vector3 m_rootRegionPosition = new Vector3(); |         private Vector3 m_rootRegionPosition = new Vector3(); | ||||||
|  | @ -1059,6 +1045,8 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         public ScenePresence( |         public ScenePresence( | ||||||
|             IClientAPI client, Scene world, AvatarAppearance appearance, PresenceType type) |             IClientAPI client, Scene world, AvatarAppearance appearance, PresenceType type) | ||||||
|         { |         { | ||||||
|  |             GodController = new GodController(world, this); | ||||||
|  | 
 | ||||||
|             m_scene = world; |             m_scene = world; | ||||||
|             AttachmentsSyncLock = new Object(); |             AttachmentsSyncLock = new Object(); | ||||||
|             AllowMovement = true; |             AllowMovement = true; | ||||||
|  | @ -1085,7 +1073,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 m_userFlags = 0; |                 m_userFlags = 0; | ||||||
| 
 | 
 | ||||||
|             if (account != null) |             if (account != null) | ||||||
|                 UserLevel = account.UserLevel; |                 GodController.UserLevel = account.UserLevel; | ||||||
| 
 | 
 | ||||||
|  //           IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); |  //           IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); | ||||||
|  //           if (gm != null) |  //           if (gm != null) | ||||||
|  | @ -2113,18 +2101,15 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
| 
 | 
 | ||||||
|                 m_log.DebugFormat("[CompleteMovement] ReleaseAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |                 m_log.DebugFormat("[CompleteMovement] ReleaseAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | ||||||
| 
 | 
 | ||||||
| 
 |                 if(m_teleportFlags > 0) | ||||||
|                 if(m_teleportFlags > 0)  //sanity check |                 { | ||||||
|                     gotCrossUpdate = false; |                     gotCrossUpdate = false; // sanity check | ||||||
|  |                     Thread.Sleep(500);  // let viewers catch us | ||||||
|  |                 } | ||||||
| 
 | 
 | ||||||
|                 if(!gotCrossUpdate) |                 if(!gotCrossUpdate) | ||||||
|                     RotateToLookAt(look); |                     RotateToLookAt(look); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| // start sending terrain patchs |  | ||||||
|                 if (!gotCrossUpdate && !isNPC) |  | ||||||
|                     Scene.SendLayerData(ControllingClient); |  | ||||||
| 
 |  | ||||||
|                 // HG |                 // HG | ||||||
|                 bool isHGTP = (m_teleportFlags & TeleportFlags.ViaHGLogin) != 0; |                 bool isHGTP = (m_teleportFlags & TeleportFlags.ViaHGLogin) != 0; | ||||||
|                 if(isHGTP) |                 if(isHGTP) | ||||||
|  | @ -2133,6 +2118,12 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                     m_log.DebugFormat("[CompleteMovement] HG"); |                     m_log.DebugFormat("[CompleteMovement] HG"); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|  |                 if(!IsChildAgent && !isNPC) | ||||||
|  |                      | ||||||
|  | // start sending terrain patchs | ||||||
|  |                 if (!gotCrossUpdate && !isNPC) | ||||||
|  |                     Scene.SendLayerData(ControllingClient); | ||||||
|  | 
 | ||||||
|                 m_previusParcelHide = false; |                 m_previusParcelHide = false; | ||||||
|                 m_previusParcelUUID = UUID.Zero; |                 m_previusParcelUUID = UUID.Zero; | ||||||
|                 m_currentParcelHide = false; |                 m_currentParcelHide = false; | ||||||
|  | @ -2201,7 +2192,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                             if (p == this) |                             if (p == this) | ||||||
|                                 continue; |                                 continue; | ||||||
| 
 | 
 | ||||||
|                             if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                             if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                                 continue; |                                 continue; | ||||||
| 
 | 
 | ||||||
|                             SendAppearanceToAgentNF(p); |                             SendAppearanceToAgentNF(p); | ||||||
|  | @ -2251,7 +2242,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                                     continue; |                                     continue; | ||||||
|                                 } |                                 } | ||||||
| 
 | 
 | ||||||
|                                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                                     continue; |                                     continue; | ||||||
| 
 | 
 | ||||||
|                                 SendAttachmentsToAgentNF(p); |                                 SendAttachmentsToAgentNF(p); | ||||||
|  | @ -3867,7 +3858,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             if (!remoteClient.IsActive) |             if (!remoteClient.IsActive) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             if (ParcelHideThisAvatar && p.currentParcelUUID != currentParcelUUID && p.GodLevel < 200) |             if (ParcelHideThisAvatar && p.currentParcelUUID != currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             //m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity); |             //m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity); | ||||||
|  | @ -3977,7 +3968,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 // get the avatar, then a kill if can't see it |                 // get the avatar, then a kill if can't see it | ||||||
|                 p.SendInitialAvatarDataToAgent(this); |                 p.SendInitialAvatarDataToAgent(this); | ||||||
| 
 | 
 | ||||||
|                 if (p.ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && GodLevel < 200) |                 if (p.ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && GodController.GodLevel < 200) | ||||||
|                     return; |                     return; | ||||||
| 
 | 
 | ||||||
|                 p.SendAppearanceToAgentNF(this); |                 p.SendAppearanceToAgentNF(this); | ||||||
|  | @ -4025,7 +4016,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             foreach (ScenePresence p in presences) |             foreach (ScenePresence p in presences) | ||||||
|             { |             { | ||||||
|                 p.ControllingClient.SendAvatarDataImmediate(this); |                 p.ControllingClient.SendAvatarDataImmediate(this); | ||||||
|                 if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                 if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     // either just kill the object |                     // either just kill the object | ||||||
|                     // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); |                     // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); | ||||||
|                     // or also attachments viewer may still know about |                     // or also attachments viewer may still know about | ||||||
|  | @ -4038,7 +4029,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         public void SendInitialAvatarDataToAgent(ScenePresence p) |         public void SendInitialAvatarDataToAgent(ScenePresence p) | ||||||
|         { |         { | ||||||
|             p.ControllingClient.SendAvatarDataImmediate(this); |             p.ControllingClient.SendAvatarDataImmediate(this); | ||||||
|             if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |             if (p != this && ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     // either just kill the object |                     // either just kill the object | ||||||
|                     // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); |                     // p.ControllingClient.SendKillObject(new List<uint> {LocalId}); | ||||||
|                     // or also attachments viewer may still know about |                     // or also attachments viewer may still know about | ||||||
|  | @ -4052,7 +4043,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         public void SendAvatarDataToAgent(ScenePresence avatar) |         public void SendAvatarDataToAgent(ScenePresence avatar) | ||||||
|         { |         { | ||||||
|             //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); |             //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); | ||||||
|             if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200) |             if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodController.GodLevel < 200) | ||||||
|                 return; |                 return; | ||||||
|             avatar.ControllingClient.SendAvatarDataImmediate(this); |             avatar.ControllingClient.SendAvatarDataImmediate(this); | ||||||
|         } |         } | ||||||
|  | @ -4097,7 +4088,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         { |         { | ||||||
|             //            m_log.DebugFormat( |             //            m_log.DebugFormat( | ||||||
|             //                "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); |             //                "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); | ||||||
|             if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200) |             if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodController.GodLevel < 200) | ||||||
|                 return; |                 return; | ||||||
|             SendAppearanceToAgentNF(avatar); |             SendAppearanceToAgentNF(avatar); | ||||||
|         } |         } | ||||||
|  | @ -4113,7 +4104,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             if (IsChildAgent || Animator == null) |             if (IsChildAgent || Animator == null) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |             if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             Animator.SendAnimPackToClient(p.ControllingClient); |             Animator.SendAnimPackToClient(p.ControllingClient); | ||||||
|  | @ -4124,7 +4115,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             if (IsChildAgent) |             if (IsChildAgent) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |             if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs); |             p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs); | ||||||
|  | @ -4149,7 +4140,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
| 
 | 
 | ||||||
|             m_scene.ForEachScenePresence(delegate(ScenePresence p) |             m_scene.ForEachScenePresence(delegate(ScenePresence p) | ||||||
|             { |             { | ||||||
|                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     return; |                     return; | ||||||
|                 p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs); |                 p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs); | ||||||
|             }); |             }); | ||||||
|  | @ -4262,6 +4253,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                         agentpos.Position = AbsolutePosition; |                         agentpos.Position = AbsolutePosition; | ||||||
|                         agentpos.Velocity = Velocity; |                         agentpos.Velocity = Velocity; | ||||||
|                         agentpos.RegionHandle = RegionHandle; |                         agentpos.RegionHandle = RegionHandle; | ||||||
|  |                         agentpos.GodData = GodController.State(); | ||||||
|                         agentpos.Throttles = ControllingClient.GetThrottlesPacked(1); |                         agentpos.Throttles = ControllingClient.GetThrottlesPacked(1); | ||||||
| 
 | 
 | ||||||
|                         // Let's get this out of the update loop |                         // Let's get this out of the update loop | ||||||
|  | @ -4510,20 +4502,12 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         public void GrantGodlikePowers(UUID token, bool godStatus) |         public void GrantGodlikePowers(UUID token, bool godStatus) | ||||||
|         { |         { | ||||||
|             int oldgodlevel = GodLevel; |             if (isNPC) | ||||||
|  |                 return; | ||||||
| 
 | 
 | ||||||
|             if (godStatus && !isNPC && m_scene.Permissions.IsGod(UUID)) |             bool success = GodController.RequestGodMode(godStatus); | ||||||
|             { |             if (success && godStatus) | ||||||
|                 GodLevel = 200; |                 parcelGodCheck(m_currentParcelUUID, GodController.GodLevel >= 200); | ||||||
|                 if(GodLevel < UserLevel) |  | ||||||
|                     GodLevel = UserLevel; |  | ||||||
|             } |  | ||||||
|             else |  | ||||||
|                 GodLevel = 0; |  | ||||||
| 
 |  | ||||||
|             ControllingClient.SendAdminResponse(token, (uint)GodLevel); |  | ||||||
|             if(oldgodlevel != GodLevel) |  | ||||||
|                 parcelGodCheck(m_currentParcelUUID, GodLevel >= 200); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #region Child Agent Updates |         #region Child Agent Updates | ||||||
|  | @ -4554,6 +4538,8 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             if (!IsChildAgent) |             if (!IsChildAgent) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|  |             GodController.SetState(cAgentData.GodData); | ||||||
|  | 
 | ||||||
|             RegionHandle = cAgentData.RegionHandle; |             RegionHandle = cAgentData.RegionHandle; | ||||||
| 
 | 
 | ||||||
|             //m_log.Debug("   >>> ChildAgentPositionUpdate <<< " + rRegionX + "-" + rRegionY); |             //m_log.Debug("   >>> ChildAgentPositionUpdate <<< " + rRegionX + "-" + rRegionY); | ||||||
|  | @ -4628,11 +4614,6 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             cAgent.BodyRotation = Rotation; |             cAgent.BodyRotation = Rotation; | ||||||
|             cAgent.ControlFlags = (uint)m_AgentControlFlags; |             cAgent.ControlFlags = (uint)m_AgentControlFlags; | ||||||
| 
 | 
 | ||||||
|             if (GodLevel > 200 && m_scene.Permissions.IsGod(cAgent.AgentID)) |  | ||||||
|                 cAgent.GodLevel = (byte)GodLevel; |  | ||||||
|             else |  | ||||||
|                 cAgent.GodLevel = (byte) 0; |  | ||||||
| 
 |  | ||||||
|             cAgent.AlwaysRun = SetAlwaysRun; |             cAgent.AlwaysRun = SetAlwaysRun; | ||||||
| 
 | 
 | ||||||
|             // make clear we want the all thing |             // make clear we want the all thing | ||||||
|  | @ -4693,6 +4674,8 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
| //                "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", | //                "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", | ||||||
| //                Name, m_scene.RegionInfo.RegionName, m_callbackURI); | //                Name, m_scene.RegionInfo.RegionName, m_callbackURI); | ||||||
| 
 | 
 | ||||||
|  |             GodController.SetState(cAgent.GodData); | ||||||
|  | 
 | ||||||
|             m_pos = cAgent.Position; |             m_pos = cAgent.Position; | ||||||
|             m_velocity = cAgent.Velocity; |             m_velocity = cAgent.Velocity; | ||||||
|             CameraPosition = cAgent.Center; |             CameraPosition = cAgent.Center; | ||||||
|  | @ -4729,11 +4712,6 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             Rotation = cAgent.BodyRotation; |             Rotation = cAgent.BodyRotation; | ||||||
|             m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; |             m_AgentControlFlags = (AgentManager.ControlFlags)cAgent.ControlFlags; | ||||||
| 
 | 
 | ||||||
|             if (cAgent.GodLevel >200 && m_scene.Permissions.IsGod(cAgent.AgentID)) |  | ||||||
|                 GodLevel = cAgent.GodLevel; |  | ||||||
|             else |  | ||||||
|                 GodLevel = 0; |  | ||||||
| 
 |  | ||||||
|             SetAlwaysRun = cAgent.AlwaysRun; |             SetAlwaysRun = cAgent.AlwaysRun; | ||||||
| 
 | 
 | ||||||
|             Appearance = new AvatarAppearance(cAgent.Appearance); |             Appearance = new AvatarAppearance(cAgent.Appearance); | ||||||
|  | @ -4963,7 +4941,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             RaiseCollisionScriptEvents(coldata); |             RaiseCollisionScriptEvents(coldata); | ||||||
| 
 | 
 | ||||||
|             // Gods do not take damage and Invulnerable is set depending on parcel/region flags |             // Gods do not take damage and Invulnerable is set depending on parcel/region flags | ||||||
|             if (Invulnerable || GodLevel > 0) |             if (Invulnerable || GodController.GodLevel > 0) | ||||||
|                 return; |                 return; | ||||||
| 
 | 
 | ||||||
|             // The following may be better in the ICombatModule |             // The following may be better in the ICombatModule | ||||||
|  | @ -5248,7 +5226,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                         if (p != this && sog.HasPrivateAttachmentPoint) |                         if (p != this && sog.HasPrivateAttachmentPoint) | ||||||
|                             return; |                             return; | ||||||
| 
 | 
 | ||||||
|                         if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                         if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                             return; |                             return; | ||||||
| 
 | 
 | ||||||
|                         SendTerseUpdateToAgentNF(p); |                         SendTerseUpdateToAgentNF(p); | ||||||
|  | @ -5362,7 +5340,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 if (p == this) |                 if (p == this) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 p.ControllingClient.SendEntityUpdate(rootpart, rootflag); |                 p.ControllingClient.SendEntityUpdate(rootpart, rootflag); | ||||||
|  | @ -5421,7 +5399,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 if (p == this) |                 if (p == this) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 p.ControllingClient.SendEntityUpdate(rootpart, flag); |                 p.ControllingClient.SendEntityUpdate(rootpart, flag); | ||||||
|  | @ -5471,7 +5449,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 if (p == this) |                 if (p == this) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 p.ControllingClient.SendEntityUpdate(part, flag); |                 p.ControllingClient.SendEntityUpdate(part, flag); | ||||||
|  | @ -5512,7 +5490,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             { |             { | ||||||
|                 if (p == this) |                 if (p == this) | ||||||
|                     continue; |                     continue; | ||||||
|                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodLevel < 200) |                 if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                     continue; |                     continue; | ||||||
| 
 | 
 | ||||||
|                 p.ControllingClient.SendEntityUpdate(part, flag); |                 p.ControllingClient.SendEntityUpdate(part, flag); | ||||||
|  | @ -6150,7 +6128,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                     // the TP point. This behaviour mimics agni. |                     // the TP point. This behaviour mimics agni. | ||||||
|                     if (land.LandData.LandingType == (byte)LandingType.LandingPoint && |                     if (land.LandData.LandingType == (byte)LandingType.LandingPoint && | ||||||
|                         land.LandData.UserLocation != Vector3.Zero && |                         land.LandData.UserLocation != Vector3.Zero && | ||||||
|                         GodLevel < 200 && |                         GodController.GodLevel < 200 && | ||||||
|                         ((land.LandData.OwnerID != m_uuid && |                         ((land.LandData.OwnerID != m_uuid && | ||||||
|                           !m_scene.Permissions.IsGod(m_uuid) && |                           !m_scene.Permissions.IsGod(m_uuid) && | ||||||
|                           !m_scene.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_uuid)) || |                           !m_scene.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_uuid)) || | ||||||
|  | @ -6175,7 +6153,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|             string reason; |             string reason; | ||||||
| 
 | 
 | ||||||
|             // dont mess with gods |             // dont mess with gods | ||||||
|             if(GodLevel >=  200 || m_scene.Permissions.IsGod(m_uuid)) |             if(GodController.GodLevel >=  200 || m_scene.Permissions.IsGod(m_uuid)) | ||||||
|                 return true; |                 return true; | ||||||
| 
 | 
 | ||||||
|             // respect region owner and managers |             // respect region owner and managers | ||||||
|  | @ -6523,7 +6501,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                             continue; |                             continue; | ||||||
| 
 | 
 | ||||||
|                         // those not on parcel dont see me |                         // those not on parcel dont see me | ||||||
|                         if (currentParcelID != p.currentParcelUUID && p.GodLevel < 200) |                         if (currentParcelID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                         { |                         { | ||||||
|                             killsToSendto.Add(p); // they dont see me |                             killsToSendto.Add(p); // they dont see me | ||||||
|                         } |                         } | ||||||
|  | @ -6549,9 +6527,9 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                             // only those on previus parcel need receive kills |                             // only those on previus parcel need receive kills | ||||||
|                             if (previusParcelID == p.currentParcelUUID) |                             if (previusParcelID == p.currentParcelUUID) | ||||||
|                             { |                             { | ||||||
|                                 if(p.GodLevel < 200) |                                 if(p.GodController.GodLevel < 200) | ||||||
|                                     killsToSendto.Add(p); // they dont see me |                                     killsToSendto.Add(p); // they dont see me | ||||||
|                                 if(GodLevel < 200) |                                 if(GodController.GodLevel < 200) | ||||||
|                                     killsToSendme.Add(p);  // i dont see them |                                     killsToSendme.Add(p);  // i dont see them | ||||||
|                             } |                             } | ||||||
|                             // only those on new parcel need see |                             // only those on new parcel need see | ||||||
|  | @ -6573,7 +6551,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                                 continue; |                                 continue; | ||||||
| 
 | 
 | ||||||
|                             // those not on new parcel dont see me |                             // those not on new parcel dont see me | ||||||
|                             if (currentParcelID != p.currentParcelUUID && p.GodLevel < 200) |                             if (currentParcelID != p.currentParcelUUID && p.GodController.GodLevel < 200) | ||||||
|                             { |                             { | ||||||
|                                 killsToSendto.Add(p); // they dont see me |                                 killsToSendto.Add(p); // they dont see me | ||||||
|                             } |                             } | ||||||
|  | @ -6599,7 +6577,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                             if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive) |                             if (p.IsDeleted || p == this || p.ControllingClient == null || !p.ControllingClient.IsActive) | ||||||
|                                 continue; |                                 continue; | ||||||
|                             // only those old parcel need kills |                             // only those old parcel need kills | ||||||
|                             if (previusParcelID == p.currentParcelUUID && GodLevel < 200) |                             if (previusParcelID == p.currentParcelUUID && GodController.GodLevel < 200) | ||||||
|                             { |                             { | ||||||
|                                 killsToSendme.Add(p);  // i dont see them |                                 killsToSendme.Add(p);  // i dont see them | ||||||
|                             } |                             } | ||||||
|  | @ -6662,7 +6640,7 @@ namespace OpenSim.Region.Framework.Scenes | ||||||
|                 if (Scene.AttachmentsModule != null) |                 if (Scene.AttachmentsModule != null) | ||||||
|                     Scene.AttachmentsModule.DeleteAttachmentsFromScene(this, true); |                     Scene.AttachmentsModule.DeleteAttachmentsFromScene(this, true); | ||||||
| 
 | 
 | ||||||
|                 if (!ParcelHideThisAvatar || GodLevel >= 200) |                 if (!ParcelHideThisAvatar || GodController.GodLevel >= 200) | ||||||
|                     return; |                     return; | ||||||
| 
 | 
 | ||||||
|                 List<ScenePresence> allpresences = m_scene.GetScenePresences(); |                 List<ScenePresence> allpresences = m_scene.GetScenePresences(); | ||||||
|  |  | ||||||
|  | @ -877,7 +877,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | ||||||
| 
 | 
 | ||||||
|             if (avatar != null) |             if (avatar != null) | ||||||
|             { |             { | ||||||
|                 if (avatar.UserLevel < m_levelGroupCreate) |                 if (avatar.GodController.UserLevel < m_levelGroupCreate) | ||||||
|                 { |                 { | ||||||
|                     remoteClient.SendCreateGroupReply(UUID.Zero, false, "You have insufficient permissions to create a group."); |                     remoteClient.SendCreateGroupReply(UUID.Zero, false, "You have insufficient permissions to create a group."); | ||||||
|                     return UUID.Zero; |                     return UUID.Zero; | ||||||
|  |  | ||||||
|  | @ -4977,7 +4977,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|                 if (presence != null && presence.PresenceType != PresenceType.Npc) |                 if (presence != null && presence.PresenceType != PresenceType.Npc) | ||||||
|                 { |                 { | ||||||
|                     // agent must not be a god |                     // agent must not be a god | ||||||
|                     if (presence.UserLevel >= 200) return; |                     if (presence.GodController.UserLevel >= 200) return; | ||||||
| 
 | 
 | ||||||
|                     // agent must be over the owners land |                     // agent must be over the owners land | ||||||
|                     if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) |                     if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) | ||||||
|  | @ -5029,7 +5029,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|                     else |                     else | ||||||
|                     { |                     { | ||||||
|                         // agent must not be a god |                         // agent must not be a god | ||||||
|                         if (presence.GodLevel >= 200) return; |                         if (presence.GodController.GodLevel >= 200) return; | ||||||
| 
 | 
 | ||||||
|                         // agent must be over the owners land |                         // agent must be over the owners land | ||||||
|                         ILandObject agentLand = World.LandChannel.GetLandObject(presence.AbsolutePosition); |                         ILandObject agentLand = World.LandChannel.GetLandObject(presence.AbsolutePosition); | ||||||
|  | @ -5256,7 +5256,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|                     return; |                     return; | ||||||
| 
 | 
 | ||||||
|                 // Pushee is in GodMode this pushing object isn't owned by them |                 // Pushee is in GodMode this pushing object isn't owned by them | ||||||
|                 if (avatar.GodLevel > 0 && m_host.OwnerID != targetID) |                 if (avatar.GodController.GodLevel > 0 && m_host.OwnerID != targetID) | ||||||
|                     return; |                     return; | ||||||
| 
 | 
 | ||||||
|                 pusheeav = avatar; |                 pusheeav = avatar; | ||||||
|  | @ -6687,7 +6687,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|                 delegate (ScenePresence ssp) |                 delegate (ScenePresence ssp) | ||||||
|                 { |                 { | ||||||
|                     // Gods are not listed in SL |                     // Gods are not listed in SL | ||||||
|                     if (!ssp.IsDeleted && ssp.GodLevel == 0.0 && !ssp.IsChildAgent) |                     if (!ssp.IsDeleted && ssp.GodController.GodLevel == 0.0 && !ssp.IsChildAgent) | ||||||
|                     { |                     { | ||||||
|                         if (!regionWide) |                         if (!regionWide) | ||||||
|                         { |                         { | ||||||
|  | @ -14484,91 +14484,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|             return contacts.ToArray(); |             return contacts.ToArray(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private ContactResult? GroundIntersection2(Vector3 rayStart, Vector3 rayEnd) |  | ||||||
|         { |  | ||||||
|             // get work copies |  | ||||||
|             float sx = rayStart.X; |  | ||||||
|             float ex = rayEnd.X; |  | ||||||
|             float sy = rayStart.Y; |  | ||||||
|             float ey = rayEnd.Y; |  | ||||||
| 
 |  | ||||||
|             float dx = ex - sx; |  | ||||||
|             float dy = ey - sy; |  | ||||||
| 
 |  | ||||||
|             // region size info |  | ||||||
|             float rsx =  World.RegionInfo.RegionSizeX; |  | ||||||
| 
 |  | ||||||
|             float tmp; |  | ||||||
| 
 |  | ||||||
|             // region bounds |  | ||||||
|             if(sx < 0) |  | ||||||
|             { |  | ||||||
|                 if(ex < 0) // totally outside |  | ||||||
|                     return null; |  | ||||||
|                 if(dx <= 0) // out and going away |  | ||||||
|                     return null; |  | ||||||
|                 else if(ex >= rsx) |  | ||||||
|                     ex = rsx - 0.001f; |  | ||||||
|                 tmp = -sx / dx; |  | ||||||
|                 sy += dy * dx; |  | ||||||
|                 sx = 0; |  | ||||||
|             } |  | ||||||
|             else if(sx >= rsx) |  | ||||||
|             { |  | ||||||
|                 if(ex >= rsx)  // totally outside |  | ||||||
|                     return null; |  | ||||||
|                 if(dx >= 0) // out and going away |  | ||||||
|                     return null; |  | ||||||
|                 else if(ex < 0) |  | ||||||
|                     ex = 0; |  | ||||||
|                 tmp = (rsx - sx) / dx; |  | ||||||
|                 sy += dy * dx; |  | ||||||
|                 sx = rsx - 0.001f; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             float rsy =  World.RegionInfo.RegionSizeY; |  | ||||||
|             if(sy < 0) |  | ||||||
|             { |  | ||||||
|                 if(dy <= 0) // out and going away |  | ||||||
|                     return null; |  | ||||||
|                 else if(ey >= rsy) |  | ||||||
|                     ey = rsy - 0.001f; |  | ||||||
|                 tmp = -sy / dy; |  | ||||||
|                 sx += dy * dx; |  | ||||||
|                 sy = 0; |  | ||||||
|             } |  | ||||||
|             else if(sy >= rsy) |  | ||||||
|             { |  | ||||||
|                 if(dy >= 0) // out and going away |  | ||||||
|                     return null; |  | ||||||
|                 else if(ey < 0) |  | ||||||
|                     ey = 0; |  | ||||||
|                 tmp = (rsy - sy) / dy; |  | ||||||
|                 sx += dy * dx; |  | ||||||
|                 sy = rsy - 0.001f; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             if(sx < 0 || sx >= rsx) |  | ||||||
|                 return null; |  | ||||||
| 
 |  | ||||||
|             float sz = rayStart.Z; |  | ||||||
|             float ez = rayEnd.Z; |  | ||||||
|             float dz = ez - sz; |  | ||||||
| 
 |  | ||||||
|             float dist = dx * dx + dy * dy + dz * dz; |  | ||||||
|             if(dist < 0.001) |  | ||||||
|                 return null; |  | ||||||
|             dist = (float)Math.Sqrt(dist); |  | ||||||
|             tmp = 1.0f / dist; |  | ||||||
|             Vector3 rayn = new Vector3(dx * tmp, dy * tmp, dz * tmp); |  | ||||||
| 
 |  | ||||||
|             ContactResult? result = null; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|             return result; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         private ContactResult? GroundIntersection(Vector3 rayStart, Vector3 rayEnd) |         private ContactResult? GroundIntersection(Vector3 rayStart, Vector3 rayEnd) | ||||||
|         { |         { | ||||||
|             double[,] heightfield = World.Heightmap.GetDoubles(); |             double[,] heightfield = World.Heightmap.GetDoubles(); | ||||||
|  |  | ||||||
|  | @ -721,7 +721,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|             { |             { | ||||||
|                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID); |                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID); | ||||||
| 
 | 
 | ||||||
|                 if (sp == null || sp.GodLevel < 200) |                 if (sp == null || sp.GodController.GodLevel < 200) | ||||||
|                 { |                 { | ||||||
|                     LSShoutError("lsSetWindlightScene can only be used by estate managers or owners."); |                     LSShoutError("lsSetWindlightScene can only be used by estate managers or owners."); | ||||||
|                     return 0; |                     return 0; | ||||||
|  | @ -768,7 +768,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|             { |             { | ||||||
|                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID); |                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID); | ||||||
| 
 | 
 | ||||||
|                 if (sp == null || sp.GodLevel < 200) |                 if (sp == null || sp.GodController.GodLevel < 200) | ||||||
|                 { |                 { | ||||||
|                     LSShoutError("lsSetWindlightScene can only be used by estate managers or owners."); |                     LSShoutError("lsSetWindlightScene can only be used by estate managers or owners."); | ||||||
|                     return; |                     return; | ||||||
|  | @ -799,7 +799,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | ||||||
|             { |             { | ||||||
|                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID); |                 ScenePresence sp = World.GetScenePresence(m_host.OwnerID); | ||||||
| 
 | 
 | ||||||
|                 if (sp == null || sp.GodLevel < 200) |                 if (sp == null || sp.GodController.GodLevel < 200) | ||||||
|                 { |                 { | ||||||
|                     LSShoutError("lsSetWindlightSceneTargeted can only be used by estate managers or owners."); |                     LSShoutError("lsSetWindlightSceneTargeted can only be used by estate managers or owners."); | ||||||
|                     return 0; |                     return 0; | ||||||
|  |  | ||||||
|  | @ -540,7 +540,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if (presence.IsDeleted || presence.IsChildAgent || presence.GodLevel > 0.0) |                 if (presence.IsDeleted || presence.IsChildAgent || presence.GodController.GodLevel > 0.0) | ||||||
|                     return; |                     return; | ||||||
| 
 | 
 | ||||||
|                 // if the object the script is in is attached and the avatar is the owner |                 // if the object the script is in is attached and the avatar is the owner | ||||||
|  |  | ||||||
|  | @ -487,6 +487,16 @@ | ||||||
|     ; you really do not want this... |     ; you really do not want this... | ||||||
|     ;parcel_owner_is_god = false |     ;parcel_owner_is_god = false | ||||||
| 
 | 
 | ||||||
|  |     ; God mode should be turned on in the viewer whenever | ||||||
|  |     ; the user has god rights somewhere. They may choose | ||||||
|  |     ; to turn it off again, though. | ||||||
|  |     automatic_gods = false | ||||||
|  | 
 | ||||||
|  |     ; The user can execute any and all god functions, as | ||||||
|  |     ; permitted by the viewer UI, without actually "godding | ||||||
|  |     ; up". This is the default state in 0.8.2. | ||||||
|  |     implicit_gods = true | ||||||
|  | 
 | ||||||
|     ; Control user types that are allowed to create new scripts |     ; Control user types that are allowed to create new scripts | ||||||
|     ; Only enforced if serviceside_object_permissions is true |     ; Only enforced if serviceside_object_permissions is true | ||||||
|     ; |     ; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 UbitUmarov
						UbitUmarov