Merge branch 'master' into careminster

avinationmerge
Melanie 2013-03-01 23:54:00 +00:00
commit a675f7d4c3
14 changed files with 246 additions and 197 deletions

View File

@ -138,6 +138,10 @@ namespace OpenSim
/// <param name="configSource"></param> /// <param name="configSource"></param>
public OpenSimBase(IConfigSource configSource) : base() public OpenSimBase(IConfigSource configSource) : base()
{ {
// FIXME: This should be done down in ServerBase but we need to sort out and refactor the log4net
// XmlConfigurator calls first accross servers.
m_log.InfoFormat("[SERVER BASE]: Starting in {0}", m_startupDirectory);
LoadConfigSettings(configSource); LoadConfigSettings(configSource);
} }

View File

@ -156,9 +156,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
public void Initialise(IConfigSource config) public void Initialise(IConfigSource config)
{ {
IConfig myConfig = config.Configs["Startup"]; string permissionModules = Util.GetConfigVarFromSections<string>(config, "permissionmodules",
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule");
List<string> modules = new List<string>(permissionModules.Split(',')); List<string> modules = new List<string>(permissionModules.Split(','));
@ -167,26 +166,34 @@ namespace OpenSim.Region.CoreModules.World.Permissions
m_Enabled = true; m_Enabled = true;
m_allowGridGods = myConfig.GetBoolean("allow_grid_gods", false); m_allowGridGods = Util.GetConfigVarFromSections<bool>(config, "allow_grid_gods",
m_bypassPermissions = !myConfig.GetBoolean("serverside_object_permissions", true); new string[] { "Startup", "Permissions" }, false);
m_propagatePermissions = myConfig.GetBoolean("propagate_permissions", true); m_bypassPermissions = !Util.GetConfigVarFromSections<bool>(config, "serverside_object_permissions",
m_RegionOwnerIsGod = myConfig.GetBoolean("region_owner_is_god", true); new string[] { "Startup", "Permissions" }, true);
m_RegionManagerIsGod = myConfig.GetBoolean("region_manager_is_god", false); m_propagatePermissions = Util.GetConfigVarFromSections<bool>(config, "propagate_permissions",
m_ParcelOwnerIsGod = myConfig.GetBoolean("parcel_owner_is_god", true); new string[] { "Startup", "Permissions" }, true);
m_RegionOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_owner_is_god",
new string[] { "Startup", "Permissions" }, true);
m_RegionManagerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god",
new string[] { "Startup", "Permissions" }, false);
m_ParcelOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "parcel_owner_is_god",
new string[] { "Startup", "Permissions" }, true);
m_SimpleBuildPermissions = myConfig.GetBoolean("simple_build_permissions", false); m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions",
new string[] { "Startup", "Permissions" }, false);
m_allowedScriptCreators m_allowedScriptCreators
= ParseUserSetConfigSetting(myConfig, "allowed_script_creators", m_allowedScriptCreators); = ParseUserSetConfigSetting(config, "allowed_script_creators", m_allowedScriptCreators);
m_allowedScriptEditors m_allowedScriptEditors
= ParseUserSetConfigSetting(myConfig, "allowed_script_editors", m_allowedScriptEditors); = ParseUserSetConfigSetting(config, "allowed_script_editors", m_allowedScriptEditors);
if (m_bypassPermissions) if (m_bypassPermissions)
m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks"); m_log.Info("[PERMISSIONS]: serverside_object_permissions = false in ini file so disabling all region service permission checks");
else else
m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks"); m_log.Debug("[PERMISSIONS]: Enabling all region service permission checks");
string grant = myConfig.GetString("GrantLSL", ""); string grant = Util.GetConfigVarFromSections<string>(config, "GrantLSL",
new string[] { "Startup", "Permissions" }, string.Empty);
if (grant.Length > 0) if (grant.Length > 0)
{ {
foreach (string uuidl in grant.Split(',')) foreach (string uuidl in grant.Split(','))
@ -196,7 +203,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
} }
} }
grant = myConfig.GetString("GrantCS", ""); grant = Util.GetConfigVarFromSections<string>(config, "GrantCS",
new string[] { "Startup", "Permissions" }, string.Empty);
if (grant.Length > 0) if (grant.Length > 0)
{ {
foreach (string uuidl in grant.Split(',')) foreach (string uuidl in grant.Split(','))
@ -206,7 +214,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
} }
} }
grant = myConfig.GetString("GrantVB", ""); grant = Util.GetConfigVarFromSections<string>(config, "GrantVB",
new string[] { "Startup", "Permissions" }, string.Empty);
if (grant.Length > 0) if (grant.Length > 0)
{ {
foreach (string uuidl in grant.Split(',')) foreach (string uuidl in grant.Split(','))
@ -216,7 +225,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
} }
} }
grant = myConfig.GetString("GrantJS", ""); grant = Util.GetConfigVarFromSections<string>(config, "GrantJS",
new string[] { "Startup", "Permissions" }, string.Empty);
if (grant.Length > 0) if (grant.Length > 0)
{ {
foreach (string uuidl in grant.Split(',')) foreach (string uuidl in grant.Split(','))
@ -226,7 +236,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
} }
} }
grant = myConfig.GetString("GrantYP", ""); grant = Util.GetConfigVarFromSections<string>(config, "GrantYP",
new string[] { "Startup", "Permissions" }, string.Empty);
if (grant.Length > 0) if (grant.Length > 0)
{ {
foreach (string uuidl in grant.Split(',')) foreach (string uuidl in grant.Split(','))
@ -464,11 +475,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions
/// <param name="settingName"></param> /// <param name="settingName"></param>
/// <param name="defaultValue">The default value for this attribute</param> /// <param name="defaultValue">The default value for this attribute</param>
/// <returns>The parsed value</returns> /// <returns>The parsed value</returns>
private static UserSet ParseUserSetConfigSetting(IConfig config, string settingName, UserSet defaultValue) private static UserSet ParseUserSetConfigSetting(IConfigSource config, string settingName, UserSet defaultValue)
{ {
UserSet userSet = defaultValue; UserSet userSet = defaultValue;
string rawSetting = config.GetString(settingName, defaultValue.ToString()); string rawSetting = Util.GetConfigVarFromSections<string>(config, settingName,
new string[] {"Startup", "Permissions"}, defaultValue.ToString());
// Temporary measure to allow 'gods' to be specified in config for consistency's sake. In the long term // Temporary measure to allow 'gods' to be specified in config for consistency's sake. In the long term
// this should disappear. // this should disappear.

View File

@ -148,8 +148,6 @@ namespace OpenSim.Region.DataSnapshot
return; return;
} }
if (m_enabled)
m_snapStore = new SnapshotStore(m_snapsDir, m_gridinfo, m_listener_port, m_hostname);
} }
} }
@ -163,8 +161,22 @@ namespace OpenSim.Region.DataSnapshot
m_log.DebugFormat("[DATASNAPSHOT]: Module added to Scene {0}.", scene.RegionInfo.RegionName); m_log.DebugFormat("[DATASNAPSHOT]: Module added to Scene {0}.", scene.RegionInfo.RegionName);
m_snapStore.AddScene(scene); if (!m_servicesNotified)
{
m_hostname = scene.RegionInfo.ExternalHostName;
m_snapStore = new SnapshotStore(m_snapsDir, m_gridinfo, m_listener_port, m_hostname);
//Hand it the first scene, assuming that all scenes have the same BaseHTTPServer
new DataRequestHandler(scene, this);
if (m_dataServices != "" && m_dataServices != "noservices")
NotifyDataServices(m_dataServices, "online");
m_servicesNotified = true;
}
m_scenes.Add(scene); m_scenes.Add(scene);
m_snapStore.AddScene(scene);
Assembly currentasm = Assembly.GetExecutingAssembly(); Assembly currentasm = Assembly.GetExecutingAssembly();
@ -189,22 +201,6 @@ namespace OpenSim.Region.DataSnapshot
} }
} }
// Must be done here because on shared modules, PostInitialise() will run
// BEFORE any scenes are registered. There is no "all scenes have been loaded"
// kind of callback because scenes may be created dynamically, so we cannot
// have that info, ever.
if (!m_servicesNotified)
{
//Hand it the first scene, assuming that all scenes have the same BaseHTTPServer
new DataRequestHandler(m_scenes[0], this);
m_hostname = m_scenes[0].RegionInfo.ExternalHostName;
if (m_dataServices != "" && m_dataServices != "noservices")
NotifyDataServices(m_dataServices, "online");
m_servicesNotified = true;
}
} }
public void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)

View File

@ -33,10 +33,11 @@ using Nini.Config;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
// You will need to uncomment this line if you are adding a region module to some other assembly which does not already // You will need to uncomment these lines if you are adding a region module to some other assembly which does not already
// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans // specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
// the available DLLs // the available DLLs
//[assembly: Addin("MyModule", "1.0")] //[assembly: Addin("MyModule", "1.0")]
//[assembly: AddinDependency("OpenSim", "0.5")]
namespace OpenSim.Region.OptionalModules.Example.BareBonesNonShared namespace OpenSim.Region.OptionalModules.Example.BareBonesNonShared
{ {

View File

@ -33,10 +33,11 @@ using Nini.Config;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
// You will need to uncomment this line if you are adding a region module to some other assembly which does not already // You will need to uncomment these lines if you are adding a region module to some other assembly which does not already
// specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans // specify its assembly. Otherwise, the region modules in the assembly will not be picked up when OpenSimulator scans
// the available DLLs // the available DLLs
//[assembly: Addin("MyModule", "1.0")] //[assembly: Addin("MyModule", "1.0")]
//[assembly: AddinDependency("OpenSim", "0.5")]
namespace OpenSim.Region.OptionalModules.Example.BareBonesShared namespace OpenSim.Region.OptionalModules.Example.BareBonesShared
{ {

View File

@ -57,9 +57,10 @@ namespace OpenSim.Region.OptionalModules
public void Initialise(IConfigSource config) public void Initialise(IConfigSource config)
{ {
IConfig myConfig = config.Configs["Startup"]; //IConfig myConfig = config.Configs["Startup"];
string permissionModules = myConfig.GetString("permissionmodules", "DefaultPermissionsModule"); string permissionModules = Util.GetConfigVarFromSections<string>(config, "permissionmodules",
new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
List<string> modules=new List<string>(permissionModules.Split(',')); List<string> modules=new List<string>(permissionModules.Split(','));

View File

@ -961,13 +961,13 @@ namespace OpenSim.Region.Physics.BulletSPlugin
// ================================================================== // ==================================================================
// Clamp high or low velocities // Clamp high or low velocities
float newVelocityLengthSq = VehicleVelocity.LengthSquared(); float newVelocityLengthSq = VehicleVelocity.LengthSquared();
if (newVelocityLengthSq > BSParam.VehicleMaxLinearVelocitySq) if (newVelocityLengthSq > BSParam.VehicleMaxLinearVelocitySquared)
{ {
Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG Vector3 origVelW = VehicleVelocity; // DEBUG DEBUG
VehicleVelocity /= VehicleVelocity.Length(); VehicleVelocity /= VehicleVelocity.Length();
VehicleVelocity *= BSParam.VehicleMaxLinearVelocity; VehicleVelocity *= BSParam.VehicleMaxLinearVelocity;
VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}", VDetailLog("{0}, MoveLinear,clampMax,origVelW={1},lenSq={2},maxVelSq={3},,newVelW={4}",
Prim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySq, VehicleVelocity); Prim.LocalID, origVelW, newVelocityLengthSq, BSParam.VehicleMaxLinearVelocitySquared, VehicleVelocity);
} }
else if (newVelocityLengthSq < 0.001f) else if (newVelocityLengthSq < 0.001f)
VehicleVelocity = Vector3.Zero; VehicleVelocity = Vector3.Zero;

View File

@ -47,12 +47,16 @@ public static class BSParam
public static float SculptLOD { get; private set; } public static float SculptLOD { get; private set; }
public static int CrossingFailuresBeforeOutOfBounds { get; private set; } public static int CrossingFailuresBeforeOutOfBounds { get; private set; }
public static float UpdateVelocityChangeThreshold { get; private set; }
public static float MinimumObjectMass { get; private set; } public static float MinimumObjectMass { get; private set; }
public static float MaximumObjectMass { get; private set; } public static float MaximumObjectMass { get; private set; }
public static float MaxLinearVelocity { get; private set; } public static float MaxLinearVelocity { get; private set; }
public static float MaxLinearVelocitySquared { get; private set; }
public static float MaxAngularVelocity { get; private set; } public static float MaxAngularVelocity { get; private set; }
public static float MaxAngularVelocitySquared { get; private set; }
public static float MaxAddForceMagnitude { get; private set; } public static float MaxAddForceMagnitude { get; private set; }
public static float MaxAddForceMagnitudeSquared { get; private set; }
public static float DensityScaleFactor { get; private set; } public static float DensityScaleFactor { get; private set; }
public static float LinearDamping { get; private set; } public static float LinearDamping { get; private set; }
@ -109,7 +113,7 @@ public static class BSParam
// Vehicle parameters // Vehicle parameters
public static float VehicleMaxLinearVelocity { get; private set; } public static float VehicleMaxLinearVelocity { get; private set; }
public static float VehicleMaxLinearVelocitySq { get; private set; } public static float VehicleMaxLinearVelocitySquared { get; private set; }
public static float VehicleMaxAngularVelocity { get; private set; } public static float VehicleMaxAngularVelocity { get; private set; }
public static float VehicleMaxAngularVelocitySq { get; private set; } public static float VehicleMaxAngularVelocitySq { get; private set; }
public static float VehicleAngularDamping { get; private set; } public static float VehicleAngularDamping { get; private set; }
@ -265,7 +269,7 @@ public static class BSParam
// The single letter parameters for the delegates are: // The single letter parameters for the delegates are:
// s = BSScene // s = BSScene
// o = BSPhysObject // o = BSPhysObject
// v = value (float) // v = value (appropriate type)
private static ParameterDefnBase[] ParameterDefinitions = private static ParameterDefnBase[] ParameterDefinitions =
{ {
new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties", new ParameterDefn<bool>("MeshSculptedPrim", "Whether to create meshes for sculpties",
@ -289,6 +293,10 @@ public static class BSParam
5, 5,
(s) => { return CrossingFailuresBeforeOutOfBounds; }, (s) => { return CrossingFailuresBeforeOutOfBounds; },
(s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ), (s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ),
new ParameterDefn<float>("UpdateVelocityChangeThreshold", "Change in updated velocity required before reporting change to simulator",
0.1f,
(s) => { return UpdateVelocityChangeThreshold; },
(s,v) => { UpdateVelocityChangeThreshold = v; } ),
new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", new ParameterDefn<float>("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)",
32f, 32f,
@ -343,16 +351,16 @@ public static class BSParam
new ParameterDefn<float>("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object", new ParameterDefn<float>("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object",
1000.0f, 1000.0f,
(s) => { return MaxLinearVelocity; }, (s) => { return MaxLinearVelocity; },
(s,v) => { MaxLinearVelocity = v; } ), (s,v) => { MaxLinearVelocity = v; MaxLinearVelocitySquared = v * v; } ),
new ParameterDefn<float>("MaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to an object", new ParameterDefn<float>("MaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to an object",
1000.0f, 1000.0f,
(s) => { return MaxAngularVelocity; }, (s) => { return MaxAngularVelocity; },
(s,v) => { MaxAngularVelocity = v; } ), (s,v) => { MaxAngularVelocity = v; MaxAngularVelocitySquared = v * v; } ),
// LL documentation says thie number should be 20f for llApplyImpulse and 200f for llRezObject // LL documentation says thie number should be 20f for llApplyImpulse and 200f for llRezObject
new ParameterDefn<float>("MaxAddForceMagnitude", "Maximum force that can be applied by llApplyImpulse (SL says 20f)", new ParameterDefn<float>("MaxAddForceMagnitude", "Maximum force that can be applied by llApplyImpulse (SL says 20f)",
20000.0f, 20000.0f,
(s) => { return MaxAddForceMagnitude; }, (s) => { return MaxAddForceMagnitude; },
(s,v) => { MaxAddForceMagnitude = v; } ), (s,v) => { MaxAddForceMagnitude = v; MaxAddForceMagnitudeSquared = v * v; } ),
// Density is passed around as 100kg/m3. This scales that to 1kg/m3. // Density is passed around as 100kg/m3. This scales that to 1kg/m3.
new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)", new ParameterDefn<float>("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)",
0.01f, 0.01f,
@ -505,7 +513,7 @@ public static class BSParam
new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle", new ParameterDefn<float>("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle",
1000.0f, 1000.0f,
(s) => { return (float)VehicleMaxLinearVelocity; }, (s) => { return (float)VehicleMaxLinearVelocity; },
(s,v) => { VehicleMaxLinearVelocity = v; VehicleMaxLinearVelocitySq = v * v; } ), (s,v) => { VehicleMaxLinearVelocity = v; VehicleMaxLinearVelocitySquared = v * v; } ),
new ParameterDefn<float>("VehicleMaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to a vehicle", new ParameterDefn<float>("VehicleMaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to a vehicle",
12.0f, 12.0f,
(s) => { return (float)VehicleMaxAngularVelocity; }, (s) => { return (float)VehicleMaxAngularVelocity; },

View File

@ -108,6 +108,9 @@ public class BSPrim : BSPhysObject
// do the actual object creation at taint time // do the actual object creation at taint time
PhysicsScene.TaintedObject("BSPrim.create", delegate() PhysicsScene.TaintedObject("BSPrim.create", delegate()
{ {
// Make sure the object is being created with some sanity.
ExtremeSanityCheck(true /* inTaintTime */);
CreateGeomAndObject(true); CreateGeomAndObject(true);
CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody); CurrentCollisionFlags = PhysicsScene.PE.GetCollisionFlags(PhysBody);
@ -450,6 +453,38 @@ public class BSPrim : BSPhysObject
return ret; return ret;
} }
// Occasionally things will fly off and really get lost.
// Find the wanderers and bring them back.
// Return 'true' if some parameter need some sanity.
private bool ExtremeSanityCheck(bool inTaintTime)
{
bool ret = false;
uint wayOutThere = Constants.RegionSize * Constants.RegionSize;
// There have been instances of objects getting thrown way out of bounds and crashing
// the border crossing code.
if ( _position.X < -Constants.RegionSize || _position.X > wayOutThere
|| _position.Y < -Constants.RegionSize || _position.Y > wayOutThere
|| _position.Z < -Constants.RegionSize || _position.Z > wayOutThere)
{
_position = new OMV.Vector3(10, 10, 50);
ZeroMotion(inTaintTime);
ret = true;
}
if (_velocity.LengthSquared() > BSParam.MaxLinearVelocity)
{
_velocity = Util.ClampV(_velocity, BSParam.MaxLinearVelocity);
ret = true;
}
if (_rotationalVelocity.LengthSquared() > BSParam.MaxAngularVelocitySquared)
{
_rotationalVelocity = Util.ClampV(_rotationalVelocity, BSParam.MaxAngularVelocity);
ret = true;
}
return ret;
}
// Return the effective mass of the object. // Return the effective mass of the object.
// The definition of this call is to return the mass of the prim. // The definition of this call is to return the mass of the prim.
// If the simulator cares about the mass of the linkset, it will sum it itself. // If the simulator cares about the mass of the linkset, it will sum it itself.
@ -585,12 +620,12 @@ public class BSPrim : BSPhysObject
if (VehicleController.Type == Vehicle.TYPE_NONE) if (VehicleController.Type == Vehicle.TYPE_NONE)
{ {
UnRegisterPreStepAction("BSPrim.Vehicle", LocalID); UnRegisterPreStepAction("BSPrim.Vehicle", LocalID);
PhysicsScene.AfterStep -= VehicleController.PostStep; UnRegisterPostStepAction("BSPrim.Vehicle", LocalID);
} }
else else
{ {
RegisterPreStepAction("BSPrim.Vehicle", LocalID, VehicleController.Step); RegisterPreStepAction("BSPrim.Vehicle", LocalID, VehicleController.Step);
PhysicsScene.AfterStep += VehicleController.PostStep; RegisterPostStepAction("BSPrim.Vehicle", LocalID, VehicleController.PostStep);
} }
}); });
} }
@ -732,7 +767,7 @@ public class BSPrim : BSPhysObject
set { set {
PhysicsScene.AssertInTaintTime("BSPrim.ForceVelocity"); PhysicsScene.AssertInTaintTime("BSPrim.ForceVelocity");
_velocity = value; _velocity = Util.ClampV(value, BSParam.MaxLinearVelocity);
if (PhysBody.HasPhysicalBody) if (PhysBody.HasPhysicalBody)
{ {
DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, _velocity); DetailLog("{0},BSPrim.ForceVelocity,taint,vel={1}", LocalID, _velocity);
@ -1098,7 +1133,7 @@ public class BSPrim : BSPhysObject
return _rotationalVelocity; return _rotationalVelocity;
} }
set { set {
_rotationalVelocity = value; _rotationalVelocity = Util.ClampV(value, BSParam.MaxAngularVelocity);
if (PhysBody.HasPhysicalBody) if (PhysBody.HasPhysicalBody)
{ {
DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity); DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity);
@ -1230,6 +1265,7 @@ public class BSPrim : BSPhysObject
RegisterPreStepAction("BSPrim.Hover", LocalID, delegate(float timeStep) RegisterPreStepAction("BSPrim.Hover", LocalID, delegate(float timeStep)
{ {
// Don't do hovering while the object is selected.
if (!IsPhysicallyActive) if (!IsPhysicallyActive)
return; return;
@ -1737,10 +1773,9 @@ public class BSPrim : BSPhysObject
// Assign directly to the local variables so the normal set actions do not happen // Assign directly to the local variables so the normal set actions do not happen
_position = entprop.Position; _position = entprop.Position;
_orientation = entprop.Rotation; _orientation = entprop.Rotation;
// _velocity = entprop.Velocity;
// DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be // DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be
// very sensitive to velocity changes. // very sensitive to velocity changes.
if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(_velocity, 0.1f)) if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(_velocity, BSParam.UpdateVelocityChangeThreshold))
_velocity = entprop.Velocity; _velocity = entprop.Velocity;
_acceleration = entprop.Acceleration; _acceleration = entprop.Acceleration;
_rotationalVelocity = entprop.RotationalVelocity; _rotationalVelocity = entprop.RotationalVelocity;

View File

@ -9,6 +9,9 @@ Enable vehicle border crossings (at least as poorly as ODE)
Lock axis Lock axis
Deleting a linkset while standing on the root will leave the physical shape of the root behind. Deleting a linkset while standing on the root will leave the physical shape of the root behind.
Not sure if it is because standing on it. Done with large prim linksets. Not sure if it is because standing on it. Done with large prim linksets.
Linkset child rotations.
Nebadon spiral tube has middle sections which are rotated wrong.
Select linked spiral tube. Delink and note where the middle section ends up.
Vehicle angular vertical attraction Vehicle angular vertical attraction
vehicle angular banking vehicle angular banking
Center-of-gravity Center-of-gravity
@ -68,6 +71,8 @@ Vehicle attributes are not restored when a vehicle is rezzed on region creation
GENERAL TODO LIST: GENERAL TODO LIST:
================================================= =================================================
Explore btGImpactMeshShape as alternative to convex hulls for simplified physical objects.
Regular triangle meshes don't do physical collisions.
Resitution of a prim works on another prim but not on terrain. Resitution of a prim works on another prim but not on terrain.
The dropped prim doesn't bounce properly on the terrain. The dropped prim doesn't bounce properly on the terrain.
Add a sanity check for PIDTarget location. Add a sanity check for PIDTarget location.
@ -338,4 +343,4 @@ Avatar standing on a moving object should start to move with the object. (DONE 2
Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE. Angular motion around Z moves the vehicle in world Z and not vehicle Z in ODE.
Verify that angular motion specified around Z moves in the vehicle coordinates. Verify that angular motion specified around Z moves in the vehicle coordinates.
DONE 20130120: BulletSim properly applies force in vehicle relative coordinates. DONE 20130120: BulletSim properly applies force in vehicle relative coordinates.
Nebadon vehicles turning funny in arena (DONE) Nebadon vehicles turning funny in arena (DONE)

View File

@ -186,6 +186,10 @@ namespace OpenSim.Server.Base
XmlConfigurator.Configure(); XmlConfigurator.Configure();
} }
// FIXME: This should be done down in ServerBase but we need to sort out and refactor the log4net
// XmlConfigurator calls first accross servers.
m_log.InfoFormat("[SERVER BASE]: Starting in {0}", m_startupDirectory);
RegisterCommonAppenders(startupConfig); RegisterCommonAppenders(startupConfig);
if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty) if (startupConfig.GetString("PIDFile", String.Empty) != String.Empty)

View File

@ -216,6 +216,77 @@
; physics = basicphysics ; physics = basicphysics
; physics = POS ; physics = POS
;# {DefaultScriptEngine} {} {Default script engine} {XEngine} XEngine
;; Default script engine to use. Currently, we only have XEngine
; DefaultScriptEngine = "XEngine"
;# {HttpProxy} {} {Proxy URL for llHTTPRequest and dynamic texture loading} {} http://proxy.com:8080
;; Http proxy setting for llHTTPRequest and dynamic texture loading, if
;; required
; HttpProxy = "http://proxy.com:8080"
;# {HttpProxyExceptions} {HttpProxy} {Set of regular expressions defining URL that should not be proxied} {}
;; If you're using HttpProxy, then you can set HttpProxyExceptions to a
;; list of regular expressions for URLs that you don't want to go through
;; the proxy.
;; For example, servers inside your firewall.
;; Separate patterns with a ';'
; HttpProxyExceptions = ".mydomain.com;localhost"
;# {emailmodule} {} {Provide llEmail and llGetNextEmail functionality? (requires SMTP server)} {true false} false
;; The email module requires some configuration. It needs an SMTP
;; server to send mail through.
; emailmodule = DefaultEmailModule
;# {SpawnPointRouting} {} {Set routing method for Telehub Spawnpoints} {closest random sequence} closest
;; SpawnPointRouting adjusts the landing for incoming avatars.
;; "closest" will place the avatar at the SpawnPoint located in the closest
;; available spot to the destination (typically map click/landmark).
;; "random" will place the avatar on a randomly selected spawnpoint;
;; "sequence" will place the avatar on the next sequential SpawnPoint
; SpawnPointRouting = closest
;# {TelehubAllowLandmark} {} {Allow users with landmarks to override telehub routing} {true false} false
;; TelehubAllowLandmark allows users with landmarks to override telehub
;; routing and land at the landmark coordinates when set to true
;; default is false
; TelehubAllowLandmark = false
[Map]
;# {GenerateMaptiles} {} {Generate map tiles?} {true false} true
;; Map tile options.
;; If true, then maptiles are generated using the MapImageModule below.
;; If false then the texture referenced by MaptileStaticUUID is used instead, which can also be overriden
;; in individual region config file(s). If you do not want to upload map tiles at all, then you will need
;; both to set this to false and comment out the [Modules] MapImageServiceModule setting in config-include/
; GenerateMaptiles = true
;# {MapImageModule} [] {The map image module to use} {MapImageModule Warp3DImageModule} MapImageModule
;; The module to use in order to generate map images.
;; MapImageModule is the default. Warp3DImageModule is an alternative experimental module that can
;; generate better images.
;MapImageModule = "MapImageModule"
;# {MaptileRefresh} {GenerateMaptiles} {Maptile refresh period?} {} 0
;; If desired, a running region can update the map tiles periodically
;; to reflect building activity. This names no sense of you don't have
;; prims on maptiles. Value is in seconds.
; MaptileRefresh = 0
;# {MaptileStaticUUID} {} {Asset ID for static map texture} {} 00000000-0000-0000-0000-000000000000
;; If not generating maptiles, use this static texture asset ID
; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"
;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true
;; Use terrain texture for maptiles if true, use shaded green if false
; TextureOnMapTile = true
;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false
;; Draw objects on maptile. This step might take a long time if you've
;; got a large number of objects, so you can turn it off here if you'd like.
; DrawPrimOnMapTile = true
[Permissions]
;# {permissionmodules} {} {Permission modules to use (may specify multiple modules, separated by comma} {} DefaultPermissionsModule ;# {permissionmodules} {} {Permission modules to use (may specify multiple modules, separated by comma} {} DefaultPermissionsModule
;; Permission modules to use, separated by comma. ;; Permission modules to use, separated by comma.
;; Possible modules are DefaultPermissionsModule, PrimLimitsModule ;; Possible modules are DefaultPermissionsModule, PrimLimitsModule
@ -260,97 +331,6 @@
; simple_build_permissions = false ; simple_build_permissions = false
;# {DefaultScriptEngine} {} {Default script engine} {XEngine} XEngine
;; Default script engine to use. Currently, we only have XEngine
; DefaultScriptEngine = "XEngine"
;# {HttpProxy} {} {Proxy URL for llHTTPRequest and dynamic texture loading} {} http://proxy.com:8080
;; Http proxy setting for llHTTPRequest and dynamic texture loading, if
;; required
; HttpProxy = "http://proxy.com:8080"
;# {HttpProxyExceptions} {HttpProxy} {Set of regular expressions defining URL that should not be proxied} {}
;; If you're using HttpProxy, then you can set HttpProxyExceptions to a
;; list of regular expressions for URLs that you don't want to go through
;; the proxy.
;; For example, servers inside your firewall.
;; Separate patterns with a ';'
; HttpProxyExceptions = ".mydomain.com;localhost"
;# {emailmodule} {} {Provide llEmail and llGetNextEmail functionality? (requires SMTP server)} {true false} false
;; The email module requires some configuration. It needs an SMTP
;; server to send mail through.
; emailmodule = DefaultEmailModule
;# {SpawnPointRouting} {} {Set routing method for Telehub Spawnpoints} {closest random sequence} closest
;; SpawnPointRouting adjusts the landing for incoming avatars.
;; "closest" will place the avatar at the SpawnPoint located in the closest
;; available spot to the destination (typically map click/landmark).
;; "random" will place the avatar on a randomly selected spawnpoint;
;; "sequence" will place the avatar on the next sequential SpawnPoint
; SpawnPointRouting = closest
;# {TelehubAllowLandmark} {} {Allow users with landmarks to override telehub routing} {true false} false
;; TelehubAllowLandmark allows users with landmarks to override telehub
;; routing and land at the landmark coordinates when set to true
;; default is false
; TelehubAllowLandmark = false
;# {AllowedClients} {} {Bar (|) separated list of allowed clients} {}
;; Bar (|) separated list of viewers which may gain access to the regions.
;; One can use a substring of the viewer name to enable only certain
;; versions
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
;; - "Imprudence" has access
;; - "Imprudence 1.3" has access
;; - "Imprudence 1.3.1" has no access
; AllowedViewerList =
;# {BannedClients} {} {Bar (|) separated list of banned clients} {}
;# Bar (|) separated list of viewers which may not gain access to the regions.
;; One can use a Substring of the viewer name to disable only certain
;; versions
;; Example: Agent uses the viewer "Imprudence 1.3.2.0"
;; - "Imprudence" has no access
;; - "Imprudence 1.3" has no access
;; - "Imprudence 1.3.1" has access
; BannedViewerList =
[Map]
;# {GenerateMaptiles} {} {Generate map tiles?} {true false} true
;; Map tile options.
;; If true, then maptiles are generated using the MapImageModule below.
;; If false then the texture referenced by MaptileStaticUUID is used instead, which can also be overriden
;; in individual region config file(s). If you do not want to upload map tiles at all, then you will need
;; both to set this to false and comment out the [Modules] MapImageServiceModule setting in config-include/
; GenerateMaptiles = true
;# {MapImageModule} [] {The map image module to use} {MapImageModule Warp3DImageModule} MapImageModule
;; The module to use in order to generate map images.
;; MapImageModule is the default. Warp3DImageModule is an alternative experimental module that can
;; generate better images.
;MapImageModule = "MapImageModule"
;# {MaptileRefresh} {GenerateMaptiles} {Maptile refresh period?} {} 0
;; If desired, a running region can update the map tiles periodically
;; to reflect building activity. This names no sense of you don't have
;; prims on maptiles. Value is in seconds.
; MaptileRefresh = 0
;# {MaptileStaticUUID} {} {Asset ID for static map texture} {} 00000000-0000-0000-0000-000000000000
;; If not generating maptiles, use this static texture asset ID
; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"
;# {TextureOnMapTile} {} {Use terrain textures for map tiles?} {true false} true
;; Use terrain texture for maptiles if true, use shaded green if false
; TextureOnMapTile = true
;# {DrawPrimOnMapTile} {} {Draw prim shapes on map tiles?} {true false} false
;; Draw objects on maptile. This step might take a long time if you've
;; got a large number of objects, so you can turn it off here if you'd like.
; DrawPrimOnMapTile = true
[Estates] [Estates]
; If these values are commented out then the user will be asked for estate details when required (this is the normal case). ; If these values are commented out then the user will be asked for estate details when required (this is the normal case).
; If these values are uncommented then they will be used to create a default estate as necessary. ; If these values are uncommented then they will be used to create a default estate as necessary.

View File

@ -226,54 +226,6 @@
;physics = modified_BulletX ;physics = modified_BulletX
;physics = BulletSim ;physics = BulletSim
; ##
; ## PERMISSIONS
; ##
;permissionmodules = "DefaultPermissionsModule"
; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy
; any item, etc. This may not yet be implemented uniformally.
; If set to true, then all permissions checks are carried out
; Default is true
serverside_object_permissions = true
allow_grid_gods = false
; This allows somne control over permissions
; please note that this still doesn't duplicate SL, and is not intended to
;region_owner_is_god = true
;region_manager_is_god = false
;parcel_owner_is_god = true
; Control user types that are allowed to create new scripts
; Only enforced if serviceside_object_permissions is true
;
; Current possible values are
; all - anyone can create scripts (subject to normal permissions)
; gods - only administrators can create scripts (as long as allow_grid_gods is true)
; Default value is all
; allowed_script_creators = all
; Control user types that are allowed to edit (save) scripts
; Only enforced if serviceside_object_permissions is true
;
; Current possible values are
; all - anyone can edit scripts (subject to normal permissions)
; gods - only administrators can edit scripts (as long as allow_grid_gods is true)
; Default value is all
; allowed_script_editors = all
; Provides a simple control for land owners to give build rights to specific avatars
; in publicly accessible parcels that disallow object creation in general.
; Owners specific avatars by adding them to the Access List of the parcel
; without having to use the Groups feature
; Disabled by default
; simple_build_permissions = False
; Minimum user level required to upload assets
;LevelUpload = 0
; ## ; ##
; ## SCRIPT ENGINE ; ## SCRIPT ENGINE
; ## ; ##
@ -340,6 +292,55 @@
; Use terrain texture for maptiles if true, use shaded green if false ; Use terrain texture for maptiles if true, use shaded green if false
TextureOnMapTile = true TextureOnMapTile = true
[Permissions]
; ##
; ## PERMISSIONS
; ##
;permissionmodules = "DefaultPermissionsModule"
; If set to false, then, in theory, the server never carries out permission checks (allowing anybody to copy
; any item, etc. This may not yet be implemented uniformally.
; If set to true, then all permissions checks are carried out
; Default is true
serverside_object_permissions = true
allow_grid_gods = false
; This allows somne control over permissions
; please note that this still doesn't duplicate SL, and is not intended to
;region_owner_is_god = true
;region_manager_is_god = false
;parcel_owner_is_god = true
; Control user types that are allowed to create new scripts
; Only enforced if serviceside_object_permissions is true
;
; Current possible values are
; all - anyone can create scripts (subject to normal permissions)
; gods - only administrators can create scripts (as long as allow_grid_gods is true)
; Default value is all
; allowed_script_creators = all
; Control user types that are allowed to edit (save) scripts
; Only enforced if serviceside_object_permissions is true
;
; Current possible values are
; all - anyone can edit scripts (subject to normal permissions)
; gods - only administrators can edit scripts (as long as allow_grid_gods is true)
; Default value is all
; allowed_script_editors = all
; Provides a simple control for land owners to give build rights to specific avatars
; in publicly accessible parcels that disallow object creation in general.
; Owners specific avatars by adding them to the Access List of the parcel
; without having to use the Groups feature
; Disabled by default
; simple_build_permissions = False
; Minimum user level required to upload assets
;LevelUpload = 0
[RegionReady] [RegionReady]
; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled ; Enable this module to get notified once all items and scripts in the region have been completely loaded and compiled

View File

@ -3513,6 +3513,7 @@
<ReferencePath>../../../bin/</ReferencePath> <ReferencePath>../../../bin/</ReferencePath>
<Reference name="System"/> <Reference name="System"/>
<Reference name="System.Core"/>
<Reference name="System.Xml"/> <Reference name="System.Xml"/>
<Reference name="OpenSim.Framework"/> <Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Communications"/> <Reference name="OpenSim.Framework.Communications"/>