Merge branch 'avination-current' into careminster
Conflicts: OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs OpenSim/Region/Framework/Interfaces/IDynamicMenuModule.cs OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.csavinationmerge
commit
fe4a67efb6
|
@ -97,7 +97,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
llsdItem.asset_id = invItem.AssetID;
|
llsdItem.asset_id = invItem.AssetID;
|
||||||
llsdItem.created_at = invItem.CreationDate;
|
llsdItem.created_at = invItem.CreationDate;
|
||||||
llsdItem.desc = invItem.Description;
|
llsdItem.desc = invItem.Description;
|
||||||
llsdItem.flags = (int)invItem.Flags;
|
llsdItem.flags = ((int)invItem.Flags) & 0xff;
|
||||||
llsdItem.item_id = invItem.ID;
|
llsdItem.item_id = invItem.ID;
|
||||||
llsdItem.name = invItem.Name;
|
llsdItem.name = invItem.Name;
|
||||||
llsdItem.parent_id = invItem.Folder;
|
llsdItem.parent_id = invItem.Folder;
|
||||||
|
|
|
@ -411,7 +411,7 @@ namespace OpenSim.Capabilities.Handlers
|
||||||
llsdItem.asset_id = invItem.AssetID;
|
llsdItem.asset_id = invItem.AssetID;
|
||||||
llsdItem.created_at = invItem.CreationDate;
|
llsdItem.created_at = invItem.CreationDate;
|
||||||
llsdItem.desc = invItem.Description;
|
llsdItem.desc = invItem.Description;
|
||||||
llsdItem.flags = (int)invItem.Flags;
|
llsdItem.flags = ((int)invItem.Flags) & 0xff;
|
||||||
llsdItem.item_id = invItem.ID;
|
llsdItem.item_id = invItem.ID;
|
||||||
llsdItem.name = invItem.Name;
|
llsdItem.name = invItem.Name;
|
||||||
llsdItem.parent_id = invItem.Folder;
|
llsdItem.parent_id = invItem.Folder;
|
||||||
|
|
|
@ -345,7 +345,7 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
if (responsedata == null)
|
if (responsedata == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Normal)
|
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Normal) // This is the event queue
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
@ -376,7 +376,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
// TODO: Add EventQueueGet name/description for diagnostics
|
// TODO: Add EventQueueGet name/description for diagnostics
|
||||||
MainServer.Instance.AddPollServiceHTTPHandler(
|
MainServer.Instance.AddPollServiceHTTPHandler(
|
||||||
eventQueueGetPath,
|
eventQueueGetPath,
|
||||||
new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID, 1000));
|
new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID, 40000));
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[EVENT QUEUE GET MODULE]: Registered EQG handler {0} for {1} in {2}",
|
// "[EVENT QUEUE GET MODULE]: Registered EQG handler {0} for {1} in {2}",
|
||||||
|
|
|
@ -56,6 +56,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
public PollServiceTextureEventArgs thepoll;
|
public PollServiceTextureEventArgs thepoll;
|
||||||
public UUID reqID;
|
public UUID reqID;
|
||||||
public Hashtable request;
|
public Hashtable request;
|
||||||
|
public bool send503;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class aPollResponse
|
public class aPollResponse
|
||||||
|
@ -244,7 +245,19 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
reqinfo.thepoll = this;
|
reqinfo.thepoll = this;
|
||||||
reqinfo.reqID = x;
|
reqinfo.reqID = x;
|
||||||
reqinfo.request = y;
|
reqinfo.request = y;
|
||||||
|
reqinfo.send503 = false;
|
||||||
|
|
||||||
|
lock (responses)
|
||||||
|
{
|
||||||
|
if (responses.Count > 0)
|
||||||
|
{
|
||||||
|
if (m_queue.Count >= 4)
|
||||||
|
{
|
||||||
|
// Never allow more than 4 fetches to wait
|
||||||
|
reqinfo.send503 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
m_queue.Enqueue(reqinfo);
|
m_queue.Enqueue(reqinfo);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -276,6 +289,22 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
UUID requestID = requestinfo.reqID;
|
UUID requestID = requestinfo.reqID;
|
||||||
|
|
||||||
|
if (requestinfo.send503)
|
||||||
|
{
|
||||||
|
response = new Hashtable();
|
||||||
|
|
||||||
|
response["int_response_code"] = 503;
|
||||||
|
response["str_response_string"] = "Throttled";
|
||||||
|
response["content_type"] = "text/plain";
|
||||||
|
response["keepalive"] = false;
|
||||||
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
lock (responses)
|
||||||
|
responses[requestID] = new aPollResponse() {bytes = 0, response = response};
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If the avatar is gone, don't bother to get the texture
|
// If the avatar is gone, don't bother to get the texture
|
||||||
if (m_scene.GetScenePresence(Id) == null)
|
if (m_scene.GetScenePresence(Id) == null)
|
||||||
{
|
{
|
||||||
|
@ -385,6 +414,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
GetTextureModule.aPollResponse response;
|
GetTextureModule.aPollResponse response;
|
||||||
if (responses.TryGetValue(key, out response))
|
if (responses.TryGetValue(key, out response))
|
||||||
{
|
{
|
||||||
|
// This is any error response
|
||||||
|
if (response.bytes == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
// Normal
|
// Normal
|
||||||
if (BytesSent + response.bytes <= ThrottleBytes)
|
if (BytesSent + response.bytes <= ThrottleBytes)
|
||||||
|
@ -411,12 +443,12 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
return haskey;
|
return haskey;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessTime()
|
public void ProcessTime()
|
||||||
{
|
{
|
||||||
PassTime();
|
PassTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void PassTime()
|
private void PassTime()
|
||||||
{
|
{
|
||||||
currenttime = Util.EnvironmentTickCount();
|
currenttime = Util.EnvironmentTickCount();
|
||||||
|
|
|
@ -1741,7 +1741,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
newBlock.CreationDate = item.CreationDate;
|
newBlock.CreationDate = item.CreationDate;
|
||||||
newBlock.SalePrice = item.SalePrice;
|
newBlock.SalePrice = item.SalePrice;
|
||||||
newBlock.SaleType = item.SaleType;
|
newBlock.SaleType = item.SaleType;
|
||||||
newBlock.Flags = item.Flags;
|
newBlock.Flags = item.Flags & 0xff;
|
||||||
|
|
||||||
newBlock.CRC =
|
newBlock.CRC =
|
||||||
Helpers.InventoryCRC(newBlock.CreationDate, newBlock.SaleType,
|
Helpers.InventoryCRC(newBlock.CreationDate, newBlock.SaleType,
|
||||||
|
@ -1995,7 +1995,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
itemBlock.GroupID = item.GroupID;
|
itemBlock.GroupID = item.GroupID;
|
||||||
itemBlock.GroupOwned = item.GroupOwned;
|
itemBlock.GroupOwned = item.GroupOwned;
|
||||||
itemBlock.GroupMask = item.GroupPermissions;
|
itemBlock.GroupMask = item.GroupPermissions;
|
||||||
itemBlock.Flags = item.Flags;
|
itemBlock.Flags = item.Flags & 0xff;
|
||||||
itemBlock.SalePrice = item.SalePrice;
|
itemBlock.SalePrice = item.SalePrice;
|
||||||
itemBlock.SaleType = item.SaleType;
|
itemBlock.SaleType = item.SaleType;
|
||||||
itemBlock.CreationDate = item.CreationDate;
|
itemBlock.CreationDate = item.CreationDate;
|
||||||
|
@ -2062,7 +2062,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
bulkUpdate.ItemData[0].GroupID = item.GroupID;
|
bulkUpdate.ItemData[0].GroupID = item.GroupID;
|
||||||
bulkUpdate.ItemData[0].GroupOwned = item.GroupOwned;
|
bulkUpdate.ItemData[0].GroupOwned = item.GroupOwned;
|
||||||
bulkUpdate.ItemData[0].GroupMask = item.GroupPermissions;
|
bulkUpdate.ItemData[0].GroupMask = item.GroupPermissions;
|
||||||
bulkUpdate.ItemData[0].Flags = item.Flags;
|
bulkUpdate.ItemData[0].Flags = item.Flags & 0xff;
|
||||||
bulkUpdate.ItemData[0].SalePrice = item.SalePrice;
|
bulkUpdate.ItemData[0].SalePrice = item.SalePrice;
|
||||||
bulkUpdate.ItemData[0].SaleType = item.SaleType;
|
bulkUpdate.ItemData[0].SaleType = item.SaleType;
|
||||||
|
|
||||||
|
@ -2116,7 +2116,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
InventoryReply.InventoryData[0].GroupID = Item.GroupID;
|
InventoryReply.InventoryData[0].GroupID = Item.GroupID;
|
||||||
InventoryReply.InventoryData[0].GroupOwned = Item.GroupOwned;
|
InventoryReply.InventoryData[0].GroupOwned = Item.GroupOwned;
|
||||||
InventoryReply.InventoryData[0].GroupMask = Item.GroupPermissions;
|
InventoryReply.InventoryData[0].GroupMask = Item.GroupPermissions;
|
||||||
InventoryReply.InventoryData[0].Flags = Item.Flags;
|
InventoryReply.InventoryData[0].Flags = Item.Flags & 0xff;
|
||||||
InventoryReply.InventoryData[0].SalePrice = Item.SalePrice;
|
InventoryReply.InventoryData[0].SalePrice = Item.SalePrice;
|
||||||
InventoryReply.InventoryData[0].SaleType = Item.SaleType;
|
InventoryReply.InventoryData[0].SaleType = Item.SaleType;
|
||||||
InventoryReply.InventoryData[0].CreationDate = Item.CreationDate;
|
InventoryReply.InventoryData[0].CreationDate = Item.CreationDate;
|
||||||
|
@ -5137,6 +5137,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
data.CollisionPlane.ToBytes(objectData, 0);
|
data.CollisionPlane.ToBytes(objectData, 0);
|
||||||
offsetPosition.ToBytes(objectData, 16);
|
offsetPosition.ToBytes(objectData, 16);
|
||||||
|
Vector3 velocity = new Vector3(0, 0, 0);
|
||||||
|
Vector3 acceleration = new Vector3(0, 0, 0);
|
||||||
|
velocity.ToBytes(objectData, 28);
|
||||||
|
acceleration.ToBytes(objectData, 40);
|
||||||
// data.Velocity.ToBytes(objectData, 28);
|
// data.Velocity.ToBytes(objectData, 28);
|
||||||
// data.Acceleration.ToBytes(objectData, 40);
|
// data.Acceleration.ToBytes(objectData, 40);
|
||||||
rotation.ToBytes(objectData, 52);
|
rotation.ToBytes(objectData, 52);
|
||||||
|
|
|
@ -1135,7 +1135,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
if (!udpClient.IsConnected)
|
if (!udpClient.IsConnected)
|
||||||
{
|
{
|
||||||
// m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + m_scene.RegionInfo.RegionName);
|
m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + m_scene.RegionInfo.RegionName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,9 +65,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||||
protected Scene m_scene;
|
protected Scene m_scene;
|
||||||
protected IDialogModule m_dialogModule;
|
protected IDialogModule m_dialogModule;
|
||||||
|
|
||||||
protected Dictionary<UUID, string> m_capsDict =
|
|
||||||
new Dictionary<UUID, string>();
|
|
||||||
|
|
||||||
protected IDialogModule DialogModule
|
protected IDialogModule DialogModule
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -89,7 +86,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||||
m_scene.RegisterModuleInterface<IGodsModule>(this);
|
m_scene.RegisterModuleInterface<IGodsModule>(this);
|
||||||
m_scene.EventManager.OnNewClient += SubscribeToClientEvents;
|
m_scene.EventManager.OnNewClient += SubscribeToClientEvents;
|
||||||
m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
|
||||||
m_scene.EventManager.OnClientClosed += OnClientClosed;
|
|
||||||
scene.EventManager.OnIncomingInstantMessage +=
|
scene.EventManager.OnIncomingInstantMessage +=
|
||||||
OnIncomingInstantMessage;
|
OnIncomingInstantMessage;
|
||||||
}
|
}
|
||||||
|
@ -125,15 +121,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
|
||||||
client.OnRequestGodlikePowers -= RequestGodlikePowers;
|
client.OnRequestGodlikePowers -= RequestGodlikePowers;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClientClosed(UUID agentID, Scene scene)
|
|
||||||
{
|
|
||||||
m_capsDict.Remove(agentID);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnRegisterCaps(UUID agentID, Caps caps)
|
private void OnRegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
string uri = "/CAPS/" + UUID.Random();
|
string uri = "/CAPS/" + UUID.Random();
|
||||||
m_capsDict[agentID] = uri;
|
|
||||||
|
|
||||||
caps.RegisterHandler("UntrustedSimulatorMessage",
|
caps.RegisterHandler("UntrustedSimulatorMessage",
|
||||||
new RestStreamHandler("POST", uri,
|
new RestStreamHandler("POST", uri,
|
||||||
|
|
|
@ -1113,14 +1113,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
((Scene)(client.Scene)).RequestTeleportLocation(
|
((Scene)(client.Scene)).RequestTeleportLocation(
|
||||||
client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt,
|
client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt,
|
||||||
(uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
|
(uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// can't find the Home region: Tell viewer and abort
|
// can't find the Home region: Tell viewer and abort
|
||||||
client.SendTeleportFailed("Your home region could not be found.");
|
client.SendTeleportFailed("Your home region could not be found.");
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -387,6 +387,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
inventoryStoredPosition = objectGroup.RootPart.AttachOffset;
|
inventoryStoredPosition = objectGroup.RootPart.AttachOffset;
|
||||||
inventoryStoredRotation = objectGroup.RootPart.AttachRotation;
|
inventoryStoredRotation = objectGroup.RootPart.AttachRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trees could be attached and it's been done, but it makes
|
||||||
|
// no sense. State must be preserved because it's the tree type
|
||||||
|
if (objectGroup.RootPart.Shape.PCode != (byte)PCode.Tree &&
|
||||||
|
objectGroup.RootPart.Shape.PCode != (byte)PCode.NewTree)
|
||||||
objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint;
|
objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint;
|
||||||
|
|
||||||
objectGroup.AbsolutePosition = inventoryStoredPosition;
|
objectGroup.AbsolutePosition = inventoryStoredPosition;
|
||||||
|
@ -797,6 +802,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
g.RootPart.AttachPoint = g.RootPart.Shape.State;
|
g.RootPart.AttachPoint = g.RootPart.Shape.State;
|
||||||
g.RootPart.AttachOffset = g.AbsolutePosition;
|
g.RootPart.AttachOffset = g.AbsolutePosition;
|
||||||
g.RootPart.AttachRotation = g.GroupRotation;
|
g.RootPart.AttachRotation = g.GroupRotation;
|
||||||
|
if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
|
||||||
|
g.RootPart.Shape.PCode != (byte)PCode.Tree)
|
||||||
g.RootPart.Shape.State = 0;
|
g.RootPart.Shape.State = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,6 +838,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
g.RootPart.AttachPoint = g.RootPart.Shape.State;
|
g.RootPart.AttachPoint = g.RootPart.Shape.State;
|
||||||
g.RootPart.AttachOffset = g.AbsolutePosition;
|
g.RootPart.AttachOffset = g.AbsolutePosition;
|
||||||
g.RootPart.AttachRotation = g.GroupRotation;
|
g.RootPart.AttachRotation = g.GroupRotation;
|
||||||
|
if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
|
||||||
|
g.RootPart.Shape.PCode != (byte)PCode.Tree)
|
||||||
g.RootPart.Shape.State = 0;
|
g.RootPart.Shape.State = 0;
|
||||||
|
|
||||||
objlist.Add(g);
|
objlist.Add(g);
|
||||||
|
|
|
@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
public UUID urlcode;
|
public UUID urlcode;
|
||||||
public Dictionary<UUID, RequestData> requests;
|
public Dictionary<UUID, RequestData> requests;
|
||||||
public bool isSsl;
|
public bool isSsl;
|
||||||
|
public Scene scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RequestData
|
public class RequestData
|
||||||
|
@ -66,6 +67,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
public int startTime;
|
public int startTime;
|
||||||
public bool responseSent;
|
public bool responseSent;
|
||||||
public string uri;
|
public string uri;
|
||||||
|
public bool allowResponseType = false;
|
||||||
|
public UUID hostID;
|
||||||
|
public Scene scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -171,6 +175,17 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
|
|
||||||
public void RemoveRegion(Scene scene)
|
public void RemoveRegion(Scene scene)
|
||||||
{
|
{
|
||||||
|
// Drop references to that scene
|
||||||
|
foreach (KeyValuePair<string, UrlData> kvp in m_UrlMap)
|
||||||
|
{
|
||||||
|
if (kvp.Value.scene == scene)
|
||||||
|
kvp.Value.scene = null;
|
||||||
|
}
|
||||||
|
foreach (KeyValuePair<UUID, UrlData> kvp in m_RequestMap)
|
||||||
|
{
|
||||||
|
if (kvp.Value.scene == scene)
|
||||||
|
kvp.Value.scene = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close()
|
||||||
|
@ -198,6 +213,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
urlData.urlcode = urlcode;
|
urlData.urlcode = urlcode;
|
||||||
urlData.isSsl = false;
|
urlData.isSsl = false;
|
||||||
urlData.requests = new Dictionary<UUID, RequestData>();
|
urlData.requests = new Dictionary<UUID, RequestData>();
|
||||||
|
urlData.scene = host.ParentGroup.Scene;
|
||||||
|
|
||||||
m_UrlMap[url] = urlData;
|
m_UrlMap[url] = urlData;
|
||||||
|
|
||||||
|
@ -316,6 +332,11 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
if (!urlData.requests[request].responseSent)
|
if (!urlData.requests[request].responseSent)
|
||||||
{
|
{
|
||||||
string responseBody = body;
|
string responseBody = body;
|
||||||
|
|
||||||
|
// If we have no OpenID from built-in browser, disable this
|
||||||
|
if (!urlData.requests[request].allowResponseType)
|
||||||
|
urlData.requests[request].responseType = "text/plain";
|
||||||
|
|
||||||
if (urlData.requests[request].responseType.Equals("text/plain"))
|
if (urlData.requests[request].responseType.Equals("text/plain"))
|
||||||
{
|
{
|
||||||
string value;
|
string value;
|
||||||
|
@ -532,7 +553,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
//put response
|
//put response
|
||||||
response["int_response_code"] = requestData.responseCode;
|
response["int_response_code"] = requestData.responseCode;
|
||||||
response["str_response_string"] = requestData.responseBody;
|
response["str_response_string"] = requestData.responseBody;
|
||||||
response["content_type"] = "text/plain";
|
response["content_type"] = requestData.responseType;
|
||||||
response["keepalive"] = false;
|
response["keepalive"] = false;
|
||||||
response["reusecontext"] = false;
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
@ -600,6 +621,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
requestData.requestDone = false;
|
requestData.requestDone = false;
|
||||||
requestData.startTime = System.Environment.TickCount;
|
requestData.startTime = System.Environment.TickCount;
|
||||||
requestData.uri = uri;
|
requestData.uri = uri;
|
||||||
|
requestData.hostID = url.hostID;
|
||||||
|
requestData.scene = url.scene;
|
||||||
if (requestData.headers == null)
|
if (requestData.headers == null)
|
||||||
requestData.headers = new Dictionary<string, string>();
|
requestData.headers = new Dictionary<string, string>();
|
||||||
|
|
||||||
|
@ -608,6 +631,32 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
|
||||||
string key = (string)header.Key;
|
string key = (string)header.Key;
|
||||||
string value = (string)header.Value;
|
string value = (string)header.Value;
|
||||||
requestData.headers.Add(key, value);
|
requestData.headers.Add(key, value);
|
||||||
|
if (key == "cookie")
|
||||||
|
{
|
||||||
|
string[] parts = value.Split(new char[] {'='});
|
||||||
|
if (parts[0] == "agni_sl_session_id" && parts.Length > 1)
|
||||||
|
{
|
||||||
|
string cookie = Uri.UnescapeDataString(parts[1]);
|
||||||
|
string[] crumbs = cookie.Split(new char[] {':'});
|
||||||
|
UUID owner;
|
||||||
|
if (crumbs.Length == 2 && UUID.TryParse(crumbs[0], out owner))
|
||||||
|
{
|
||||||
|
if (crumbs[1].Length == 32)
|
||||||
|
{
|
||||||
|
Scene scene = requestData.scene;
|
||||||
|
if (scene != null)
|
||||||
|
{
|
||||||
|
SceneObjectPart host = scene.GetSceneObjectPart(requestData.hostID);
|
||||||
|
if (host != null)
|
||||||
|
{
|
||||||
|
if (host.OwnerID == owner)
|
||||||
|
requestData.allowResponseType = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach (DictionaryEntry de in request)
|
foreach (DictionaryEntry de in request)
|
||||||
{
|
{
|
||||||
|
|
|
@ -940,6 +940,8 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
newLand.LandData.Name = newLand.LandData.Name;
|
newLand.LandData.Name = newLand.LandData.Name;
|
||||||
newLand.LandData.GlobalID = UUID.Random();
|
newLand.LandData.GlobalID = UUID.Random();
|
||||||
newLand.LandData.Dwell = 0;
|
newLand.LandData.Dwell = 0;
|
||||||
|
// Clear "Show in search" on the cut out parcel to prevent double-charging
|
||||||
|
newLand.LandData.Flags &= ~(uint)ParcelFlags.ShowDirectory;
|
||||||
|
|
||||||
newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y));
|
newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y));
|
||||||
|
|
||||||
|
|
|
@ -211,8 +211,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
|
||||||
{
|
{
|
||||||
if (regionInfos.Count == 0)
|
if (regionInfos.Count == 0)
|
||||||
remoteClient.SendAgentAlertMessage("No regions found with that name.", true);
|
remoteClient.SendAgentAlertMessage("No regions found with that name.", true);
|
||||||
else if (regionInfos.Count == 1)
|
// else if (regionInfos.Count == 1)
|
||||||
remoteClient.SendAgentAlertMessage("Region found!", false);
|
// remoteClient.SendAgentAlertMessage("Region found!", false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* 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.Collections.Generic;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Framework.Interfaces
|
||||||
|
{
|
||||||
|
public delegate bool HandlerDelegate(IClientAPI client, FloaterData data, string[] msg);
|
||||||
|
|
||||||
|
public abstract class FloaterData
|
||||||
|
{
|
||||||
|
public abstract int Channel { get; }
|
||||||
|
public abstract string FloaterName { get; set; }
|
||||||
|
public virtual string XmlName { get; set; }
|
||||||
|
public virtual string XmlText { get; set; }
|
||||||
|
public virtual HandlerDelegate Handler { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public interface IDynamicFloaterModule
|
||||||
|
{
|
||||||
|
void DoUserFloater(UUID agentID, FloaterData dialogData, string configuration);
|
||||||
|
void FloaterControl(ScenePresence sp, FloaterData d, string msg);
|
||||||
|
}
|
||||||
|
}
|
|
@ -43,6 +43,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
public enum UserMode : int
|
public enum UserMode : int
|
||||||
{
|
{
|
||||||
Normal = 0,
|
Normal = 0,
|
||||||
|
RegionManager = 2,
|
||||||
God = 3
|
God = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -645,7 +645,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_nextPosition = m_group.AbsolutePosition + motionThisFrame;
|
m_nextPosition = m_group.AbsolutePosition + motionThisFrame;
|
||||||
m_group.AbsolutePosition = m_nextPosition;
|
m_group.AbsolutePosition = m_nextPosition;
|
||||||
|
|
||||||
m_group.RootPart.Velocity = v;
|
//m_group.RootPart.Velocity = v;
|
||||||
update = true;
|
update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2454,6 +2454,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
else
|
else
|
||||||
group.StopScriptInstances();
|
group.StopScriptInstances();
|
||||||
|
|
||||||
|
List<UUID> avatars = group.GetSittingAvatars();
|
||||||
|
foreach (UUID av in avatars)
|
||||||
|
{
|
||||||
|
ScenePresence p = GetScenePresence(av);
|
||||||
|
if (p != null)
|
||||||
|
p.StandUp();
|
||||||
|
}
|
||||||
|
|
||||||
SceneObjectPart[] partList = group.Parts;
|
SceneObjectPart[] partList = group.Parts;
|
||||||
|
|
||||||
foreach (SceneObjectPart part in partList)
|
foreach (SceneObjectPart part in partList)
|
||||||
|
|
|
@ -272,6 +272,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
AttachmentPoint = 0;
|
AttachmentPoint = 0;
|
||||||
|
|
||||||
|
// Don't zap trees
|
||||||
|
if (RootPart.Shape.PCode == (byte)PCode.Tree ||
|
||||||
|
RootPart.Shape.PCode == (byte)PCode.NewTree)
|
||||||
|
return;
|
||||||
|
|
||||||
// Even though we don't use child part state parameters for attachments any more, we still need to set
|
// Even though we don't use child part state parameters for attachments any more, we still need to set
|
||||||
// these to zero since having them non-zero in rezzed scene objects will crash some clients. Even if
|
// these to zero since having them non-zero in rezzed scene objects will crash some clients. Even if
|
||||||
// we store them correctly, scene objects that we receive from elsewhere might not.
|
// we store them correctly, scene objects that we receive from elsewhere might not.
|
||||||
|
|
|
@ -131,7 +131,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public double this[int x, int y]
|
public double this[int x, int y]
|
||||||
{
|
{
|
||||||
get { return map[x, y]; }
|
get
|
||||||
|
{
|
||||||
|
if (x < 0) x = 0;
|
||||||
|
if (y < 0) y = 0;
|
||||||
|
if (x >= (int)Constants.RegionSize) x = (int)Constants.RegionSize - 1;
|
||||||
|
if (y >= (int)Constants.RegionSize) y = (int)Constants.RegionSize - 1;
|
||||||
|
|
||||||
|
return map[x, y];
|
||||||
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
// Will "fix" terrain hole problems. Although not fantastically.
|
// Will "fix" terrain hole problems. Although not fantastically.
|
||||||
|
|
|
@ -0,0 +1,238 @@
|
||||||
|
/*
|
||||||
|
* 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.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.StructuredData;
|
||||||
|
using OpenSim;
|
||||||
|
using OpenSim.Region;
|
||||||
|
using OpenSim.Region.Framework;
|
||||||
|
using OpenSim.Region.Framework.Scenes;
|
||||||
|
using OpenSim.Region.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
using Nini.Config;
|
||||||
|
using log4net;
|
||||||
|
using Mono.Addins;
|
||||||
|
using Caps = OpenSim.Framework.Capabilities.Caps;
|
||||||
|
using OSDMap = OpenMetaverse.StructuredData.OSDMap;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.OptionalModules.ViewerSupport
|
||||||
|
{
|
||||||
|
[Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DynamicFloater")]
|
||||||
|
public class DynamicFloaterModule : INonSharedRegionModule, IDynamicFloaterModule
|
||||||
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private Scene m_scene;
|
||||||
|
|
||||||
|
private Dictionary<UUID, Dictionary<int, FloaterData>> m_floaters = new Dictionary<UUID, Dictionary<int, FloaterData>>();
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { return "DynamicFloaterModule"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public Type ReplaceableInterface
|
||||||
|
{
|
||||||
|
get { return null; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Initialise(IConfigSource config)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRegion(Scene scene)
|
||||||
|
{
|
||||||
|
m_scene = scene;
|
||||||
|
scene.EventManager.OnNewClient += OnNewClient;
|
||||||
|
scene.EventManager.OnClientClosed += OnClientClosed;
|
||||||
|
m_scene.RegisterModuleInterface<IDynamicFloaterModule>(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegionLoaded(Scene scene)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RemoveRegion(Scene scene)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnNewClient(IClientAPI client)
|
||||||
|
{
|
||||||
|
client.OnChatFromClient += OnChatFromClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnClientClosed(UUID agentID, Scene scene)
|
||||||
|
{
|
||||||
|
m_floaters.Remove(agentID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendToClient(ScenePresence sp, string msg)
|
||||||
|
{
|
||||||
|
sp.ControllingClient.SendChatMessage(msg,
|
||||||
|
(byte)ChatTypeEnum.Owner,
|
||||||
|
sp.AbsolutePosition,
|
||||||
|
"Server",
|
||||||
|
UUID.Zero,
|
||||||
|
UUID.Zero,
|
||||||
|
(byte)ChatSourceType.Object,
|
||||||
|
(byte)ChatAudibleLevel.Fully);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DoUserFloater(UUID agentID, FloaterData dialogData, string configuration)
|
||||||
|
{
|
||||||
|
ScenePresence sp = m_scene.GetScenePresence(agentID);
|
||||||
|
if (sp == null || sp.IsChildAgent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!m_floaters.ContainsKey(agentID))
|
||||||
|
m_floaters[agentID] = new Dictionary<int, FloaterData>();
|
||||||
|
|
||||||
|
if (m_floaters[agentID].ContainsKey(dialogData.Channel))
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_floaters[agentID].Add(dialogData.Channel, dialogData);
|
||||||
|
|
||||||
|
string xml;
|
||||||
|
if (dialogData.XmlText != null && dialogData.XmlText != String.Empty)
|
||||||
|
{
|
||||||
|
xml = dialogData.XmlText;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using (FileStream fs = File.Open(dialogData.XmlName + ".xml", FileMode.Open))
|
||||||
|
{
|
||||||
|
using (StreamReader sr = new StreamReader(fs))
|
||||||
|
xml = sr.ReadToEnd().Replace("\n", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<string> xparts = new List<string>();
|
||||||
|
|
||||||
|
while (xml.Length > 0)
|
||||||
|
{
|
||||||
|
string x = xml;
|
||||||
|
if (x.Length > 600)
|
||||||
|
{
|
||||||
|
x = x.Substring(0, 600);
|
||||||
|
xml = xml.Substring(600);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xml = String.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
xparts.Add(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0 ; i < xparts.Count ; i++)
|
||||||
|
SendToClient(sp, String.Format("># floater {2} create {0}/{1} " + xparts[i], i + 1, xparts.Count, dialogData.FloaterName));
|
||||||
|
|
||||||
|
SendToClient(sp, String.Format("># floater {0} {{notify:1}} {{channel: {1}}} {{node:cancel {{notify:1}}}} {{node:ok {{notify:1}}}} {2}", dialogData.FloaterName, (uint)dialogData.Channel, configuration));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnChatFromClient(object sender, OSChatMessage msg)
|
||||||
|
{
|
||||||
|
if (msg.Sender == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//m_log.DebugFormat("chan {0} msg {1}", msg.Channel, msg.Message);
|
||||||
|
|
||||||
|
IClientAPI client = msg.Sender;
|
||||||
|
|
||||||
|
if (!m_floaters.ContainsKey(client.AgentId))
|
||||||
|
return;
|
||||||
|
|
||||||
|
string[] parts = msg.Message.Split(new char[] {':'});
|
||||||
|
if (parts.Length == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
|
||||||
|
if (sp == null || sp.IsChildAgent)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Dictionary<int, FloaterData> d = m_floaters[client.AgentId];
|
||||||
|
|
||||||
|
// Work around a viewer bug - VALUE from any
|
||||||
|
// dialog can appear on this channel and needs to
|
||||||
|
// be dispatched to ALL open dialogs for the user
|
||||||
|
if (msg.Channel == 427169570)
|
||||||
|
{
|
||||||
|
if (parts[0] == "VALUE")
|
||||||
|
{
|
||||||
|
foreach (FloaterData dd in d.Values)
|
||||||
|
{
|
||||||
|
if(dd.Handler(client, dd, parts))
|
||||||
|
{
|
||||||
|
m_floaters[client.AgentId].Remove(dd.Channel);
|
||||||
|
SendToClient(sp, String.Format("># floater {0} destroy", dd.FloaterName));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!d.ContainsKey(msg.Channel))
|
||||||
|
return;
|
||||||
|
|
||||||
|
FloaterData data = d[msg.Channel];
|
||||||
|
|
||||||
|
if (parts[0] == "NOTIFY")
|
||||||
|
{
|
||||||
|
if (parts[1] == "cancel" || parts[1] == data.FloaterName)
|
||||||
|
{
|
||||||
|
m_floaters[client.AgentId].Remove(data.Channel);
|
||||||
|
SendToClient(sp, String.Format("># floater {0} destroy", data.FloaterName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.Handler != null && data.Handler(client, data, parts))
|
||||||
|
{
|
||||||
|
m_floaters[client.AgentId].Remove(data.Channel);
|
||||||
|
SendToClient(sp, String.Format("># floater {0} destroy", data.FloaterName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FloaterControl(ScenePresence sp, FloaterData d, string msg)
|
||||||
|
{
|
||||||
|
string sendData = String.Format("># floater {0} {1}", d.FloaterName, msg);
|
||||||
|
SendToClient(sp, sendData);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -110,8 +110,11 @@ namespace OpenSim.Region.OptionalModules.ViewerSupport
|
||||||
{
|
{
|
||||||
foreach (MenuItemData d in m_menuItems[UUID.Zero])
|
foreach (MenuItemData d in m_menuItems[UUID.Zero])
|
||||||
{
|
{
|
||||||
if (d.Mode == UserMode.God && (!m_scene.Permissions.IsGod(agentID)))
|
if (!m_scene.Permissions.IsGod(agentID))
|
||||||
|
{
|
||||||
|
if (d.Mode == UserMode.RegionManager && (!m_scene.Permissions.IsAdministrator(agentID)))
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
OSDMap loc = null;
|
OSDMap loc = null;
|
||||||
switch (d.Location)
|
switch (d.Location)
|
||||||
|
|
|
@ -1045,12 +1045,37 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
if (me == midbox)
|
if (me == midbox)
|
||||||
{
|
{
|
||||||
if (Math.Abs(contact.normal.Z) > 0.95f)
|
if (Math.Abs(contact.normal.Z) > 0.95f)
|
||||||
|
{
|
||||||
offset.Z = contact.pos.Z - _position.Z;
|
offset.Z = contact.pos.Z - _position.Z;
|
||||||
|
offset.X = (float)Math.Abs(offset.X) * 0.5f + contact.depth;
|
||||||
|
offset.Y = (float)Math.Abs(offset.Y) * 0.5f + contact.depth;
|
||||||
|
offset.Z = (float)Math.Abs(offset.Z) * 0.5f + contact.depth;
|
||||||
|
|
||||||
|
if (reverse)
|
||||||
|
{
|
||||||
|
offset.X *= -contact.normal.X;
|
||||||
|
offset.Y *= -contact.normal.Y;
|
||||||
|
offset.Z *= -contact.normal.Z;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
offset.X *= contact.normal.X;
|
||||||
|
offset.Y *= contact.normal.Y;
|
||||||
|
offset.Z *= contact.normal.Z;
|
||||||
|
}
|
||||||
|
|
||||||
|
offset.X += contact.pos.X;
|
||||||
|
offset.Y += contact.pos.Y;
|
||||||
|
offset.Z += contact.pos.Z;
|
||||||
|
_position = offset;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
offset.Z = contact.normal.Z;
|
offset.Z = contact.normal.Z;
|
||||||
|
|
||||||
offset.Normalize();
|
offset.Normalize();
|
||||||
|
|
||||||
|
/*
|
||||||
if (reverse)
|
if (reverse)
|
||||||
{
|
{
|
||||||
contact.normal.X = offset.X;
|
contact.normal.X = offset.X;
|
||||||
|
@ -1063,7 +1088,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
contact.normal.Y = -offset.Y;
|
contact.normal.Y = -offset.Y;
|
||||||
contact.normal.Z = -offset.Z;
|
contact.normal.Z = -offset.Z;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
//_position.Z = offset.Z;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1071,8 +1097,20 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
{
|
{
|
||||||
float h = contact.pos.Z - _position.Z;
|
float h = contact.pos.Z - _position.Z;
|
||||||
|
|
||||||
|
// Only do this if the normal is sufficiently pointing in the 'up' direction
|
||||||
if (Math.Abs(contact.normal.Z) > 0.95f)
|
if (Math.Abs(contact.normal.Z) > 0.95f)
|
||||||
{
|
{
|
||||||
|
// We Only want to do this if we're sunk into the object a bit and we're stuck and we're trying to move and feetcollision is false
|
||||||
|
if ((contact.depth > 0.0010f && _velocity.X == 0f && _velocity.Y == 0 && _velocity.Z == 0)
|
||||||
|
&& (_target_velocity.X > 0 || _target_velocity.Y > 0 || _target_velocity.Z > 0)
|
||||||
|
&& (!feetcollision) )
|
||||||
|
{
|
||||||
|
m_collisionException = true; // Stop looping, do this only once not X times Contacts
|
||||||
|
_position.Z += contact.depth + 0.01f; // Move us Up the amount that we sank in, and add 0.01 meters to gently lift avatar up.
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (contact.normal.Z > 0)
|
if (contact.normal.Z > 0)
|
||||||
contact.normal.Z = 1.0f;
|
contact.normal.Z = 1.0f;
|
||||||
else
|
else
|
||||||
|
|
|
@ -4643,23 +4643,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
ScenePresence presence = World.GetScenePresence(agentId);
|
ScenePresence presence = World.GetScenePresence(agentId);
|
||||||
if (presence != null && presence.PresenceType != PresenceType.Npc)
|
if (presence != null && presence.PresenceType != PresenceType.Npc)
|
||||||
{
|
{
|
||||||
// agent must not be a god
|
|
||||||
if (presence.GodLevel >= 200) return;
|
|
||||||
|
|
||||||
if (destination == String.Empty)
|
if (destination == String.Empty)
|
||||||
destination = World.RegionInfo.RegionName;
|
destination = World.RegionInfo.RegionName;
|
||||||
|
|
||||||
// agent must be over the owners land
|
if (m_item.PermsGranter == agentId)
|
||||||
if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID)
|
{
|
||||||
|
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TELEPORT) != 0)
|
||||||
{
|
{
|
||||||
DoLLTeleport(presence, destination, targetPos, targetLookAt);
|
DoLLTeleport(presence, destination, targetPos, targetLookAt);
|
||||||
}
|
}
|
||||||
else // or must be wearing the prim
|
}
|
||||||
{
|
|
||||||
|
// agent must be wearing the object
|
||||||
if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID)
|
if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID)
|
||||||
{
|
{
|
||||||
DoLLTeleport(presence, destination, targetPos, targetLookAt);
|
DoLLTeleport(presence, destination, targetPos, targetLookAt);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// agent must not be a god
|
||||||
|
if (presence.GodLevel >= 200) return;
|
||||||
|
|
||||||
|
// agent must be over the owners land
|
||||||
|
ILandObject agentLand = World.LandChannel.GetLandObject(presence.AbsolutePosition);
|
||||||
|
ILandObject objectLand = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
|
||||||
|
if (m_host.OwnerID == objectLand.LandData.OwnerID && m_host.OwnerID == agentLand.LandData.OwnerID)
|
||||||
|
{
|
||||||
|
DoLLTeleport(presence, destination, targetPos, targetLookAt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4670,24 +4681,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID agentId = new UUID();
|
UUID agentId = new UUID();
|
||||||
|
|
||||||
ulong regionHandle = Utils.UIntsToLong((uint)global_coords.x, (uint)global_coords.y);
|
ulong regionHandle = Utils.UIntsToLong((uint)(global_coords.x / 256) * 256, (uint)(global_coords.y / 256) * 256);
|
||||||
|
|
||||||
if (UUID.TryParse(agent, out agentId))
|
if (UUID.TryParse(agent, out agentId))
|
||||||
{
|
{
|
||||||
|
// This function is owner only!
|
||||||
|
if (m_host.OwnerID != agentId)
|
||||||
|
return;
|
||||||
|
|
||||||
ScenePresence presence = World.GetScenePresence(agentId);
|
ScenePresence presence = World.GetScenePresence(agentId);
|
||||||
|
|
||||||
|
// Can't TP sitting avatars
|
||||||
|
if (presence.ParentID != 0) // Sitting
|
||||||
|
return;
|
||||||
|
|
||||||
if (presence != null && presence.PresenceType != PresenceType.Npc)
|
if (presence != null && presence.PresenceType != PresenceType.Npc)
|
||||||
{
|
{
|
||||||
// agent must not be a god
|
if (m_item.PermsGranter == agentId)
|
||||||
if (presence.GodLevel >= 200) return;
|
{
|
||||||
|
// If attached using llAttachToAvatarTemp, cowardly refuse
|
||||||
|
if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.ParentGroup.FromItemID == UUID.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
// agent must be over the owners land
|
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TELEPORT) != 0)
|
||||||
if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID)
|
|
||||||
{
|
|
||||||
World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
|
|
||||||
}
|
|
||||||
else // or must be wearing the prim
|
|
||||||
{
|
|
||||||
if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID)
|
|
||||||
{
|
{
|
||||||
World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
|
World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
|
||||||
}
|
}
|
||||||
|
@ -7853,6 +7869,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_List llGetPhysicsMaterial()
|
||||||
|
{
|
||||||
|
LSL_List result = new LSL_List();
|
||||||
|
|
||||||
|
result.Add(new LSL_Float(m_host.GravityModifier));
|
||||||
|
result.Add(new LSL_Float(m_host.Restitution));
|
||||||
|
result.Add(new LSL_Float(m_host.Friction));
|
||||||
|
result.Add(new LSL_Float(m_host.Density));
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private void SetPhysicsMaterial(SceneObjectPart part, int material_bits,
|
private void SetPhysicsMaterial(SceneObjectPart part, int material_bits,
|
||||||
float material_density, float material_friction,
|
float material_density, float material_friction,
|
||||||
float material_restitution, float material_gravity_modifier)
|
float material_restitution, float material_gravity_modifier)
|
||||||
|
@ -13379,6 +13407,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llSetContentType(LSL_Key id, LSL_Integer content_type)
|
||||||
|
{
|
||||||
|
if (m_UrlModule != null)
|
||||||
|
{
|
||||||
|
string type = "text.plain";
|
||||||
|
if (content_type == (int)ScriptBaseClass.CONTENT_TYPE_HTML)
|
||||||
|
type = "text/html";
|
||||||
|
|
||||||
|
m_UrlModule.HttpContentType(new UUID(id),type);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NotecardCache
|
public class NotecardCache
|
||||||
|
|
|
@ -398,7 +398,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
objtype = 0;
|
objtype = 0;
|
||||||
|
|
||||||
part = ((SceneObjectGroup)ent).RootPart;
|
part = ((SceneObjectGroup)ent).RootPart;
|
||||||
if (part.ParentGroup.AttachmentPoint != 0) // Attached so ignore
|
if (part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.Tree &&
|
||||||
|
part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.NewTree &&
|
||||||
|
part.ParentGroup.AttachmentPoint != 0) // Attached so ignore
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (part.Inventory.ContainsScripts())
|
if (part.Inventory.ContainsScripts())
|
||||||
|
|
|
@ -433,5 +433,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc);
|
void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc);
|
||||||
void llSetKeyframedMotion(LSL_List frames, LSL_List options);
|
void llSetKeyframedMotion(LSL_List frames, LSL_List options);
|
||||||
LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
|
LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
|
||||||
|
LSL_List llGetPhysicsMaterial();
|
||||||
|
void llSetContentType(LSL_Key id, LSL_Integer content_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int PERMISSION_CHANGE_PERMISSIONS = 512;
|
public const int PERMISSION_CHANGE_PERMISSIONS = 512;
|
||||||
public const int PERMISSION_TRACK_CAMERA = 1024;
|
public const int PERMISSION_TRACK_CAMERA = 1024;
|
||||||
public const int PERMISSION_CONTROL_CAMERA = 2048;
|
public const int PERMISSION_CONTROL_CAMERA = 2048;
|
||||||
|
public const int PERMISSION_TELEPORT = 4096;
|
||||||
|
|
||||||
public const int AGENT_FLYING = 1;
|
public const int AGENT_FLYING = 1;
|
||||||
public const int AGENT_ATTACHMENTS = 2;
|
public const int AGENT_ATTACHMENTS = 2;
|
||||||
|
@ -771,5 +772,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
/// process message parameter as regex
|
/// process message parameter as regex
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const int OS_LISTEN_REGEX_MESSAGE = 0x2;
|
public const int OS_LISTEN_REGEX_MESSAGE = 0x2;
|
||||||
|
|
||||||
|
public const int CONTENT_TYPE_TEXT = 0;
|
||||||
|
public const int CONTENT_TYPE_HTML = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2009,5 +2009,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
{
|
{
|
||||||
m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density);
|
m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_List llGetPhysicsMaterial()
|
||||||
|
{
|
||||||
|
return m_LSL_Functions.llGetPhysicsMaterial();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void llSetContentType(LSL_Key id, LSL_Integer content_type)
|
||||||
|
{
|
||||||
|
m_LSL_Functions.llSetContentType(id, content_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
|
<floater can_close="true" can_drag_on_left="false" can_minimize="false" can_resize="false" height="100" name="enter_uuid" title="ID Required" width="390">
|
||||||
|
<text bottom="-30" left="10">Enter UUID</text>
|
||||||
|
<line_editor bottom="-60" left="10" width="370" name="new_owner" height="20"/>
|
||||||
|
<button bottom="-90" width="80" height="20" left="300" label="OK" name="ok" />
|
||||||
|
<button bottom="-90" width="80" height="20" left="210" label="Cancel" name="cancel" />
|
||||||
|
</floater>
|
|
@ -1812,6 +1812,8 @@
|
||||||
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
<Reference name="OpenSim.Region.CoreModules"/>
|
<Reference name="OpenSim.Region.CoreModules"/>
|
||||||
<Reference name="OpenSim.Region.ClientStack.LindenUDP"/>
|
<Reference name="OpenSim.Region.ClientStack.LindenUDP"/>
|
||||||
|
<Reference name="OpenSim.Region.Framework.Interfaces"/>
|
||||||
|
<Reference name="OpenSim.Region.Framework.Scenes"/>
|
||||||
<Reference name="OpenSim.Region.Framework"/>
|
<Reference name="OpenSim.Region.Framework"/>
|
||||||
<Reference name="OpenSim.Region.Physics.Manager"/>
|
<Reference name="OpenSim.Region.Physics.Manager"/>
|
||||||
<Reference name="OpenSim.Server.Base"/>
|
<Reference name="OpenSim.Server.Base"/>
|
||||||
|
@ -3263,6 +3265,7 @@
|
||||||
<Reference name="OpenSim.Framework.Servers"/>
|
<Reference name="OpenSim.Framework.Servers"/>
|
||||||
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
<Reference name="OpenSim.Region.Framework"/>
|
<Reference name="OpenSim.Region.Framework"/>
|
||||||
|
<Reference name="OpenSim.Region.Framework.Interfaces"/>
|
||||||
<Reference name="OpenSim.Region.CoreModules"/>
|
<Reference name="OpenSim.Region.CoreModules"/>
|
||||||
<Reference name="OpenSim.Region.OptionalModules"/>
|
<Reference name="OpenSim.Region.OptionalModules"/>
|
||||||
<Reference name="OpenSim.Region.Physics.Manager"/>
|
<Reference name="OpenSim.Region.Physics.Manager"/>
|
||||||
|
|
Loading…
Reference in New Issue