aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Capabilities/Handlers/FetchInventory2/FetchInventory2Handler.cs2
-rw-r--r--OpenSim/Capabilities/Handlers/WebFetchInventoryDescendents/WebFetchInvDescHandler.cs2
-rw-r--r--OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs2
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs2
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs34
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs12
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs10
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs15
-rw-r--r--OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs51
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs4
-rw-r--r--OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs52
-rw-r--r--OpenSim/Region/Framework/Interfaces/IDynamicMenuModule.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/KeyframeMotion.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/TerrainChannel.cs10
-rw-r--r--OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs238
-rw-r--r--OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs7
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs40
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs76
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs10
27 files changed, 549 insertions, 52 deletions
diff --git a/OpenSim/Capabilities/Handlers/FetchInventory2/FetchInventory2Handler.cs b/OpenSim/Capabilities/Handlers/FetchInventory2/FetchInventory2Handler.cs
index c0ca1e1..c305797 100644
--- a/OpenSim/Capabilities/Handlers/FetchInventory2/FetchInventory2Handler.cs
+++ b/OpenSim/Capabilities/Handlers/FetchInventory2/FetchInventory2Handler.cs
@@ -97,7 +97,7 @@ namespace OpenSim.Capabilities.Handlers
97 llsdItem.asset_id = invItem.AssetID; 97 llsdItem.asset_id = invItem.AssetID;
98 llsdItem.created_at = invItem.CreationDate; 98 llsdItem.created_at = invItem.CreationDate;
99 llsdItem.desc = invItem.Description; 99 llsdItem.desc = invItem.Description;
100 llsdItem.flags = (int)invItem.Flags; 100 llsdItem.flags = ((int)invItem.Flags) & 0xff;
101 llsdItem.item_id = invItem.ID; 101 llsdItem.item_id = invItem.ID;
102 llsdItem.name = invItem.Name; 102 llsdItem.name = invItem.Name;
103 llsdItem.parent_id = invItem.Folder; 103 llsdItem.parent_id = invItem.Folder;
diff --git a/OpenSim/Capabilities/Handlers/WebFetchInventoryDescendents/WebFetchInvDescHandler.cs b/OpenSim/Capabilities/Handlers/WebFetchInventoryDescendents/WebFetchInvDescHandler.cs
index 11a2698..16e2f2d 100644
--- a/OpenSim/Capabilities/Handlers/WebFetchInventoryDescendents/WebFetchInvDescHandler.cs
+++ b/OpenSim/Capabilities/Handlers/WebFetchInventoryDescendents/WebFetchInvDescHandler.cs
@@ -411,7 +411,7 @@ namespace OpenSim.Capabilities.Handlers
411 llsdItem.asset_id = invItem.AssetID; 411 llsdItem.asset_id = invItem.AssetID;
412 llsdItem.created_at = invItem.CreationDate; 412 llsdItem.created_at = invItem.CreationDate;
413 llsdItem.desc = invItem.Description; 413 llsdItem.desc = invItem.Description;
414 llsdItem.flags = (int)invItem.Flags; 414 llsdItem.flags = ((int)invItem.Flags) & 0xff;
415 llsdItem.item_id = invItem.ID; 415 llsdItem.item_id = invItem.ID;
416 llsdItem.name = invItem.Name; 416 llsdItem.name = invItem.Name;
417 llsdItem.parent_id = invItem.Folder; 417 llsdItem.parent_id = invItem.Folder;
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
index 07bd48a..7628e23 100644
--- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs
@@ -345,7 +345,7 @@ namespace OpenSim.Framework.Servers.HttpServer
345 if (responsedata == null) 345 if (responsedata == null)
346 continue; 346 continue;
347 347
348 if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Normal) 348 if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Normal) // This is the event queue
349 { 349 {
350 try 350 try
351 { 351 {
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index 37285e3..eb40eb1 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -376,7 +376,7 @@ namespace OpenSim.Region.ClientStack.Linden
376 // TODO: Add EventQueueGet name/description for diagnostics 376 // TODO: Add EventQueueGet name/description for diagnostics
377 MainServer.Instance.AddPollServiceHTTPHandler( 377 MainServer.Instance.AddPollServiceHTTPHandler(
378 eventQueueGetPath, 378 eventQueueGetPath,
379 new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID, 1000)); 379 new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID, 40000));
380 380
381// m_log.DebugFormat( 381// m_log.DebugFormat(
382// "[EVENT QUEUE GET MODULE]: Registered EQG handler {0} for {1} in {2}", 382// "[EVENT QUEUE GET MODULE]: Registered EQG handler {0} for {1} in {2}",
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
index d4dbfb9..a42c96c 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
@@ -56,6 +56,7 @@ namespace OpenSim.Region.ClientStack.Linden
56 public PollServiceTextureEventArgs thepoll; 56 public PollServiceTextureEventArgs thepoll;
57 public UUID reqID; 57 public UUID reqID;
58 public Hashtable request; 58 public Hashtable request;
59 public bool send503;
59 } 60 }
60 61
61 public class aPollResponse 62 public class aPollResponse
@@ -244,7 +245,19 @@ namespace OpenSim.Region.ClientStack.Linden
244 reqinfo.thepoll = this; 245 reqinfo.thepoll = this;
245 reqinfo.reqID = x; 246 reqinfo.reqID = x;
246 reqinfo.request = y; 247 reqinfo.request = y;
248 reqinfo.send503 = false;
247 249
250 lock (responses)
251 {
252 if (responses.Count > 0)
253 {
254 if (m_queue.Count >= 4)
255 {
256 // Never allow more than 4 fetches to wait
257 reqinfo.send503 = true;
258 }
259 }
260 }
248 m_queue.Enqueue(reqinfo); 261 m_queue.Enqueue(reqinfo);
249 }; 262 };
250 263
@@ -276,6 +289,22 @@ namespace OpenSim.Region.ClientStack.Linden
276 289
277 UUID requestID = requestinfo.reqID; 290 UUID requestID = requestinfo.reqID;
278 291
292 if (requestinfo.send503)
293 {
294 response = new Hashtable();
295
296 response["int_response_code"] = 503;
297 response["str_response_string"] = "Throttled";
298 response["content_type"] = "text/plain";
299 response["keepalive"] = false;
300 response["reusecontext"] = false;
301
302 lock (responses)
303 responses[requestID] = new aPollResponse() {bytes = 0, response = response};
304
305 return;
306 }
307
279 // If the avatar is gone, don't bother to get the texture 308 // If the avatar is gone, don't bother to get the texture
280 if (m_scene.GetScenePresence(Id) == null) 309 if (m_scene.GetScenePresence(Id) == null)
281 { 310 {
@@ -385,6 +414,9 @@ namespace OpenSim.Region.ClientStack.Linden
385 GetTextureModule.aPollResponse response; 414 GetTextureModule.aPollResponse response;
386 if (responses.TryGetValue(key, out response)) 415 if (responses.TryGetValue(key, out response))
387 { 416 {
417 // This is any error response
418 if (response.bytes == 0)
419 return true;
388 420
389 // Normal 421 // Normal
390 if (BytesSent + response.bytes <= ThrottleBytes) 422 if (BytesSent + response.bytes <= ThrottleBytes)
@@ -411,12 +443,12 @@ namespace OpenSim.Region.ClientStack.Linden
411 443
412 return haskey; 444 return haskey;
413 } 445 }
446
414 public void ProcessTime() 447 public void ProcessTime()
415 { 448 {
416 PassTime(); 449 PassTime();
417 } 450 }
418 451
419
420 private void PassTime() 452 private void PassTime()
421 { 453 {
422 currenttime = Util.EnvironmentTickCount(); 454 currenttime = Util.EnvironmentTickCount();
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index ef1d803..c78d552 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -1741,7 +1741,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1741 newBlock.CreationDate = item.CreationDate; 1741 newBlock.CreationDate = item.CreationDate;
1742 newBlock.SalePrice = item.SalePrice; 1742 newBlock.SalePrice = item.SalePrice;
1743 newBlock.SaleType = item.SaleType; 1743 newBlock.SaleType = item.SaleType;
1744 newBlock.Flags = item.Flags; 1744 newBlock.Flags = item.Flags & 0xff;
1745 1745
1746 newBlock.CRC = 1746 newBlock.CRC =
1747 Helpers.InventoryCRC(newBlock.CreationDate, newBlock.SaleType, 1747 Helpers.InventoryCRC(newBlock.CreationDate, newBlock.SaleType,
@@ -1995,7 +1995,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1995 itemBlock.GroupID = item.GroupID; 1995 itemBlock.GroupID = item.GroupID;
1996 itemBlock.GroupOwned = item.GroupOwned; 1996 itemBlock.GroupOwned = item.GroupOwned;
1997 itemBlock.GroupMask = item.GroupPermissions; 1997 itemBlock.GroupMask = item.GroupPermissions;
1998 itemBlock.Flags = item.Flags; 1998 itemBlock.Flags = item.Flags & 0xff;
1999 itemBlock.SalePrice = item.SalePrice; 1999 itemBlock.SalePrice = item.SalePrice;
2000 itemBlock.SaleType = item.SaleType; 2000 itemBlock.SaleType = item.SaleType;
2001 itemBlock.CreationDate = item.CreationDate; 2001 itemBlock.CreationDate = item.CreationDate;
@@ -2062,7 +2062,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2062 bulkUpdate.ItemData[0].GroupID = item.GroupID; 2062 bulkUpdate.ItemData[0].GroupID = item.GroupID;
2063 bulkUpdate.ItemData[0].GroupOwned = item.GroupOwned; 2063 bulkUpdate.ItemData[0].GroupOwned = item.GroupOwned;
2064 bulkUpdate.ItemData[0].GroupMask = item.GroupPermissions; 2064 bulkUpdate.ItemData[0].GroupMask = item.GroupPermissions;
2065 bulkUpdate.ItemData[0].Flags = item.Flags; 2065 bulkUpdate.ItemData[0].Flags = item.Flags & 0xff;
2066 bulkUpdate.ItemData[0].SalePrice = item.SalePrice; 2066 bulkUpdate.ItemData[0].SalePrice = item.SalePrice;
2067 bulkUpdate.ItemData[0].SaleType = item.SaleType; 2067 bulkUpdate.ItemData[0].SaleType = item.SaleType;
2068 2068
@@ -2116,7 +2116,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2116 InventoryReply.InventoryData[0].GroupID = Item.GroupID; 2116 InventoryReply.InventoryData[0].GroupID = Item.GroupID;
2117 InventoryReply.InventoryData[0].GroupOwned = Item.GroupOwned; 2117 InventoryReply.InventoryData[0].GroupOwned = Item.GroupOwned;
2118 InventoryReply.InventoryData[0].GroupMask = Item.GroupPermissions; 2118 InventoryReply.InventoryData[0].GroupMask = Item.GroupPermissions;
2119 InventoryReply.InventoryData[0].Flags = Item.Flags; 2119 InventoryReply.InventoryData[0].Flags = Item.Flags & 0xff;
2120 InventoryReply.InventoryData[0].SalePrice = Item.SalePrice; 2120 InventoryReply.InventoryData[0].SalePrice = Item.SalePrice;
2121 InventoryReply.InventoryData[0].SaleType = Item.SaleType; 2121 InventoryReply.InventoryData[0].SaleType = Item.SaleType;
2122 InventoryReply.InventoryData[0].CreationDate = Item.CreationDate; 2122 InventoryReply.InventoryData[0].CreationDate = Item.CreationDate;
@@ -5137,6 +5137,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5137 5137
5138 data.CollisionPlane.ToBytes(objectData, 0); 5138 data.CollisionPlane.ToBytes(objectData, 0);
5139 offsetPosition.ToBytes(objectData, 16); 5139 offsetPosition.ToBytes(objectData, 16);
5140 Vector3 velocity = new Vector3(0, 0, 0);
5141 Vector3 acceleration = new Vector3(0, 0, 0);
5142 velocity.ToBytes(objectData, 28);
5143 acceleration.ToBytes(objectData, 40);
5140// data.Velocity.ToBytes(objectData, 28); 5144// data.Velocity.ToBytes(objectData, 28);
5141// data.Acceleration.ToBytes(objectData, 40); 5145// data.Acceleration.ToBytes(objectData, 40);
5142 rotation.ToBytes(objectData, 52); 5146 rotation.ToBytes(objectData, 52);
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index fab66ce..d008702 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1135,7 +1135,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1135 1135
1136 if (!udpClient.IsConnected) 1136 if (!udpClient.IsConnected)
1137 { 1137 {
1138// m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + m_scene.RegionInfo.RegionName); 1138 m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + m_scene.RegionInfo.RegionName);
1139 return; 1139 return;
1140 } 1140 }
1141 1141
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
index d22f3f4..5b12ecb 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
@@ -65,9 +65,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
65 protected Scene m_scene; 65 protected Scene m_scene;
66 protected IDialogModule m_dialogModule; 66 protected IDialogModule m_dialogModule;
67 67
68 protected Dictionary<UUID, string> m_capsDict =
69 new Dictionary<UUID, string>();
70
71 protected IDialogModule DialogModule 68 protected IDialogModule DialogModule
72 { 69 {
73 get 70 get
@@ -89,7 +86,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
89 m_scene.RegisterModuleInterface<IGodsModule>(this); 86 m_scene.RegisterModuleInterface<IGodsModule>(this);
90 m_scene.EventManager.OnNewClient += SubscribeToClientEvents; 87 m_scene.EventManager.OnNewClient += SubscribeToClientEvents;
91 m_scene.EventManager.OnRegisterCaps += OnRegisterCaps; 88 m_scene.EventManager.OnRegisterCaps += OnRegisterCaps;
92 m_scene.EventManager.OnClientClosed += OnClientClosed;
93 scene.EventManager.OnIncomingInstantMessage += 89 scene.EventManager.OnIncomingInstantMessage +=
94 OnIncomingInstantMessage; 90 OnIncomingInstantMessage;
95 } 91 }
@@ -125,15 +121,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
125 client.OnRequestGodlikePowers -= RequestGodlikePowers; 121 client.OnRequestGodlikePowers -= RequestGodlikePowers;
126 } 122 }
127 123
128 private void OnClientClosed(UUID agentID, Scene scene)
129 {
130 m_capsDict.Remove(agentID);
131 }
132
133 private void OnRegisterCaps(UUID agentID, Caps caps) 124 private void OnRegisterCaps(UUID agentID, Caps caps)
134 { 125 {
135 string uri = "/CAPS/" + UUID.Random(); 126 string uri = "/CAPS/" + UUID.Random();
136 m_capsDict[agentID] = uri;
137 127
138 caps.RegisterHandler("UntrustedSimulatorMessage", 128 caps.RegisterHandler("UntrustedSimulatorMessage",
139 new RestStreamHandler("POST", uri, 129 new RestStreamHandler("POST", uri,
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 6b90097..b9c88d4 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1113,14 +1113,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1113 ((Scene)(client.Scene)).RequestTeleportLocation( 1113 ((Scene)(client.Scene)).RequestTeleportLocation(
1114 client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt, 1114 client, regionInfo.RegionHandle, uinfo.HomePosition, uinfo.HomeLookAt,
1115 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome)); 1115 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
1116 return true;
1116 } 1117 }
1117 else 1118 else
1118 { 1119 {
1119 // can't find the Home region: Tell viewer and abort 1120 // can't find the Home region: Tell viewer and abort
1120 client.SendTeleportFailed("Your home region could not be found."); 1121 client.SendTeleportFailed("Your home region could not be found.");
1121 return false;
1122 } 1122 }
1123 return true; 1123 return false;
1124 } 1124 }
1125 1125
1126 #endregion 1126 #endregion
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index f5b509f..d5c2661 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -387,7 +387,12 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
387 inventoryStoredPosition = objectGroup.RootPart.AttachOffset; 387 inventoryStoredPosition = objectGroup.RootPart.AttachOffset;
388 inventoryStoredRotation = objectGroup.RootPart.AttachRotation; 388 inventoryStoredRotation = objectGroup.RootPart.AttachRotation;
389 } 389 }
390 objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint; 390
391 // Trees could be attached and it's been done, but it makes
392 // no sense. State must be preserved because it's the tree type
393 if (objectGroup.RootPart.Shape.PCode != (byte)PCode.Tree &&
394 objectGroup.RootPart.Shape.PCode != (byte)PCode.NewTree)
395 objectGroup.RootPart.Shape.State = objectGroup.RootPart.AttachPoint;
391 396
392 objectGroup.AbsolutePosition = inventoryStoredPosition; 397 objectGroup.AbsolutePosition = inventoryStoredPosition;
393 objectGroup.RootPart.RotationOffset = inventoryStoredRotation; 398 objectGroup.RootPart.RotationOffset = inventoryStoredRotation;
@@ -797,7 +802,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
797 g.RootPart.AttachPoint = g.RootPart.Shape.State; 802 g.RootPart.AttachPoint = g.RootPart.Shape.State;
798 g.RootPart.AttachOffset = g.AbsolutePosition; 803 g.RootPart.AttachOffset = g.AbsolutePosition;
799 g.RootPart.AttachRotation = g.GroupRotation; 804 g.RootPart.AttachRotation = g.GroupRotation;
800 g.RootPart.Shape.State = 0; 805 if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
806 g.RootPart.Shape.PCode != (byte)PCode.Tree)
807 g.RootPart.Shape.State = 0;
801 } 808 }
802 809
803 objlist.Add(g); 810 objlist.Add(g);
@@ -831,7 +838,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
831 g.RootPart.AttachPoint = g.RootPart.Shape.State; 838 g.RootPart.AttachPoint = g.RootPart.Shape.State;
832 g.RootPart.AttachOffset = g.AbsolutePosition; 839 g.RootPart.AttachOffset = g.AbsolutePosition;
833 g.RootPart.AttachRotation = g.GroupRotation; 840 g.RootPart.AttachRotation = g.GroupRotation;
834 g.RootPart.Shape.State = 0; 841 if (g.RootPart.Shape.PCode != (byte)PCode.NewTree &&
842 g.RootPart.Shape.PCode != (byte)PCode.Tree)
843 g.RootPart.Shape.State = 0;
835 844
836 objlist.Add(g); 845 objlist.Add(g);
837 XmlElement el = (XmlElement)n; 846 XmlElement el = (XmlElement)n;
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
index f2922d6..2a4d440 100644
--- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
@@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
51 public UUID urlcode; 51 public UUID urlcode;
52 public Dictionary<UUID, RequestData> requests; 52 public Dictionary<UUID, RequestData> requests;
53 public bool isSsl; 53 public bool isSsl;
54 public Scene scene;
54 } 55 }
55 56
56 public class RequestData 57 public class RequestData
@@ -66,6 +67,9 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
66 public int startTime; 67 public int startTime;
67 public bool responseSent; 68 public bool responseSent;
68 public string uri; 69 public string uri;
70 public bool allowResponseType = false;
71 public UUID hostID;
72 public Scene scene;
69 } 73 }
70 74
71 /// <summary> 75 /// <summary>
@@ -171,6 +175,17 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
171 175
172 public void RemoveRegion(Scene scene) 176 public void RemoveRegion(Scene scene)
173 { 177 {
178 // Drop references to that scene
179 foreach (KeyValuePair<string, UrlData> kvp in m_UrlMap)
180 {
181 if (kvp.Value.scene == scene)
182 kvp.Value.scene = null;
183 }
184 foreach (KeyValuePair<UUID, UrlData> kvp in m_RequestMap)
185 {
186 if (kvp.Value.scene == scene)
187 kvp.Value.scene = null;
188 }
174 } 189 }
175 190
176 public void Close() 191 public void Close()
@@ -198,6 +213,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
198 urlData.urlcode = urlcode; 213 urlData.urlcode = urlcode;
199 urlData.isSsl = false; 214 urlData.isSsl = false;
200 urlData.requests = new Dictionary<UUID, RequestData>(); 215 urlData.requests = new Dictionary<UUID, RequestData>();
216 urlData.scene = host.ParentGroup.Scene;
201 217
202 m_UrlMap[url] = urlData; 218 m_UrlMap[url] = urlData;
203 219
@@ -316,6 +332,11 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
316 if (!urlData.requests[request].responseSent) 332 if (!urlData.requests[request].responseSent)
317 { 333 {
318 string responseBody = body; 334 string responseBody = body;
335
336 // If we have no OpenID from built-in browser, disable this
337 if (!urlData.requests[request].allowResponseType)
338 urlData.requests[request].responseType = "text/plain";
339
319 if (urlData.requests[request].responseType.Equals("text/plain")) 340 if (urlData.requests[request].responseType.Equals("text/plain"))
320 { 341 {
321 string value; 342 string value;
@@ -532,7 +553,7 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
532 //put response 553 //put response
533 response["int_response_code"] = requestData.responseCode; 554 response["int_response_code"] = requestData.responseCode;
534 response["str_response_string"] = requestData.responseBody; 555 response["str_response_string"] = requestData.responseBody;
535 response["content_type"] = "text/plain"; 556 response["content_type"] = requestData.responseType;
536 response["keepalive"] = false; 557 response["keepalive"] = false;
537 response["reusecontext"] = false; 558 response["reusecontext"] = false;
538 559
@@ -600,6 +621,8 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
600 requestData.requestDone = false; 621 requestData.requestDone = false;
601 requestData.startTime = System.Environment.TickCount; 622 requestData.startTime = System.Environment.TickCount;
602 requestData.uri = uri; 623 requestData.uri = uri;
624 requestData.hostID = url.hostID;
625 requestData.scene = url.scene;
603 if (requestData.headers == null) 626 if (requestData.headers == null)
604 requestData.headers = new Dictionary<string, string>(); 627 requestData.headers = new Dictionary<string, string>();
605 628
@@ -608,6 +631,32 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
608 string key = (string)header.Key; 631 string key = (string)header.Key;
609 string value = (string)header.Value; 632 string value = (string)header.Value;
610 requestData.headers.Add(key, value); 633 requestData.headers.Add(key, value);
634 if (key == "cookie")
635 {
636 string[] parts = value.Split(new char[] {'='});
637 if (parts[0] == "agni_sl_session_id" && parts.Length > 1)
638 {
639 string cookie = Uri.UnescapeDataString(parts[1]);
640 string[] crumbs = cookie.Split(new char[] {':'});
641 UUID owner;
642 if (crumbs.Length == 2 && UUID.TryParse(crumbs[0], out owner))
643 {
644 if (crumbs[1].Length == 32)
645 {
646 Scene scene = requestData.scene;
647 if (scene != null)
648 {
649 SceneObjectPart host = scene.GetSceneObjectPart(requestData.hostID);
650 if (host != null)
651 {
652 if (host.OwnerID == owner)
653 requestData.allowResponseType = true;
654 }
655 }
656 }
657 }
658 }
659 }
611 } 660 }
612 foreach (DictionaryEntry de in request) 661 foreach (DictionaryEntry de in request)
613 { 662 {
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 317dfd8..dbc9296 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -940,6 +940,8 @@ namespace OpenSim.Region.CoreModules.World.Land
940 newLand.LandData.Name = newLand.LandData.Name; 940 newLand.LandData.Name = newLand.LandData.Name;
941 newLand.LandData.GlobalID = UUID.Random(); 941 newLand.LandData.GlobalID = UUID.Random();
942 newLand.LandData.Dwell = 0; 942 newLand.LandData.Dwell = 0;
943 // Clear "Show in search" on the cut out parcel to prevent double-charging
944 newLand.LandData.Flags &= ~(uint)ParcelFlags.ShowDirectory;
943 945
944 newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y)); 946 newLand.SetLandBitmap(newLand.GetSquareLandBitmap(start_x, start_y, end_x, end_y));
945 947
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs
index 4c96a50..14deeb6 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs
@@ -211,8 +211,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
211 { 211 {
212 if (regionInfos.Count == 0) 212 if (regionInfos.Count == 0)
213 remoteClient.SendAgentAlertMessage("No regions found with that name.", true); 213 remoteClient.SendAgentAlertMessage("No regions found with that name.", true);
214 else if (regionInfos.Count == 1) 214// else if (regionInfos.Count == 1)
215 remoteClient.SendAgentAlertMessage("Region found!", false); 215// remoteClient.SendAgentAlertMessage("Region found!", false);
216 } 216 }
217 }); 217 });
218 } 218 }
diff --git a/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs b/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs
new file mode 100644
index 0000000..7684ce3
--- /dev/null
+++ b/OpenSim/Region/Framework/Interfaces/IDynamicFloaterModule.cs
@@ -0,0 +1,52 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System.Collections.Generic;
29using OpenMetaverse;
30using OpenSim.Framework;
31using OpenSim.Region.Framework.Scenes;
32
33namespace OpenSim.Region.Framework.Interfaces
34{
35 public delegate bool HandlerDelegate(IClientAPI client, FloaterData data, string[] msg);
36
37 public abstract class FloaterData
38 {
39 public abstract int Channel { get; }
40 public abstract string FloaterName { get; set; }
41 public virtual string XmlName { get; set; }
42 public virtual string XmlText { get; set; }
43 public virtual HandlerDelegate Handler { get; set; }
44 }
45
46
47 public interface IDynamicFloaterModule
48 {
49 void DoUserFloater(UUID agentID, FloaterData dialogData, string configuration);
50 void FloaterControl(ScenePresence sp, FloaterData d, string msg);
51 }
52}
diff --git a/OpenSim/Region/Framework/Interfaces/IDynamicMenuModule.cs b/OpenSim/Region/Framework/Interfaces/IDynamicMenuModule.cs
index 08b71e4..4d000b6 100644
--- a/OpenSim/Region/Framework/Interfaces/IDynamicMenuModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IDynamicMenuModule.cs
@@ -43,6 +43,7 @@ namespace OpenSim.Region.Framework.Interfaces
43 public enum UserMode : int 43 public enum UserMode : int
44 { 44 {
45 Normal = 0, 45 Normal = 0,
46 RegionManager = 2,
46 God = 3 47 God = 3
47 } 48 }
48 49
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index b102e48..d773ee7 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -645,7 +645,7 @@ namespace OpenSim.Region.Framework.Scenes
645 m_nextPosition = m_group.AbsolutePosition + motionThisFrame; 645 m_nextPosition = m_group.AbsolutePosition + motionThisFrame;
646 m_group.AbsolutePosition = m_nextPosition; 646 m_group.AbsolutePosition = m_nextPosition;
647 647
648 m_group.RootPart.Velocity = v; 648 //m_group.RootPart.Velocity = v;
649 update = true; 649 update = true;
650 } 650 }
651 651
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 6ef83fb..436a544 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2454,6 +2454,14 @@ namespace OpenSim.Region.Framework.Scenes
2454 else 2454 else
2455 group.StopScriptInstances(); 2455 group.StopScriptInstances();
2456 2456
2457 List<UUID> avatars = group.GetSittingAvatars();
2458 foreach (UUID av in avatars)
2459 {
2460 ScenePresence p = GetScenePresence(av);
2461 if (p != null)
2462 p.StandUp();
2463 }
2464
2457 SceneObjectPart[] partList = group.Parts; 2465 SceneObjectPart[] partList = group.Parts;
2458 2466
2459 foreach (SceneObjectPart part in partList) 2467 foreach (SceneObjectPart part in partList)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 155e450..02a8935 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -272,6 +272,11 @@ namespace OpenSim.Region.Framework.Scenes
272 { 272 {
273 AttachmentPoint = 0; 273 AttachmentPoint = 0;
274 274
275 // Don't zap trees
276 if (RootPart.Shape.PCode == (byte)PCode.Tree ||
277 RootPart.Shape.PCode == (byte)PCode.NewTree)
278 return;
279
275 // Even though we don't use child part state parameters for attachments any more, we still need to set 280 // Even though we don't use child part state parameters for attachments any more, we still need to set
276 // these to zero since having them non-zero in rezzed scene objects will crash some clients. Even if 281 // these to zero since having them non-zero in rezzed scene objects will crash some clients. Even if
277 // we store them correctly, scene objects that we receive from elsewhere might not. 282 // we store them correctly, scene objects that we receive from elsewhere might not.
diff --git a/OpenSim/Region/Framework/Scenes/TerrainChannel.cs b/OpenSim/Region/Framework/Scenes/TerrainChannel.cs
index c0ca48e..b6e0a97 100644
--- a/OpenSim/Region/Framework/Scenes/TerrainChannel.cs
+++ b/OpenSim/Region/Framework/Scenes/TerrainChannel.cs
@@ -131,7 +131,15 @@ namespace OpenSim.Region.Framework.Scenes
131 131
132 public double this[int x, int y] 132 public double this[int x, int y]
133 { 133 {
134 get { return map[x, y]; } 134 get
135 {
136 if (x < 0) x = 0;
137 if (y < 0) y = 0;
138 if (x >= (int)Constants.RegionSize) x = (int)Constants.RegionSize - 1;
139 if (y >= (int)Constants.RegionSize) y = (int)Constants.RegionSize - 1;
140
141 return map[x, y];
142 }
135 set 143 set
136 { 144 {
137 // Will "fix" terrain hole problems. Although not fantastically. 145 // Will "fix" terrain hole problems. Although not fantastically.
diff --git a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs
new file mode 100644
index 0000000..e76e8f2
--- /dev/null
+++ b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicFloaterModule.cs
@@ -0,0 +1,238 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.IO;
30using System.Reflection;
31using System.Text;
32using System.Collections.Generic;
33using OpenMetaverse;
34using OpenMetaverse.StructuredData;
35using OpenSim;
36using OpenSim.Region;
37using OpenSim.Region.Framework;
38using OpenSim.Region.Framework.Scenes;
39using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Framework;
41using OpenSim.Framework.Servers;
42using OpenSim.Framework.Servers.HttpServer;
43using Nini.Config;
44using log4net;
45using Mono.Addins;
46using Caps = OpenSim.Framework.Capabilities.Caps;
47using OSDMap = OpenMetaverse.StructuredData.OSDMap;
48
49namespace OpenSim.Region.OptionalModules.ViewerSupport
50{
51 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DynamicFloater")]
52 public class DynamicFloaterModule : INonSharedRegionModule, IDynamicFloaterModule
53 {
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55
56 private Scene m_scene;
57
58 private Dictionary<UUID, Dictionary<int, FloaterData>> m_floaters = new Dictionary<UUID, Dictionary<int, FloaterData>>();
59
60 public string Name
61 {
62 get { return "DynamicFloaterModule"; }
63 }
64
65 public Type ReplaceableInterface
66 {
67 get { return null; }
68 }
69
70 public void Initialise(IConfigSource config)
71 {
72 }
73
74 public void Close()
75 {
76 }
77
78 public void AddRegion(Scene scene)
79 {
80 m_scene = scene;
81 scene.EventManager.OnNewClient += OnNewClient;
82 scene.EventManager.OnClientClosed += OnClientClosed;
83 m_scene.RegisterModuleInterface<IDynamicFloaterModule>(this);
84 }
85
86 public void RegionLoaded(Scene scene)
87 {
88 }
89
90 public void RemoveRegion(Scene scene)
91 {
92 }
93
94 private void OnNewClient(IClientAPI client)
95 {
96 client.OnChatFromClient += OnChatFromClient;
97 }
98
99 private void OnClientClosed(UUID agentID, Scene scene)
100 {
101 m_floaters.Remove(agentID);
102 }
103
104 private void SendToClient(ScenePresence sp, string msg)
105 {
106 sp.ControllingClient.SendChatMessage(msg,
107 (byte)ChatTypeEnum.Owner,
108 sp.AbsolutePosition,
109 "Server",
110 UUID.Zero,
111 UUID.Zero,
112 (byte)ChatSourceType.Object,
113 (byte)ChatAudibleLevel.Fully);
114 }
115
116 public void DoUserFloater(UUID agentID, FloaterData dialogData, string configuration)
117 {
118 ScenePresence sp = m_scene.GetScenePresence(agentID);
119 if (sp == null || sp.IsChildAgent)
120 return;
121
122 if (!m_floaters.ContainsKey(agentID))
123 m_floaters[agentID] = new Dictionary<int, FloaterData>();
124
125 if (m_floaters[agentID].ContainsKey(dialogData.Channel))
126 return;
127
128 m_floaters[agentID].Add(dialogData.Channel, dialogData);
129
130 string xml;
131 if (dialogData.XmlText != null && dialogData.XmlText != String.Empty)
132 {
133 xml = dialogData.XmlText;
134 }
135 else
136 {
137 using (FileStream fs = File.Open(dialogData.XmlName + ".xml", FileMode.Open))
138 {
139 using (StreamReader sr = new StreamReader(fs))
140 xml = sr.ReadToEnd().Replace("\n", "");
141 }
142 }
143
144 List<string> xparts = new List<string>();
145
146 while (xml.Length > 0)
147 {
148 string x = xml;
149 if (x.Length > 600)
150 {
151 x = x.Substring(0, 600);
152 xml = xml.Substring(600);
153 }
154 else
155 {
156 xml = String.Empty;
157 }
158
159 xparts.Add(x);
160 }
161
162 for (int i = 0 ; i < xparts.Count ; i++)
163 SendToClient(sp, String.Format("># floater {2} create {0}/{1} " + xparts[i], i + 1, xparts.Count, dialogData.FloaterName));
164
165 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));
166 }
167
168 private void OnChatFromClient(object sender, OSChatMessage msg)
169 {
170 if (msg.Sender == null)
171 return;
172
173 //m_log.DebugFormat("chan {0} msg {1}", msg.Channel, msg.Message);
174
175 IClientAPI client = msg.Sender;
176
177 if (!m_floaters.ContainsKey(client.AgentId))
178 return;
179
180 string[] parts = msg.Message.Split(new char[] {':'});
181 if (parts.Length == 0)
182 return;
183
184 ScenePresence sp = m_scene.GetScenePresence(client.AgentId);
185 if (sp == null || sp.IsChildAgent)
186 return;
187
188 Dictionary<int, FloaterData> d = m_floaters[client.AgentId];
189
190 // Work around a viewer bug - VALUE from any
191 // dialog can appear on this channel and needs to
192 // be dispatched to ALL open dialogs for the user
193 if (msg.Channel == 427169570)
194 {
195 if (parts[0] == "VALUE")
196 {
197 foreach (FloaterData dd in d.Values)
198 {
199 if(dd.Handler(client, dd, parts))
200 {
201 m_floaters[client.AgentId].Remove(dd.Channel);
202 SendToClient(sp, String.Format("># floater {0} destroy", dd.FloaterName));
203 break;
204 }
205 }
206 }
207 return;
208 }
209
210 if (!d.ContainsKey(msg.Channel))
211 return;
212
213 FloaterData data = d[msg.Channel];
214
215 if (parts[0] == "NOTIFY")
216 {
217 if (parts[1] == "cancel" || parts[1] == data.FloaterName)
218 {
219 m_floaters[client.AgentId].Remove(data.Channel);
220 SendToClient(sp, String.Format("># floater {0} destroy", data.FloaterName));
221 }
222 }
223
224 if (data.Handler != null && data.Handler(client, data, parts))
225 {
226 m_floaters[client.AgentId].Remove(data.Channel);
227 SendToClient(sp, String.Format("># floater {0} destroy", data.FloaterName));
228 }
229 }
230
231 public void FloaterControl(ScenePresence sp, FloaterData d, string msg)
232 {
233 string sendData = String.Format("># floater {0} {1}", d.FloaterName, msg);
234 SendToClient(sp, sendData);
235
236 }
237 }
238}
diff --git a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs
index 917911f..c68fe99 100644
--- a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs
+++ b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs
@@ -110,8 +110,11 @@ namespace OpenSim.Region.OptionalModules.ViewerSupport
110 { 110 {
111 foreach (MenuItemData d in m_menuItems[UUID.Zero]) 111 foreach (MenuItemData d in m_menuItems[UUID.Zero])
112 { 112 {
113 if (d.Mode == UserMode.God && (!m_scene.Permissions.IsGod(agentID))) 113 if (!m_scene.Permissions.IsGod(agentID))
114 continue; 114 {
115 if (d.Mode == UserMode.RegionManager && (!m_scene.Permissions.IsAdministrator(agentID)))
116 continue;
117 }
115 118
116 OSDMap loc = null; 119 OSDMap loc = null;
117 switch (d.Location) 120 switch (d.Location)
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
index bea34d4..e912997 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs
@@ -1045,12 +1045,37 @@ namespace OpenSim.Region.Physics.OdePlugin
1045 if (me == midbox) 1045 if (me == midbox)
1046 { 1046 {
1047 if (Math.Abs(contact.normal.Z) > 0.95f) 1047 if (Math.Abs(contact.normal.Z) > 0.95f)
1048 {
1048 offset.Z = contact.pos.Z - _position.Z; 1049 offset.Z = contact.pos.Z - _position.Z;
1050 offset.X = (float)Math.Abs(offset.X) * 0.5f + contact.depth;
1051 offset.Y = (float)Math.Abs(offset.Y) * 0.5f + contact.depth;
1052 offset.Z = (float)Math.Abs(offset.Z) * 0.5f + contact.depth;
1053
1054 if (reverse)
1055 {
1056 offset.X *= -contact.normal.X;
1057 offset.Y *= -contact.normal.Y;
1058 offset.Z *= -contact.normal.Z;
1059 }
1060 else
1061 {
1062 offset.X *= contact.normal.X;
1063 offset.Y *= contact.normal.Y;
1064 offset.Z *= contact.normal.Z;
1065 }
1066
1067 offset.X += contact.pos.X;
1068 offset.Y += contact.pos.Y;
1069 offset.Z += contact.pos.Z;
1070 _position = offset;
1071 return true;
1072 }
1049 else 1073 else
1050 offset.Z = contact.normal.Z; 1074 offset.Z = contact.normal.Z;
1051 1075
1052 offset.Normalize(); 1076 offset.Normalize();
1053 1077
1078 /*
1054 if (reverse) 1079 if (reverse)
1055 { 1080 {
1056 contact.normal.X = offset.X; 1081 contact.normal.X = offset.X;
@@ -1063,7 +1088,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1063 contact.normal.Y = -offset.Y; 1088 contact.normal.Y = -offset.Y;
1064 contact.normal.Z = -offset.Z; 1089 contact.normal.Z = -offset.Z;
1065 } 1090 }
1066 1091 */
1092 //_position.Z = offset.Z;
1067 return true; 1093 return true;
1068 } 1094 }
1069 1095
@@ -1071,8 +1097,20 @@ namespace OpenSim.Region.Physics.OdePlugin
1071 { 1097 {
1072 float h = contact.pos.Z - _position.Z; 1098 float h = contact.pos.Z - _position.Z;
1073 1099
1100 // Only do this if the normal is sufficiently pointing in the 'up' direction
1074 if (Math.Abs(contact.normal.Z) > 0.95f) 1101 if (Math.Abs(contact.normal.Z) > 0.95f)
1075 { 1102 {
1103 // 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
1104 if ((contact.depth > 0.0010f && _velocity.X == 0f && _velocity.Y == 0 && _velocity.Z == 0)
1105 && (_target_velocity.X > 0 || _target_velocity.Y > 0 || _target_velocity.Z > 0)
1106 && (!feetcollision) )
1107 {
1108 m_collisionException = true; // Stop looping, do this only once not X times Contacts
1109 _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.
1110
1111 return true;
1112 }
1113
1076 if (contact.normal.Z > 0) 1114 if (contact.normal.Z > 0)
1077 contact.normal.Z = 1.0f; 1115 contact.normal.Z = 1.0f;
1078 else 1116 else
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 0199461..7c375e6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4643,20 +4643,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4643 ScenePresence presence = World.GetScenePresence(agentId); 4643 ScenePresence presence = World.GetScenePresence(agentId);
4644 if (presence != null && presence.PresenceType != PresenceType.Npc) 4644 if (presence != null && presence.PresenceType != PresenceType.Npc)
4645 { 4645 {
4646 // agent must not be a god
4647 if (presence.GodLevel >= 200) return;
4648
4649 if (destination == String.Empty) 4646 if (destination == String.Empty)
4650 destination = World.RegionInfo.RegionName; 4647 destination = World.RegionInfo.RegionName;
4651 4648
4652 // agent must be over the owners land 4649 if (m_item.PermsGranter == agentId)
4653 if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) 4650 {
4651 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TELEPORT) != 0)
4652 {
4653 DoLLTeleport(presence, destination, targetPos, targetLookAt);
4654 }
4655 }
4656
4657 // agent must be wearing the object
4658 if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID)
4654 { 4659 {
4655 DoLLTeleport(presence, destination, targetPos, targetLookAt); 4660 DoLLTeleport(presence, destination, targetPos, targetLookAt);
4656 } 4661 }
4657 else // or must be wearing the prim 4662 else
4658 { 4663 {
4659 if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID) 4664 // agent must not be a god
4665 if (presence.GodLevel >= 200) return;
4666
4667 // agent must be over the owners land
4668 ILandObject agentLand = World.LandChannel.GetLandObject(presence.AbsolutePosition);
4669 ILandObject objectLand = World.LandChannel.GetLandObject(m_host.AbsolutePosition);
4670 if (m_host.OwnerID == objectLand.LandData.OwnerID && m_host.OwnerID == agentLand.LandData.OwnerID)
4660 { 4671 {
4661 DoLLTeleport(presence, destination, targetPos, targetLookAt); 4672 DoLLTeleport(presence, destination, targetPos, targetLookAt);
4662 } 4673 }
@@ -4670,24 +4681,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4670 m_host.AddScriptLPS(1); 4681 m_host.AddScriptLPS(1);
4671 UUID agentId = new UUID(); 4682 UUID agentId = new UUID();
4672 4683
4673 ulong regionHandle = Utils.UIntsToLong((uint)global_coords.x, (uint)global_coords.y); 4684 ulong regionHandle = Utils.UIntsToLong((uint)(global_coords.x / 256) * 256, (uint)(global_coords.y / 256) * 256);
4674 4685
4675 if (UUID.TryParse(agent, out agentId)) 4686 if (UUID.TryParse(agent, out agentId))
4676 { 4687 {
4688 // This function is owner only!
4689 if (m_host.OwnerID != agentId)
4690 return;
4691
4677 ScenePresence presence = World.GetScenePresence(agentId); 4692 ScenePresence presence = World.GetScenePresence(agentId);
4693
4694 // Can't TP sitting avatars
4695 if (presence.ParentID != 0) // Sitting
4696 return;
4697
4678 if (presence != null && presence.PresenceType != PresenceType.Npc) 4698 if (presence != null && presence.PresenceType != PresenceType.Npc)
4679 { 4699 {
4680 // agent must not be a god 4700 if (m_item.PermsGranter == agentId)
4681 if (presence.GodLevel >= 200) return;
4682
4683 // agent must be over the owners land
4684 if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID)
4685 {
4686 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
4687 }
4688 else // or must be wearing the prim
4689 { 4701 {
4690 if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID) 4702 // If attached using llAttachToAvatarTemp, cowardly refuse
4703 if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.ParentGroup.FromItemID == UUID.Zero)
4704 return;
4705
4706 if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TELEPORT) != 0)
4691 { 4707 {
4692 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); 4708 World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation);
4693 } 4709 }
@@ -7853,6 +7869,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7853 } 7869 }
7854 } 7870 }
7855 7871
7872 public LSL_List llGetPhysicsMaterial()
7873 {
7874 LSL_List result = new LSL_List();
7875
7876 result.Add(new LSL_Float(m_host.GravityModifier));
7877 result.Add(new LSL_Float(m_host.Restitution));
7878 result.Add(new LSL_Float(m_host.Friction));
7879 result.Add(new LSL_Float(m_host.Density));
7880
7881 return result;
7882 }
7883
7856 private void SetPhysicsMaterial(SceneObjectPart part, int material_bits, 7884 private void SetPhysicsMaterial(SceneObjectPart part, int material_bits,
7857 float material_density, float material_friction, 7885 float material_density, float material_friction,
7858 float material_restitution, float material_gravity_modifier) 7886 float material_restitution, float material_gravity_modifier)
@@ -13379,6 +13407,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
13379 13407
13380 return null; 13408 return null;
13381 } 13409 }
13410
13411 public void llSetContentType(LSL_Key id, LSL_Integer content_type)
13412 {
13413 if (m_UrlModule != null)
13414 {
13415 string type = "text.plain";
13416 if (content_type == (int)ScriptBaseClass.CONTENT_TYPE_HTML)
13417 type = "text/html";
13418
13419 m_UrlModule.HttpContentType(new UUID(id),type);
13420 }
13421 }
13382 } 13422 }
13383 13423
13384 public class NotecardCache 13424 public class NotecardCache
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
index 884f07c..a47e452 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs
@@ -398,7 +398,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
398 objtype = 0; 398 objtype = 0;
399 399
400 part = ((SceneObjectGroup)ent).RootPart; 400 part = ((SceneObjectGroup)ent).RootPart;
401 if (part.ParentGroup.AttachmentPoint != 0) // Attached so ignore 401 if (part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.Tree &&
402 part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.NewTree &&
403 part.ParentGroup.AttachmentPoint != 0) // Attached so ignore
402 continue; 404 continue;
403 405
404 if (part.Inventory.ContainsScripts()) 406 if (part.Inventory.ContainsScripts())
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
index 9bf6f9b..daf89e5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs
@@ -433,5 +433,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
433 void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc); 433 void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc);
434 void llSetKeyframedMotion(LSL_List frames, LSL_List options); 434 void llSetKeyframedMotion(LSL_List frames, LSL_List options);
435 LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules); 435 LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules);
436 LSL_List llGetPhysicsMaterial();
437 void llSetContentType(LSL_Key id, LSL_Integer content_type);
436 } 438 }
437} 439}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
index 2f8154d..6efa73f 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs
@@ -80,6 +80,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
80 public const int PERMISSION_CHANGE_PERMISSIONS = 512; 80 public const int PERMISSION_CHANGE_PERMISSIONS = 512;
81 public const int PERMISSION_TRACK_CAMERA = 1024; 81 public const int PERMISSION_TRACK_CAMERA = 1024;
82 public const int PERMISSION_CONTROL_CAMERA = 2048; 82 public const int PERMISSION_CONTROL_CAMERA = 2048;
83 public const int PERMISSION_TELEPORT = 4096;
83 84
84 public const int AGENT_FLYING = 1; 85 public const int AGENT_FLYING = 1;
85 public const int AGENT_ATTACHMENTS = 2; 86 public const int AGENT_ATTACHMENTS = 2;
@@ -771,5 +772,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
771 /// process message parameter as regex 772 /// process message parameter as regex
772 /// </summary> 773 /// </summary>
773 public const int OS_LISTEN_REGEX_MESSAGE = 0x2; 774 public const int OS_LISTEN_REGEX_MESSAGE = 0x2;
775
776 public const int CONTENT_TYPE_TEXT = 0;
777 public const int CONTENT_TYPE_HTML = 1;
774 } 778 }
775} 779}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
index 8ecc4f8..6f3677c 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs
@@ -2009,5 +2009,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
2009 { 2009 {
2010 m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density); 2010 m_LSL_Functions.llSetPhysicsMaterial(material_bits, material_gravity_modifier, material_restitution, material_friction, material_density);
2011 } 2011 }
2012
2013 public LSL_List llGetPhysicsMaterial()
2014 {
2015 return m_LSL_Functions.llGetPhysicsMaterial();
2016 }
2017
2018 public void llSetContentType(LSL_Key id, LSL_Integer content_type)
2019 {
2020 m_LSL_Functions.llSetContentType(id, content_type);
2021 }
2012 } 2022 }
2013} 2023}