aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs40
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs23
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs50
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs12
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs12
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/KeyframeMotion.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs9
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs6
-rw-r--r--OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs3
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs8
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs56
19 files changed, 165 insertions, 93 deletions
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 7361f50..88bd869 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -195,7 +195,9 @@ namespace OpenSim
195 195
196 m_securePermissionsLoading = startupConfig.GetBoolean("SecurePermissionsLoading", true); 196 m_securePermissionsLoading = startupConfig.GetBoolean("SecurePermissionsLoading", true);
197 197
198 string permissionModules = startupConfig.GetString("permissionmodules", "DefaultPermissionsModule"); 198 string permissionModules = Util.GetConfigVarFromSections<string>(Config, "permissionmodules",
199 new string[] { "Startup", "Permissions" }, "DefaultPermissionsModule");
200
199 m_permsModules = new List<string>(permissionModules.Split(',')); 201 m_permsModules = new List<string>(permissionModules.Split(','));
200 } 202 }
201 203
@@ -392,29 +394,19 @@ namespace OpenSim
392 } 394 }
393 else m_log.Error("[REGIONMODULES]: The new RegionModulesController is missing..."); 395 else m_log.Error("[REGIONMODULES]: The new RegionModulesController is missing...");
394 396
395 // XPTO: Fix this 397 if (m_securePermissionsLoading)
396// if (m_securePermissionsLoading) 398 {
397// { 399 foreach (string s in m_permsModules)
398// foreach (string s in m_permsModules) 400 {
399// { 401 if (!scene.RegionModules.ContainsKey(s))
400// if (!scene.RegionModules.ContainsKey(s)) 402 {
401// { 403 m_log.Fatal("[MODULES]: Required module " + s + " not found.");
402// bool found = false; 404 Environment.Exit(0);
403// foreach (IRegionModule m in modules) 405 }
404// { 406 }
405// if (m.Name == s) 407
406// { 408 m_log.InfoFormat("[SCENE]: Secure permissions loading enabled, modules loaded: {0}", String.Join(" ", m_permsModules.ToArray()));
407// found = true; 409 }
408// }
409// }
410// if (!found)
411// {
412// m_log.Fatal("[MODULES]: Required module " + s + " not found.");
413// Environment.Exit(0);
414// }
415// }
416// }
417// }
418 410
419 scene.SetModuleInterfaces(); 411 scene.SetModuleInterfaces();
420// First Step of bootreport sequence 412// First Step of bootreport sequence
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 59b9585..8241e07 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -990,13 +990,20 @@ namespace OpenSim.Region.ClientStack.Linden
990 else 990 else
991 prim.Name = assetName + "#" + i.ToString(); 991 prim.Name = assetName + "#" + i.ToString();
992 992
993 prim.EveryoneMask = 0;
994 prim.GroupMask = 0;
995
993 if (restrictPerms) 996 if (restrictPerms)
994 { 997 {
995 prim.BaseMask = (uint)(PermissionMask.Move | PermissionMask.Modify); 998 prim.BaseMask = (uint)(PermissionMask.Move | PermissionMask.Modify);
996 prim.EveryoneMask = 0;
997 prim.GroupMask = 0;
998 prim.NextOwnerMask = 0;
999 prim.OwnerMask = (uint)(PermissionMask.Move | PermissionMask.Modify); 999 prim.OwnerMask = (uint)(PermissionMask.Move | PermissionMask.Modify);
1000 prim.NextOwnerMask = 0;
1001 }
1002 else
1003 {
1004 prim.BaseMask = (uint)PermissionMask.All | (uint)PermissionMask.Export;
1005 prim.OwnerMask = (uint)PermissionMask.All | (uint)PermissionMask.Export;
1006 prim.NextOwnerMask = (uint)PermissionMask.Transfer;
1000 } 1007 }
1001 1008
1002 if(istest) 1009 if(istest)
@@ -1099,21 +1106,17 @@ namespace OpenSim.Region.ClientStack.Linden
1099 1106
1100 if (restrictPerms) 1107 if (restrictPerms)
1101 { 1108 {
1102 item.CurrentPermissions
1103 = (uint)(PermissionMask.Move | PermissionMask.Modify);
1104
1105 item.BasePermissions = (uint)(PermissionMask.Move | PermissionMask.Modify); 1109 item.BasePermissions = (uint)(PermissionMask.Move | PermissionMask.Modify);
1110 item.CurrentPermissions = (uint)(PermissionMask.Move | PermissionMask.Modify);
1106 item.EveryOnePermissions = 0; 1111 item.EveryOnePermissions = 0;
1107 item.NextPermissions = 0; 1112 item.NextPermissions = 0;
1108 } 1113 }
1109 else 1114 else
1110 { 1115 {
1111 item.CurrentPermissions
1112 = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer | PermissionMask.Export);
1113
1114 item.BasePermissions = (uint)PermissionMask.All | (uint)PermissionMask.Export; 1116 item.BasePermissions = (uint)PermissionMask.All | (uint)PermissionMask.Export;
1117 item.CurrentPermissions = (uint)PermissionMask.All | (uint)PermissionMask.Export;
1115 item.EveryOnePermissions = 0; 1118 item.EveryOnePermissions = 0;
1116 item.NextPermissions = (uint)PermissionMask.All; 1119 item.NextPermissions = (uint)PermissionMask.Transfer;
1117 } 1120 }
1118 1121
1119 item.CreationDate = Util.UnixTimeSinceEpoch(); 1122 item.CreationDate = Util.UnixTimeSinceEpoch();
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
index a42c96c..0570144 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
@@ -77,6 +77,8 @@ namespace OpenSim.Region.ClientStack.Linden
77 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>(); 77 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
78 private static Thread[] m_workerThreads = null; 78 private static Thread[] m_workerThreads = null;
79 79
80 private string m_Url = "localhost";
81
80 private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue = 82 private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
81 new OpenMetaverse.BlockingQueue<aPollRequest>(); 83 new OpenMetaverse.BlockingQueue<aPollRequest>();
82 84
@@ -86,6 +88,9 @@ namespace OpenSim.Region.ClientStack.Linden
86 88
87 public void Initialise(IConfigSource source) 89 public void Initialise(IConfigSource source)
88 { 90 {
91 IConfig config = source.Configs["ClientStack.LindenCaps"];
92 if (config != null)
93 m_Url = config.GetString("Cap_GetTexture", "localhost");
89 } 94 }
90 95
91 public void AddRegion(Scene s) 96 public void AddRegion(Scene s)
@@ -343,27 +348,34 @@ namespace OpenSim.Region.ClientStack.Linden
343 348
344 private void RegisterCaps(UUID agentID, Caps caps) 349 private void RegisterCaps(UUID agentID, Caps caps)
345 { 350 {
346 string capUrl = "/CAPS/" + UUID.Random() + "/"; 351 if (m_Url == "localhost")
347 352 {
348 // Register this as a poll service 353 string capUrl = "/CAPS/" + UUID.Random() + "/";
349 PollServiceTextureEventArgs args = new PollServiceTextureEventArgs(agentID, m_scene); 354
350 355 // Register this as a poll service
351 args.Type = PollServiceEventArgs.EventType.Texture; 356 PollServiceTextureEventArgs args = new PollServiceTextureEventArgs(agentID, m_scene);
352 MainServer.Instance.AddPollServiceHTTPHandler(capUrl, args); 357
353 358 args.Type = PollServiceEventArgs.EventType.Texture;
354 string hostName = m_scene.RegionInfo.ExternalHostName; 359 MainServer.Instance.AddPollServiceHTTPHandler(capUrl, args);
355 uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port; 360
356 string protocol = "http"; 361 string hostName = m_scene.RegionInfo.ExternalHostName;
357 362 uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port;
358 if (MainServer.Instance.UseSSL) 363 string protocol = "http";
364
365 if (MainServer.Instance.UseSSL)
366 {
367 hostName = MainServer.Instance.SSLCommonName;
368 port = MainServer.Instance.SSLPort;
369 protocol = "https";
370 }
371 caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
372 m_pollservices[agentID] = args;
373 m_capsDict[agentID] = capUrl;
374 }
375 else
359 { 376 {
360 hostName = MainServer.Instance.SSLCommonName; 377 caps.RegisterHandler("GetTexture", m_Url);
361 port = MainServer.Instance.SSLPort;
362 protocol = "https";
363 } 378 }
364 caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl));
365 m_pollservices[agentID] = args;
366 m_capsDict[agentID] = capUrl;
367 } 379 }
368 380
369 private void DeregisterCaps(UUID agentID, Caps caps) 381 private void DeregisterCaps(UUID agentID, Caps caps)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index eebb8ae..f4ea975 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3933,6 +3933,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3933 part.Shape.ProfileHollow = 27500; 3933 part.Shape.ProfileHollow = 27500;
3934 } 3934 }
3935 } 3935 }
3936 else if (update.Entity is ScenePresence)
3937 {
3938 ScenePresence presence = (ScenePresence)update.Entity;
3939
3940 // If ParentUUID is not UUID.Zero and ParentID is 0, this
3941 // avatar is in the process of crossing regions while
3942 // sat on an object. In this state, we don't want any
3943 // updates because they will visually orbit the avatar.
3944 // Update will be forced once crossing is completed anyway.
3945 if (presence.ParentUUID != UUID.Zero && presence.ParentID == 0)
3946 continue;
3947 }
3936 3948
3937 ++updatesThisCall; 3949 ++updatesThisCall;
3938 3950
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index f2f789b..6495f3f 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -302,7 +302,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
302 // If we're an NPC then skip all the item checks and manipulations since we don't have an 302 // If we're an NPC then skip all the item checks and manipulations since we don't have an
303 // inventory right now. 303 // inventory right now.
304 RezSingleAttachmentFromInventoryInternal( 304 RezSingleAttachmentFromInventoryInternal(
305 sp, sp.PresenceType == PresenceType.Npc ? UUID.Zero : attach.ItemID, attach.AssetID, p, true, null); 305 sp, sp.PresenceType == PresenceType.Npc ? UUID.Zero : attach.ItemID, attach.AssetID, p, true, d);
306 } 306 }
307 catch (Exception e) 307 catch (Exception e)
308 { 308 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
index 343cdb5..c52d586 100644
--- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs
@@ -182,6 +182,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule
182 try 182 try
183 { 183 {
184 ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); 184 ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
185 if (obj == null)
186 return;
185 if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0 187 if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0
186 || avatar.Scene.RegionInfo.RegionSettings.AllowDamage) 188 || avatar.Scene.RegionInfo.RegionSettings.AllowDamage)
187 { 189 {
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index 4c11135..d09ea3e 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -265,7 +265,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
265 return UUID.Zero; 265 return UUID.Zero;
266 } 266 }
267 267
268 remoteClient.SendAgentAlertMessage("Notecard saved", false); 268 remoteClient.SendAlertMessage("Notecard saved");
269 } 269 }
270 else if ((InventoryType)item.InvType == InventoryType.LSL) 270 else if ((InventoryType)item.InvType == InventoryType.LSL)
271 { 271 {
@@ -275,7 +275,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
275 return UUID.Zero; 275 return UUID.Zero;
276 } 276 }
277 277
278 remoteClient.SendAgentAlertMessage("Script saved", false); 278 remoteClient.SendAlertMessage("Script saved");
279 } 279 }
280 280
281 AssetBase asset = 281 AssetBase asset =
@@ -788,6 +788,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
788 XmlDocument doc = new XmlDocument(); 788 XmlDocument doc = new XmlDocument();
789 doc.LoadXml(xmlData); 789 doc.LoadXml(xmlData);
790 XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject"); 790 XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject");
791 Vector3 rez_pos;
791 if (e == null || attachment) // Single 792 if (e == null || attachment) // Single
792 { 793 {
793 SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); 794 SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData);
@@ -809,6 +810,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
809 RayStart, RayEnd, RayTargetID, Quaternion.Identity, 810 RayStart, RayEnd, RayTargetID, Quaternion.Identity,
810 BypassRayCast, bRayEndIsIntersection, true, g.GetAxisAlignedBoundingBox(out offsetHeight), false); 811 BypassRayCast, bRayEndIsIntersection, true, g.GetAxisAlignedBoundingBox(out offsetHeight), false);
811 pos.Z += offsetHeight; 812 pos.Z += offsetHeight;
813 rez_pos = pos;
812 } 814 }
813 else 815 else
814 { 816 {
@@ -823,6 +825,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
823 BypassRayCast, bRayEndIsIntersection, true, 825 BypassRayCast, bRayEndIsIntersection, true,
824 bbox, false); 826 bbox, false);
825 827
828 rez_pos = pos;
829
826 pos -= bbox / 2; 830 pos -= bbox / 2;
827 831
828 XmlNodeList groups = e.SelectNodes("SceneObjectGroup"); 832 XmlNodeList groups = e.SelectNodes("SceneObjectGroup");
@@ -859,7 +863,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
859 primcount += g.PrimCount; 863 primcount += g.PrimCount;
860 864
861 if (!m_Scene.Permissions.CanRezObject( 865 if (!m_Scene.Permissions.CanRezObject(
862 primcount, remoteClient.AgentId, pos) 866 primcount, remoteClient.AgentId, rez_pos)
863 && !attachment) 867 && !attachment)
864 { 868 {
865 // The client operates in no fail mode. It will 869 // The client operates in no fail mode. It will
@@ -876,7 +880,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
876 return null; 880 return null;
877 } 881 }
878 882
879 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) 883 if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, rez_pos, attachment))
880 return null; 884 return null;
881 885
882 for (int i = 0; i < objlist.Count; i++) 886 for (int i = 0; i < objlist.Count; i++)
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 79dd4a0..26e9131 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -42,8 +42,8 @@ using PermissionMask = OpenSim.Framework.PermissionMask;
42 42
43namespace OpenSim.Region.CoreModules.World.Permissions 43namespace OpenSim.Region.CoreModules.World.Permissions
44{ 44{
45 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "PermissionsModule")] 45 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DefaultPermissionsModule")]
46 public class PermissionsModule : INonSharedRegionModule, IPermissionsModule 46 public class DefaultPermissionsModule : INonSharedRegionModule, IPermissionsModule
47 { 47 {
48 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 48 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
49 49
@@ -348,7 +348,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
348 348
349 public string Name 349 public string Name
350 { 350 {
351 get { return "PermissionsModule"; } 351 get { return "DefaultPermissionsModule"; }
352 } 352 }
353 353
354 public Type ReplaceableInterface 354 public Type ReplaceableInterface
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index 09481a7..f0e639d 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -662,7 +662,7 @@ namespace OpenSim.Region.Framework.Scenes
662 662
663 // Do the frame processing 663 // Do the frame processing
664 double steps = (double)m_currentFrame.TimeMS / tickDuration; 664 double steps = (double)m_currentFrame.TimeMS / tickDuration;
665 665
666 if (steps <= 0.0) 666 if (steps <= 0.0)
667 { 667 {
668 m_group.RootPart.Velocity = Vector3.Zero; 668 m_group.RootPart.Velocity = Vector3.Zero;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 2b58795..b189599 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2802,8 +2802,10 @@ namespace OpenSim.Region.Framework.Scenes
2802 newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject)); 2802 newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
2803 newObject.ResumeScripts(); 2803 newObject.ResumeScripts();
2804 2804
2805 if (newObject.RootPart.KeyframeMotion != null) 2805 // AddSceneObject already does this and doing it again messes
2806 newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject); 2806 // up region crossings, so don't.
2807 //if (newObject.RootPart.KeyframeMotion != null)
2808 // newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject);
2807 } 2809 }
2808 2810
2809 // Do this as late as possible so that listeners have full access to the incoming object 2811 // Do this as late as possible so that listeners have full access to the incoming object
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 0ea4e09..3e1dcaa 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -591,6 +591,7 @@ namespace OpenSim.Region.Framework.Scenes
591 avinfo.ParentID = av.ParentID; 591 avinfo.ParentID = av.ParentID;
592 avsToCross.Add(avinfo); 592 avsToCross.Add(avinfo);
593 593
594 av.PrevSitOffset = av.OffsetPosition;
594 av.ParentID = 0; 595 av.ParentID = 0;
595 } 596 }
596 597
@@ -1072,6 +1073,11 @@ namespace OpenSim.Region.Framework.Scenes
1072 for (int i = 0; i < parts.Length; i++) 1073 for (int i = 0; i < parts.Length; i++)
1073 { 1074 {
1074 SceneObjectPart part = parts[i]; 1075 SceneObjectPart part = parts[i];
1076 if (part.KeyframeMotion != null)
1077 {
1078 part.KeyframeMotion.UpdateSceneObject(this);
1079 }
1080
1075 if (Object.ReferenceEquals(part, m_rootPart)) 1081 if (Object.ReferenceEquals(part, m_rootPart))
1076 continue; 1082 continue;
1077 1083
@@ -3483,8 +3489,8 @@ namespace OpenSim.Region.Framework.Scenes
3483 part.ClonePermissions(RootPart); 3489 part.ClonePermissions(RootPart);
3484 }); 3490 });
3485 3491
3486 uint lockMask = ~(uint)PermissionMask.Move; 3492 uint lockMask = ~(uint)(PermissionMask.Move | PermissionMask.Modify);
3487 uint lockBit = RootPart.OwnerMask & (uint)PermissionMask.Move; 3493 uint lockBit = RootPart.OwnerMask & (uint)(PermissionMask.Move | PermissionMask.Modify);
3488 RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask); 3494 RootPart.OwnerMask = (RootPart.OwnerMask & lockBit) | ((newOwnerMask | foldedPerms) & lockMask);
3489 RootPart.ScheduleFullUpdate(); 3495 RootPart.ScheduleFullUpdate();
3490 } 3496 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 0ab267a..7004d23 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -242,7 +242,7 @@ namespace OpenSim.Region.Framework.Scenes
242 242
243 private int m_movementAnimationUpdateCounter = 0; 243 private int m_movementAnimationUpdateCounter = 0;
244 244
245 private Vector3 m_prevSitOffset; 245 public Vector3 PrevSitOffset { get; set; }
246 246
247 protected AvatarAppearance m_appearance; 247 protected AvatarAppearance m_appearance;
248 248
@@ -957,7 +957,7 @@ namespace OpenSim.Region.Framework.Scenes
957// ParentPosition = part.GetWorldPosition(); 957// ParentPosition = part.GetWorldPosition();
958 ParentID = part.LocalId; 958 ParentID = part.LocalId;
959 ParentPart = part; 959 ParentPart = part;
960 m_pos = m_prevSitOffset; 960 m_pos = PrevSitOffset;
961// pos = ParentPosition; 961// pos = ParentPosition;
962 pos = part.GetWorldPosition(); 962 pos = part.GetWorldPosition();
963 } 963 }
@@ -2261,6 +2261,7 @@ namespace OpenSim.Region.Framework.Scenes
2261 2261
2262 if (ParentID != 0) 2262 if (ParentID != 0)
2263 { 2263 {
2264 PrevSitOffset = m_pos; // Save sit offset
2264 SceneObjectPart part = ParentPart; 2265 SceneObjectPart part = ParentPart;
2265 UnRegisterSeatControls(part.ParentGroup.UUID); 2266 UnRegisterSeatControls(part.ParentGroup.UUID);
2266 2267
@@ -3487,7 +3488,7 @@ namespace OpenSim.Region.Framework.Scenes
3487 cAgent.Appearance = new AvatarAppearance(Appearance); 3488 cAgent.Appearance = new AvatarAppearance(Appearance);
3488 3489
3489 cAgent.ParentPart = ParentUUID; 3490 cAgent.ParentPart = ParentUUID;
3490 cAgent.SitOffset = m_pos; 3491 cAgent.SitOffset = PrevSitOffset;
3491 3492
3492 lock (scriptedcontrols) 3493 lock (scriptedcontrols)
3493 { 3494 {
@@ -3530,7 +3531,7 @@ namespace OpenSim.Region.Framework.Scenes
3530 CameraLeftAxis = cAgent.LeftAxis; 3531 CameraLeftAxis = cAgent.LeftAxis;
3531 CameraUpAxis = cAgent.UpAxis; 3532 CameraUpAxis = cAgent.UpAxis;
3532 ParentUUID = cAgent.ParentPart; 3533 ParentUUID = cAgent.ParentPart;
3533 m_prevSitOffset = cAgent.SitOffset; 3534 PrevSitOffset = cAgent.SitOffset;
3534 3535
3535 // When we get to the point of re-computing neighbors everytime this 3536 // When we get to the point of re-computing neighbors everytime this
3536 // changes, then start using the agent's drawdistance rather than the 3537 // changes, then start using the agent's drawdistance rather than the
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
index 52ad538..9557cd0 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs
@@ -67,7 +67,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
67 IConfigSource configSource = new IniConfigSource(); 67 IConfigSource configSource = new IniConfigSource();
68 IConfig config = configSource.AddConfig("Startup"); 68 IConfig config = configSource.AddConfig("Startup");
69 config.Set("serverside_object_permissions", true); 69 config.Set("serverside_object_permissions", true);
70 SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); 70 SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new DefaultPermissionsModule() });
71 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; 71 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
72 72
73 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. 73 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
@@ -112,7 +112,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
112 IConfigSource configSource = new IniConfigSource(); 112 IConfigSource configSource = new IniConfigSource();
113 IConfig config = configSource.AddConfig("Startup"); 113 IConfig config = configSource.AddConfig("Startup");
114 config.Set("serverside_object_permissions", true); 114 config.Set("serverside_object_permissions", true);
115 SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new PermissionsModule() }); 115 SceneHelpers.SetupSceneModules(scene, configSource, new object[] { new DefaultPermissionsModule() });
116 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient; 116 IClientAPI client = SceneHelpers.AddScenePresence(scene, userId).ControllingClient;
117 117
118 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test. 118 // Turn off the timer on the async sog deleter - we'll crank it by hand for this test.
@@ -195,4 +195,4 @@ namespace OpenSim.Region.Framework.Scenes.Tests
195// Assert.That(retrievedPart, Is.Null); 195// Assert.That(retrievedPart, Is.Null);
196 } 196 }
197 } 197 }
198} \ No newline at end of file 198}
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs
index c7eaff9..e7a1fe0 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectUserGroupTests.cs
@@ -71,7 +71,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
71 71
72 SceneHelpers.SetupSceneModules( 72 SceneHelpers.SetupSceneModules(
73 scene, configSource, new object[] 73 scene, configSource, new object[]
74 { new PermissionsModule(), 74 { new DefaultPermissionsModule(),
75 new GroupsModule(), 75 new GroupsModule(),
76 new MockGroupsServicesConnector() }); 76 new MockGroupsServicesConnector() });
77 77
@@ -82,4 +82,4 @@ namespace OpenSim.Region.Framework.Scenes.Tests
82 groupsModule.CreateGroup(client, "group1", "To boldly go", true, UUID.Zero, 5, true, true, true); 82 groupsModule.CreateGroup(client, "group1", "To boldly go", true, UUID.Zero, 5, true, true, true);
83 } 83 }
84 } 84 }
85} \ No newline at end of file 85}
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
index de4458d..8d94d29 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
@@ -216,7 +216,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
216 // We need to set up the permisions module on scene B so that our later use of agent limit to deny 216 // We need to set up the permisions module on scene B so that our later use of agent limit to deny
217 // QueryAccess won't succeed anyway because administrators are always allowed in and the default 217 // QueryAccess won't succeed anyway because administrators are always allowed in and the default
218 // IsAdministrator if no permissions module is present is true. 218 // IsAdministrator if no permissions module is present is true.
219 SceneHelpers.SetupSceneModules(sceneB, config, new object[] { new PermissionsModule(), etmB }); 219 SceneHelpers.SetupSceneModules(sceneB, config, new object[] { new DefaultPermissionsModule(), etmB });
220 220
221 // Shared scene modules 221 // Shared scene modules
222 SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm); 222 SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm);
@@ -381,7 +381,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
381 // We need to set up the permisions module on scene B so that our later use of agent limit to deny 381 // We need to set up the permisions module on scene B so that our later use of agent limit to deny
382 // QueryAccess won't succeed anyway because administrators are always allowed in and the default 382 // QueryAccess won't succeed anyway because administrators are always allowed in and the default
383 // IsAdministrator if no permissions module is present is true. 383 // IsAdministrator if no permissions module is present is true.
384 SceneHelpers.SetupSceneModules(sceneB, config, new object[] { new PermissionsModule(), etmB }); 384 SceneHelpers.SetupSceneModules(sceneB, config, new object[] { new DefaultPermissionsModule(), etmB });
385 385
386 // Shared scene modules 386 // Shared scene modules
387 SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm); 387 SceneHelpers.SetupSceneModules(new Scene[] { sceneA, sceneB }, config, lscm);
@@ -507,4 +507,4 @@ namespace OpenSim.Region.Framework.Scenes.Tests
507// TestHelpers.DisableLogging(); 507// TestHelpers.DisableLogging();
508 } 508 }
509 } 509 }
510} \ No newline at end of file 510}
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
index 0c9fdb9..5d10e93 100644
--- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
+++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
@@ -203,8 +203,9 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
203 { 203 {
204 } 204 }
205 205
206 public bool ObjectGiveMoney(UUID objectID, UUID fromID, UUID toID, int amount, UUID txn) 206 public bool ObjectGiveMoney(UUID objectID, UUID fromID, UUID toID, int amount, UUID txn, out string result)
207 { 207 {
208 result = String.Empty;
208 string description = String.Format("Object {0} pays {1}", resolveObjectName(objectID), resolveAgentName(toID)); 209 string description = String.Format("Object {0} pays {1}", resolveObjectName(objectID), resolveAgentName(toID));
209 210
210 bool give_result = doMoneyTransfer(fromID, toID, amount, 2, description); 211 bool give_result = doMoneyTransfer(fromID, toID, amount, 2, description);
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 5ea14c7..e8502ac 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3109,8 +3109,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3109 return; 3109 return;
3110 } 3110 }
3111 3111
3112 string reason;
3112 money.ObjectGiveMoney( 3113 money.ObjectGiveMoney(
3113 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero); 3114 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason);
3114 }); 3115 });
3115 3116
3116 return 0; 3117 return 0;
@@ -12784,8 +12785,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12784 return; 12785 return;
12785 } 12786 }
12786 12787
12788 string reason;
12787 bool result = money.ObjectGiveMoney( 12789 bool result = money.ObjectGiveMoney(
12788 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount, txn); 12790 m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount, txn, out reason);
12789 12791
12790 if (result) 12792 if (result)
12791 { 12793 {
@@ -12793,7 +12795,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
12793 return; 12795 return;
12794 } 12796 }
12795 12797
12796 replydata = "LINDENDOLLAR_INSUFFICIENTFUNDS"; 12798 replydata = reason;
12797 } 12799 }
12798 finally 12800 finally
12799 { 12801 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 26850c4..a2ac9c5 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -231,6 +231,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
231 ItemID = ScriptTask.ItemID; 231 ItemID = ScriptTask.ItemID;
232 AssetID = ScriptTask.AssetID; 232 AssetID = ScriptTask.AssetID;
233 } 233 }
234 LocalID = part.LocalId;
234 235
235 PrimName = part.ParentGroup.Name; 236 PrimName = part.ParentGroup.Name;
236 StartParam = startParam; 237 StartParam = startParam;
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 17243ab..04a4e53 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1316,13 +1316,21 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1316 1316
1317 ScriptInstance instance = null; 1317 ScriptInstance instance = null;
1318 // Create the object record 1318 // Create the object record
1319 UUID appDomain = assetID;
1320
1321
1322
1319 lockScriptsForRead(true); 1323 lockScriptsForRead(true);
1320 if ((!m_Scripts.ContainsKey(itemID)) || 1324 if ((!m_Scripts.ContainsKey(itemID)) ||
1321 (m_Scripts[itemID].AssetID != assetID)) 1325 (m_Scripts[itemID].AssetID != assetID))
1322 { 1326 {
1323 lockScriptsForRead(false); 1327 lockScriptsForRead(false);
1324 1328 instance = new ScriptInstance(this, part,
1325 UUID appDomain = assetID; 1329 item,
1330 startParam, postOnRez,
1331 m_MaxScriptQueue);
1332
1333
1326 1334
1327 if (part.ParentGroup.IsAttachment) 1335 if (part.ParentGroup.IsAttachment)
1328 appDomain = part.ParentGroup.RootPart.UUID; 1336 appDomain = part.ParentGroup.RootPart.UUID;
@@ -1345,9 +1353,39 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1345 sandbox = AppDomain.CreateDomain( 1353 sandbox = AppDomain.CreateDomain(
1346 m_Scene.RegionInfo.RegionID.ToString(), 1354 m_Scene.RegionInfo.RegionID.ToString(),
1347 evidence, appSetup); 1355 evidence, appSetup);
1348 m_AppDomains[appDomain].AssemblyResolve += 1356 if (m_AppDomains.ContainsKey(appDomain))
1349 new ResolveEventHandler( 1357 {
1350 AssemblyResolver.OnAssemblyResolve); 1358 m_AppDomains[appDomain].AssemblyResolve +=
1359 new ResolveEventHandler(
1360 AssemblyResolver.OnAssemblyResolve);
1361 if (m_DomainScripts.ContainsKey(appDomain))
1362 {
1363 m_DomainScripts[appDomain].Add(itemID);
1364 }
1365 else
1366 {
1367 m_DomainScripts.Add(appDomain, new List<UUID>());
1368 m_DomainScripts[appDomain].Add(itemID);
1369 }
1370 }
1371 else
1372 {
1373 m_AppDomains.Add(appDomain, sandbox);
1374 m_AppDomains[appDomain].AssemblyResolve +=
1375 new ResolveEventHandler(
1376 AssemblyResolver.OnAssemblyResolve);
1377 if (m_DomainScripts.ContainsKey(appDomain))
1378 {
1379 m_DomainScripts[appDomain].Add(itemID);
1380 }
1381 else
1382 {
1383 m_DomainScripts.Add(appDomain, new List<UUID>());
1384 m_DomainScripts[appDomain].Add(itemID);
1385 }
1386
1387 }
1388
1351 } 1389 }
1352 else 1390 else
1353 { 1391 {
@@ -1373,12 +1411,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1373 return false; 1411 return false;
1374 } 1412 }
1375 } 1413 }
1376 m_DomainScripts[appDomain].Add(itemID); 1414
1377
1378 instance = new ScriptInstance(this, part,
1379 item,
1380 startParam, postOnRez,
1381 m_MaxScriptQueue);
1382 1415
1383 instance.Load(m_AppDomains[appDomain], assembly, stateSource); 1416 instance.Load(m_AppDomains[appDomain], assembly, stateSource);
1384// m_log.DebugFormat( 1417// m_log.DebugFormat(
@@ -1502,6 +1535,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1502 if (handlerObjectRemoved != null) 1535 if (handlerObjectRemoved != null)
1503 { 1536 {
1504 SceneObjectPart part = m_Scene.GetSceneObjectPart(localID); 1537 SceneObjectPart part = m_Scene.GetSceneObjectPart(localID);
1538 if (part != null)
1505 handlerObjectRemoved(part.UUID); 1539 handlerObjectRemoved(part.UUID);
1506 } 1540 }
1507 1541