diff options
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 59 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs | 22 |
2 files changed, 72 insertions, 9 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 6d8d481..32a2deb 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -2771,6 +2771,65 @@ namespace OpenSim.Region.Environment.Scenes | |||
2771 | m_eventManager.TriggerOnScriptChangedEvent(localID, change); | 2771 | m_eventManager.TriggerOnScriptChangedEvent(localID, change); |
2772 | } | 2772 | } |
2773 | 2773 | ||
2774 | public bool pipeEventsForScript(uint localID) | ||
2775 | { | ||
2776 | SceneObjectPart part = GetSceneObjectPart(localID); | ||
2777 | if (part != null) | ||
2778 | { | ||
2779 | LLVector3 pos = part.GetWorldPosition(); | ||
2780 | ILandObject parcel = LandChannel.getLandObject(pos.X, pos.Y); | ||
2781 | if (parcel != null) | ||
2782 | { | ||
2783 | if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowOtherScripts) != 0) | ||
2784 | { | ||
2785 | return true; | ||
2786 | } | ||
2787 | else if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowGroupScripts) != 0) | ||
2788 | { | ||
2789 | if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || PermissionsMngr.GenericEstatePermission(part.OwnerID)) | ||
2790 | { | ||
2791 | return true; | ||
2792 | } | ||
2793 | else | ||
2794 | { | ||
2795 | return false; | ||
2796 | } | ||
2797 | } | ||
2798 | else | ||
2799 | { | ||
2800 | if (part.OwnerID == parcel.landData.ownerID) | ||
2801 | { | ||
2802 | return true; | ||
2803 | } | ||
2804 | else | ||
2805 | { | ||
2806 | return false; | ||
2807 | } | ||
2808 | } | ||
2809 | } | ||
2810 | else | ||
2811 | { | ||
2812 | |||
2813 | if (pos.X > 0f && pos.X < Constants.RegionSize && pos.Y > 0f && pos.Y < Constants.RegionSize) | ||
2814 | { | ||
2815 | // The only time parcel != null when an object is inside a region is when | ||
2816 | // there is nothing behind the landchannel. IE, no land plugin loaded. | ||
2817 | return true; | ||
2818 | } | ||
2819 | else | ||
2820 | { | ||
2821 | // The object is outside of this region. Stop piping events to it. | ||
2822 | return false; | ||
2823 | } | ||
2824 | } | ||
2825 | |||
2826 | } | ||
2827 | else | ||
2828 | { | ||
2829 | return false; | ||
2830 | } | ||
2831 | } | ||
2832 | |||
2774 | #endregion | 2833 | #endregion |
2775 | 2834 | ||
2776 | #region InnerScene wrapper methods | 2835 | #region InnerScene wrapper methods |
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs index d77f698..30b3e8f 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/EventQueueThreadClass.cs | |||
@@ -272,15 +272,19 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase | |||
272 | // + ", QIS.functionName: " + | 272 | // + ", QIS.functionName: " + |
273 | // QIS.functionName); | 273 | // QIS.functionName); |
274 | #endif | 274 | #endif |
275 | LastExecutionStarted = DateTime.Now.Ticks; | 275 | // Only pipe event if land supports it. |
276 | KillCurrentScript = false; | 276 | if (m_ScriptEngine.World.pipeEventsForScript(QIS.localID)) |
277 | InExecution = true; | 277 | { |
278 | m_ScriptEngine.m_ScriptManager.ExecuteEvent(QIS.localID, | 278 | LastExecutionStarted = DateTime.Now.Ticks; |
279 | QIS.itemID, | 279 | KillCurrentScript = false; |
280 | QIS.functionName, | 280 | InExecution = true; |
281 | QIS.llDetectParams, | 281 | m_ScriptEngine.m_ScriptManager.ExecuteEvent(QIS.localID, |
282 | QIS.param); | 282 | QIS.itemID, |
283 | InExecution = false; | 283 | QIS.functionName, |
284 | QIS.llDetectParams, | ||
285 | QIS.param); | ||
286 | InExecution = false; | ||
287 | } | ||
284 | } | 288 | } |
285 | catch (Exception e) | 289 | catch (Exception e) |
286 | { | 290 | { |