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