diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
8 files changed, 270 insertions, 1516 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index df1bd8b..84d44a1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs | |||
@@ -387,28 +387,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
387 | } | 387 | } |
388 | } | 388 | } |
389 | 389 | ||
390 | public static void StateChange(IScriptEngine engine, uint localID, UUID itemID) | 390 | |
391 | { | ||
392 | // Remove a specific script | ||
393 | |||
394 | // Remove dataserver events | ||
395 | m_Dataserver[engine].RemoveEvents(localID, itemID); | ||
396 | |||
397 | IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>(); | ||
398 | if (comms != null) | ||
399 | comms.DeleteListener(itemID); | ||
400 | |||
401 | IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>(); | ||
402 | if (xmlrpc != null) | ||
403 | { | ||
404 | xmlrpc.DeleteChannels(itemID); | ||
405 | xmlrpc.CancelSRDRequests(itemID); | ||
406 | } | ||
407 | |||
408 | // Remove Sensors | ||
409 | m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID); | ||
410 | |||
411 | } | ||
412 | 391 | ||
413 | public static Object[] GetSerializationData(IScriptEngine engine, UUID itemID) | 392 | public static Object[] GetSerializationData(IScriptEngine engine, UUID itemID) |
414 | { | 393 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index f637a1d..f27a122 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -28,13 +28,9 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | <<<<<<< HEAD | ||
32 | using System.Diagnostics; | 31 | using System.Diagnostics; |
33 | using System.Drawing; | 32 | using System.Drawing; |
34 | using System.Drawing.Imaging; | 33 | using System.Drawing.Imaging; |
35 | ======= | ||
36 | using System.Diagnostics; //for [DebuggerNonUserCode] | ||
37 | >>>>>>> avn/ubitvar | ||
38 | using System.Runtime.Remoting.Lifetime; | 34 | using System.Runtime.Remoting.Lifetime; |
39 | using System.Text; | 35 | using System.Text; |
40 | using System.Threading; | 36 | using System.Threading; |
@@ -43,11 +39,8 @@ using System.Timers; | |||
43 | using Nini.Config; | 39 | using Nini.Config; |
44 | using log4net; | 40 | using log4net; |
45 | using OpenMetaverse; | 41 | using OpenMetaverse; |
46 | <<<<<<< HEAD | ||
47 | using OpenMetaverse.Assets; | 42 | using OpenMetaverse.Assets; |
48 | ======= | ||
49 | using OpenMetaverse.StructuredData; | 43 | using OpenMetaverse.StructuredData; |
50 | >>>>>>> avn/ubitvar | ||
51 | using OpenMetaverse.Packets; | 44 | using OpenMetaverse.Packets; |
52 | using OpenMetaverse.Rendering; | 45 | using OpenMetaverse.Rendering; |
53 | using OpenSim; | 46 | using OpenSim; |
@@ -133,7 +126,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
133 | protected bool m_scriptConsoleChannelEnabled = false; | 126 | protected bool m_scriptConsoleChannelEnabled = false; |
134 | protected bool m_debuggerSafe = false; | 127 | protected bool m_debuggerSafe = false; |
135 | protected IUrlModule m_UrlModule = null; | 128 | protected IUrlModule m_UrlModule = null; |
136 | <<<<<<< HEAD | 129 | |
137 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>(); | 130 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>(); |
138 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. | 131 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. |
139 | protected int m_sleepMsOnSetTexture = 200; | 132 | protected int m_sleepMsOnSetTexture = 200; |
@@ -254,11 +247,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
254 | protected static List<CastRayCall> m_castRayCalls = new List<CastRayCall>(); | 247 | protected static List<CastRayCall> m_castRayCalls = new List<CastRayCall>(); |
255 | protected bool m_useMeshCacheInCastRay = true; | 248 | protected bool m_useMeshCacheInCastRay = true; |
256 | protected static Dictionary<ulong, FacetedMesh> m_cachedMeshes = new Dictionary<ulong, FacetedMesh>(); | 249 | protected static Dictionary<ulong, FacetedMesh> m_cachedMeshes = new Dictionary<ulong, FacetedMesh>(); |
257 | ======= | ||
258 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = | ||
259 | new Dictionary<UUID, UserInfoCacheEntry>(); | ||
260 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. | ||
261 | protected ISoundModule m_SoundModule = null; | ||
262 | 250 | ||
263 | // protected Timer m_ShoutSayTimer; | 251 | // protected Timer m_ShoutSayTimer; |
264 | protected int m_SayShoutCount = 0; | 252 | protected int m_SayShoutCount = 0; |
@@ -288,7 +276,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
288 | {"TURNRIGHT", "Turning Right"}, | 276 | {"TURNRIGHT", "Turning Right"}, |
289 | {"WALK", "Walking"} | 277 | {"WALK", "Walking"} |
290 | }; | 278 | }; |
291 | >>>>>>> avn/ubitvar | ||
292 | 279 | ||
293 | //An array of HTTP/1.1 headers that are not allowed to be used | 280 | //An array of HTTP/1.1 headers that are not allowed to be used |
294 | //as custom headers by llHTTPRequest. | 281 | //as custom headers by llHTTPRequest. |
@@ -315,12 +302,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
315 | m_ScriptEngine = scriptEngine; | 302 | m_ScriptEngine = scriptEngine; |
316 | m_host = host; | 303 | m_host = host; |
317 | m_item = item; | 304 | m_item = item; |
318 | <<<<<<< HEAD | ||
319 | ======= | ||
320 | m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false); | 305 | m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false); |
321 | m_coopSleepHandle = coopSleepHandle; | 306 | |
322 | >>>>>>> avn/ubitvar | ||
323 | |||
324 | LoadConfig(); | 307 | LoadConfig(); |
325 | 308 | ||
326 | m_TransferModule = | 309 | m_TransferModule = |
@@ -634,7 +617,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
634 | } | 617 | } |
635 | 618 | ||
636 | int actualPrimCount = part.ParentGroup.PrimCount; | 619 | int actualPrimCount = part.ParentGroup.PrimCount; |
637 | List<ScenePresence> sittingAvatars = part.ParentGroup.GetSittingAvatars(); | 620 | List<UUID> sittingAvatars = part.ParentGroup.GetSittingAvatars(); |
638 | int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; | 621 | int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; |
639 | 622 | ||
640 | // Special case for a single prim. In this case the linknum is zero. However, this will not match a single | 623 | // Special case for a single prim. In this case the linknum is zero. However, this will not match a single |
@@ -663,7 +646,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
663 | } | 646 | } |
664 | else | 647 | else |
665 | { | 648 | { |
666 | return sittingAvatars[linknum - actualPrimCount - 1]; | 649 | ScenePresence sp = World.GetScenePresence(sittingAvatars[linknum - actualPrimCount - 1]); |
650 | if (sp != null) | ||
651 | return sp; | ||
652 | else | ||
653 | return null; | ||
667 | } | 654 | } |
668 | } | 655 | } |
669 | else | 656 | else |
@@ -1316,8 +1303,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1316 | 1303 | ||
1317 | IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); | 1304 | IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); |
1318 | if (wComm != null) | 1305 | if (wComm != null) |
1319 | if (!wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg, out error)) | 1306 | if (!wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg, out error)); |
1320 | LSLError(error); | ||
1321 | } | 1307 | } |
1322 | 1308 | ||
1323 | public LSL_Integer llListen(int channelID, string name, string ID, string msg) | 1309 | public LSL_Integer llListen(int channelID, string name, string ID, string msg) |
@@ -2373,13 +2359,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2373 | m_host.AddScriptLPS(1); | 2359 | m_host.AddScriptLPS(1); |
2374 | 2360 | ||
2375 | List<SceneObjectPart> parts = GetLinkParts(linknumber); | 2361 | List<SceneObjectPart> parts = GetLinkParts(linknumber); |
2376 | <<<<<<< HEAD | ||
2377 | |||
2378 | foreach (SceneObjectPart part in parts) | ||
2379 | SetTexture(part, texture, face); | ||
2380 | |||
2381 | ScriptSleep(m_sleepMsOnSetLinkTexture); | ||
2382 | ======= | ||
2383 | if (parts.Count > 0) | 2362 | if (parts.Count > 0) |
2384 | { | 2363 | { |
2385 | try | 2364 | try |
@@ -2391,8 +2370,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2391 | { | 2370 | { |
2392 | } | 2371 | } |
2393 | } | 2372 | } |
2394 | ScriptSleep(200); | 2373 | ScriptSleep(m_sleepMsOnSetLinkTexture); |
2395 | >>>>>>> avn/ubitvar | ||
2396 | } | 2374 | } |
2397 | 2375 | ||
2398 | protected void SetTexture(SceneObjectPart part, string texture, int face) | 2376 | protected void SetTexture(SceneObjectPart part, string texture, int face) |
@@ -3038,12 +3016,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3038 | if (m_host.ParentGroup.IsAttachment) | 3016 | if (m_host.ParentGroup.IsAttachment) |
3039 | { | 3017 | { |
3040 | ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); | 3018 | ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); |
3041 | <<<<<<< HEAD | ||
3042 | vel = avatar.GetWorldVelocity(); | ||
3043 | ======= | ||
3044 | if (avatar != null) | 3019 | if (avatar != null) |
3045 | vel = avatar.Velocity; | 3020 | vel = avatar.GetWorldVelocity(); |
3046 | >>>>>>> avn/ubitvar | ||
3047 | } | 3021 | } |
3048 | else | 3022 | else |
3049 | { | 3023 | { |
@@ -3463,15 +3437,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3463 | 3437 | ||
3464 | string reason; | 3438 | string reason; |
3465 | money.ObjectGiveMoney( | 3439 | money.ObjectGiveMoney( |
3466 | <<<<<<< HEAD | 3440 | |
3467 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); | ||
3468 | }, null, "LSL_Api.llGiveMoney"); | ||
3469 | ======= | ||
3470 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason); | 3441 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason); |
3471 | }); | 3442 | }, null, "LSL_Api.llGiveMoney"); |
3472 | 3443 | ||
3473 | return 0; | 3444 | return 0; |
3474 | >>>>>>> avn/ubitvar | ||
3475 | } | 3445 | } |
3476 | 3446 | ||
3477 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) | 3447 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) |
@@ -3574,12 +3544,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3574 | } | 3544 | } |
3575 | // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) | 3545 | // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) |
3576 | } | 3546 | } |
3577 | <<<<<<< HEAD | 3547 | |
3578 | }, null, "LSL_Api.llRezAtRoot"); | 3548 | }, null, "LSL_Api.llRezAtRoot"); |
3579 | ======= | ||
3580 | return; | ||
3581 | }); | ||
3582 | >>>>>>> avn/ubitvar | ||
3583 | 3549 | ||
3584 | //ScriptSleep((int)((groupmass * velmag) / 10)); | 3550 | //ScriptSleep((int)((groupmass * velmag) / 10)); |
3585 | ScriptSleep(m_sleepMsOnRezAtRoot); | 3551 | ScriptSleep(m_sleepMsOnRezAtRoot); |
@@ -3594,25 +3560,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3594 | { | 3560 | { |
3595 | m_host.AddScriptLPS(1); | 3561 | m_host.AddScriptLPS(1); |
3596 | 3562 | ||
3597 | <<<<<<< HEAD | ||
3598 | // normalized direction to target | ||
3599 | LSL_Vector dir = llVecNorm(target - from); | ||
3600 | // use vertical to help compute left axis | ||
3601 | LSL_Vector up = new LSL_Vector(0.0, 0.0, 1.0); | ||
3602 | // find normalized left axis parallel to horizon | ||
3603 | LSL_Vector left = llVecNorm(LSL_Vector.Cross(up, dir)); | ||
3604 | // make up orthogonal to left and dir | ||
3605 | up = LSL_Vector.Cross(dir, left); | ||
3606 | |||
3607 | // compute rotation based on orthogonal axes | ||
3608 | LSL_Rotation rot = new LSL_Rotation(0.0, 0.707107, 0.0, 0.707107) * llAxes2Rot(dir, left, up); | ||
3609 | |||
3610 | // Per discussion with Melanie, for non-physical objects llLookAt appears to simply | ||
3611 | // set the rotation of the object, copy that behavior | ||
3612 | PhysicsActor pa = m_host.PhysActor; | ||
3613 | |||
3614 | if (m_host.ParentGroup.IsAttachment || strength == 0 || pa == null || !pa.IsPhysical) | ||
3615 | ======= | ||
3616 | // Get the normalized vector to the target | 3563 | // Get the normalized vector to the target |
3617 | LSL_Vector d1 = llVecNorm(target - llGetPos()); | 3564 | LSL_Vector d1 = llVecNorm(target - llGetPos()); |
3618 | 3565 | ||
@@ -3629,7 +3576,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3629 | LSL_Rotation r3 = new LSL_Rotation(0.000000, 0.707107, 0.000000, 0.707107); | 3576 | LSL_Rotation r3 = new LSL_Rotation(0.000000, 0.707107, 0.000000, 0.707107); |
3630 | 3577 | ||
3631 | if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical) | 3578 | if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical) |
3632 | >>>>>>> avn/ubitvar | ||
3633 | { | 3579 | { |
3634 | // Do nothing if either value is 0 (this has been checked in SL) | 3580 | // Do nothing if either value is 0 (this has been checked in SL) |
3635 | if (strength <= 0.0 || damping <= 0.0) | 3581 | if (strength <= 0.0 || damping <= 0.0) |
@@ -3703,18 +3649,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3703 | } | 3649 | } |
3704 | } | 3650 | } |
3705 | 3651 | ||
3706 | <<<<<<< HEAD | ||
3707 | public LSL_Float llGetMassMKS() | ||
3708 | { | ||
3709 | // this is what the wiki says it does! | ||
3710 | // http://wiki.secondlife.com/wiki/LlGetMassMKS | ||
3711 | return llGetMass() * 100.0; | ||
3712 | ======= | ||
3713 | |||
3714 | public LSL_Float llGetMassMKS() | 3652 | public LSL_Float llGetMassMKS() |
3715 | { | 3653 | { |
3716 | return 100f * llGetMass(); | 3654 | return 100f * llGetMass(); |
3717 | >>>>>>> avn/ubitvar | ||
3718 | } | 3655 | } |
3719 | 3656 | ||
3720 | public void llCollisionFilter(string name, string id, int accept) | 3657 | public void llCollisionFilter(string name, string id, int accept) |
@@ -3863,17 +3800,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3863 | 3800 | ||
3864 | public void llInstantMessage(string user, string message) | 3801 | public void llInstantMessage(string user, string message) |
3865 | { | 3802 | { |
3803 | m_host.AddScriptLPS(1); | ||
3866 | UUID result; | 3804 | UUID result; |
3867 | if (!UUID.TryParse(user, out result) || result == UUID.Zero) | 3805 | if (!UUID.TryParse(user, out result) || result == UUID.Zero) |
3868 | { | 3806 | { |
3869 | ShoutError("An invalid key was passed to llInstantMessage"); | 3807 | Error("llInstantMessage","An invalid key was passed to llInstantMessage"); |
3870 | ScriptSleep(2000); | 3808 | ScriptSleep(2000); |
3871 | return; | 3809 | return; |
3872 | } | 3810 | } |
3873 | 3811 | ||
3874 | |||
3875 | m_host.AddScriptLPS(1); | ||
3876 | |||
3877 | // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. | 3812 | // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. |
3878 | // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, | 3813 | // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, |
3879 | // but I don't think we have a list of scenes available from here. | 3814 | // but I don't think we have a list of scenes available from here. |
@@ -3883,50 +3818,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3883 | 3818 | ||
3884 | // TODO: figure out values for client, fromSession, and imSessionID | 3819 | // TODO: figure out values for client, fromSession, and imSessionID |
3885 | // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); | 3820 | // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); |
3886 | <<<<<<< HEAD | ||
3887 | |||
3888 | ======= | ||
3889 | UUID friendTransactionID = UUID.Random(); | 3821 | UUID friendTransactionID = UUID.Random(); |
3890 | 3822 | ||
3891 | //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); | 3823 | //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); |
3892 | 3824 | ||
3893 | >>>>>>> avn/ubitvar | ||
3894 | GridInstantMessage msg = new GridInstantMessage(); | 3825 | GridInstantMessage msg = new GridInstantMessage(); |
3895 | msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid; | 3826 | msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid; |
3896 | msg.toAgentID = new Guid(user); // toAgentID.Guid; | 3827 | msg.toAgentID = new Guid(user); // toAgentID.Guid; |
3897 | msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here | 3828 | msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here |
3898 | // m_log.Debug("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); | ||
3899 | // m_log.Debug("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); | ||
3900 | // DateTime dt = DateTime.UtcNow; | ||
3901 | // | ||
3902 | // // Ticks from UtcNow, but make it look like local. Evil, huh? | ||
3903 | // dt = DateTime.SpecifyKind(dt, DateTimeKind.Local); | ||
3904 | // | ||
3905 | // try | ||
3906 | // { | ||
3907 | // // Convert that to the PST timezone | ||
3908 | // TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles"); | ||
3909 | // dt = TimeZoneInfo.ConvertTime(dt, timeZoneInfo); | ||
3910 | // } | ||
3911 | // catch | ||
3912 | // { | ||
3913 | // // No logging here, as it could be VERY spammy | ||
3914 | // } | ||
3915 | // | ||
3916 | // // And make it look local again to fool the unix time util | ||
3917 | // dt = DateTime.SpecifyKind(dt, DateTimeKind.Utc); | ||
3918 | |||
3919 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 3829 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
3830 | msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName; | ||
3920 | 3831 | ||
3921 | //if (client != null) | ||
3922 | //{ | ||
3923 | msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName; | ||
3924 | //} | ||
3925 | //else | ||
3926 | //{ | ||
3927 | // msg.fromAgentName = "(hippos)";// Added for posterity. This means that we can't figure out who sent it | ||
3928 | //} | ||
3929 | // Cap the message length at 1024. | ||
3930 | if (message != null && message.Length > 1024) | 3832 | if (message != null && message.Length > 1024) |
3931 | msg.message = message.Substring(0, 1024); | 3833 | msg.message = message.Substring(0, 1024); |
3932 | else | 3834 | else |
@@ -4237,17 +4139,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4237 | ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | | 4139 | ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
4238 | ScriptBaseClass.PERMISSION_CONTROL_CAMERA | | 4140 | ScriptBaseClass.PERMISSION_CONTROL_CAMERA | |
4239 | ScriptBaseClass.PERMISSION_TRACK_CAMERA | | 4141 | ScriptBaseClass.PERMISSION_TRACK_CAMERA | |
4240 | <<<<<<< HEAD | ||
4241 | ScriptBaseClass.PERMISSION_ATTACH; | ||
4242 | ======= | ||
4243 | ScriptBaseClass.PERMISSION_ATTACH | | 4142 | ScriptBaseClass.PERMISSION_ATTACH | |
4244 | ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS; | 4143 | ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS; |
4245 | |||
4246 | >>>>>>> avn/ubitvar | ||
4247 | } | 4144 | } |
4248 | else | 4145 | else |
4249 | { | 4146 | { |
4250 | if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(sp => sp.UUID == agentID) != null) | 4147 | if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(id => id == agentID) != null) |
4251 | { | 4148 | { |
4252 | // When agent is sitting, certain permissions are implicit if requested from sitting agent | 4149 | // When agent is sitting, certain permissions are implicit if requested from sitting agent |
4253 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | | 4150 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
@@ -4409,14 +4306,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4409 | public void llCreateLink(string target, int parent) | 4306 | public void llCreateLink(string target, int parent) |
4410 | { | 4307 | { |
4411 | m_host.AddScriptLPS(1); | 4308 | m_host.AddScriptLPS(1); |
4412 | <<<<<<< HEAD | ||
4413 | ======= | ||
4414 | 4309 | ||
4415 | UUID targetID; | 4310 | UUID targetID; |
4416 | 4311 | ||
4417 | if (!UUID.TryParse(target, out targetID)) | 4312 | if (!UUID.TryParse(target, out targetID)) |
4418 | return; | 4313 | return; |
4419 | >>>>>>> avn/ubitvar | ||
4420 | 4314 | ||
4421 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | 4315 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 |
4422 | && !m_automaticLinkPermission) | 4316 | && !m_automaticLinkPermission) |
@@ -4589,30 +4483,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4589 | { | 4483 | { |
4590 | m_host.AddScriptLPS(1); | 4484 | m_host.AddScriptLPS(1); |
4591 | 4485 | ||
4592 | <<<<<<< HEAD | 4486 | TaskInventoryItem item = m_item; |
4593 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | 4487 | |
4488 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | ||
4594 | && !m_automaticLinkPermission) | 4489 | && !m_automaticLinkPermission) |
4595 | { | 4490 | { |
4596 | Error("llBreakAllLinks", "PERMISSION_CHANGE_LINKS permission not set"); | 4491 | Error("llBreakAllLinks","Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); |
4597 | return; | 4492 | return; |
4598 | } | 4493 | } |
4599 | |||
4600 | BreakAllLinks(); | 4494 | BreakAllLinks(); |
4601 | } | 4495 | } |
4602 | 4496 | ||
4603 | public void BreakAllLinks() | 4497 | public void BreakAllLinks() |
4604 | { | 4498 | { |
4605 | ======= | ||
4606 | TaskInventoryItem item = m_item; | ||
4607 | |||
4608 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | ||
4609 | && !m_automaticLinkPermission) | ||
4610 | { | ||
4611 | ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); | ||
4612 | return; | ||
4613 | } | ||
4614 | |||
4615 | >>>>>>> avn/ubitvar | ||
4616 | SceneObjectGroup parentPrim = m_host.ParentGroup; | 4499 | SceneObjectGroup parentPrim = m_host.ParentGroup; |
4617 | if (parentPrim.AttachmentPoint != 0) | 4500 | if (parentPrim.AttachmentPoint != 0) |
4618 | return; // Fail silently if attached | 4501 | return; // Fail silently if attached |
@@ -4643,12 +4526,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4643 | { | 4526 | { |
4644 | linknum -= (m_host.ParentGroup.PrimCount) + 1; | 4527 | linknum -= (m_host.ParentGroup.PrimCount) + 1; |
4645 | 4528 | ||
4646 | <<<<<<< HEAD | ||
4647 | ISceneEntity entity = GetLinkEntity(m_host, linknum); | ||
4648 | ======= | ||
4649 | if (linknum < 0) | 4529 | if (linknum < 0) |
4650 | return UUID.Zero.ToString(); | 4530 | return UUID.Zero.ToString(); |
4651 | >>>>>>> avn/ubitvar | ||
4652 | 4531 | ||
4653 | List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET); | 4532 | List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET); |
4654 | if (avatars.Count > linknum) | 4533 | if (avatars.Count > linknum) |
@@ -4779,14 +4658,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4779 | 4658 | ||
4780 | if (item == null) | 4659 | if (item == null) |
4781 | { | 4660 | { |
4782 | <<<<<<< HEAD | ||
4783 | Error("llGiveInventory", "Can't find inventory object '" + inventory + "'"); | 4661 | Error("llGiveInventory", "Can't find inventory object '" + inventory + "'"); |
4784 | return; | 4662 | return; |
4785 | ======= | ||
4786 | llSay(0, String.Format("Could not find object '{0}'", inventory)); | ||
4787 | return; | ||
4788 | // throw new Exception(String.Format("The inventory object '{0}' could not be found", inventory)); | ||
4789 | >>>>>>> avn/ubitvar | ||
4790 | } | 4663 | } |
4791 | 4664 | ||
4792 | UUID objId = item.ItemID; | 4665 | UUID objId = item.ItemID; |
@@ -4845,9 +4718,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4845 | 4718 | ||
4846 | ScenePresence sp; | 4719 | ScenePresence sp; |
4847 | 4720 | ||
4848 | <<<<<<< HEAD | ||
4849 | ScriptSleep(m_sleepMsOnGiveInventory); | ||
4850 | ======= | ||
4851 | if (World.TryGetScenePresence(destId, out sp)) | 4721 | if (World.TryGetScenePresence(destId, out sp)) |
4852 | { | 4722 | { |
4853 | sp.ControllingClient.SendInstantMessage(msg); | 4723 | sp.ControllingClient.SendInstantMessage(msg); |
@@ -4859,8 +4729,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4859 | } | 4729 | } |
4860 | 4730 | ||
4861 | //This delay should only occur when giving inventory to avatars. | 4731 | //This delay should only occur when giving inventory to avatars. |
4862 | ScriptSleep(3000); | 4732 | ScriptSleep(m_sleepMsOnGiveInventory); |
4863 | >>>>>>> avn/ubitvar | ||
4864 | } | 4733 | } |
4865 | } | 4734 | } |
4866 | 4735 | ||
@@ -4919,16 +4788,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4919 | { | 4788 | { |
4920 | m_host.AddScriptLPS(1); | 4789 | m_host.AddScriptLPS(1); |
4921 | 4790 | ||
4922 | <<<<<<< HEAD | ||
4923 | UUID uuid = (UUID)id; | ||
4924 | PresenceInfo pinfo = null; | ||
4925 | UserAccount account; | ||
4926 | |||
4927 | UserInfoCacheEntry ce; | ||
4928 | |||
4929 | lock (m_userInfoCache) | ||
4930 | { | ||
4931 | ======= | ||
4932 | UUID uuid; | 4791 | UUID uuid; |
4933 | if (UUID.TryParse(id, out uuid)) | 4792 | if (UUID.TryParse(id, out uuid)) |
4934 | { | 4793 | { |
@@ -4936,7 +4795,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4936 | UserAccount account; | 4795 | UserAccount account; |
4937 | 4796 | ||
4938 | UserInfoCacheEntry ce; | 4797 | UserInfoCacheEntry ce; |
4939 | >>>>>>> avn/ubitvar | ||
4940 | if (!m_userInfoCache.TryGetValue(uuid, out ce)) | 4798 | if (!m_userInfoCache.TryGetValue(uuid, out ce)) |
4941 | { | 4799 | { |
4942 | account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); | 4800 | account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); |
@@ -4945,10 +4803,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4945 | m_userInfoCache[uuid] = null; // Cache negative | 4803 | m_userInfoCache[uuid] = null; // Cache negative |
4946 | return UUID.Zero.ToString(); | 4804 | return UUID.Zero.ToString(); |
4947 | } | 4805 | } |
4948 | <<<<<<< HEAD | ||
4949 | ======= | ||
4950 | |||
4951 | >>>>>>> avn/ubitvar | ||
4952 | 4806 | ||
4953 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); | 4807 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); |
4954 | if (pinfos != null && pinfos.Length > 0) | 4808 | if (pinfos != null && pinfos.Length > 0) |
@@ -4961,40 +4815,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4961 | } | 4815 | } |
4962 | } | 4816 | } |
4963 | } | 4817 | } |
4964 | <<<<<<< HEAD | ||
4965 | |||
4966 | ce = new UserInfoCacheEntry(); | ||
4967 | ce.time = Util.EnvironmentTickCount(); | ||
4968 | ce.account = account; | ||
4969 | ce.pinfo = pinfo; | ||
4970 | |||
4971 | m_userInfoCache[uuid] = ce; | ||
4972 | } | ||
4973 | else | ||
4974 | { | ||
4975 | if (ce == null) | ||
4976 | return UUID.Zero.ToString(); | ||
4977 | |||
4978 | account = ce.account; | ||
4979 | |||
4980 | if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) | ||
4981 | >= LlRequestAgentDataCacheTimeoutMs) | ||
4982 | { | ||
4983 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); | ||
4984 | if (pinfos != null && pinfos.Length > 0) | ||
4985 | { | ||
4986 | foreach (PresenceInfo p in pinfos) | ||
4987 | { | ||
4988 | if (p.RegionID != UUID.Zero) | ||
4989 | { | ||
4990 | pinfo = p; | ||
4991 | } | ||
4992 | } | ||
4993 | } | ||
4994 | else | ||
4995 | { | ||
4996 | pinfo = null; | ||
4997 | ======= | ||
4998 | 4818 | ||
4999 | ce = new UserInfoCacheEntry(); | 4819 | ce = new UserInfoCacheEntry(); |
5000 | ce.time = Util.EnvironmentTickCount(); | 4820 | ce.time = Util.EnvironmentTickCount(); |
@@ -5022,60 +4842,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5022 | { | 4842 | { |
5023 | pinfo = p; | 4843 | pinfo = p; |
5024 | } | 4844 | } |
5025 | >>>>>>> avn/ubitvar | ||
5026 | } | 4845 | } |
5027 | |||
5028 | ce.time = Util.EnvironmentTickCount(); | ||
5029 | ce.pinfo = pinfo; | ||
5030 | } | ||
5031 | else | ||
5032 | { | ||
5033 | pinfo = ce.pinfo; | ||
5034 | } | 4846 | } |
5035 | <<<<<<< HEAD | ||
5036 | } | ||
5037 | } | ||
5038 | ======= | ||
5039 | else | 4847 | else |
5040 | pinfo = null; | 4848 | pinfo = null; |
5041 | 4849 | ||
5042 | ce.time = Util.EnvironmentTickCount(); | 4850 | ce.time = Util.EnvironmentTickCount(); |
5043 | ce.pinfo = pinfo; | 4851 | ce.pinfo = pinfo; |
5044 | } | 4852 | } |
5045 | >>>>>>> avn/ubitvar | ||
5046 | 4853 | ||
5047 | string reply = String.Empty; | 4854 | string reply = String.Empty; |
5048 | 4855 | ||
5049 | <<<<<<< HEAD | ||
5050 | switch (data) | ||
5051 | { | ||
5052 | case ScriptBaseClass.DATA_ONLINE: | ||
5053 | if (pinfo != null && pinfo.RegionID != UUID.Zero) | ||
5054 | reply = "1"; | ||
5055 | else | ||
5056 | reply = "0"; | ||
5057 | break; | ||
5058 | case ScriptBaseClass.DATA_NAME: // (First Last) | ||
5059 | reply = account.FirstName + " " + account.LastName; | ||
5060 | break; | ||
5061 | case ScriptBaseClass.DATA_BORN: // (YYYY-MM-DD) | ||
5062 | DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); | ||
5063 | born = born.AddSeconds(account.Created); | ||
5064 | reply = born.ToString("yyyy-MM-dd"); | ||
5065 | break; | ||
5066 | case ScriptBaseClass.DATA_RATING: // (0,0,0,0,0,0) | ||
5067 | reply = "0,0,0,0,0,0"; | ||
5068 | break; | ||
5069 | case 7: // DATA_USERLEVEL (integer). This is not available in LL and so has no constant. | ||
5070 | reply = account.UserLevel.ToString(); | ||
5071 | break; | ||
5072 | case ScriptBaseClass.DATA_PAYINFO: // (0|1|2|3) | ||
5073 | reply = "0"; | ||
5074 | break; | ||
5075 | default: | ||
5076 | return UUID.Zero.ToString(); // Raise no event | ||
5077 | } | ||
5078 | ======= | ||
5079 | switch (data) | 4856 | switch (data) |
5080 | { | 4857 | { |
5081 | case 1: // DATA_ONLINE (0|1) | 4858 | case 1: // DATA_ONLINE (0|1) |
@@ -5101,7 +4878,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5101 | default: | 4878 | default: |
5102 | return UUID.Zero.ToString(); // Raise no event | 4879 | return UUID.Zero.ToString(); // Raise no event |
5103 | } | 4880 | } |
5104 | >>>>>>> avn/ubitvar | ||
5105 | 4881 | ||
5106 | UUID rq = UUID.Random(); | 4882 | UUID rq = UUID.Random(); |
5107 | 4883 | ||
@@ -5112,19 +4888,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5112 | AsyncCommands. | 4888 | AsyncCommands. |
5113 | DataserverPlugin.DataserverReply(rq.ToString(), reply); | 4889 | DataserverPlugin.DataserverReply(rq.ToString(), reply); |
5114 | 4890 | ||
5115 | <<<<<<< HEAD | 4891 | ScriptSleep(m_sleepMsOnRequestAgentData); |
5116 | ScriptSleep(m_sleepMsOnRequestAgentData); | ||
5117 | return tid.ToString(); | ||
5118 | ======= | ||
5119 | ScriptSleep(100); | ||
5120 | return tid.ToString(); | 4892 | return tid.ToString(); |
5121 | } | 4893 | } |
5122 | else | 4894 | else |
5123 | { | 4895 | { |
5124 | ShoutError("Invalid UUID passed to llRequestAgentData."); | 4896 | Error("llRequestAgentData","Invalid UUID passed to llRequestAgentData."); |
5125 | } | 4897 | } |
5126 | return ""; | 4898 | return ""; |
5127 | >>>>>>> avn/ubitvar | ||
5128 | } | 4899 | } |
5129 | 4900 | ||
5130 | public LSL_String llRequestInventoryData(string name) | 4901 | public LSL_String llRequestInventoryData(string name) |
@@ -5252,11 +5023,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5252 | m_host.AddScriptLPS(1); | 5023 | m_host.AddScriptLPS(1); |
5253 | UUID agentId = new UUID(); | 5024 | UUID agentId = new UUID(); |
5254 | 5025 | ||
5255 | <<<<<<< HEAD | ||
5256 | ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y); | 5026 | ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y); |
5257 | ======= | ||
5258 | ulong regionHandle = Utils.UIntsToLong((uint)(global_coords.x / 256) * 256, (uint)(global_coords.y / 256) * 256); | ||
5259 | >>>>>>> avn/ubitvar | ||
5260 | 5027 | ||
5261 | if (UUID.TryParse(agent, out agentId)) | 5028 | if (UUID.TryParse(agent, out agentId)) |
5262 | { | 5029 | { |
@@ -6057,13 +5824,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6057 | // NOTE: 3rd case is needed because a NULL_KEY comes through as | 5824 | // NOTE: 3rd case is needed because a NULL_KEY comes through as |
6058 | // type 'obj' and wrongly returns "" | 5825 | // type 'obj' and wrongly returns "" |
6059 | else if (!(src.Data[index] is LSL_String || | 5826 | else if (!(src.Data[index] is LSL_String || |
6060 | <<<<<<< HEAD | ||
6061 | src.Data[index] is LSL_Key || | 5827 | src.Data[index] is LSL_Key || |
6062 | src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) | 5828 | src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) |
6063 | ======= | ||
6064 | src.Data[index] is LSL_Key || | ||
6065 | src.Data[index] is String)) | ||
6066 | >>>>>>> avn/ubitvar | ||
6067 | { | 5829 | { |
6068 | return ""; | 5830 | return ""; |
6069 | } | 5831 | } |
@@ -6443,7 +6205,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6443 | { | 6205 | { |
6444 | m_host.AddScriptLPS(1); | 6206 | m_host.AddScriptLPS(1); |
6445 | return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); | 6207 | return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); |
6446 | <<<<<<< HEAD | ||
6447 | } | 6208 | } |
6448 | 6209 | ||
6449 | public LSL_String llGetEnv(LSL_String name) | 6210 | public LSL_String llGetEnv(LSL_String name) |
@@ -6509,8 +6270,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6509 | { | 6270 | { |
6510 | return ""; | 6271 | return ""; |
6511 | } | 6272 | } |
6512 | ======= | 6273 | |
6513 | >>>>>>> avn/ubitvar | ||
6514 | } | 6274 | } |
6515 | 6275 | ||
6516 | /// <summary> | 6276 | /// <summary> |
@@ -7153,11 +6913,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7153 | if (UUID.TryParse(id, out key)) | 6913 | if (UUID.TryParse(id, out key)) |
7154 | { | 6914 | { |
7155 | ScenePresence av = World.GetScenePresence(key); | 6915 | ScenePresence av = World.GetScenePresence(key); |
7156 | List<ScenePresence> sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); | 6916 | List<UUID> sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); |
7157 | 6917 | ||
7158 | if (av != null) | 6918 | if (av != null) |
7159 | { | 6919 | { |
7160 | if (sittingAvatars.Contains(av)) | 6920 | if (sittingAvatars.Contains(key)) |
7161 | { | 6921 | { |
7162 | // if the avatar is sitting on this object, then | 6922 | // if the avatar is sitting on this object, then |
7163 | // we can unsit them. We don't want random scripts unsitting random people | 6923 | // we can unsit them. We don't want random scripts unsitting random people |
@@ -8152,16 +7912,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8152 | UUID av = new UUID(); | 7912 | UUID av = new UUID(); |
8153 | if (!UUID.TryParse(avatar,out av)) | 7913 | if (!UUID.TryParse(avatar,out av)) |
8154 | { | 7914 | { |
8155 | <<<<<<< HEAD | ||
8156 | Error("llDialog", "First parameter must be a key"); | 7915 | Error("llDialog", "First parameter must be a key"); |
8157 | ======= | ||
8158 | //LSLError("First parameter to llDialog needs to be a key"); | ||
8159 | >>>>>>> avn/ubitvar | ||
8160 | return; | 7916 | return; |
8161 | } | 7917 | } |
8162 | if (buttons.Length < 1) | 7918 | if (buttons.Length < 1) |
8163 | { | 7919 | { |
8164 | <<<<<<< HEAD | ||
8165 | Error("llDialog", "At least 1 button must be shown"); | 7920 | Error("llDialog", "At least 1 button must be shown"); |
8166 | return; | 7921 | return; |
8167 | } | 7922 | } |
@@ -8169,13 +7924,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8169 | { | 7924 | { |
8170 | Error("llDialog", "No more than 12 buttons can be shown"); | 7925 | Error("llDialog", "No more than 12 buttons can be shown"); |
8171 | return; | 7926 | return; |
8172 | ======= | ||
8173 | buttons.Add("OK"); | ||
8174 | } | ||
8175 | if (buttons.Length > 12) | ||
8176 | { | ||
8177 | ShoutError("button list too long, must be 12 or fewer entries"); | ||
8178 | >>>>>>> avn/ubitvar | ||
8179 | } | 7927 | } |
8180 | int length = buttons.Length; | 7928 | int length = buttons.Length; |
8181 | if (length > 12) | 7929 | if (length > 12) |
@@ -8186,20 +7934,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8186 | { | 7934 | { |
8187 | if (buttons.Data[i].ToString() == String.Empty) | 7935 | if (buttons.Data[i].ToString() == String.Empty) |
8188 | { | 7936 | { |
8189 | <<<<<<< HEAD | ||
8190 | Error("llDialog", "Button label cannot be blank"); | 7937 | Error("llDialog", "Button label cannot be blank"); |
8191 | ======= | ||
8192 | ShoutError("button label cannot be blank"); | ||
8193 | >>>>>>> avn/ubitvar | ||
8194 | return; | 7938 | return; |
8195 | } | 7939 | } |
8196 | if (buttons.Data[i].ToString().Length > 24) | 7940 | if (buttons.Data[i].ToString().Length > 24) |
8197 | { | 7941 | { |
8198 | <<<<<<< HEAD | ||
8199 | Error("llDialog", "Button label cannot be longer than 24 characters"); | 7942 | Error("llDialog", "Button label cannot be longer than 24 characters"); |
8200 | ======= | ||
8201 | ShoutError("button label cannot be longer than 24 characters"); | ||
8202 | >>>>>>> avn/ubitvar | ||
8203 | return; | 7943 | return; |
8204 | } | 7944 | } |
8205 | buts[i] = buttons.Data[i].ToString(); | 7945 | buts[i] = buttons.Data[i].ToString(); |
@@ -8750,7 +8490,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8750 | ScriptSleep(m_sleepMsOnSetPrimitiveParams); | 8490 | ScriptSleep(m_sleepMsOnSetPrimitiveParams); |
8751 | } | 8491 | } |
8752 | 8492 | ||
8753 | <<<<<<< HEAD | ||
8754 | public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) | 8493 | public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) |
8755 | { | 8494 | { |
8756 | m_host.AddScriptLPS(1); | 8495 | m_host.AddScriptLPS(1); |
@@ -8760,8 +8499,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8760 | ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); | 8499 | ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); |
8761 | } | 8500 | } |
8762 | 8501 | ||
8763 | ======= | ||
8764 | >>>>>>> avn/ubitvar | ||
8765 | public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) | 8502 | public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) |
8766 | { | 8503 | { |
8767 | m_host.AddScriptLPS(1); | 8504 | m_host.AddScriptLPS(1); |
@@ -8769,13 +8506,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8769 | SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); | 8506 | SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); |
8770 | } | 8507 | } |
8771 | 8508 | ||
8772 | <<<<<<< HEAD | 8509 | private void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc) |
8773 | protected void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc) | ||
8774 | { | ||
8775 | SetEntityParams(GetLinkEntities(linknumber), rules, originFunc); | ||
8776 | } | ||
8777 | ======= | ||
8778 | private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc) | ||
8779 | { | 8510 | { |
8780 | List<object> parts = new List<object>(); | 8511 | List<object> parts = new List<object>(); |
8781 | List<SceneObjectPart> prims = GetLinkParts(linknumber); | 8512 | List<SceneObjectPart> prims = GetLinkParts(linknumber); |
@@ -8784,14 +8515,49 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8784 | parts.Add(p); | 8515 | parts.Add(p); |
8785 | foreach (ScenePresence p in avatars) | 8516 | foreach (ScenePresence p in avatars) |
8786 | parts.Add(p); | 8517 | parts.Add(p); |
8787 | >>>>>>> avn/ubitvar | 8518 | |
8519 | LSL_List remaining = new LSL_List(); | ||
8520 | uint rulesParsed = 0; | ||
8521 | |||
8522 | if (parts.Count > 0) | ||
8523 | { | ||
8524 | foreach (object part in parts) | ||
8525 | { | ||
8526 | if (part is SceneObjectPart) | ||
8527 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8528 | else | ||
8529 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8530 | } | ||
8531 | |||
8532 | while (remaining.Length > 2) | ||
8533 | { | ||
8534 | linknumber = remaining.GetLSLIntegerItem(0); | ||
8535 | rules = remaining.GetSublist(1, -1); | ||
8536 | parts.Clear(); | ||
8537 | prims = GetLinkParts(linknumber); | ||
8538 | avatars = GetLinkAvatars(linknumber); | ||
8539 | foreach (SceneObjectPart p in prims) | ||
8540 | parts.Add(p); | ||
8541 | foreach (ScenePresence p in avatars) | ||
8542 | parts.Add(p); | ||
8543 | |||
8544 | remaining = new LSL_List(); | ||
8545 | foreach (object part in parts) | ||
8546 | { | ||
8547 | if (part is SceneObjectPart) | ||
8548 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8549 | else | ||
8550 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8551 | } | ||
8552 | } | ||
8553 | } | ||
8554 | } | ||
8788 | 8555 | ||
8789 | protected void SetEntityParams(List<ISceneEntity> entities, LSL_List rules, string originFunc) | 8556 | protected void SetEntityParams(List<ISceneEntity> entities, LSL_List rules, string originFunc) |
8790 | { | 8557 | { |
8791 | LSL_List remaining = new LSL_List(); | 8558 | LSL_List remaining = new LSL_List(); |
8792 | uint rulesParsed = 0; | 8559 | uint rulesParsed = 0; |
8793 | 8560 | ||
8794 | <<<<<<< HEAD | ||
8795 | foreach (ISceneEntity entity in entities) | 8561 | foreach (ISceneEntity entity in entities) |
8796 | { | 8562 | { |
8797 | if (entity is SceneObjectPart) | 8563 | if (entity is SceneObjectPart) |
@@ -8826,51 +8592,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8826 | } | 8592 | } |
8827 | } | 8593 | } |
8828 | 8594 | ||
8829 | public void llSetKeyframedMotion(LSL_List frames, LSL_List options) | ||
8830 | { | ||
8831 | SceneObjectGroup group = m_host.ParentGroup; | ||
8832 | |||
8833 | if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical) | ||
8834 | return; | ||
8835 | if (group.IsAttachment) | ||
8836 | return; | ||
8837 | |||
8838 | if (frames.Data.Length > 0) // We are getting a new motion | ||
8839 | ======= | ||
8840 | if (parts.Count > 0) | ||
8841 | >>>>>>> avn/ubitvar | ||
8842 | { | ||
8843 | foreach (object part in parts) | ||
8844 | { | ||
8845 | if (part is SceneObjectPart) | ||
8846 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8847 | else | ||
8848 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8849 | } | ||
8850 | |||
8851 | while ((object)remaining != null && remaining.Length > 2) | ||
8852 | { | ||
8853 | linknumber = remaining.GetLSLIntegerItem(0); | ||
8854 | rules = remaining.GetSublist(1, -1); | ||
8855 | parts.Clear(); | ||
8856 | prims = GetLinkParts(linknumber); | ||
8857 | avatars = GetLinkAvatars(linknumber); | ||
8858 | foreach (SceneObjectPart p in prims) | ||
8859 | parts.Add(p); | ||
8860 | foreach (ScenePresence p in avatars) | ||
8861 | parts.Add(p); | ||
8862 | |||
8863 | remaining = null; | ||
8864 | foreach (object part in parts) | ||
8865 | { | ||
8866 | if (part is SceneObjectPart) | ||
8867 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8868 | else | ||
8869 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8870 | } | ||
8871 | } | ||
8872 | } | ||
8873 | } | ||
8874 | 8595 | ||
8875 | public LSL_List llGetPhysicsMaterial() | 8596 | public LSL_List llGetPhysicsMaterial() |
8876 | { | 8597 | { |
@@ -8914,13 +8635,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8914 | SetPhysicsMaterial(m_host, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier); | 8635 | SetPhysicsMaterial(m_host, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier); |
8915 | } | 8636 | } |
8916 | 8637 | ||
8917 | public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) | ||
8918 | { | ||
8919 | setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParams"); | ||
8920 | llSetLinkPrimitiveParamsFast(linknumber, rules); | ||
8921 | ScriptSleep(200); | ||
8922 | } | ||
8923 | |||
8924 | // vector up using libomv (c&p from sop ) | 8638 | // vector up using libomv (c&p from sop ) |
8925 | // vector up rotated by r | 8639 | // vector up rotated by r |
8926 | private Vector3 Zrot(Quaternion r) | 8640 | private Vector3 Zrot(Quaternion r) |
@@ -8947,7 +8661,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8947 | protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed) | 8661 | protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed) |
8948 | { | 8662 | { |
8949 | if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) | 8663 | if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) |
8950 | return null; | 8664 | return new LSL_List(); |
8951 | 8665 | ||
8952 | int idx = 0; | 8666 | int idx = 0; |
8953 | int idxStart = 0; | 8667 | int idxStart = 0; |
@@ -8977,26 +8691,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8977 | if (remain < 1) | 8691 | if (remain < 1) |
8978 | return new LSL_List(); | 8692 | return new LSL_List(); |
8979 | 8693 | ||
8980 | <<<<<<< HEAD | ||
8981 | try | ||
8982 | { | ||
8983 | v = rules.GetVector3Item(idx++); | ||
8984 | } | ||
8985 | catch(InvalidCastException) | ||
8986 | { | ||
8987 | if(code == ScriptBaseClass.PRIM_POSITION) | ||
8988 | Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); | ||
8989 | else | ||
8990 | Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); | ||
8991 | return new LSL_List(); | ||
8992 | } | ||
8993 | ======= | ||
8994 | v=rules.GetVector3Item(idx++); | 8694 | v=rules.GetVector3Item(idx++); |
8995 | if (part.IsRoot && !part.ParentGroup.IsAttachment) | 8695 | if (part.IsRoot && !part.ParentGroup.IsAttachment) |
8996 | currentPosition = GetSetPosTarget(part, v, currentPosition, true); | 8696 | currentPosition = GetSetPosTarget(part, v, currentPosition, true); |
8997 | else | 8697 | else |
8998 | currentPosition = GetSetPosTarget(part, v, currentPosition, false); | 8698 | currentPosition = GetSetPosTarget(part, v, currentPosition, false); |
8999 | >>>>>>> avn/ubitvar | ||
9000 | positionChanged = true; | 8699 | positionChanged = true; |
9001 | 8700 | ||
9002 | break; | 8701 | break; |
@@ -10023,12 +9722,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10023 | 9722 | ||
10024 | break; | 9723 | break; |
10025 | 9724 | ||
10026 | <<<<<<< HEAD | ||
10027 | case ScriptBaseClass.PRIM_TEMP_ON_REZ: | ||
10028 | ======= | ||
10029 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: | 9725 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: |
10030 | if (remain < 5) | 9726 | if (remain < 5) |
10031 | return null; | 9727 | return new LSL_List(); |
10032 | 9728 | ||
10033 | int material_bits = rules.GetLSLIntegerItem(idx++); | 9729 | int material_bits = rules.GetLSLIntegerItem(idx++); |
10034 | float material_density = (float)rules.GetLSLFloatItem(idx++); | 9730 | float material_density = (float)rules.GetLSLFloatItem(idx++); |
@@ -10041,7 +9737,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10041 | break; | 9737 | break; |
10042 | 9738 | ||
10043 | case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: | 9739 | case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: |
10044 | >>>>>>> avn/ubitvar | ||
10045 | if (remain < 1) | 9740 | if (remain < 1) |
10046 | return new LSL_List(); | 9741 | return new LSL_List(); |
10047 | string temp = rules.Data[idx++].ToString(); | 9742 | string temp = rules.Data[idx++].ToString(); |
@@ -10397,12 +10092,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10397 | 10092 | ||
10398 | public LSL_String llXorBase64Strings(string str1, string str2) | 10093 | public LSL_String llXorBase64Strings(string str1, string str2) |
10399 | { | 10094 | { |
10400 | <<<<<<< HEAD | ||
10401 | m_host.AddScriptLPS(1); | ||
10402 | Deprecated("llXorBase64Strings", "Use llXorBase64 instead"); | ||
10403 | ScriptSleep(m_sleepMsOnXorBase64Strings); | ||
10404 | return String.Empty; | ||
10405 | ======= | ||
10406 | int padding = 0; | 10095 | int padding = 0; |
10407 | 10096 | ||
10408 | string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | 10097 | string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
@@ -10501,7 +10190,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10501 | output += "="; | 10190 | output += "="; |
10502 | 10191 | ||
10503 | return output; | 10192 | return output; |
10504 | >>>>>>> avn/ubitvar | ||
10505 | } | 10193 | } |
10506 | 10194 | ||
10507 | public void llRemoteDataSetRegion() | 10195 | public void llRemoteDataSetRegion() |
@@ -10645,173 +10333,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10645 | public LSL_List llGetBoundingBox(string obj) | 10333 | public LSL_List llGetBoundingBox(string obj) |
10646 | { | 10334 | { |
10647 | m_host.AddScriptLPS(1); | 10335 | m_host.AddScriptLPS(1); |
10648 | |||
10649 | // Get target avatar if non-seated avatar or attachment, or prim and object | ||
10650 | UUID objID = UUID.Zero; | 10336 | UUID objID = UUID.Zero; |
10651 | UUID.TryParse(obj, out objID); | ||
10652 | ScenePresence agent = World.GetScenePresence(objID); | ||
10653 | if (agent != null) | ||
10654 | { | ||
10655 | if (agent.ParentPart != null) | ||
10656 | { | ||
10657 | objID = agent.ParentPart.UUID; | ||
10658 | agent = null; | ||
10659 | } | ||
10660 | } | ||
10661 | SceneObjectGroup group = null; | ||
10662 | SceneObjectPart target = World.GetSceneObjectPart(objID); | ||
10663 | if (target != null) | ||
10664 | { | ||
10665 | group = target.ParentGroup; | ||
10666 | if (group.IsAttachment) { | ||
10667 | objID = group.AttachedAvatar; | ||
10668 | agent = World.GetScenePresence(objID); | ||
10669 | group = null; | ||
10670 | target = null; | ||
10671 | } | ||
10672 | } | ||
10673 | |||
10674 | // Initialize but break if no target | ||
10675 | LSL_List result = new LSL_List(); | 10337 | LSL_List result = new LSL_List(); |
10676 | <<<<<<< HEAD | ||
10677 | int groupCount = 0; | ||
10678 | int partCount = 0; | ||
10679 | int vertexCount = 0; | ||
10680 | if (target == null && agent == null) | ||
10681 | ======= | ||
10682 | 10338 | ||
10683 | // If the ID is not valid, return null result | 10339 | // If the ID is not valid, return null result |
10684 | if (!UUID.TryParse(obj, out objID)) | 10340 | if (!UUID.TryParse(obj, out objID)) |
10685 | >>>>>>> avn/ubitvar | ||
10686 | { | 10341 | { |
10687 | result.Add(new LSL_Vector()); | 10342 | result.Add(new LSL_Vector()); |
10688 | result.Add(new LSL_Vector()); | 10343 | result.Add(new LSL_Vector()); |
10689 | if (m_addStatsInGetBoundingBox) | ||
10690 | result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); | ||
10691 | return result; | 10344 | return result; |
10692 | } | 10345 | } |
10693 | <<<<<<< HEAD | ||
10694 | Vector3 minPosition = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); | ||
10695 | Vector3 maxPosition = new Vector3(float.MinValue, float.MinValue, float.MinValue); | ||
10696 | |||
10697 | // Try to get a mesher | ||
10698 | IRendering primMesher = null; | ||
10699 | List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); | ||
10700 | if (renderers.Count > 0) | ||
10701 | primMesher = RenderingLoader.LoadRenderer(renderers[0]); | ||
10702 | |||
10703 | // Get bounding box of just avatar, seated or not | ||
10704 | if (agent != null) | ||
10705 | { | ||
10706 | bool hasParent = false; | ||
10707 | Vector3 lower; | ||
10708 | Vector3 upper; | ||
10709 | BoundingBoxOfScenePresence(agent, out lower, out upper); | ||
10710 | Vector3 offset = Vector3.Zero; | ||
10711 | |||
10712 | // Since local bounding box unrotated and untilted, keep it simple | ||
10713 | AddBoundingBoxOfSimpleBox(lower, upper, offset, agent.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10714 | partCount++; | ||
10715 | groupCount++; | ||
10716 | |||
10717 | // Return lower and upper bounding box corners | ||
10718 | result.Add(new LSL_Vector(minPosition)); | ||
10719 | result.Add(new LSL_Vector(maxPosition)); | ||
10720 | if (m_addStatsInGetBoundingBox) | ||
10721 | result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); | ||
10722 | return result; | ||
10723 | } | ||
10724 | // Get bounding box of object including seated avatars | ||
10725 | else if (group != null) | ||
10726 | { | ||
10727 | // Merge bounding boxes of all parts (prims and mesh) | ||
10728 | foreach (SceneObjectPart part in group.Parts) | ||
10729 | { | ||
10730 | bool hasParent = (!part.IsRoot); | ||
10731 | // When requested or if no mesher, keep it simple | ||
10732 | if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) | ||
10733 | { | ||
10734 | AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10735 | } | ||
10736 | // Do the full mounty | ||
10737 | else | ||
10738 | { | ||
10739 | Primitive omvPrim = part.Shape.ToOmvPrimitive(part.OffsetPosition, part.RotationOffset); | ||
10740 | byte[] sculptAsset = null; | ||
10741 | if (omvPrim.Sculpt != null) | ||
10742 | sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString()); | ||
10743 | |||
10744 | // When part is mesh | ||
10745 | // Quirk: Only imports as incompletely populated faceted mesh object, so needs an own handler. | ||
10746 | if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null) | ||
10747 | { | ||
10748 | AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset); | ||
10749 | FacetedMesh mesh = null; | ||
10750 | FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, DetailLevel.Highest, out mesh); | ||
10751 | meshAsset = null; | ||
10752 | if (mesh != null) | ||
10753 | { | ||
10754 | AddBoundingBoxOfFacetedMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10755 | mesh = null; | ||
10756 | } | ||
10757 | } | ||
10758 | |||
10759 | // When part is sculpt | ||
10760 | // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt. | ||
10761 | else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null) | ||
10762 | { | ||
10763 | IJ2KDecoder imgDecoder = World.RequestModuleInterface<IJ2KDecoder>(); | ||
10764 | if (imgDecoder != null) | ||
10765 | { | ||
10766 | Image sculpt = imgDecoder.DecodeToImage(sculptAsset); | ||
10767 | if (sculpt != null) | ||
10768 | { | ||
10769 | SimpleMesh mesh = primMesher.GenerateSimpleSculptMesh(omvPrim, (Bitmap)sculpt, DetailLevel.Medium); | ||
10770 | sculpt.Dispose(); | ||
10771 | if (mesh != null) | ||
10772 | { | ||
10773 | AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10774 | mesh = null; | ||
10775 | } | ||
10776 | } | ||
10777 | } | ||
10778 | } | ||
10779 | |||
10780 | // When part is prim | ||
10781 | else if (omvPrim.Sculpt == null) | ||
10782 | { | ||
10783 | SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); | ||
10784 | if (mesh != null) | ||
10785 | { | ||
10786 | AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10787 | mesh = null; | ||
10788 | } | ||
10789 | } | ||
10790 | |||
10791 | // When all else fails, try fallback to simple box | ||
10792 | else | ||
10793 | { | ||
10794 | AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10795 | } | ||
10796 | } | ||
10797 | partCount++; | ||
10798 | } | ||
10799 | } | ||
10800 | |||
10801 | // Merge bounding boxes of seated avatars | ||
10802 | foreach (ScenePresence sp in group.GetSittingAvatars()) | ||
10803 | { | ||
10804 | Vector3 lower; | ||
10805 | Vector3 upper; | ||
10806 | BoundingBoxOfScenePresence(sp, out lower, out upper); | ||
10807 | Vector3 offset = sp.OffsetPosition; | ||
10808 | |||
10809 | bool hasParent = true; | ||
10810 | // When requested or if no mesher, keep it simple | ||
10811 | if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) | ||
10812 | { | ||
10813 | AddBoundingBoxOfSimpleBox(lower, upper, offset, sp.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10814 | ======= | ||
10815 | 10346 | ||
10816 | // Check if this is an attached prim. If so, replace | 10347 | // Check if this is an attached prim. If so, replace |
10817 | // the UUID with the avatar UUID and report it's bounding box | 10348 | // the UUID with the avatar UUID and report it's bounding box |
@@ -10855,68 +10386,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10855 | // This is for ground sitting avatars TODO! | 10386 | // This is for ground sitting avatars TODO! |
10856 | lower = new LSL_Vector(-box.X - 0.1125, -box.Y, box.Z * -1.0f); | 10387 | lower = new LSL_Vector(-box.X - 0.1125, -box.Y, box.Z * -1.0f); |
10857 | upper = new LSL_Vector(box.X + 0.1125, box.Y, box.Z * -1.0f); | 10388 | upper = new LSL_Vector(box.X + 0.1125, box.Y, box.Z * -1.0f); |
10858 | >>>>>>> avn/ubitvar | ||
10859 | } | 10389 | } |
10860 | // Do the full mounty | ||
10861 | else | 10390 | else |
10862 | { | 10391 | { |
10863 | <<<<<<< HEAD | ||
10864 | // Prim shapes don't do center offsets, so add it here. | ||
10865 | offset = offset + (lower + upper) * 0.5f * sp.Rotation; | ||
10866 | Primitive omvPrim = MakeOpenMetaversePrim(upper - lower, offset, sp.Rotation, ScriptBaseClass.PRIM_TYPE_SPHERE); | ||
10867 | SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); | ||
10868 | AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10869 | mesh = null; | ||
10870 | } | ||
10871 | partCount++; | ||
10872 | } | ||
10873 | |||
10874 | groupCount++; | ||
10875 | |||
10876 | // Return lower and upper bounding box corners | ||
10877 | result.Add(new LSL_Vector(minPosition)); | ||
10878 | result.Add(new LSL_Vector(maxPosition)); | ||
10879 | if (m_addStatsInGetBoundingBox) | ||
10880 | result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); | ||
10881 | |||
10882 | primMesher = null; | ||
10883 | return result; | ||
10884 | } | ||
10885 | |||
10886 | /// <summary> | ||
10887 | /// Helper to calculate bounding box of an avatar. | ||
10888 | /// </summary> | ||
10889 | private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper) | ||
10890 | { | ||
10891 | // Adjust from OS model | ||
10892 | // avatar height = visual height - 0.2, bounding box height = visual height | ||
10893 | // to SL model | ||
10894 | // avatar height = visual height, bounding box height = visual height + 0.2 | ||
10895 | float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection; | ||
10896 | |||
10897 | // According to avatar bounding box in SL 2015-04-18: | ||
10898 | // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h> | ||
10899 | // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5> | ||
10900 | // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h> | ||
10901 | |||
10902 | // When avatar is sitting | ||
10903 | if (sp.ParentPart != null) | ||
10904 | { | ||
10905 | lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height); | ||
10906 | upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height); | ||
10907 | } | ||
10908 | // When avatar is groundsitting | ||
10909 | else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) | ||
10910 | { | ||
10911 | lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height); | ||
10912 | upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height); | ||
10913 | } | ||
10914 | // When avatar is standing or flying | ||
10915 | else | ||
10916 | { | ||
10917 | lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height); | ||
10918 | upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height); | ||
10919 | ======= | ||
10920 | // This is for standing/flying avatars | 10392 | // This is for standing/flying avatars |
10921 | lower = new LSL_Vector(-box.X, -box.Y, -box.Z); | 10393 | lower = new LSL_Vector(-box.X, -box.Y, -box.Z); |
10922 | upper = new LSL_Vector(box.X, box.Y, box.Z); | 10394 | upper = new LSL_Vector(box.X, box.Y, box.Z); |
@@ -10974,230 +10446,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10974 | result.Add(lower); | 10446 | result.Add(lower); |
10975 | result.Add(upper); | 10447 | result.Add(upper); |
10976 | return result; | 10448 | return result; |
10977 | >>>>>>> avn/ubitvar | ||
10978 | } | ||
10979 | } | ||
10980 | |||
10981 | /// <summary> | ||
10982 | /// Helper to approximate a part with a simple box. | ||
10983 | /// </summary> | ||
10984 | private void AddBoundingBoxOfSimpleBox(Vector3 corner1, Vector3 corner2, Vector3 offset, Quaternion rotation, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) | ||
10985 | { | ||
10986 | // Parse the 8 box corners | ||
10987 | for (int i = 0; i < 8; i++) | ||
10988 | { | ||
10989 | // Calculate each box corner | ||
10990 | Vector3 position = corner1; | ||
10991 | if ((i & 1) != 0) | ||
10992 | position.X = corner2.X; | ||
10993 | if ((i & 2) != 0) | ||
10994 | position.Y = corner2.Y; | ||
10995 | if ((i & 4) != 0) | ||
10996 | position.Z = corner2.Z; | ||
10997 | // Rotate part unless part is root | ||
10998 | if (hasParent) | ||
10999 | position = position * rotation; | ||
11000 | position = position + offset; | ||
11001 | // Adjust lower and upper bounding box corners if needed | ||
11002 | lower = Vector3.Min(lower, position); | ||
11003 | upper = Vector3.Max(upper, position); | ||
11004 | count++; | ||
11005 | } | ||
11006 | } | ||
11007 | |||
11008 | /// <summary> | ||
11009 | /// Helper to parse a meshed prim and needed especially | ||
11010 | /// for accuracy with tortured prims and sculpts. | ||
11011 | /// </summary> | ||
11012 | private void AddBoundingBoxOfSimpleMesh(SimpleMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) | ||
11013 | { | ||
11014 | // Quirk: A meshed box contains 10 instead of the 8 necessary vertices. | ||
11015 | if (mesh != null) | ||
11016 | { | ||
11017 | // Parse each vertex in mesh | ||
11018 | foreach (Vertex vertex in mesh.Vertices) | ||
11019 | { | ||
11020 | Vector3 position = vertex.Position; | ||
11021 | position = position * prim.Scale; | ||
11022 | // Rotate part unless part is root | ||
11023 | if (hasParent) | ||
11024 | position = position * prim.Rotation; | ||
11025 | position = position + prim.Position; | ||
11026 | // Adjust lower and upper bounding box corners if needed | ||
11027 | lower = Vector3.Min(lower, position); | ||
11028 | upper = Vector3.Max(upper, position); | ||
11029 | count++; | ||
11030 | } | ||
11031 | } | ||
11032 | } | ||
11033 | |||
11034 | /// <summary> | ||
11035 | /// Helper to parse mesh because no method exists | ||
11036 | /// to parse mesh assets to SimpleMesh. | ||
11037 | /// </summary> | ||
11038 | private void AddBoundingBoxOfFacetedMesh(FacetedMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) | ||
11039 | { | ||
11040 | if (mesh != null) | ||
11041 | { | ||
11042 | // Parse each face in mesh | ||
11043 | // since vertex array isn't populated. | ||
11044 | // This parses each unique vertex 3-6 times. | ||
11045 | foreach (Face face in mesh.Faces) | ||
11046 | { | ||
11047 | // Parse each vertex in face | ||
11048 | foreach (Vertex vertex in face.Vertices) | ||
11049 | { | ||
11050 | Vector3 position = vertex.Position; | ||
11051 | position = position * prim.Scale; | ||
11052 | // Rotate part unless part is root | ||
11053 | if (hasParent) | ||
11054 | position = position * prim.Rotation; | ||
11055 | position = position + prim.Position; | ||
11056 | // Adjust lower and upper bounding box corners if needed | ||
11057 | lower = Vector3.Min(lower, position); | ||
11058 | upper = Vector3.Max(upper, position); | ||
11059 | count++; | ||
11060 | } | ||
11061 | } | ||
11062 | } | 10449 | } |
11063 | } | ||
11064 | 10450 | ||
11065 | /// <summary> | 10451 | // Not found so return empty values |
11066 | /// Helper to make up an OpenMetaverse prim | 10452 | result.Add(new LSL_Vector()); |
11067 | /// needed to create mesh from parts. | 10453 | result.Add(new LSL_Vector()); |
11068 | /// </summary> | 10454 | return result; |
11069 | private Primitive MakeOpenMetaversePrim(Vector3 scale, Vector3 position, Quaternion rotation, int primType) | ||
11070 | { | ||
11071 | // Initialize and set common parameters | ||
11072 | Primitive prim = new OpenMetaverse.Primitive(); | ||
11073 | prim.Scale = scale; | ||
11074 | prim.Position = position; | ||
11075 | prim.Rotation = rotation; | ||
11076 | prim.PrimData.PathShearX = 0.0f; | ||
11077 | prim.PrimData.PathShearY = 0.0f; | ||
11078 | prim.PrimData.PathBegin = 0.0f; | ||
11079 | prim.PrimData.PathEnd = 1.0f; | ||
11080 | prim.PrimData.PathScaleX = 1.0f; | ||
11081 | prim.PrimData.PathScaleY = 1.0f; | ||
11082 | prim.PrimData.PathTaperX = 0.0f; | ||
11083 | prim.PrimData.PathTaperY = 0.0f; | ||
11084 | prim.PrimData.PathTwistBegin = 0.0f; | ||
11085 | prim.PrimData.PathTwist = 0.0f; | ||
11086 | prim.PrimData.ProfileBegin = 0.0f; | ||
11087 | prim.PrimData.ProfileEnd = 1.0f; | ||
11088 | prim.PrimData.ProfileHollow = 0.0f; | ||
11089 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11090 | prim.PrimData.ProfileHole = (HoleType)0; | ||
11091 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11092 | prim.PrimData.PathRadiusOffset = 0.0f; | ||
11093 | prim.PrimData.PathRevolutions = 1.0f; | ||
11094 | prim.PrimData.PathSkew = 0.0f; | ||
11095 | prim.PrimData.PCode = OpenMetaverse.PCode.Prim; | ||
11096 | prim.PrimData.State = (byte)0; | ||
11097 | |||
11098 | // Set type specific parameters | ||
11099 | switch (primType) | ||
11100 | { | ||
11101 | // Set specific parameters for box | ||
11102 | case ScriptBaseClass.PRIM_TYPE_BOX: | ||
11103 | prim.PrimData.PathScaleY = 1.0f; | ||
11104 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11105 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11106 | break; | ||
11107 | // Set specific parameters for cylinder | ||
11108 | case ScriptBaseClass.PRIM_TYPE_CYLINDER: | ||
11109 | prim.PrimData.PathScaleY = 1.0f; | ||
11110 | prim.PrimData.ProfileCurve = (ProfileCurve)0; | ||
11111 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11112 | break; | ||
11113 | // Set specific parameters for prism | ||
11114 | case ScriptBaseClass.PRIM_TYPE_PRISM: | ||
11115 | prim.PrimData.PathScaleY = 1.0f; | ||
11116 | prim.PrimData.ProfileCurve = (ProfileCurve)3; | ||
11117 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11118 | break; | ||
11119 | // Set specific parameters for sphere | ||
11120 | case ScriptBaseClass.PRIM_TYPE_SPHERE: | ||
11121 | prim.PrimData.PathScaleY = 1.0f; | ||
11122 | prim.PrimData.ProfileCurve = (ProfileCurve)5; | ||
11123 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11124 | break; | ||
11125 | // Set specific parameters for torus | ||
11126 | case ScriptBaseClass.PRIM_TYPE_TORUS: | ||
11127 | prim.PrimData.PathScaleY = 0.5f; | ||
11128 | prim.PrimData.ProfileCurve = (ProfileCurve)0; | ||
11129 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11130 | break; | ||
11131 | // Set specific parameters for tube | ||
11132 | case ScriptBaseClass.PRIM_TYPE_TUBE: | ||
11133 | prim.PrimData.PathScaleY = 0.5f; | ||
11134 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11135 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11136 | break; | ||
11137 | // Set specific parameters for ring | ||
11138 | case ScriptBaseClass.PRIM_TYPE_RING: | ||
11139 | prim.PrimData.PathScaleY = 0.5f; | ||
11140 | prim.PrimData.ProfileCurve = (ProfileCurve)3; | ||
11141 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11142 | break; | ||
11143 | // Set specific parameters for sculpt | ||
11144 | case ScriptBaseClass.PRIM_TYPE_SCULPT: | ||
11145 | prim.PrimData.PathScaleY = 1.0f; | ||
11146 | prim.PrimData.ProfileCurve = (ProfileCurve)5; | ||
11147 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11148 | break; | ||
11149 | // Default to specific parameters for box | ||
11150 | default: | ||
11151 | prim.PrimData.PathScaleY = 1.0f; | ||
11152 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11153 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11154 | break; | ||
11155 | } | ||
11156 | |||
11157 | return prim; | ||
11158 | } | 10455 | } |
11159 | 10456 | ||
11160 | /// <summary> | ||
11161 | /// Implementation of llGetGeometricCenter according to SL 2015-04-30. | ||
11162 | /// http://wiki.secondlife.com/wiki/LlGetGeometricCenter | ||
11163 | /// Returns the average position offset of all linked parts, | ||
11164 | /// including the root prim and seated avatars, | ||
11165 | /// relative to the root prim in local coordinates. | ||
11166 | /// </summary> | ||
11167 | public LSL_Vector llGetGeometricCenter() | 10457 | public LSL_Vector llGetGeometricCenter() |
11168 | { | 10458 | { |
11169 | // Subtract whatever position the root prim has to make it zero | 10459 | return new LSL_Vector(m_host.GetGeometricCenter()); |
11170 | Vector3 offset = m_host.ParentGroup.RootPart.OffsetPosition * -1.0f; | ||
11171 | |||
11172 | // Add all prim/part position offsets | ||
11173 | foreach (SceneObjectPart part in m_host.ParentGroup.Parts) | ||
11174 | offset = offset + part.OffsetPosition; | ||
11175 | // Add all avatar/scene presence position offsets | ||
11176 | foreach (ScenePresence sp in m_host.ParentGroup.GetSittingAvatars()) | ||
11177 | offset = offset + sp.OffsetPosition; | ||
11178 | |||
11179 | // Calculate and return the average offset | ||
11180 | offset = offset / (float)(m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount()); | ||
11181 | return new LSL_Vector(offset); | ||
11182 | } | 10460 | } |
11183 | 10461 | ||
11184 | public LSL_List llGetPrimitiveParams(LSL_List rules) | 10462 | public LSL_List llGetPrimitiveParams(LSL_List rules) |
11185 | { | 10463 | { |
11186 | <<<<<<< HEAD | ||
11187 | LSL_List result = new LSL_List(); | ||
11188 | LSL_List remaining; | ||
11189 | |||
11190 | while (true) | ||
11191 | { | ||
11192 | // m_log.DebugFormat( | ||
11193 | // "[LSL API]: GetEntityParams has {0} rules with scene entity named {1}", | ||
11194 | // rules.Length, entity != null ? entity.Name : "NULL"); | ||
11195 | |||
11196 | if (entity == null) | ||
11197 | return result; | ||
11198 | ======= | ||
11199 | m_host.AddScriptLPS(1); | 10464 | m_host.AddScriptLPS(1); |
11200 | >>>>>>> avn/ubitvar | ||
11201 | 10465 | ||
11202 | LSL_List result = new LSL_List(); | 10466 | LSL_List result = new LSL_List(); |
11203 | 10467 | ||
@@ -11207,13 +10471,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11207 | { | 10471 | { |
11208 | int linknumber = remaining.GetLSLIntegerItem(0); | 10472 | int linknumber = remaining.GetLSLIntegerItem(0); |
11209 | rules = remaining.GetSublist(1, -1); | 10473 | rules = remaining.GetSublist(1, -1); |
11210 | <<<<<<< HEAD | ||
11211 | entity = GetLinkEntity(m_host, linknumber); | ||
11212 | } | ||
11213 | } | ||
11214 | ======= | ||
11215 | List<SceneObjectPart> parts = GetLinkParts(linknumber); | 10474 | List<SceneObjectPart> parts = GetLinkParts(linknumber); |
11216 | >>>>>>> avn/ubitvar | ||
11217 | 10475 | ||
11218 | foreach (SceneObjectPart part in parts) | 10476 | foreach (SceneObjectPart part in parts) |
11219 | remaining = GetPrimParams(part, rules, ref result); | 10477 | remaining = GetPrimParams(part, rules, ref result); |
@@ -11226,185 +10484,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11226 | { | 10484 | { |
11227 | m_host.AddScriptLPS(1); | 10485 | m_host.AddScriptLPS(1); |
11228 | 10486 | ||
11229 | <<<<<<< HEAD | ||
11230 | return GetEntityParams(GetLinkEntity(m_host, linknumber), rules); | ||
11231 | } | ||
11232 | ======= | ||
11233 | // acording to SL wiki this must indicate a single link number or link_root or link_this. | 10487 | // acording to SL wiki this must indicate a single link number or link_root or link_this. |
11234 | // keep other options as before | 10488 | // keep other options as before |
11235 | >>>>>>> avn/ubitvar | ||
11236 | 10489 | ||
11237 | List<SceneObjectPart> parts; | 10490 | List<SceneObjectPart> parts; |
11238 | List<ScenePresence> avatars; | 10491 | List<ScenePresence> avatars; |
11239 | 10492 | ||
11240 | LSL_List res = new LSL_List(); | 10493 | LSL_List res = new LSL_List(); |
11241 | LSL_List remaining = null; | 10494 | LSL_List remaining = new LSL_List(); |
11242 | 10495 | ||
11243 | while (rules.Length > 0) | 10496 | while (rules.Length > 0) |
11244 | { | 10497 | { |
11245 | parts = GetLinkParts(linknumber); | 10498 | parts = GetLinkParts(linknumber); |
11246 | avatars = GetLinkAvatars(linknumber); | 10499 | avatars = GetLinkAvatars(linknumber); |
11247 | 10500 | ||
11248 | remaining = null; | 10501 | remaining = new LSL_List(); |
11249 | foreach (SceneObjectPart part in parts) | 10502 | foreach (SceneObjectPart part in parts) |
11250 | { | 10503 | { |
11251 | <<<<<<< HEAD | ||
11252 | case (int)ScriptBaseClass.PRIM_MATERIAL: | ||
11253 | res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MATERIAL_FLESH)); | ||
11254 | break; | ||
11255 | |||
11256 | case (int)ScriptBaseClass.PRIM_PHYSICS: | ||
11257 | res.Add(ScriptBaseClass.FALSE); | ||
11258 | break; | ||
11259 | |||
11260 | case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: | ||
11261 | res.Add(ScriptBaseClass.FALSE); | ||
11262 | break; | ||
11263 | |||
11264 | case (int)ScriptBaseClass.PRIM_PHANTOM: | ||
11265 | res.Add(ScriptBaseClass.FALSE); | ||
11266 | break; | ||
11267 | |||
11268 | case (int)ScriptBaseClass.PRIM_POSITION: | ||
11269 | res.Add(new LSL_Vector(sp.AbsolutePosition)); | ||
11270 | break; | ||
11271 | |||
11272 | case (int)ScriptBaseClass.PRIM_SIZE: | ||
11273 | res.Add(GetAgentSize(sp)); | ||
11274 | break; | ||
11275 | |||
11276 | case (int)ScriptBaseClass.PRIM_ROTATION: | ||
11277 | res.Add(sp.GetWorldRotation()); | ||
11278 | break; | ||
11279 | |||
11280 | case (int)ScriptBaseClass.PRIM_TYPE: | ||
11281 | res.Add(new LSL_Integer(ScriptBaseClass.PRIM_TYPE_BOX)); | ||
11282 | res.Add(new LSL_Integer(ScriptBaseClass.PRIM_HOLE_DEFAULT)); | ||
11283 | res.Add(new LSL_Vector(0, 1, 0)); | ||
11284 | res.Add(new LSL_Float(0)); | ||
11285 | res.Add(new LSL_Vector(0, 0, 0)); | ||
11286 | res.Add(new LSL_Vector(1, 1, 0)); | ||
11287 | res.Add(new LSL_Vector(0, 0, 0)); | ||
11288 | break; | ||
11289 | |||
11290 | case (int)ScriptBaseClass.PRIM_TEXTURE: | ||
11291 | if (remain < 1) | ||
11292 | return new LSL_List(); | ||
11293 | |||
11294 | int face = (int)rules.GetLSLIntegerItem(idx++); | ||
11295 | if (face > 21) | ||
11296 | break; | ||
11297 | |||
11298 | res.Add(new LSL_String("")); | ||
11299 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11300 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11301 | res.Add(new LSL_Float(0)); | ||
11302 | break; | ||
11303 | |||
11304 | case (int)ScriptBaseClass.PRIM_COLOR: | ||
11305 | if (remain < 1) | ||
11306 | return new LSL_List(); | ||
11307 | |||
11308 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11309 | if (face > 21) | ||
11310 | break; | ||
11311 | |||
11312 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11313 | res.Add(new LSL_Float(0)); | ||
11314 | break; | ||
11315 | |||
11316 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | ||
11317 | if (remain < 1) | ||
11318 | return new LSL_List(); | ||
11319 | |||
11320 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11321 | if (face > 21) | ||
11322 | break; | ||
11323 | |||
11324 | res.Add(ScriptBaseClass.PRIM_SHINY_NONE); | ||
11325 | res.Add(ScriptBaseClass.PRIM_BUMP_NONE); | ||
11326 | break; | ||
11327 | |||
11328 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | ||
11329 | if (remain < 1) | ||
11330 | return new LSL_List(); | ||
11331 | |||
11332 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11333 | if (face > 21) | ||
11334 | break; | ||
11335 | |||
11336 | res.Add(ScriptBaseClass.FALSE); | ||
11337 | break; | ||
11338 | |||
11339 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: | ||
11340 | res.Add(ScriptBaseClass.FALSE); | ||
11341 | res.Add(new LSL_Integer(0)); | ||
11342 | res.Add(new LSL_Float(0)); | ||
11343 | res.Add(new LSL_Float(0)); | ||
11344 | res.Add(new LSL_Float(0)); | ||
11345 | res.Add(new LSL_Float(0)); | ||
11346 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11347 | break; | ||
11348 | |||
11349 | case (int)ScriptBaseClass.PRIM_TEXGEN: | ||
11350 | if (remain < 1) | ||
11351 | return new LSL_List(); | ||
11352 | |||
11353 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11354 | if (face > 21) | ||
11355 | break; | ||
11356 | |||
11357 | res.Add(ScriptBaseClass.PRIM_TEXGEN_DEFAULT); | ||
11358 | break; | ||
11359 | |||
11360 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: | ||
11361 | res.Add(ScriptBaseClass.FALSE); | ||
11362 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11363 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11364 | break; | ||
11365 | |||
11366 | case (int)ScriptBaseClass.PRIM_GLOW: | ||
11367 | if (remain < 1) | ||
11368 | return new LSL_List(); | ||
11369 | |||
11370 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11371 | if (face > 21) | ||
11372 | break; | ||
11373 | |||
11374 | res.Add(new LSL_Float(0)); | ||
11375 | break; | ||
11376 | |||
11377 | case (int)ScriptBaseClass.PRIM_TEXT: | ||
11378 | res.Add(new LSL_String("")); | ||
11379 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11380 | res.Add(new LSL_Float(1)); | ||
11381 | break; | ||
11382 | |||
11383 | case (int)ScriptBaseClass.PRIM_ROT_LOCAL: | ||
11384 | res.Add(new LSL_Rotation(sp.Rotation)); | ||
11385 | break; | ||
11386 | |||
11387 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: | ||
11388 | res.Add(new LSL_Vector(sp.OffsetPosition)); | ||
11389 | break; | ||
11390 | |||
11391 | case (int)ScriptBaseClass.PRIM_SLICE: | ||
11392 | res.Add(new LSL_Vector(0, 1, 0)); | ||
11393 | break; | ||
11394 | |||
11395 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: | ||
11396 | if(remain < 3) | ||
11397 | return new LSL_List(); | ||
11398 | ======= | ||
11399 | remaining = GetPrimParams(part, rules, ref res); | 10504 | remaining = GetPrimParams(part, rules, ref res); |
11400 | } | 10505 | } |
11401 | foreach (ScenePresence avatar in avatars) | 10506 | foreach (ScenePresence avatar in avatars) |
11402 | { | 10507 | { |
11403 | remaining = GetPrimParams(avatar, rules, ref res); | 10508 | remaining = GetPrimParams(avatar, rules, ref res); |
11404 | } | 10509 | } |
11405 | >>>>>>> avn/ubitvar | ||
11406 | 10510 | ||
11407 | if ((object)remaining != null && remaining.Length > 0) | 10511 | if (remaining.Length > 0) |
11408 | { | 10512 | { |
11409 | linknumber = remaining.GetLSLIntegerItem(0); | 10513 | linknumber = remaining.GetLSLIntegerItem(0); |
11410 | rules = remaining.GetSublist(1, -1); | 10514 | rules = remaining.GetSublist(1, -1); |
@@ -11413,16 +10517,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11413 | break; | 10517 | break; |
11414 | } | 10518 | } |
11415 | 10519 | ||
11416 | <<<<<<< HEAD | ||
11417 | return new LSL_List(); | ||
11418 | ======= | ||
11419 | return res; | 10520 | return res; |
11420 | >>>>>>> avn/ubitvar | ||
11421 | } | 10521 | } |
11422 | 10522 | ||
11423 | public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) | 10523 | public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) |
11424 | { | 10524 | { |
11425 | int idx=0; | 10525 | int idx = 0; |
11426 | while (idx < rules.Length) | 10526 | while (idx < rules.Length) |
11427 | { | 10527 | { |
11428 | int code = (int)rules.GetLSLIntegerItem(idx++); | 10528 | int code = (int)rules.GetLSLIntegerItem(idx++); |
@@ -11470,10 +10570,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11470 | res.Add(GetPartRot(part)); | 10570 | res.Add(GetPartRot(part)); |
11471 | break; | 10571 | break; |
11472 | 10572 | ||
11473 | case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: | ||
11474 | res.Add(new LSL_Integer((int)part.PhysicsShapeType)); | ||
11475 | break; | ||
11476 | |||
11477 | case (int)ScriptBaseClass.PRIM_TYPE: | 10573 | case (int)ScriptBaseClass.PRIM_TYPE: |
11478 | // implementing box | 10574 | // implementing box |
11479 | PrimitiveBaseShape Shape = part.Shape; | 10575 | PrimitiveBaseShape Shape = part.Shape; |
@@ -11567,7 +10663,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11567 | Primitive.TextureEntry tex = part.Shape.Textures; | 10663 | Primitive.TextureEntry tex = part.Shape.Textures; |
11568 | if (face == ScriptBaseClass.ALL_SIDES) | 10664 | if (face == ScriptBaseClass.ALL_SIDES) |
11569 | { | 10665 | { |
11570 | for (face = 0 ; face < GetNumberOfSides(part); face++) | 10666 | for (face = 0; face < GetNumberOfSides(part); face++) |
11571 | { | 10667 | { |
11572 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | 10668 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); |
11573 | 10669 | ||
@@ -11603,13 +10699,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11603 | if (remain < 1) | 10699 | if (remain < 1) |
11604 | return new LSL_List(); | 10700 | return new LSL_List(); |
11605 | 10701 | ||
11606 | face=(int)rules.GetLSLIntegerItem(idx++); | 10702 | face = (int)rules.GetLSLIntegerItem(idx++); |
11607 | 10703 | ||
11608 | tex = part.Shape.Textures; | 10704 | tex = part.Shape.Textures; |
11609 | Color4 texcolor; | 10705 | Color4 texcolor; |
11610 | if (face == ScriptBaseClass.ALL_SIDES) | 10706 | if (face == ScriptBaseClass.ALL_SIDES) |
11611 | { | 10707 | { |
11612 | for (face = 0 ; face < GetNumberOfSides(part); face++) | 10708 | for (face = 0; face < GetNumberOfSides(part); face++) |
11613 | { | 10709 | { |
11614 | texcolor = tex.GetFace((uint)face).RGBA; | 10710 | texcolor = tex.GetFace((uint)face).RGBA; |
11615 | res.Add(new LSL_Vector(texcolor.R, | 10711 | res.Add(new LSL_Vector(texcolor.R, |
@@ -11666,7 +10762,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11666 | Shininess shinyness = tex.GetFace((uint)face).Shiny; | 10762 | Shininess shinyness = tex.GetFace((uint)face).Shiny; |
11667 | if (shinyness == Shininess.High) | 10763 | if (shinyness == Shininess.High) |
11668 | { | 10764 | { |
11669 | shiny = ScriptBaseClass.PRIM_SHINY_HIGH; | 10765 | shiny = ScriptBaseClass.PRIM_SHINY_HIGH; |
11670 | } | 10766 | } |
11671 | else if (shinyness == Shininess.Medium) | 10767 | else if (shinyness == Shininess.Medium) |
11672 | { | 10768 | { |
@@ -11818,7 +10914,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11818 | res.Add(new LSL_Vector(textColor.R, | 10914 | res.Add(new LSL_Vector(textColor.R, |
11819 | textColor.G, | 10915 | textColor.G, |
11820 | textColor.B)); | 10916 | textColor.B)); |
11821 | res.Add(new LSL_Float(1.0 - textColor.A)); | 10917 | res.Add(new LSL_Float(textColor.A)); |
11822 | break; | 10918 | break; |
11823 | 10919 | ||
11824 | case (int)ScriptBaseClass.PRIM_NAME: | 10920 | case (int)ScriptBaseClass.PRIM_NAME: |
@@ -11857,6 +10953,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11857 | return new LSL_List(); | 10953 | return new LSL_List(); |
11858 | } | 10954 | } |
11859 | 10955 | ||
10956 | |||
11860 | public LSL_List llGetPrimMediaParams(int face, LSL_List rules) | 10957 | public LSL_List llGetPrimMediaParams(int face, LSL_List rules) |
11861 | { | 10958 | { |
11862 | m_host.AddScriptLPS(1); | 10959 | m_host.AddScriptLPS(1); |
@@ -13316,16 +12413,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13316 | 12413 | ||
13317 | if (quick_pay_buttons.Data.Length < 4) | 12414 | if (quick_pay_buttons.Data.Length < 4) |
13318 | { | 12415 | { |
13319 | <<<<<<< HEAD | ||
13320 | Error("llSetPayPrice", "List must have at least 4 elements"); | ||
13321 | return; | ||
13322 | ======= | ||
13323 | int x; | 12416 | int x; |
13324 | for (x=quick_pay_buttons.Data.Length; x<= 4; x++) | 12417 | for (x=quick_pay_buttons.Data.Length; x<= 4; x++) |
13325 | { | 12418 | { |
13326 | quick_pay_buttons.Add(ScriptBaseClass.PAY_HIDE); | 12419 | quick_pay_buttons.Add(ScriptBaseClass.PAY_HIDE); |
13327 | } | 12420 | } |
13328 | >>>>>>> avn/ubitvar | ||
13329 | } | 12421 | } |
13330 | int[] nPrice = new int[5]; | 12422 | int[] nPrice = new int[5]; |
13331 | nPrice[0] = price; | 12423 | nPrice[0] = price; |
@@ -13447,12 +12539,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13447 | avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, | 12539 | avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, |
13448 | simname, pos, lookAt); | 12540 | simname, pos, lookAt); |
13449 | } | 12541 | } |
13450 | <<<<<<< HEAD | ||
13451 | ScriptSleep(m_sleepMsOnMapDestination); | 12542 | ScriptSleep(m_sleepMsOnMapDestination); |
13452 | ======= | ||
13453 | |||
13454 | ScriptSleep(1000); | ||
13455 | >>>>>>> avn/ubitvar | ||
13456 | } | 12543 | } |
13457 | 12544 | ||
13458 | public void llAddToLandBanList(string avatar, double hours) | 12545 | public void llAddToLandBanList(string avatar, double hours) |
@@ -13577,7 +12664,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13577 | object[] data = rules.Data; | 12664 | object[] data = rules.Data; |
13578 | for (int i = 0; i < data.Length; ++i) | 12665 | for (int i = 0; i < data.Length; ++i) |
13579 | { | 12666 | { |
13580 | <<<<<<< HEAD | ||
13581 | int type; | 12667 | int type; |
13582 | try | 12668 | try |
13583 | { | 12669 | { |
@@ -13588,9 +12674,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13588 | Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1])); | 12674 | Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1])); |
13589 | return; | 12675 | return; |
13590 | } | 12676 | } |
13591 | ======= | ||
13592 | int type = Convert.ToInt32(data[i++].ToString()); | ||
13593 | >>>>>>> avn/ubitvar | ||
13594 | if (i >= data.Length) break; // odd number of entries => ignore the last | 12677 | if (i >= data.Length) break; // odd number of entries => ignore the last |
13595 | 12678 | ||
13596 | // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) | 12679 | // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) |
@@ -14242,12 +13325,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
14242 | ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W)); | 13325 | ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W)); |
14243 | break; | 13326 | break; |
14244 | case ScriptBaseClass.OBJECT_VELOCITY: | 13327 | case ScriptBaseClass.OBJECT_VELOCITY: |
14245 | <<<<<<< HEAD | 13328 | Vector3 avvel = av.GetWorldVelocity(); |
14246 | ret.Add(new LSL_Vector(av.GetWorldVelocity())); | ||
14247 | ======= | ||
14248 | Vector3 avvel = av.Velocity; | ||
14249 | ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); | 13329 | ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); |
14250 | >>>>>>> avn/ubitvar | ||
14251 | break; | 13330 | break; |
14252 | case ScriptBaseClass.OBJECT_OWNER: | 13331 | case ScriptBaseClass.OBJECT_OWNER: |
14253 | ret.Add(new LSL_String(id)); | 13332 | ret.Add(new LSL_String(id)); |
@@ -14724,12 +13803,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
14724 | 13803 | ||
14725 | public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) | 13804 | public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) |
14726 | { | 13805 | { |
14727 | SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); | 13806 | SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); |
13807 | |||
13808 | LSL_List result = new LSL_List(); | ||
14728 | 13809 | ||
14729 | if (obj != null && obj.OwnerID == m_host.OwnerID) | 13810 | if (obj != null && obj.OwnerID == m_host.OwnerID) |
14730 | return GetEntityParams(obj, rules); | 13811 | { |
13812 | LSL_List remaining = GetPrimParams(obj, rules, ref result); | ||
14731 | 13813 | ||
14732 | return new LSL_List(); | 13814 | while (remaining.Length > 2) |
13815 | { | ||
13816 | int linknumber = remaining.GetLSLIntegerItem(0); | ||
13817 | rules = remaining.GetSublist(1, -1); | ||
13818 | List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||
13819 | |||
13820 | foreach (SceneObjectPart part in parts) | ||
13821 | remaining = GetPrimParams(part, rules, ref result); | ||
13822 | } | ||
13823 | } | ||
13824 | |||
13825 | return result; | ||
14733 | } | 13826 | } |
14734 | 13827 | ||
14735 | public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) | 13828 | public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) |
@@ -15303,6 +14396,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
15303 | } | 14396 | } |
15304 | 14397 | ||
15305 | /// <summary> | 14398 | /// <summary> |
14399 | /// Helper to calculate bounding box of an avatar. | ||
14400 | /// </summary> | ||
14401 | private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper) | ||
14402 | { | ||
14403 | // Adjust from OS model | ||
14404 | // avatar height = visual height - 0.2, bounding box height = visual height | ||
14405 | // to SL model | ||
14406 | // avatar height = visual height, bounding box height = visual height + 0.2 | ||
14407 | float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection; | ||
14408 | |||
14409 | // According to avatar bounding box in SL 2015-04-18: | ||
14410 | // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h> | ||
14411 | // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5> | ||
14412 | // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h> | ||
14413 | |||
14414 | // When avatar is sitting | ||
14415 | if (sp.ParentPart != null) | ||
14416 | { | ||
14417 | lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height); | ||
14418 | upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height); | ||
14419 | } | ||
14420 | // When avatar is groundsitting | ||
14421 | else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) | ||
14422 | { | ||
14423 | lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height); | ||
14424 | upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height); | ||
14425 | } | ||
14426 | // When avatar is standing or flying | ||
14427 | else | ||
14428 | { | ||
14429 | lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height); | ||
14430 | upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height); | ||
14431 | } | ||
14432 | } | ||
14433 | |||
14434 | |||
14435 | /// <summary> | ||
15306 | /// Implementation of llCastRay similar to SL 2015-04-21. | 14436 | /// Implementation of llCastRay similar to SL 2015-04-21. |
15307 | /// http://wiki.secondlife.com/wiki/LlCastRay | 14437 | /// http://wiki.secondlife.com/wiki/LlCastRay |
15308 | /// Uses pure geometry, bounding shapes, meshing and no physics | 14438 | /// Uses pure geometry, bounding shapes, meshing and no physics |
@@ -16589,7 +15719,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16589 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: | 15719 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: |
16590 | { | 15720 | { |
16591 | if (remain < 1) | 15721 | if (remain < 1) |
16592 | return null; | 15722 | return new LSL_List(); |
16593 | 15723 | ||
16594 | LSL_Vector v; | 15724 | LSL_Vector v; |
16595 | v = rules.GetVector3Item(idx++); | 15725 | v = rules.GetVector3Item(idx++); |
@@ -16608,7 +15738,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16608 | case (int)ScriptBaseClass.PRIM_ROTATION: | 15738 | case (int)ScriptBaseClass.PRIM_ROTATION: |
16609 | { | 15739 | { |
16610 | if (remain < 1) | 15740 | if (remain < 1) |
16611 | return null; | 15741 | return new LSL_List(); |
16612 | 15742 | ||
16613 | LSL_Rotation r; | 15743 | LSL_Rotation r; |
16614 | r = rules.GetQuaternionItem(idx++); | 15744 | r = rules.GetQuaternionItem(idx++); |
@@ -16628,7 +15758,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16628 | case (int)ScriptBaseClass.PRIM_NAME: | 15758 | case (int)ScriptBaseClass.PRIM_NAME: |
16629 | case (int)ScriptBaseClass.PRIM_DESC: | 15759 | case (int)ScriptBaseClass.PRIM_DESC: |
16630 | if (remain < 1) | 15760 | if (remain < 1) |
16631 | return null; | 15761 | return new LSL_List(); |
16632 | idx++; | 15762 | idx++; |
16633 | break; | 15763 | break; |
16634 | 15764 | ||
@@ -16636,13 +15766,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16636 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | 15766 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: |
16637 | case (int)ScriptBaseClass.PRIM_TEXGEN: | 15767 | case (int)ScriptBaseClass.PRIM_TEXGEN: |
16638 | if (remain < 2) | 15768 | if (remain < 2) |
16639 | return null; | 15769 | return new LSL_List(); |
16640 | idx += 2; | 15770 | idx += 2; |
16641 | break; | 15771 | break; |
16642 | 15772 | ||
16643 | case (int)ScriptBaseClass.PRIM_TYPE: | 15773 | case (int)ScriptBaseClass.PRIM_TYPE: |
16644 | if (remain < 3) | 15774 | if (remain < 3) |
16645 | return null; | 15775 | return new LSL_List(); |
16646 | code = (int)rules.GetLSLIntegerItem(idx++); | 15776 | code = (int)rules.GetLSLIntegerItem(idx++); |
16647 | remain = rules.Length - idx; | 15777 | remain = rules.Length - idx; |
16648 | switch (code) | 15778 | switch (code) |
@@ -16651,13 +15781,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16651 | case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: | 15781 | case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: |
16652 | case (int)ScriptBaseClass.PRIM_TYPE_PRISM: | 15782 | case (int)ScriptBaseClass.PRIM_TYPE_PRISM: |
16653 | if (remain < 6) | 15783 | if (remain < 6) |
16654 | return null; | 15784 | return new LSL_List(); |
16655 | idx += 6; | 15785 | idx += 6; |
16656 | break; | 15786 | break; |
16657 | 15787 | ||
16658 | case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: | 15788 | case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: |
16659 | if (remain < 5) | 15789 | if (remain < 5) |
16660 | return null; | 15790 | return new LSL_List(); |
16661 | idx += 5; | 15791 | idx += 5; |
16662 | break; | 15792 | break; |
16663 | 15793 | ||
@@ -16665,13 +15795,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16665 | case (int)ScriptBaseClass.PRIM_TYPE_TUBE: | 15795 | case (int)ScriptBaseClass.PRIM_TYPE_TUBE: |
16666 | case (int)ScriptBaseClass.PRIM_TYPE_RING: | 15796 | case (int)ScriptBaseClass.PRIM_TYPE_RING: |
16667 | if (remain < 11) | 15797 | if (remain < 11) |
16668 | return null; | 15798 | return new LSL_List(); |
16669 | idx += 11; | 15799 | idx += 11; |
16670 | break; | 15800 | break; |
16671 | 15801 | ||
16672 | case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: | 15802 | case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: |
16673 | if (remain < 2) | 15803 | if (remain < 2) |
16674 | return null; | 15804 | return new LSL_List(); |
16675 | idx += 2; | 15805 | idx += 2; |
16676 | break; | 15806 | break; |
16677 | } | 15807 | } |
@@ -16682,7 +15812,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16682 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | 15812 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: |
16683 | case (int)ScriptBaseClass.PRIM_OMEGA: | 15813 | case (int)ScriptBaseClass.PRIM_OMEGA: |
16684 | if (remain < 3) | 15814 | if (remain < 3) |
16685 | return null; | 15815 | return new LSL_List(); |
16686 | idx += 3; | 15816 | idx += 3; |
16687 | break; | 15817 | break; |
16688 | 15818 | ||
@@ -16690,20 +15820,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16690 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: | 15820 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: |
16691 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: | 15821 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: |
16692 | if (remain < 5) | 15822 | if (remain < 5) |
16693 | return null; | 15823 | return new LSL_List(); |
16694 | idx += 5; | 15824 | idx += 5; |
16695 | break; | 15825 | break; |
16696 | 15826 | ||
16697 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: | 15827 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: |
16698 | if (remain < 7) | 15828 | if (remain < 7) |
16699 | return null; | 15829 | return new LSL_List(); |
16700 | 15830 | ||
16701 | idx += 7; | 15831 | idx += 7; |
16702 | break; | 15832 | break; |
16703 | 15833 | ||
16704 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: | 15834 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: |
16705 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. | 15835 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. |
16706 | return null; | 15836 | return new LSL_List(); |
16707 | 15837 | ||
16708 | return rules.GetSublist(idx, -1); | 15838 | return rules.GetSublist(idx, -1); |
16709 | } | 15839 | } |
@@ -16711,9 +15841,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16711 | } | 15841 | } |
16712 | catch (InvalidCastException e) | 15842 | catch (InvalidCastException e) |
16713 | { | 15843 | { |
16714 | ShoutError(string.Format( | 15844 | Error(originFunc,string.Format( |
16715 | "{0} error running rule #{1}: arg #{2} ", | 15845 | " error running rule #{1}: arg #{2} ", |
16716 | originFunc, rulesParsed, idx - idxStart) + e.Message); | 15846 | rulesParsed, idx - idxStart) + e.Message); |
16717 | } | 15847 | } |
16718 | finally | 15848 | finally |
16719 | { | 15849 | { |
@@ -16725,7 +15855,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16725 | positionChanged = false; | 15855 | positionChanged = false; |
16726 | } | 15856 | } |
16727 | } | 15857 | } |
16728 | return null; | 15858 | return new LSL_List(); |
16729 | } | 15859 | } |
16730 | 15860 | ||
16731 | public LSL_List GetPrimParams(ScenePresence avatar, LSL_List rules, ref LSL_List res) | 15861 | public LSL_List GetPrimParams(ScenePresence avatar, LSL_List rules, ref LSL_List res) |
@@ -16794,7 +15924,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16794 | 15924 | ||
16795 | case (int)ScriptBaseClass.PRIM_TEXTURE: | 15925 | case (int)ScriptBaseClass.PRIM_TEXTURE: |
16796 | if (remain < 1) | 15926 | if (remain < 1) |
16797 | return null; | 15927 | return new LSL_List(); |
16798 | 15928 | ||
16799 | int face = (int)rules.GetLSLIntegerItem(idx++); | 15929 | int face = (int)rules.GetLSLIntegerItem(idx++); |
16800 | if (face == ScriptBaseClass.ALL_SIDES) | 15930 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16821,7 +15951,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16821 | 15951 | ||
16822 | case (int)ScriptBaseClass.PRIM_COLOR: | 15952 | case (int)ScriptBaseClass.PRIM_COLOR: |
16823 | if (remain < 1) | 15953 | if (remain < 1) |
16824 | return null; | 15954 | return new LSL_List(); |
16825 | 15955 | ||
16826 | face = (int)rules.GetLSLIntegerItem(idx++); | 15956 | face = (int)rules.GetLSLIntegerItem(idx++); |
16827 | 15957 | ||
@@ -16842,7 +15972,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16842 | 15972 | ||
16843 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | 15973 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: |
16844 | if (remain < 1) | 15974 | if (remain < 1) |
16845 | return null; | 15975 | return new LSL_List(); |
16846 | face = (int)rules.GetLSLIntegerItem(idx++); | 15976 | face = (int)rules.GetLSLIntegerItem(idx++); |
16847 | 15977 | ||
16848 | if (face == ScriptBaseClass.ALL_SIDES) | 15978 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16862,7 +15992,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16862 | 15992 | ||
16863 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | 15993 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: |
16864 | if (remain < 1) | 15994 | if (remain < 1) |
16865 | return null; | 15995 | return new LSL_List(); |
16866 | face = (int)rules.GetLSLIntegerItem(idx++); | 15996 | face = (int)rules.GetLSLIntegerItem(idx++); |
16867 | 15997 | ||
16868 | if (face == ScriptBaseClass.ALL_SIDES) | 15998 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16891,7 +16021,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16891 | case (int)ScriptBaseClass.PRIM_TEXGEN: | 16021 | case (int)ScriptBaseClass.PRIM_TEXGEN: |
16892 | // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR) | 16022 | // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR) |
16893 | if (remain < 1) | 16023 | if (remain < 1) |
16894 | return null; | 16024 | return new LSL_List(); |
16895 | face = (int)rules.GetLSLIntegerItem(idx++); | 16025 | face = (int)rules.GetLSLIntegerItem(idx++); |
16896 | 16026 | ||
16897 | if (face == ScriptBaseClass.ALL_SIDES) | 16027 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16917,7 +16047,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16917 | 16047 | ||
16918 | case (int)ScriptBaseClass.PRIM_GLOW: | 16048 | case (int)ScriptBaseClass.PRIM_GLOW: |
16919 | if (remain < 1) | 16049 | if (remain < 1) |
16920 | return null; | 16050 | return new LSL_List(); |
16921 | face = (int)rules.GetLSLIntegerItem(idx++); | 16051 | face = (int)rules.GetLSLIntegerItem(idx++); |
16922 | 16052 | ||
16923 | if (face == ScriptBaseClass.ALL_SIDES) | 16053 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16971,13 +16101,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16971 | 16101 | ||
16972 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: | 16102 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: |
16973 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. | 16103 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. |
16974 | return null; | 16104 | return new LSL_List(); |
16975 | 16105 | ||
16976 | return rules.GetSublist(idx, -1); | 16106 | return rules.GetSublist(idx, -1); |
16977 | } | 16107 | } |
16978 | } | 16108 | } |
16979 | 16109 | ||
16980 | return null; | 16110 | return new LSL_List(); |
16981 | } | 16111 | } |
16982 | 16112 | ||
16983 | public void llSetContentType(LSL_Key id, LSL_Integer content_type) | 16113 | public void llSetContentType(LSL_Key id, LSL_Integer content_type) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 5d8f0f6..a87ee73 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -829,10 +829,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
829 | private void TeleportAgent(string agent, int regionX, int regionY, | 829 | private void TeleportAgent(string agent, int regionX, int regionY, |
830 | LSL_Types.Vector3 position, LSL_Types.Vector3 lookat, bool relaxRestrictions) | 830 | LSL_Types.Vector3 position, LSL_Types.Vector3 lookat, bool relaxRestrictions) |
831 | { | 831 | { |
832 | <<<<<<< HEAD | ||
833 | // ulong regionHandle = Util.UIntsToLong(((uint)regionX * (uint)Constants.RegionSize), ((uint)regionY * (uint)Constants.RegionSize)); | ||
834 | ======= | ||
835 | >>>>>>> avn/ubitvar | ||
836 | ulong regionHandle = Util.RegionLocToHandle((uint)regionX, (uint)regionY); | 832 | ulong regionHandle = Util.RegionLocToHandle((uint)regionX, (uint)regionY); |
837 | 833 | ||
838 | m_host.AddScriptLPS(1); | 834 | m_host.AddScriptLPS(1); |
@@ -3265,15 +3261,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3265 | } | 3261 | } |
3266 | else | 3262 | else |
3267 | { | 3263 | { |
3268 | <<<<<<< HEAD | ||
3269 | Scene scene = m_ScriptEngine.World; | 3264 | Scene scene = m_ScriptEngine.World; |
3270 | GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID); | 3265 | GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID); |
3271 | return new LSL_Vector((float)region.RegionSizeX, (float)region.RegionSizeX, Constants.RegionHeight); | 3266 | return new LSL_Vector(region.RegionSizeX, region.RegionSizeY, Constants.RegionHeight); |
3272 | ======= | ||
3273 | return new LSL_Vector((float)World.RegionInfo.RegionSizeX, | ||
3274 | (float)World.RegionInfo.RegionSizeY, | ||
3275 | (float)World.RegionInfo.RegionSizeZ ); | ||
3276 | >>>>>>> avn/ubitvar | ||
3277 | } | 3267 | } |
3278 | } | 3268 | } |
3279 | 3269 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 5fdbf9d..6e8a96d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -739,11 +739,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
739 | if (Position.y > ((int)Constants.RegionSize - 1)) | 739 | if (Position.y > ((int)Constants.RegionSize - 1)) |
740 | Position.y = ((int)Constants.RegionSize - 1); | 740 | Position.y = ((int)Constants.RegionSize - 1); |
741 | */ | 741 | */ |
742 | <<<<<<< HEAD | ||
743 | if (Position.z > Constants.RegionHeight) | 742 | if (Position.z > Constants.RegionHeight) |
744 | Position.z = Constants.RegionHeight; | 743 | Position.z = Constants.RegionHeight; |
745 | ======= | ||
746 | >>>>>>> avn/ubitvar | ||
747 | if (Position.x < 0) | 744 | if (Position.x < 0) |
748 | Position.x = 0; | 745 | Position.x = 0; |
749 | if (Position.y < 0) | 746 | if (Position.y < 0) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 49df5e7..2633f30 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -654,7 +654,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
654 | if (state == State) | 654 | if (state == State) |
655 | return; | 655 | return; |
656 | 656 | ||
657 | <<<<<<< HEAD | ||
658 | EventParams lastTimerEv = null; | 657 | EventParams lastTimerEv = null; |
659 | 658 | ||
660 | lock (EventQueue) | 659 | lock (EventQueue) |
@@ -682,15 +681,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
682 | m_StateChangeInProgress = true; | 681 | m_StateChangeInProgress = true; |
683 | } | 682 | } |
684 | 683 | ||
685 | ======= | ||
686 | PostEvent(new EventParams("state_exit", new Object[0], | ||
687 | new DetectParams[0])); | ||
688 | PostEvent(new EventParams("state", new Object[] { state }, | ||
689 | new DetectParams[0])); | ||
690 | PostEvent(new EventParams("state_entry", new Object[0], | ||
691 | new DetectParams[0])); | ||
692 | |||
693 | >>>>>>> avn/ubitvar | ||
694 | throw new EventAbortException(); | 684 | throw new EventAbortException(); |
695 | } | 685 | } |
696 | 686 | ||
@@ -789,9 +779,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
789 | if (!Running) | 779 | if (!Running) |
790 | return 0; | 780 | return 0; |
791 | 781 | ||
782 | lock (m_Script) | ||
783 | { | ||
792 | // m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName); | 784 | // m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName); |
793 | 785 | ||
794 | <<<<<<< HEAD | ||
795 | if (Suspended) | 786 | if (Suspended) |
796 | return 0; | 787 | return 0; |
797 | 788 | ||
@@ -817,14 +808,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
817 | lock (EventQueue) | 808 | lock (EventQueue) |
818 | { | 809 | { |
819 | data = (EventParams)EventQueue.Dequeue(); | 810 | data = (EventParams)EventQueue.Dequeue(); |
820 | ======= | ||
821 | if (Suspended) | ||
822 | return 0; | ||
823 | |||
824 | lock (EventQueue) | ||
825 | { | ||
826 | data = (EventParams) EventQueue.Dequeue(); | ||
827 | >>>>>>> avn/ubitvar | ||
828 | if (data == null) // Shouldn't happen | 811 | if (data == null) // Shouldn't happen |
829 | { | 812 | { |
830 | if (EventQueue.Count > 0 && Running && !ShuttingDown) | 813 | if (EventQueue.Count > 0 && Running && !ShuttingDown) |
@@ -849,7 +832,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
849 | m_CollisionInQueue = false; | 832 | m_CollisionInQueue = false; |
850 | } | 833 | } |
851 | 834 | ||
852 | <<<<<<< HEAD | ||
853 | if (DebugLevel >= 2) | 835 | if (DebugLevel >= 2) |
854 | m_log.DebugFormat( | 836 | m_log.DebugFormat( |
855 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | 837 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", |
@@ -879,26 +861,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
879 | Part.ParentGroup.UUID, | 861 | Part.ParentGroup.UUID, |
880 | Part.AbsolutePosition, | 862 | Part.AbsolutePosition, |
881 | Part.ParentGroup.Scene.Name); | 863 | Part.ParentGroup.Scene.Name); |
882 | ======= | ||
883 | lock(m_Script) | ||
884 | { | ||
885 | |||
886 | // m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this); | ||
887 | SceneObjectPart part = Engine.World.GetSceneObjectPart(LocalID); | ||
888 | |||
889 | if (DebugLevel >= 2) | ||
890 | m_log.DebugFormat( | ||
891 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | ||
892 | data.EventName, | ||
893 | ScriptName, | ||
894 | part.Name, | ||
895 | part.LocalId, | ||
896 | part.ParentGroup.Name, | ||
897 | part.ParentGroup.UUID, | ||
898 | part.AbsolutePosition, | ||
899 | part.ParentGroup.Scene.Name); | ||
900 | >>>>>>> avn/ubitvar | ||
901 | |||
902 | AsyncCommandManager.StateChange(Engine, | 864 | AsyncCommandManager.StateChange(Engine, |
903 | LocalID, ItemID); | 865 | LocalID, ItemID); |
904 | // we are effectively in the new state now, so we can resume queueing | 866 | // we are effectively in the new state now, so we can resume queueing |
@@ -915,35 +877,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
915 | // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", | 877 | // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", |
916 | // PrimName, ScriptName, data.EventName, State); | 878 | // PrimName, ScriptName, data.EventName, State); |
917 | 879 | ||
918 | <<<<<<< HEAD | 880 | |
919 | try | 881 | try |
920 | ======= | ||
921 | if (DebugLevel >= 1) | ||
922 | m_log.DebugFormat( | ||
923 | "[SCRIPT INSTANCE]: Changing state to {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | ||
924 | State, | ||
925 | ScriptName, | ||
926 | part.Name, | ||
927 | part.LocalId, | ||
928 | part.ParentGroup.Name, | ||
929 | part.ParentGroup.UUID, | ||
930 | part.AbsolutePosition, | ||
931 | part.ParentGroup.Scene.Name); | ||
932 | |||
933 | AsyncCommandManager.RemoveScript(Engine, | ||
934 | LocalID, ItemID); | ||
935 | |||
936 | if (part != null) | ||
937 | { | ||
938 | part.SetScriptEvents(ItemID, | ||
939 | (int)m_Script.GetStateEventFlags(State)); | ||
940 | } | ||
941 | } | ||
942 | else | ||
943 | { | ||
944 | if (Engine.World.PipeEventsForScript(LocalID) || | ||
945 | data.EventName == "control") // Don't freeze avies! | ||
946 | >>>>>>> avn/ubitvar | ||
947 | { | 882 | { |
948 | m_CurrentEvent = data.EventName; | 883 | m_CurrentEvent = data.EventName; |
949 | m_EventStart = DateTime.Now; | 884 | m_EventStart = DateTime.Now; |
@@ -981,7 +916,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
981 | && !(e.InnerException is ScriptCoopStopException))) | 916 | && !(e.InnerException is ScriptCoopStopException))) |
982 | && !(e is ThreadAbortException)) | 917 | && !(e is ThreadAbortException)) |
983 | { | 918 | { |
984 | <<<<<<< HEAD | ||
985 | try | 919 | try |
986 | { | 920 | { |
987 | // DISPLAY ERROR INWORLD | 921 | // DISPLAY ERROR INWORLD |
@@ -1004,88 +938,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
1004 | Part.AbsolutePosition, | 938 | Part.AbsolutePosition, |
1005 | Part.ParentGroup.Scene.Name), | 939 | Part.ParentGroup.Scene.Name), |
1006 | e); | 940 | e); |
1007 | ======= | ||
1008 | // m_log.DebugFormat( | ||
1009 | // "[SCRIPT] Exception in script {0} {1}: {2}{3}", | ||
1010 | // ScriptName, ItemID, e.Message, e.StackTrace); | ||
1011 | |||
1012 | m_InEvent = false; | ||
1013 | m_CurrentEvent = String.Empty; | ||
1014 | |||
1015 | if ((!(e is TargetInvocationException) | ||
1016 | || (!(e.InnerException is SelfDeleteException) | ||
1017 | && !(e.InnerException is ScriptDeleteException) | ||
1018 | && !(e.InnerException is ScriptCoopStopException))) | ||
1019 | && !(e is ThreadAbortException)) | ||
1020 | { | ||
1021 | try | ||
1022 | { | ||
1023 | // DISPLAY ERROR INWORLD | ||
1024 | string text = FormatException(e); | ||
1025 | |||
1026 | if (text.Length > 1000) | ||
1027 | text = text.Substring(0, 1000); | ||
1028 | Engine.World.SimChat(Utils.StringToBytes(text), | ||
1029 | ChatTypeEnum.DebugChannel, 2147483647, | ||
1030 | part.AbsolutePosition, | ||
1031 | part.Name, part.UUID, false); | ||
1032 | |||
1033 | |||
1034 | m_log.DebugFormat( | ||
1035 | "[SCRIPT INSTANCE]: Runtime error in script {0}, part {1} {2} at {3} in {4}, displayed error {5}, actual exception {6}", | ||
1036 | ScriptName, | ||
1037 | PrimName, | ||
1038 | part.UUID, | ||
1039 | part.AbsolutePosition, | ||
1040 | part.ParentGroup.Scene.Name, | ||
1041 | text.Replace("\n", "\\n"), | ||
1042 | e.InnerException); | ||
1043 | } | ||
1044 | catch (Exception) | ||
1045 | { | ||
1046 | } | ||
1047 | // catch (Exception e2) // LEGIT: User Scripting | ||
1048 | // { | ||
1049 | // m_log.Error("[SCRIPT]: "+ | ||
1050 | // "Error displaying error in-world: " + | ||
1051 | // e2.ToString()); | ||
1052 | // m_log.Error("[SCRIPT]: " + | ||
1053 | // "Errormessage: Error compiling script:\r\n" + | ||
1054 | // e.ToString()); | ||
1055 | // } | ||
1056 | } | ||
1057 | else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) | ||
1058 | { | ||
1059 | m_InSelfDelete = true; | ||
1060 | if (part != null) | ||
1061 | Engine.World.DeleteSceneObject(part.ParentGroup, false); | ||
1062 | >>>>>>> avn/ubitvar | ||
1063 | } | 941 | } |
1064 | catch (Exception) | 942 | catch (Exception) |
1065 | { | 943 | { |
1066 | <<<<<<< HEAD | ||
1067 | ======= | ||
1068 | m_InSelfDelete = true; | ||
1069 | if (part != null) | ||
1070 | part.Inventory.RemoveInventoryItem(ItemID); | ||
1071 | } | ||
1072 | else if ((e is TargetInvocationException) && (e.InnerException is ScriptCoopStopException)) | ||
1073 | { | ||
1074 | if (DebugLevel >= 1) | ||
1075 | m_log.DebugFormat( | ||
1076 | "[SCRIPT INSTANCE]: Script {0}.{1} in event {2}, state {3} stopped co-operatively.", | ||
1077 | PrimName, ScriptName, data.EventName, State); | ||
1078 | >>>>>>> avn/ubitvar | ||
1079 | } | 944 | } |
1080 | // catch (Exception e2) // LEGIT: User Scripting | ||
1081 | // { | ||
1082 | // m_log.Error("[SCRIPT]: "+ | ||
1083 | // "Error displaying error in-world: " + | ||
1084 | // e2.ToString()); | ||
1085 | // m_log.Error("[SCRIPT]: " + | ||
1086 | // "Errormessage: Error compiling script:\r\n" + | ||
1087 | // e.ToString()); | ||
1088 | // } | ||
1089 | } | 945 | } |
1090 | else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) | 946 | else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) |
1091 | { | 947 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 885559a..5fce15c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -102,31 +102,19 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
102 | 102 | ||
103 | public override string ToString() | 103 | public override string ToString() |
104 | { | 104 | { |
105 | <<<<<<< HEAD | ||
106 | string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", x, y, z); | ||
107 | ======= | ||
108 | string s = String.Format(Culture.FormatProvider, "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", x, y, z); | 105 | string s = String.Format(Culture.FormatProvider, "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", x, y, z); |
109 | >>>>>>> avn/ubitvar | ||
110 | return s; | 106 | return s; |
111 | } | 107 | } |
112 | 108 | ||
113 | public static explicit operator LSLString(Vector3 vec) | 109 | public static explicit operator LSLString(Vector3 vec) |
114 | { | 110 | { |
115 | <<<<<<< HEAD | ||
116 | string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z); | ||
117 | ======= | ||
118 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); | 111 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); |
119 | >>>>>>> avn/ubitvar | ||
120 | return new LSLString(s); | 112 | return new LSLString(s); |
121 | } | 113 | } |
122 | 114 | ||
123 | public static explicit operator string(Vector3 vec) | 115 | public static explicit operator string(Vector3 vec) |
124 | { | 116 | { |
125 | <<<<<<< HEAD | ||
126 | string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z); | ||
127 | ======= | ||
128 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); | 117 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); |
129 | >>>>>>> avn/ubitvar | ||
130 | return s; | 118 | return s; |
131 | } | 119 | } |
132 | 120 | ||
@@ -727,17 +715,10 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
727 | private void ExtendAndAdd(object o) | 715 | private void ExtendAndAdd(object o) |
728 | { | 716 | { |
729 | object[] tmp; | 717 | object[] tmp; |
730 | <<<<<<< HEAD | ||
731 | tmp = new object[Data.Length + 1]; | 718 | tmp = new object[Data.Length + 1]; |
732 | Data.CopyTo(tmp, 0); | 719 | Data.CopyTo(tmp, 0); |
733 | tmp.SetValue(o, tmp.Length - 1); | 720 | tmp.SetValue(o, tmp.Length - 1); |
734 | Data = tmp; | 721 | Data = tmp; |
735 | ======= | ||
736 | tmp = new object[m_data.Length + 1]; | ||
737 | m_data.CopyTo(tmp, 0); | ||
738 | tmp.SetValue(o, tmp.Length - 1); | ||
739 | m_data = tmp; | ||
740 | >>>>>>> avn/ubitvar | ||
741 | } | 722 | } |
742 | 723 | ||
743 | public static list operator +(list a, LSLString s) | 724 | public static list operator +(list a, LSLString s) |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs index 2ef4058..07470d6 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs | |||
@@ -43,6 +43,7 @@ using OpenSim.Tests.Common; | |||
43 | 43 | ||
44 | namespace OpenSim.Region.ScriptEngine.Tests | 44 | namespace OpenSim.Region.ScriptEngine.Tests |
45 | { | 45 | { |
46 | /* | ||
46 | [TestFixture] | 47 | [TestFixture] |
47 | public class XEnginePersistenceTests : OpenSimTestCase | 48 | public class XEnginePersistenceTests : OpenSimTestCase |
48 | { | 49 | { |
@@ -149,4 +150,5 @@ namespace OpenSim.Region.ScriptEngine.Tests | |||
149 | scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); | 150 | scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); |
150 | } | 151 | } |
151 | } | 152 | } |
153 | */ | ||
152 | } \ No newline at end of file | 154 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 466c190..78d4ee9 100755 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -28,7 +28,6 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Diagnostics; //for [DebuggerNonUserCode] | ||
32 | using System.Globalization; | 31 | using System.Globalization; |
33 | using System.IO; | 32 | using System.IO; |
34 | using System.Linq; | 33 | using System.Linq; |
@@ -162,8 +161,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
162 | private Dictionary<UUID, IScriptInstance> m_Scripts = | 161 | private Dictionary<UUID, IScriptInstance> m_Scripts = |
163 | new Dictionary<UUID, IScriptInstance>(); | 162 | new Dictionary<UUID, IScriptInstance>(); |
164 | 163 | ||
165 | private OpenMetaverse.ReaderWriterLockSlim m_scriptsLock = new OpenMetaverse.ReaderWriterLockSlim(); | ||
166 | |||
167 | // Maps the asset ID to the assembly | 164 | // Maps the asset ID to the assembly |
168 | 165 | ||
169 | private Dictionary<UUID, string> m_Assemblies = | 166 | private Dictionary<UUID, string> m_Assemblies = |
@@ -186,71 +183,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
186 | IWorkItemResult m_CurrentCompile = null; | 183 | IWorkItemResult m_CurrentCompile = null; |
187 | private Dictionary<UUID, int> m_CompileDict = new Dictionary<UUID, int>(); | 184 | private Dictionary<UUID, int> m_CompileDict = new Dictionary<UUID, int>(); |
188 | 185 | ||
189 | private void lockScriptsForRead(bool locked) | ||
190 | { | ||
191 | if (locked) | ||
192 | { | ||
193 | if (m_scriptsLock.RecursiveReadCount > 0) | ||
194 | { | ||
195 | m_log.Error("[XEngine.m_Scripts] Recursive read lock requested. This should not happen and means something needs to be fixed. For now though, it's safe to continue."); | ||
196 | m_scriptsLock.ExitReadLock(); | ||
197 | } | ||
198 | if (m_scriptsLock.RecursiveWriteCount > 0) | ||
199 | { | ||
200 | m_log.Error("[XEngine.m_Scripts] Recursive write lock requested. This should not happen and means something needs to be fixed."); | ||
201 | m_scriptsLock.ExitWriteLock(); | ||
202 | } | ||
203 | |||
204 | while (!m_scriptsLock.TryEnterReadLock(60000)) | ||
205 | { | ||
206 | m_log.Error("[XEngine.m_Scripts] Thread lock detected while trying to aquire READ lock of m_scripts in XEngine. I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed."); | ||
207 | if (m_scriptsLock.IsWriteLockHeld) | ||
208 | { | ||
209 | m_scriptsLock = new OpenMetaverse.ReaderWriterLockSlim(); | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 | else | ||
214 | { | ||
215 | if (m_scriptsLock.RecursiveReadCount > 0) | ||
216 | { | ||
217 | m_scriptsLock.ExitReadLock(); | ||
218 | } | ||
219 | } | ||
220 | } | ||
221 | private void lockScriptsForWrite(bool locked) | ||
222 | { | ||
223 | if (locked) | ||
224 | { | ||
225 | if (m_scriptsLock.RecursiveReadCount > 0) | ||
226 | { | ||
227 | m_log.Error("[XEngine.m_Scripts] Recursive read lock requested. This should not happen and means something needs to be fixed. For now though, it's safe to continue."); | ||
228 | m_scriptsLock.ExitReadLock(); | ||
229 | } | ||
230 | if (m_scriptsLock.RecursiveWriteCount > 0) | ||
231 | { | ||
232 | m_log.Error("[XEngine.m_Scripts] Recursive write lock requested. This should not happen and means something needs to be fixed."); | ||
233 | m_scriptsLock.ExitWriteLock(); | ||
234 | } | ||
235 | |||
236 | while (!m_scriptsLock.TryEnterWriteLock(60000)) | ||
237 | { | ||
238 | m_log.Error("[XEngine.m_Scripts] Thread lock detected while trying to aquire WRITE lock of m_scripts in XEngine. I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed."); | ||
239 | if (m_scriptsLock.IsWriteLockHeld) | ||
240 | { | ||
241 | m_scriptsLock = new OpenMetaverse.ReaderWriterLockSlim(); | ||
242 | } | ||
243 | } | ||
244 | } | ||
245 | else | ||
246 | { | ||
247 | if (m_scriptsLock.RecursiveWriteCount > 0) | ||
248 | { | ||
249 | m_scriptsLock.ExitWriteLock(); | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | |||
254 | private ScriptEngineConsoleCommands m_consoleCommands; | 186 | private ScriptEngineConsoleCommands m_consoleCommands; |
255 | 187 | ||
256 | public string ScriptEngineName | 188 | public string ScriptEngineName |
@@ -782,31 +714,20 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
782 | { | 714 | { |
783 | if (!m_Enabled) | 715 | if (!m_Enabled) |
784 | return; | 716 | return; |
785 | lockScriptsForRead(true); | ||
786 | |||
787 | List<IScriptInstance> instancesToDel = new List<IScriptInstance>(m_Scripts.Values); | ||
788 | 717 | ||
789 | // foreach (IScriptInstance instance in m_Scripts.Values) | 718 | lock (m_Scripts) |
790 | foreach (IScriptInstance instance in instancesToDel) | ||
791 | { | 719 | { |
792 | // Force a final state save | 720 | m_log.InfoFormat( |
793 | // | 721 | "[XEngine]: Shutting down {0} scripts in {1}", m_Scripts.Count, m_Scene.RegionInfo.RegionName); |
794 | if (m_Assemblies.ContainsKey(instance.AssetID)) | 722 | |
723 | foreach (IScriptInstance instance in m_Scripts.Values) | ||
795 | { | 724 | { |
796 | <<<<<<< HEAD | ||
797 | // Force a final state save | 725 | // Force a final state save |
798 | // | 726 | // |
799 | try | 727 | try |
800 | { | 728 | { |
801 | if (instance.StatePersistedHere) | 729 | if (instance.StatePersistedHere) |
802 | instance.SaveState(); | 730 | instance.SaveState(); |
803 | ======= | ||
804 | string assembly = m_Assemblies[instance.AssetID]; | ||
805 | |||
806 | try | ||
807 | { | ||
808 | instance.SaveState(assembly); | ||
809 | >>>>>>> avn/ubitvar | ||
810 | } | 731 | } |
811 | catch (Exception e) | 732 | catch (Exception e) |
812 | { | 733 | { |
@@ -816,50 +737,36 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
816 | instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, World.Name) | 737 | instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, World.Name) |
817 | , e); | 738 | , e); |
818 | } | 739 | } |
819 | } | ||
820 | 740 | ||
821 | <<<<<<< HEAD | ||
822 | // Clear the event queue and abort the instance thread | 741 | // Clear the event queue and abort the instance thread |
823 | // | 742 | // |
824 | instance.Stop(0, true); | 743 | instance.Stop(0, true); |
825 | ======= | ||
826 | // Clear the event queue and abort the instance thread | ||
827 | // | ||
828 | instance.ClearQueue(); | ||
829 | instance.Stop(0); | ||
830 | >>>>>>> avn/ubitvar | ||
831 | |||
832 | // Release events, timer, etc | ||
833 | // | ||
834 | instance.DestroyScriptInstance(); | ||
835 | 744 | ||
836 | // Unload scripts and app domains | 745 | // Release events, timer, etc |
837 | // Must be done explicitly because they have infinite | 746 | // |
838 | // lifetime | 747 | instance.DestroyScriptInstance(); |
839 | // | 748 | |
840 | // if (!m_SimulatorShuttingDown) | 749 | // Unload scripts and app domains. |
841 | { | 750 | // Must be done explicitly because they have infinite |
842 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); | 751 | // lifetime. |
843 | if (m_DomainScripts[instance.AppDomain].Count == 0) | 752 | // However, don't bother to do this if the simulator is shutting |
753 | // down since it takes a long time with many scripts. | ||
754 | if (!m_SimulatorShuttingDown) | ||
844 | { | 755 | { |
845 | m_DomainScripts.Remove(instance.AppDomain); | 756 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); |
846 | UnloadAppDomain(instance.AppDomain); | 757 | if (m_DomainScripts[instance.AppDomain].Count == 0) |
758 | { | ||
759 | m_DomainScripts.Remove(instance.AppDomain); | ||
760 | UnloadAppDomain(instance.AppDomain); | ||
761 | } | ||
847 | } | 762 | } |
848 | } | 763 | } |
849 | 764 | ||
850 | // m_Scripts.Clear(); | 765 | m_Scripts.Clear(); |
851 | // m_PrimObjects.Clear(); | 766 | m_PrimObjects.Clear(); |
852 | // m_Assemblies.Clear(); | 767 | m_Assemblies.Clear(); |
853 | // m_DomainScripts.Clear(); | 768 | m_DomainScripts.Clear(); |
854 | } | 769 | } |
855 | lockScriptsForRead(false); | ||
856 | lockScriptsForWrite(true); | ||
857 | m_Scripts.Clear(); | ||
858 | lockScriptsForWrite(false); | ||
859 | m_PrimObjects.Clear(); | ||
860 | m_Assemblies.Clear(); | ||
861 | m_DomainScripts.Clear(); | ||
862 | |||
863 | lock (m_ScriptEngines) | 770 | lock (m_ScriptEngines) |
864 | { | 771 | { |
865 | m_ScriptEngines.Remove(this); | 772 | m_ScriptEngines.Remove(this); |
@@ -928,7 +835,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
928 | 835 | ||
929 | List<IScriptInstance> instances = new List<IScriptInstance>(); | 836 | List<IScriptInstance> instances = new List<IScriptInstance>(); |
930 | 837 | ||
931 | <<<<<<< HEAD | ||
932 | lock (m_Scripts) | 838 | lock (m_Scripts) |
933 | { | 839 | { |
934 | foreach (IScriptInstance instance in m_Scripts.Values) | 840 | foreach (IScriptInstance instance in m_Scripts.Values) |
@@ -946,23 +852,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
946 | 852 | ||
947 | foreach (IScriptInstance i in instances) | 853 | foreach (IScriptInstance i in instances) |
948 | { | 854 | { |
949 | ======= | ||
950 | lockScriptsForRead(true); | ||
951 | foreach (IScriptInstance instance in m_Scripts.Values) | ||
952 | instances.Add(instance); | ||
953 | lockScriptsForRead(false); | ||
954 | |||
955 | foreach (IScriptInstance i in instances) | ||
956 | { | ||
957 | string assembly = String.Empty; | ||
958 | |||
959 | |||
960 | if (!m_Assemblies.ContainsKey(i.AssetID)) | ||
961 | continue; | ||
962 | assembly = m_Assemblies[i.AssetID]; | ||
963 | |||
964 | |||
965 | >>>>>>> avn/ubitvar | ||
966 | try | 855 | try |
967 | { | 856 | { |
968 | i.SaveState(); | 857 | i.SaveState(); |
@@ -1393,79 +1282,58 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1393 | } | 1282 | } |
1394 | 1283 | ||
1395 | ScriptInstance instance = null; | 1284 | ScriptInstance instance = null; |
1396 | // Create the object record | 1285 | lock (m_Scripts) |
1397 | UUID appDomain = assetID; | ||
1398 | |||
1399 | |||
1400 | |||
1401 | lockScriptsForRead(true); | ||
1402 | if ((!m_Scripts.ContainsKey(itemID)) || | ||
1403 | (m_Scripts[itemID].AssetID != assetID)) | ||
1404 | { | 1286 | { |
1405 | lockScriptsForRead(false); | 1287 | // Create the object record |
1406 | instance = new ScriptInstance(this, part, | 1288 | if ((!m_Scripts.ContainsKey(itemID)) || |
1407 | item, | 1289 | (m_Scripts[itemID].AssetID != assetID)) |
1408 | startParam, postOnRez, | 1290 | { |
1409 | m_MaxScriptQueue); | 1291 | UUID appDomain = assetID; |
1410 | 1292 | ||
1411 | if (part.ParentGroup.IsAttachment) | 1293 | if (part.ParentGroup.IsAttachment) |
1412 | appDomain = part.ParentGroup.RootPart.UUID; | 1294 | appDomain = part.ParentGroup.RootPart.UUID; |
1413 | 1295 | ||
1414 | if (!m_AppDomains.ContainsKey(appDomain)) | 1296 | if (!m_AppDomains.ContainsKey(appDomain)) |
1415 | { | ||
1416 | try | ||
1417 | { | 1297 | { |
1418 | AppDomainSetup appSetup = new AppDomainSetup(); | 1298 | try |
1419 | appSetup.PrivateBinPath = Path.Combine( | 1299 | { |
1420 | m_ScriptEnginesPath, | 1300 | AppDomainSetup appSetup = new AppDomainSetup(); |
1421 | m_Scene.RegionInfo.RegionID.ToString()); | 1301 | appSetup.PrivateBinPath = Path.Combine( |
1302 | m_ScriptEnginesPath, | ||
1303 | m_Scene.RegionInfo.RegionID.ToString()); | ||
1422 | 1304 | ||
1423 | Evidence baseEvidence = AppDomain.CurrentDomain.Evidence; | 1305 | Evidence baseEvidence = AppDomain.CurrentDomain.Evidence; |
1424 | Evidence evidence = new Evidence(baseEvidence); | 1306 | Evidence evidence = new Evidence(baseEvidence); |
1425 | 1307 | ||
1426 | AppDomain sandbox; | 1308 | AppDomain sandbox; |
1427 | if (m_AppDomainLoading) | 1309 | if (m_AppDomainLoading) |
1428 | { | ||
1429 | sandbox = AppDomain.CreateDomain( | ||
1430 | m_Scene.RegionInfo.RegionID.ToString(), | ||
1431 | evidence, appSetup); | ||
1432 | if (m_AppDomains.ContainsKey(appDomain)) | ||
1433 | { | 1310 | { |
1434 | m_AppDomains[appDomain].AssemblyResolve += | 1311 | sandbox = AppDomain.CreateDomain( |
1312 | m_Scene.RegionInfo.RegionID.ToString(), | ||
1313 | evidence, appSetup); | ||
1314 | sandbox.AssemblyResolve += | ||
1435 | new ResolveEventHandler( | 1315 | new ResolveEventHandler( |
1436 | AssemblyResolver.OnAssemblyResolve); | 1316 | AssemblyResolver.OnAssemblyResolve); |
1437 | if (m_DomainScripts.ContainsKey(appDomain)) | ||
1438 | { | ||
1439 | m_DomainScripts[appDomain].Add(itemID); | ||
1440 | } | ||
1441 | else | ||
1442 | { | ||
1443 | m_DomainScripts.Add(appDomain, new List<UUID>()); | ||
1444 | m_DomainScripts[appDomain].Add(itemID); | ||
1445 | } | ||
1446 | } | 1317 | } |
1447 | else | 1318 | else |
1448 | { | 1319 | { |
1449 | m_AppDomains.Add(appDomain, sandbox); | 1320 | sandbox = AppDomain.CurrentDomain; |
1450 | m_AppDomains[appDomain].AssemblyResolve += | ||
1451 | new ResolveEventHandler( | ||
1452 | AssemblyResolver.OnAssemblyResolve); | ||
1453 | if (m_DomainScripts.ContainsKey(appDomain)) | ||
1454 | { | ||
1455 | m_DomainScripts[appDomain].Add(itemID); | ||
1456 | } | ||
1457 | else | ||
1458 | { | ||
1459 | m_DomainScripts.Add(appDomain, new List<UUID>()); | ||
1460 | m_DomainScripts[appDomain].Add(itemID); | ||
1461 | } | ||
1462 | |||
1463 | } | 1321 | } |
1322 | |||
1323 | //PolicyLevel sandboxPolicy = PolicyLevel.CreateAppDomainLevel(); | ||
1324 | //AllMembershipCondition sandboxMembershipCondition = new AllMembershipCondition(); | ||
1325 | //PermissionSet sandboxPermissionSet = sandboxPolicy.GetNamedPermissionSet("Internet"); | ||
1326 | //PolicyStatement sandboxPolicyStatement = new PolicyStatement(sandboxPermissionSet); | ||
1327 | //CodeGroup sandboxCodeGroup = new UnionCodeGroup(sandboxMembershipCondition, sandboxPolicyStatement); | ||
1328 | //sandboxPolicy.RootCodeGroup = sandboxCodeGroup; | ||
1329 | //sandbox.SetAppDomainPolicy(sandboxPolicy); | ||
1330 | |||
1331 | m_AppDomains[appDomain] = sandbox; | ||
1464 | 1332 | ||
1333 | m_DomainScripts[appDomain] = new List<UUID>(); | ||
1465 | } | 1334 | } |
1466 | else | 1335 | catch (Exception e) |
1467 | { | 1336 | { |
1468 | <<<<<<< HEAD | ||
1469 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); | 1337 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); |
1470 | m_ScriptErrorMessage += "Exception creating app domain:\n"; | 1338 | m_ScriptErrorMessage += "Exception creating app domain:\n"; |
1471 | m_ScriptFailCount++; | 1339 | m_ScriptFailCount++; |
@@ -1474,12 +1342,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1474 | m_AddingAssemblies[assemblyPath]--; | 1342 | m_AddingAssemblies[assemblyPath]--; |
1475 | } | 1343 | } |
1476 | return false; | 1344 | return false; |
1477 | ======= | ||
1478 | sandbox = AppDomain.CurrentDomain; | ||
1479 | >>>>>>> avn/ubitvar | ||
1480 | } | 1345 | } |
1346 | } | ||
1347 | m_DomainScripts[appDomain].Add(itemID); | ||
1481 | 1348 | ||
1482 | <<<<<<< HEAD | ||
1483 | IScript scriptObj = null; | 1349 | IScript scriptObj = null; |
1484 | EventWaitHandle coopSleepHandle; | 1350 | EventWaitHandle coopSleepHandle; |
1485 | bool coopTerminationForThisScript; | 1351 | bool coopTerminationForThisScript; |
@@ -1611,52 +1477,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1611 | scriptObj, coopSleepHandle, assemblyPath, | 1477 | scriptObj, coopSleepHandle, assemblyPath, |
1612 | Path.Combine(ScriptEnginePath, World.RegionInfo.RegionID.ToString()), stateSource, coopTerminationForThisScript)) | 1478 | Path.Combine(ScriptEnginePath, World.RegionInfo.RegionID.ToString()), stateSource, coopTerminationForThisScript)) |
1613 | return false; | 1479 | return false; |
1614 | ======= | ||
1615 | // if (!instance.Load(m_AppDomains[appDomain], assembly, stateSource)) | ||
1616 | // return false; | ||
1617 | >>>>>>> avn/ubitvar | ||
1618 | 1480 | ||
1619 | m_AppDomains[appDomain] = sandbox; | 1481 | // if (DebugLevel >= 1) |
1482 | // m_log.DebugFormat( | ||
1483 | // "[XEngine] Loaded script {0}.{1}, item UUID {2}, prim UUID {3} @ {4}.{5}", | ||
1484 | // part.ParentGroup.RootPart.Name, item.Name, itemID, part.UUID, | ||
1485 | // part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName); | ||
1620 | 1486 | ||
1621 | m_DomainScripts[appDomain] = new List<UUID>(); | 1487 | if (presence != null) |
1622 | } | ||
1623 | catch (Exception e) | ||
1624 | { | 1488 | { |
1625 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); | 1489 | ShowScriptSaveResponse(item.OwnerID, |
1626 | m_ScriptErrorMessage += "Exception creating app domain:\n"; | 1490 | assetID, "Compile successful", true); |
1627 | m_ScriptFailCount++; | ||
1628 | lock (m_AddingAssemblies) | ||
1629 | { | ||
1630 | m_AddingAssemblies[assembly]--; | ||
1631 | } | ||
1632 | return false; | ||
1633 | } | 1491 | } |
1634 | } | ||
1635 | 1492 | ||
1493 | instance.AppDomain = appDomain; | ||
1494 | instance.LineMap = linemap; | ||
1636 | 1495 | ||
1637 | if (!instance.Load(m_AppDomains[appDomain], assembly, stateSource)) | 1496 | m_Scripts[itemID] = instance; |
1638 | return false; | ||
1639 | // m_log.DebugFormat( | ||
1640 | // "[XEngine] Loaded script {0}.{1}, script UUID {2}, prim UUID {3} @ {4}.{5}", | ||
1641 | // part.ParentGroup.RootPart.Name, item.Name, assetID, part.UUID, | ||
1642 | // part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName); | ||
1643 | |||
1644 | if (presence != null) | ||
1645 | { | ||
1646 | ShowScriptSaveResponse(item.OwnerID, | ||
1647 | assetID, "Compile successful", true); | ||
1648 | } | 1497 | } |
1649 | |||
1650 | instance.AppDomain = appDomain; | ||
1651 | instance.LineMap = linemap; | ||
1652 | lockScriptsForWrite(true); | ||
1653 | m_Scripts[itemID] = instance; | ||
1654 | lockScriptsForWrite(false); | ||
1655 | } | ||
1656 | else | ||
1657 | { | ||
1658 | lockScriptsForRead(false); | ||
1659 | } | 1498 | } |
1499 | |||
1660 | lock (m_PrimObjects) | 1500 | lock (m_PrimObjects) |
1661 | { | 1501 | { |
1662 | if (!m_PrimObjects.ContainsKey(localID)) | 1502 | if (!m_PrimObjects.ContainsKey(localID)) |
@@ -1674,7 +1514,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1674 | m_AddingAssemblies[assemblyPath]--; | 1514 | m_AddingAssemblies[assemblyPath]--; |
1675 | } | 1515 | } |
1676 | 1516 | ||
1677 | if (instance!=null) | 1517 | if (instance != null) |
1678 | instance.Init(); | 1518 | instance.Init(); |
1679 | 1519 | ||
1680 | bool runIt; | 1520 | bool runIt; |
@@ -1697,28 +1537,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1697 | m_CompileDict.Remove(itemID); | 1537 | m_CompileDict.Remove(itemID); |
1698 | } | 1538 | } |
1699 | 1539 | ||
1700 | lockScriptsForRead(true); | 1540 | IScriptInstance instance = null; |
1701 | // Do we even have it? | ||
1702 | if (!m_Scripts.ContainsKey(itemID)) | ||
1703 | { | ||
1704 | lockScriptsForRead(false); | ||
1705 | return; | ||
1706 | } | ||
1707 | 1541 | ||
1708 | <<<<<<< HEAD | 1542 | lock (m_Scripts) |
1709 | instance.Stop(m_WaitForEventCompletionOnScriptStop, true); | 1543 | { |
1710 | ======= | 1544 | // Do we even have it? |
1711 | IScriptInstance instance=m_Scripts[itemID]; | 1545 | if (!m_Scripts.ContainsKey(itemID)) |
1712 | lockScriptsForRead(false); | 1546 | return; |
1713 | lockScriptsForWrite(true); | ||
1714 | m_Scripts.Remove(itemID); | ||
1715 | lockScriptsForWrite(false); | ||
1716 | instance.ClearQueue(); | ||
1717 | 1547 | ||
1718 | instance.Stop(m_WaitForEventCompletionOnScriptStop); | 1548 | instance = m_Scripts[itemID]; |
1549 | m_Scripts.Remove(itemID); | ||
1550 | } | ||
1719 | 1551 | ||
1720 | // bool objectRemoved = false; | 1552 | instance.Stop(m_WaitForEventCompletionOnScriptStop, true); |
1721 | >>>>>>> avn/ubitvar | ||
1722 | 1553 | ||
1723 | lock (m_PrimObjects) | 1554 | lock (m_PrimObjects) |
1724 | { | 1555 | { |
@@ -1740,26 +1571,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1740 | 1571 | ||
1741 | instance.DestroyScriptInstance(); | 1572 | instance.DestroyScriptInstance(); |
1742 | 1573 | ||
1743 | if (m_DomainScripts.ContainsKey(instance.AppDomain)) | 1574 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); |
1575 | if (m_DomainScripts[instance.AppDomain].Count == 0) | ||
1744 | { | 1576 | { |
1745 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); | 1577 | m_DomainScripts.Remove(instance.AppDomain); |
1746 | if (m_DomainScripts[instance.AppDomain].Count == 0) | 1578 | UnloadAppDomain(instance.AppDomain); |
1747 | { | ||
1748 | m_DomainScripts.Remove(instance.AppDomain); | ||
1749 | UnloadAppDomain(instance.AppDomain); | ||
1750 | } | ||
1751 | } | 1579 | } |
1752 | 1580 | ||
1753 | ObjectRemoved handlerObjectRemoved = OnObjectRemoved; | 1581 | ObjectRemoved handlerObjectRemoved = OnObjectRemoved; |
1754 | if (handlerObjectRemoved != null) | 1582 | if (handlerObjectRemoved != null) |
1755 | { | 1583 | handlerObjectRemoved(instance.ObjectID); |
1756 | SceneObjectPart part = m_Scene.GetSceneObjectPart(localID); | ||
1757 | if (part != null) | ||
1758 | handlerObjectRemoved(part.UUID); | ||
1759 | } | ||
1760 | 1584 | ||
1761 | CleanAssemblies(); | ||
1762 | |||
1763 | ScriptRemoved handlerScriptRemoved = OnScriptRemoved; | 1585 | ScriptRemoved handlerScriptRemoved = OnScriptRemoved; |
1764 | if (handlerScriptRemoved != null) | 1586 | if (handlerScriptRemoved != null) |
1765 | handlerScriptRemoved(itemID); | 1587 | handlerScriptRemoved(itemID); |
@@ -2020,14 +1842,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2020 | private IScriptInstance GetInstance(UUID itemID) | 1842 | private IScriptInstance GetInstance(UUID itemID) |
2021 | { | 1843 | { |
2022 | IScriptInstance instance; | 1844 | IScriptInstance instance; |
2023 | lockScriptsForRead(true); | 1845 | lock (m_Scripts) |
2024 | if (!m_Scripts.ContainsKey(itemID)) | ||
2025 | { | 1846 | { |
2026 | lockScriptsForRead(false); | 1847 | if (!m_Scripts.ContainsKey(itemID)) |
2027 | return null; | 1848 | return null; |
1849 | instance = m_Scripts[itemID]; | ||
2028 | } | 1850 | } |
2029 | instance = m_Scripts[itemID]; | ||
2030 | lockScriptsForRead(false); | ||
2031 | return instance; | 1851 | return instance; |
2032 | } | 1852 | } |
2033 | 1853 | ||
@@ -2049,7 +1869,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2049 | return instance != null && instance.Running; | 1869 | return instance != null && instance.Running; |
2050 | } | 1870 | } |
2051 | 1871 | ||
2052 | [DebuggerNonUserCode] | ||
2053 | public void ApiResetScript(UUID itemID) | 1872 | public void ApiResetScript(UUID itemID) |
2054 | { | 1873 | { |
2055 | IScriptInstance instance = GetInstance(itemID); | 1874 | IScriptInstance instance = GetInstance(itemID); |
@@ -2134,7 +1953,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2134 | return instance != null ? instance.GetDetectID(idx) : UUID.Zero; | 1953 | return instance != null ? instance.GetDetectID(idx) : UUID.Zero; |
2135 | } | 1954 | } |
2136 | 1955 | ||
2137 | [DebuggerNonUserCode] | ||
2138 | public void SetState(UUID itemID, string newState) | 1956 | public void SetState(UUID itemID, string newState) |
2139 | { | 1957 | { |
2140 | IScriptInstance instance = GetInstance(itemID); | 1958 | IScriptInstance instance = GetInstance(itemID); |
@@ -2155,10 +1973,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2155 | 1973 | ||
2156 | List<IScriptInstance> instances = new List<IScriptInstance>(); | 1974 | List<IScriptInstance> instances = new List<IScriptInstance>(); |
2157 | 1975 | ||
2158 | lockScriptsForRead(true); | 1976 | lock (m_Scripts) |
2159 | foreach (IScriptInstance instance in m_Scripts.Values) | 1977 | { |
1978 | foreach (IScriptInstance instance in m_Scripts.Values) | ||
2160 | instances.Add(instance); | 1979 | instances.Add(instance); |
2161 | lockScriptsForRead(false); | 1980 | } |
2162 | 1981 | ||
2163 | foreach (IScriptInstance i in instances) | 1982 | foreach (IScriptInstance i in instances) |
2164 | { | 1983 | { |