Merge branch 'master' into careminster
commit
43a6fa1d01
|
@ -413,8 +413,21 @@ namespace OpenSim.ApplicationPlugins.RemoteController
|
||||||
|
|
||||||
ITerrainModule terrainModule = region.RequestModuleInterface<ITerrainModule>();
|
ITerrainModule terrainModule = region.RequestModuleInterface<ITerrainModule>();
|
||||||
if (null == terrainModule) throw new Exception("terrain module not available");
|
if (null == terrainModule) throw new Exception("terrain module not available");
|
||||||
terrainModule.LoadFromFile(file);
|
if (Uri.IsWellFormedUriString(file, UriKind.Absolute))
|
||||||
|
{
|
||||||
|
m_log.Info("[RADMIN]: Terrain path is URL");
|
||||||
|
Uri result;
|
||||||
|
if (Uri.TryCreate(file, UriKind.RelativeOrAbsolute, out result))
|
||||||
|
{
|
||||||
|
// the url is valid
|
||||||
|
string fileType = file.Substring(file.LastIndexOf('/') + 1);
|
||||||
|
terrainModule.LoadFromStream(fileType, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
terrainModule.LoadFromFile(file);
|
||||||
|
}
|
||||||
responseData["success"] = false;
|
responseData["success"] = false;
|
||||||
|
|
||||||
response.Value = responseData;
|
response.Value = responseData;
|
||||||
|
|
|
@ -479,7 +479,9 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Warn("[REGION DB]: Database contains an orphan child prim " + prim.UUID + " pointing to missing parent " + prim.ParentUUID);
|
m_log.WarnFormat(
|
||||||
|
"[REGION DB]: Database contains an orphan child prim {0} {1} at {2} in region {3} pointing to missing parent {4}. This prim will not be loaded.",
|
||||||
|
prim.Name, prim.UUID, prim.AbsolutePosition, regionID, prim.ParentUUID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -724,12 +724,20 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
string errorMessage
|
||||||
|
= String.Format(
|
||||||
|
"Requested method [{0}] from {1} threw exception: {2} {3}",
|
||||||
|
methodName, request.RemoteIPEndPoint.Address, e.Message, e.StackTrace);
|
||||||
|
|
||||||
|
m_log.ErrorFormat("[BASE HTTP SERVER]: {0}", errorMessage);
|
||||||
|
|
||||||
// if the registered XmlRpc method threw an exception, we pass a fault-code along
|
// if the registered XmlRpc method threw an exception, we pass a fault-code along
|
||||||
xmlRpcResponse = new XmlRpcResponse();
|
xmlRpcResponse = new XmlRpcResponse();
|
||||||
|
|
||||||
// Code probably set in accordance with http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php
|
// Code probably set in accordance with http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php
|
||||||
xmlRpcResponse.SetFault(-32603, String.Format("Requested method [{0}] threw exception: {1}",
|
xmlRpcResponse.SetFault(-32603, errorMessage);
|
||||||
methodName, e.Message));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the method wasn't found, we can't determine KeepAlive state anyway, so lets do it only here
|
// if the method wasn't found, we can't determine KeepAlive state anyway, so lets do it only here
|
||||||
response.KeepAlive = m_rpcHandlersKeepAlive[methodName];
|
response.KeepAlive = m_rpcHandlersKeepAlive[methodName];
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,7 +188,15 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IPAddress addr = IPAddress.Parse(req.Headers["remote_addr"]);
|
IPAddress addr = IPAddress.Parse(req.Headers["remote_addr"]);
|
||||||
int port = Int32.Parse(req.Headers["remote_port"]);
|
// sometimes req.Headers["remote_port"] returns a comma separated list, so use
|
||||||
|
// the first one in the list and log it
|
||||||
|
string[] strPorts = req.Headers["remote_port"].Split(new char[] { ',' });
|
||||||
|
if (strPorts.Length > 1)
|
||||||
|
{
|
||||||
|
_log.ErrorFormat("[OSHttpRequest]: format exception on addr/port {0}:{1}, ignoring",
|
||||||
|
req.Headers["remote_addr"], req.Headers["remote_port"]);
|
||||||
|
}
|
||||||
|
int port = Int32.Parse(strPorts[0]);
|
||||||
_remoteIPEndPoint = new IPEndPoint(addr, port);
|
_remoteIPEndPoint = new IPEndPoint(addr, port);
|
||||||
}
|
}
|
||||||
catch (FormatException)
|
catch (FormatException)
|
||||||
|
|
|
@ -201,6 +201,7 @@ namespace OpenSim.Grid.UserServer.Modules
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlRpcResponse XmlRPCUserMovedtoRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
public XmlRpcResponse XmlRPCUserMovedtoRegion(XmlRpcRequest request, IPEndPoint remoteClient)
|
||||||
{
|
{
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
|
|
@ -5504,6 +5504,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
if (avSetStartLocationRequestPacket.AgentData.AgentID == AgentId && avSetStartLocationRequestPacket.AgentData.SessionID == SessionId)
|
if (avSetStartLocationRequestPacket.AgentData.AgentID == AgentId && avSetStartLocationRequestPacket.AgentData.SessionID == SessionId)
|
||||||
{
|
{
|
||||||
|
// Linden Client limitation..
|
||||||
|
if (avSetStartLocationRequestPacket.StartLocationData.LocationPos.X == 255.5f
|
||||||
|
|| avSetStartLocationRequestPacket.StartLocationData.LocationPos.Y == 255.5f)
|
||||||
|
{
|
||||||
|
ScenePresence avatar = null;
|
||||||
|
if (((Scene)m_scene).TryGetAvatar(AgentId, out avatar))
|
||||||
|
{
|
||||||
|
if (avSetStartLocationRequestPacket.StartLocationData.LocationPos.X == 255.5f)
|
||||||
|
{
|
||||||
|
avSetStartLocationRequestPacket.StartLocationData.LocationPos.X = avatar.AbsolutePosition.X;
|
||||||
|
}
|
||||||
|
if (avSetStartLocationRequestPacket.StartLocationData.LocationPos.Y == 255.5f)
|
||||||
|
{
|
||||||
|
avSetStartLocationRequestPacket.StartLocationData.LocationPos.Y = avatar.AbsolutePosition.Y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
TeleportLocationRequest handlerSetStartLocationRequest = OnSetStartLocationRequest;
|
TeleportLocationRequest handlerSetStartLocationRequest = OnSetStartLocationRequest;
|
||||||
if (handlerSetStartLocationRequest != null)
|
if (handlerSetStartLocationRequest != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -471,20 +471,45 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
if (terr != null)
|
if (terr != null)
|
||||||
{
|
{
|
||||||
m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + m_scene.RegionInfo.RegionName);
|
m_log.Warn("[CLIENT]: Got Request to Send Terrain in region " + m_scene.RegionInfo.RegionName);
|
||||||
if (File.Exists(Util.dataDir() + "/terrain.raw"))
|
|
||||||
{
|
|
||||||
File.Delete(Util.dataDir() + "/terrain.raw");
|
|
||||||
}
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
FileStream input = new FileStream(Util.dataDir() + "/terrain.raw", FileMode.CreateNew);
|
|
||||||
|
string localfilename = "terrain.raw";
|
||||||
|
|
||||||
|
if (terrainData.Length == 851968)
|
||||||
|
{
|
||||||
|
localfilename = Path.Combine(Util.dataDir(),"terrain.raw"); // It's a .LLRAW
|
||||||
|
}
|
||||||
|
|
||||||
|
if (terrainData.Length == 196662) // 24-bit 256x256 Bitmap
|
||||||
|
localfilename = Path.Combine(Util.dataDir(), "terrain.bmp");
|
||||||
|
|
||||||
|
if (terrainData.Length == 256 * 256 * 4) // It's a .R32
|
||||||
|
localfilename = Path.Combine(Util.dataDir(), "terrain.r32");
|
||||||
|
|
||||||
|
if (terrainData.Length == 256 * 256 * 8) // It's a .R64
|
||||||
|
localfilename = Path.Combine(Util.dataDir(), "terrain.r64");
|
||||||
|
|
||||||
|
if (File.Exists(localfilename))
|
||||||
|
{
|
||||||
|
File.Delete(localfilename);
|
||||||
|
}
|
||||||
|
|
||||||
|
FileStream input = new FileStream(localfilename, FileMode.CreateNew);
|
||||||
input.Write(terrainData, 0, terrainData.Length);
|
input.Write(terrainData, 0, terrainData.Length);
|
||||||
input.Close();
|
input.Close();
|
||||||
|
|
||||||
|
FileInfo x = new FileInfo(localfilename);
|
||||||
|
|
||||||
|
terr.LoadFromFile(localfilename);
|
||||||
|
remoteClient.SendAlertMessage("Your terrain was loaded as a ." + x.Extension + " file. It may take a few moments to appear.");
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[TERRAIN]: Error Saving a terrain file uploaded via the estate tools. It gave us the following error: {0}", e.ToString());
|
m_log.ErrorFormat("[TERRAIN]: Error Saving a terrain file uploaded via the estate tools. It gave us the following error: {0}", e.ToString());
|
||||||
remoteClient.SendAlertMessage("There was an IO Exception loading your terrain. Please check free space");
|
remoteClient.SendAlertMessage("There was an IO Exception loading your terrain. Please check free space.");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -502,29 +527,16 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
terr.LoadFromFile(Util.dataDir() + "/terrain.raw");
|
|
||||||
remoteClient.SendAlertMessage("Your terrain was loaded. Give it a minute or two to apply");
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[TERRAIN]: Error loading a terrain file uploaded via the estate tools. It gave us the following error: {0}", e.ToString());
|
m_log.ErrorFormat("[TERRAIN]: Error loading a terrain file uploaded via the estate tools. It gave us the following error: {0}", e.ToString());
|
||||||
remoteClient.SendAlertMessage("There was a general error loading your terrain. Please fix the terrain file and try again");
|
remoteClient.SendAlertMessage("There was a general error loading your terrain. Please fix the terrain file and try again");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
remoteClient.SendAlertMessage("Unable to apply terrain. Cannot get an instance of the terrain module");
|
remoteClient.SendAlertMessage("Unable to apply terrain. Cannot get an instance of the terrain module");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleUploadTerrain(IClientAPI remote_client, string clientFileName)
|
private void handleUploadTerrain(IClientAPI remote_client, string clientFileName)
|
||||||
|
|
|
@ -29,6 +29,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Net;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
@ -258,6 +259,16 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads a terrain file from the specified URI
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filename">The name of the terrain to load</param>
|
||||||
|
/// <param name="pathToTerrainHeightmap">The URI to the terrain height map</param>
|
||||||
|
public void LoadFromStream(string filename, Uri pathToTerrainHeightmap)
|
||||||
|
{
|
||||||
|
LoadFromStream(filename, URIFetch(pathToTerrainHeightmap));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Loads a terrain file from a stream and installs it in the scene.
|
/// Loads a terrain file from a stream and installs it in the scene.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -267,7 +278,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
{
|
{
|
||||||
foreach (KeyValuePair<string, ITerrainLoader> loader in m_loaders)
|
foreach (KeyValuePair<string, ITerrainLoader> loader in m_loaders)
|
||||||
{
|
{
|
||||||
if (@filename.EndsWith(loader.Key))
|
if (filename.EndsWith(loader.Key))
|
||||||
{
|
{
|
||||||
lock (m_scene)
|
lock (m_scene)
|
||||||
{
|
{
|
||||||
|
@ -295,6 +306,25 @@ namespace OpenSim.Region.CoreModules.World.Terrain
|
||||||
throw new TerrainException(String.Format("unable to load heightmap from file {0}: no loader available for that format", filename));
|
throw new TerrainException(String.Format("unable to load heightmap from file {0}: no loader available for that format", filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Stream URIFetch(Uri uri)
|
||||||
|
{
|
||||||
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
|
||||||
|
|
||||||
|
// request.Credentials = credentials;
|
||||||
|
|
||||||
|
request.ContentLength = 0;
|
||||||
|
request.KeepAlive = false;
|
||||||
|
|
||||||
|
WebResponse response = request.GetResponse();
|
||||||
|
Stream file = response.GetResponseStream();
|
||||||
|
|
||||||
|
if (response.ContentLength == 0)
|
||||||
|
throw new Exception(String.Format("{0} returned an empty file", uri.ToString()));
|
||||||
|
|
||||||
|
// return new BufferedStream(file, (int) response.ContentLength);
|
||||||
|
return new BufferedStream(file, 1000000);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Modify Land
|
/// Modify Land
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// </param>
|
/// </param>
|
||||||
/// <param name="stream"></param>
|
/// <param name="stream"></param>
|
||||||
void LoadFromStream(string filename, Stream stream);
|
void LoadFromStream(string filename, Stream stream);
|
||||||
|
void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Save a terrain to a stream.
|
/// Save a terrain to a stream.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -2397,6 +2397,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
|
InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
|
||||||
item = InventoryService.GetItem(item);
|
item = InventoryService.GetItem(item);
|
||||||
presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
|
presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
|
||||||
|
|
||||||
|
if (m_AvatarFactory != null)
|
||||||
|
{
|
||||||
|
m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3046,6 +3046,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// TODO: The next line can be removed, as soon as only homeRegionID based UserServers are around.
|
// TODO: The next line can be removed, as soon as only homeRegionID based UserServers are around.
|
||||||
// TODO: The HomeRegion property can be removed then, too
|
// TODO: The HomeRegion property can be removed then, too
|
||||||
UserProfile.HomeRegion = RegionInfo.RegionHandle;
|
UserProfile.HomeRegion = RegionInfo.RegionHandle;
|
||||||
|
|
||||||
UserProfile.HomeLocation = position;
|
UserProfile.HomeLocation = position;
|
||||||
UserProfile.HomeLookAt = lookAt;
|
UserProfile.HomeLookAt = lookAt;
|
||||||
CommsManager.UserService.UpdateUserProfile(UserProfile);
|
CommsManager.UserService.UpdateUserProfile(UserProfile);
|
||||||
|
|
|
@ -2776,8 +2776,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (part.Scale.X > 10.0 || part.Scale.Y > 10.0 || part.Scale.Z > 10.0)
|
if (part.Scale.X > 10.0 || part.Scale.Y > 10.0 || part.Scale.Z > 10.0)
|
||||||
{
|
{
|
||||||
UsePhysics = false; // Reset physics
|
if (part.Scale.X > m_scene.RegionInfo.PhysPrimMax ||
|
||||||
break;
|
part.Scale.Y > m_scene.RegionInfo.PhysPrimMax ||
|
||||||
|
part.Scale.Z > m_scene.RegionInfo.PhysPrimMax)
|
||||||
|
{
|
||||||
|
UsePhysics = false; // Reset physics
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -269,8 +269,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[PRIM INVENTORY]: " +
|
"[PRIM INVENTORY]: " +
|
||||||
"Couldn't start script {0}, {1} since asset ID {2} could not be found",
|
"Couldn't start script {0}, {1} at {2} in {3} since asset ID {4} could not be found",
|
||||||
item.Name, item.ItemID, item.AssetID);
|
item.Name, item.ItemID, m_part.AbsolutePosition,
|
||||||
|
m_part.ParentGroup.Scene.RegionInfo.RegionName, item.AssetID);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -317,9 +318,19 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_items.LockItemsForRead(true);
|
m_items.LockItemsForRead(true);
|
||||||
if (m_items.ContainsKey(itemId))
|
if (m_items.ContainsKey(itemId))
|
||||||
{
|
{
|
||||||
TaskInventoryItem item = m_items[itemId];
|
if (m_items.ContainsKey(itemId))
|
||||||
|
{
|
||||||
|
CreateScriptInstance(m_items[itemId], startParam, postOnRez, engine, stateSource);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[PRIM INVENTORY]: " +
|
||||||
|
"Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
|
||||||
|
itemId, m_part.Name, m_part.UUID,
|
||||||
|
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
|
||||||
|
}
|
||||||
m_items.LockItemsForRead(false);
|
m_items.LockItemsForRead(false);
|
||||||
CreateScriptInstance(item, startParam, postOnRez, engine, stateSource);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -347,8 +358,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[PRIM INVENTORY]: " +
|
"[PRIM INVENTORY]: " +
|
||||||
"Couldn't stop script with ID {0} since it couldn't be found for prim {1}, {2}",
|
"Couldn't stop script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
|
||||||
itemId, m_part.Name, m_part.UUID);
|
itemId, m_part.Name, m_part.UUID,
|
||||||
|
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,8 +554,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
m_log.ErrorFormat(
|
||||||
"[PRIM INVENTORY]: " +
|
"[PRIM INVENTORY]: " +
|
||||||
"Tried to retrieve item ID {0} from prim {1}, {2} but the item does not exist in this inventory",
|
"Tried to retrieve item ID {0} from prim {1}, {2} at {3} in {4} but the item does not exist in this inventory",
|
||||||
item.ItemID, m_part.Name, m_part.UUID);
|
item.ItemID, m_part.Name, m_part.UUID,
|
||||||
|
m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
m_items.LockItemsForWrite(false);
|
m_items.LockItemsForWrite(false);
|
||||||
|
|
||||||
|
|
|
@ -3060,7 +3060,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// The Physics Scene will send updates every 500 ms grep: m_physicsActor.SubscribeEvents(
|
// The Physics Scene will send updates every 500 ms grep: m_physicsActor.SubscribeEvents(
|
||||||
// as of this comment the interval is set in AddToPhysicalScene
|
// as of this comment the interval is set in AddToPhysicalScene
|
||||||
|
if (Animator!=null)
|
||||||
|
Animator.UpdateMovementAnimations();
|
||||||
|
|
||||||
CollisionEventUpdate collisionData = (CollisionEventUpdate)e;
|
CollisionEventUpdate collisionData = (CollisionEventUpdate)e;
|
||||||
Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList;
|
Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList;
|
||||||
|
|
||||||
|
@ -3072,7 +3074,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_lastColCount = coldata.Count;
|
m_lastColCount = coldata.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coldata.Count != 0)
|
if (coldata.Count != 0 && Animator != null)
|
||||||
{
|
{
|
||||||
switch (Animator.CurrentMovementAnimation)
|
switch (Animator.CurrentMovementAnimation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1243,7 +1243,10 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
if (m_eventsubscription > m_requestedUpdateFrequency)
|
if (m_eventsubscription > m_requestedUpdateFrequency)
|
||||||
{
|
{
|
||||||
base.SendCollisionUpdate(CollisionEventsThisFrame);
|
if (CollisionEventsThisFrame != null)
|
||||||
|
{
|
||||||
|
base.SendCollisionUpdate(CollisionEventsThisFrame);
|
||||||
|
}
|
||||||
CollisionEventsThisFrame = new CollisionEventUpdate();
|
CollisionEventsThisFrame = new CollisionEventUpdate();
|
||||||
m_eventsubscription = 0;
|
m_eventsubscription = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -743,6 +743,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (returnMass > _parent_scene.maximumMassObject)
|
||||||
|
returnMass = _parent_scene.maximumMassObject;
|
||||||
return returnMass;
|
return returnMass;
|
||||||
}// end CalculateMass
|
}// end CalculateMass
|
||||||
|
|
||||||
|
@ -753,6 +755,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (Body != (IntPtr) 0)
|
if (Body != (IntPtr) 0)
|
||||||
{
|
{
|
||||||
float newmass = CalculateMass();
|
float newmass = CalculateMass();
|
||||||
|
|
||||||
//m_log.Info("[PHYSICS]: New Mass: " + newmass.ToString());
|
//m_log.Info("[PHYSICS]: New Mass: " + newmass.ToString());
|
||||||
|
|
||||||
d.MassSetBoxTotal(out pMass, newmass, _size.X, _size.Y, _size.Z);
|
d.MassSetBoxTotal(out pMass, newmass, _size.X, _size.Y, _size.Z);
|
||||||
|
|
|
@ -207,6 +207,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
private float avMovementDivisorWalk = 1.3f;
|
private float avMovementDivisorWalk = 1.3f;
|
||||||
private float avMovementDivisorRun = 0.8f;
|
private float avMovementDivisorRun = 0.8f;
|
||||||
private float minimumGroundFlightOffset = 3f;
|
private float minimumGroundFlightOffset = 3f;
|
||||||
|
public float maximumMassObject = 10000.01f;
|
||||||
|
|
||||||
public bool meshSculptedPrim = true;
|
public bool meshSculptedPrim = true;
|
||||||
public bool forceSimplePrimMeshing = false;
|
public bool forceSimplePrimMeshing = false;
|
||||||
|
@ -480,6 +481,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
|
|
||||||
m_NINJA_physics_joints_enabled = physicsconfig.GetBoolean("use_NINJA_physics_joints", false);
|
m_NINJA_physics_joints_enabled = physicsconfig.GetBoolean("use_NINJA_physics_joints", false);
|
||||||
minimumGroundFlightOffset = physicsconfig.GetFloat("minimum_ground_flight_offset", 3f);
|
minimumGroundFlightOffset = physicsconfig.GetFloat("minimum_ground_flight_offset", 3f);
|
||||||
|
maximumMassObject = physicsconfig.GetFloat("maximum_mass_object", 10000.01f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
|
|
||||||
; Maximum total size, and maximum size where a prim can be physical
|
; Maximum total size, and maximum size where a prim can be physical
|
||||||
NonPhysicalPrimMax = 256
|
NonPhysicalPrimMax = 256
|
||||||
PhysicalPrimMax = 10
|
PhysicalPrimMax = 10 ; (I think this was moved to the Regions.ini!)
|
||||||
ClampPrimSize = false
|
ClampPrimSize = false
|
||||||
|
|
||||||
; Region crossing
|
; Region crossing
|
||||||
|
@ -597,6 +597,9 @@
|
||||||
body_motor_joint_maxforce_tensor_linux = 5
|
body_motor_joint_maxforce_tensor_linux = 5
|
||||||
body_motor_joint_maxforce_tensor_win = 5
|
body_motor_joint_maxforce_tensor_win = 5
|
||||||
|
|
||||||
|
; Maximum mass an object can be before it is clamped
|
||||||
|
maximum_mass_object = 10000.01
|
||||||
|
|
||||||
; ##
|
; ##
|
||||||
; ## Sculpted Prim settings
|
; ## Sculpted Prim settings
|
||||||
; ##
|
; ##
|
||||||
|
|
Loading…
Reference in New Issue