From e9067c133c7ba3a2c2459e65487c1545f1d6f950 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Thu, 13 Aug 2015 01:34:18 +0200 Subject: [PATCH 1/4] Remove DOS line endings from LSL_API.cs --- .../Shared/Api/Implementation/LSL_Api.cs | 30556 ++++++++-------- 1 file changed, 15278 insertions(+), 15278 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index afc43930fd..b4a8620650 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -1,15278 +1,15278 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSimulator Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.Drawing.Imaging; -using System.Runtime.Remoting.Lifetime; -using System.Text; -using System.Threading; -using System.Text.RegularExpressions; -using Nini.Config; -using log4net; -using OpenMetaverse; -using OpenMetaverse.Assets; -using OpenMetaverse.Packets; -using OpenMetaverse.Rendering; -using OpenSim; -using OpenSim.Framework; - -using OpenSim.Region.CoreModules; -using OpenSim.Region.CoreModules.World.Land; -using OpenSim.Region.CoreModules.World.Terrain; -using OpenSim.Region.Framework.Interfaces; -using OpenSim.Region.Framework.Scenes; -using OpenSim.Region.Framework.Scenes.Animation; -using OpenSim.Region.Framework.Scenes.Scripting; -using OpenSim.Region.Physics.Manager; -using OpenSim.Region.ScriptEngine.Shared; -using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; -using OpenSim.Region.ScriptEngine.Shared.ScriptBase; -using OpenSim.Region.ScriptEngine.Interfaces; -using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; -using OpenSim.Services.Interfaces; -using GridRegion = OpenSim.Services.Interfaces.GridRegion; -using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; -using PrimType = OpenSim.Region.Framework.Scenes.PrimType; -using AssetLandmark = OpenSim.Framework.AssetLandmark; -using RegionFlags = OpenSim.Framework.RegionFlags; - -using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat; -using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; -using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString; -using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list; -using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; -using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString; -using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; -using System.Reflection; -using System.Linq; -using PermissionMask = OpenSim.Framework.PermissionMask; - -namespace OpenSim.Region.ScriptEngine.Shared.Api -{ - // MUST be a ref type - public class UserInfoCacheEntry - { - public int time; - public UserAccount account; - public PresenceInfo pinfo; - } - - /// - /// Contains all LSL ll-functions. This class will be in Default AppDomain. - /// - public class LSL_Api : MarshalByRefObject, ILSL_Api, IScriptApi - { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public int LlRequestAgentDataCacheTimeoutMs { get; set; } - - protected IScriptEngine m_ScriptEngine; - protected SceneObjectPart m_host; - - /// - /// Used for script sleeps when we are using co-operative script termination. - /// - /// null if co-operative script termination is not active - WaitHandle m_coopSleepHandle; - - /// - /// The timer used by the ScriptInstance to measure how long the script has executed. - /// - private Stopwatch m_executionTimer; - - /// - /// The item that hosts this script - /// - protected TaskInventoryItem m_item; - - protected bool throwErrorOnNotImplemented = false; - protected AsyncCommandManager AsyncCommands = null; - protected float m_ScriptDelayFactor = 1.0f; - protected float m_ScriptDistanceFactor = 1.0f; - protected float m_MinTimerInterval = 0.5f; - protected float m_recoilScaleFactor = 0.0f; - - protected DateTime m_timer = DateTime.Now; - protected bool m_waitingForScriptAnswer = false; - protected bool m_automaticLinkPermission = false; - protected IMessageTransferModule m_TransferModule = null; - protected int m_notecardLineReadCharsMax = 255; - protected int m_scriptConsoleChannel = 0; - protected bool m_scriptConsoleChannelEnabled = false; - protected IUrlModule m_UrlModule = null; - protected Dictionary m_userInfoCache = new Dictionary(); - protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. - protected int m_sleepMsOnSetTexture = 200; - protected int m_sleepMsOnSetLinkTexture = 200; - protected int m_sleepMsOnScaleTexture = 200; - protected int m_sleepMsOnOffsetTexture = 200; - protected int m_sleepMsOnRotateTexture = 200; - protected int m_sleepMsOnSetPos = 200; - protected int m_sleepMsOnSetRot = 200; - protected int m_sleepMsOnSetLocalRot = 200; - protected int m_sleepMsOnPreloadSound = 1000; - protected int m_sleepMsOnMakeExplosion = 100; - protected int m_sleepMsOnMakeFountain = 100; - protected int m_sleepMsOnMakeSmoke = 100; - protected int m_sleepMsOnMakeFire = 100; - protected int m_sleepMsOnRezAtRoot = 100; - protected int m_sleepMsOnInstantMessage = 2000; - protected int m_sleepMsOnEmail = 20000; - protected int m_sleepMsOnCreateLink = 1000; - protected int m_sleepMsOnGiveInventory = 3000; - protected int m_sleepMsOnRequestAgentData = 100; - protected int m_sleepMsOnRequestInventoryData = 1000; - protected int m_sleepMsOnSetDamage = 5000; - protected int m_sleepMsOnTextBox = 1000; - protected int m_sleepMsOnAdjustSoundVolume = 100; - protected int m_sleepMsOnEjectFromLand = 5000; - protected int m_sleepMsOnAddToLandPassList = 100; - protected int m_sleepMsOnDialog = 1000; - protected int m_sleepMsOnRemoteLoadScript = 3000; - protected int m_sleepMsOnRemoteLoadScriptPin = 3000; - protected int m_sleepMsOnOpenRemoteDataChannel = 1000; - protected int m_sleepMsOnSendRemoteData = 3000; - protected int m_sleepMsOnRemoteDataReply = 3000; - protected int m_sleepMsOnCloseRemoteDataChannel = 1000; - protected int m_sleepMsOnSetPrimitiveParams = 200; - protected int m_sleepMsOnSetLinkPrimitiveParams = 200; - protected int m_sleepMsOnXorBase64Strings = 300; - protected int m_sleepMsOnSetParcelMusicURL = 2000; - protected int m_sleepMsOnGetPrimMediaParams = 1000; - protected int m_sleepMsOnGetLinkMedia = 1000; - protected int m_sleepMsOnSetPrimMediaParams = 1000; - protected int m_sleepMsOnSetLinkMedia = 1000; - protected int m_sleepMsOnClearPrimMedia = 1000; - protected int m_sleepMsOnClearLinkMedia = 1000; - protected int m_sleepMsOnRequestSimulatorData = 1000; - protected int m_sleepMsOnLoadURL = 10000; - protected int m_sleepMsOnParcelMediaCommandList = 2000; - protected int m_sleepMsOnParcelMediaQuery = 2000; - protected int m_sleepMsOnModPow = 1000; - protected int m_sleepMsOnSetPrimURL = 2000; - protected int m_sleepMsOnRefreshPrimURL = 20000; - protected int m_sleepMsOnMapDestination = 1000; - protected int m_sleepMsOnAddToLandBanList = 100; - protected int m_sleepMsOnRemoveFromLandPassList = 100; - protected int m_sleepMsOnRemoveFromLandBanList = 100; - protected int m_sleepMsOnResetLandBanList = 100; - protected int m_sleepMsOnResetLandPassList = 100; - protected int m_sleepMsOnGetParcelPrimOwners = 2000; - protected int m_sleepMsOnGetNumberOfNotecardLines = 100; - protected int m_sleepMsOnGetNotecardLine = 100; - protected string m_internalObjectHost = "lsl.opensim.local"; - protected bool m_restrictEmail = false; - protected ISoundModule m_SoundModule = null; - - protected float m_avatarHeightCorrection = 0.2f; - protected bool m_useSimpleBoxesInGetBoundingBox = false; - protected bool m_addStatsInGetBoundingBox = false; - - //LSL Avatar Bounding Box (lABB), lower (1) and upper (2), - //standing (Std), Groundsitting (Grs), Sitting (Sit), - //along X, Y and Z axes, constants (0) and coefficients (1) - protected float m_lABB1StdX0 = -0.275f; - protected float m_lABB2StdX0 = 0.275f; - protected float m_lABB1StdY0 = -0.35f; - protected float m_lABB2StdY0 = 0.35f; - protected float m_lABB1StdZ0 = -0.1f; - protected float m_lABB1StdZ1 = -0.5f; - protected float m_lABB2StdZ0 = 0.1f; - protected float m_lABB2StdZ1 = 0.5f; - protected float m_lABB1GrsX0 = -0.3875f; - protected float m_lABB2GrsX0 = 0.3875f; - protected float m_lABB1GrsY0 = -0.5f; - protected float m_lABB2GrsY0 = 0.5f; - protected float m_lABB1GrsZ0 = -0.05f; - protected float m_lABB1GrsZ1 = -0.375f; - protected float m_lABB2GrsZ0 = 0.5f; - protected float m_lABB2GrsZ1 = 0.0f; - protected float m_lABB1SitX0 = -0.5875f; - protected float m_lABB2SitX0 = 0.1875f; - protected float m_lABB1SitY0 = -0.35f; - protected float m_lABB2SitY0 = 0.35f; - protected float m_lABB1SitZ0 = -0.35f; - protected float m_lABB1SitZ1 = -0.375f; - protected float m_lABB2SitZ0 = -0.25f; - protected float m_lABB2SitZ1 = 0.25f; - - protected float m_primSafetyCoeffX = 2.414214f; - protected float m_primSafetyCoeffY = 2.414214f; - protected float m_primSafetyCoeffZ = 1.618034f; - protected bool m_useCastRayV3 = false; - protected float m_floatToleranceInCastRay = 0.00001f; - protected float m_floatTolerance2InCastRay = 0.001f; - protected DetailLevel m_primLodInCastRay = DetailLevel.Medium; - protected DetailLevel m_sculptLodInCastRay = DetailLevel.Medium; - protected DetailLevel m_meshLodInCastRay = DetailLevel.Highest; - protected DetailLevel m_avatarLodInCastRay = DetailLevel.Medium; - protected int m_maxHitsInCastRay = 16; - protected int m_maxHitsPerPrimInCastRay = 16; - protected int m_maxHitsPerObjectInCastRay = 16; - protected bool m_detectExitsInCastRay = false; - protected bool m_filterPartsInCastRay = false; - protected bool m_doAttachmentsInCastRay = false; - protected int m_msThrottleInCastRay = 200; - protected int m_msPerRegionInCastRay = 40; - protected int m_msPerAvatarInCastRay = 10; - protected int m_msMinInCastRay = 2; - protected int m_msMaxInCastRay = 40; - protected static List m_castRayCalls = new List(); - protected bool m_useMeshCacheInCastRay = true; - protected static Dictionary m_cachedMeshes = new Dictionary(); - - //An array of HTTP/1.1 headers that are not allowed to be used - //as custom headers by llHTTPRequest. - private string[] HttpStandardHeaders = - { - "Accept", "Accept-Charset", "Accept-Encoding", "Accept-Language", - "Accept-Ranges", "Age", "Allow", "Authorization", "Cache-Control", - "Connection", "Content-Encoding", "Content-Language", - "Content-Length", "Content-Location", "Content-MD5", - "Content-Range", "Content-Type", "Date", "ETag", "Expect", - "Expires", "From", "Host", "If-Match", "If-Modified-Since", - "If-None-Match", "If-Range", "If-Unmodified-Since", "Last-Modified", - "Location", "Max-Forwards", "Pragma", "Proxy-Authenticate", - "Proxy-Authorization", "Range", "Referer", "Retry-After", "Server", - "TE", "Trailer", "Transfer-Encoding", "Upgrade", "User-Agent", - "Vary", "Via", "Warning", "WWW-Authenticate" - }; - - public void Initialize( - IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle, - Stopwatch executionTimer) - { - m_ScriptEngine = scriptEngine; - m_host = host; - m_item = item; - m_coopSleepHandle = coopSleepHandle; - m_executionTimer = executionTimer; - - LoadConfig(); - - m_TransferModule = - m_ScriptEngine.World.RequestModuleInterface(); - m_UrlModule = m_ScriptEngine.World.RequestModuleInterface(); - m_SoundModule = m_ScriptEngine.World.RequestModuleInterface(); - - AsyncCommands = new AsyncCommandManager(m_ScriptEngine); - } - - /// - /// Load configuration items that affect script, object and run-time behavior. */ - /// - private void LoadConfig() - { - LlRequestAgentDataCacheTimeoutMs = 20000; - - IConfig seConfig = m_ScriptEngine.Config; - - if (seConfig != null) - { - m_ScriptDelayFactor = - seConfig.GetFloat("ScriptDelayFactor", m_ScriptDelayFactor); - m_ScriptDistanceFactor = - seConfig.GetFloat("ScriptDistanceLimitFactor", m_ScriptDistanceFactor); - m_MinTimerInterval = - seConfig.GetFloat("MinTimerInterval", m_MinTimerInterval); - m_automaticLinkPermission = - seConfig.GetBoolean("AutomaticLinkPermission", m_automaticLinkPermission); - m_notecardLineReadCharsMax = - seConfig.GetInt("NotecardLineReadCharsMax", m_notecardLineReadCharsMax); - - // Rezzing an object with a velocity can create recoil. This feature seems to have been - // removed from recent versions of SL. The code computes recoil (vel*mass) and scales - // it by this factor. May be zero to turn off recoil all together. - m_recoilScaleFactor = m_ScriptEngine.Config.GetFloat("RecoilScaleFactor", m_recoilScaleFactor); - } - - if (m_notecardLineReadCharsMax > 65535) - m_notecardLineReadCharsMax = 65535; - - // load limits for particular subsystems. - IConfigSource seConfigSource = m_ScriptEngine.ConfigSource; - - if (seConfigSource != null) - { - IConfig lslConfig = seConfigSource.Configs["LL-Functions"]; - if (lslConfig != null) - { - m_restrictEmail = lslConfig.GetBoolean("RestrictEmail", m_restrictEmail); - m_avatarHeightCorrection = lslConfig.GetFloat("AvatarHeightCorrection", m_avatarHeightCorrection); - m_useSimpleBoxesInGetBoundingBox = lslConfig.GetBoolean("UseSimpleBoxesInGetBoundingBox", m_useSimpleBoxesInGetBoundingBox); - m_addStatsInGetBoundingBox = lslConfig.GetBoolean("AddStatsInGetBoundingBox", m_addStatsInGetBoundingBox); - m_lABB1StdX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingXconst", m_lABB1StdX0); - m_lABB2StdX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingXconst", m_lABB2StdX0); - m_lABB1StdY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingYconst", m_lABB1StdY0); - m_lABB2StdY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingYconst", m_lABB2StdY0); - m_lABB1StdZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingZconst", m_lABB1StdZ0); - m_lABB1StdZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingZcoeff", m_lABB1StdZ1); - m_lABB2StdZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingZconst", m_lABB2StdZ0); - m_lABB2StdZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingZcoeff", m_lABB2StdZ1); - m_lABB1GrsX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingXconst", m_lABB1GrsX0); - m_lABB2GrsX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingXconst", m_lABB2GrsX0); - m_lABB1GrsY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingYconst", m_lABB1GrsY0); - m_lABB2GrsY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingYconst", m_lABB2GrsY0); - m_lABB1GrsZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingZconst", m_lABB1GrsZ0); - m_lABB1GrsZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingZcoeff", m_lABB1GrsZ1); - m_lABB2GrsZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingZconst", m_lABB2GrsZ0); - m_lABB2GrsZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingZcoeff", m_lABB2GrsZ1); - m_lABB1SitX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingXconst", m_lABB1SitX0); - m_lABB2SitX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingXconst", m_lABB2SitX0); - m_lABB1SitY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingYconst", m_lABB1SitY0); - m_lABB2SitY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingYconst", m_lABB2SitY0); - m_lABB1SitZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingZconst", m_lABB1SitZ0); - m_lABB1SitZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingZcoeff", m_lABB1SitZ1); - m_lABB2SitZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingZconst", m_lABB2SitZ0); - m_lABB2SitZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingZcoeff", m_lABB2SitZ1); - m_primSafetyCoeffX = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientX", m_primSafetyCoeffX); - m_primSafetyCoeffY = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientY", m_primSafetyCoeffY); - m_primSafetyCoeffZ = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientZ", m_primSafetyCoeffZ); - m_useCastRayV3 = lslConfig.GetBoolean("UseLlCastRayV3", m_useCastRayV3); - m_floatToleranceInCastRay = lslConfig.GetFloat("FloatToleranceInLlCastRay", m_floatToleranceInCastRay); - m_floatTolerance2InCastRay = lslConfig.GetFloat("FloatTolerance2InLlCastRay", m_floatTolerance2InCastRay); - m_primLodInCastRay = (DetailLevel)lslConfig.GetInt("PrimDetailLevelInLlCastRay", (int)m_primLodInCastRay); - m_sculptLodInCastRay = (DetailLevel)lslConfig.GetInt("SculptDetailLevelInLlCastRay", (int)m_sculptLodInCastRay); - m_meshLodInCastRay = (DetailLevel)lslConfig.GetInt("MeshDetailLevelInLlCastRay", (int)m_meshLodInCastRay); - m_avatarLodInCastRay = (DetailLevel)lslConfig.GetInt("AvatarDetailLevelInLlCastRay", (int)m_avatarLodInCastRay); - m_maxHitsInCastRay = lslConfig.GetInt("MaxHitsInLlCastRay", m_maxHitsInCastRay); - m_maxHitsPerPrimInCastRay = lslConfig.GetInt("MaxHitsPerPrimInLlCastRay", m_maxHitsPerPrimInCastRay); - m_maxHitsPerObjectInCastRay = lslConfig.GetInt("MaxHitsPerObjectInLlCastRay", m_maxHitsPerObjectInCastRay); - m_detectExitsInCastRay = lslConfig.GetBoolean("DetectExitHitsInLlCastRay", m_detectExitsInCastRay); - m_filterPartsInCastRay = lslConfig.GetBoolean("FilterPartsInLlCastRay", m_filterPartsInCastRay); - m_doAttachmentsInCastRay = lslConfig.GetBoolean("DoAttachmentsInLlCastRay", m_doAttachmentsInCastRay); - m_msThrottleInCastRay = lslConfig.GetInt("ThrottleTimeInMsInLlCastRay", m_msThrottleInCastRay); - m_msPerRegionInCastRay = lslConfig.GetInt("AvailableTimeInMsPerRegionInLlCastRay", m_msPerRegionInCastRay); - m_msPerAvatarInCastRay = lslConfig.GetInt("AvailableTimeInMsPerAvatarInLlCastRay", m_msPerAvatarInCastRay); - m_msMinInCastRay = lslConfig.GetInt("RequiredAvailableTimeInMsInLlCastRay", m_msMinInCastRay); - m_msMaxInCastRay = lslConfig.GetInt("MaximumAvailableTimeInMsInLlCastRay", m_msMaxInCastRay); - m_useMeshCacheInCastRay = lslConfig.GetBoolean("UseMeshCacheInLlCastRay", m_useMeshCacheInCastRay); - } - - IConfig smtpConfig = seConfigSource.Configs["SMTP"]; - if (smtpConfig != null) - { - // there's an smtp config, so load in the snooze time. - EMAIL_PAUSE_TIME = smtpConfig.GetInt("email_pause_time", EMAIL_PAUSE_TIME); - - m_internalObjectHost = smtpConfig.GetString("internal_object_host", m_internalObjectHost); - } - } - m_sleepMsOnEmail = EMAIL_PAUSE_TIME * 1000; - } - - public override Object InitializeLifetimeService() - { - ILease lease = (ILease)base.InitializeLifetimeService(); - - if (lease.CurrentState == LeaseState.Initial) - { - lease.InitialLeaseTime = TimeSpan.FromMinutes(0); -// lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0); -// lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0); - } - return lease; - } - - protected virtual void ScriptSleep(int delay) - { - delay = (int)((float)delay * m_ScriptDelayFactor); - if (delay == 0) - return; - - Sleep(delay); - } - - protected virtual void Sleep(int delay) - { - if (m_executionTimer != null) - m_executionTimer.Stop(); // sleep time doesn't count as execution time, since it doesn't use the CPU - - try - { - if (m_coopSleepHandle == null) - System.Threading.Thread.Sleep(delay); - else - CheckForCoopTermination(delay); - } - finally - { - if (m_executionTimer != null) - m_executionTimer.Start(); - } - } - - /// - /// Check for co-operative termination. - /// - /// If called with 0, then just the check is performed with no wait. - protected virtual void CheckForCoopTermination(int delay) - { - if (m_coopSleepHandle.WaitOne(delay)) - throw new ScriptCoopStopException(); - } - - public Scene World - { - get { return m_ScriptEngine.World; } - } - - public void state(string newState) - { - m_ScriptEngine.SetState(m_item.ItemID, newState); - } - - /// - /// Reset the named script. The script must be present - /// in the same prim. - /// - public void llResetScript() - { - m_host.AddScriptLPS(1); - - // We need to tell the URL module, if we hav one, to release - // the allocated URLs - if (m_UrlModule != null) - m_UrlModule.ScriptRemoved(m_item.ItemID); - - m_ScriptEngine.ApiResetScript(m_item.ItemID); - } - - public void llResetOtherScript(string name) - { - UUID item; - - m_host.AddScriptLPS(1); - - if ((item = GetScriptByName(name)) != UUID.Zero) - m_ScriptEngine.ResetScript(item); - else - Error("llResetOtherScript", "Can't find script '" + name + "'"); - } - - public LSL_Integer llGetScriptState(string name) - { - UUID item; - - m_host.AddScriptLPS(1); - - if ((item = GetScriptByName(name)) != UUID.Zero) - { - return m_ScriptEngine.GetScriptState(item) ?1:0; - } - - Error("llGetScriptState", "Can't find script '" + name + "'"); - - // If we didn't find it, then it's safe to - // assume it is not running. - - return 0; - } - - public void llSetScriptState(string name, int run) - { - UUID item; - - m_host.AddScriptLPS(1); - - // These functions are supposed to be robust, - // so get the state one step at a time. - - if ((item = GetScriptByName(name)) != UUID.Zero) - { - m_ScriptEngine.SetScriptState(item, run == 0 ? false : true); - } - else - { - Error("llSetScriptState", "Can't find script '" + name + "'"); - } - } - - /// - /// Get a given link entity from a linkset (linked objects and any sitting avatars). - /// - /// - /// If there are any ScenePresence's in the linkset (i.e. because they are sat upon one of the prims), then - /// these are counted as extra entities that correspond to linknums beyond the number of prims in the linkset. - /// The ScenePresences receive linknums in the order in which they sat. - /// - /// - /// The link entity. null if not found. - /// - /// - /// - /// Can be either a non-negative integer or ScriptBaseClass.LINK_THIS (-4). - /// If ScriptBaseClass.LINK_THIS then the entity containing the script is returned. - /// If the linkset has one entity and a linknum of zero is given, then the single entity is returned. If any - /// positive integer is given in this case then null is returned. - /// If the linkset has more than one entity and a linknum greater than zero but equal to or less than the number - /// of entities, then the entity which corresponds to that linknum is returned. - /// Otherwise, if a positive linknum is given which is greater than the number of entities in the linkset, then - /// null is returned. - /// - public ISceneEntity GetLinkEntity(SceneObjectPart part, int linknum) - { - if (linknum < 0) - { - if (linknum == ScriptBaseClass.LINK_THIS) - return part; - else - return null; - } - - int actualPrimCount = part.ParentGroup.PrimCount; - List sittingAvatars = part.ParentGroup.GetSittingAvatars(); - int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; - - // Special case for a single prim. In this case the linknum is zero. However, this will not match a single - // prim that has any avatars sat upon it (in which case the root prim is link 1). - if (linknum == 0) - { - if (actualPrimCount == 1 && sittingAvatars.Count == 0) - return part; - - return null; - } - // Special case to handle a single prim with sitting avatars. GetLinkPart() would only match zero but - // here we must match 1 (ScriptBaseClass.LINK_ROOT). - else if (linknum == ScriptBaseClass.LINK_ROOT && actualPrimCount == 1) - { - if (sittingAvatars.Count > 0) - return part.ParentGroup.RootPart; - else - return null; - } - else if (linknum <= adjustedPrimCount) - { - if (linknum <= actualPrimCount) - { - return part.ParentGroup.GetLinkNumPart(linknum); - } - else - { - return sittingAvatars[linknum - actualPrimCount - 1]; - } - } - else - { - return null; - } - } - - public List GetLinkParts(int linkType) - { - return GetLinkParts(m_host, linkType); - } - - public static List GetLinkParts(SceneObjectPart part, int linkType) - { - List ret = new List(); - ret.Add(part); - - switch (linkType) - { - case ScriptBaseClass.LINK_SET: - return new List(part.ParentGroup.Parts); - - case ScriptBaseClass.LINK_ROOT: - ret = new List(); - ret.Add(part.ParentGroup.RootPart); - return ret; - - case ScriptBaseClass.LINK_ALL_OTHERS: - ret = new List(part.ParentGroup.Parts); - - if (ret.Contains(part)) - ret.Remove(part); - - return ret; - - case ScriptBaseClass.LINK_ALL_CHILDREN: - ret = new List(part.ParentGroup.Parts); - - if (ret.Contains(part.ParentGroup.RootPart)) - ret.Remove(part.ParentGroup.RootPart); - return ret; - - case ScriptBaseClass.LINK_THIS: - return ret; - - default: - if (linkType < 0) - return new List(); - - SceneObjectPart target = part.ParentGroup.GetLinkNumPart(linkType); - if (target == null) - return new List(); - ret = new List(); - ret.Add(target); - return ret; - } - } - - public List GetLinkEntities(int linkType) - { - return GetLinkEntities(m_host, linkType); - } - - public List GetLinkEntities(SceneObjectPart part, int linkType) - { - List ret; - - switch (linkType) - { - case ScriptBaseClass.LINK_SET: - return new List(part.ParentGroup.Parts); - - case ScriptBaseClass.LINK_ROOT: - return new List() { part.ParentGroup.RootPart }; - - case ScriptBaseClass.LINK_ALL_OTHERS: - ret = new List(part.ParentGroup.Parts); - - if (ret.Contains(part)) - ret.Remove(part); - - return ret; - - case ScriptBaseClass.LINK_ALL_CHILDREN: - ret = new List(part.ParentGroup.Parts); - - if (ret.Contains(part.ParentGroup.RootPart)) - ret.Remove(part.ParentGroup.RootPart); - - return ret; - - case ScriptBaseClass.LINK_THIS: - return new List() { part }; - - default: - if (linkType < 0) - return new List(); - - ISceneEntity target = GetLinkEntity(part, linkType); - if (target == null) - return new List(); - - return new List() { target }; - } - } - - //These are the implementations of the various ll-functions used by the LSL scripts. - public LSL_Float llSin(double f) - { - m_host.AddScriptLPS(1); - return (double)Math.Sin(f); - } - - public LSL_Float llCos(double f) - { - m_host.AddScriptLPS(1); - return (double)Math.Cos(f); - } - - public LSL_Float llTan(double f) - { - m_host.AddScriptLPS(1); - return (double)Math.Tan(f); - } - - public LSL_Float llAtan2(double x, double y) - { - m_host.AddScriptLPS(1); - return (double)Math.Atan2(x, y); - } - - public LSL_Float llSqrt(double f) - { - m_host.AddScriptLPS(1); - return (double)Math.Sqrt(f); - } - - public LSL_Float llPow(double fbase, double fexponent) - { - m_host.AddScriptLPS(1); - return (double)Math.Pow(fbase, fexponent); - } - - public LSL_Integer llAbs(int i) - { - // changed to replicate LSL behaviour whereby minimum int value is returned untouched. - m_host.AddScriptLPS(1); - if (i == Int32.MinValue) - return i; - else - return (int)Math.Abs(i); - } - - public LSL_Float llFabs(double f) - { - m_host.AddScriptLPS(1); - return (double)Math.Abs(f); - } - - public LSL_Float llFrand(double mag) - { - m_host.AddScriptLPS(1); - - return Util.RandomClass.NextDouble() * mag; - } - - public LSL_Integer llFloor(double f) - { - m_host.AddScriptLPS(1); - return (int)Math.Floor(f); - } - - public LSL_Integer llCeil(double f) - { - m_host.AddScriptLPS(1); - return (int)Math.Ceiling(f); - } - - // Xantor 01/May/2008 fixed midpointrounding (2.5 becomes 3.0 instead of 2.0, default = ToEven) - public LSL_Integer llRound(double f) - { - m_host.AddScriptLPS(1); - return (int)Math.Round(f, MidpointRounding.AwayFromZero); - } - - //This next group are vector operations involving squaring and square root. ckrinke - public LSL_Float llVecMag(LSL_Vector v) - { - m_host.AddScriptLPS(1); - return LSL_Vector.Mag(v); - } - - public LSL_Vector llVecNorm(LSL_Vector v) - { - m_host.AddScriptLPS(1); - return LSL_Vector.Norm(v); - } - - private double VecDist(LSL_Vector a, LSL_Vector b) - { - double dx = a.x - b.x; - double dy = a.y - b.y; - double dz = a.z - b.z; - return Math.Sqrt(dx * dx + dy * dy + dz * dz); - } - - public LSL_Float llVecDist(LSL_Vector a, LSL_Vector b) - { - m_host.AddScriptLPS(1); - return VecDist(a, b); - } - - //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke - - /// - /// Convert an LSL rotation to a Euler vector. - /// - /// - /// Using algorithm based off http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/quat_2_euler_paper_ver2-1.pdf - /// to avoid issues with singularity and rounding with Y rotation of +/- PI/2 - /// - /// - /// - public LSL_Vector llRot2Euler(LSL_Rotation r) - { - m_host.AddScriptLPS(1); - - LSL_Vector v = new LSL_Vector(0.0, 0.0, 1.0) * r; // Z axis unit vector unaffected by Z rotation component of r. - double m = LSL_Vector.Mag(v); // Just in case v isn't normalized, need magnitude for Asin() operation later. - if (m == 0.0) return new LSL_Vector(); - double x = Math.Atan2(-v.y, v.z); - double sin = v.x / m; - if (sin < -0.999999 || sin > 0.999999) x = 0.0; // Force X rotation to 0 at the singularities. - double y = Math.Asin(sin); - // Rotate X axis unit vector by r and unwind the X and Y rotations leaving only the Z rotation - v = new LSL_Vector(1.0, 0.0, 0.0) * ((r * new LSL_Rotation(Math.Sin(-x / 2.0), 0.0, 0.0, Math.Cos(-x / 2.0))) * new LSL_Rotation(0.0, Math.Sin(-y / 2.0), 0.0, Math.Cos(-y / 2.0))); - double z = Math.Atan2(v.y, v.x); - - return new LSL_Vector(x, y, z); - } - - /* From wiki: - The Euler angle vector (in radians) is converted to a rotation by doing the rotations around the 3 axes - in Z, Y, X order. So llEuler2Rot(<1.0, 2.0, 3.0> * DEG_TO_RAD) generates a rotation by taking the zero rotation, - a vector pointing along the X axis, first rotating it 3 degrees around the global Z axis, then rotating the resulting - vector 2 degrees around the global Y axis, and finally rotating that 1 degree around the global X axis. - */ - - /* How we arrived at this llEuler2Rot - * - * Experiment in SL to determine conventions: - * llEuler2Rot()=<1,0,0,0> - * llEuler2Rot(<0,PI,0>)=<0,1,0,0> - * llEuler2Rot(<0,0,PI>)=<0,0,1,0> - * - * Important facts about Quaternions - * - multiplication is non-commutative (a*b != b*a) - * - http://en.wikipedia.org/wiki/Quaternion#Basis_multiplication - * - * Above SL experiment gives (c1,c2,c3,s1,s2,s3 as defined in our llEuler2Rot): - * Qx = c1+i*s1 - * Qy = c2+j*s2; - * Qz = c3+k*s3; - * - * Rotations applied in order (from above) Z, Y, X - * Q = (Qz * Qy) * Qx - * ((c1+i*s1)*(c2+j*s2))*(c3+k*s3) - * (c1*c2+i*s1*c2+j*c1*s2+ij*s1*s2)*(c3+k*s3) - * (c1*c2+i*s1*c2+j*c1*s2+k*s1*s2)*(c3+k*s3) - * c1*c2*c3+i*s1*c2*c3+j*c1*s2*c3+k*s1*s2*c3+k*c1*c2*s3+ik*s1*c2*s3+jk*c1*s2*s3+kk*s1*s2*s3 - * c1*c2*c3+i*s1*c2*c3+j*c1*s2*c3+k*s1*s2*c3+k*c1*c2*s3 -j*s1*c2*s3 +i*c1*s2*s3 -s1*s2*s3 - * regroup: x=i*(s1*c2*c3+c1*s2*s3) - * y=j*(c1*s2*c3-s1*c2*s3) - * z=k*(s1*s2*c3+c1*c2*s3) - * s= c1*c2*c3-s1*s2*s3 - * - * This implementation agrees with the functions found here: - * http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions - * And with the results in SL. - * - * It's also possible to calculate llEuler2Rot by direct multiplication of - * the Qz, Qy, and Qx vectors (as above - and done in the "accurate" function - * from the wiki). - * Apparently in some cases this is better from a numerical precision perspective? - */ - - public LSL_Rotation llEuler2Rot(LSL_Vector v) - { - m_host.AddScriptLPS(1); - - double x,y,z,s; - - double c1 = Math.Cos(v.x * 0.5); - double c2 = Math.Cos(v.y * 0.5); - double c3 = Math.Cos(v.z * 0.5); - double s1 = Math.Sin(v.x * 0.5); - double s2 = Math.Sin(v.y * 0.5); - double s3 = Math.Sin(v.z * 0.5); - - x = s1 * c2 * c3 + c1 * s2 * s3; - y = c1 * s2 * c3 - s1 * c2 * s3; - z = s1 * s2 * c3 + c1 * c2 * s3; - s = c1 * c2 * c3 - s1 * s2 * s3; - - return new LSL_Rotation(x, y, z, s); - } - - public LSL_Rotation llAxes2Rot(LSL_Vector fwd, LSL_Vector left, LSL_Vector up) - { - m_host.AddScriptLPS(1); - double s; - double tr = fwd.x + left.y + up.z + 1.0; - - if (tr >= 1.0) - { - s = 0.5 / Math.Sqrt(tr); - return new LSL_Rotation( - (left.z - up.y) * s, - (up.x - fwd.z) * s, - (fwd.y - left.x) * s, - 0.25 / s); - } - else - { - double max = (left.y > up.z) ? left.y : up.z; - - if (max < fwd.x) - { - s = Math.Sqrt(fwd.x - (left.y + up.z) + 1.0); - double x = s * 0.5; - s = 0.5 / s; - return new LSL_Rotation( - x, - (fwd.y + left.x) * s, - (up.x + fwd.z) * s, - (left.z - up.y) * s); - } - else if (max == left.y) - { - s = Math.Sqrt(left.y - (up.z + fwd.x) + 1.0); - double y = s * 0.5; - s = 0.5 / s; - return new LSL_Rotation( - (fwd.y + left.x) * s, - y, - (left.z + up.y) * s, - (up.x - fwd.z) * s); - } - else - { - s = Math.Sqrt(up.z - (fwd.x + left.y) + 1.0); - double z = s * 0.5; - s = 0.5 / s; - return new LSL_Rotation( - (up.x + fwd.z) * s, - (left.z + up.y) * s, - z, - (fwd.y - left.x) * s); - } - } - } - - public LSL_Vector llRot2Fwd(LSL_Rotation r) - { - m_host.AddScriptLPS(1); - - double x, y, z, m; - - m = r.x * r.x + r.y * r.y + r.z * r.z + r.s * r.s; - // m is always greater than zero - // if m is not equal to 1 then Rotation needs to be normalized - if (Math.Abs(1.0 - m) > 0.000001) // allow a little slop here for calculation precision - { - m = 1.0 / Math.Sqrt(m); - r.x *= m; - r.y *= m; - r.z *= m; - r.s *= m; - } - - // Fast Algebric Calculations instead of Vectors & Quaternions Product - x = r.x * r.x - r.y * r.y - r.z * r.z + r.s * r.s; - y = 2 * (r.x * r.y + r.z * r.s); - z = 2 * (r.x * r.z - r.y * r.s); - return (new LSL_Vector(x, y, z)); - } - - public LSL_Vector llRot2Left(LSL_Rotation r) - { - m_host.AddScriptLPS(1); - - double x, y, z, m; - - m = r.x * r.x + r.y * r.y + r.z * r.z + r.s * r.s; - // m is always greater than zero - // if m is not equal to 1 then Rotation needs to be normalized - if (Math.Abs(1.0 - m) > 0.000001) // allow a little slop here for calculation precision - { - m = 1.0 / Math.Sqrt(m); - r.x *= m; - r.y *= m; - r.z *= m; - r.s *= m; - } - - // Fast Algebric Calculations instead of Vectors & Quaternions Product - x = 2 * (r.x * r.y - r.z * r.s); - y = -r.x * r.x + r.y * r.y - r.z * r.z + r.s * r.s; - z = 2 * (r.x * r.s + r.y * r.z); - return (new LSL_Vector(x, y, z)); - } - - public LSL_Vector llRot2Up(LSL_Rotation r) - { - m_host.AddScriptLPS(1); - double x, y, z, m; - - m = r.x * r.x + r.y * r.y + r.z * r.z + r.s * r.s; - // m is always greater than zero - // if m is not equal to 1 then Rotation needs to be normalized - if (Math.Abs(1.0 - m) > 0.000001) // allow a little slop here for calculation precision - { - m = 1.0 / Math.Sqrt(m); - r.x *= m; - r.y *= m; - r.z *= m; - r.s *= m; - } - - // Fast Algebric Calculations instead of Vectors & Quaternions Product - x = 2 * (r.x * r.z + r.y * r.s); - y = 2 * (-r.x * r.s + r.y * r.z); - z = -r.x * r.x - r.y * r.y + r.z * r.z + r.s * r.s; - return (new LSL_Vector(x, y, z)); - } - - public LSL_Rotation llRotBetween(LSL_Vector a, LSL_Vector b) - { - //A and B should both be normalized - m_host.AddScriptLPS(1); - LSL_Rotation rotBetween; - // Check for zero vectors. If either is zero, return zero rotation. Otherwise, - // continue calculation. - if (a == new LSL_Vector(0.0f, 0.0f, 0.0f) || b == new LSL_Vector(0.0f, 0.0f, 0.0f)) - { - rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f); - } - else - { - a = LSL_Vector.Norm(a); - b = LSL_Vector.Norm(b); - double dotProduct = LSL_Vector.Dot(a, b); - // There are two degenerate cases possible. These are for vectors 180 or - // 0 degrees apart. These have to be detected and handled individually. - // - // Check for vectors 180 degrees apart. - // A dot product of -1 would mean the angle between vectors is 180 degrees. - if (dotProduct < -0.9999999f) - { - // First assume X axis is orthogonal to the vectors. - LSL_Vector orthoVector = new LSL_Vector(1.0f, 0.0f, 0.0f); - orthoVector = orthoVector - a * (a.x / LSL_Vector.Dot(a, a)); - // Check for near zero vector. A very small non-zero number here will create - // a rotation in an undesired direction. - if (LSL_Vector.Mag(orthoVector) > 0.0001) - { - rotBetween = new LSL_Rotation(orthoVector.x, orthoVector.y, orthoVector.z, 0.0f); - } - // If the magnitude of the vector was near zero, then assume the X axis is not - // orthogonal and use the Z axis instead. - else - { - // Set 180 z rotation. - rotBetween = new LSL_Rotation(0.0f, 0.0f, 1.0f, 0.0f); - } - } - // Check for parallel vectors. - // A dot product of 1 would mean the angle between vectors is 0 degrees. - else if (dotProduct > 0.9999999f) - { - // Set zero rotation. - rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f); - } - else - { - // All special checks have been performed so get the axis of rotation. - LSL_Vector crossProduct = LSL_Vector.Cross(a, b); - // Quarternion s value is the length of the unit vector + dot product. - double qs = 1.0 + dotProduct; - rotBetween = new LSL_Rotation(crossProduct.x, crossProduct.y, crossProduct.z, qs); - // Normalize the rotation. - double mag = LSL_Rotation.Mag(rotBetween); - // We shouldn't have to worry about a divide by zero here. The qs value will be - // non-zero because we already know if we're here, then the dotProduct is not -1 so - // qs will not be zero. Also, we've already handled the input vectors being zero so the - // crossProduct vector should also not be zero. - rotBetween.x = rotBetween.x / mag; - rotBetween.y = rotBetween.y / mag; - rotBetween.z = rotBetween.z / mag; - rotBetween.s = rotBetween.s / mag; - // Check for undefined values and set zero rotation if any found. This code might not actually be required - // any longer since zero vectors are checked for at the top. - if (Double.IsNaN(rotBetween.x) || Double.IsNaN(rotBetween.y) || Double.IsNaN(rotBetween.z) || Double.IsNaN(rotBetween.s)) - { - rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f); - } - } - } - return rotBetween; - } - - public void llWhisper(int channelID, string text) - { - m_host.AddScriptLPS(1); - - if (text.Length > 1023) - text = text.Substring(0, 1023); - - World.SimChat(Utils.StringToBytes(text), - ChatTypeEnum.Whisper, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); - - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.DeliverMessage(ChatTypeEnum.Whisper, channelID, m_host.Name, m_host.UUID, text); - } - - public void llSay(int channelID, string text) - { - m_host.AddScriptLPS(1); - - if (m_scriptConsoleChannelEnabled && (channelID == m_scriptConsoleChannel)) - { - Console.WriteLine(text); - } - else - { - if (text.Length > 1023) - text = text.Substring(0, 1023); - - World.SimChat(Utils.StringToBytes(text), - ChatTypeEnum.Say, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); - - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.DeliverMessage(ChatTypeEnum.Say, channelID, m_host.Name, m_host.UUID, text); - } - } - - public void llShout(int channelID, string text) - { - m_host.AddScriptLPS(1); - - if (text.Length > 1023) - text = text.Substring(0, 1023); - - World.SimChat(Utils.StringToBytes(text), - ChatTypeEnum.Shout, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, true); - - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.DeliverMessage(ChatTypeEnum.Shout, channelID, m_host.Name, m_host.UUID, text); - } - - public void llRegionSay(int channelID, string text) - { - if (channelID == 0) - { - Error("llRegionSay", "Cannot use on channel 0"); - return; - } - - if (text.Length > 1023) - text = text.Substring(0, 1023); - - m_host.AddScriptLPS(1); - - World.SimChat(Utils.StringToBytes(text), - ChatTypeEnum.Region, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); - - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.DeliverMessage(ChatTypeEnum.Region, channelID, m_host.Name, m_host.UUID, text); - } - - public void llRegionSayTo(string target, int channel, string msg) - { - if (msg.Length > 1023) - msg = msg.Substring(0, 1023); - - m_host.AddScriptLPS(1); - - if (channel == ScriptBaseClass.DEBUG_CHANNEL) - { - return; - } - - UUID TargetID; - UUID.TryParse(target, out TargetID); - - World.SimChatToAgent(TargetID, Utils.StringToBytes(msg), - channel, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, true); - - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg); - } - - public LSL_Integer llListen(int channelID, string name, string ID, string msg) - { - m_host.AddScriptLPS(1); - UUID keyID; - UUID.TryParse(ID, out keyID); - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - return wComm.Listen(m_host.LocalId, m_item.ItemID, m_host.UUID, channelID, name, keyID, msg); - else - return -1; - } - - public void llListenControl(int number, int active) - { - m_host.AddScriptLPS(1); - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.ListenControl(m_item.ItemID, number, active); - } - - public void llListenRemove(int number) - { - m_host.AddScriptLPS(1); - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - wComm.ListenRemove(m_item.ItemID, number); - } - - public void llSensor(string name, string id, int type, double range, double arc) - { - m_host.AddScriptLPS(1); - UUID keyID = UUID.Zero; - UUID.TryParse(id, out keyID); - - AsyncCommands.SensorRepeatPlugin.SenseOnce(m_host.LocalId, m_item.ItemID, name, keyID, type, range, arc, m_host); - } - - public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) - { - m_host.AddScriptLPS(1); - UUID keyID = UUID.Zero; - UUID.TryParse(id, out keyID); - - AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_host.LocalId, m_item.ItemID, name, keyID, type, range, arc, rate, m_host); - } - - public void llSensorRemove() - { - m_host.AddScriptLPS(1); - AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_host.LocalId, m_item.ItemID); - } - - public string resolveName(UUID objecUUID) - { - // try avatar username surname - UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, objecUUID); - if (account != null) - { - string avatarname = account.Name; - return avatarname; - } - // try an scene object - SceneObjectPart SOP = World.GetSceneObjectPart(objecUUID); - if (SOP != null) - { - string objectname = SOP.Name; - return objectname; - } - - EntityBase SensedObject; - World.Entities.TryGetValue(objecUUID, out SensedObject); - - if (SensedObject == null) - { - IGroupsModule groups = World.RequestModuleInterface(); - if (groups != null) - { - GroupRecord gr = groups.GetGroupRecord(objecUUID); - if (gr != null) - return gr.GroupName; - } - return String.Empty; - } - - return SensedObject.Name; - } - - public LSL_String llDetectedName(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return String.Empty; - return detectedParams.Name; - } - - public LSL_String llDetectedKey(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return String.Empty; - return detectedParams.Key.ToString(); - } - - public LSL_String llDetectedOwner(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return String.Empty; - return detectedParams.Owner.ToString(); - } - - public LSL_Integer llDetectedType(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return 0; - return new LSL_Integer(detectedParams.Type); - } - - public LSL_Vector llDetectedPos(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return new LSL_Vector(); - return detectedParams.Position; - } - - public LSL_Vector llDetectedVel(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return new LSL_Vector(); - return detectedParams.Velocity; - } - - public LSL_Vector llDetectedGrab(int number) - { - m_host.AddScriptLPS(1); - DetectParams parms = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (parms == null) - return new LSL_Vector(0, 0, 0); - - return parms.OffsetPos; - } - - public LSL_Rotation llDetectedRot(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return new LSL_Rotation(); - return detectedParams.Rotation; - } - - public LSL_Integer llDetectedGroup(int number) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (detectedParams == null) - return new LSL_Integer(0); - if (m_host.GroupID == detectedParams.Group) - return new LSL_Integer(1); - return new LSL_Integer(0); - } - - public LSL_Integer llDetectedLinkNumber(int number) - { - m_host.AddScriptLPS(1); - DetectParams parms = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); - if (parms == null) - return new LSL_Integer(0); - - return new LSL_Integer(parms.LinkNum); - } - - /// - /// See http://wiki.secondlife.com/wiki/LlDetectedTouchBinormal for details - /// - public LSL_Vector llDetectedTouchBinormal(int index) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); - if (detectedParams == null) - return new LSL_Vector(); - return detectedParams.TouchBinormal; - } - - /// - /// See http://wiki.secondlife.com/wiki/LlDetectedTouchFace for details - /// - public LSL_Integer llDetectedTouchFace(int index) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); - if (detectedParams == null) - return new LSL_Integer(-1); - return new LSL_Integer(detectedParams.TouchFace); - } - - /// - /// See http://wiki.secondlife.com/wiki/LlDetectedTouchNormal for details - /// - public LSL_Vector llDetectedTouchNormal(int index) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); - if (detectedParams == null) - return new LSL_Vector(); - return detectedParams.TouchNormal; - } - - /// - /// See http://wiki.secondlife.com/wiki/LlDetectedTouchPos for details - /// - public LSL_Vector llDetectedTouchPos(int index) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); - if (detectedParams == null) - return new LSL_Vector(); - return detectedParams.TouchPos; - } - - /// - /// See http://wiki.secondlife.com/wiki/LlDetectedTouchST for details - /// - public LSL_Vector llDetectedTouchST(int index) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); - if (detectedParams == null) - return new LSL_Vector(-1.0, -1.0, 0.0); - return detectedParams.TouchST; - } - - /// - /// See http://wiki.secondlife.com/wiki/LlDetectedTouchUV for details - /// - public LSL_Vector llDetectedTouchUV(int index) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); - if (detectedParams == null) - return new LSL_Vector(-1.0, -1.0, 0.0); - return detectedParams.TouchUV; - } - - public virtual void llDie() - { - m_host.AddScriptLPS(1); - throw new SelfDeleteException(); - } - - public LSL_Float llGround(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - Vector3 pos = m_host.GetWorldPosition() + (Vector3)offset; - - //Get the slope normal. This gives us the equation of the plane tangent to the slope. - LSL_Vector vsn = llGroundNormal(offset); - - // Clamp to valid position - if (pos.X < 0) - pos.X = 0; - else if (pos.X >= World.Heightmap.Width) - pos.X = World.Heightmap.Width - 1; - if (pos.Y < 0) - pos.Y = 0; - else if (pos.Y >= World.Heightmap.Height) - pos.Y = World.Heightmap.Height - 1; - - //Get the height for the integer coordinates from the Heightmap - float baseheight = (float)World.Heightmap[(int)pos.X, (int)pos.Y]; - - //Calculate the difference between the actual coordinates and the integer coordinates - float xdiff = pos.X - (float)((int)pos.X); - float ydiff = pos.Y - (float)((int)pos.Y); - - //Use the equation of the tangent plane to adjust the height to account for slope - - return (((vsn.x * xdiff) + (vsn.y * ydiff)) / (-1 * vsn.z)) + baseheight; - } - - public LSL_Float llCloud(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - float cloudCover = 0f; - ICloudModule module = World.RequestModuleInterface(); - if (module != null) - { - Vector3 pos = m_host.GetWorldPosition(); - int x = (int)(pos.X + offset.x); - int y = (int)(pos.Y + offset.y); - - cloudCover = module.CloudCover(x, y, 0); - - } - return cloudCover; - } - - public LSL_Vector llWind(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - LSL_Vector wind = new LSL_Vector(0, 0, 0); - IWindModule module = World.RequestModuleInterface(); - if (module != null) - { - Vector3 pos = m_host.GetWorldPosition(); - int x = (int)(pos.X + offset.x); - int y = (int)(pos.Y + offset.y); - - Vector3 windSpeed = module.WindSpeed(x, y, 0); - - wind.x = windSpeed.X; - wind.y = windSpeed.Y; - } - return wind; - } - - public void llSetStatus(int status, int value) - { - m_host.AddScriptLPS(1); - - int statusrotationaxis = 0; - - if ((status & ScriptBaseClass.STATUS_PHYSICS) == ScriptBaseClass.STATUS_PHYSICS) - { - if (value != 0) - { - SceneObjectGroup group = m_host.ParentGroup; - bool allow = true; - - foreach (SceneObjectPart part in group.Parts) - { - if (part.Scale.X > World.m_maxPhys || part.Scale.Y > World.m_maxPhys || part.Scale.Z > World.m_maxPhys) - { - allow = false; - break; - } - } - - if (!allow) - return; - - m_host.ScriptSetPhysicsStatus(true); - } - else - { - m_host.ScriptSetPhysicsStatus(false); - } - } - - if ((status & ScriptBaseClass.STATUS_PHANTOM) == ScriptBaseClass.STATUS_PHANTOM) - { - m_host.ParentGroup.ScriptSetPhantomStatus(value != 0); - } - - if ((status & ScriptBaseClass.STATUS_CAST_SHADOWS) == ScriptBaseClass.STATUS_CAST_SHADOWS) - { - m_host.AddFlag(PrimFlags.CastShadows); - } - - if ((status & ScriptBaseClass.STATUS_ROTATE_X) == ScriptBaseClass.STATUS_ROTATE_X) - { - statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_X; - } - - if ((status & ScriptBaseClass.STATUS_ROTATE_Y) == ScriptBaseClass.STATUS_ROTATE_Y) - { - statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Y; - } - - if ((status & ScriptBaseClass.STATUS_ROTATE_Z) == ScriptBaseClass.STATUS_ROTATE_Z) - { - statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Z; - } - - if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB) - m_host.BlockGrab = value != 0; - - if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT) == ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT) - m_host.ParentGroup.BlockGrabOverride = value != 0; - - if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE) - { - if (value != 0) - m_host.SetDieAtEdge(true); - else - m_host.SetDieAtEdge(false); - } - - if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE) - { - if (value != 0) - m_host.SetReturnAtEdge(true); - else - m_host.SetReturnAtEdge(false); - } - - if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX) - { - if (value != 0) - m_host.SetStatusSandbox(true); - else - m_host.SetStatusSandbox(false); - } - - if (statusrotationaxis != 0) - { - m_host.SetAxisRotation(statusrotationaxis, value); - } - } - - private bool IsPhysical() - { - return ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == (uint)PrimFlags.Physics); - } - - public LSL_Integer llGetStatus(int status) - { - m_host.AddScriptLPS(1); - // m_log.Debug(m_host.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); - switch (status) - { - case ScriptBaseClass.STATUS_PHYSICS: - return IsPhysical() ? 1 : 0; - - case ScriptBaseClass.STATUS_PHANTOM: - if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) == (uint)PrimFlags.Phantom) - { - return 1; - } - return 0; - - case ScriptBaseClass.STATUS_CAST_SHADOWS: - if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.CastShadows) == (uint)PrimFlags.CastShadows) - { - return 1; - } - return 0; - - case ScriptBaseClass.STATUS_BLOCK_GRAB: - return m_host.BlockGrab ? 1 : 0; - - case ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT: - return m_host.ParentGroup.BlockGrabOverride ? 1 : 0; - - case ScriptBaseClass.STATUS_DIE_AT_EDGE: - if (m_host.GetDieAtEdge()) - return 1; - else - return 0; - - case ScriptBaseClass.STATUS_RETURN_AT_EDGE: - if (m_host.GetReturnAtEdge()) - return 1; - else - return 0; - - case ScriptBaseClass.STATUS_ROTATE_X: - // if (m_host.GetAxisRotation(2) != 0) - if (m_host.GetAxisRotation((int)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) != 0) - return 1; - else - return 0; - - case ScriptBaseClass.STATUS_ROTATE_Y: - if (m_host.GetAxisRotation((int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Y) != 0) - return 1; - else - return 0; - - case ScriptBaseClass.STATUS_ROTATE_Z: - if (m_host.GetAxisRotation((int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Z) != 0) - return 1; - else - return 0; - - case ScriptBaseClass.STATUS_SANDBOX: - if (m_host.GetStatusSandbox()) - return 1; - else - return 0; - } - return 0; - } - - public void llSetScale(LSL_Vector scale) - { - m_host.AddScriptLPS(1); - SetScale(m_host, scale); - } - - protected void SetScale(SceneObjectPart part, LSL_Vector scale) - { - // TODO: this needs to trigger a persistance save as well - if (part == null || part.ParentGroup.IsDeleted) - return; - - // First we need to check whether or not we need to clamp the size of a physics-enabled prim - PhysicsActor pa = part.ParentGroup.RootPart.PhysActor; - if (pa != null && pa.IsPhysical) - { - scale.x = Math.Max(World.m_minPhys, Math.Min(World.m_maxPhys, scale.x)); - scale.y = Math.Max(World.m_minPhys, Math.Min(World.m_maxPhys, scale.y)); - scale.z = Math.Max(World.m_minPhys, Math.Min(World.m_maxPhys, scale.z)); - } - else - { - // If not physical, then we clamp the scale to the non-physical min/max - scale.x = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, scale.x)); - scale.y = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, scale.y)); - scale.z = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, scale.z)); - } - - Vector3 tmp = part.Scale; - tmp.X = (float)scale.x; - tmp.Y = (float)scale.y; - tmp.Z = (float)scale.z; - part.Scale = tmp; - part.SendFullUpdateToAllClients(); - } - - public LSL_Vector llGetScale() - { - m_host.AddScriptLPS(1); - return new LSL_Vector(m_host.Scale.X, m_host.Scale.Y, m_host.Scale.Z); - } - - public void llSetClickAction(int action) - { - m_host.AddScriptLPS(1); - m_host.ClickAction = (byte)action; - m_host.ParentGroup.HasGroupChanged = true; - m_host.ScheduleFullUpdate(); - return; - } - - public void llSetColor(LSL_Vector color, int face) - { - m_host.AddScriptLPS(1); - - if (face == ScriptBaseClass.ALL_SIDES) - face = SceneObjectPart.ALL_SIDES; - - m_host.SetFaceColorAlpha(face, color, null); - } - - public void llSetContentType(LSL_Key id, LSL_Integer type) - { - m_host.AddScriptLPS(1); - - if (m_UrlModule == null) - return; - - // Make sure the content type is text/plain to start with - m_UrlModule.HttpContentType(new UUID(id), "text/plain"); - - // Is the object owner online and in the region - ScenePresence agent = World.GetScenePresence(m_host.ParentGroup.OwnerID); - if (agent == null || agent.IsChildAgent) - return; // Fail if the owner is not in the same region - - // Is it the embeded browser? - string userAgent = m_UrlModule.GetHttpHeader(new UUID(id), "user-agent"); - if (userAgent.IndexOf("SecondLife") < 0) - return; // Not the embedded browser. Is this check good enough? - - // Use the IP address of the client and check against the request - // seperate logins from the same IP will allow all of them to get non-text/plain as long - // as the owner is in the region. Same as SL! - string logonFromIPAddress = agent.ControllingClient.RemoteEndPoint.Address.ToString(); - string requestFromIPAddress = m_UrlModule.GetHttpHeader(new UUID(id), "remote_addr"); - //m_log.Debug("IP from header='" + requestFromIPAddress + "' IP from endpoint='" + logonFromIPAddress + "'"); - if (requestFromIPAddress == null || requestFromIPAddress.Trim() == "") - return; - if (logonFromIPAddress == null || logonFromIPAddress.Trim() == "") - return; - - // If the request isnt from the same IP address then the request cannot be from the owner - if (!requestFromIPAddress.Trim().Equals(logonFromIPAddress.Trim())) - return; - - switch (type) - { - case ScriptBaseClass.CONTENT_TYPE_HTML: - m_UrlModule.HttpContentType(new UUID(id), "text/html"); - break; - case ScriptBaseClass.CONTENT_TYPE_XML: - m_UrlModule.HttpContentType(new UUID(id), "application/xml"); - break; - case ScriptBaseClass.CONTENT_TYPE_XHTML: - m_UrlModule.HttpContentType(new UUID(id), "application/xhtml+xml"); - break; - case ScriptBaseClass.CONTENT_TYPE_ATOM: - m_UrlModule.HttpContentType(new UUID(id), "application/atom+xml"); - break; - case ScriptBaseClass.CONTENT_TYPE_JSON: - m_UrlModule.HttpContentType(new UUID(id), "application/json"); - break; - case ScriptBaseClass.CONTENT_TYPE_LLSD: - m_UrlModule.HttpContentType(new UUID(id), "application/llsd+xml"); - break; - case ScriptBaseClass.CONTENT_TYPE_FORM: - m_UrlModule.HttpContentType(new UUID(id), "application/x-www-form-urlencoded"); - break; - case ScriptBaseClass.CONTENT_TYPE_RSS: - m_UrlModule.HttpContentType(new UUID(id), "application/rss+xml"); - break; - default: - m_UrlModule.HttpContentType(new UUID(id), "text/plain"); - break; - } - } - - public void SetTexGen(SceneObjectPart part, int face,int style) - { - Primitive.TextureEntry tex = part.Shape.Textures; - MappingType textype; - textype = MappingType.Default; - if (style == (int)ScriptBaseClass.PRIM_TEXGEN_PLANAR) - textype = MappingType.Planar; - - if (face >= 0 && face < GetNumberOfSides(part)) - { - tex.CreateFace((uint) face); - tex.FaceTextures[face].TexMapType = textype; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - else if (face == ScriptBaseClass.ALL_SIDES) - { - for (uint i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].TexMapType = textype; - } - tex.DefaultTexture.TexMapType = textype; - } - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public void SetGlow(SceneObjectPart part, int face, float glow) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face >= 0 && face < GetNumberOfSides(part)) - { - tex.CreateFace((uint) face); - tex.FaceTextures[face].Glow = glow; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - else if (face == ScriptBaseClass.ALL_SIDES) - { - for (uint i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].Glow = glow; - } - tex.DefaultTexture.Glow = glow; - } - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public void SetShiny(SceneObjectPart part, int face, int shiny, Bumpiness bump) - { - - Shininess sval = new Shininess(); - - switch (shiny) - { - case 0: - sval = Shininess.None; - break; - case 1: - sval = Shininess.Low; - break; - case 2: - sval = Shininess.Medium; - break; - case 3: - sval = Shininess.High; - break; - default: - sval = Shininess.None; - break; - } - - Primitive.TextureEntry tex = part.Shape.Textures; - if (face >= 0 && face < GetNumberOfSides(part)) - { - tex.CreateFace((uint) face); - tex.FaceTextures[face].Shiny = sval; - tex.FaceTextures[face].Bump = bump; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - else if (face == ScriptBaseClass.ALL_SIDES) - { - for (uint i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].Shiny = sval; - tex.FaceTextures[i].Bump = bump; - } - tex.DefaultTexture.Shiny = sval; - tex.DefaultTexture.Bump = bump; - } - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public void SetFullBright(SceneObjectPart part, int face, bool bright) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face >= 0 && face < GetNumberOfSides(part)) - { - tex.CreateFace((uint) face); - tex.FaceTextures[face].Fullbright = bright; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - else if (face == ScriptBaseClass.ALL_SIDES) - { - for (uint i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].Fullbright = bright; - } - } - tex.DefaultTexture.Fullbright = bright; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public LSL_Float llGetAlpha(int face) - { - m_host.AddScriptLPS(1); - - return GetAlpha(m_host, face); - } - - protected LSL_Float GetAlpha(SceneObjectPart part, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - int i; - double sum = 0.0; - for (i = 0 ; i < GetNumberOfSides(part); i++) - sum += (double)tex.GetFace((uint)i).RGBA.A; - return sum; - } - if (face >= 0 && face < GetNumberOfSides(part)) - { - return (double)tex.GetFace((uint)face).RGBA.A; - } - return 0.0; - } - - public void llSetAlpha(double alpha, int face) - { - m_host.AddScriptLPS(1); - - SetAlpha(m_host, alpha, face); - } - - public void llSetLinkAlpha(int linknumber, double alpha, int face) - { - m_host.AddScriptLPS(1); - - List parts = GetLinkParts(linknumber); - - foreach (SceneObjectPart part in parts) - SetAlpha(part, alpha, face); - } - - protected void SetAlpha(SceneObjectPart part, double alpha, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - Color4 texcolor; - if (face >= 0 && face < GetNumberOfSides(part)) - { - texcolor = tex.CreateFace((uint)face).RGBA; - texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f); - tex.FaceTextures[face].RGBA = texcolor; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - else if (face == ScriptBaseClass.ALL_SIDES) - { - for (int i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - texcolor = tex.FaceTextures[i].RGBA; - texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f); - tex.FaceTextures[i].RGBA = texcolor; - } - } - - // In some cases, the default texture can be null, eg when every face - // has a unique texture - if (tex.DefaultTexture != null) - { - texcolor = tex.DefaultTexture.RGBA; - texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f); - tex.DefaultTexture.RGBA = texcolor; - } - - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - /// - /// Set flexi parameters of a part. - /// - /// FIXME: Much of this code should probably be within the part itself. - /// - /// - /// - /// - /// - /// - /// - /// - /// - protected void SetFlexi(SceneObjectPart part, bool flexi, int softness, float gravity, float friction, - float wind, float tension, LSL_Vector Force) - { - if (part == null) - return; - - if (flexi) - { - part.Shape.FlexiEntry = true; // this setting flexi true isn't working, but the below parameters do - // work once the prim is already flexi - part.Shape.FlexiSoftness = softness; - part.Shape.FlexiGravity = gravity; - part.Shape.FlexiDrag = friction; - part.Shape.FlexiWind = wind; - part.Shape.FlexiTension = tension; - part.Shape.FlexiForceX = (float)Force.x; - part.Shape.FlexiForceY = (float)Force.y; - part.Shape.FlexiForceZ = (float)Force.z; - part.Shape.PathCurve = (byte)Extrusion.Flexible; - } - else - { - // Other values not set, they do not seem to be sent to the viewer - // Setting PathCurve appears to be what actually toggles the check box and turns Flexi on and off - part.Shape.PathCurve = (byte)Extrusion.Straight; - part.Shape.FlexiEntry = false; - } - part.ParentGroup.HasGroupChanged = true; - part.ScheduleFullUpdate(); - } - - /// - /// Set a light point on a part - /// - /// FIXME: Much of this code should probably be in SceneObjectGroup - /// - /// - /// - /// - /// - /// - /// - protected void SetPointLight(SceneObjectPart part, bool light, LSL_Vector color, float intensity, float radius, float falloff) - { - if (part == null) - return; - - if (light) - { - part.Shape.LightEntry = true; - part.Shape.LightColorR = Util.Clip((float)color.x, 0.0f, 1.0f); - part.Shape.LightColorG = Util.Clip((float)color.y, 0.0f, 1.0f); - part.Shape.LightColorB = Util.Clip((float)color.z, 0.0f, 1.0f); - part.Shape.LightIntensity = Util.Clip((float)intensity, 0.0f, 1.0f); - part.Shape.LightRadius = Util.Clip((float)radius, 0.1f, 20.0f); - part.Shape.LightFalloff = Util.Clip((float)falloff, 0.01f, 2.0f); - } - else - { - part.Shape.LightEntry = false; - } - - part.ParentGroup.HasGroupChanged = true; - part.ScheduleFullUpdate(); - } - - public LSL_Vector llGetColor(int face) - { - m_host.AddScriptLPS(1); - return GetColor(m_host, face); - } - - protected LSL_Vector GetColor(SceneObjectPart part, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - Color4 texcolor; - LSL_Vector rgb = new LSL_Vector(); - if (face == ScriptBaseClass.ALL_SIDES) - { - int i; - - for (i = 0 ; i < GetNumberOfSides(part); i++) - { - texcolor = tex.GetFace((uint)i).RGBA; - rgb.x += texcolor.R; - rgb.y += texcolor.G; - rgb.z += texcolor.B; - } - - rgb.x /= (float)GetNumberOfSides(part); - rgb.y /= (float)GetNumberOfSides(part); - rgb.z /= (float)GetNumberOfSides(part); - - return rgb; - } - - if (face >= 0 && face < GetNumberOfSides(part)) - { - texcolor = tex.GetFace((uint)face).RGBA; - rgb.x = texcolor.R; - rgb.y = texcolor.G; - rgb.z = texcolor.B; - - return rgb; - } - else - { - return new LSL_Vector(); - } - } - - public void llSetTexture(string texture, int face) - { - m_host.AddScriptLPS(1); - SetTexture(m_host, texture, face); - ScriptSleep(m_sleepMsOnSetTexture); - } - - public void llSetLinkTexture(int linknumber, string texture, int face) - { - m_host.AddScriptLPS(1); - - List parts = GetLinkParts(linknumber); - - foreach (SceneObjectPart part in parts) - SetTexture(part, texture, face); - - ScriptSleep(m_sleepMsOnSetLinkTexture); - } - - protected void SetTexture(SceneObjectPart part, string texture, int face) - { - UUID textureID = new UUID(); - - textureID = ScriptUtils.GetAssetIdFromItemName(m_host, texture, (int)AssetType.Texture); - if (textureID == UUID.Zero) - { - if (!UUID.TryParse(texture, out textureID)) - return; - } - - Primitive.TextureEntry tex = part.Shape.Textures; - - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); - texface.TextureID = textureID; - tex.FaceTextures[face] = texface; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - else if (face == ScriptBaseClass.ALL_SIDES) - { - for (uint i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].TextureID = textureID; - } - } - tex.DefaultTexture.TextureID = textureID; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public void llScaleTexture(double u, double v, int face) - { - m_host.AddScriptLPS(1); - - ScaleTexture(m_host, u, v, face); - ScriptSleep(m_sleepMsOnScaleTexture); - } - - protected void ScaleTexture(SceneObjectPart part, double u, double v, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); - texface.RepeatU = (float)u; - texface.RepeatV = (float)v; - tex.FaceTextures[face] = texface; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - if (face == ScriptBaseClass.ALL_SIDES) - { - for (int i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].RepeatU = (float)u; - tex.FaceTextures[i].RepeatV = (float)v; - } - } - tex.DefaultTexture.RepeatU = (float)u; - tex.DefaultTexture.RepeatV = (float)v; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public void llOffsetTexture(double u, double v, int face) - { - m_host.AddScriptLPS(1); - OffsetTexture(m_host, u, v, face); - ScriptSleep(m_sleepMsOnOffsetTexture); - } - - protected void OffsetTexture(SceneObjectPart part, double u, double v, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); - texface.OffsetU = (float)u; - texface.OffsetV = (float)v; - tex.FaceTextures[face] = texface; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - if (face == ScriptBaseClass.ALL_SIDES) - { - for (int i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].OffsetU = (float)u; - tex.FaceTextures[i].OffsetV = (float)v; - } - } - tex.DefaultTexture.OffsetU = (float)u; - tex.DefaultTexture.OffsetV = (float)v; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public void llRotateTexture(double rotation, int face) - { - m_host.AddScriptLPS(1); - RotateTexture(m_host, rotation, face); - ScriptSleep(m_sleepMsOnRotateTexture); - } - - protected void RotateTexture(SceneObjectPart part, double rotation, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); - texface.Rotation = (float)rotation; - tex.FaceTextures[face] = texface; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - if (face == ScriptBaseClass.ALL_SIDES) - { - for (int i = 0; i < GetNumberOfSides(part); i++) - { - if (tex.FaceTextures[i] != null) - { - tex.FaceTextures[i].Rotation = (float)rotation; - } - } - tex.DefaultTexture.Rotation = (float)rotation; - part.UpdateTextureEntry(tex.GetBytes()); - return; - } - } - - public LSL_String llGetTexture(int face) - { - m_host.AddScriptLPS(1); - return GetTexture(m_host, face); - } - - protected LSL_String GetTexture(SceneObjectPart part, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - face = 0; - } - - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface; - texface = tex.GetFace((uint)face); - string texture = texface.TextureID.ToString(); - - lock (part.TaskInventory) - { - foreach (KeyValuePair inv in part.TaskInventory) - { - if (inv.Value.AssetID == texface.TextureID) - { - texture = inv.Value.Name.ToString(); - break; - } - } - } - - return texture; - } - else - { - return UUID.Zero.ToString(); - } - } - - public void llSetPos(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - - SetPos(m_host, pos, true); - - ScriptSleep(m_sleepMsOnSetPos); - } - - /// - /// Tries to move the entire object so that the root prim is within 0.1m of position. http://wiki.secondlife.com/wiki/LlSetRegionPos - /// Documentation indicates that the use of x/y coordinates up to 10 meters outside the bounds of a region will work but do not specify what happens if there is no adjacent region for the object to move into. - /// Uses the RegionSize constant here rather than hard-coding 266.0 to alert any developer modifying OpenSim to support variable-sized regions that this method will need tweaking. - /// - /// - /// 1 if successful, 0 otherwise. - public LSL_Integer llSetRegionPos(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - - // BEGIN WORKAROUND - // IF YOU GET REGION CROSSINGS WORKING WITH THIS FUNCTION, REPLACE THE WORKAROUND. - // - // This workaround is to prevent silent failure of this function. - // According to the specification on the SL Wiki, providing a position outside of the - if (pos.x < 0 || pos.x > World.RegionInfo.RegionSizeX || pos.y < 0 || pos.y > World.RegionInfo.RegionSizeY) - { - return 0; - } - // END WORK AROUND - else if ( // this is not part of the workaround if-block because it's not related to the workaround. - IsPhysical() || - m_host.ParentGroup.IsAttachment || // return FALSE if attachment - ( - pos.x < -10.0 || // return FALSE if more than 10 meters into a west-adjacent region. - pos.x > (World.RegionInfo.RegionSizeX + 10) || // return FALSE if more than 10 meters into a east-adjacent region. - pos.y < -10.0 || // return FALSE if more than 10 meters into a south-adjacent region. - pos.y > (World.RegionInfo.RegionSizeY + 10) || // return FALSE if more than 10 meters into a north-adjacent region. - pos.z > Constants.RegionHeight // return FALSE if altitude than 4096m - ) - ) - { - return 0; - } - - // if we reach this point, then the object is not physical, it's not an attachment, and the destination is within the valid range. - // this could possibly be done in the above else-if block, but we're doing the check here to keep the code easier to read. - - Vector3 objectPos = m_host.ParentGroup.RootPart.AbsolutePosition; - LandData here = World.GetLandData(objectPos); - LandData there = World.GetLandData(pos); - - // we're only checking prim limits if it's moving to a different parcel under the assumption that if the object got onto the parcel without exceeding the prim limits. - - bool sameParcel = here.GlobalID == there.GlobalID; - - if (!sameParcel && !World.Permissions.CanRezObject( - m_host.ParentGroup.PrimCount, m_host.ParentGroup.OwnerID, pos)) - { - return 0; - } - - SetPos(m_host.ParentGroup.RootPart, pos, false); - - return VecDist(pos, llGetRootPosition()) <= 0.1 ? 1 : 0; - } - - // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) - // note linked setpos is capped "differently" - private LSL_Vector SetPosAdjust(LSL_Vector start, LSL_Vector end) - { - if (llVecDist(start, end) > 10.0f * m_ScriptDistanceFactor) - return start + m_ScriptDistanceFactor * 10.0f * llVecNorm(end - start); - else - return end; - } - - protected LSL_Vector GetSetPosTarget(SceneObjectPart part, LSL_Vector targetPos, LSL_Vector fromPos) - { - if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) - return fromPos; - - // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) - - - float ground = World.GetGroundHeight((float)targetPos.x, (float)targetPos.y); - bool disable_underground_movement = m_ScriptEngine.Config.GetBoolean("DisableUndergroundMovement", true); - - if (part.ParentGroup.RootPart == part) - { - if ((targetPos.z < ground) && disable_underground_movement && m_host.ParentGroup.AttachmentPoint == 0) - targetPos.z = ground; - } - LSL_Vector real_vec = SetPosAdjust(fromPos, targetPos); - - return real_vec; - } - - /// - /// set object position, optionally capping the distance. - /// - /// - /// - /// if TRUE, will cap the distance to 10m. - protected void SetPos(SceneObjectPart part, LSL_Vector targetPos, bool adjust) - { - // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) - LSL_Vector currentPos = GetPartLocalPos(part); - - float ground = World.GetGroundHeight((float)targetPos.x, (float)targetPos.y); - bool disable_underground_movement = m_ScriptEngine.Config.GetBoolean("DisableUndergroundMovement", true); - - if (part.ParentGroup.RootPart == part) - { - if ((targetPos.z < ground) && disable_underground_movement && m_host.ParentGroup.AttachmentPoint == 0) - targetPos.z = ground; - SceneObjectGroup parent = part.ParentGroup; - parent.UpdateGroupPosition(!adjust ? targetPos : - SetPosAdjust(currentPos, targetPos)); - } - else - { - part.OffsetPosition = !adjust ? targetPos : - SetPosAdjust(currentPos, targetPos); - SceneObjectGroup parent = part.ParentGroup; - parent.HasGroupChanged = true; - parent.ScheduleGroupForTerseUpdate(); - } - } - - public LSL_Vector llGetPos() - { - m_host.AddScriptLPS(1); - return m_host.GetWorldPosition(); - } - - public LSL_Vector llGetLocalPos() - { - m_host.AddScriptLPS(1); - return GetPartLocalPos(m_host); - } - - protected LSL_Vector GetPartLocalPos(SceneObjectPart part) - { - m_host.AddScriptLPS(1); - - Vector3 pos; - - if (!part.IsRoot) - { - pos = part.OffsetPosition; - } - else - { - if (part.ParentGroup.IsAttachment) - { - pos = part.AttachedPos; - } - else - { - pos = part.AbsolutePosition; - } - } - -// m_log.DebugFormat("[LSL API]: Returning {0} in GetPartLocalPos()", pos); - - return new LSL_Vector(pos); - } - - public void llSetRot(LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - - // try to let this work as in SL... - if (m_host.ParentID == 0) - { - // special case: If we are root, rotate complete SOG to new rotation - SetRot(m_host, rot); - } - else - { - // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. - SceneObjectPart rootPart = m_host.ParentGroup.RootPart; - if (rootPart != null) // better safe than sorry - { - SetRot(m_host, rootPart.RotationOffset * (Quaternion)rot); - } - } - - ScriptSleep(m_sleepMsOnSetRot); - } - - public void llSetLocalRot(LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - SetRot(m_host, rot); - ScriptSleep(m_sleepMsOnSetLocalRot); - } - - protected void SetRot(SceneObjectPart part, Quaternion rot) - { - part.UpdateRotation(rot); - // Update rotation does not move the object in the physics scene if it's a linkset. - -//KF: Do NOT use this next line if using ODE physics engine. This need a switch based on .ini Phys Engine type -// part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition; - - // So, after thinking about this for a bit, the issue with the part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition line - // is it isn't compatible with vehicles because it causes the vehicle body to have to be broken down and rebuilt - // It's perfectly okay when the object is not an active physical body though. - // So, part.ParentGroup.ResetChildPrimPhysicsPositions(); does the thing that Kitto is warning against - // but only if the object is not physial and active. This is important for rotating doors. - // without the absoluteposition = absoluteposition happening, the doors do not move in the physics - // scene - PhysicsActor pa = part.PhysActor; - - if (pa != null && !pa.IsPhysical) - { - part.ParentGroup.ResetChildPrimPhysicsPositions(); - } - } - - /// - /// See http://lslwiki.net/lslwiki/wakka.php?wakka=ChildRotation - /// - public LSL_Rotation llGetRot() - { - // unlinked or root prim then use llRootRotation - // see llRootRotaion for references. - if (m_host.LinkNum == 0 || m_host.LinkNum == 1) - { - return llGetRootRotation(); - } - - m_host.AddScriptLPS(1); - Quaternion q = m_host.GetWorldRotation(); - return new LSL_Rotation(q.X, q.Y, q.Z, q.W); - } - - private LSL_Rotation GetPartRot(SceneObjectPart part) - { - Quaternion q; - if (part.LinkNum == 0 || part.LinkNum == 1) // unlinked or root prim - { - if (part.ParentGroup.AttachmentPoint != 0) - { - ScenePresence avatar = World.GetScenePresence(part.ParentGroup.AttachedAvatar); - if (avatar != null) - { - if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) - q = avatar.CameraRotation; // Mouselook - else - q = avatar.GetWorldRotation(); // Currently infrequently updated so may be inaccurate - } - else - q = part.ParentGroup.GroupRotation; // Likely never get here but just in case - } - else - q = part.ParentGroup.GroupRotation; // just the group rotation - - return new LSL_Rotation(q); - } - - return new LSL_Rotation(part.GetWorldRotation()); - } - - public LSL_Rotation llGetLocalRot() - { - m_host.AddScriptLPS(1); - - return new LSL_Rotation(m_host.RotationOffset); - } - - public void llSetForce(LSL_Vector force, int local) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - if (local != 0) - force *= llGetRot(); - - m_host.ParentGroup.RootPart.SetForce(force); - } - } - - public LSL_Vector llGetForce() - { - LSL_Vector force = new LSL_Vector(0.0, 0.0, 0.0); - - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - force = m_host.ParentGroup.RootPart.GetForce(); - } - - return force; - } - - public void llSetVelocity(LSL_Vector velocity, int local) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - if (local != 0) - velocity *= llGetRot(); - - m_host.ParentGroup.RootPart.Velocity = velocity; - } - } - - public void llSetAngularVelocity(LSL_Vector angularVelocity, int local) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - if (local != 0) - angularVelocity *= llGetRot(); - - m_host.ParentGroup.RootPart.AngularVelocity = angularVelocity; - } - } - - public LSL_Integer llTarget(LSL_Vector position, double range) - { - m_host.AddScriptLPS(1); - return m_host.ParentGroup.registerTargetWaypoint(position, - (float)range); - } - - public void llTargetRemove(int number) - { - m_host.AddScriptLPS(1); - m_host.ParentGroup.unregisterTargetWaypoint(number); - } - - public LSL_Integer llRotTarget(LSL_Rotation rot, double error) - { - m_host.AddScriptLPS(1); - return m_host.ParentGroup.registerRotTargetWaypoint(rot, (float)error); - } - - public void llRotTargetRemove(int number) - { - m_host.AddScriptLPS(1); - m_host.ParentGroup.unregisterRotTargetWaypoint(number); - } - - public void llMoveToTarget(LSL_Vector target, double tau) - { - m_host.AddScriptLPS(1); - m_host.MoveToTarget(target, (float)tau); - } - - public void llStopMoveToTarget() - { - m_host.AddScriptLPS(1); - m_host.StopMoveToTarget(); - } - - public void llApplyImpulse(LSL_Vector force, int local) - { - m_host.AddScriptLPS(1); - //No energy force yet - Vector3 v = force; - if (v.Length() > 20000.0f) - { - v.Normalize(); - v = v * 20000.0f; - } - m_host.ApplyImpulse(v, local != 0); - } - - public void llApplyRotationalImpulse(LSL_Vector force, int local) - { - m_host.AddScriptLPS(1); - m_host.ApplyAngularImpulse(force, local != 0); - } - - public void llSetTorque(LSL_Vector torque, int local) - { - m_host.AddScriptLPS(1); - m_host.SetAngularImpulse(torque, local != 0); - } - - public LSL_Vector llGetTorque() - { - m_host.AddScriptLPS(1); - - return new LSL_Vector(m_host.ParentGroup.GetTorque()); - } - - public void llSetForceAndTorque(LSL_Vector force, LSL_Vector torque, int local) - { - m_host.AddScriptLPS(1); - llSetForce(force, local); - llSetTorque(torque, local); - } - - public LSL_Vector llGetVel() - { - m_host.AddScriptLPS(1); - - Vector3 vel; - - if (m_host.ParentGroup.IsAttachment) - { - ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); - vel = avatar.GetWorldVelocity(); - } - else - { - vel = m_host.Velocity; - } - - return new LSL_Vector(vel); - } - - public LSL_Vector llGetAccel() - { - m_host.AddScriptLPS(1); - - return new LSL_Vector(m_host.Acceleration); - } - - public LSL_Vector llGetOmega() - { - m_host.AddScriptLPS(1); - - return new LSL_Vector(m_host.AngularVelocity); - } - - public LSL_Float llGetTimeOfDay() - { - m_host.AddScriptLPS(1); - return (double)((DateTime.Now.TimeOfDay.TotalMilliseconds / 1000) % (3600 * 4)); - } - - public LSL_Float llGetWallclock() - { - m_host.AddScriptLPS(1); - return DateTime.Now.TimeOfDay.TotalSeconds; - } - - public LSL_Float llGetTime() - { - m_host.AddScriptLPS(1); - TimeSpan ScriptTime = DateTime.Now - m_timer; - return (double)(ScriptTime.TotalMilliseconds / 1000); - } - - public void llResetTime() - { - m_host.AddScriptLPS(1); - m_timer = DateTime.Now; - } - - public LSL_Float llGetAndResetTime() - { - m_host.AddScriptLPS(1); - TimeSpan ScriptTime = DateTime.Now - m_timer; - m_timer = DateTime.Now; - return (double)(ScriptTime.TotalMilliseconds / 1000); - } - - public void llSound(string sound, double volume, int queue, int loop) - { - m_host.AddScriptLPS(1); - Deprecated("llSound", "Use llPlaySound instead"); - } - - // Xantor 20080528 PlaySound updated so it accepts an objectinventory name -or- a key to a sound - // 20080530 Updated to remove code duplication - public void llPlaySound(string sound, double volume) - { - m_host.AddScriptLPS(1); - - // send the sound, once, to all clients in range - if (m_SoundModule != null) - { - m_SoundModule.SendSound( - m_host.UUID, - ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), - volume, false, m_host.SoundQueueing ? (byte)SoundFlags.Queue : (byte)SoundFlags.None, - 0, false, false); - } - } - - public void llLoopSound(string sound, double volume) - { - m_host.AddScriptLPS(1); - if (m_SoundModule != null) - { - m_SoundModule.LoopSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), - volume, 20, false); - } - } - - public void llLoopSoundMaster(string sound, double volume) - { - m_host.AddScriptLPS(1); - if (m_SoundModule != null) - { - m_SoundModule.LoopSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), - volume, 20, true); - } - } - - public void llLoopSoundSlave(string sound, double volume) - { - m_host.AddScriptLPS(1); - lock (m_host.ParentGroup.LoopSoundSlavePrims) - { - m_host.ParentGroup.LoopSoundSlavePrims.Add(m_host); - } - } - - public void llPlaySoundSlave(string sound, double volume) - { - m_host.AddScriptLPS(1); - - // send the sound, once, to all clients in range - if (m_SoundModule != null) - { - m_SoundModule.SendSound(m_host.UUID, - ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, false, 0, - 0, true, false); - } - } - - public void llTriggerSound(string sound, double volume) - { - m_host.AddScriptLPS(1); - // send the sound, once, to all clients in rangeTrigger or play an attached sound in this part's inventory. - if (m_SoundModule != null) - { - m_SoundModule.SendSound(m_host.UUID, - ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, true, 0, 0, - false, false); - } - } - - public void llStopSound() - { - m_host.AddScriptLPS(1); - - if (m_SoundModule != null) - m_SoundModule.StopSound(m_host.UUID); - } - - public void llPreloadSound(string sound) - { - m_host.AddScriptLPS(1); - if (m_SoundModule != null) - m_SoundModule.PreloadSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), 0); - ScriptSleep(m_sleepMsOnPreloadSound); - } - - /// - /// Return a portion of the designated string bounded by - /// inclusive indices (start and end). As usual, the negative - /// indices, and the tolerance for out-of-bound values, makes - /// this more complicated than it might otherwise seem. - /// - public LSL_String llGetSubString(string src, int start, int end) - { - m_host.AddScriptLPS(1); - - // Normalize indices (if negative). - // After normlaization they may still be - // negative, but that is now relative to - // the start, rather than the end, of the - // sequence. - - if (start < 0) - { - start = src.Length+start; - } - if (end < 0) - { - end = src.Length+end; - } - - // Conventional substring - if (start <= end) - { - // Implies both bounds are out-of-range. - if (end < 0 || start >= src.Length) - { - return String.Empty; - } - // If end is positive, then it directly - // corresponds to the lengt of the substring - // needed (plus one of course). BUT, it - // must be within bounds. - if (end >= src.Length) - { - end = src.Length-1; - } - - if (start < 0) - { - return src.Substring(0,end+1); - } - // Both indices are positive - return src.Substring(start, (end+1) - start); - } - - // Inverted substring (end < start) - else - { - // Implies both indices are below the - // lower bound. In the inverted case, that - // means the entire string will be returned - // unchanged. - if (start < 0) - { - return src; - } - // If both indices are greater than the upper - // bound the result may seem initially counter - // intuitive. - if (end >= src.Length) - { - return src; - } - - if (end < 0) - { - if (start < src.Length) - { - return src.Substring(start); - } - else - { - return String.Empty; - } - } - else - { - if (start < src.Length) - { - return src.Substring(0,end+1) + src.Substring(start); - } - else - { - return src.Substring(0,end+1); - } - } - } - } - - /// - /// Delete substring removes the specified substring bounded - /// by the inclusive indices start and end. Indices may be - /// negative (indicating end-relative) and may be inverted, - /// i.e. end < start. - /// - public LSL_String llDeleteSubString(string src, int start, int end) - { - m_host.AddScriptLPS(1); - - // Normalize indices (if negative). - // After normlaization they may still be - // negative, but that is now relative to - // the start, rather than the end, of the - // sequence. - if (start < 0) - { - start = src.Length+start; - } - if (end < 0) - { - end = src.Length+end; - } - // Conventionally delimited substring - if (start <= end) - { - // If both bounds are outside of the existing - // string, then return unchanges. - if (end < 0 || start >= src.Length) - { - return src; - } - // At least one bound is in-range, so we - // need to clip the out-of-bound argument. - if (start < 0) - { - start = 0; - } - - if (end >= src.Length) - { - end = src.Length-1; - } - - return src.Remove(start,end-start+1); - } - // Inverted substring - else - { - // In this case, out of bounds means that - // the existing string is part of the cut. - if (start < 0 || end >= src.Length) - { - return String.Empty; - } - - if (end > 0) - { - if (start < src.Length) - { - return src.Remove(start).Remove(0,end+1); - } - else - { - return src.Remove(0,end+1); - } - } - else - { - if (start < src.Length) - { - return src.Remove(start); - } - else - { - return src; - } - } - } - } - - /// - /// Insert string inserts the specified string identified by src - /// at the index indicated by index. Index may be negative, in - /// which case it is end-relative. The index may exceed either - /// string bound, with the result being a concatenation. - /// - public LSL_String llInsertString(string dest, int index, string src) - { - m_host.AddScriptLPS(1); - - // Normalize indices (if negative). - // After normlaization they may still be - // negative, but that is now relative to - // the start, rather than the end, of the - // sequence. - if (index < 0) - { - index = dest.Length+index; - - // Negative now means it is less than the lower - // bound of the string. - - if (index < 0) - { - return src+dest; - } - - } - - if (index >= dest.Length) - { - return dest+src; - } - - // The index is in bounds. - // In this case the index refers to the index that will - // be assigned to the first character of the inserted string. - // So unlike the other string operations, we do not add one - // to get the correct string length. - return dest.Substring(0,index)+src+dest.Substring(index); - - } - - public LSL_String llToUpper(string src) - { - m_host.AddScriptLPS(1); - return src.ToUpper(); - } - - public LSL_String llToLower(string src) - { - m_host.AddScriptLPS(1); - return src.ToLower(); - } - - public void llGiveMoney(string destination, int amount) - { - Util.FireAndForget(x => - { - m_host.AddScriptLPS(1); - - if (m_item.PermsGranter == UUID.Zero) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) - { - Error("llGiveMoney", "No permissions to give money"); - return; - } - - UUID toID = new UUID(); - - if (!UUID.TryParse(destination, out toID)) - { - Error("llGiveMoney", "Bad key in llGiveMoney"); - return; - } - - IMoneyModule money = World.RequestModuleInterface(); - - if (money == null) - { - NotImplemented("llGiveMoney"); - return; - } - - money.ObjectGiveMoney( - m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); - }, null, "LSL_Api.llGiveMoney"); - } - - public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) - { - m_host.AddScriptLPS(1); - Deprecated("llMakeExplosion", "Use llParticleSystem instead"); - ScriptSleep(m_sleepMsOnMakeExplosion); - } - - public void llMakeFountain(int particles, double scale, double vel, double lifetime, double arc, int bounce, string texture, LSL_Vector offset, double bounce_offset) - { - m_host.AddScriptLPS(1); - Deprecated("llMakeFountain", "Use llParticleSystem instead"); - ScriptSleep(m_sleepMsOnMakeFountain); - } - - public void llMakeSmoke(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) - { - m_host.AddScriptLPS(1); - Deprecated("llMakeSmoke", "Use llParticleSystem instead"); - ScriptSleep(m_sleepMsOnMakeSmoke); - } - - public void llMakeFire(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) - { - m_host.AddScriptLPS(1); - Deprecated("llMakeFire", "Use llParticleSystem instead"); - ScriptSleep(m_sleepMsOnMakeFire); - } - - public void llRezAtRoot(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param) - { - m_host.AddScriptLPS(1); - - Util.FireAndForget(x => - { - if (Double.IsNaN(rot.x) || Double.IsNaN(rot.y) || Double.IsNaN(rot.z) || Double.IsNaN(rot.s)) - return; - - float dist = (float)llVecDist(llGetPos(), pos); - - if (dist > m_ScriptDistanceFactor * 10.0f) - return; - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(inventory); - - if (item == null) - { - Error("llRezAtRoot", "Can't find object '" + inventory + "'"); - return; - } - - if (item.InvType != (int)InventoryType.Object) - { - Error("llRezAtRoot", "Can't create requested object; object is missing from database"); - return; - } - - // need the magnitude later - // float velmag = (float)Util.GetMagnitude(llvel); - - List new_groups = World.RezObject(m_host, item, pos, rot, vel, param); - - // If either of these are null, then there was an unknown error. - if (new_groups == null) - return; - - foreach (SceneObjectGroup group in new_groups) - { - // objects rezzed with this method are die_at_edge by default. - group.RootPart.SetDieAtEdge(true); - - group.ResumeScripts(); - - m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams( - "object_rez", new Object[] { - new LSL_String( - group.RootPart.UUID.ToString()) }, - new DetectParams[0])); - - float groupmass = group.GetMass(); - - PhysicsActor pa = group.RootPart.PhysActor; - - //Recoil. - if (pa != null && pa.IsPhysical && (Vector3)vel != Vector3.Zero) - { - Vector3 recoil = -vel * groupmass * m_recoilScaleFactor; - if (recoil != Vector3.Zero) - { - llApplyImpulse(recoil, 0); - } - } - // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) - } - }, null, "LSL_Api.llRezAtRoot"); - - //ScriptSleep((int)((groupmass * velmag) / 10)); - ScriptSleep(m_sleepMsOnRezAtRoot); - } - - public void llRezObject(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param) - { - llRezAtRoot(inventory, pos, vel, rot, param); - } - - public void llLookAt(LSL_Vector target, double strength, double damping) - { - m_host.AddScriptLPS(1); - // Determine where we are looking from - LSL_Vector from = llGetPos(); - - // normalized direction to target - LSL_Vector dir = llVecNorm(target - from); - // use vertical to help compute left axis - LSL_Vector up = new LSL_Vector(0.0, 0.0, 1.0); - // find normalized left axis parallel to horizon - LSL_Vector left = llVecNorm(LSL_Vector.Cross(up, dir)); - // make up orthogonal to left and dir - up = LSL_Vector.Cross(dir, left); - - // compute rotation based on orthogonal axes - LSL_Rotation rot = new LSL_Rotation(0.0, 0.707107, 0.0, 0.707107) * llAxes2Rot(dir, left, up); - - // Per discussion with Melanie, for non-physical objects llLookAt appears to simply - // set the rotation of the object, copy that behavior - PhysicsActor pa = m_host.PhysActor; - - if (m_host.ParentGroup.IsAttachment || strength == 0 || pa == null || !pa.IsPhysical) - { - llSetRot(rot); - } - else - { - m_host.StartLookAt(rot, (float)strength, (float)damping); - } - } - - public void llStopLookAt() - { - m_host.AddScriptLPS(1); - m_host.StopLookAt(); - } - - public void llSetTimerEvent(double sec) - { - if (sec != 0.0 && sec < m_MinTimerInterval) - sec = m_MinTimerInterval; - m_host.AddScriptLPS(1); - // Setting timer repeat - AsyncCommands.TimerPlugin.SetTimerEvent(m_host.LocalId, m_item.ItemID, sec); - } - - public virtual void llSleep(double sec) - { -// m_log.Info("llSleep snoozing " + sec + "s."); - m_host.AddScriptLPS(1); - - Sleep((int)(sec * 1000)); - } - - public LSL_Float llGetMass() - { - m_host.AddScriptLPS(1); - - if (m_host.ParentGroup.IsAttachment) - { - ScenePresence attachedAvatar = World.GetScenePresence(m_host.ParentGroup.AttachedAvatar); - - if (attachedAvatar != null) - { - return attachedAvatar.GetMass(); - } - else - { - return 0; - } - } - else - { - if (m_host.IsRoot) - { - return m_host.ParentGroup.GetMass(); - } - else - { - return m_host.GetMass(); - } - } - } - - public LSL_Float llGetMassMKS() - { - // this is what the wiki says it does! - // http://wiki.secondlife.com/wiki/LlGetMassMKS - return llGetMass() * 100.0; - } - - public void llCollisionFilter(string name, string id, int accept) - { - m_host.AddScriptLPS(1); - m_host.CollisionFilter.Clear(); - UUID objectID; - - if (!UUID.TryParse(id, out objectID)) - objectID = UUID.Zero; - - if (objectID == UUID.Zero && name == "") - return; - - m_host.CollisionFilter.Add(accept,objectID.ToString() + name); - } - - public void llTakeControls(int controls, int accept, int pass_on) - { - if (m_item.PermsGranter != UUID.Zero) - { - ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); - - if (presence != null) - { - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) - { - presence.RegisterControlEventsToScript(controls, accept, pass_on, m_host.LocalId, m_item.ItemID); - } - } - } - - m_host.AddScriptLPS(1); - } - - public void llReleaseControls() - { - m_host.AddScriptLPS(1); - - if (m_item.PermsGranter != UUID.Zero) - { - ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); - - if (presence != null) - { - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) - { - // Unregister controls from Presence - presence.UnRegisterControlEventsToScript(m_host.LocalId, m_item.ItemID); - // Remove Take Control permission. - m_item.PermsMask &= ~ScriptBaseClass.PERMISSION_TAKE_CONTROLS; - } - } - } - } - - public void llReleaseURL(string url) - { - m_host.AddScriptLPS(1); - if (m_UrlModule != null) - m_UrlModule.ReleaseURL(url); - } - - /// - /// Attach the object containing this script to the avatar that owns it. - /// - /// - /// The attachment point (e.g. ATTACH_CHEST) - /// - /// true if the attach suceeded, false if it did not - public bool AttachToAvatar(int attachmentPoint) - { - SceneObjectGroup grp = m_host.ParentGroup; - ScenePresence presence = World.GetScenePresence(m_host.OwnerID); - - IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule; - - if (attachmentsModule != null) - return attachmentsModule.AttachObject(presence, grp, (uint)attachmentPoint, false, true, true); - else - return false; - } - - /// - /// Detach the object containing this script from the avatar it is attached to. - /// - /// - /// Nothing happens if the object is not attached. - /// - public void DetachFromAvatar() - { - Util.FireAndForget(DetachWrapper, m_host, "LSL_Api.DetachFromAvatar"); - } - - private void DetachWrapper(object o) - { - if (World.AttachmentsModule != null) - { - SceneObjectPart host = (SceneObjectPart)o; - ScenePresence presence = World.GetScenePresence(host.OwnerID); - World.AttachmentsModule.DetachSingleAttachmentToInv(presence, host.ParentGroup); - } - } - - public void llAttachToAvatar(int attachmentPoint) - { - m_host.AddScriptLPS(1); - -// if (m_host.ParentGroup.RootPart.AttachmentPoint == 0) -// return; - - if (m_item.PermsGranter != m_host.OwnerID) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0) - AttachToAvatar(attachmentPoint); - } - - public void llDetachFromAvatar() - { - m_host.AddScriptLPS(1); - - if (m_host.ParentGroup.AttachmentPoint == 0) - return; - - if (m_item.PermsGranter != m_host.OwnerID) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0) - DetachFromAvatar(); - } - - public void llTakeCamera(string avatar) - { - m_host.AddScriptLPS(1); - Deprecated("llTakeCamera", "Use llSetCameraParams instead"); - } - - public void llReleaseCamera(string avatar) - { - m_host.AddScriptLPS(1); - Deprecated("llReleaseCamera", "Use llClearCameraParams instead"); - } - - public LSL_String llGetOwner() - { - m_host.AddScriptLPS(1); - - return m_host.OwnerID.ToString(); - } - - public void llInstantMessage(string user, string message) - { - m_host.AddScriptLPS(1); - - // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. - // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, - // but I don't think we have a list of scenes available from here. - // (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.) - - // user is a UUID - - // TODO: figure out values for client, fromSession, and imSessionID - // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); - - GridInstantMessage msg = new GridInstantMessage(); - msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid; - msg.toAgentID = new Guid(user); // toAgentID.Guid; - msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here -// m_log.Debug("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); -// m_log.Debug("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); - msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp; - //if (client != null) - //{ - msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName; - //} - //else - //{ - // msg.fromAgentName = "(hippos)";// Added for posterity. This means that we can't figure out who sent it - //} - // Cap the message length at 1024. - if (message != null && message.Length > 1024) - msg.message = message.Substring(0, 1024); - else - msg.message = message; - msg.dialog = (byte)19; // messgage from script ??? // dialog; - msg.fromGroup = false;// fromGroup; - msg.offline = (byte)0; //offline; - msg.ParentEstateID = 0; //ParentEstateID; - msg.Position = new Vector3(m_host.AbsolutePosition); - msg.RegionID = World.RegionInfo.RegionID.Guid;//RegionID.Guid; - - Vector3 pos = m_host.AbsolutePosition; - msg.binaryBucket - = Util.StringToBytes256( - "{0}/{1}/{2}/{3}", - World.RegionInfo.RegionName, - (int)Math.Floor(pos.X), - (int)Math.Floor(pos.Y), - (int)Math.Floor(pos.Z)); - - if (m_TransferModule != null) - { - m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); - } - - ScriptSleep(m_sleepMsOnInstantMessage); - } - - public void llEmail(string address, string subject, string message) - { - m_host.AddScriptLPS(1); - IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface(); - if (emailModule == null) - { - Error("llEmail", "Email module not configured"); - return; - } - - //Restrict email destination to the avatars registered email address? - //The restriction only applies if the destination address is not local. - if (m_restrictEmail == true && address.Contains(m_internalObjectHost) == false) - { - UserAccount account = - World.UserAccountService.GetUserAccount( - World.RegionInfo.ScopeID, - m_host.OwnerID); - - if (account == null) - { - Error("llEmail", "Can't find user account for '" + m_host.OwnerID.ToString() + "'"); - return; - } - - if (String.IsNullOrEmpty(account.Email)) - { - Error("llEmail", "User account has not registered an email address."); - return; - } - - address = account.Email; - } - - emailModule.SendEmail(m_host.UUID, address, subject, message); - ScriptSleep(m_sleepMsOnEmail); - } - - public void llGetNextEmail(string address, string subject) - { - m_host.AddScriptLPS(1); - IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface(); - if (emailModule == null) - { - Error("llGetNextEmail", "Email module not configured"); - return; - } - Email email; - - email = emailModule.GetNextEmail(m_host.UUID, address, subject); - - if (email == null) - return; - - m_ScriptEngine.PostObjectEvent(m_host.LocalId, - new EventParams("email", - new Object[] { - new LSL_String(email.time), - new LSL_String(email.sender), - new LSL_String(email.subject), - new LSL_String(email.message), - new LSL_Integer(email.numLeft)}, - new DetectParams[0])); - - } - - public LSL_String llGetKey() - { - m_host.AddScriptLPS(1); - return m_host.UUID.ToString(); - } - - public LSL_Key llGenerateKey() - { - m_host.AddScriptLPS(1); - return UUID.Random().ToString(); - } - - public void llSetBuoyancy(double buoyancy) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); - } - } - - /// - /// Attempt to clamp the object on the Z axis at the given height over tau seconds. - /// - /// Height to hover. Height of zero disables hover. - /// False if height is calculated just from ground, otherwise uses ground or water depending on whichever is higher - /// Number of seconds over which to reach target - public void llSetHoverHeight(double height, int water, double tau) - { - m_host.AddScriptLPS(1); - - if (m_host.PhysActor != null) - { - PIDHoverType hoverType = PIDHoverType.Ground; - if (water != 0) - { - hoverType = PIDHoverType.GroundAndWater; - } - - m_host.SetHoverHeight((float)height, hoverType, (float)tau); - } - } - - public void llStopHover() - { - m_host.AddScriptLPS(1); - if (m_host.PhysActor != null) - { - m_host.SetHoverHeight(0f, PIDHoverType.Ground, 0f); - } - } - - public void llMinEventDelay(double delay) - { - m_host.AddScriptLPS(1); - try - { - m_ScriptEngine.SetMinEventDelay(m_item.ItemID, delay); - } - catch (NotImplementedException) - { - // Currently not implemented in DotNetEngine only XEngine - NotImplemented("llMinEventDelay", "In DotNetEngine"); - } - } - - public void llSoundPreload(string sound) - { - m_host.AddScriptLPS(1); - Deprecated("llSoundPreload", "Use llPreloadSound instead"); - } - - public void llRotLookAt(LSL_Rotation target, double strength, double damping) - { - m_host.AddScriptLPS(1); - - // Per discussion with Melanie, for non-physical objects llLookAt appears to simply - // set the rotation of the object, copy that behavior - PhysicsActor pa = m_host.PhysActor; - - if (strength == 0 || pa == null || !pa.IsPhysical) - { - llSetLocalRot(target); - } - else - { - m_host.RotLookAt(target, (float)strength, (float)damping); - } - } - - public LSL_Integer llStringLength(string str) - { - m_host.AddScriptLPS(1); - if (str.Length > 0) - { - return str.Length; - } - else - { - return 0; - } - } - - public void llStartAnimation(string anim) - { - m_host.AddScriptLPS(1); - - if (m_item.PermsGranter == UUID.Zero) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) - { - ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); - - if (presence != null) - { - // Do NOT try to parse UUID, animations cannot be triggered by ID - UUID animID = ScriptUtils.GetAssetIdFromItemName(m_host, anim, (int)AssetType.Animation); - if (animID == UUID.Zero) - presence.Animator.AddAnimation(anim, m_host.UUID); - else - presence.Animator.AddAnimation(animID, m_host.UUID); - } - } - } - - public void llStopAnimation(string anim) - { - m_host.AddScriptLPS(1); - - if (m_item.PermsGranter == UUID.Zero) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) - { - ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); - - if (presence != null) - { - UUID animID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, anim); - - if (animID == UUID.Zero) - presence.Animator.RemoveAnimation(anim); - else - presence.Animator.RemoveAnimation(animID, true); - } - } - } - - public void llPointAt(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - } - - public void llStopPointAt() - { - m_host.AddScriptLPS(1); - } - - public void llTargetOmega(LSL_Vector axis, double spinrate, double gain) - { - m_host.AddScriptLPS(1); - TargetOmega(m_host, axis, spinrate, gain); - } - - protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain) - { - PhysicsActor pa = part.PhysActor; - if ( ( pa == null || !pa.IsPhysical ) && gain == 0.0d ) - spinrate = 0.0d; - part.UpdateAngularVelocity(axis * spinrate); - } - - public LSL_Integer llGetStartParameter() - { - m_host.AddScriptLPS(1); - return m_ScriptEngine.GetStartParameter(m_item.ItemID); - } - - public void llRequestPermissions(string agent, int perm) - { - UUID agentID; - - if (!UUID.TryParse(agent, out agentID)) - return; - - if (agentID == UUID.Zero || perm == 0) // Releasing permissions - { - llReleaseControls(); - - m_item.PermsGranter = UUID.Zero; - m_item.PermsMask = 0; - - m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( - "run_time_permissions", new Object[] { - new LSL_Integer(0) }, - new DetectParams[0])); - - return; - } - - if (m_item.PermsGranter != agentID || (perm & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0) - llReleaseControls(); - - m_host.AddScriptLPS(1); - - int implicitPerms = 0; - - if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar) - { - // When attached, certain permissions are implicit if requested from owner - implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS | - ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | - ScriptBaseClass.PERMISSION_CONTROL_CAMERA | - ScriptBaseClass.PERMISSION_TRACK_CAMERA | - ScriptBaseClass.PERMISSION_ATTACH; - } - else - { - if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(sp => sp.UUID == agentID) != null) - { - // When agent is sitting, certain permissions are implicit if requested from sitting agent - implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | - ScriptBaseClass.PERMISSION_CONTROL_CAMERA | - ScriptBaseClass.PERMISSION_TRACK_CAMERA | - ScriptBaseClass.PERMISSION_TAKE_CONTROLS; - } - else - { - if (World.GetExtraSetting("auto_grant_attach_perms") == "true") - implicitPerms = ScriptBaseClass.PERMISSION_ATTACH; - } - } - - if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms - { - lock (m_host.TaskInventory) - { - m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; - m_host.TaskInventory[m_item.ItemID].PermsMask = perm; - } - - m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( - "run_time_permissions", new Object[] { - new LSL_Integer(perm) }, - new DetectParams[0])); - - return; - } - - ScenePresence presence = World.GetScenePresence(agentID); - - if (presence != null) - { - // If permissions are being requested from an NPC and were not implicitly granted above then - // auto grant all requested permissions if the script is owned by the NPC or the NPCs owner - INPCModule npcModule = World.RequestModuleInterface(); - if (npcModule != null && npcModule.IsNPC(agentID, World)) - { - if (npcModule.CheckPermissions(agentID, m_host.OwnerID)) - { - lock (m_host.TaskInventory) - { - m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; - m_host.TaskInventory[m_item.ItemID].PermsMask = perm; - } - - m_ScriptEngine.PostScriptEvent( - m_item.ItemID, - new EventParams( - "run_time_permissions", new Object[] { new LSL_Integer(perm) }, new DetectParams[0])); - } - - // it is an NPC, exit even if the permissions werent granted above, they are not going to answer - // the question! - return; - } - - string ownerName = resolveName(m_host.ParentGroup.RootPart.OwnerID); - if (ownerName == String.Empty) - ownerName = "(hippos)"; - - if (!m_waitingForScriptAnswer) - { - lock (m_host.TaskInventory) - { - m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; - m_host.TaskInventory[m_item.ItemID].PermsMask = 0; - } - - presence.ControllingClient.OnScriptAnswer += handleScriptAnswer; - m_waitingForScriptAnswer=true; - } - - presence.ControllingClient.SendScriptQuestion( - m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, m_item.ItemID, perm); - - return; - } - - // Requested agent is not in range, refuse perms - m_ScriptEngine.PostScriptEvent( - m_item.ItemID, - new EventParams("run_time_permissions", new Object[] { new LSL_Integer(0) }, new DetectParams[0])); - } - - void handleScriptAnswer(IClientAPI client, UUID taskID, UUID itemID, int answer) - { - if (taskID != m_host.UUID) - return; - - client.OnScriptAnswer -= handleScriptAnswer; - m_waitingForScriptAnswer = false; - - if ((answer & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0) - llReleaseControls(); - - lock (m_host.TaskInventory) - { - m_host.TaskInventory[m_item.ItemID].PermsMask = answer; - } - - m_ScriptEngine.PostScriptEvent( - m_item.ItemID, - new EventParams("run_time_permissions", new Object[] { new LSL_Integer(answer) }, new DetectParams[0])); - } - - public LSL_String llGetPermissionsKey() - { - m_host.AddScriptLPS(1); - - return m_item.PermsGranter.ToString(); - } - - public LSL_Integer llGetPermissions() - { - m_host.AddScriptLPS(1); - - int perms = m_item.PermsMask; - - if (m_automaticLinkPermission) - perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; - - return perms; - } - - public LSL_Integer llGetLinkNumber() - { - m_host.AddScriptLPS(1); - - if (m_host.ParentGroup.PrimCount > 1) - { - return m_host.LinkNum; - } - else - { - return 0; - } - } - - public void llSetLinkColor(int linknumber, LSL_Vector color, int face) - { - List parts = GetLinkParts(linknumber); - - foreach (SceneObjectPart part in parts) - part.SetFaceColorAlpha(face, color, null); - } - - public void llCreateLink(string target, int parent) - { - m_host.AddScriptLPS(1); - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 - && !m_automaticLinkPermission) - { - Error("llCreateLink", "PERMISSION_CHANGE_LINKS permission not set"); - return; - } - - CreateLink(target, parent); - } - - public void CreateLink(string target, int parent) - { - UUID targetID; - - if (!UUID.TryParse(target, out targetID)) - return; - - SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)targetID); - - if (targetPart.ParentGroup.AttachmentPoint != 0) - return; // Fail silently if attached - - if (targetPart.ParentGroup.RootPart.OwnerID != m_host.ParentGroup.RootPart.OwnerID) - return; - - SceneObjectGroup parentPrim = null, childPrim = null; - - if (targetPart != null) - { - if (parent != 0) - { - parentPrim = m_host.ParentGroup; - childPrim = targetPart.ParentGroup; - } - else - { - parentPrim = targetPart.ParentGroup; - childPrim = m_host.ParentGroup; - } - - // Required for linking - childPrim.RootPart.ClearUpdateSchedule(); - parentPrim.LinkToGroup(childPrim, true); - } - - parentPrim.TriggerScriptChangedEvent(Changed.LINK); - parentPrim.RootPart.CreateSelected = true; - parentPrim.HasGroupChanged = true; - parentPrim.ScheduleGroupForFullUpdate(); - - IClientAPI client = null; - ScenePresence sp = World.GetScenePresence(m_host.OwnerID); - if (sp != null) - client = sp.ControllingClient; - - if (client != null) - parentPrim.SendPropertiesToClient(client); - - ScriptSleep(m_sleepMsOnCreateLink); - } - - public void llBreakLink(int linknum) - { - m_host.AddScriptLPS(1); - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 - && !m_automaticLinkPermission) - { - Error("llBreakLink", "PERMISSION_CHANGE_LINKS permission not set"); - return; - } - - BreakLink(linknum); - } - - public void BreakLink(int linknum) - { - if (linknum < ScriptBaseClass.LINK_THIS) - return; - - SceneObjectGroup parentPrim = m_host.ParentGroup; - - if (parentPrim.AttachmentPoint != 0) - return; // Fail silently if attached - SceneObjectPart childPrim = null; - - switch (linknum) - { - case ScriptBaseClass.LINK_ROOT: - break; - case ScriptBaseClass.LINK_SET: - case ScriptBaseClass.LINK_ALL_OTHERS: - case ScriptBaseClass.LINK_ALL_CHILDREN: - case ScriptBaseClass.LINK_THIS: - foreach (SceneObjectPart part in parentPrim.Parts) - { - if (part.UUID != m_host.UUID) - { - childPrim = part; - break; - } - } - break; - default: - childPrim = parentPrim.GetLinkNumPart(linknum); - if (childPrim.UUID == m_host.UUID) - childPrim = null; - break; - } - - if (linknum == ScriptBaseClass.LINK_ROOT) - { - // Restructuring Multiple Prims. - List parts = new List(parentPrim.Parts); - parts.Remove(parentPrim.RootPart); - foreach (SceneObjectPart part in parts) - { - parentPrim.DelinkFromGroup(part.LocalId, true); - } - parentPrim.HasGroupChanged = true; - parentPrim.ScheduleGroupForFullUpdate(); - parentPrim.TriggerScriptChangedEvent(Changed.LINK); - - if (parts.Count > 0) - { - SceneObjectPart newRoot = parts[0]; - parts.Remove(newRoot); - foreach (SceneObjectPart part in parts) - { - // Required for linking - part.ClearUpdateSchedule(); - newRoot.ParentGroup.LinkToGroup(part.ParentGroup); - } - newRoot.ParentGroup.HasGroupChanged = true; - newRoot.ParentGroup.ScheduleGroupForFullUpdate(); - } - } - else - { - if (childPrim == null) - return; - - parentPrim.DelinkFromGroup(childPrim.LocalId, true); - parentPrim.HasGroupChanged = true; - parentPrim.ScheduleGroupForFullUpdate(); - parentPrim.TriggerScriptChangedEvent(Changed.LINK); - } - } - - public void llBreakAllLinks() - { - m_host.AddScriptLPS(1); - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 - && !m_automaticLinkPermission) - { - Error("llBreakAllLinks", "PERMISSION_CHANGE_LINKS permission not set"); - return; - } - - BreakAllLinks(); - } - - public void BreakAllLinks() - { - SceneObjectGroup parentPrim = m_host.ParentGroup; - if (parentPrim.AttachmentPoint != 0) - return; // Fail silently if attached - - List parts = new List(parentPrim.Parts); - parts.Remove(parentPrim.RootPart); - - foreach (SceneObjectPart part in parts) - { - parentPrim.DelinkFromGroup(part.LocalId, true); - parentPrim.TriggerScriptChangedEvent(Changed.LINK); - } - parentPrim.HasGroupChanged = true; - parentPrim.ScheduleGroupForFullUpdate(); - } - - public LSL_String llGetLinkKey(int linknum) - { - m_host.AddScriptLPS(1); - - ISceneEntity entity = GetLinkEntity(m_host, linknum); - - if (entity != null) - return entity.UUID.ToString(); - else - return ScriptBaseClass.NULL_KEY; - } - - /// - /// Returns the name of the child prim or seated avatar matching the - /// specified link number. - /// - /// - /// The number of a link in the linkset or a link-related constant. - /// - /// - /// The name determined to match the specified link number. - /// - /// - /// The rules governing the returned name are not simple. The only - /// time a blank name is returned is if the target prim has a blank - /// name. If no prim with the given link number can be found then - /// usually NULL_KEY is returned but there are exceptions. - /// - /// In a single unlinked prim, A call with 0 returns the name, all - /// other values for link number return NULL_KEY - /// - /// In link sets it is more complicated. - /// - /// If the script is in the root prim:- - /// A zero link number returns NULL_KEY. - /// Positive link numbers return the name of the prim, or NULL_KEY - /// if a prim does not exist at that position. - /// Negative link numbers return the name of the first child prim. - /// - /// If the script is in a child prim:- - /// Link numbers 0 or 1 return the name of the root prim. - /// Positive link numbers return the name of the prim or NULL_KEY - /// if a prim does not exist at that position. - /// Negative numbers return the name of the root prim. - /// - /// References - /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetLinkName - /// Mentions NULL_KEY being returned - /// http://wiki.secondlife.com/wiki/LlGetLinkName - /// Mentions using the LINK_* constants, some of which are negative - /// - public LSL_String llGetLinkName(int linknum) - { - m_host.AddScriptLPS(1); - - ISceneEntity entity = GetLinkEntity(m_host, linknum); - - if (entity != null) - return entity.Name; - else - return ScriptBaseClass.NULL_KEY; - } - - public LSL_Integer llGetInventoryNumber(int type) - { - m_host.AddScriptLPS(1); - int count = 0; - - lock (m_host.TaskInventory) - { - foreach (KeyValuePair inv in m_host.TaskInventory) - { - if (inv.Value.Type == type || type == -1) - { - count = count + 1; - } - } - } - - return count; - } - - public LSL_String llGetInventoryName(int type, int number) - { - m_host.AddScriptLPS(1); - ArrayList keys = new ArrayList(); - - lock (m_host.TaskInventory) - { - foreach (KeyValuePair inv in m_host.TaskInventory) - { - if (inv.Value.Type == type || type == -1) - { - keys.Add(inv.Value.Name); - } - } - } - - if (keys.Count == 0) - { - return String.Empty; - } - keys.Sort(); - if (keys.Count > number) - { - return (string)keys[number]; - } - return String.Empty; - } - - public LSL_Float llGetEnergy() - { - m_host.AddScriptLPS(1); - // TODO: figure out real energy value - return 1.0f; - } - - public void llGiveInventory(string destination, string inventory) - { - m_host.AddScriptLPS(1); - - UUID destId = UUID.Zero; - - if (!UUID.TryParse(destination, out destId)) - { - Error("llGiveInventory", "Can't parse destination key '" + destination + "'"); - return; - } - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(inventory); - - if (item == null) - { - Error("llGiveInventory", "Can't find inventory object '" + inventory + "'"); - return; - } - - UUID objId = item.ItemID; - - // check if destination is an object - if (World.GetSceneObjectPart(destId) != null) - { - // destination is an object - World.MoveTaskInventoryItem(destId, m_host, objId); - } - else - { - ScenePresence presence = World.GetScenePresence(destId); - - if (presence == null) - { - UserAccount account = - World.UserAccountService.GetUserAccount( - World.RegionInfo.ScopeID, - destId); - - if (account == null) - { - GridUserInfo info = World.GridUserService.GetGridUserInfo(destId.ToString()); - if(info == null || info.Online == false) - { - Error("llGiveInventory", "Can't find destination '" + destId.ToString() + "'"); - return; - } - } - } - // destination is an avatar - string message; - InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId, out message); - - if (agentItem == null) - { - llSay(0, message); - return; - } - - if (m_TransferModule != null) - { - byte[] bucket = new byte[1]; - bucket[0] = (byte)item.Type; - - GridInstantMessage msg = new GridInstantMessage(World, - m_host.OwnerID, m_host.Name, destId, - (byte)InstantMessageDialog.TaskInventoryOffered, - false, item.Name+". "+m_host.Name+" is located at "+ - World.RegionInfo.RegionName+" "+ - m_host.AbsolutePosition.ToString(), - agentItem.ID, true, m_host.AbsolutePosition, - bucket, true); - - m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); - } - - ScriptSleep(m_sleepMsOnGiveInventory); - } - } - - public void llRemoveInventory(string name) - { - m_host.AddScriptLPS(1); - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - if (item == null) - return; - - if (item.ItemID == m_item.ItemID) - throw new ScriptDeleteException(); - else - m_host.Inventory.RemoveInventoryItem(item.ItemID); - } - - public void llSetText(string text, LSL_Vector color, double alpha) - { - m_host.AddScriptLPS(1); - Vector3 av3 = Util.Clip(color, 0.0f, 1.0f); - if (text.Length > 254) - text = text.Remove(254); - - byte[] data; - do - { - data = Util.UTF8.GetBytes(text); - if (data.Length > 254) - text = text.Substring(0, text.Length - 1); - } while (data.Length > 254); - - m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); - //m_host.ParentGroup.HasGroupChanged = true; - //m_host.ParentGroup.ScheduleGroupForFullUpdate(); - } - - public LSL_Float llWater(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - return World.RegionInfo.RegionSettings.WaterHeight; - } - - public void llPassTouches(int pass) - { - m_host.AddScriptLPS(1); - if (pass != 0) - m_host.PassTouches = true; - else - m_host.PassTouches = false; - } - - public LSL_String llRequestAgentData(string id, int data) - { - m_host.AddScriptLPS(1); - - UUID uuid = (UUID)id; - PresenceInfo pinfo = null; - UserAccount account; - - UserInfoCacheEntry ce; - - lock (m_userInfoCache) - { - if (!m_userInfoCache.TryGetValue(uuid, out ce)) - { - account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); - if (account == null) - { - m_userInfoCache[uuid] = null; // Cache negative - return UUID.Zero.ToString(); - } - - PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); - if (pinfos != null && pinfos.Length > 0) - { - foreach (PresenceInfo p in pinfos) - { - if (p.RegionID != UUID.Zero) - { - pinfo = p; - } - } - } - - ce = new UserInfoCacheEntry(); - ce.time = Util.EnvironmentTickCount(); - ce.account = account; - ce.pinfo = pinfo; - - m_userInfoCache[uuid] = ce; - } - else - { - if (ce == null) - return UUID.Zero.ToString(); - - account = ce.account; - - if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) - >= LlRequestAgentDataCacheTimeoutMs) - { - PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); - if (pinfos != null && pinfos.Length > 0) - { - foreach (PresenceInfo p in pinfos) - { - if (p.RegionID != UUID.Zero) - { - pinfo = p; - } - } - } - else - { - pinfo = null; - } - - ce.time = Util.EnvironmentTickCount(); - ce.pinfo = pinfo; - } - else - { - pinfo = ce.pinfo; - } - } - } - - string reply = String.Empty; - - switch (data) - { - case ScriptBaseClass.DATA_ONLINE: - if (pinfo != null && pinfo.RegionID != UUID.Zero) - reply = "1"; - else - reply = "0"; - break; - case ScriptBaseClass.DATA_NAME: // (First Last) - reply = account.FirstName + " " + account.LastName; - break; - case ScriptBaseClass.DATA_BORN: // (YYYY-MM-DD) - DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); - born = born.AddSeconds(account.Created); - reply = born.ToString("yyyy-MM-dd"); - break; - case ScriptBaseClass.DATA_RATING: // (0,0,0,0,0,0) - reply = "0,0,0,0,0,0"; - break; - case 7: // DATA_USERLEVEL (integer). This is not available in LL and so has no constant. - reply = account.UserLevel.ToString(); - break; - case ScriptBaseClass.DATA_PAYINFO: // (0|1|2|3) - reply = "0"; - break; - default: - return UUID.Zero.ToString(); // Raise no event - } - - UUID rq = UUID.Random(); - - UUID tid = AsyncCommands. - DataserverPlugin.RegisterRequest(m_host.LocalId, - m_item.ItemID, rq.ToString()); - - AsyncCommands. - DataserverPlugin.DataserverReply(rq.ToString(), reply); - - ScriptSleep(m_sleepMsOnRequestAgentData); - return tid.ToString(); - } - - public LSL_String llRequestInventoryData(string name) - { - m_host.AddScriptLPS(1); - - foreach (TaskInventoryItem item in m_host.Inventory.GetInventoryItems()) - { - if (item.Type == 3 && item.Name == name) - { - UUID tid = AsyncCommands. - DataserverPlugin.RegisterRequest(m_host.LocalId, - m_item.ItemID, item.AssetID.ToString()); - - Vector3 region = new Vector3(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); - - World.AssetService.Get(item.AssetID.ToString(), this, - delegate(string i, object sender, AssetBase a) - { - AssetLandmark lm = new AssetLandmark(a); - - float rx = (uint)(lm.RegionHandle >> 32); - float ry = (uint)lm.RegionHandle; - region = lm.Position + new Vector3(rx, ry, 0) - region; - - string reply = region.ToString(); - AsyncCommands. - DataserverPlugin.DataserverReply(i.ToString(), - reply); - }); - - ScriptSleep(m_sleepMsOnRequestInventoryData); - return tid.ToString(); - } - } - - ScriptSleep(m_sleepMsOnRequestInventoryData); - return String.Empty; - } - - public void llSetDamage(double damage) - { - m_host.AddScriptLPS(1); - m_host.ParentGroup.Damage = (float)damage; - } - - public void llTeleportAgentHome(string agent) - { - m_host.AddScriptLPS(1); - UUID agentId = new UUID(); - if (UUID.TryParse(agent, out agentId)) - { - ScenePresence presence = World.GetScenePresence(agentId); - if (presence != null) - { - // agent must be over the owners land - if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) - { - World.TeleportClientHome(agentId, presence.ControllingClient); - } - } - } - - ScriptSleep(m_sleepMsOnSetDamage); - } - - public void llTeleportAgent(string agent, string destination, LSL_Vector targetPos, LSL_Vector targetLookAt) - { - m_host.AddScriptLPS(1); - UUID agentId = new UUID(); - - if (UUID.TryParse(agent, out agentId)) - { - ScenePresence presence = World.GetScenePresence(agentId); - if (presence != null && presence.PresenceType != PresenceType.Npc) - { - // agent must not be a god - if (presence.GodLevel >= 200) return; - - if (destination == String.Empty) - destination = World.RegionInfo.RegionName; - - // agent must be over the owners land - if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) - { - DoLLTeleport(presence, destination, targetPos, targetLookAt); - } - else // or must be wearing the prim - { - if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID) - { - DoLLTeleport(presence, destination, targetPos, targetLookAt); - } - } - } - } - } - - public void llTeleportAgentGlobalCoords(string agent, LSL_Vector global_coords, LSL_Vector targetPos, LSL_Vector targetLookAt) - { - m_host.AddScriptLPS(1); - UUID agentId = new UUID(); - - ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y); - - if (UUID.TryParse(agent, out agentId)) - { - ScenePresence presence = World.GetScenePresence(agentId); - if (presence != null && presence.PresenceType != PresenceType.Npc) - { - // agent must not be a god - if (presence.GodLevel >= 200) return; - - // agent must be over the owners land - if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) - { - World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); - } - else // or must be wearing the prim - { - if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID) - { - World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); - } - } - } - } - } - - private void DoLLTeleport(ScenePresence sp, string destination, Vector3 targetPos, Vector3 targetLookAt) - { - UUID assetID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, destination); - - // The destinaion is not an asset ID and also doesn't name a landmark. - // Use it as a sim name - if (assetID == UUID.Zero) - { - World.RequestTeleportLocation(sp.ControllingClient, destination, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); - return; - } - - AssetBase lma = World.AssetService.Get(assetID.ToString()); - if (lma == null) - return; - - if (lma.Type != (sbyte)AssetType.Landmark) - return; - - AssetLandmark lm = new AssetLandmark(lma); - - World.RequestTeleportLocation(sp.ControllingClient, lm.RegionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); - } - - public void llTextBox(string agent, string message, int chatChannel) - { - IDialogModule dm = World.RequestModuleInterface(); - - if (dm == null) - return; - - m_host.AddScriptLPS(1); - UUID av = new UUID(); - if (!UUID.TryParse(agent,out av)) - { - Error("llTextBox", "First parameter must be a key"); - return; - } - - if (message == string.Empty) - { - Error("llTextBox", "Empty message"); - } - else if (message.Length > 512) - { - Error("llTextBox", "Message more than 512 characters"); - } - else - { - dm.SendTextBoxToUser(av, message, chatChannel, m_host.Name, m_host.UUID, m_host.OwnerID); - ScriptSleep(m_sleepMsOnTextBox); - } - } - - public void llModifyLand(int action, int brush) - { - m_host.AddScriptLPS(1); - ITerrainModule tm = m_ScriptEngine.World.RequestModuleInterface(); - if (tm != null) - { - tm.ModifyTerrain(m_host.OwnerID, m_host.AbsolutePosition, (byte) brush, (byte) action, m_host.OwnerID); - } - } - - public void llCollisionSound(string impact_sound, double impact_volume) - { - m_host.AddScriptLPS(1); - - // TODO: Parameter check logic required. - m_host.CollisionSound = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, impact_sound, AssetType.Sound); - m_host.CollisionSoundVolume = (float)impact_volume; - } - - public LSL_String llGetAnimation(string id) - { - // This should only return a value if the avatar is in the same region - m_host.AddScriptLPS(1); - UUID avatar = (UUID)id; - ScenePresence presence = World.GetScenePresence(avatar); - if (presence == null) - return ""; - - if (m_host.RegionHandle == presence.RegionHandle) - { - Dictionary animationstateNames = DefaultAvatarAnimations.AnimStateNames; - - if (presence != null) - { - AnimationSet currentAnims = presence.Animator.Animations; - string currentAnimationState = String.Empty; - if (animationstateNames.TryGetValue(currentAnims.ImplicitDefaultAnimation.AnimID, out currentAnimationState)) - return currentAnimationState; - } - } - - return String.Empty; - } - - public void llMessageLinked(int linknumber, int num, string msg, string id) - { - m_host.AddScriptLPS(1); - - List parts = GetLinkParts(linknumber); - - UUID partItemID; - foreach (SceneObjectPart part in parts) - { - foreach (TaskInventoryItem item in part.Inventory.GetInventoryItems()) - { - if (item.Type == ScriptBaseClass.INVENTORY_SCRIPT) - { - partItemID = item.ItemID; - int linkNumber = m_host.LinkNum; - if (m_host.ParentGroup.PrimCount == 1) - linkNumber = 0; - - object[] resobj = new object[] - { - new LSL_Integer(linkNumber), new LSL_Integer(num), new LSL_String(msg), new LSL_String(id) - }; - - m_ScriptEngine.PostScriptEvent(partItemID, - new EventParams("link_message", - resobj, new DetectParams[0])); - } - } - } - } - - public void llPushObject(string target, LSL_Vector impulse, LSL_Vector ang_impulse, int local) - { - m_host.AddScriptLPS(1); - bool pushrestricted = World.RegionInfo.RegionSettings.RestrictPushing; - bool pushAllowed = false; - - bool pusheeIsAvatar = false; - UUID targetID = UUID.Zero; - - if (!UUID.TryParse(target,out targetID)) - return; - - ScenePresence pusheeav = null; - Vector3 PusheePos = Vector3.Zero; - SceneObjectPart pusheeob = null; - - ScenePresence avatar = World.GetScenePresence(targetID); - if (avatar != null) - { - pusheeIsAvatar = true; - - // Pushee doesn't have a physics actor - if (avatar.PhysicsActor == null) - return; - - // Pushee is in GodMode this pushing object isn't owned by them - if (avatar.GodLevel > 0 && m_host.OwnerID != targetID) - return; - - pusheeav = avatar; - - // Find pushee position - // Pushee Linked? - SceneObjectPart sitPart = pusheeav.ParentPart; - if (sitPart != null) - PusheePos = sitPart.AbsolutePosition; - else - PusheePos = pusheeav.AbsolutePosition; - } - - if (!pusheeIsAvatar) - { - // not an avatar so push is not affected by parcel flags - pusheeob = World.GetSceneObjectPart((UUID)target); - - // We can't find object - if (pusheeob == null) - return; - - // Object not pushable. Not an attachment and has no physics component - if (!pusheeob.ParentGroup.IsAttachment && pusheeob.PhysActor == null) - return; - - PusheePos = pusheeob.AbsolutePosition; - pushAllowed = true; - } - else - { - if (pushrestricted) - { - ILandObject targetlandObj = World.LandChannel.GetLandObject(PusheePos); - - // We didn't find the parcel but region is push restricted so assume it is NOT ok - if (targetlandObj == null) - return; - - // Need provisions for Group Owned here - if (m_host.OwnerID == targetlandObj.LandData.OwnerID || - targetlandObj.LandData.IsGroupOwned || m_host.OwnerID == targetID) - { - pushAllowed = true; - } - } - else - { - ILandObject targetlandObj = World.LandChannel.GetLandObject(PusheePos); - if (targetlandObj == null) - { - // We didn't find the parcel but region isn't push restricted so assume it's ok - pushAllowed = true; - } - else - { - // Parcel push restriction - if ((targetlandObj.LandData.Flags & (uint)ParcelFlags.RestrictPushObject) == (uint)ParcelFlags.RestrictPushObject) - { - // Need provisions for Group Owned here - if (m_host.OwnerID == targetlandObj.LandData.OwnerID || - targetlandObj.LandData.IsGroupOwned || - m_host.OwnerID == targetID) - { - pushAllowed = true; - } - - //ParcelFlags.RestrictPushObject - //pushAllowed = true; - } - else - { - // Parcel isn't push restricted - pushAllowed = true; - } - } - } - } - - if (pushAllowed) - { - float distance = (PusheePos - m_host.AbsolutePosition).Length(); - float distance_term = distance * distance * distance; // Script Energy - float pusher_mass = m_host.GetMass(); - - float PUSH_ATTENUATION_DISTANCE = 17f; - float PUSH_ATTENUATION_SCALE = 5f; - float distance_attenuation = 1f; - if (distance > PUSH_ATTENUATION_DISTANCE) - { - float normalized_units = 1f + (distance - PUSH_ATTENUATION_DISTANCE) / PUSH_ATTENUATION_SCALE; - distance_attenuation = 1f / normalized_units; - } - - Vector3 applied_linear_impulse = impulse; - { - float impulse_length = applied_linear_impulse.Length(); - - float desired_energy = impulse_length * pusher_mass; - if (desired_energy > 0f) - desired_energy += distance_term; - - float scaling_factor = 1f; - scaling_factor *= distance_attenuation; - applied_linear_impulse *= scaling_factor; - - } - - if (pusheeIsAvatar) - { - if (pusheeav != null) - { - PhysicsActor pa = pusheeav.PhysicsActor; - - if (pa != null) - { - if (local != 0) - { - applied_linear_impulse *= m_host.GetWorldRotation(); - } - - pa.AddForce(applied_linear_impulse, true); - } - } - } - else - { - if (pusheeob != null) - { - if (pusheeob.PhysActor != null) - { - pusheeob.ApplyImpulse(applied_linear_impulse, local != 0); - } - } - } - } - } - - public void llPassCollisions(int pass) - { - m_host.AddScriptLPS(1); - if (pass == 0) - { - m_host.PassCollisions = false; - } - else - { - m_host.PassCollisions = true; - } - } - - public LSL_String llGetScriptName() - { - m_host.AddScriptLPS(1); - - return m_item.Name != null ? m_item.Name : String.Empty; - } - - public LSL_Integer llGetLinkNumberOfSides(int link) - { - m_host.AddScriptLPS(1); - - SceneObjectPart linkedPart; - - if (link == ScriptBaseClass.LINK_ROOT) - linkedPart = m_host.ParentGroup.RootPart; - else if (link == ScriptBaseClass.LINK_THIS) - linkedPart = m_host; - else - linkedPart = m_host.ParentGroup.GetLinkNumPart(link); - - return GetNumberOfSides(linkedPart); - } - - public LSL_Integer llGetNumberOfSides() - { - m_host.AddScriptLPS(1); - - return GetNumberOfSides(m_host); - } - - protected int GetNumberOfSides(SceneObjectPart part) - { - int sides = part.GetNumberOfSides(); - - if (part.GetPrimType() == PrimType.SPHERE && part.Shape.ProfileHollow > 0) - { - // Make up for a bug where LSL shows 4 sides rather than 2 - sides += 2; - } - - return sides; - } - - - /* The new / changed functions were tested with the following LSL script: - - default - { - state_entry() - { - rotation rot = llEuler2Rot(<0,70,0> * DEG_TO_RAD); - - llOwnerSay("to get here, we rotate over: "+ (string) llRot2Axis(rot)); - llOwnerSay("and we rotate for: "+ (llRot2Angle(rot) * RAD_TO_DEG)); - - // convert back and forth between quaternion <-> vector and angle - - rotation newrot = llAxisAngle2Rot(llRot2Axis(rot),llRot2Angle(rot)); - - llOwnerSay("Old rotation was: "+(string) rot); - llOwnerSay("re-converted rotation is: "+(string) newrot); - - llSetRot(rot); // to check the parameters in the prim - } - } - */ - - // Xantor 29/apr/2008 - // Returns rotation described by rotating angle radians about axis. - // q = cos(a/2) + i (x * sin(a/2)) + j (y * sin(a/2)) + k (z * sin(a/2)) - public LSL_Rotation llAxisAngle2Rot(LSL_Vector axis, double angle) - { - m_host.AddScriptLPS(1); - - double x, y, z, s, t; - - s = Math.Cos(angle * 0.5); - t = Math.Sin(angle * 0.5); // temp value to avoid 2 more sin() calcs - axis = LSL_Vector.Norm(axis); - x = axis.x * t; - y = axis.y * t; - z = axis.z * t; - - return new LSL_Rotation(x,y,z,s); - } - - /// - /// Returns the axis of rotation for a quaternion - /// - /// - /// - public LSL_Vector llRot2Axis(LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - - if (Math.Abs(rot.s) > 1) // normalization needed - rot.Normalize(); - - double s = Math.Sqrt(1 - rot.s * rot.s); - if (s < 0.001) - { - return new LSL_Vector(1, 0, 0); - } - else - { - double invS = 1.0 / s; - if (rot.s < 0) invS = -invS; - return new LSL_Vector(rot.x * invS, rot.y * invS, rot.z * invS); - } - } - - - // Returns the angle of a quaternion (see llRot2Axis for the axis) - public LSL_Float llRot2Angle(LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - - if (Math.Abs(rot.s) > 1) // normalization needed - rot.Normalize(); - - double angle = 2 * Math.Acos(rot.s); - if (angle > Math.PI) - angle = 2 * Math.PI - angle; - - return angle; - } - - public LSL_Float llAcos(double val) - { - m_host.AddScriptLPS(1); - return (double)Math.Acos(val); - } - - public LSL_Float llAsin(double val) - { - m_host.AddScriptLPS(1); - return (double)Math.Asin(val); - } - - // jcochran 5/jan/2012 - public LSL_Float llAngleBetween(LSL_Rotation a, LSL_Rotation b) - { - m_host.AddScriptLPS(1); - - double aa = (a.x * a.x + a.y * a.y + a.z * a.z + a.s * a.s); - double bb = (b.x * b.x + b.y * b.y + b.z * b.z + b.s * b.s); - double aa_bb = aa * bb; - if (aa_bb == 0) return 0.0; - double ab = (a.x * b.x + a.y * b.y + a.z * b.z + a.s * b.s); - double quotient = (ab * ab) / aa_bb; - if (quotient >= 1.0) return 0.0; - return Math.Acos(2 * quotient - 1); - } - - public LSL_String llGetInventoryKey(string name) - { - m_host.AddScriptLPS(1); - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - if (item == null) - return UUID.Zero.ToString(); - - if ((item.CurrentPermissions - & (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) - == (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) - { - return item.AssetID.ToString(); - } - - return UUID.Zero.ToString(); - } - - public void llAllowInventoryDrop(int add) - { - m_host.AddScriptLPS(1); - - if (add != 0) - m_host.ParentGroup.RootPart.AllowedDrop = true; - else - m_host.ParentGroup.RootPart.AllowedDrop = false; - - // Update the object flags - m_host.ParentGroup.RootPart.aggregateScriptEvents(); - } - - public LSL_Vector llGetSunDirection() - { - m_host.AddScriptLPS(1); - - LSL_Vector SunDoubleVector3; - Vector3 SunFloatVector3; - - // sunPosition estate setting is set in OpenSim.Region.CoreModules.SunModule - // have to convert from Vector3 (float) to LSL_Vector (double) - SunFloatVector3 = World.RegionInfo.RegionSettings.SunVector; - SunDoubleVector3.x = (double)SunFloatVector3.X; - SunDoubleVector3.y = (double)SunFloatVector3.Y; - SunDoubleVector3.z = (double)SunFloatVector3.Z; - - return SunDoubleVector3; - } - - public LSL_Vector llGetTextureOffset(int face) - { - m_host.AddScriptLPS(1); - return GetTextureOffset(m_host, face); - } - - protected LSL_Vector GetTextureOffset(SceneObjectPart part, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - LSL_Vector offset = new LSL_Vector(); - if (face == ScriptBaseClass.ALL_SIDES) - { - face = 0; - } - if (face >= 0 && face < GetNumberOfSides(part)) - { - offset.x = tex.GetFace((uint)face).OffsetU; - offset.y = tex.GetFace((uint)face).OffsetV; - offset.z = 0.0; - return offset; - } - else - { - return offset; - } - } - - public LSL_Vector llGetTextureScale(int side) - { - m_host.AddScriptLPS(1); - Primitive.TextureEntry tex = m_host.Shape.Textures; - LSL_Vector scale; - if (side == -1) - { - side = 0; - } - scale.x = tex.GetFace((uint)side).RepeatU; - scale.y = tex.GetFace((uint)side).RepeatV; - scale.z = 0.0; - return scale; - } - - public LSL_Float llGetTextureRot(int face) - { - m_host.AddScriptLPS(1); - return GetTextureRot(m_host, face); - } - - protected LSL_Float GetTextureRot(SceneObjectPart part, int face) - { - Primitive.TextureEntry tex = part.Shape.Textures; - if (face == -1) - { - face = 0; - } - if (face >= 0 && face < GetNumberOfSides(part)) - { - return tex.GetFace((uint)face).Rotation; - } - else - { - return 0.0; - } - } - - public LSL_Integer llSubStringIndex(string source, string pattern) - { - m_host.AddScriptLPS(1); - return source.IndexOf(pattern); - } - - public LSL_String llGetOwnerKey(string id) - { - m_host.AddScriptLPS(1); - UUID key = new UUID(); - if (UUID.TryParse(id, out key)) - { - try - { - SceneObjectPart obj = World.GetSceneObjectPart(key); - if (obj == null) - return id; // the key is for an agent so just return the key - else - return obj.OwnerID.ToString(); - } - catch (KeyNotFoundException) - { - return id; // The Object/Agent not in the region so just return the key - } - } - else - { - return UUID.Zero.ToString(); - } - } - - public LSL_Vector llGetCenterOfMass() - { - m_host.AddScriptLPS(1); - - return new LSL_Vector(m_host.GetCenterOfMass()); - } - - public LSL_List llListSort(LSL_List src, int stride, int ascending) - { - m_host.AddScriptLPS(1); - - if (stride <= 0) - { - stride = 1; - } - return src.Sort(stride, ascending); - } - - public LSL_Integer llGetListLength(LSL_List src) - { - m_host.AddScriptLPS(1); - - if (src == null) - { - return 0; - } - else - { - return src.Length; - } - } - - public LSL_Integer llList2Integer(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - if (index >= src.Length || index < 0) - { - return 0; - } - - // Vectors & Rotations always return zero in SL, but - // keys don't always return zero, it seems to be a bit complex. - else if (src.Data[index] is LSL_Vector || - src.Data[index] is LSL_Rotation) - { - return 0; - } - try - { - - if (src.Data[index] is LSL_Integer) - return (LSL_Integer)src.Data[index]; - else if (src.Data[index] is LSL_Float) - return Convert.ToInt32(((LSL_Float)src.Data[index]).value); - return new LSL_Integer(src.Data[index].ToString()); - } - catch (FormatException) - { - return 0; - } - } - - public LSL_Float llList2Float(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - if (index >= src.Length || index < 0) - { - return 0.0; - } - - // Vectors & Rotations always return zero in SL - else if (src.Data[index] is LSL_Vector || - src.Data[index] is LSL_Rotation) - { - return 0; - } - // valid keys seem to get parsed as integers then converted to floats - else - { - UUID uuidt; - if (src.Data[index] is LSL_Key && UUID.TryParse(src.Data[index].ToString(), out uuidt)) - { - return Convert.ToDouble(new LSL_Integer(src.Data[index].ToString()).value); - } - } - try - { - if (src.Data[index] is LSL_Integer) - return Convert.ToDouble(((LSL_Integer)src.Data[index]).value); - else if (src.Data[index] is LSL_Float) - return Convert.ToDouble(((LSL_Float)src.Data[index]).value); - else if (src.Data[index] is LSL_String) - return Convert.ToDouble(((LSL_String)src.Data[index]).m_string); - return Convert.ToDouble(src.Data[index]); - } - catch (FormatException) - { - return 0.0; - } - } - - public LSL_String llList2String(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - if (index >= src.Length || index < 0) - { - return String.Empty; - } - return src.Data[index].ToString(); - } - - public LSL_Key llList2Key(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - - if (index >= src.Length || index < 0) - { - return ""; - } - - // SL spits out an empty string for types other than key & string - // At the time of patching, LSL_Key is currently LSL_String, - // so the OR check may be a little redundant, but it's being done - // for completion and should LSL_Key ever be implemented - // as it's own struct - // NOTE: 3rd case is needed because a NULL_KEY comes through as - // type 'obj' and wrongly returns "" - else if (!(src.Data[index] is LSL_String || - src.Data[index] is LSL_Key || - src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) - { - return ""; - } - - return src.Data[index].ToString(); - } - - public LSL_Vector llList2Vector(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - if (index >= src.Length || index < 0) - { - return new LSL_Vector(0, 0, 0); - } - if (src.Data[index].GetType() == typeof(LSL_Vector)) - { - return (LSL_Vector)src.Data[index]; - } - - // SL spits always out ZERO_VECTOR for anything other than - // strings or vectors. Although keys always return ZERO_VECTOR, - // it is currently difficult to make the distinction between - // a string, a key as string and a string that by coincidence - // is a string, so we're going to leave that up to the - // LSL_Vector constructor. - else if (!(src.Data[index] is LSL_String || - src.Data[index] is LSL_Vector)) - { - return new LSL_Vector(0, 0, 0); - } - else - { - return new LSL_Vector(src.Data[index].ToString()); - } - } - - public LSL_Rotation llList2Rot(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - if (index >= src.Length || index < 0) - { - return new LSL_Rotation(0, 0, 0, 1); - } - - // SL spits always out ZERO_ROTATION for anything other than - // strings or vectors. Although keys always return ZERO_ROTATION, - // it is currently difficult to make the distinction between - // a string, a key as string and a string that by coincidence - // is a string, so we're going to leave that up to the - // LSL_Rotation constructor. - else if (!(src.Data[index] is LSL_String || - src.Data[index] is LSL_Rotation)) - { - return new LSL_Rotation(0, 0, 0, 1); - } - else if (src.Data[index].GetType() == typeof(LSL_Rotation)) - { - return (LSL_Rotation)src.Data[index]; - } - else - { - return new LSL_Rotation(src.Data[index].ToString()); - } - } - - public LSL_List llList2List(LSL_List src, int start, int end) - { - m_host.AddScriptLPS(1); - return src.GetSublist(start, end); - } - - public LSL_List llDeleteSubList(LSL_List src, int start, int end) - { - return src.DeleteSublist(start, end); - } - - public LSL_Integer llGetListEntryType(LSL_List src, int index) - { - m_host.AddScriptLPS(1); - if (index < 0) - { - index = src.Length + index; - } - if (index >= src.Length) - { - return 0; - } - - if (src.Data[index] is LSL_Integer || src.Data[index] is Int32) - return 1; - if (src.Data[index] is LSL_Float || src.Data[index] is Single || src.Data[index] is Double) - return 2; - if (src.Data[index] is LSL_String || src.Data[index] is String) - { - UUID tuuid; - if (UUID.TryParse(src.Data[index].ToString(), out tuuid)) - { - return 4; - } - else - { - return 3; - } - } - if (src.Data[index] is LSL_Vector) - return 5; - if (src.Data[index] is LSL_Rotation) - return 6; - if (src.Data[index] is LSL_List) - return 7; - return 0; - - } - - /// - /// Process the supplied list and return the - /// content of the list formatted as a comma - /// separated list. There is a space after - /// each comma. - /// - public LSL_String llList2CSV(LSL_List src) - { - m_host.AddScriptLPS(1); - - return string.Join(", ", - (new List(src.Data)).ConvertAll(o => - { - return o.ToString(); - }).ToArray()); - } - - /// - /// The supplied string is scanned for commas - /// and converted into a list. Commas are only - /// effective if they are encountered outside - /// of '<' '>' delimiters. Any whitespace - /// before or after an element is trimmed. - /// - - public LSL_List llCSV2List(string src) - { - - LSL_List result = new LSL_List(); - int parens = 0; - int start = 0; - int length = 0; - - m_host.AddScriptLPS(1); - - for (int i = 0; i < src.Length; i++) - { - switch (src[i]) - { - case '<': - parens++; - length++; - break; - case '>': - if (parens > 0) - parens--; - length++; - break; - case ',': - if (parens == 0) - { - result.Add(new LSL_String(src.Substring(start,length).Trim())); - start += length+1; - length = 0; - } - else - { - length++; - } - break; - default: - length++; - break; - } - } - - result.Add(new LSL_String(src.Substring(start,length).Trim())); - - return result; - } - - /// - /// Randomizes the list, be arbitrarily reordering - /// sublists of stride elements. As the stride approaches - /// the size of the list, the options become very - /// limited. - /// - /// - /// This could take a while for very large list - /// sizes. - /// - - public LSL_List llListRandomize(LSL_List src, int stride) - { - LSL_List result; - BetterRandom rand = new BetterRandom(); - - int chunkk; - int[] chunks; - - m_host.AddScriptLPS(1); - - if (stride <= 0) - { - stride = 1; - } - - // Stride MUST be a factor of the list length - // If not, then return the src list. This also - // traps those cases where stride > length. - - if (src.Length != stride && src.Length % stride == 0) - { - chunkk = src.Length/stride; - - chunks = new int[chunkk]; - - for (int i = 0; i < chunkk; i++) - { - chunks[i] = i; - } - - // Knuth shuffle the chunkk index - for (int i = chunkk - 1; i > 0; i--) - { - // Elect an unrandomized chunk to swap - int index = rand.Next(i + 1); - - // and swap position with first unrandomized chunk - int tmp = chunks[i]; - chunks[i] = chunks[index]; - chunks[index] = tmp; - } - - // Construct the randomized list - - result = new LSL_List(); - - for (int i = 0; i < chunkk; i++) - { - for (int j = 0; j < stride; j++) - { - result.Add(src.Data[chunks[i] * stride + j]); - } - } - } - else { - object[] array = new object[src.Length]; - Array.Copy(src.Data, 0, array, 0, src.Length); - result = new LSL_List(array); - } - - return result; - } - - /// - /// Elements in the source list starting with 0 and then - /// every i+stride. If the stride is negative then the scan - /// is backwards producing an inverted result. - /// Only those elements that are also in the specified - /// range are included in the result. - /// - - public LSL_List llList2ListStrided(LSL_List src, int start, int end, int stride) - { - - LSL_List result = new LSL_List(); - int[] si = new int[2]; - int[] ei = new int[2]; - bool twopass = false; - - m_host.AddScriptLPS(1); - - // First step is always to deal with negative indices - - if (start < 0) - start = src.Length+start; - if (end < 0) - end = src.Length+end; - - // Out of bounds indices are OK, just trim them - // accordingly - - if (start > src.Length) - start = src.Length; - - if (end > src.Length) - end = src.Length; - - if (stride == 0) - stride = 1; - - // There may be one or two ranges to be considered - - if (start != end) - { - - if (start <= end) - { - si[0] = start; - ei[0] = end; - } - else - { - si[1] = start; - ei[1] = src.Length; - si[0] = 0; - ei[0] = end; - twopass = true; - } - - // The scan always starts from the beginning of the - // source list, but members are only selected if they - // fall within the specified sub-range. The specified - // range values are inclusive. - // A negative stride reverses the direction of the - // scan producing an inverted list as a result. - - if (stride > 0) - { - for (int i = 0; i < src.Length; i += stride) - { - if (i<=ei[0] && i>=si[0]) - result.Add(src.Data[i]); - if (twopass && i>=si[1] && i<=ei[1]) - result.Add(src.Data[i]); - } - } - else if (stride < 0) - { - for (int i = src.Length - 1; i >= 0; i += stride) - { - if (i <= ei[0] && i >= si[0]) - result.Add(src.Data[i]); - if (twopass && i >= si[1] && i <= ei[1]) - result.Add(src.Data[i]); - } - } - } - else - { - if (start%stride == 0) - { - result.Add(src.Data[start]); - } - } - - return result; - } - - public LSL_Integer llGetRegionAgentCount() - { - m_host.AddScriptLPS(1); - return new LSL_Integer(World.GetRootAgentCount()); - } - - public LSL_Vector llGetRegionCorner() - { - m_host.AddScriptLPS(1); - return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); - } - - public LSL_String llGetEnv(LSL_String name) - { - m_host.AddScriptLPS(1); - if (name == "agent_limit") - { - return World.RegionInfo.RegionSettings.AgentLimit.ToString(); - } - else if (name == "dynamic_pathfinding") - { - return "0"; - } - else if (name == "estate_id") - { - return World.RegionInfo.EstateSettings.EstateID.ToString(); - } - else if (name == "estate_name") - { - return World.RegionInfo.EstateSettings.EstateName; - } - else if (name == "frame_number") - { - return World.Frame.ToString(); - } - else if (name == "region_cpu_ratio") - { - return "1"; - } - else if (name == "region_idle") - { - return "0"; - } - else if (name == "region_product_name") - { - if (World.RegionInfo.RegionType != String.Empty) - return World.RegionInfo.RegionType; - else - return ""; - } - else if (name == "region_product_sku") - { - return "OpenSim"; - } - else if (name == "region_start_time") - { - return World.UnixStartTime.ToString(); - } - else if (name == "sim_channel") - { - return "OpenSim"; - } - else if (name == "sim_version") - { - return World.GetSimulatorVersion(); - } - else if (name == "simulator_hostname") - { - IUrlModule UrlModule = World.RequestModuleInterface(); - return UrlModule.ExternalHostNameForLSL; - } - else - { - return ""; - } - } - - /// - /// Insert the list identified by into the - /// list designated by such that the first - /// new element has the index specified by - /// - - public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) - { - - LSL_List pref = null; - LSL_List suff = null; - - m_host.AddScriptLPS(1); - - if (index < 0) - { - index = index+dest.Length; - if (index < 0) - { - index = 0; - } - } - - if (index != 0) - { - pref = dest.GetSublist(0,index-1); - if (index < dest.Length) - { - suff = dest.GetSublist(index,-1); - return pref + src + suff; - } - else - { - return pref + src; - } - } - else - { - if (index < dest.Length) - { - suff = dest.GetSublist(index,-1); - return src + suff; - } - else - { - return src; - } - } - - } - - /// - /// Returns the index of the first occurrence of test - /// in src. - /// - /// Source list - /// List to search for - /// - /// The index number of the point in src where test was found if it was found. - /// Otherwise returns -1 - /// - public LSL_Integer llListFindList(LSL_List src, LSL_List test) - { - int index = -1; - int length = src.Length - test.Length + 1; - - m_host.AddScriptLPS(1); - - // If either list is empty, do not match - if (src.Length != 0 && test.Length != 0) - { - for (int i = 0; i < length; i++) - { - // Why this piece of insanity? This is because most script constants are C# value types (e.g. int) - // rather than wrapped LSL types. Such a script constant does not have int.Equal(LSL_Integer) code - // and so the comparison fails even if the LSL_Integer conceptually has the same value. - // Therefore, here we test Equals on both the source and destination objects. - // However, a future better approach may be use LSL struct script constants (e.g. LSL_Integer(1)). - if (src.Data[i].Equals(test.Data[0]) || test.Data[0].Equals(src.Data[i])) - { - int j; - for (j = 1; j < test.Length; j++) - if (!(src.Data[i+j].Equals(test.Data[j]) || test.Data[j].Equals(src.Data[i+j]))) - break; - - if (j == test.Length) - { - index = i; - break; - } - } - } - } - - return index; - } - - public LSL_String llGetObjectName() - { - m_host.AddScriptLPS(1); - return m_host.Name !=null ? m_host.Name : String.Empty; - } - - public void llSetObjectName(string name) - { - m_host.AddScriptLPS(1); - m_host.Name = name != null ? name : String.Empty; - } - - public LSL_String llGetDate() - { - m_host.AddScriptLPS(1); - DateTime date = DateTime.Now.ToUniversalTime(); - string result = date.ToString("yyyy-MM-dd"); - return result; - } - - public LSL_Integer llEdgeOfWorld(LSL_Vector pos, LSL_Vector dir) - { - m_host.AddScriptLPS(1); - - // edge will be used to pass the Region Coordinates offset - // we want to check for a neighboring sim - LSL_Vector edge = new LSL_Vector(0, 0, 0); - - if (dir.x == 0) - { - if (dir.y == 0) - { - // Direction vector is 0,0 so return - // false since we're staying in the sim - return 0; - } - else - { - // Y is the only valid direction - edge.y = dir.y / Math.Abs(dir.y); - } - } - else - { - LSL_Float mag; - if (dir.x > 0) - { - mag = (World.RegionInfo.RegionSizeX - pos.x) / dir.x; - } - else - { - mag = (pos.x/dir.x); - } - - mag = Math.Abs(mag); - - edge.y = pos.y + (dir.y * mag); - - if (edge.y > World.RegionInfo.RegionSizeY || edge.y < 0) - { - // Y goes out of bounds first - edge.y = dir.y / Math.Abs(dir.y); - } - else - { - // X goes out of bounds first or its a corner exit - edge.y = 0; - edge.x = dir.x / Math.Abs(dir.x); - } - } - - List neighbors = World.GridService.GetNeighbours(World.RegionInfo.ScopeID, World.RegionInfo.RegionID); - - uint neighborX = World.RegionInfo.RegionLocX + (uint)dir.x; - uint neighborY = World.RegionInfo.RegionLocY + (uint)dir.y; - - foreach (GridRegion sri in neighbors) - { - if (sri.RegionCoordX == neighborX && sri.RegionCoordY == neighborY) - return 0; - } - - return 1; - } - - /// - /// Not fully implemented yet. Still to do:- - /// AGENT_BUSY - /// Remove as they are done - /// - public LSL_Integer llGetAgentInfo(string id) - { - m_host.AddScriptLPS(1); - - UUID key = new UUID(); - if (!UUID.TryParse(id, out key)) - { - return 0; - } - - int flags = 0; - - ScenePresence agent = World.GetScenePresence(key); - if (agent == null) - { - return 0; - } - - if (agent.IsChildAgent) - return 0; // Fail if they are not in the same region - - // note: in OpenSim, sitting seems to cancel AGENT_ALWAYS_RUN, unlike SL - if (agent.SetAlwaysRun) - { - flags |= ScriptBaseClass.AGENT_ALWAYS_RUN; - } - - if (agent.HasAttachments()) - { - flags |= ScriptBaseClass.AGENT_ATTACHMENTS; - if (agent.HasScriptedAttachments()) - flags |= ScriptBaseClass.AGENT_SCRIPTED; - } - - if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0) - { - flags |= ScriptBaseClass.AGENT_FLYING; - flags |= ScriptBaseClass.AGENT_IN_AIR; // flying always implies in-air, even if colliding with e.g. a wall - } - - if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AWAY) != 0) - { - flags |= ScriptBaseClass.AGENT_AWAY; - } - - // seems to get unset, even if in mouselook, when avatar is sitting on a prim??? - if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) - { - flags |= ScriptBaseClass.AGENT_MOUSELOOK; - } - - if ((agent.State & (byte)AgentState.Typing) != (byte)0) - { - flags |= ScriptBaseClass.AGENT_TYPING; - } - - string agentMovementAnimation = agent.Animator.CurrentMovementAnimation; - - if (agentMovementAnimation == "CROUCH") - { - flags |= ScriptBaseClass.AGENT_CROUCHING; - } - - if (agentMovementAnimation == "WALK" || agentMovementAnimation == "CROUCHWALK") - { - flags |= ScriptBaseClass.AGENT_WALKING; - } - - // not colliding implies in air. Note: flying also implies in-air, even if colliding (see above) - - // note: AGENT_IN_AIR and AGENT_WALKING seem to be mutually exclusive states in SL. - - // note: this may need some tweaking when walking downhill. you "fall down" for a brief instant - // and don't collide when walking downhill, which instantly registers as in-air, briefly. should - // there be some minimum non-collision threshold time before claiming the avatar is in-air? - if ((flags & ScriptBaseClass.AGENT_WALKING) == 0 && !agent.IsColliding ) - { - flags |= ScriptBaseClass.AGENT_IN_AIR; - } - - if (agent.ParentPart != null) - { - flags |= ScriptBaseClass.AGENT_ON_OBJECT; - flags |= ScriptBaseClass.AGENT_SITTING; - } - - if (agent.Animator.Animations.ImplicitDefaultAnimation.AnimID - == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) - { - flags |= ScriptBaseClass.AGENT_SITTING; - } - - return flags; - } - - public LSL_String llGetAgentLanguage(string id) - { - // This should only return a value if the avatar is in the same region, but eh. idc. - m_host.AddScriptLPS(1); - if (World.AgentPreferencesService == null) - { - Error("llGetAgentLanguage", "No AgentPreferencesService present"); - } - else - { - UUID key = new UUID(); - if (UUID.TryParse(id, out key)) - { - return new LSL_String(World.AgentPreferencesService.GetLang(key)); - } - } - return new LSL_String("en-us"); - } - /// - /// http://wiki.secondlife.com/wiki/LlGetAgentList - /// The list of options is currently not used in SL - /// scope is one of:- - /// AGENT_LIST_REGION - all in the region - /// AGENT_LIST_PARCEL - all in the same parcel as the scripted object - /// AGENT_LIST_PARCEL_OWNER - all in any parcel owned by the owner of the - /// current parcel. - /// - public LSL_List llGetAgentList(LSL_Integer scope, LSL_List options) - { - m_host.AddScriptLPS(1); - - // the constants are 1, 2 and 4 so bits are being set, but you - // get an error "INVALID_SCOPE" if it is anything but 1, 2 and 4 - bool regionWide = scope == ScriptBaseClass.AGENT_LIST_REGION; - bool parcelOwned = scope == ScriptBaseClass.AGENT_LIST_PARCEL_OWNER; - bool parcel = scope == ScriptBaseClass.AGENT_LIST_PARCEL; - - LSL_List result = new LSL_List(); - - if (!regionWide && !parcelOwned && !parcel) - { - result.Add("INVALID_SCOPE"); - return result; - } - - ILandObject land; - UUID id = UUID.Zero; - - if (parcel || parcelOwned) - { - land = World.LandChannel.GetLandObject(m_host.ParentGroup.RootPart.GetWorldPosition()); - if (land == null) - { - id = UUID.Zero; - } - else - { - if (parcelOwned) - { - id = land.LandData.OwnerID; - } - else - { - id = land.LandData.GlobalID; - } - } - } - - World.ForEachRootScenePresence( - delegate (ScenePresence ssp) - { - // Gods are not listed in SL - if (!ssp.IsDeleted && ssp.GodLevel == 0.0 && !ssp.IsChildAgent) - { - if (!regionWide) - { - land = World.LandChannel.GetLandObject(ssp.AbsolutePosition); - if (land != null) - { - if (parcelOwned && land.LandData.OwnerID == id || - parcel && land.LandData.GlobalID == id) - { - result.Add(new LSL_Key(ssp.UUID.ToString())); - } - } - } - else - { - result.Add(new LSL_Key(ssp.UUID.ToString())); - } - } - // Maximum of 100 results - if (result.Length > 99) - { - return; - } - } - ); - return result; - } - - public void llAdjustSoundVolume(double volume) - { - m_host.AddScriptLPS(1); - m_host.AdjustSoundGain(volume); - ScriptSleep(m_sleepMsOnAdjustSoundVolume); - } - - public void llSetSoundRadius(double radius) - { - m_host.AddScriptLPS(1); - m_host.SoundRadius = radius; - } - - public LSL_String llKey2Name(string id) - { - m_host.AddScriptLPS(1); - UUID key = new UUID(); - if (UUID.TryParse(id,out key)) - { - ScenePresence presence = World.GetScenePresence(key); - - if (presence != null) - { - return presence.ControllingClient.Name; - //return presence.Name; - } - - if (World.GetSceneObjectPart(key) != null) - { - return World.GetSceneObjectPart(key).Name; - } - } - return String.Empty; - } - - - - public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) - { - m_host.AddScriptLPS(1); - - SetTextureAnim(m_host, mode, face, sizex, sizey, start, length, rate); - } - - public void llSetLinkTextureAnim(int linknumber, int mode, int face, int sizex, int sizey, double start, double length, double rate) - { - m_host.AddScriptLPS(1); - - List parts = GetLinkParts(linknumber); - - foreach (SceneObjectPart part in parts) - { - SetTextureAnim(part, mode, face, sizex, sizey, start, length, rate); - } - } - - private void SetTextureAnim(SceneObjectPart part, int mode, int face, int sizex, int sizey, double start, double length, double rate) - { - - Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation(); - pTexAnim.Flags = (Primitive.TextureAnimMode)mode; - - //ALL_SIDES - if (face == ScriptBaseClass.ALL_SIDES) - face = 255; - - pTexAnim.Face = (uint)face; - pTexAnim.Length = (float)length; - pTexAnim.Rate = (float)rate; - pTexAnim.SizeX = (uint)sizex; - pTexAnim.SizeY = (uint)sizey; - pTexAnim.Start = (float)start; - - part.AddTextureAnimation(pTexAnim); - part.SendFullUpdateToAllClients(); - part.ParentGroup.HasGroupChanged = true; - } - - public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east, - LSL_Vector bottom_south_west) - { - m_host.AddScriptLPS(1); - if (m_SoundModule != null) - { - m_SoundModule.TriggerSoundLimited(m_host.UUID, - ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, - bottom_south_west, top_north_east); - } - } - - public void llEjectFromLand(string pest) - { - m_host.AddScriptLPS(1); - UUID agentID = new UUID(); - if (UUID.TryParse(pest, out agentID)) - { - ScenePresence presence = World.GetScenePresence(agentID); - if (presence != null) - { - // agent must be over the owners land - ILandObject land = World.LandChannel.GetLandObject(presence.AbsolutePosition); - if (land == null) - return; - - if (m_host.OwnerID == land.LandData.OwnerID) - { - World.TeleportClientHome(agentID, presence.ControllingClient); - } - } - } - ScriptSleep(m_sleepMsOnEjectFromLand); - } - - public LSL_Integer llOverMyLand(string id) - { - m_host.AddScriptLPS(1); - UUID key = new UUID(); - if (UUID.TryParse(id, out key)) - { - ScenePresence presence = World.GetScenePresence(key); - if (presence != null) // object is an avatar - { - if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) - return 1; - } - else // object is not an avatar - { - SceneObjectPart obj = World.GetSceneObjectPart(key); - - if (obj != null) - { - if (m_host.OwnerID == World.LandChannel.GetLandObject(obj.AbsolutePosition).LandData.OwnerID) - return 1; - } - } - } - - return 0; - } - - public LSL_String llGetLandOwnerAt(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - ILandObject land = World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); - if (land == null) - return UUID.Zero.ToString(); - return land.LandData.OwnerID.ToString(); - } - - /// - /// According to http://lslwiki.net/lslwiki/wakka.php?wakka=llGetAgentSize - /// only the height of avatars vary and that says: - /// Width (x) and depth (y) are constant. (0.45m and 0.6m respectively). - /// - public LSL_Vector llGetAgentSize(string id) - { - m_host.AddScriptLPS(1); - ScenePresence avatar = World.GetScenePresence((UUID)id); - LSL_Vector agentSize; - if (avatar == null || avatar.IsChildAgent) // Fail if not in the same region - { - agentSize = ScriptBaseClass.ZERO_VECTOR; - } - else - { - agentSize = GetAgentSize(avatar); - } - - return agentSize; - } - - public LSL_Integer llSameGroup(string agent) - { - m_host.AddScriptLPS(1); - UUID agentId = new UUID(); - if (!UUID.TryParse(agent, out agentId)) - return new LSL_Integer(0); - ScenePresence presence = World.GetScenePresence(agentId); - if (presence == null || presence.IsChildAgent) // Return flase for child agents - return new LSL_Integer(0); - IClientAPI client = presence.ControllingClient; - if (m_host.GroupID == client.ActiveGroupId) - return new LSL_Integer(1); - else - return new LSL_Integer(0); - } - - public void llUnSit(string id) - { - m_host.AddScriptLPS(1); - - UUID key = new UUID(); - if (UUID.TryParse(id, out key)) - { - ScenePresence av = World.GetScenePresence(key); - List sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); - - if (av != null) - { - if (sittingAvatars.Contains(av)) - { - // if the avatar is sitting on this object, then - // we can unsit them. We don't want random scripts unsitting random people - // Lets avoid the popcorn avatar scenario. - av.StandUp(); - } - else - { - // If the object owner also owns the parcel - // or - // if the land is group owned and the object is group owned by the same group - // or - // if the object is owned by a person with estate access. - ILandObject parcel = World.LandChannel.GetLandObject(av.AbsolutePosition); - if (parcel != null) - { - if (m_host.OwnerID == parcel.LandData.OwnerID || - (m_host.OwnerID == m_host.GroupID && m_host.GroupID == parcel.LandData.GroupID - && parcel.LandData.IsGroupOwned) || World.Permissions.IsGod(m_host.OwnerID)) - { - av.StandUp(); - } - } - } - } - } - } - - public LSL_Vector llGroundSlope(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - - //Get the slope normal. This gives us the equation of the plane tangent to the slope. - LSL_Vector vsn = llGroundNormal(offset); - - //Plug the x,y coordinates of the slope normal into the equation of the plane to get - //the height of that point on the plane. The resulting vector gives the slope. - Vector3 vsl = vsn; - vsl.Z = (float)(((vsn.x * vsn.x) + (vsn.y * vsn.y)) / (-1 * vsn.z)); - vsl.Normalize(); - //Normalization might be overkill here - - vsn.x = vsl.X; - vsn.y = vsl.Y; - vsn.z = vsl.Z; - - return vsn; - } - - public LSL_Vector llGroundNormal(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - Vector3 pos = m_host.GetWorldPosition() + (Vector3)offset; - // Clamp to valid position - if (pos.X < 0) - pos.X = 0; - else if (pos.X >= World.Heightmap.Width) - pos.X = World.Heightmap.Width - 1; - if (pos.Y < 0) - pos.Y = 0; - else if (pos.Y >= World.Heightmap.Height) - pos.Y = World.Heightmap.Height - 1; - - //Find two points in addition to the position to define a plane - Vector3 p0 = new Vector3(pos.X, pos.Y, - (float)World.Heightmap[(int)pos.X, (int)pos.Y]); - Vector3 p1 = new Vector3(); - Vector3 p2 = new Vector3(); - if ((pos.X + 1.0f) >= World.Heightmap.Width) - p1 = new Vector3(pos.X + 1.0f, pos.Y, - (float)World.Heightmap[(int)pos.X, (int)pos.Y]); - else - p1 = new Vector3(pos.X + 1.0f, pos.Y, - (float)World.Heightmap[(int)(pos.X + 1.0f), (int)pos.Y]); - if ((pos.Y + 1.0f) >= World.Heightmap.Height) - p2 = new Vector3(pos.X, pos.Y + 1.0f, - (float)World.Heightmap[(int)pos.X, (int)pos.Y]); - else - p2 = new Vector3(pos.X, pos.Y + 1.0f, - (float)World.Heightmap[(int)pos.X, (int)(pos.Y + 1.0f)]); - - //Find normalized vectors from p0 to p1 and p0 to p2 - Vector3 v0 = new Vector3(p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z); - Vector3 v1 = new Vector3(p2.X - p0.X, p2.Y - p0.Y, p2.Z - p0.Z); - v0.Normalize(); - v1.Normalize(); - - //Find the cross product of the vectors (the slope normal). - Vector3 vsn = new Vector3(); - vsn.X = (v0.Y * v1.Z) - (v0.Z * v1.Y); - vsn.Y = (v0.Z * v1.X) - (v0.X * v1.Z); - vsn.Z = (v0.X * v1.Y) - (v0.Y * v1.X); - vsn.Normalize(); - //I believe the crossproduct of two normalized vectors is a normalized vector so - //this normalization may be overkill - - return new LSL_Vector(vsn); - } - - public LSL_Vector llGroundContour(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - LSL_Vector x = llGroundSlope(offset); - return new LSL_Vector(-x.y, x.x, 0.0); - } - - public LSL_Integer llGetAttached() - { - m_host.AddScriptLPS(1); - return m_host.ParentGroup.AttachmentPoint; - } - - public virtual LSL_Integer llGetFreeMemory() - { - m_host.AddScriptLPS(1); - // Make scripts designed for Mono happy - return 65536; - } - - public LSL_Integer llGetFreeURLs() - { - m_host.AddScriptLPS(1); - if (m_UrlModule != null) - return new LSL_Integer(m_UrlModule.GetFreeUrls()); - return new LSL_Integer(0); - } - - - public LSL_String llGetRegionName() - { - m_host.AddScriptLPS(1); - return World.RegionInfo.RegionName; - } - - public LSL_Float llGetRegionTimeDilation() - { - m_host.AddScriptLPS(1); - return (double)World.TimeDilation; - } - - /// - /// Returns the value reported in the client Statistics window - /// - public LSL_Float llGetRegionFPS() - { - m_host.AddScriptLPS(1); - return World.StatsReporter.LastReportedSimFPS; - } - - - /* particle system rules should be coming into this routine as doubles, that is - rule[0] should be an integer from this list and rule[1] should be the arg - for the same integer. wiki.secondlife.com has most of this mapping, but some - came from http://www.caligari-designs.com/p4u2 - - We iterate through the list for 'Count' elements, incrementing by two for each - iteration and set the members of Primitive.ParticleSystem, one at a time. - */ - - public enum PrimitiveRule : int - { - PSYS_PART_FLAGS = 0, - PSYS_PART_START_COLOR = 1, - PSYS_PART_START_ALPHA = 2, - PSYS_PART_END_COLOR = 3, - PSYS_PART_END_ALPHA = 4, - PSYS_PART_START_SCALE = 5, - PSYS_PART_END_SCALE = 6, - PSYS_PART_MAX_AGE = 7, - PSYS_SRC_ACCEL = 8, - PSYS_SRC_PATTERN = 9, - PSYS_SRC_INNERANGLE = 10, - PSYS_SRC_OUTERANGLE = 11, - PSYS_SRC_TEXTURE = 12, - PSYS_SRC_BURST_RATE = 13, - PSYS_SRC_BURST_PART_COUNT = 15, - PSYS_SRC_BURST_RADIUS = 16, - PSYS_SRC_BURST_SPEED_MIN = 17, - PSYS_SRC_BURST_SPEED_MAX = 18, - PSYS_SRC_MAX_AGE = 19, - PSYS_SRC_TARGET_KEY = 20, - PSYS_SRC_OMEGA = 21, - PSYS_SRC_ANGLE_BEGIN = 22, - PSYS_SRC_ANGLE_END = 23, - PSYS_PART_BLEND_FUNC_SOURCE = 24, - PSYS_PART_BLEND_FUNC_DEST = 25, - PSYS_PART_START_GLOW = 26, - PSYS_PART_END_GLOW = 27 - } - - internal Primitive.ParticleSystem.ParticleDataFlags ConvertUINTtoFlags(uint flags) - { - Primitive.ParticleSystem.ParticleDataFlags returnval = Primitive.ParticleSystem.ParticleDataFlags.None; - - return returnval; - } - - protected Primitive.ParticleSystem getNewParticleSystemWithSLDefaultValues() - { - Primitive.ParticleSystem ps = new Primitive.ParticleSystem(); - - // TODO find out about the other defaults and add them here - ps.PartStartColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); - ps.PartEndColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); - ps.PartStartScaleX = 1.0f; - ps.PartStartScaleY = 1.0f; - ps.PartEndScaleX = 1.0f; - ps.PartEndScaleY = 1.0f; - ps.BurstSpeedMin = 1.0f; - ps.BurstSpeedMax = 1.0f; - ps.BurstRate = 0.1f; - ps.PartMaxAge = 10.0f; - ps.BurstPartCount = 1; - ps.BlendFuncSource = ScriptBaseClass.PSYS_PART_BF_SOURCE_ALPHA; - ps.BlendFuncDest = ScriptBaseClass.PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA; - ps.PartStartGlow = 0.0f; - ps.PartEndGlow = 0.0f; - - return ps; - } - - public void llLinkParticleSystem(int linknumber, LSL_List rules) - { - m_host.AddScriptLPS(1); - - List parts = GetLinkParts(linknumber); - - foreach (SceneObjectPart part in parts) - { - SetParticleSystem(part, rules, "llLinkParticleSystem"); - } - } - - public void llParticleSystem(LSL_List rules) - { - m_host.AddScriptLPS(1); - SetParticleSystem(m_host, rules, "llParticleSystem"); - } - - private void SetParticleSystem(SceneObjectPart part, LSL_List rules, string originFunc) - { - if (rules.Length == 0) - { - part.RemoveParticleSystem(); - part.ParentGroup.HasGroupChanged = true; - } - else - { - Primitive.ParticleSystem prules = getNewParticleSystemWithSLDefaultValues(); - LSL_Vector tempv = new LSL_Vector(); - - float tempf = 0; - int tmpi = 0; - - for (int i = 0; i < rules.Length; i += 2) - { - int psystype; - try - { - psystype = rules.GetLSLIntegerItem(i); - } - catch (InvalidCastException) - { - Error(originFunc, string.Format("Error running particle system params index #{0}: particle system parameter type must be integer", i)); - return; - } - switch (psystype) - { - case (int)ScriptBaseClass.PSYS_PART_FLAGS: - try - { - prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)(uint)rules.GetLSLIntegerItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_FLAGS: arg #{0} - parameter 1 must be integer", i + 1)); - return; - } - break; - - case (int)ScriptBaseClass.PSYS_PART_START_COLOR: - try - { - tempv = rules.GetVector3Item(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_START_COLOR: arg #{0} - parameter 1 must be vector", i + 1)); - return; - } - prules.PartStartColor.R = (float)tempv.x; - prules.PartStartColor.G = (float)tempv.y; - prules.PartStartColor.B = (float)tempv.z; - break; - - case (int)ScriptBaseClass.PSYS_PART_START_ALPHA: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_START_ALPHA: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.PartStartColor.A = tempf; - break; - - case (int)ScriptBaseClass.PSYS_PART_END_COLOR: - try - { - tempv = rules.GetVector3Item(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_END_COLOR: arg #{0} - parameter 1 must be vector", i + 1)); - return; - } - prules.PartEndColor.R = (float)tempv.x; - prules.PartEndColor.G = (float)tempv.y; - prules.PartEndColor.B = (float)tempv.z; - break; - - case (int)ScriptBaseClass.PSYS_PART_END_ALPHA: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_END_ALPHA: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.PartEndColor.A = tempf; - break; - - case (int)ScriptBaseClass.PSYS_PART_START_SCALE: - try - { - tempv = rules.GetVector3Item(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_START_SCALE: arg #{0} - parameter 1 must be vector", i + 1)); - return; - } - prules.PartStartScaleX = validParticleScale((float)tempv.x); - prules.PartStartScaleY = validParticleScale((float)tempv.y); - break; - - case (int)ScriptBaseClass.PSYS_PART_END_SCALE: - try - { - tempv = rules.GetVector3Item(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_END_SCALE: arg #{0} - parameter 1 must be vector", i + 1)); - return; - } - prules.PartEndScaleX = validParticleScale((float)tempv.x); - prules.PartEndScaleY = validParticleScale((float)tempv.y); - break; - - case (int)ScriptBaseClass.PSYS_PART_MAX_AGE: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_MAX_AGE: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.PartMaxAge = tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_ACCEL: - try - { - tempv = rules.GetVector3Item(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_ACCEL: arg #{0} - parameter 1 must be vector", i + 1)); - return; - } - prules.PartAcceleration.X = (float)tempv.x; - prules.PartAcceleration.Y = (float)tempv.y; - prules.PartAcceleration.Z = (float)tempv.z; - break; - - case (int)ScriptBaseClass.PSYS_SRC_PATTERN: - try - { - tmpi = (int)rules.GetLSLIntegerItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_PATTERN: arg #{0} - parameter 1 must be integer", i + 1)); - return; - } - prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi; - break; - - // PSYS_SRC_INNERANGLE and PSYS_SRC_ANGLE_BEGIN use the same variables. The - // PSYS_SRC_OUTERANGLE and PSYS_SRC_ANGLE_END also use the same variable. The - // client tells the difference between the two by looking at the 0x02 bit in - // the PartFlags variable. - case (int)ScriptBaseClass.PSYS_SRC_INNERANGLE: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_INNERANGLE: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.InnerAngle = (float)tempf; - prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off. - break; - - case (int)ScriptBaseClass.PSYS_SRC_OUTERANGLE: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_OUTERANGLE: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.OuterAngle = (float)tempf; - prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off. - break; - - case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_SOURCE: - try - { - tmpi = (int)rules.GetLSLIntegerItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_BLEND_FUNC_SOURCE: arg #{0} - parameter 1 must be integer", i + 1)); - return; - } - prules.BlendFuncSource = (byte)tmpi; - break; - - case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_DEST: - try - { - tmpi = (int)rules.GetLSLIntegerItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_BLEND_FUNC_DEST: arg #{0} - parameter 1 must be integer", i + 1)); - return; - } - prules.BlendFuncDest = (byte)tmpi; - break; - - case (int)ScriptBaseClass.PSYS_PART_START_GLOW: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_START_GLOW: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.PartStartGlow = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_PART_END_GLOW: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_PART_END_GLOW: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.PartEndGlow = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_TEXTURE: - try - { - prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetLSLStringItem(i + 1)); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_TEXTURE: arg #{0} - parameter 1 must be string or key", i + 1)); - return; - } - break; - - case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_RATE: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.BurstRate = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT: - try - { - prules.BurstPartCount = (byte)(int)rules.GetLSLIntegerItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_PART_COUNT: arg #{0} - parameter 1 must be integer", i + 1)); - return; - } - break; - - case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_RADIUS: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.BurstRadius = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_SPEED_MIN: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.BurstSpeedMin = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_SPEED_MAX: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.BurstSpeedMax = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_MAX_AGE: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.MaxAge = (float)tempf; - break; - - case (int)ScriptBaseClass.PSYS_SRC_TARGET_KEY: - UUID key = UUID.Zero; - if (UUID.TryParse(rules.Data[i + 1].ToString(), out key)) - { - prules.Target = key; - } - else - { - prules.Target = part.UUID; - } - break; - - case (int)ScriptBaseClass.PSYS_SRC_OMEGA: - // AL: This is an assumption, since it is the only thing that would match. - try - { - tempv = rules.GetVector3Item(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_OMEGA: arg #{0} - parameter 1 must be vector", i + 1)); - return; - } - prules.AngularVelocity.X = (float)tempv.x; - prules.AngularVelocity.Y = (float)tempv.y; - prules.AngularVelocity.Z = (float)tempv.z; - break; - - case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_ANGLE_BEGIN: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.InnerAngle = (float)tempf; - prules.PartFlags |= 0x02; // Set new angle format. - break; - - case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END: - try - { - tempf = (float)rules.GetLSLFloatItem(i + 1); - } - catch (InvalidCastException) - { - Error(originFunc, string.Format("Error running rule PSYS_SRC_ANGLE_END: arg #{0} - parameter 1 must be float", i + 1)); - return; - } - prules.OuterAngle = (float)tempf; - prules.PartFlags |= 0x02; // Set new angle format. - break; - } - - } - prules.CRC = 1; - - part.AddNewParticleSystem(prules); - part.ParentGroup.HasGroupChanged = true; - } - part.SendFullUpdateToAllClients(); - } - - private float validParticleScale(float value) - { - if (value > 4.0f) return 4.0f; - return value; - } - - public void llGroundRepel(double height, int water, double tau) - { - m_host.AddScriptLPS(1); - if (m_host.PhysActor != null) - { - float ground = (float)llGround(new LSL_Types.Vector3(0, 0, 0)); - float waterLevel = (float)llWater(new LSL_Types.Vector3(0, 0, 0)); - PIDHoverType hoverType = PIDHoverType.Ground; - if (water != 0) - { - hoverType = PIDHoverType.GroundAndWater; - if (ground < waterLevel) - height += waterLevel; - else - height += ground; - } - else - { - height += ground; - } - - m_host.SetHoverHeight((float)height, hoverType, (float)tau); - } - } - - public void llGiveInventoryList(string destination, string category, LSL_List inventory) - { - m_host.AddScriptLPS(1); - - UUID destID; - if (!UUID.TryParse(destination, out destID)) - return; - - List itemList = new List(); - - foreach (Object item in inventory.Data) - { - string rawItemString = item.ToString(); - - UUID itemID; - if (UUID.TryParse(rawItemString, out itemID)) - { - itemList.Add(itemID); - } - else - { - TaskInventoryItem taskItem = m_host.Inventory.GetInventoryItem(rawItemString); - - if (taskItem != null) - itemList.Add(taskItem.ItemID); - } - } - - if (itemList.Count == 0) - return; - - UUID folderID = m_ScriptEngine.World.MoveTaskInventoryItems(destID, category, m_host, itemList); - - if (folderID == UUID.Zero) - return; - - if (m_TransferModule != null) - { - byte[] bucket = new byte[] { (byte)AssetType.Folder }; - - Vector3 pos = m_host.AbsolutePosition; - - GridInstantMessage msg = new GridInstantMessage(World, - m_host.OwnerID, m_host.Name, destID, - (byte)InstantMessageDialog.TaskInventoryOffered, - false, string.Format("'{0}'", category), -// We won't go so far as to add a SLURL, but this is the format used by LL as of 2012-10-06 -// false, string.Format("'{0}' ( http://slurl.com/secondlife/{1}/{2}/{3}/{4} )", category, World.Name, (int)pos.X, (int)pos.Y, (int)pos.Z), - folderID, false, pos, - bucket, false); - - m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); - } - } - - public void llSetVehicleType(int type) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleType(type); - } - } - - //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in - //CFK 9/28: so these are not complete yet. - public void llSetVehicleFloatParam(int param, LSL_Float value) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleFloatParam(param, (float)value); - } - } - - //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in - //CFK 9/28: so these are not complete yet. - public void llSetVehicleVectorParam(int param, LSL_Vector vec) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, vec); - } - } - - //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in - //CFK 9/28: so these are not complete yet. - public void llSetVehicleRotationParam(int param, LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, rot); - } - } - - public void llSetVehicleFlags(int flags) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false); - } - } - - public void llRemoveVehicleFlags(int flags) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true); - } - } - - protected void SitTarget(SceneObjectPart part, LSL_Vector offset, LSL_Rotation rot) - { - part.SitTargetPosition = offset; - part.SitTargetOrientation = rot; - part.ParentGroup.HasGroupChanged = true; - } - - public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - SitTarget(m_host, offset, rot); - } - - public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot) - { - m_host.AddScriptLPS(1); - if (link == ScriptBaseClass.LINK_ROOT) - SitTarget(m_host.ParentGroup.RootPart, offset, rot); - else if (link == ScriptBaseClass.LINK_THIS) - SitTarget(m_host, offset, rot); - else - { - SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); - if (null != part) - { - SitTarget(part, offset, rot); - } - } - } - - public LSL_String llAvatarOnSitTarget() - { - m_host.AddScriptLPS(1); - return m_host.SitTargetAvatar.ToString(); - } - - // http://wiki.secondlife.com/wiki/LlAvatarOnLinkSitTarget - public LSL_String llAvatarOnLinkSitTarget(int linknum) - { - m_host.AddScriptLPS(1); - if(linknum == ScriptBaseClass.LINK_SET || - linknum == ScriptBaseClass.LINK_ALL_CHILDREN || - linknum == ScriptBaseClass.LINK_ALL_OTHERS) return UUID.Zero.ToString(); - - List parts = GetLinkParts(linknum); - if (parts.Count == 0) return UUID.Zero.ToString(); - return parts[0].SitTargetAvatar.ToString(); - } - - - public void llAddToLandPassList(string avatar, double hours) - { - m_host.AddScriptLPS(1); - UUID key; - ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - - if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned)) - { - int expires = 0; - if (hours != 0) - expires = Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours); - - if (UUID.TryParse(avatar, out key)) - { - int idx = land.LandData.ParcelAccessList.FindIndex( - delegate(LandAccessEntry e) - { - if (e.AgentID == key && e.Flags == AccessList.Access) - return true; - return false; - }); - - if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires))) - return; - - if (idx != -1) - land.LandData.ParcelAccessList.RemoveAt(idx); - - LandAccessEntry entry = new LandAccessEntry(); - - entry.AgentID = key; - entry.Flags = AccessList.Access; - entry.Expires = expires; - - land.LandData.ParcelAccessList.Add(entry); - - World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); - } - } - ScriptSleep(m_sleepMsOnAddToLandPassList); - } - - public void llSetTouchText(string text) - { - m_host.AddScriptLPS(1); - m_host.TouchName = text; - } - - public void llSetSitText(string text) - { - m_host.AddScriptLPS(1); - m_host.SitName = text; - } - - public void llSetCameraEyeOffset(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - m_host.SetCameraEyeOffset(offset); - - if (m_host.ParentGroup.RootPart.GetCameraEyeOffset() == Vector3.Zero) - m_host.ParentGroup.RootPart.SetCameraEyeOffset(offset); - } - - public void llSetCameraAtOffset(LSL_Vector offset) - { - m_host.AddScriptLPS(1); - m_host.SetCameraAtOffset(offset); - - if (m_host.ParentGroup.RootPart.GetCameraAtOffset() == Vector3.Zero) - m_host.ParentGroup.RootPart.SetCameraAtOffset(offset); - } - - public void llSetLinkCamera(LSL_Integer link, LSL_Vector eye, LSL_Vector at) - { - m_host.AddScriptLPS(1); - - if (link == ScriptBaseClass.LINK_SET || - link == ScriptBaseClass.LINK_ALL_CHILDREN || - link == ScriptBaseClass.LINK_ALL_OTHERS) return; - - SceneObjectPart part = null; - - switch (link) - { - case ScriptBaseClass.LINK_ROOT: - part = m_host.ParentGroup.RootPart; - break; - case ScriptBaseClass.LINK_THIS: - part = m_host; - break; - default: - part = m_host.ParentGroup.GetLinkNumPart(link); - break; - } - - if (null != part) - { - part.SetCameraEyeOffset(eye); - part.SetCameraAtOffset(at); - } - } - - public LSL_String llDumpList2String(LSL_List src, string seperator) - { - m_host.AddScriptLPS(1); - if (src.Length == 0) - { - return String.Empty; - } - string ret = String.Empty; - foreach (object o in src.Data) - { - ret = ret + o.ToString() + seperator; - } - ret = ret.Substring(0, ret.Length - seperator.Length); - return ret; - } - - public LSL_Integer llScriptDanger(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - bool result = World.ScriptDanger(m_host.LocalId, pos); - if (result) - { - return 1; - } - else - { - return 0; - } - - } - - public void llDialog(string avatar, string message, LSL_List buttons, int chat_channel) - { - IDialogModule dm = World.RequestModuleInterface(); - - if (dm == null) - return; - - m_host.AddScriptLPS(1); - UUID av = new UUID(); - if (!UUID.TryParse(avatar,out av)) - { - Error("llDialog", "First parameter must be a key"); - return; - } - if (buttons.Length < 1) - { - Error("llDialog", "At least 1 button must be shown"); - return; - } - if (buttons.Length > 12) - { - Error("llDialog", "No more than 12 buttons can be shown"); - return; - } - string[] buts = new string[buttons.Length]; - for (int i = 0; i < buttons.Length; i++) - { - if (buttons.Data[i].ToString() == String.Empty) - { - Error("llDialog", "Button label cannot be blank"); - return; - } - if (buttons.Data[i].ToString().Length > 24) - { - Error("llDialog", "Button label cannot be longer than 24 characters"); - return; - } - buts[i] = buttons.Data[i].ToString(); - } - - dm.SendDialogToUser( - av, m_host.Name, m_host.UUID, m_host.OwnerID, - message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); - - ScriptSleep(m_sleepMsOnDialog); - } - - public void llVolumeDetect(int detect) - { - m_host.AddScriptLPS(1); - - if (!m_host.ParentGroup.IsDeleted) - m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0); - } - - public void llRemoteLoadScript(string target, string name, int running, int start_param) - { - m_host.AddScriptLPS(1); - Deprecated("llRemoteLoadScript", "Use llRemoteLoadScriptPin instead"); - ScriptSleep(m_sleepMsOnRemoteLoadScript); - } - - public void llSetRemoteScriptAccessPin(int pin) - { - m_host.AddScriptLPS(1); - m_host.ScriptAccessPin = pin; - } - - public void llRemoteLoadScriptPin(string target, string name, int pin, int running, int start_param) - { - m_host.AddScriptLPS(1); - - UUID destId = UUID.Zero; - - if (!UUID.TryParse(target, out destId)) - { - Error("llRemoteLoadScriptPin", "Can't parse key '" + target + "'"); - return; - } - - // target must be a different prim than the one containing the script - if (m_host.UUID == destId) - { - return; - } - - // copy the first script found with this inventory name - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - // make sure the object is a script - if (item == null || item.Type != 10) - { - Error("llRemoteLoadScriptPin", "Can't find script '" + name + "'"); - return; - } - - // the rest of the permission checks are done in RezScript, so check the pin there as well - World.RezScriptFromPrim(item.ItemID, m_host, destId, pin, running, start_param); - - // this will cause the delay even if the script pin or permissions were wrong - seems ok - ScriptSleep(m_sleepMsOnRemoteLoadScriptPin); - } - - public void llOpenRemoteDataChannel() - { - m_host.AddScriptLPS(1); - IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); - if (xmlrpcMod != null && xmlrpcMod.IsEnabled()) - { - UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_host.LocalId, m_item.ItemID, UUID.Zero); - IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface(); - if (xmlRpcRouter != null) - { - string ExternalHostName = m_ScriptEngine.World.RegionInfo.ExternalHostName; - - xmlRpcRouter.RegisterNewReceiver(m_ScriptEngine.ScriptModule, channelID, m_host.UUID, - m_item.ItemID, String.Format("http://{0}:{1}/", ExternalHostName, - xmlrpcMod.Port.ToString())); - } - object[] resobj = new object[] - { - new LSL_Integer(1), - new LSL_String(channelID.ToString()), - new LSL_String(UUID.Zero.ToString()), - new LSL_String(String.Empty), - new LSL_Integer(0), - new LSL_String(String.Empty) - }; - m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams("remote_data", resobj, - new DetectParams[0])); - } - ScriptSleep(m_sleepMsOnOpenRemoteDataChannel); - } - - public LSL_String llSendRemoteData(string channel, string dest, int idata, string sdata) - { - m_host.AddScriptLPS(1); - IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); - ScriptSleep(m_sleepMsOnSendRemoteData); - if (xmlrpcMod == null) - return ""; - return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString(); - } - - public void llRemoteDataReply(string channel, string message_id, string sdata, int idata) - { - m_host.AddScriptLPS(1); - IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); - if (xmlrpcMod != null) - xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); - ScriptSleep(m_sleepMsOnRemoteDataReply); - } - - public void llCloseRemoteDataChannel(string channel) - { - m_host.AddScriptLPS(1); - - IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface(); - if (xmlRpcRouter != null) - { - xmlRpcRouter.UnRegisterReceiver(channel, m_item.ItemID); - } - - IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); - if (xmlrpcMod != null) - xmlrpcMod.CloseXMLRPCChannel((UUID)channel); - ScriptSleep(m_sleepMsOnCloseRemoteDataChannel); - } - - public LSL_String llMD5String(string src, int nonce) - { - m_host.AddScriptLPS(1); - return Util.Md5Hash(String.Format("{0}:{1}", src, nonce.ToString())); - } - - public LSL_String llSHA1String(string src) - { - m_host.AddScriptLPS(1); - return Util.SHA1Hash(src).ToLower(); - } - - protected ObjectShapePacket.ObjectDataBlock SetPrimitiveBlockShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, byte profileshape, byte pathcurve) - { - float tempFloat; // Use in float expressions below to avoid byte cast precision issues. - ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); - - if (holeshape != (int)ScriptBaseClass.PRIM_HOLE_DEFAULT && - holeshape != (int)ScriptBaseClass.PRIM_HOLE_CIRCLE && - holeshape != (int)ScriptBaseClass.PRIM_HOLE_SQUARE && - holeshape != (int)ScriptBaseClass.PRIM_HOLE_TRIANGLE) - { - holeshape = (int)ScriptBaseClass.PRIM_HOLE_DEFAULT; - } - shapeBlock.PathCurve = pathcurve; - shapeBlock.ProfileCurve = (byte)holeshape; // Set the hole shape. - shapeBlock.ProfileCurve += profileshape; // Add in the profile shape. - if (cut.x < 0f) - { - cut.x = 0f; - } - if (cut.x > 1f) - { - cut.x = 1f; - } - if (cut.y < 0f) - { - cut.y = 0f; - } - if (cut.y > 1f) - { - cut.y = 1f; - } - if (cut.y - cut.x < 0.02f) - { - cut.x = cut.y - 0.02f; - if (cut.x < 0.0f) - { - cut.x = 0.0f; - cut.y = 0.02f; - } - } - shapeBlock.ProfileBegin = (ushort)(50000 * cut.x); - shapeBlock.ProfileEnd = (ushort)(50000 * (1 - cut.y)); - if (hollow < 0f) - { - hollow = 0f; - } - // If the prim is a Cylinder, Prism, Sphere, Torus or Ring (or not a - // Box or Tube) and the hole shape is a square, hollow is limited to - // a max of 70%. The viewer performs its own check on this value but - // we need to do it here also so llGetPrimitiveParams can have access - // to the correct value. - if (profileshape != (byte)ProfileCurve.Square && - holeshape == (int)ScriptBaseClass.PRIM_HOLE_SQUARE) - { - if (hollow > 0.70f) - { - hollow = 0.70f; - } - } - // Otherwise, hollow is limited to 99%. - else - { - if (hollow > 0.99f) - { - hollow = 0.99f; - } - } - shapeBlock.ProfileHollow = (ushort)(50000 * hollow); - if (twist.x < -1.0f) - { - twist.x = -1.0f; - } - if (twist.x > 1.0f) - { - twist.x = 1.0f; - } - if (twist.y < -1.0f) - { - twist.y = -1.0f; - } - if (twist.y > 1.0f) - { - twist.y = 1.0f; - } - // A fairly large precision error occurs for some calculations, - // if a float or double is directly cast to a byte or sbyte - // variable, in both .Net and Mono. In .Net, coding - // "(sbyte)(float)(some expression)" corrects the precision - // errors. But this does not work for Mono. This longer coding - // form of creating a tempoary float variable from the - // expression first, then casting that variable to a byte or - // sbyte, works for both .Net and Mono. These types of - // assignments occur in SetPrimtiveBlockShapeParams and - // SetPrimitiveShapeParams in support of llSetPrimitiveParams. - tempFloat = (float)(100.0d * twist.x); - shapeBlock.PathTwistBegin = (sbyte)tempFloat; - tempFloat = (float)(100.0d * twist.y); - shapeBlock.PathTwist = (sbyte)tempFloat; - - shapeBlock.ObjectLocalID = part.LocalId; - - part.Shape.SculptEntry = false; - return shapeBlock; - } - - // Prim type box, cylinder and prism. - protected void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, LSL_Vector taper_b, LSL_Vector topshear, byte profileshape, byte pathcurve) - { - float tempFloat; // Use in float expressions below to avoid byte cast precision issues. - ObjectShapePacket.ObjectDataBlock shapeBlock; - - shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist, profileshape, pathcurve); - - if (taper_b.x < 0f) - { - taper_b.x = 0f; - } - if (taper_b.x > 2f) - { - taper_b.x = 2f; - } - if (taper_b.y < 0f) - { - taper_b.y = 0f; - } - if (taper_b.y > 2f) - { - taper_b.y = 2f; - } - tempFloat = (float)(100.0d * (2.0d - taper_b.x)); - shapeBlock.PathScaleX = (byte)tempFloat; - tempFloat = (float)(100.0d * (2.0d - taper_b.y)); - shapeBlock.PathScaleY = (byte)tempFloat; - if (topshear.x < -0.5f) - { - topshear.x = -0.5f; - } - if (topshear.x > 0.5f) - { - topshear.x = 0.5f; - } - if (topshear.y < -0.5f) - { - topshear.y = -0.5f; - } - if (topshear.y > 0.5f) - { - topshear.y = 0.5f; - } - tempFloat = (float)(100.0d * topshear.x); - shapeBlock.PathShearX = (byte)tempFloat; - tempFloat = (float)(100.0d * topshear.y); - shapeBlock.PathShearY = (byte)tempFloat; - - part.Shape.SculptEntry = false; - part.UpdateShape(shapeBlock); - } - - // Prim type sphere. - protected void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, LSL_Vector dimple, byte profileshape, byte pathcurve) - { - ObjectShapePacket.ObjectDataBlock shapeBlock; - - shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist, profileshape, pathcurve); - - // profile/path swapped for a sphere - shapeBlock.PathBegin = shapeBlock.ProfileBegin; - shapeBlock.PathEnd = shapeBlock.ProfileEnd; - - shapeBlock.PathScaleX = 100; - shapeBlock.PathScaleY = 100; - - if (dimple.x < 0f) - { - dimple.x = 0f; - } - if (dimple.x > 1f) - { - dimple.x = 1f; - } - if (dimple.y < 0f) - { - dimple.y = 0f; - } - if (dimple.y > 1f) - { - dimple.y = 1f; - } - if (dimple.y - dimple.x < 0.02f) - { - dimple.x = dimple.y - 0.02f; - if (dimple.x < 0.0f) - { - dimple.x = 0.0f; - dimple.y = 0.02f; - } - } - shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x); - shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y)); - - part.Shape.SculptEntry = false; - part.UpdateShape(shapeBlock); - } - - // Prim type torus, tube and ring. - protected void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, LSL_Vector holesize, LSL_Vector topshear, LSL_Vector profilecut, LSL_Vector taper_a, float revolutions, float radiusoffset, float skew, byte profileshape, byte pathcurve) - { - float tempFloat; // Use in float expressions below to avoid byte cast precision issues. - ObjectShapePacket.ObjectDataBlock shapeBlock; - - shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist, profileshape, pathcurve); - - // profile/path swapped for a torrus, tube, ring - shapeBlock.PathBegin = shapeBlock.ProfileBegin; - shapeBlock.PathEnd = shapeBlock.ProfileEnd; - - if (holesize.x < 0.01f) - { - holesize.x = 0.01f; - } - if (holesize.x > 1f) - { - holesize.x = 1f; - } - if (holesize.y < 0.01f) - { - holesize.y = 0.01f; - } - if (holesize.y > 0.5f) - { - holesize.y = 0.5f; - } - tempFloat = (float)(100.0d * (2.0d - holesize.x)); - shapeBlock.PathScaleX = (byte)tempFloat; - tempFloat = (float)(100.0d * (2.0d - holesize.y)); - shapeBlock.PathScaleY = (byte)tempFloat; - if (topshear.x < -0.5f) - { - topshear.x = -0.5f; - } - if (topshear.x > 0.5f) - { - topshear.x = 0.5f; - } - if (topshear.y < -0.5f) - { - topshear.y = -0.5f; - } - if (topshear.y > 0.5f) - { - topshear.y = 0.5f; - } - tempFloat = (float)(100.0d * topshear.x); - shapeBlock.PathShearX = (byte)tempFloat; - tempFloat = (float)(100.0d * topshear.y); - shapeBlock.PathShearY = (byte)tempFloat; - if (profilecut.x < 0f) - { - profilecut.x = 0f; - } - if (profilecut.x > 1f) - { - profilecut.x = 1f; - } - if (profilecut.y < 0f) - { - profilecut.y = 0f; - } - if (profilecut.y > 1f) - { - profilecut.y = 1f; - } - if (profilecut.y - profilecut.x < 0.02f) - { - profilecut.x = profilecut.y - 0.02f; - if (profilecut.x < 0.0f) - { - profilecut.x = 0.0f; - profilecut.y = 0.02f; - } - } - shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x); - shapeBlock.ProfileEnd = (ushort)(50000 * (1 - profilecut.y)); - if (taper_a.x < -1f) - { - taper_a.x = -1f; - } - if (taper_a.x > 1f) - { - taper_a.x = 1f; - } - if (taper_a.y < -1f) - { - taper_a.y = -1f; - } - if (taper_a.y > 1f) - { - taper_a.y = 1f; - } - tempFloat = (float)(100.0d * taper_a.x); - shapeBlock.PathTaperX = (sbyte)tempFloat; - tempFloat = (float)(100.0d * taper_a.y); - shapeBlock.PathTaperY = (sbyte)tempFloat; - if (revolutions < 1f) - { - revolutions = 1f; - } - if (revolutions > 4f) - { - revolutions = 4f; - } - tempFloat = 66.66667f * (revolutions - 1.0f); - shapeBlock.PathRevolutions = (byte)tempFloat; - // limits on radiusoffset depend on revolutions and hole size (how?) seems like the maximum range is 0 to 1 - if (radiusoffset < 0f) - { - radiusoffset = 0f; - } - if (radiusoffset > 1f) - { - radiusoffset = 1f; - } - tempFloat = 100.0f * radiusoffset; - shapeBlock.PathRadiusOffset = (sbyte)tempFloat; - if (skew < -0.95f) - { - skew = -0.95f; - } - if (skew > 0.95f) - { - skew = 0.95f; - } - tempFloat = 100.0f * skew; - shapeBlock.PathSkew = (sbyte)tempFloat; - - part.Shape.SculptEntry = false; - part.UpdateShape(shapeBlock); - } - - // Prim type sculpt. - protected void SetPrimitiveShapeParams(SceneObjectPart part, string map, int type, byte pathcurve) - { - ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); - UUID sculptId; - - if (!UUID.TryParse(map, out sculptId)) - sculptId = ScriptUtils.GetAssetIdFromItemName(m_host, map, (int)AssetType.Texture); - - if (sculptId == UUID.Zero) - return; - - shapeBlock.PathCurve = pathcurve; - shapeBlock.ObjectLocalID = part.LocalId; - shapeBlock.PathScaleX = 100; - shapeBlock.PathScaleY = 150; - - int flag = type & (ScriptBaseClass.PRIM_SCULPT_FLAG_INVERT | ScriptBaseClass.PRIM_SCULPT_FLAG_MIRROR); - - if (type != (ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER | flag) && - type != (ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE | flag) && - type != (ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE | flag) && - type != (ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS | flag)) - { - // default - type = (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE; - } - - part.Shape.SetSculptProperties((byte)type, sculptId); - part.Shape.SculptEntry = true; - part.UpdateShape(shapeBlock); - } - - public void llSetPrimitiveParams(LSL_List rules) - { - m_host.AddScriptLPS(1); - - SetLinkPrimParams(ScriptBaseClass.LINK_THIS, rules, "llSetPrimitiveParams"); - - ScriptSleep(m_sleepMsOnSetPrimitiveParams); - } - - public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) - { - m_host.AddScriptLPS(1); - - SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParams"); - - ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); - } - - public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) - { - m_host.AddScriptLPS(1); - - SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); - } - - protected void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc) - { - SetEntityParams(GetLinkEntities(linknumber), rules, originFunc); - } - - protected void SetEntityParams(List entities, LSL_List rules, string originFunc) - { - LSL_List remaining = null; - uint rulesParsed = 0; - - foreach (ISceneEntity entity in entities) - { - if (entity is SceneObjectPart) - remaining = SetPrimParams((SceneObjectPart)entity, rules, originFunc, ref rulesParsed); - else - remaining = SetAgentParams((ScenePresence)entity, rules, originFunc, ref rulesParsed); - } - - while (remaining != null && remaining.Length > 2) - { - int linknumber; - try - { - linknumber = remaining.GetLSLIntegerItem(0); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_LINK_TARGET: parameter 2 must be integer", rulesParsed)); - return; - } - - rules = remaining.GetSublist(1, -1); - entities = GetLinkEntities(linknumber); - - foreach (ISceneEntity entity in entities) - { - if (entity is SceneObjectPart) - remaining = SetPrimParams((SceneObjectPart)entity, rules, originFunc, ref rulesParsed); - else - remaining = SetAgentParams((ScenePresence)entity, rules, originFunc, ref rulesParsed); - } - } - } - - public void llSetKeyframedMotion(LSL_List frames, LSL_List options) - { - SceneObjectGroup group = m_host.ParentGroup; - - if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical) - return; - if (group.IsAttachment) - return; - - if (frames.Data.Length > 0) // We are getting a new motion - { - if (group.RootPart.KeyframeMotion != null) - group.RootPart.KeyframeMotion.Delete(); - group.RootPart.KeyframeMotion = null; - - int idx = 0; - - KeyframeMotion.PlayMode mode = KeyframeMotion.PlayMode.Forward; - KeyframeMotion.DataFormat data = KeyframeMotion.DataFormat.Translation | KeyframeMotion.DataFormat.Rotation; - - while (idx < options.Data.Length) - { - int option = (int)options.GetLSLIntegerItem(idx++); - int remain = options.Data.Length - idx; - - switch (option) - { - case ScriptBaseClass.KFM_MODE: - if (remain < 1) - break; - int modeval = (int)options.GetLSLIntegerItem(idx++); - switch(modeval) - { - case ScriptBaseClass.KFM_FORWARD: - mode = KeyframeMotion.PlayMode.Forward; - break; - case ScriptBaseClass.KFM_REVERSE: - mode = KeyframeMotion.PlayMode.Reverse; - break; - case ScriptBaseClass.KFM_LOOP: - mode = KeyframeMotion.PlayMode.Loop; - break; - case ScriptBaseClass.KFM_PING_PONG: - mode = KeyframeMotion.PlayMode.PingPong; - break; - } - break; - case ScriptBaseClass.KFM_DATA: - if (remain < 1) - break; - int dataval = (int)options.GetLSLIntegerItem(idx++); - data = (KeyframeMotion.DataFormat)dataval; - break; - } - } - - group.RootPart.KeyframeMotion = new KeyframeMotion(group, mode, data); - - idx = 0; - - int elemLength = 2; - if (data == (KeyframeMotion.DataFormat.Translation | KeyframeMotion.DataFormat.Rotation)) - elemLength = 3; - - List keyframes = new List(); - while (idx < frames.Data.Length) - { - int remain = frames.Data.Length - idx; - - if (remain < elemLength) - break; - - KeyframeMotion.Keyframe frame = new KeyframeMotion.Keyframe(); - frame.Position = null; - frame.Rotation = null; - - if ((data & KeyframeMotion.DataFormat.Translation) != 0) - { - LSL_Types.Vector3 tempv = frames.GetVector3Item(idx++); - frame.Position = new Vector3((float)tempv.x, (float)tempv.y, (float)tempv.z); - } - if ((data & KeyframeMotion.DataFormat.Rotation) != 0) - { - LSL_Types.Quaternion tempq = frames.GetQuaternionItem(idx++); - Quaternion q = new Quaternion((float)tempq.x, (float)tempq.y, (float)tempq.z, (float)tempq.s); - q.Normalize(); - frame.Rotation = q; - } - - float tempf = (float)frames.GetLSLFloatItem(idx++); - frame.TimeMS = (int)(tempf * 1000.0f); - - keyframes.Add(frame); - } - - group.RootPart.KeyframeMotion.SetKeyframes(keyframes.ToArray()); - group.RootPart.KeyframeMotion.Start(); - } - else - { - if (group.RootPart.KeyframeMotion == null) - return; - - if (options.Data.Length == 0) - { - group.RootPart.KeyframeMotion.Stop(); - return; - } - - int idx = 0; - - while (idx < options.Data.Length) - { - int option = (int)options.GetLSLIntegerItem(idx++); - - switch (option) - { - case ScriptBaseClass.KFM_COMMAND: - int cmd = (int)options.GetLSLIntegerItem(idx++); - switch (cmd) - { - case ScriptBaseClass.KFM_CMD_PLAY: - group.RootPart.KeyframeMotion.Start(); - break; - case ScriptBaseClass.KFM_CMD_STOP: - group.RootPart.KeyframeMotion.Stop(); - break; - case ScriptBaseClass.KFM_CMD_PAUSE: - group.RootPart.KeyframeMotion.Pause(); - break; - } - break; - } - } - } - } - - protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed) - { - int idx = 0; - int idxStart = 0; - - bool positionChanged = false; - LSL_Vector currentPosition = GetPartLocalPos(part); - - try - { - while (idx < rules.Length) - { - ++rulesParsed; - int code = rules.GetLSLIntegerItem(idx++); - - int remain = rules.Length - idx; - idxStart = idx; - - int face; - LSL_Vector v; - - switch (code) - { - case ScriptBaseClass.PRIM_POSITION: - case ScriptBaseClass.PRIM_POS_LOCAL: - if (remain < 1) - return null; - - try - { - v = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - if(code == ScriptBaseClass.PRIM_POSITION) - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); - else - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - positionChanged = true; - currentPosition = GetSetPosTarget(part, v, currentPosition); - - break; - case ScriptBaseClass.PRIM_SIZE: - if (remain < 1) - return null; - - v=rules.GetVector3Item(idx++); - SetScale(part, v); - - break; - case ScriptBaseClass.PRIM_ROTATION: - if (remain < 1) - return null; - LSL_Rotation q; - try - { - q = rules.GetQuaternionItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROTATION: arg #{1} - parameter 1 must be rotation", rulesParsed, idx - idxStart - 1)); - return null; - } - // try to let this work as in SL... - if (part.ParentID == 0) - { - // special case: If we are root, rotate complete SOG to new rotation - SetRot(part, q); - } - else - { - // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. - SceneObjectPart rootPart = part.ParentGroup.RootPart; - SetRot(part, rootPart.RotationOffset * (Quaternion)q); - } - - break; - - case ScriptBaseClass.PRIM_TYPE: - if (remain < 3) - return null; - - try - { - code = (int)rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE: arg #{1} - parameter 1 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - - remain = rules.Length - idx; - float hollow; - LSL_Vector twist; - LSL_Vector taper_b; - LSL_Vector topshear; - float revolutions; - float radiusoffset; - float skew; - LSL_Vector holesize; - LSL_Vector profilecut; - - switch (code) - { - case ScriptBaseClass.PRIM_TYPE_BOX: - if (remain < 6) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); // cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 5 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - topshear = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - - SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, - (byte)ProfileShape.Square, (byte)Extrusion.Straight); - break; - - case ScriptBaseClass.PRIM_TYPE_CYLINDER: - if (remain < 6) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // holeshape - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); // cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - topshear = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, - (byte)ProfileShape.Circle, (byte)Extrusion.Straight); - break; - - case ScriptBaseClass.PRIM_TYPE_PRISM: - if (remain < 6) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // holeshape - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); //cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - topshear = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, - (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Straight); - break; - - case ScriptBaseClass.PRIM_TYPE_SPHERE: - if (remain < 5) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // holeshape - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); // cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); // dimple - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, - (byte)ProfileShape.HalfCircle, (byte)Extrusion.Curve1); - break; - - case ScriptBaseClass.PRIM_TYPE_TORUS: - if (remain < 11) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // holeshape - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); //cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - holesize = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - topshear = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - profilecut = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); // taper_a - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - revolutions = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - radiusoffset = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - skew = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 13 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, - revolutions, radiusoffset, skew, (byte)ProfileShape.Circle, (byte)Extrusion.Curve1); - break; - - case ScriptBaseClass.PRIM_TYPE_TUBE: - if (remain < 11) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // holeshape - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); //cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - holesize = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - topshear = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - profilecut = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); // taper_a - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - revolutions = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - radiusoffset = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - skew = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 13 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, - revolutions, radiusoffset, skew, (byte)ProfileShape.Square, (byte)Extrusion.Curve1); - break; - - case ScriptBaseClass.PRIM_TYPE_RING: - if (remain < 11) - return null; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // holeshape - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - v = rules.GetVector3Item(idx++); //cut - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - hollow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - twist = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - holesize = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - topshear = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - profilecut = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - taper_b = rules.GetVector3Item(idx++); // taper_a - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - revolutions = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - radiusoffset = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - skew = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 13 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, - revolutions, radiusoffset, skew, (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Curve1); - break; - - case ScriptBaseClass.PRIM_TYPE_SCULPT: - if (remain < 2) - return null; - - string map = rules.Data[idx++].ToString(); - try - { - face = (int)rules.GetLSLIntegerItem(idx++); // type - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SCULPT: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - SetPrimitiveShapeParams(part, map, face, (byte)Extrusion.Curve1); - break; - } - - break; - - case ScriptBaseClass.PRIM_TEXTURE: - if (remain < 5) - return null; - - face=(int)rules.GetLSLIntegerItem(idx++); - string tex; - LSL_Vector repeats; - LSL_Vector offsets; - double rotation; - - tex = rules.Data[idx++].ToString(); - try - { - repeats = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - offsets = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - rotation = (double)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - - SetTexture(part, tex, face); - ScaleTexture(part, repeats.x, repeats.y, face); - OffsetTexture(part, offsets.x, offsets.y, face); - RotateTexture(part, rotation, face); - - break; - - case ScriptBaseClass.PRIM_COLOR: - if (remain < 3) - return null; - - LSL_Vector color; - double alpha; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - color = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - alpha = (double)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - - part.SetFaceColorAlpha(face, color, alpha); - - break; - - case ScriptBaseClass.PRIM_FLEXIBLE: - if (remain < 7) - return null; - bool flexi; - int softness; - float gravity; - float friction; - float wind; - float tension; - LSL_Vector force; - - try - { - flexi = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - softness = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - gravity = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - friction = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - wind = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 6 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - tension = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 7 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - force = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - - SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force); - - break; - - case ScriptBaseClass.PRIM_POINT_LIGHT: - if (remain < 5) - return null; - bool light; - LSL_Vector lightcolor; - float intensity; - float radius; - float falloff; - - try - { - light = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - lightcolor = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - intensity = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - radius = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - falloff = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 6 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - - SetPointLight(part, light, lightcolor, intensity, radius, falloff); - - break; - - case ScriptBaseClass.PRIM_GLOW: - if (remain < 2) - return null; - - float glow; - - try - { - face = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_GLOW: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - glow = (float)rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_GLOW: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - - SetGlow(part, face, glow); - - break; - - case ScriptBaseClass.PRIM_BUMP_SHINY: - if (remain < 3) - return null; - - int shiny; - Bumpiness bump; - - try - { - face = (int)rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - shiny = (int)rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - bump = (Bumpiness)(int)rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - - SetShiny(part, face, shiny, bump); - - break; - - case ScriptBaseClass.PRIM_FULLBRIGHT: - if (remain < 2) - return null; - bool st; - - try - { - face = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FULLBRIGHT: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - st = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FULLBRIGHT: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - SetFullBright(part, face , st); - break; - - case ScriptBaseClass.PRIM_MATERIAL: - if (remain < 1) - return null; - int mat; - - try - { - mat = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_MATERIAL: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - if (mat < 0 || mat > 7) - return null; - - part.Material = Convert.ToByte(mat); - break; - - case ScriptBaseClass.PRIM_PHANTOM: - if (remain < 1) - return null; - - string ph = rules.Data[idx++].ToString(); - part.ParentGroup.ScriptSetPhantomStatus(ph.Equals("1")); - - break; - - case ScriptBaseClass.PRIM_PHYSICS: - if (remain < 1) - return null; - string phy = rules.Data[idx++].ToString(); - part.ScriptSetPhysicsStatus(phy.Equals("1")); - break; - - case ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: - if (remain < 1) - return null; - - int shape_type; - - try - { - shape_type = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_PHYSICS_SHAPE_TYPE: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - - ExtraPhysicsData physdata = new ExtraPhysicsData(); - physdata.Density = part.Density; - physdata.Bounce = part.Restitution; - physdata.GravitationModifier = part.GravityModifier; - physdata.PhysShapeType = (PhysShapeType)shape_type; - - part.UpdateExtraPhysics(physdata); - - break; - - case ScriptBaseClass.PRIM_TEMP_ON_REZ: - if (remain < 1) - return null; - string temp = rules.Data[idx++].ToString(); - - part.ParentGroup.ScriptSetTemporaryStatus(temp.Equals("1")); - - break; - - case ScriptBaseClass.PRIM_TEXGEN: - if (remain < 2) - return null; - //face,type - int style; - - try - { - face = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXGEN: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - style = rules.GetLSLIntegerItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXGEN: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); - return null; - } - SetTexGen(part, face, style); - break; - case ScriptBaseClass.PRIM_TEXT: - if (remain < 3) - return null; - string primText; - LSL_Vector primTextColor; - LSL_Float primTextAlpha; - - try - { - primText = rules.GetLSLStringItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - primTextColor = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - primTextAlpha = rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - Vector3 av3 = Util.Clip(primTextColor, 0.0f, 1.0f); - part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f)); - - break; - - case ScriptBaseClass.PRIM_NAME: - if (remain < 1) - return null; - try - { - string primName = rules.GetLSLStringItem(idx++); - part.Name = primName; - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_NAME: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); - return null; - } - break; - case ScriptBaseClass.PRIM_DESC: - if (remain < 1) - return null; - try - { - string primDesc = rules.GetLSLStringItem(idx++); - part.Description = primDesc; - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_DESC: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); - return null; - } - break; - case ScriptBaseClass.PRIM_ROT_LOCAL: - if (remain < 1) - return null; - LSL_Rotation rot; - try - { - rot = rules.GetQuaternionItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1)); - return null; - } - SetRot(part, rot); - break; - - case ScriptBaseClass.PRIM_OMEGA: - if (remain < 3) - return null; - LSL_Vector axis; - LSL_Float spinrate; - LSL_Float gain; - - try - { - axis = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - spinrate = rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - try - { - gain = rules.GetLSLFloatItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); - return null; - } - TargetOmega(part, axis, (double)spinrate, (double)gain); - break; - - case ScriptBaseClass.PRIM_SLICE: - if (remain < 1) - return null; - LSL_Vector slice; - try - { - slice = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SLICE: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); - return null; - } - part.UpdateSlice((float)slice.x, (float)slice.y); - break; - - case ScriptBaseClass.PRIM_LINK_TARGET: - if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. - return null; - - return rules.GetSublist(idx, -1); - - default: - Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - unsupported parameter", rulesParsed, idx - idxStart)); - return null; - } - } - } - catch (InvalidCastException e) - { - Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message); - } - finally - { - if (positionChanged) - { - if (part.ParentGroup.RootPart == part) - { - SceneObjectGroup parent = part.ParentGroup; - parent.UpdateGroupPosition(currentPosition); - } - else - { - part.OffsetPosition = currentPosition; - SceneObjectGroup parent = part.ParentGroup; - parent.HasGroupChanged = true; - parent.ScheduleGroupForTerseUpdate(); - } - } - } - - return null; - } - - protected LSL_List SetAgentParams(ScenePresence sp, LSL_List rules, string originFunc, ref uint rulesParsed) - { - int idx = 0; - int idxStart = 0; - - try - { - while (idx < rules.Length) - { - ++rulesParsed; - int code = rules.GetLSLIntegerItem(idx++); - - int remain = rules.Length - idx; - idxStart = idx; - - switch (code) - { - case ScriptBaseClass.PRIM_POSITION: - case ScriptBaseClass.PRIM_POS_LOCAL: - if (remain < 1) - return null; - - try - { - sp.OffsetPosition = rules.GetVector3Item(idx++); - } - catch(InvalidCastException) - { - if (code == ScriptBaseClass.PRIM_POSITION) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); - } - else - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); - } - return null; - } - break; - - case ScriptBaseClass.PRIM_ROTATION: - if (remain < 1) - return null; - - Quaternion inRot; - - try - { - inRot = rules.GetQuaternionItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROTATION: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1)); - return null; - } - - SceneObjectPart parentPart = sp.ParentPart; - - if (parentPart != null) - sp.Rotation = m_host.GetWorldRotation() * inRot; - - break; - - case ScriptBaseClass.PRIM_ROT_LOCAL: - if (remain < 1) - return null; - - try - { - sp.Rotation = rules.GetQuaternionItem(idx++); - } - catch(InvalidCastException) - { - Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1)); - return null; - } - - break; - - case ScriptBaseClass.PRIM_TYPE: - Error(originFunc, "PRIM_TYPE disallowed on agent"); - return null; - - case ScriptBaseClass.PRIM_OMEGA: - Error(originFunc, "PRIM_OMEGA disallowed on agent"); - return null; - - case ScriptBaseClass.PRIM_LINK_TARGET: - if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. - return null; - - return rules.GetSublist(idx, -1); - - default: - Error(originFunc, - string.Format("Error running rule #{0} on agent: arg #{1} - disallowed on agent", rulesParsed, idx - idxStart)); - return null; - } - } - } - catch (InvalidCastException e) - { - Error( - originFunc, - string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message); - } - - return null; - } - - public LSL_String llStringToBase64(string str) - { - m_host.AddScriptLPS(1); - try - { - byte[] encData_byte; - encData_byte = Util.UTF8.GetBytes(str); - string encodedData = Convert.ToBase64String(encData_byte); - return encodedData; - } - catch - { - Error("llBase64ToString", "Error encoding string"); - return String.Empty; - } - } - - public LSL_String llBase64ToString(string str) - { - m_host.AddScriptLPS(1); - try - { - byte[] b = Convert.FromBase64String(str); - return Encoding.UTF8.GetString(b); - } - catch - { - Error("llBase64ToString", "Error decoding string"); - return String.Empty; - } - } - - public LSL_String llXorBase64Strings(string str1, string str2) - { - m_host.AddScriptLPS(1); - Deprecated("llXorBase64Strings", "Use llXorBase64 instead"); - ScriptSleep(m_sleepMsOnXorBase64Strings); - return String.Empty; - } - - public void llRemoteDataSetRegion() - { - m_host.AddScriptLPS(1); - Deprecated("llRemoteDataSetRegion", "Use llOpenRemoteDataChannel instead"); - } - - public LSL_Float llLog10(double val) - { - m_host.AddScriptLPS(1); - return (double)Math.Log10(val); - } - - public LSL_Float llLog(double val) - { - m_host.AddScriptLPS(1); - return (double)Math.Log(val); - } - - public LSL_List llGetAnimationList(string id) - { - m_host.AddScriptLPS(1); - - LSL_List l = new LSL_List(); - ScenePresence av = World.GetScenePresence((UUID)id); - if (av == null || av.IsChildAgent) // only if in the region - return l; - UUID[] anims; - anims = av.Animator.GetAnimationArray(); - foreach (UUID foo in anims) - l.Add(new LSL_Key(foo.ToString())); - return l; - } - - public void llSetParcelMusicURL(string url) - { - m_host.AddScriptLPS(1); - - ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - - if (land.LandData.OwnerID != m_host.OwnerID) - return; - - land.SetMusicUrl(url); - - ScriptSleep(m_sleepMsOnSetParcelMusicURL); - } - - public LSL_String llGetParcelMusicURL() - { - m_host.AddScriptLPS(1); - - ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - - if (land.LandData.OwnerID != m_host.OwnerID) - return String.Empty; - - return land.GetMusicUrl(); - } - - public LSL_Vector llGetRootPosition() - { - m_host.AddScriptLPS(1); - - return new LSL_Vector(m_host.ParentGroup.AbsolutePosition); - } - - /// - /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetRot - /// http://lslwiki.net/lslwiki/wakka.php?wakka=ChildRotation - /// Also tested in sl in regards to the behaviour in attachments/mouselook - /// In the root prim:- - /// Returns the object rotation if not attached - /// Returns the avatars rotation if attached - /// Returns the camera rotation if attached and the avatar is in mouselook - /// - public LSL_Rotation llGetRootRotation() - { - m_host.AddScriptLPS(1); - Quaternion q; - if (m_host.ParentGroup.AttachmentPoint != 0) - { - ScenePresence avatar = World.GetScenePresence(m_host.ParentGroup.AttachedAvatar); - if (avatar != null) - if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) - q = avatar.CameraRotation; // Mouselook - else - q = avatar.GetWorldRotation(); // Currently infrequently updated so may be inaccurate - else - q = m_host.ParentGroup.GroupRotation; // Likely never get here but just in case - } - else - q = m_host.ParentGroup.GroupRotation; // just the group rotation - - return new LSL_Rotation(q); - } - - public LSL_String llGetObjectDesc() - { - return m_host.Description!=null?m_host.Description:String.Empty; - } - - public void llSetObjectDesc(string desc) - { - m_host.AddScriptLPS(1); - m_host.Description = desc!=null?desc:String.Empty; - } - - public LSL_String llGetCreator() - { - m_host.AddScriptLPS(1); - return m_host.CreatorID.ToString(); - } - - public LSL_String llGetTimestamp() - { - m_host.AddScriptLPS(1); - return DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); - } - - public LSL_Integer llGetNumberOfPrims() - { - m_host.AddScriptLPS(1); - - return m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount(); - } - - /// - /// Full implementation of llGetBoundingBox according to SL 2015-04-15. - /// http://wiki.secondlife.com/wiki/LlGetBoundingBox - /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetBoundingBox - /// Returns local bounding box of avatar without attachments - /// if target is non-seated avatar or prim/mesh in avatar attachment. - /// Returns local bounding box of object including seated avatars - /// if target is seated avatar or prim/mesh in object. - /// Uses meshing of prims for high accuracy - /// or less accurate box models for speed. - /// - public LSL_List llGetBoundingBox(string obj) - { - m_host.AddScriptLPS(1); - - // Get target avatar if non-seated avatar or attachment, or prim and object - UUID objID = UUID.Zero; - UUID.TryParse(obj, out objID); - ScenePresence agent = World.GetScenePresence(objID); - if (agent != null) - { - if (agent.ParentPart != null) - { - objID = agent.ParentPart.UUID; - agent = null; - } - } - SceneObjectGroup group = null; - SceneObjectPart target = World.GetSceneObjectPart(objID); - if (target != null) - { - group = target.ParentGroup; - if (group.IsAttachment) { - objID = group.AttachedAvatar; - agent = World.GetScenePresence(objID); - group = null; - target = null; - } - } - - // Initialize but break if no target - LSL_List result = new LSL_List(); - int groupCount = 0; - int partCount = 0; - int vertexCount = 0; - if (target == null && agent == null) - { - result.Add(new LSL_Vector()); - result.Add(new LSL_Vector()); - if (m_addStatsInGetBoundingBox) - result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); - return result; - } - Vector3 minPosition = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); - Vector3 maxPosition = new Vector3(float.MinValue, float.MinValue, float.MinValue); - - // Try to get a mesher - IRendering primMesher = null; - List renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); - if (renderers.Count > 0) - primMesher = RenderingLoader.LoadRenderer(renderers[0]); - - // Get bounding box of just avatar, seated or not - if (agent != null) - { - bool hasParent = false; - Vector3 lower; - Vector3 upper; - BoundingBoxOfScenePresence(agent, out lower, out upper); - Vector3 offset = Vector3.Zero; - - // Since local bounding box unrotated and untilted, keep it simple - AddBoundingBoxOfSimpleBox(lower, upper, offset, agent.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - partCount++; - groupCount++; - - // Return lower and upper bounding box corners - result.Add(new LSL_Vector(minPosition)); - result.Add(new LSL_Vector(maxPosition)); - if (m_addStatsInGetBoundingBox) - result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); - return result; - } - // Get bounding box of object including seated avatars - else if (group != null) - { - // Merge bounding boxes of all parts (prims and mesh) - foreach (SceneObjectPart part in group.Parts) - { - bool hasParent = (!part.IsRoot); - // When requested or if no mesher, keep it simple - if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) - { - AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - } - // Do the full mounty - else - { - Primitive omvPrim = part.Shape.ToOmvPrimitive(part.OffsetPosition, part.RotationOffset); - byte[] sculptAsset = null; - if (omvPrim.Sculpt != null) - sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString()); - - // When part is mesh - // Quirk: Only imports as incompletely populated faceted mesh object, so needs an own handler. - if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null) - { - AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset); - FacetedMesh mesh = null; - FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, DetailLevel.Highest, out mesh); - meshAsset = null; - if (mesh != null) - { - AddBoundingBoxOfFacetedMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - mesh = null; - } - } - - // When part is sculpt - // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt. - else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null) - { - IJ2KDecoder imgDecoder = World.RequestModuleInterface(); - if (imgDecoder != null) - { - Image sculpt = imgDecoder.DecodeToImage(sculptAsset); - if (sculpt != null) - { - SimpleMesh mesh = primMesher.GenerateSimpleSculptMesh(omvPrim, (Bitmap)sculpt, DetailLevel.Medium); - sculpt.Dispose(); - if (mesh != null) - { - AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - mesh = null; - } - } - } - } - - // When part is prim - else if (omvPrim.Sculpt == null) - { - SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); - if (mesh != null) - { - AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - mesh = null; - } - } - - // When all else fails, try fallback to simple box - else - { - AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - } - } - partCount++; - } - } - - // Merge bounding boxes of seated avatars - foreach (ScenePresence sp in group.GetSittingAvatars()) - { - Vector3 lower; - Vector3 upper; - BoundingBoxOfScenePresence(sp, out lower, out upper); - Vector3 offset = sp.OffsetPosition; - - bool hasParent = true; - // When requested or if no mesher, keep it simple - if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) - { - AddBoundingBoxOfSimpleBox(lower, upper, offset, sp.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - } - // Do the full mounty - else - { - // Prim shapes don't do center offsets, so add it here. - offset = offset + (lower + upper) * 0.5f * sp.Rotation; - Primitive omvPrim = MakeOpenMetaversePrim(upper - lower, offset, sp.Rotation, ScriptBaseClass.PRIM_TYPE_SPHERE); - SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); - AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); - mesh = null; - } - partCount++; - } - - groupCount++; - - // Return lower and upper bounding box corners - result.Add(new LSL_Vector(minPosition)); - result.Add(new LSL_Vector(maxPosition)); - if (m_addStatsInGetBoundingBox) - result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); - - primMesher = null; - return result; - } - - /// - /// Helper to calculate bounding box of an avatar. - /// - private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper) - { - // Adjust from OS model - // avatar height = visual height - 0.2, bounding box height = visual height - // to SL model - // avatar height = visual height, bounding box height = visual height + 0.2 - float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection; - - // According to avatar bounding box in SL 2015-04-18: - // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h> - // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5> - // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h> - - // When avatar is sitting - if (sp.ParentPart != null) - { - lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height); - upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height); - } - // When avatar is groundsitting - else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) - { - lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height); - upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height); - } - // When avatar is standing or flying - else - { - lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height); - upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height); - } - } - - /// - /// Helper to approximate a part with a simple box. - /// - private void AddBoundingBoxOfSimpleBox(Vector3 corner1, Vector3 corner2, Vector3 offset, Quaternion rotation, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) - { - // Parse the 8 box corners - for (int i = 0; i < 8; i++) - { - // Calculate each box corner - Vector3 position = corner1; - if ((i & 1) != 0) - position.X = corner2.X; - if ((i & 2) != 0) - position.Y = corner2.Y; - if ((i & 4) != 0) - position.Z = corner2.Z; - // Rotate part unless part is root - if (hasParent) - position = position * rotation; - position = position + offset; - // Adjust lower and upper bounding box corners if needed - lower = Vector3.Min(lower, position); - upper = Vector3.Max(upper, position); - count++; - } - } - - /// - /// Helper to parse a meshed prim and needed especially - /// for accuracy with tortured prims and sculpts. - /// - private void AddBoundingBoxOfSimpleMesh(SimpleMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) - { - // Quirk: A meshed box contains 10 instead of the 8 necessary vertices. - if (mesh != null) - { - // Parse each vertex in mesh - foreach (Vertex vertex in mesh.Vertices) - { - Vector3 position = vertex.Position; - position = position * prim.Scale; - // Rotate part unless part is root - if (hasParent) - position = position * prim.Rotation; - position = position + prim.Position; - // Adjust lower and upper bounding box corners if needed - lower = Vector3.Min(lower, position); - upper = Vector3.Max(upper, position); - count++; - } - } - } - - /// - /// Helper to parse mesh because no method exists - /// to parse mesh assets to SimpleMesh. - /// - private void AddBoundingBoxOfFacetedMesh(FacetedMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) - { - if (mesh != null) - { - // Parse each face in mesh - // since vertex array isn't populated. - // This parses each unique vertex 3-6 times. - foreach (Face face in mesh.Faces) - { - // Parse each vertex in face - foreach (Vertex vertex in face.Vertices) - { - Vector3 position = vertex.Position; - position = position * prim.Scale; - // Rotate part unless part is root - if (hasParent) - position = position * prim.Rotation; - position = position + prim.Position; - // Adjust lower and upper bounding box corners if needed - lower = Vector3.Min(lower, position); - upper = Vector3.Max(upper, position); - count++; - } - } - } - } - - /// - /// Helper to make up an OpenMetaverse prim - /// needed to create mesh from parts. - /// - private Primitive MakeOpenMetaversePrim(Vector3 scale, Vector3 position, Quaternion rotation, int primType) - { - // Initialize and set common parameters - Primitive prim = new OpenMetaverse.Primitive(); - prim.Scale = scale; - prim.Position = position; - prim.Rotation = rotation; - prim.PrimData.PathShearX = 0.0f; - prim.PrimData.PathShearY = 0.0f; - prim.PrimData.PathBegin = 0.0f; - prim.PrimData.PathEnd = 1.0f; - prim.PrimData.PathScaleX = 1.0f; - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.PathTaperX = 0.0f; - prim.PrimData.PathTaperY = 0.0f; - prim.PrimData.PathTwistBegin = 0.0f; - prim.PrimData.PathTwist = 0.0f; - prim.PrimData.ProfileBegin = 0.0f; - prim.PrimData.ProfileEnd = 1.0f; - prim.PrimData.ProfileHollow = 0.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)1; - prim.PrimData.ProfileHole = (HoleType)0; - prim.PrimData.PathCurve = (PathCurve)16; - prim.PrimData.PathRadiusOffset = 0.0f; - prim.PrimData.PathRevolutions = 1.0f; - prim.PrimData.PathSkew = 0.0f; - prim.PrimData.PCode = OpenMetaverse.PCode.Prim; - prim.PrimData.State = (byte)0; - - // Set type specific parameters - switch (primType) - { - // Set specific parameters for box - case ScriptBaseClass.PRIM_TYPE_BOX: - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)1; - prim.PrimData.PathCurve = (PathCurve)16; - break; - // Set specific parameters for cylinder - case ScriptBaseClass.PRIM_TYPE_CYLINDER: - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)0; - prim.PrimData.PathCurve = (PathCurve)16; - break; - // Set specific parameters for prism - case ScriptBaseClass.PRIM_TYPE_PRISM: - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)3; - prim.PrimData.PathCurve = (PathCurve)16; - break; - // Set specific parameters for sphere - case ScriptBaseClass.PRIM_TYPE_SPHERE: - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)5; - prim.PrimData.PathCurve = (PathCurve)32; - break; - // Set specific parameters for torus - case ScriptBaseClass.PRIM_TYPE_TORUS: - prim.PrimData.PathScaleY = 0.5f; - prim.PrimData.ProfileCurve = (ProfileCurve)0; - prim.PrimData.PathCurve = (PathCurve)32; - break; - // Set specific parameters for tube - case ScriptBaseClass.PRIM_TYPE_TUBE: - prim.PrimData.PathScaleY = 0.5f; - prim.PrimData.ProfileCurve = (ProfileCurve)1; - prim.PrimData.PathCurve = (PathCurve)32; - break; - // Set specific parameters for ring - case ScriptBaseClass.PRIM_TYPE_RING: - prim.PrimData.PathScaleY = 0.5f; - prim.PrimData.ProfileCurve = (ProfileCurve)3; - prim.PrimData.PathCurve = (PathCurve)32; - break; - // Set specific parameters for sculpt - case ScriptBaseClass.PRIM_TYPE_SCULPT: - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)5; - prim.PrimData.PathCurve = (PathCurve)32; - break; - // Default to specific parameters for box - default: - prim.PrimData.PathScaleY = 1.0f; - prim.PrimData.ProfileCurve = (ProfileCurve)1; - prim.PrimData.PathCurve = (PathCurve)16; - break; - } - - return prim; - } - - /// - /// Implementation of llGetGeometricCenter according to SL 2015-04-30. - /// http://wiki.secondlife.com/wiki/LlGetGeometricCenter - /// Returns the average position offset of all linked parts, - /// including the root prim and seated avatars, - /// relative to the root prim in local coordinates. - /// - public LSL_Vector llGetGeometricCenter() - { - // Subtract whatever position the root prim has to make it zero - Vector3 offset = m_host.ParentGroup.RootPart.OffsetPosition * -1.0f; - - // Add all prim/part position offsets - foreach (SceneObjectPart part in m_host.ParentGroup.Parts) - offset = offset + part.OffsetPosition; - // Add all avatar/scene presence position offsets - foreach (ScenePresence sp in m_host.ParentGroup.GetSittingAvatars()) - offset = offset + sp.OffsetPosition; - - // Calculate and return the average offset - offset = offset / (float)(m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount()); - return new LSL_Vector(offset); - } - - public LSL_List GetEntityParams(ISceneEntity entity, LSL_List rules) - { - LSL_List result = new LSL_List(); - LSL_List remaining = null; - - while (true) - { -// m_log.DebugFormat( -// "[LSL API]: GetEntityParams has {0} rules with scene entity named {1}", -// rules.Length, entity != null ? entity.Name : "NULL"); - - if (entity == null) - return result; - - if (entity is SceneObjectPart) - remaining = GetPrimParams((SceneObjectPart)entity, rules, ref result); - else - remaining = GetAgentParams((ScenePresence)entity, rules, ref result); - - if (remaining == null || remaining.Length < 2) - return result; - - int linknumber = remaining.GetLSLIntegerItem(0); - rules = remaining.GetSublist(1, -1); - entity = GetLinkEntity(m_host, linknumber); - } - } - - public LSL_List llGetPrimitiveParams(LSL_List rules) - { - m_host.AddScriptLPS(1); - - return GetEntityParams(m_host, rules); - } - - public LSL_List llGetLinkPrimitiveParams(int linknumber, LSL_List rules) - { - m_host.AddScriptLPS(1); - - return GetEntityParams(GetLinkEntity(m_host, linknumber), rules); - } - - public LSL_Vector GetAgentSize(ScenePresence sp) - { - return new LSL_Vector(0.45, 0.6, sp.Appearance.AvatarHeight); - } - - /// - /// Gets params for a seated avatar in a linkset. - /// - /// - /// - /// - /// - public LSL_List GetAgentParams(ScenePresence sp, LSL_List rules, ref LSL_List res) - { - int idx = 0; - while (idx < rules.Length) - { - int code = (int)rules.GetLSLIntegerItem(idx++); - int remain = rules.Length-idx; - - switch (code) - { - case (int)ScriptBaseClass.PRIM_MATERIAL: - res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MATERIAL_FLESH)); - break; - - case (int)ScriptBaseClass.PRIM_PHYSICS: - res.Add(ScriptBaseClass.FALSE); - break; - - case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: - res.Add(ScriptBaseClass.FALSE); - break; - - case (int)ScriptBaseClass.PRIM_PHANTOM: - res.Add(ScriptBaseClass.FALSE); - break; - - case (int)ScriptBaseClass.PRIM_POSITION: - res.Add(new LSL_Vector(sp.AbsolutePosition)); - break; - - case (int)ScriptBaseClass.PRIM_SIZE: - res.Add(GetAgentSize(sp)); - break; - - case (int)ScriptBaseClass.PRIM_ROTATION: - res.Add(sp.GetWorldRotation()); - break; - - case (int)ScriptBaseClass.PRIM_TYPE: - res.Add(new LSL_Integer(ScriptBaseClass.PRIM_TYPE_BOX)); - res.Add(new LSL_Integer(ScriptBaseClass.PRIM_HOLE_DEFAULT)); - res.Add(new LSL_Vector(0, 1, 0)); - res.Add(new LSL_Float(0)); - res.Add(new LSL_Vector(0, 0, 0)); - res.Add(new LSL_Vector(1, 1, 0)); - res.Add(new LSL_Vector(0, 0, 0)); - break; - - case (int)ScriptBaseClass.PRIM_TEXTURE: - if (remain < 1) - return null; - - int face = (int)rules.GetLSLIntegerItem(idx++); - if (face > 21) - break; - - res.Add(new LSL_String("")); - res.Add(ScriptBaseClass.ZERO_VECTOR); - res.Add(ScriptBaseClass.ZERO_VECTOR); - res.Add(new LSL_Float(0)); - break; - - case (int)ScriptBaseClass.PRIM_COLOR: - if (remain < 1) - return null; - - face = (int)rules.GetLSLIntegerItem(idx++); - if (face > 21) - break; - - res.Add(ScriptBaseClass.ZERO_VECTOR); - res.Add(new LSL_Float(0)); - break; - - case (int)ScriptBaseClass.PRIM_BUMP_SHINY: - if (remain < 1) - return null; - - face = (int)rules.GetLSLIntegerItem(idx++); - if (face > 21) - break; - - res.Add(ScriptBaseClass.PRIM_SHINY_NONE); - res.Add(ScriptBaseClass.PRIM_BUMP_NONE); - break; - - case (int)ScriptBaseClass.PRIM_FULLBRIGHT: - if (remain < 1) - return null; - - face = (int)rules.GetLSLIntegerItem(idx++); - if (face > 21) - break; - - res.Add(ScriptBaseClass.FALSE); - break; - - case (int)ScriptBaseClass.PRIM_FLEXIBLE: - res.Add(ScriptBaseClass.FALSE); - res.Add(new LSL_Integer(0)); - res.Add(new LSL_Float(0)); - res.Add(new LSL_Float(0)); - res.Add(new LSL_Float(0)); - res.Add(new LSL_Float(0)); - res.Add(ScriptBaseClass.ZERO_VECTOR); - break; - - case (int)ScriptBaseClass.PRIM_TEXGEN: - if (remain < 1) - return null; - - face = (int)rules.GetLSLIntegerItem(idx++); - if (face > 21) - break; - - res.Add(ScriptBaseClass.PRIM_TEXGEN_DEFAULT); - break; - - case (int)ScriptBaseClass.PRIM_POINT_LIGHT: - res.Add(ScriptBaseClass.FALSE); - res.Add(ScriptBaseClass.ZERO_VECTOR); - res.Add(ScriptBaseClass.ZERO_VECTOR); - break; - - case (int)ScriptBaseClass.PRIM_GLOW: - if (remain < 1) - return null; - - face = (int)rules.GetLSLIntegerItem(idx++); - if (face > 21) - break; - - res.Add(new LSL_Float(0)); - break; - - case (int)ScriptBaseClass.PRIM_TEXT: - res.Add(new LSL_String("")); - res.Add(ScriptBaseClass.ZERO_VECTOR); - res.Add(new LSL_Float(1)); - break; - - case (int)ScriptBaseClass.PRIM_ROT_LOCAL: - res.Add(new LSL_Rotation(sp.Rotation)); - break; - - case (int)ScriptBaseClass.PRIM_POS_LOCAL: - res.Add(new LSL_Vector(sp.OffsetPosition)); - break; - - case (int)ScriptBaseClass.PRIM_SLICE: - res.Add(new LSL_Vector(0, 1, 0)); - break; - - case (int)ScriptBaseClass.PRIM_LINK_TARGET: - if(remain < 3) - return null; - - return rules.GetSublist(idx, -1); - } - } - - return null; - } - - public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) - { - int idx = 0; - while (idx < rules.Length) - { - int code = (int)rules.GetLSLIntegerItem(idx++); - int remain = rules.Length - idx; - - switch (code) - { - case (int)ScriptBaseClass.PRIM_MATERIAL: - res.Add(new LSL_Integer(part.Material)); - break; - - case (int)ScriptBaseClass.PRIM_PHYSICS: - if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) != 0) - res.Add(new LSL_Integer(1)); - else - res.Add(new LSL_Integer(0)); - break; - - case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: - if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) != 0) - res.Add(new LSL_Integer(1)); - else - res.Add(new LSL_Integer(0)); - break; - - case (int)ScriptBaseClass.PRIM_PHANTOM: - if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) != 0) - res.Add(new LSL_Integer(1)); - else - res.Add(new LSL_Integer(0)); - break; - - case (int)ScriptBaseClass.PRIM_POSITION: - LSL_Vector v = new LSL_Vector(part.AbsolutePosition); - - // For some reason, the part.AbsolutePosition.* values do not change if the - // linkset is rotated; they always reflect the child prim's world position - // as though the linkset is unrotated. This is incompatible behavior with SL's - // implementation, so will break scripts imported from there (not to mention it - // makes it more difficult to determine a child prim's actual inworld position). - if (!part.IsRoot) - { - LSL_Vector rootPos = new LSL_Vector(m_host.ParentGroup.AbsolutePosition); - v = ((v - rootPos) * llGetRootRotation()) + rootPos; - } - - res.Add(v); - break; - - case (int)ScriptBaseClass.PRIM_SIZE: - res.Add(new LSL_Vector(part.Scale)); - break; - - case (int)ScriptBaseClass.PRIM_ROTATION: - res.Add(GetPartRot(part)); - break; - - case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: - res.Add(new LSL_Integer((int)part.PhysicsShapeType)); - break; - - case (int)ScriptBaseClass.PRIM_TYPE: - // implementing box - PrimitiveBaseShape Shape = part.Shape; - int primType = (int)part.GetPrimType(); - res.Add(new LSL_Integer(primType)); - double topshearx = (double)(sbyte)Shape.PathShearX / 100.0; // Fix negative values for PathShearX - double topsheary = (double)(sbyte)Shape.PathShearY / 100.0; // and PathShearY. - switch (primType) - { - case ScriptBaseClass.PRIM_TYPE_BOX: - case ScriptBaseClass.PRIM_TYPE_CYLINDER: - case ScriptBaseClass.PRIM_TYPE_PRISM: - res.Add(new LSL_Integer(Shape.ProfileCurve) & 0xf0); // Isolate hole shape nibble. - res.Add(new LSL_Vector(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); - res.Add(new LSL_Float(Shape.ProfileHollow / 50000.0)); - res.Add(new LSL_Vector(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); - res.Add(new LSL_Vector(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0)); - res.Add(new LSL_Vector(topshearx, topsheary, 0)); - break; - - case ScriptBaseClass.PRIM_TYPE_SPHERE: - res.Add(new LSL_Integer(Shape.ProfileCurve) & 0xf0); // Isolate hole shape nibble. - res.Add(new LSL_Vector(Shape.PathBegin / 50000.0, 1 - Shape.PathEnd / 50000.0, 0)); - res.Add(new LSL_Float(Shape.ProfileHollow / 50000.0)); - res.Add(new LSL_Vector(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); - res.Add(new LSL_Vector(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); - break; - - case ScriptBaseClass.PRIM_TYPE_SCULPT: - res.Add(new LSL_String(Shape.SculptTexture.ToString())); - res.Add(new LSL_Integer(Shape.SculptType)); - break; - - case ScriptBaseClass.PRIM_TYPE_RING: - case ScriptBaseClass.PRIM_TYPE_TUBE: - case ScriptBaseClass.PRIM_TYPE_TORUS: - // holeshape - res.Add(new LSL_Integer(Shape.ProfileCurve) & 0xf0); // Isolate hole shape nibble. - - // cut - res.Add(new LSL_Vector(Shape.PathBegin / 50000.0, 1 - Shape.PathEnd / 50000.0, 0)); - - // hollow - res.Add(new LSL_Float(Shape.ProfileHollow / 50000.0)); - - // twist - res.Add(new LSL_Vector(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); - - // vector holesize - res.Add(new LSL_Vector(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0)); - - // vector topshear - res.Add(new LSL_Vector(topshearx, topsheary, 0)); - - // vector profilecut - res.Add(new LSL_Vector(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); - - // vector tapera - res.Add(new LSL_Vector(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0)); - - // float revolutions - res.Add(new LSL_Float(Math.Round(Shape.PathRevolutions * 0.015d, 2, MidpointRounding.AwayFromZero)) + 1.0d); - // Slightly inaccurate, because an unsigned byte is being used to represent - // the entire range of floating-point values from 1.0 through 4.0 (which is how - // SL does it). - // - // Using these formulas to store and retrieve PathRevolutions, it is not - // possible to use all values between 1.00 and 4.00. For instance, you can't - // represent 1.10. You can represent 1.09 and 1.11, but not 1.10. So, if you - // use llSetPrimitiveParams to set revolutions to 1.10 and then retreive them - // with llGetPrimitiveParams, you'll retrieve 1.09. You can also see a similar - // behavior in the viewer as you cannot set 1.10. The viewer jumps to 1.11. - // In SL, llSetPrimitveParams and llGetPrimitiveParams can set and get a value - // such as 1.10. So, SL must store and retreive the actual user input rather - // than only storing the encoded value. - - // float radiusoffset - res.Add(new LSL_Float(Shape.PathRadiusOffset / 100.0)); - - // float skew - res.Add(new LSL_Float(Shape.PathSkew / 100.0)); - break; - } - break; - - case (int)ScriptBaseClass.PRIM_TEXTURE: - if (remain < 1) - return null; - - int face = (int)rules.GetLSLIntegerItem(idx++); - Primitive.TextureEntry tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - for (face = 0 ; face < GetNumberOfSides(part); face++) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - - res.Add(new LSL_String(texface.TextureID.ToString())); - res.Add(new LSL_Vector(texface.RepeatU, - texface.RepeatV, - 0)); - res.Add(new LSL_Vector(texface.OffsetU, - texface.OffsetV, - 0)); - res.Add(new LSL_Float(texface.Rotation)); - } - } - else - { - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - - res.Add(new LSL_String(texface.TextureID.ToString())); - res.Add(new LSL_Vector(texface.RepeatU, - texface.RepeatV, - 0)); - res.Add(new LSL_Vector(texface.OffsetU, - texface.OffsetV, - 0)); - res.Add(new LSL_Float(texface.Rotation)); - } - } - break; - - case (int)ScriptBaseClass.PRIM_COLOR: - if (remain < 1) - return null; - - face=(int)rules.GetLSLIntegerItem(idx++); - - tex = part.Shape.Textures; - Color4 texcolor; - if (face == ScriptBaseClass.ALL_SIDES) - { - for (face = 0 ; face < GetNumberOfSides(part); face++) - { - texcolor = tex.GetFace((uint)face).RGBA; - res.Add(new LSL_Vector(texcolor.R, - texcolor.G, - texcolor.B)); - res.Add(new LSL_Float(texcolor.A)); - } - } - else - { - texcolor = tex.GetFace((uint)face).RGBA; - res.Add(new LSL_Vector(texcolor.R, - texcolor.G, - texcolor.B)); - res.Add(new LSL_Float(texcolor.A)); - } - break; - - case (int)ScriptBaseClass.PRIM_BUMP_SHINY: - if (remain < 1) - return null; - - face=(int)rules.GetLSLIntegerItem(idx++); - - tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - for (face = 0; face < GetNumberOfSides(part); face++) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - // Convert Shininess to PRIM_SHINY_* - res.Add(new LSL_Integer((uint)texface.Shiny >> 6)); - // PRIM_BUMP_* - res.Add(new LSL_Integer((int)texface.Bump)); - } - } - else - { - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - // Convert Shininess to PRIM_SHINY_* - res.Add(new LSL_Integer((uint)texface.Shiny >> 6)); - // PRIM_BUMP_* - res.Add(new LSL_Integer((int)texface.Bump)); - } - } - break; - - case (int)ScriptBaseClass.PRIM_FULLBRIGHT: - if (remain < 1) - return null; - - face = (int)rules.GetLSLIntegerItem(idx++); - - tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - for (face = 0; face < GetNumberOfSides(part); face++) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0)); - } - } - else - { - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0)); - } - } - break; - - case (int)ScriptBaseClass.PRIM_FLEXIBLE: - PrimitiveBaseShape shape = part.Shape; - - if (shape.FlexiEntry) - res.Add(new LSL_Integer(1)); // active - else - res.Add(new LSL_Integer(0)); - res.Add(new LSL_Integer(shape.FlexiSoftness));// softness - res.Add(new LSL_Float(shape.FlexiGravity)); // gravity - res.Add(new LSL_Float(shape.FlexiDrag)); // friction - res.Add(new LSL_Float(shape.FlexiWind)); // wind - res.Add(new LSL_Float(shape.FlexiTension)); // tension - res.Add(new LSL_Vector(shape.FlexiForceX, // force - shape.FlexiForceY, - shape.FlexiForceZ)); - break; - - case (int)ScriptBaseClass.PRIM_TEXGEN: - if (remain < 1) - return null; - - face=(int)rules.GetLSLIntegerItem(idx++); - - tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - for (face = 0; face < GetNumberOfSides(part); face++) - { - MappingType texgen = tex.GetFace((uint)face).TexMapType; - // Convert MappingType to PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR etc. - res.Add(new LSL_Integer((uint)texgen >> 1)); - } - } - else - { - if (face >= 0 && face < GetNumberOfSides(part)) - { - MappingType texgen = tex.GetFace((uint)face).TexMapType; - res.Add(new LSL_Integer((uint)texgen >> 1)); - } - } - break; - - case (int)ScriptBaseClass.PRIM_POINT_LIGHT: - shape = part.Shape; - - if (shape.LightEntry) - res.Add(new LSL_Integer(1)); // active - else - res.Add(new LSL_Integer(0)); - res.Add(new LSL_Vector(shape.LightColorR, // color - shape.LightColorG, - shape.LightColorB)); - res.Add(new LSL_Float(shape.LightIntensity)); // intensity - res.Add(new LSL_Float(shape.LightRadius)); // radius - res.Add(new LSL_Float(shape.LightFalloff)); // falloff - break; - - case (int)ScriptBaseClass.PRIM_GLOW: - if (remain < 1) - return null; - - face=(int)rules.GetLSLIntegerItem(idx++); - - tex = part.Shape.Textures; - if (face == ScriptBaseClass.ALL_SIDES) - { - for (face = 0; face < GetNumberOfSides(part); face++) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - res.Add(new LSL_Float(texface.Glow)); - } - } - else - { - if (face >= 0 && face < GetNumberOfSides(part)) - { - Primitive.TextureEntryFace texface = tex.GetFace((uint)face); - res.Add(new LSL_Float(texface.Glow)); - } - } - break; - - case (int)ScriptBaseClass.PRIM_TEXT: - Color4 textColor = part.GetTextColor(); - res.Add(new LSL_String(part.Text)); - res.Add(new LSL_Vector(textColor.R, - textColor.G, - textColor.B)); - res.Add(new LSL_Float(1.0 - textColor.A)); - break; - case (int)ScriptBaseClass.PRIM_NAME: - res.Add(new LSL_String(part.Name)); - break; - case (int)ScriptBaseClass.PRIM_DESC: - res.Add(new LSL_String(part.Description)); - break; - case (int)ScriptBaseClass.PRIM_ROT_LOCAL: - res.Add(new LSL_Rotation(part.RotationOffset)); - break; - case (int)ScriptBaseClass.PRIM_POS_LOCAL: - res.Add(new LSL_Vector(GetPartLocalPos(part))); - break; - case (int)ScriptBaseClass.PRIM_SLICE: - PrimType prim_type = part.GetPrimType(); - bool useProfileBeginEnd = (prim_type == PrimType.SPHERE || prim_type == PrimType.TORUS || prim_type == PrimType.TUBE || prim_type == PrimType.RING); - res.Add(new LSL_Vector( - (useProfileBeginEnd ? part.Shape.ProfileBegin : part.Shape.PathBegin) / 50000.0, - 1 - (useProfileBeginEnd ? part.Shape.ProfileEnd : part.Shape.PathEnd) / 50000.0, - 0 - )); - break; - case (int)ScriptBaseClass.PRIM_LINK_TARGET: - - // TODO: Should be issuing a runtime script warning in this case. - if (remain < 2) - return null; - - return rules.GetSublist(idx, -1); - } - } - - return null; - } - - public LSL_List llGetPrimMediaParams(int face, LSL_List rules) - { - m_host.AddScriptLPS(1); - ScriptSleep(m_sleepMsOnGetPrimMediaParams); - return GetPrimMediaParams(m_host, face, rules); - } - - public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) - { - m_host.AddScriptLPS(1); - ScriptSleep(m_sleepMsOnGetLinkMedia); - if (link == ScriptBaseClass.LINK_ROOT) - return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); - else if (link == ScriptBaseClass.LINK_THIS) - return GetPrimMediaParams(m_host, face, rules); - else - { - SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); - if (null != part) - return GetPrimMediaParams(part, face, rules); - } - - return new LSL_List(); - } - - private LSL_List GetPrimMediaParams(SceneObjectPart part, int face, LSL_List rules) - { - // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid - // TODO: Need to correctly handle case where a face has no media (which gives back an empty list). - // Assuming silently fail means give back an empty list. Ideally, need to check this. - if (face < 0 || face > part.GetNumberOfSides() - 1) - return new LSL_List(); - - IMoapModule module = m_ScriptEngine.World.RequestModuleInterface(); - if (null == module) - return new LSL_List(); - - MediaEntry me = module.GetMediaEntry(part, face); - - // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams - if (null == me) - return new LSL_List(); - - LSL_List res = new LSL_List(); - - for (int i = 0; i < rules.Length; i++) - { - int code = (int)rules.GetLSLIntegerItem(i); - - switch (code) - { - case ScriptBaseClass.PRIM_MEDIA_ALT_IMAGE_ENABLE: - // Not implemented - res.Add(new LSL_Integer(0)); - break; - - case ScriptBaseClass.PRIM_MEDIA_CONTROLS: - if (me.Controls == MediaControls.Standard) - res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MEDIA_CONTROLS_STANDARD)); - else - res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MEDIA_CONTROLS_MINI)); - break; - - case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL: - res.Add(new LSL_String(me.CurrentURL)); - break; - - case ScriptBaseClass.PRIM_MEDIA_HOME_URL: - res.Add(new LSL_String(me.HomeURL)); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP: - res.Add(me.AutoLoop ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_PLAY: - res.Add(me.AutoPlay ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_SCALE: - res.Add(me.AutoScale ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_ZOOM: - res.Add(me.AutoZoom ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); - break; - - case ScriptBaseClass.PRIM_MEDIA_FIRST_CLICK_INTERACT: - res.Add(me.InteractOnFirstClick ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); - break; - - case ScriptBaseClass.PRIM_MEDIA_WIDTH_PIXELS: - res.Add(new LSL_Integer(me.Width)); - break; - - case ScriptBaseClass.PRIM_MEDIA_HEIGHT_PIXELS: - res.Add(new LSL_Integer(me.Height)); - break; - - case ScriptBaseClass.PRIM_MEDIA_WHITELIST_ENABLE: - res.Add(me.EnableWhiteList ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); - break; - - case ScriptBaseClass.PRIM_MEDIA_WHITELIST: - string[] urls = (string[])me.WhiteList.Clone(); - - for (int j = 0; j < urls.Length; j++) - urls[j] = Uri.EscapeDataString(urls[j]); - - res.Add(new LSL_String(string.Join(", ", urls))); - break; - - case ScriptBaseClass.PRIM_MEDIA_PERMS_INTERACT: - res.Add(new LSL_Integer((int)me.InteractPermissions)); - break; - - case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: - res.Add(new LSL_Integer((int)me.ControlPermissions)); - break; - - default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS; - } - } - - return res; - } - - public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules) - { - m_host.AddScriptLPS(1); - ScriptSleep(m_sleepMsOnSetPrimMediaParams); - return SetPrimMediaParams(m_host, face, rules); - } - - public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) - { - m_host.AddScriptLPS(1); - ScriptSleep(m_sleepMsOnSetLinkMedia); - if (link == ScriptBaseClass.LINK_ROOT) - return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); - else if (link == ScriptBaseClass.LINK_THIS) - return SetPrimMediaParams(m_host, face, rules); - else - { - SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); - if (null != part) - return SetPrimMediaParams(part, face, rules); - } - - return ScriptBaseClass.LSL_STATUS_NOT_FOUND; - } - - private LSL_Integer SetPrimMediaParams(SceneObjectPart part, LSL_Integer face, LSL_List rules) - { - // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid - // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. - // Don't perform the media check directly - if (face < 0 || face > part.GetNumberOfSides() - 1) - return ScriptBaseClass.LSL_STATUS_NOT_FOUND; - - IMoapModule module = m_ScriptEngine.World.RequestModuleInterface(); - if (null == module) - return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED; - - MediaEntry me = module.GetMediaEntry(part, face); - if (null == me) - me = new MediaEntry(); - - int i = 0; - - while (i < rules.Length - 1) - { - int code = rules.GetLSLIntegerItem(i++); - - switch (code) - { - case ScriptBaseClass.PRIM_MEDIA_ALT_IMAGE_ENABLE: - me.EnableAlterntiveImage = (rules.GetLSLIntegerItem(i++) != 0 ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_CONTROLS: - int v = rules.GetLSLIntegerItem(i++); - if (ScriptBaseClass.PRIM_MEDIA_CONTROLS_STANDARD == v) - me.Controls = MediaControls.Standard; - else - me.Controls = MediaControls.Mini; - break; - - case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL: - me.CurrentURL = rules.GetLSLStringItem(i++); - break; - - case ScriptBaseClass.PRIM_MEDIA_HOME_URL: - me.HomeURL = rules.GetLSLStringItem(i++); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP: - me.AutoLoop = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_PLAY: - me.AutoPlay = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_SCALE: - me.AutoScale = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_AUTO_ZOOM: - me.AutoZoom = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_FIRST_CLICK_INTERACT: - me.InteractOnFirstClick = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_WIDTH_PIXELS: - me.Width = (int)rules.GetLSLIntegerItem(i++); - break; - - case ScriptBaseClass.PRIM_MEDIA_HEIGHT_PIXELS: - me.Height = (int)rules.GetLSLIntegerItem(i++); - break; - - case ScriptBaseClass.PRIM_MEDIA_WHITELIST_ENABLE: - me.EnableWhiteList = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); - break; - - case ScriptBaseClass.PRIM_MEDIA_WHITELIST: - string[] rawWhiteListUrls = rules.GetLSLStringItem(i++).ToString().Split(new char[] { ',' }); - List whiteListUrls = new List(); - Array.ForEach( - rawWhiteListUrls, delegate(string rawUrl) { whiteListUrls.Add(rawUrl.Trim()); }); - me.WhiteList = whiteListUrls.ToArray(); - break; - - case ScriptBaseClass.PRIM_MEDIA_PERMS_INTERACT: - me.InteractPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); - break; - - case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: - me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); - break; - - default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS; - } - } - - module.SetMediaEntry(part, face, me); - - return ScriptBaseClass.LSL_STATUS_OK; - } - - public LSL_Integer llClearPrimMedia(LSL_Integer face) - { - m_host.AddScriptLPS(1); - ScriptSleep(m_sleepMsOnClearPrimMedia); - return ClearPrimMedia(m_host, face); - } - - public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face) - { - m_host.AddScriptLPS(1); - ScriptSleep(m_sleepMsOnClearLinkMedia); - if (link == ScriptBaseClass.LINK_ROOT) - return ClearPrimMedia(m_host.ParentGroup.RootPart, face); - else if (link == ScriptBaseClass.LINK_THIS) - return ClearPrimMedia(m_host, face); - else - { - SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); - if (null != part) - return ClearPrimMedia(part, face); - } - - return ScriptBaseClass.LSL_STATUS_NOT_FOUND; - } - - private LSL_Integer ClearPrimMedia(SceneObjectPart part, LSL_Integer face) - { - // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid - // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. - // FIXME: Don't perform the media check directly - if (face < 0 || face > part.GetNumberOfSides() - 1) - return ScriptBaseClass.LSL_STATUS_NOT_FOUND; - - IMoapModule module = m_ScriptEngine.World.RequestModuleInterface(); - if (null == module) - return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED; - - module.ClearMediaEntry(part, face); - - return ScriptBaseClass.LSL_STATUS_OK; - } - - // - // - // The .NET definition of base 64 is: - // - // - // Significant: A-Z a-z 0-9 + - - // - // - // Whitespace: \t \n \r ' ' - // - // - // Valueless: = - // - // - // End-of-string: \0 or '==' - // - // - // - // - // Each point in a base-64 string represents - // a 6 bit value. A 32-bit integer can be - // represented using 6 characters (with some - // redundancy). - // - // - // LSL requires a base64 string to be 8 - // characters in length. LSL also uses '/' - // rather than '-' (MIME compliant). - // - // - // RFC 1341 used as a reference (as specified - // by the SecondLife Wiki). - // - // - // SL do not record any kind of exception for - // these functions, so the string to integer - // conversion returns '0' if an invalid - // character is encountered during conversion. - // - // - // References - // - // - // http://lslwiki.net/lslwiki/wakka.php?wakka=Base64 - // - // - // - // - // - // - - // - // Table for converting 6-bit integers into - // base-64 characters - // - - protected static readonly char[] i2ctable = - { - 'A','B','C','D','E','F','G','H', - 'I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X', - 'Y','Z', - 'a','b','c','d','e','f','g','h', - 'i','j','k','l','m','n','o','p', - 'q','r','s','t','u','v','w','x', - 'y','z', - '0','1','2','3','4','5','6','7', - '8','9', - '+','/' - }; - - // - // Table for converting base-64 characters - // into 6-bit integers. - // - - protected static readonly int[] c2itable = - { - -1,-1,-1,-1,-1,-1,-1,-1, // 0x - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // 1x - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // 2x - -1,-1,-1,63,-1,-1,-1,64, - 53,54,55,56,57,58,59,60, // 3x - 61,62,-1,-1,-1,0,-1,-1, - -1,1,2,3,4,5,6,7, // 4x - 8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23, // 5x - 24,25,26,-1,-1,-1,-1,-1, - -1,27,28,29,30,31,32,33, // 6x - 34,35,36,37,38,39,40,41, - 42,43,44,45,46,47,48,49, // 7x - 50,51,52,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // 8x - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // 9x - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // Ax - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // Bx - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // Cx - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // Dx - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // Ex - -1,-1,-1,-1,-1,-1,-1,-1, - -1,-1,-1,-1,-1,-1,-1,-1, // Fx - -1,-1,-1,-1,-1,-1,-1,-1 - }; - - // - // Converts a 32-bit integer into a Base64 - // character string. Base64 character strings - // are always 8 characters long. All iinteger - // values are acceptable. - // - // - // 32-bit integer to be converted. - // - // - // 8 character string. The 1st six characters - // contain the encoded number, the last two - // characters are padded with "=". - // - - public LSL_String llIntegerToBase64(int number) - { - // uninitialized string - - char[] imdt = new char[8]; - - m_host.AddScriptLPS(1); - - // Manually unroll the loop - - imdt[7] = '='; - imdt[6] = '='; - imdt[5] = i2ctable[number<<4 & 0x3F]; - imdt[4] = i2ctable[number>>2 & 0x3F]; - imdt[3] = i2ctable[number>>8 & 0x3F]; - imdt[2] = i2ctable[number>>14 & 0x3F]; - imdt[1] = i2ctable[number>>20 & 0x3F]; - imdt[0] = i2ctable[number>>26 & 0x3F]; - - return new string(imdt); - } - - // - // Converts an eight character base-64 string - // into a 32-bit integer. - // - // - // 8 characters string to be converted. Other - // length strings return zero. - // - // - // Returns an integer representing the - // encoded value providedint he 1st 6 - // characters of the string. - // - // - // This is coded to behave like LSL's - // implementation (I think), based upon the - // information available at the Wiki. - // If more than 8 characters are supplied, - // zero is returned. - // If a NULL string is supplied, zero will - // be returned. - // If fewer than 6 characters are supplied, then - // the answer will reflect a partial - // accumulation. - // - // The 6-bit segments are - // extracted left-to-right in big-endian mode, - // which means that segment 6 only contains the - // two low-order bits of the 32 bit integer as - // its high order 2 bits. A short string therefore - // means loss of low-order information. E.g. - // - // |<---------------------- 32-bit integer ----------------------->|<-Pad->| - // |<--Byte 0----->|<--Byte 1----->|<--Byte 2----->|<--Byte 3----->|<-Pad->| - // |3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1| | | | | | | | | | |P|P|P|P| - // |1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|P|P|P|P| - // | str[0] | str[1] | str[2] | str[3] | str[4] | str[6] | - // - // - // - - public LSL_Integer llBase64ToInteger(string str) - { - int number = 0; - int digit; - - m_host.AddScriptLPS(1); - - // Require a well-fromed base64 string - - if (str.Length > 8) - return 0; - - // The loop is unrolled in the interests - // of performance and simple necessity. - // - // MUST find 6 digits to be well formed - // -1 == invalid - // 0 == padding - - if ((digit = c2itable[str[0]]) <= 0) - { - return digit < 0 ? (int)0 : number; - } - number += --digit<<26; - - if ((digit = c2itable[str[1]]) <= 0) - { - return digit < 0 ? (int)0 : number; - } - number += --digit<<20; - - if ((digit = c2itable[str[2]]) <= 0) - { - return digit < 0 ? (int)0 : number; - } - number += --digit<<14; - - if ((digit = c2itable[str[3]]) <= 0) - { - return digit < 0 ? (int)0 : number; - } - number += --digit<<8; - - if ((digit = c2itable[str[4]]) <= 0) - { - return digit < 0 ? (int)0 : number; - } - number += --digit<<2; - - if ((digit = c2itable[str[5]]) <= 0) - { - return digit < 0 ? (int)0 : number; - } - number += --digit>>4; - - // ignore trailing padding - - return number; - } - - public LSL_Float llGetGMTclock() - { - m_host.AddScriptLPS(1); - return DateTime.UtcNow.TimeOfDay.TotalSeconds; - } - - public LSL_String llGetHTTPHeader(LSL_Key request_id, string header) - { - m_host.AddScriptLPS(1); - - if (m_UrlModule != null) - return m_UrlModule.GetHttpHeader(new UUID(request_id), header); - return String.Empty; - } - - - public LSL_String llGetSimulatorHostname() - { - m_host.AddScriptLPS(1); - IUrlModule UrlModule = World.RequestModuleInterface(); - return UrlModule.ExternalHostNameForLSL; - } - - // - // Scan the string supplied in 'src' and - // tokenize it based upon two sets of - // tokenizers provided in two lists, - // separators and spacers. - // - // - // - // Separators demarcate tokens and are - // elided as they are encountered. Spacers - // also demarcate tokens, but are themselves - // retained as tokens. - // - // Both separators and spacers may be arbitrarily - // long strings. i.e. ":::". - // - // The function returns an ordered list - // representing the tokens found in the supplied - // sources string. If two successive tokenizers - // are encountered, then a NULL entry is added - // to the list. - // - // It is a precondition that the source and - // toekizer lisst are non-null. If they are null, - // then a null pointer exception will be thrown - // while their lengths are being determined. - // - // A small amount of working memoryis required - // of approximately 8*#tokenizers. - // - // There are many ways in which this function - // can be implemented, this implementation is - // fairly naive and assumes that when the - // function is invooked with a short source - // string and/or short lists of tokenizers, then - // performance will not be an issue. - // - // In order to minimize the perofrmance - // effects of long strings, or large numbers - // of tokeizers, the function skips as far as - // possible whenever a toekenizer is found, - // and eliminates redundant tokenizers as soon - // as is possible. - // - // The implementation tries to avoid any copying - // of arrays or other objects. - // - - private LSL_List ParseString(string src, LSL_List separators, LSL_List spacers, bool keepNulls) - { - int beginning = 0; - int srclen = src.Length; - int seplen = separators.Length; - object[] separray = separators.Data; - int spclen = spacers.Length; - object[] spcarray = spacers.Data; - int mlen = seplen+spclen; - - int[] offset = new int[mlen+1]; - bool[] active = new bool[mlen]; - - int best; - int j; - - // Initial capacity reduces resize cost - - LSL_List tokens = new LSL_List(); - - // All entries are initially valid - - for (int i = 0; i < mlen; i++) - active[i] = true; - - offset[mlen] = srclen; - - while (beginning < srclen) - { - - best = mlen; // as bad as it gets - - // Scan for separators - - for (j = 0; j < seplen; j++) - { - if (separray[j].ToString() == String.Empty) - active[j] = false; - - if (active[j]) - { - // scan all of the markers - if ((offset[j] = src.IndexOf(separray[j].ToString(), beginning)) == -1) - { - // not present at all - active[j] = false; - } - else - { - // present and correct - if (offset[j] < offset[best]) - { - // closest so far - best = j; - if (offset[best] == beginning) - break; - } - } - } - } - - // Scan for spacers - - if (offset[best] != beginning) - { - for (j = seplen; (j < mlen) && (offset[best] > beginning); j++) - { - if (spcarray[j-seplen].ToString() == String.Empty) - active[j] = false; - - if (active[j]) - { - // scan all of the markers - if ((offset[j] = src.IndexOf(spcarray[j-seplen].ToString(), beginning)) == -1) - { - // not present at all - active[j] = false; - } - else - { - // present and correct - if (offset[j] < offset[best]) - { - // closest so far - best = j; - } - } - } - } - } - - // This is the normal exit from the scanning loop - - if (best == mlen) - { - // no markers were found on this pass - // so we're pretty much done - if ((keepNulls) || ((!keepNulls) && (srclen - beginning) > 0)) - tokens.Add(new LSL_String(src.Substring(beginning, srclen - beginning))); - break; - } - - // Otherwise we just add the newly delimited token - // and recalculate where the search should continue. - if ((keepNulls) || ((!keepNulls) && (offset[best] - beginning) > 0)) - tokens.Add(new LSL_String(src.Substring(beginning,offset[best]-beginning))); - - if (best < seplen) - { - beginning = offset[best] + (separray[best].ToString()).Length; - } - else - { - beginning = offset[best] + (spcarray[best - seplen].ToString()).Length; - string str = spcarray[best - seplen].ToString(); - if ((keepNulls) || ((!keepNulls) && (str.Length > 0))) - tokens.Add(new LSL_String(str)); - } - } - - // This an awkward an not very intuitive boundary case. If the - // last substring is a tokenizer, then there is an implied trailing - // null list entry. Hopefully the single comparison will not be too - // arduous. Alternatively the 'break' could be replced with a return - // but that's shabby programming. - - if ((beginning == srclen) && (keepNulls)) - { - if (srclen != 0) - tokens.Add(new LSL_String("")); - } - - return tokens; - } - - public LSL_List llParseString2List(string src, LSL_List separators, LSL_List spacers) - { - m_host.AddScriptLPS(1); - return this.ParseString(src, separators, spacers, false); - } - - public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers) - { - m_host.AddScriptLPS(1); - return this.ParseString(src, separators, spacers, true); - } - - public LSL_Integer llGetObjectPermMask(int mask) - { - m_host.AddScriptLPS(1); - - int permmask = 0; - - if (mask == ScriptBaseClass.MASK_BASE)//0 - { - permmask = (int)m_host.BaseMask; - } - - else if (mask == ScriptBaseClass.MASK_OWNER)//1 - { - permmask = (int)m_host.OwnerMask; - } - - else if (mask == ScriptBaseClass.MASK_GROUP)//2 - { - permmask = (int)m_host.GroupMask; - } - - else if (mask == ScriptBaseClass.MASK_EVERYONE)//3 - { - permmask = (int)m_host.EveryoneMask; - } - - else if (mask == ScriptBaseClass.MASK_NEXT)//4 - { - permmask = (int)m_host.NextOwnerMask; - } - - return permmask; - } - - public void llSetObjectPermMask(int mask, int value) - { - m_host.AddScriptLPS(1); - - if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) - { - if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) - { - if (mask == ScriptBaseClass.MASK_BASE)//0 - { - m_host.BaseMask = (uint)value; - } - - else if (mask == ScriptBaseClass.MASK_OWNER)//1 - { - m_host.OwnerMask = (uint)value; - } - - else if (mask == ScriptBaseClass.MASK_GROUP)//2 - { - m_host.GroupMask = (uint)value; - } - - else if (mask == ScriptBaseClass.MASK_EVERYONE)//3 - { - m_host.EveryoneMask = (uint)value; - } - - else if (mask == ScriptBaseClass.MASK_NEXT)//4 - { - m_host.NextOwnerMask = (uint)value; - } - } - } - } - - public LSL_Integer llGetInventoryPermMask(string itemName, int mask) - { - m_host.AddScriptLPS(1); - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName); - - if (item == null) - return -1; - - switch (mask) - { - case 0: - return (int)item.BasePermissions; - case 1: - return (int)item.CurrentPermissions; - case 2: - return (int)item.GroupPermissions; - case 3: - return (int)item.EveryonePermissions; - case 4: - return (int)item.NextPermissions; - } - - return -1; - } - - public void llSetInventoryPermMask(string itemName, int mask, int value) - { - m_host.AddScriptLPS(1); - - if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) - { - if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) - { - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName); - - if (item != null) - { - switch (mask) - { - case 0: - item.BasePermissions = (uint)value; - break; - case 1: - item.CurrentPermissions = (uint)value; - break; - case 2: - item.GroupPermissions = (uint)value; - break; - case 3: - item.EveryonePermissions = (uint)value; - break; - case 4: - item.NextPermissions = (uint)value; - break; - } - } - } - } - } - - public LSL_String llGetInventoryCreator(string itemName) - { - m_host.AddScriptLPS(1); - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName); - - if (item == null) - { - Error("llGetInventoryCreator", "Can't find item '" + item + "'"); - - return String.Empty; - } - - return item.CreatorID.ToString(); - } - - public void llOwnerSay(string msg) - { - m_host.AddScriptLPS(1); - - World.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, - m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); -// IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); -// wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); - } - - public LSL_String llRequestSecureURL() - { - m_host.AddScriptLPS(1); - if (m_UrlModule != null) - return m_UrlModule.RequestSecureURL(m_ScriptEngine.ScriptModule, m_host, m_item.ItemID).ToString(); - return UUID.Zero.ToString(); - } - - public LSL_String llRequestSimulatorData(string simulator, int data) - { - IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "OSSL"); - - try - { - m_host.AddScriptLPS(1); - - string reply = String.Empty; - - GridRegion info; - - if (World.RegionInfo.RegionName == simulator) - info = new GridRegion(World.RegionInfo); - else - info = World.GridService.GetRegionByName(m_ScriptEngine.World.RegionInfo.ScopeID, simulator); - - switch (data) - { - case ScriptBaseClass.DATA_SIM_POS: - if (info == null) - { - ScriptSleep(m_sleepMsOnRequestSimulatorData); - return UUID.Zero.ToString(); - } - - bool isHypergridRegion = false; - - if (World.RegionInfo.RegionName != simulator && info.RegionSecret != "") - { - // Hypergrid is currently placing real destination region co-ords into RegionSecret. - // But other code can also use this field for a genuine RegionSecret! Therefore, if - // anything is present we need to disambiguate. - // - // FIXME: Hypergrid should be storing this data in a different field. - RegionFlags regionFlags - = (RegionFlags)m_ScriptEngine.World.GridService.GetRegionFlags( - info.ScopeID, info.RegionID); - isHypergridRegion = (regionFlags & RegionFlags.Hyperlink) != 0; - } - - if (isHypergridRegion) - { - uint rx = 0, ry = 0; - Utils.LongToUInts(Convert.ToUInt64(info.RegionSecret), out rx, out ry); - - reply = new LSL_Vector( - rx, - ry, - 0).ToString(); - } - else - { - // Local grid co-oridnates - reply = new LSL_Vector( - info.RegionLocX, - info.RegionLocY, - 0).ToString(); - } - break; - case ScriptBaseClass.DATA_SIM_STATUS: - if (info != null) - reply = "up"; // Duh! - else - reply = "unknown"; - break; - case ScriptBaseClass.DATA_SIM_RATING: - if (info == null) - { - ScriptSleep(m_sleepMsOnRequestSimulatorData); - return UUID.Zero.ToString(); - } - int access = info.Maturity; - if (access == 0) - reply = "PG"; - else if (access == 1) - reply = "MATURE"; - else if (access == 2) - reply = "ADULT"; - else - reply = "UNKNOWN"; - break; - case ScriptBaseClass.DATA_SIM_RELEASE: - if (ossl != null) - ossl.CheckThreatLevel(ThreatLevel.High, "llRequestSimulatorData"); - reply = "OpenSim"; - break; - default: - ScriptSleep(m_sleepMsOnRequestSimulatorData); - return UUID.Zero.ToString(); // Raise no event - } - UUID rq = UUID.Random(); - - UUID tid = AsyncCommands. - DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString()); - - AsyncCommands. - DataserverPlugin.DataserverReply(rq.ToString(), reply); - - ScriptSleep(m_sleepMsOnRequestSimulatorData); - return tid.ToString(); - } - catch(Exception) - { - //m_log.Error("[LSL_API]: llRequestSimulatorData" + e.ToString()); - return UUID.Zero.ToString(); - } - } - - public LSL_String llRequestURL() - { - m_host.AddScriptLPS(1); - - if (m_UrlModule != null) - return m_UrlModule.RequestURL(m_ScriptEngine.ScriptModule, m_host, m_item.ItemID).ToString(); - return UUID.Zero.ToString(); - } - - public void llForceMouselook(int mouselook) - { - m_host.AddScriptLPS(1); - m_host.SetForceMouselook(mouselook != 0); - } - - public LSL_Float llGetObjectMass(string id) - { - m_host.AddScriptLPS(1); - UUID key = new UUID(); - if (UUID.TryParse(id, out key)) - { - try - { - SceneObjectPart obj = World.GetSceneObjectPart(World.Entities[key].LocalId); - if (obj != null) - return (double)obj.GetMass(); - // the object is null so the key is for an avatar - ScenePresence avatar = World.GetScenePresence(key); - if (avatar != null) - if (avatar.IsChildAgent) - // reference http://www.lslwiki.net/lslwiki/wakka.php?wakka=llGetObjectMass - // child agents have a mass of 1.0 - return 1; - else - return (double)avatar.GetMass(); - } - catch (KeyNotFoundException) - { - return 0; // The Object/Agent not in the region so just return zero - } - } - return 0; - } - - /// - /// illListReplaceList removes the sub-list defined by the inclusive indices - /// start and end and inserts the src list in its place. The inclusive - /// nature of the indices means that at least one element must be deleted - /// if the indices are within the bounds of the existing list. I.e. 2,2 - /// will remove the element at index 2 and replace it with the source - /// list. Both indices may be negative, with the usual interpretation. An - /// interesting case is where end is lower than start. As these indices - /// bound the list to be removed, then 0->end, and start->lim are removed - /// and the source list is added as a suffix. - /// - - public LSL_List llListReplaceList(LSL_List dest, LSL_List src, int start, int end) - { - LSL_List pref = null; - - m_host.AddScriptLPS(1); - - // Note that although we have normalized, both - // indices could still be negative. - if (start < 0) - { - start = start+dest.Length; - } - - if (end < 0) - { - end = end+dest.Length; - } - // The comventional case, remove a sequence starting with - // start and ending with end. And then insert the source - // list. - if (start <= end) - { - // If greater than zero, then there is going to be a - // surviving prefix. Otherwise the inclusive nature - // of the indices mean that we're going to add the - // source list as a prefix. - if (start > 0) - { - pref = dest.GetSublist(0,start-1); - // Only add a suffix if there is something - // beyond the end index (it's inclusive too). - if (end + 1 < dest.Length) - { - return pref + src + dest.GetSublist(end + 1, -1); - } - else - { - return pref + src; - } - } - // If start is less than or equal to zero, then - // the new list is simply a prefix. We still need to - // figure out any necessary surgery to the destination - // based upon end. Note that if end exceeds the upper - // bound in this case, the entire destination list - // is removed. - else - { - if (end + 1 < dest.Length) - { - return src + dest.GetSublist(end + 1, -1); - } - else - { - return src; - } - } - } - // Finally, if start > end, we strip away a prefix and - // a suffix, to leave the list that sits ens - // and start, and then tag on the src list. AT least - // that's my interpretation. We can get sublist to do - // this for us. Note that one, or both of the indices - // might have been negative. - else - { - return dest.GetSublist(end + 1, start - 1) + src; - } - } - - public void llLoadURL(string avatar_id, string message, string url) - { - m_host.AddScriptLPS(1); - - IDialogModule dm = World.RequestModuleInterface(); - if (null != dm) - dm.SendUrlToUser( - new UUID(avatar_id), m_host.Name, m_host.UUID, m_host.OwnerID, false, message, url); - - ScriptSleep(m_sleepMsOnLoadURL); - } - - public void llParcelMediaCommandList(LSL_List commandList) - { - // TODO: Not implemented yet (missing in libomv?): - // PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) - - m_host.AddScriptLPS(1); - - // according to the docs, this command only works if script owner and land owner are the same - // lets add estate owners and gods, too, and use the generic permission check. - ILandObject landObject = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, landObject, GroupPowers.ChangeMedia)) return; - - bool update = false; // send a ParcelMediaUpdate (and possibly change the land's media URL)? - byte loop = 0; - - LandData landData = landObject.LandData; - string url = landData.MediaURL; - string texture = landData.MediaID.ToString(); - bool autoAlign = landData.MediaAutoScale != 0; - string mediaType = ""; // TODO these have to be added as soon as LandData supports it - string description = ""; - int width = 0; - int height = 0; - - ParcelMediaCommandEnum? commandToSend = null; - float time = 0.0f; // default is from start - - ScenePresence presence = null; - - for (int i = 0; i < commandList.Data.Length; i++) - { - ParcelMediaCommandEnum command = (ParcelMediaCommandEnum)commandList.Data[i]; - switch (command) - { - case ParcelMediaCommandEnum.Agent: - // we send only to one agent - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_String) - { - UUID agentID; - if (UUID.TryParse((LSL_String)commandList.Data[i + 1], out agentID)) - { - presence = World.GetScenePresence(agentID); - } - } - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_AGENT must be a key"); - ++i; - } - break; - - case ParcelMediaCommandEnum.Loop: - loop = 1; - commandToSend = command; - update = true; //need to send the media update packet to set looping - break; - - case ParcelMediaCommandEnum.Play: - loop = 0; - commandToSend = command; - update = true; //need to send the media update packet to make sure it doesn't loop - break; - - case ParcelMediaCommandEnum.Pause: - case ParcelMediaCommandEnum.Stop: - case ParcelMediaCommandEnum.Unload: - commandToSend = command; - break; - - case ParcelMediaCommandEnum.Url: - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_String) - { - url = (LSL_String)commandList.Data[i + 1]; - update = true; - } - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_URL must be a string"); - ++i; - } - break; - - case ParcelMediaCommandEnum.Texture: - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_String) - { - texture = (LSL_String)commandList.Data[i + 1]; - update = true; - } - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TEXTURE must be a string or a key"); - ++i; - } - break; - - case ParcelMediaCommandEnum.Time: - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_Float) - { - time = (float)(LSL_Float)commandList.Data[i + 1]; - } - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TIME must be a float"); - ++i; - } - break; - - case ParcelMediaCommandEnum.AutoAlign: - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_Integer) - { - autoAlign = (LSL_Integer)commandList.Data[i + 1]; - update = true; - } - - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_AUTO_ALIGN must be an integer"); - ++i; - } - break; - - case ParcelMediaCommandEnum.Type: - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_String) - { - mediaType = (LSL_String)commandList.Data[i + 1]; - update = true; - } - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TYPE must be a string"); - ++i; - } - break; - - case ParcelMediaCommandEnum.Desc: - if ((i + 1) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_String) - { - description = (LSL_String)commandList.Data[i + 1]; - update = true; - } - else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_DESC must be a string"); - ++i; - } - break; - - case ParcelMediaCommandEnum.Size: - if ((i + 2) < commandList.Length) - { - if (commandList.Data[i + 1] is LSL_Integer) - { - if (commandList.Data[i + 2] is LSL_Integer) - { - width = (LSL_Integer)commandList.Data[i + 1]; - height = (LSL_Integer)commandList.Data[i + 2]; - update = true; - } - else Error("llParcelMediaCommandList", "The second argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer"); - } - else Error("llParcelMediaCommandList", "The first argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer"); - i += 2; - } - break; - - default: - NotImplemented("llParcelMediaCommandList", "Parameter not supported yet: " + Enum.Parse(typeof(ParcelMediaCommandEnum), commandList.Data[i].ToString()).ToString()); - break; - }//end switch - }//end for - - // if we didn't get a presence, we send to all and change the url - // if we did get a presence, we only send to the agent specified, and *don't change the land settings*! - - // did something important change or do we only start/stop/pause? - if (update) - { - if (presence == null) - { - // we send to all - landData.MediaID = new UUID(texture); - landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; - landData.MediaWidth = width; - landData.MediaHeight = height; - landData.MediaType = mediaType; - - // do that one last, it will cause a ParcelPropertiesUpdate - landObject.SetMediaUrl(url); - - // now send to all (non-child) agents in the parcel - World.ForEachRootScenePresence(delegate(ScenePresence sp) - { - if (sp.currentParcelUUID == landData.GlobalID) - { - sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL, - landData.MediaID, - landData.MediaAutoScale, - mediaType, - description, - width, height, - loop); - } - }); - } - else if (!presence.IsChildAgent) - { - // we only send to one (root) agent - presence.ControllingClient.SendParcelMediaUpdate(url, - new UUID(texture), - autoAlign ? (byte)1 : (byte)0, - mediaType, - description, - width, height, - loop); - } - } - - if (commandToSend != null) - { - // the commandList contained a start/stop/... command, too - if (presence == null) - { - // send to all (non-child) agents in the parcel - World.ForEachRootScenePresence(delegate(ScenePresence sp) - { - if (sp.currentParcelUUID == landData.GlobalID) - { - sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this? - (ParcelMediaCommandEnum)commandToSend, - time); - } - }); - } - else if (!presence.IsChildAgent) - { - presence.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this? - (ParcelMediaCommandEnum)commandToSend, - time); - } - } - ScriptSleep(m_sleepMsOnParcelMediaCommandList); - } - - public LSL_List llParcelMediaQuery(LSL_List aList) - { - m_host.AddScriptLPS(1); - LSL_List list = new LSL_List(); - //TO DO: make the implementation for the missing commands - //PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) - for (int i = 0; i < aList.Data.Length; i++) - { - - if (aList.Data[i] != null) - { - switch ((ParcelMediaCommandEnum) aList.Data[i]) - { - case ParcelMediaCommandEnum.Url: - list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaURL)); - break; - case ParcelMediaCommandEnum.Desc: - list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).Description)); - break; - case ParcelMediaCommandEnum.Texture: - list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaID.ToString())); - break; - case ParcelMediaCommandEnum.Type: - list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaType)); - break; - case ParcelMediaCommandEnum.Size: - list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaWidth)); - list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaHeight)); - break; - default: - ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; - NotImplemented("llParcelMediaQuery", "Parameter not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString()); - break; - } - - } - } - ScriptSleep(m_sleepMsOnParcelMediaQuery); - return list; - } - - public LSL_Integer llModPow(int a, int b, int c) - { - m_host.AddScriptLPS(1); - Int64 tmp = 0; - Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp); - ScriptSleep(m_sleepMsOnModPow); - return Convert.ToInt32(tmp); - } - - public LSL_Integer llGetInventoryType(string name) - { - m_host.AddScriptLPS(1); - - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - if (item == null) - return -1; - - return item.Type; - } - - public void llSetPayPrice(int price, LSL_List quick_pay_buttons) - { - m_host.AddScriptLPS(1); - - if (quick_pay_buttons.Data.Length < 4) - { - Error("llSetPayPrice", "List must have at least 4 elements"); - return; - } - m_host.ParentGroup.RootPart.PayPrice[0]=price; - - m_host.ParentGroup.RootPart.PayPrice[1]=(LSL_Integer)quick_pay_buttons.Data[0]; - m_host.ParentGroup.RootPart.PayPrice[2]=(LSL_Integer)quick_pay_buttons.Data[1]; - m_host.ParentGroup.RootPart.PayPrice[3]=(LSL_Integer)quick_pay_buttons.Data[2]; - m_host.ParentGroup.RootPart.PayPrice[4]=(LSL_Integer)quick_pay_buttons.Data[3]; - m_host.ParentGroup.HasGroupChanged = true; - } - - public LSL_Vector llGetCameraPos() - { - m_host.AddScriptLPS(1); - - if (m_item.PermsGranter == UUID.Zero) - return Vector3.Zero; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) - { - Error("llGetCameraPos", "No permissions to track the camera"); - return Vector3.Zero; - } - - ScenePresence presence = World.GetScenePresence(m_host.OwnerID); - if (presence != null) - { - LSL_Vector pos = new LSL_Vector(presence.CameraPosition); - return pos; - } - - return Vector3.Zero; - } - - public LSL_Rotation llGetCameraRot() - { - m_host.AddScriptLPS(1); - - if (m_item.PermsGranter == UUID.Zero) - return Quaternion.Identity; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) - { - Error("llGetCameraRot", "No permissions to track the camera"); - return Quaternion.Identity; - } - - ScenePresence presence = World.GetScenePresence(m_host.OwnerID); - if (presence != null) - { - return new LSL_Rotation(presence.CameraRotation); - } - - return Quaternion.Identity; - } - - public void llSetPrimURL(string url) - { - m_host.AddScriptLPS(1); - Deprecated("llSetPrimURL", "Use llSetPrimMediaParams instead"); - ScriptSleep(m_sleepMsOnSetPrimURL); - } - - public void llRefreshPrimURL() - { - m_host.AddScriptLPS(1); - Deprecated("llRefreshPrimURL"); - ScriptSleep(m_sleepMsOnRefreshPrimURL); - } - - public LSL_String llEscapeURL(string url) - { - m_host.AddScriptLPS(1); - try - { - return Uri.EscapeDataString(url); - } - catch (Exception ex) - { - return "llEscapeURL: " + ex.ToString(); - } - } - - public LSL_String llUnescapeURL(string url) - { - m_host.AddScriptLPS(1); - try - { - return Uri.UnescapeDataString(url); - } - catch (Exception ex) - { - return "llUnescapeURL: " + ex.ToString(); - } - } - - public void llMapDestination(string simname, LSL_Vector pos, LSL_Vector lookAt) - { - m_host.AddScriptLPS(1); - DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, 0); - if (detectedParams == null) return; // only works on the first detected avatar - - ScenePresence avatar = World.GetScenePresence(detectedParams.Key); - if (avatar != null) - { - avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, - simname, pos, lookAt); - } - ScriptSleep(m_sleepMsOnMapDestination); - } - - public void llAddToLandBanList(string avatar, double hours) - { - m_host.AddScriptLPS(1); - UUID key; - ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned)) - { - int expires = 0; - if (hours != 0) - expires = Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours); - - if (UUID.TryParse(avatar, out key)) - { - int idx = land.LandData.ParcelAccessList.FindIndex( - delegate(LandAccessEntry e) - { - if (e.AgentID == key && e.Flags == AccessList.Ban) - return true; - return false; - }); - - if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires))) - return; - - if (idx != -1) - land.LandData.ParcelAccessList.RemoveAt(idx); - - LandAccessEntry entry = new LandAccessEntry(); - - entry.AgentID = key; - entry.Flags = AccessList.Ban; - entry.Expires = expires; - - land.LandData.ParcelAccessList.Add(entry); - - World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); - } - } - ScriptSleep(m_sleepMsOnAddToLandBanList); - } - - public void llRemoveFromLandPassList(string avatar) - { - m_host.AddScriptLPS(1); - UUID key; - ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageAllowed)) - { - if (UUID.TryParse(avatar, out key)) - { - int idx = land.LandData.ParcelAccessList.FindIndex( - delegate(LandAccessEntry e) - { - if (e.AgentID == key && e.Flags == AccessList.Access) - return true; - return false; - }); - - if (idx != -1) - { - land.LandData.ParcelAccessList.RemoveAt(idx); - World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); - } - } - } - ScriptSleep(m_sleepMsOnRemoveFromLandPassList); - } - - public void llRemoveFromLandBanList(string avatar) - { - m_host.AddScriptLPS(1); - UUID key; - ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); - if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned)) - { - if (UUID.TryParse(avatar, out key)) - { - int idx = land.LandData.ParcelAccessList.FindIndex( - delegate(LandAccessEntry e) - { - if (e.AgentID == key && e.Flags == AccessList.Ban) - return true; - return false; - }); - - if (idx != -1) - { - land.LandData.ParcelAccessList.RemoveAt(idx); - World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); - } - } - } - ScriptSleep(m_sleepMsOnRemoveFromLandBanList); - } - - public void llSetCameraParams(LSL_List rules) - { - m_host.AddScriptLPS(1); - - // the object we are in - UUID objectID = m_host.ParentUUID; - if (objectID == UUID.Zero) - return; - - // we need the permission first, to know which avatar we want to set the camera for - UUID agentID = m_item.PermsGranter; - - if (agentID == UUID.Zero) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) - return; - - ScenePresence presence = World.GetScenePresence(agentID); - - // we are not interested in child-agents - if (presence.IsChildAgent) return; - - SortedDictionary parameters = new SortedDictionary(); - object[] data = rules.Data; - for (int i = 0; i < data.Length; ++i) - { - int type; - try - { - type = Convert.ToInt32(data[i++].ToString()); - } - catch - { - Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1])); - return; - } - if (i >= data.Length) break; // odd number of entries => ignore the last - - // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) - switch (type) - { - case ScriptBaseClass.CAMERA_FOCUS: - case ScriptBaseClass.CAMERA_FOCUS_OFFSET: - case ScriptBaseClass.CAMERA_POSITION: - LSL_Vector v = (LSL_Vector)data[i]; - try - { - parameters.Add(type + 1, (float)v.x); - } - catch - { - switch(type) - { - case ScriptBaseClass.CAMERA_FOCUS: - Error("llSetCameraParams", "CAMERA_FOCUS: Parameter x is invalid"); - return; - case ScriptBaseClass.CAMERA_FOCUS_OFFSET: - Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter x is invalid"); - return; - case ScriptBaseClass.CAMERA_POSITION: - Error("llSetCameraParams", "CAMERA_POSITION: Parameter x is invalid"); - return; - } - } - try - { - parameters.Add(type + 2, (float)v.y); - } - catch - { - switch(type) - { - case ScriptBaseClass.CAMERA_FOCUS: - Error("llSetCameraParams", "CAMERA_FOCUS: Parameter y is invalid"); - return; - case ScriptBaseClass.CAMERA_FOCUS_OFFSET: - Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter y is invalid"); - return; - case ScriptBaseClass.CAMERA_POSITION: - Error("llSetCameraParams", "CAMERA_POSITION: Parameter y is invalid"); - return; - } - } - try - { - parameters.Add(type + 3, (float)v.z); - } - catch - { - switch(type) - { - case ScriptBaseClass.CAMERA_FOCUS: - Error("llSetCameraParams", "CAMERA_FOCUS: Parameter z is invalid"); - return; - case ScriptBaseClass.CAMERA_FOCUS_OFFSET: - Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter z is invalid"); - return; - case ScriptBaseClass.CAMERA_POSITION: - Error("llSetCameraParams", "CAMERA_POSITION: Parameter z is invalid"); - return; - } - } - break; - default: - // TODO: clean that up as soon as the implicit casts are in - if (data[i] is LSL_Float) - parameters.Add(type, (float)((LSL_Float)data[i]).value); - else if (data[i] is LSL_Integer) - parameters.Add(type, (float)((LSL_Integer)data[i]).value); - else - { - try - { - parameters.Add(type, Convert.ToSingle(data[i])); - } - catch - { - Error("llSetCameraParams", string.Format("{0}: Parameter is invalid", type)); - } - } - break; - } - } - if (parameters.Count > 0) presence.ControllingClient.SendSetFollowCamProperties(objectID, parameters); - } - - public void llClearCameraParams() - { - m_host.AddScriptLPS(1); - - // the object we are in - UUID objectID = m_host.ParentUUID; - if (objectID == UUID.Zero) - return; - - // we need the permission first, to know which avatar we want to clear the camera for - UUID agentID = m_item.PermsGranter; - - if (agentID == UUID.Zero) - return; - - if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) - return; - - ScenePresence presence = World.GetScenePresence(agentID); - - // we are not interested in child-agents - if (presence.IsChildAgent) - return; - - presence.ControllingClient.SendClearFollowCamProperties(objectID); - } - - public LSL_Float llListStatistics(int operation, LSL_List src) - { - m_host.AddScriptLPS(1); - switch (operation) - { - case ScriptBaseClass.LIST_STAT_RANGE: - return src.Range(); - case ScriptBaseClass.LIST_STAT_MIN: - return src.Min(); - case ScriptBaseClass.LIST_STAT_MAX: - return src.Max(); - case ScriptBaseClass.LIST_STAT_MEAN: - return src.Mean(); - case ScriptBaseClass.LIST_STAT_MEDIAN: - return LSL_List.ToDoubleList(src).Median(); - case ScriptBaseClass.LIST_STAT_NUM_COUNT: - return src.NumericLength(); - case ScriptBaseClass.LIST_STAT_STD_DEV: - return src.StdDev(); - case ScriptBaseClass.LIST_STAT_SUM: - return src.Sum(); - case ScriptBaseClass.LIST_STAT_SUM_SQUARES: - return src.SumSqrs(); - case ScriptBaseClass.LIST_STAT_GEOMETRIC_MEAN: - return src.GeometricMean(); - case ScriptBaseClass.LIST_STAT_HARMONIC_MEAN: - return src.HarmonicMean(); - default: - return 0.0; - } - } - - public LSL_Integer llGetUnixTime() - { - m_host.AddScriptLPS(1); - return Util.UnixTimeSinceEpoch(); - } - - public LSL_Integer llGetParcelFlags(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - return (int)World.LandChannel.GetLandObject((float)pos.x, (float)pos.y).LandData.Flags; - } - - public LSL_Integer llGetRegionFlags() - { - m_host.AddScriptLPS(1); - IEstateModule estate = World.RequestModuleInterface(); - if (estate == null) - return 67108864; - return (int)estate.GetRegionFlags(); - } - - public LSL_String llXorBase64StringsCorrect(string str1, string str2) - { - m_host.AddScriptLPS(1); - string ret = String.Empty; - string src1 = llBase64ToString(str1); - string src2 = llBase64ToString(str2); - int c = 0; - for (int i = 0; i < src1.Length; i++) - { - ret += (char) (src1[i] ^ src2[c]); - - c++; - if (c >= src2.Length) - c = 0; - } - return llStringToBase64(ret); - } - - public LSL_String llHTTPRequest(string url, LSL_List parameters, string body) - { - // Partial implementation: support for parameter flags needed - // see http://wiki.secondlife.com/wiki/LlHTTPRequest - // parameter flags support are implemented in ScriptsHttpRequests.cs - // in StartHttpRequest - - m_host.AddScriptLPS(1); - IHttpRequestModule httpScriptMod = - m_ScriptEngine.World.RequestModuleInterface(); - List param = new List(); - bool ok; - Int32 flag; - - for (int i = 0; i < parameters.Data.Length; i += 2) - { - ok = Int32.TryParse(parameters.Data[i].ToString(), out flag); - if (!ok || flag < 0 || - flag > (int)HttpRequestConstants.HTTP_PRAGMA_NO_CACHE) - { - Error("llHTTPRequest", "Parameter " + i.ToString() + " is an invalid flag"); - } - - param.Add(parameters.Data[i].ToString()); //Add parameter flag - - if (flag != (int)HttpRequestConstants.HTTP_CUSTOM_HEADER) - { - param.Add(parameters.Data[i+1].ToString()); //Add parameter value - } - else - { - //Parameters are in pairs and custom header takes - //arguments in pairs so adjust for header marker. - ++i; - - //Maximum of 8 headers are allowed based on the - //Second Life documentation for llHTTPRequest. - for (int count = 1; count <= 8; ++count) - { - //Enough parameters remaining for (another) header? - if (parameters.Data.Length - i < 2) - { - //There must be at least one name/value pair for custom header - if (count == 1) - Error("llHTTPRequest", "Missing name/value for custom header at parameter " + i.ToString()); - break; - } - - if (HttpStandardHeaders.Contains(parameters.Data[i].ToString(), StringComparer.OrdinalIgnoreCase)) - Error("llHTTPRequest", "Name is invalid as a custom header at parameter " + i.ToString()); - - param.Add(parameters.Data[i].ToString()); - param.Add(parameters.Data[i+1].ToString()); - - //Have we reached the end of the list of headers? - //End is marked by a string with a single digit. - if (i+2 >= parameters.Data.Length || - Char.IsDigit(parameters.Data[i].ToString()[0])) - { - break; - } - - i += 2; - } - } - } - - Vector3 position = m_host.AbsolutePosition; - Vector3 velocity = m_host.Velocity; - Quaternion rotation = m_host.RotationOffset; - string ownerName = String.Empty; - ScenePresence scenePresence = World.GetScenePresence(m_host.OwnerID); - if (scenePresence == null) - ownerName = resolveName(m_host.OwnerID); - else - ownerName = scenePresence.Name; - - RegionInfo regionInfo = World.RegionInfo; - - Dictionary httpHeaders = new Dictionary(); - - string shard = "OpenSim"; - IConfigSource config = m_ScriptEngine.ConfigSource; - if (config.Configs["Network"] != null) - { - shard = config.Configs["Network"].GetString("shard", shard); - } - - httpHeaders["X-SecondLife-Shard"] = shard; - httpHeaders["X-SecondLife-Object-Name"] = m_host.Name; - httpHeaders["X-SecondLife-Object-Key"] = m_host.UUID.ToString(); - httpHeaders["X-SecondLife-Region"] = string.Format("{0} ({1}, {2})", regionInfo.RegionName, regionInfo.RegionLocX, regionInfo.RegionLocY); - httpHeaders["X-SecondLife-Local-Position"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000})", position.X, position.Y, position.Z); - httpHeaders["X-SecondLife-Local-Velocity"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000})", velocity.X, velocity.Y, velocity.Z); - httpHeaders["X-SecondLife-Local-Rotation"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000}, {3:0.000000})", rotation.X, rotation.Y, rotation.Z, rotation.W); - httpHeaders["X-SecondLife-Owner-Name"] = ownerName; - httpHeaders["X-SecondLife-Owner-Key"] = m_host.OwnerID.ToString(); - string userAgent = config.Configs["Network"].GetString("user_agent", null); - if (userAgent != null) - httpHeaders["User-Agent"] = userAgent; - - string authregex = @"^(https?:\/\/)(\w+):(\w+)@(.*)$"; - Regex r = new Regex(authregex); - int[] gnums = r.GetGroupNumbers(); - Match m = r.Match(url); - if (m.Success) { - for (int i = 1; i < gnums.Length; i++) { - //System.Text.RegularExpressions.Group g = m.Groups[gnums[i]]; - //CaptureCollection cc = g.Captures; - } - if (m.Groups.Count == 5) { - httpHeaders["Authorization"] = String.Format("Basic {0}", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(m.Groups[2].ToString() + ":" + m.Groups[3].ToString()))); - url = m.Groups[1].ToString() + m.Groups[4].ToString(); - } - } - - HttpInitialRequestStatus status; - UUID reqID - = httpScriptMod.StartHttpRequest(m_host.LocalId, m_item.ItemID, url, param, httpHeaders, body, out status); - - if (status == HttpInitialRequestStatus.DISALLOWED_BY_FILTER) - Error("llHttpRequest", string.Format("Request to {0} disallowed by filter", url)); - - if (reqID != UUID.Zero) - return reqID.ToString(); - else - return null; - } - - - public void llHTTPResponse(LSL_Key id, int status, string body) - { - // Partial implementation: support for parameter flags needed - // see http://wiki.secondlife.com/wiki/llHTTPResponse - - m_host.AddScriptLPS(1); - - if (m_UrlModule != null) - m_UrlModule.HttpResponse(new UUID(id), status,body); - } - - public void llResetLandBanList() - { - m_host.AddScriptLPS(1); - LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition).LandData; - if (land.OwnerID == m_host.OwnerID) - { - foreach (LandAccessEntry entry in land.ParcelAccessList) - { - if (entry.Flags == AccessList.Ban) - { - land.ParcelAccessList.Remove(entry); - } - } - } - ScriptSleep(m_sleepMsOnResetLandBanList); - } - - public void llResetLandPassList() - { - m_host.AddScriptLPS(1); - LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition).LandData; - if (land.OwnerID == m_host.OwnerID) - { - foreach (LandAccessEntry entry in land.ParcelAccessList) - { - if (entry.Flags == AccessList.Access) - { - land.ParcelAccessList.Remove(entry); - } - } - } - ScriptSleep(m_sleepMsOnResetLandPassList); - } - - public LSL_Integer llGetParcelPrimCount(LSL_Vector pos, int category, int sim_wide) - { - m_host.AddScriptLPS(1); - - ILandObject lo = World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); - - if (lo == null) - return 0; - - IPrimCounts pc = lo.PrimCounts; - - if (sim_wide != ScriptBaseClass.FALSE) - { - if (category == ScriptBaseClass.PARCEL_COUNT_TOTAL) - { - return pc.Simulator; - } - else - { - // counts not implemented yet - return 0; - } - } - else - { - if (category == ScriptBaseClass.PARCEL_COUNT_TOTAL) - return pc.Total; - else if (category == ScriptBaseClass.PARCEL_COUNT_OWNER) - return pc.Owner; - else if (category == ScriptBaseClass.PARCEL_COUNT_GROUP) - return pc.Group; - else if (category == ScriptBaseClass.PARCEL_COUNT_OTHER) - return pc.Others; - else if (category == ScriptBaseClass.PARCEL_COUNT_SELECTED) - return pc.Selected; - else if (category == ScriptBaseClass.PARCEL_COUNT_TEMP) - return 0; // counts not implemented yet - } - - return 0; - } - - public LSL_List llGetParcelPrimOwners(LSL_Vector pos) - { - m_host.AddScriptLPS(1); - LandObject land = (LandObject)World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); - LSL_List ret = new LSL_List(); - if (land != null) - { - foreach (KeyValuePair detectedParams in land.GetLandObjectOwners()) - { - ret.Add(new LSL_String(detectedParams.Key.ToString())); - ret.Add(new LSL_Integer(detectedParams.Value)); - } - } - ScriptSleep(m_sleepMsOnGetParcelPrimOwners); - return ret; - } - - public LSL_Integer llGetObjectPrimCount(string object_id) - { - m_host.AddScriptLPS(1); - SceneObjectPart part = World.GetSceneObjectPart(new UUID(object_id)); - if (part == null) - { - return 0; - } - else - { - return part.ParentGroup.PrimCount; - } - } - - public LSL_Integer llGetParcelMaxPrims(LSL_Vector pos, int sim_wide) - { - m_host.AddScriptLPS(1); - - ILandObject lo = World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); - - if (lo == null) - return 0; - - if (sim_wide != 0) - return lo.GetSimulatorMaxPrimCount(); - else - return lo.GetParcelMaxPrimCount(); - } - - public LSL_List llGetParcelDetails(LSL_Vector pos, LSL_List param) - { - m_host.AddScriptLPS(1); - LandData land = World.GetLandData(pos); - if (land == null) - { - return new LSL_List(0); - } - LSL_List ret = new LSL_List(); - foreach (object o in param.Data) - { - switch (o.ToString()) - { - case "0": - ret.Add(new LSL_String(land.Name)); - break; - case "1": - ret.Add(new LSL_String(land.Description)); - break; - case "2": - ret.Add(new LSL_Key(land.OwnerID.ToString())); - break; - case "3": - ret.Add(new LSL_Key(land.GroupID.ToString())); - break; - case "4": - ret.Add(new LSL_Integer(land.Area)); - break; - case "5": - ret.Add(new LSL_Key(land.GlobalID.ToString())); - break; - default: - ret.Add(new LSL_Integer(0)); - break; - } - } - return ret; - } - - public LSL_String llStringTrim(string src, int type) - { - m_host.AddScriptLPS(1); - if (type == (int)ScriptBaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); } - if (type == (int)ScriptBaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); } - if (type == (int)ScriptBaseClass.STRING_TRIM) { return src.Trim(); } - return src; - } - - public LSL_List llGetObjectDetails(string id, LSL_List args) - { - m_host.AddScriptLPS(1); - - LSL_List ret = new LSL_List(); - UUID key = new UUID(); - if (UUID.TryParse(id, out key)) - { - ScenePresence av = World.GetScenePresence(key); - - if (av != null) - { - foreach (object o in args.Data) - { - switch (int.Parse(o.ToString())) - { - case ScriptBaseClass.OBJECT_NAME: - ret.Add(new LSL_String(av.Firstname + " " + av.Lastname)); - break; - case ScriptBaseClass.OBJECT_DESC: - ret.Add(new LSL_String("")); - break; - case ScriptBaseClass.OBJECT_POS: - ret.Add(new LSL_Vector((double)av.AbsolutePosition.X, (double)av.AbsolutePosition.Y, (double)av.AbsolutePosition.Z)); - break; - case ScriptBaseClass.OBJECT_ROT: - ret.Add(new LSL_Rotation(av.GetWorldRotation())); - break; - case ScriptBaseClass.OBJECT_VELOCITY: - ret.Add(new LSL_Vector(av.GetWorldVelocity())); - break; - case ScriptBaseClass.OBJECT_OWNER: - ret.Add(new LSL_String(id)); - break; - case ScriptBaseClass.OBJECT_GROUP: - ret.Add(new LSL_String(UUID.Zero.ToString())); - break; - case ScriptBaseClass.OBJECT_CREATOR: - ret.Add(new LSL_String(UUID.Zero.ToString())); - break; - // For the following 8 see the Object version below - case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: - ret.Add(new LSL_Integer(av.RunningScriptCount())); - break; - case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: - ret.Add(new LSL_Integer(av.ScriptCount())); - break; - case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: - ret.Add(new LSL_Integer(av.RunningScriptCount() * 16384)); - break; - case ScriptBaseClass.OBJECT_SCRIPT_TIME: - ret.Add(new LSL_Float(av.ScriptExecutionTime() / 1000.0f)); - break; - case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: - ret.Add(new LSL_Integer(1)); - break; - case ScriptBaseClass.OBJECT_SERVER_COST: - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_STREAMING_COST: - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_PHYSICS_COST: - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_ROOT: - SceneObjectPart p = av.ParentPart; - if (p != null) - { - ret.Add(new LSL_String(p.ParentGroup.RootPart.UUID.ToString())); - } - else - { - ret.Add(new LSL_String(id)); - } - break; - case ScriptBaseClass.OBJECT_ATTACHED_POINT: - ret.Add(new LSL_Integer(0)); - break; - case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: // Pathfinding - ret.Add(new LSL_Integer(ScriptBaseClass.OPT_AVATAR)); - break; - case ScriptBaseClass.OBJECT_PHYSICS: - ret.Add(new LSL_Integer(0)); - break; - case ScriptBaseClass.OBJECT_PHANTOM: - ret.Add(new LSL_Integer(0)); - break; - case ScriptBaseClass.OBJECT_TEMP_ON_REZ: - ret.Add(new LSL_Integer(0)); - break; - case ScriptBaseClass.OBJECT_RENDER_WEIGHT: - ret.Add(new LSL_Integer(-1)); - break; - case ScriptBaseClass.OBJECT_HOVER_HEIGHT: - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: - LSL_Float shapeType; - if (av.Appearance.VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MALE] != 0) - shapeType = new LSL_Float(1); - else - shapeType = new LSL_Float(0); - ret.Add(shapeType); - break; - case ScriptBaseClass.OBJECT_LAST_OWNER_ID: - ret.Add(new LSL_Key(ScriptBaseClass.NULL_KEY)); - break; - default: - // Invalid or unhandled constant. - ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); - break; - } - } - - return ret; - } - - SceneObjectPart obj = World.GetSceneObjectPart(key); - if (obj != null) - { - foreach (object o in args.Data) - { - switch (int.Parse(o.ToString())) - { - case ScriptBaseClass.OBJECT_NAME: - ret.Add(new LSL_String(obj.Name)); - break; - case ScriptBaseClass.OBJECT_DESC: - ret.Add(new LSL_String(obj.Description)); - break; - case ScriptBaseClass.OBJECT_POS: - ret.Add(new LSL_Vector(obj.AbsolutePosition.X, obj.AbsolutePosition.Y, obj.AbsolutePosition.Z)); - break; - case ScriptBaseClass.OBJECT_ROT: - Quaternion rot = Quaternion.Identity; - - if (obj.ParentGroup.IsAttachment) - { - ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); - - if (sp != null) - rot = sp.GetWorldRotation(); - } - else - { - if (obj.ParentGroup.RootPart == obj) - rot = obj.ParentGroup.GroupRotation; - else - rot = obj.GetWorldRotation(); - } - - LSL_Rotation objrot = new LSL_Rotation(rot); - ret.Add(objrot); - - break; - case ScriptBaseClass.OBJECT_VELOCITY: - Vector3 vel = Vector3.Zero; - - if (obj.ParentGroup.IsAttachment) - { - ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); - - if (sp != null) - vel = sp.GetWorldVelocity(); - } - else - { - vel = obj.Velocity; - } - - ret.Add(vel); - break; - case ScriptBaseClass.OBJECT_OWNER: - ret.Add(new LSL_String(obj.OwnerID.ToString())); - break; - case ScriptBaseClass.OBJECT_GROUP: - ret.Add(new LSL_String(obj.GroupID.ToString())); - break; - case ScriptBaseClass.OBJECT_CREATOR: - ret.Add(new LSL_String(obj.CreatorID.ToString())); - break; - case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: - ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount())); - break; - case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: - ret.Add(new LSL_Integer(obj.ParentGroup.ScriptCount())); - break; - case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: - // The value returned in SL for mono scripts is 65536 * number of active scripts - // and 16384 * number of active scripts for LSO. since llGetFreememory - // is coded to give the LSO value use it here - ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount() * 16384)); - break; - case ScriptBaseClass.OBJECT_SCRIPT_TIME: - // Average cpu time in seconds per simulator frame expended on all scripts in the object - ret.Add(new LSL_Float(obj.ParentGroup.ScriptExecutionTime() / 1000.0f)); - break; - case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: - // according to the SL wiki A prim or linkset will have prim - // equivalent of the number of prims in a linkset if it does not - // contain a mesh anywhere in the link set or is not a normal prim - // The value returned in SL for normal prims is prim count - ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount)); - break; - // The following 3 costs I have intentionaly coded to return zero. They are part of - // "Land Impact" calculations. These calculations are probably not applicable - // to OpenSim and are not yet complete in SL - case ScriptBaseClass.OBJECT_SERVER_COST: - // The linden calculation is here - // http://wiki.secondlife.com/wiki/Mesh/Mesh_Server_Weight - // The value returned in SL for normal prims looks like the prim count - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_STREAMING_COST: - // The linden calculation is here - // http://wiki.secondlife.com/wiki/Mesh/Mesh_Streaming_Cost - // The value returned in SL for normal prims looks like the prim count * 0.06 - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_PHYSICS_COST: - // The linden calculation is here - // http://wiki.secondlife.com/wiki/Mesh/Mesh_physics - // The value returned in SL for normal prims looks like the prim count - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_ROOT: - ret.Add(new LSL_String(obj.ParentGroup.RootPart.UUID.ToString())); - break; - case ScriptBaseClass.OBJECT_ATTACHED_POINT: - ret.Add(new LSL_Integer(obj.ParentGroup.AttachmentPoint)); - break; - case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: - byte pcode = obj.Shape.PCode; - if (obj.ParentGroup.AttachmentPoint != 0 - || pcode == (byte)PCode.Grass - || pcode == (byte)PCode.Tree - || pcode == (byte)PCode.NewTree) - { - ret.Add(new LSL_Integer(ScriptBaseClass.OPT_OTHER)); - } - else - { - ret.Add(new LSL_Integer(ScriptBaseClass.OPT_LEGACY_LINKSET)); - } - break; - case ScriptBaseClass.OBJECT_PHYSICS: - if (obj.ParentGroup.AttachmentPoint != 0) - { - ret.Add(new LSL_Integer(0)); // Always false if attached - } - else - { - ret.Add(new LSL_Integer(obj.ParentGroup.UsesPhysics ? 1 : 0)); - } - break; - case ScriptBaseClass.OBJECT_PHANTOM: - if (obj.ParentGroup.AttachmentPoint != 0) - { - ret.Add(new LSL_Integer(0)); // Always false if attached - } - else - { - ret.Add(new LSL_Integer(obj.ParentGroup.IsPhantom ? 1 : 0)); - } - break; - case ScriptBaseClass.OBJECT_TEMP_ON_REZ: - ret.Add(new LSL_Integer(obj.ParentGroup.IsTemporary ? 1 : 0)); - break; - case ScriptBaseClass.OBJECT_RENDER_WEIGHT: - ret.Add(new LSL_Integer(0)); - break; - case ScriptBaseClass.OBJECT_HOVER_HEIGHT: - ret.Add(new LSL_Float(0)); - break; - case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: - ret.Add(new LSL_Float(-1)); - break; - case ScriptBaseClass.OBJECT_LAST_OWNER_ID: - ret.Add(new LSL_Key(obj.ParentGroup.LastOwnerID.ToString())); - break; - default: - // Invalid or unhandled constant. - ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); - break; - } - } - - return ret; - } - } - - return new LSL_List(); - } - - internal UUID GetScriptByName(string name) - { - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - if (item == null || item.Type != 10) - return UUID.Zero; - - return item.ItemID; - } - - /// - /// Reports the script error in the viewer's Script Warning/Error dialog and shouts it on the debug channel. - /// - /// The name of the command that generated the error. - /// The error message to report to the user. - internal void Error(string command, string message) - { - string text = command + ": " + message; - if (text.Length > 1023) - { - text = text.Substring(0, 1023); - } - - World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, ScriptBaseClass.DEBUG_CHANNEL, - m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); - - IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); - if (wComm != null) - { - wComm.DeliverMessage(ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.Name, m_host.UUID, text); - } - } - - /// - /// Reports that the command is not implemented as a script error. - /// - /// The name of the command that is not implemented. - /// Additional information to report to the user. (Optional) - internal void NotImplemented(string command, string message = "") - { - if (throwErrorOnNotImplemented) - { - if (message != "") - { - message = " - " + message; - } - - throw new NotImplementedException("Command not implemented: " + command + message); - } - else - { - string text = "Command not implemented"; - if (message != "") - { - text = text + " - " + message; - } - - Error(command, text); - } - } - - /// - /// Reports that the command is deprecated as a script error. - /// - /// The name of the command that is deprecated. - /// Additional information to report to the user. (Optional) - internal void Deprecated(string command, string message = "") - { - string text = "Command deprecated"; - if (message != "") - { - text = text + " - " + message; - } - - Error(command, text); - } - - public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); - protected void WithNotecard(UUID assetID, AssetRequestCallback cb) - { - World.AssetService.Get(assetID.ToString(), this, - delegate(string i, object sender, AssetBase a) - { - UUID uuid = UUID.Zero; - UUID.TryParse(i, out uuid); - cb(uuid, a); - }); - } - - public LSL_String llGetNumberOfNotecardLines(string name) - { - m_host.AddScriptLPS(1); - - UUID assetID = UUID.Zero; - - if (!UUID.TryParse(name, out assetID)) - { - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - if (item != null && item.Type == 7) - assetID = item.AssetID; - } - - if (assetID == UUID.Zero) - { - // => complain loudly, as specified by the LSL docs - Error("llGetNumberOfNotecardLines", "Can't find notecard '" + name + "'"); - - return UUID.Zero.ToString(); - } - - string reqIdentifier = UUID.Random().ToString(); - - // was: UUID tid = tid = AsyncCommands. - UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, reqIdentifier); - - if (NotecardCache.IsCached(assetID)) - { - AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(assetID).ToString()); - - ScriptSleep(m_sleepMsOnGetNumberOfNotecardLines); - return tid.ToString(); - } - - WithNotecard(assetID, delegate (UUID id, AssetBase a) - { - if (a == null || a.Type != 7) - { - Error("llGetNumberOfNotecardLines", "Can't find notecard '" + name + "'"); - return; - } - - NotecardCache.Cache(id, a.Data); - AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(id).ToString()); - }); - - ScriptSleep(m_sleepMsOnGetNumberOfNotecardLines); - return tid.ToString(); - } - - public LSL_String llGetNotecardLine(string name, int line) - { - m_host.AddScriptLPS(1); - - UUID assetID = UUID.Zero; - - if (!UUID.TryParse(name, out assetID)) - { - TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); - - if (item != null && item.Type == 7) - assetID = item.AssetID; - } - - if (assetID == UUID.Zero) - { - // => complain loudly, as specified by the LSL docs - Error("llGetNotecardLine", "Can't find notecard '" + name + "'"); - - return UUID.Zero.ToString(); - } - - string reqIdentifier = UUID.Random().ToString(); - - // was: UUID tid = tid = AsyncCommands. - UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, reqIdentifier); - - if (NotecardCache.IsCached(assetID)) - { - AsyncCommands.DataserverPlugin.DataserverReply( - reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax)); - - ScriptSleep(m_sleepMsOnGetNotecardLine); - return tid.ToString(); - } - - WithNotecard(assetID, delegate (UUID id, AssetBase a) - { - if (a == null || a.Type != 7) - { - Error("llGetNotecardLine", "Can't find notecard '" + name + "'"); - return; - } - - string data = Encoding.UTF8.GetString(a.Data); - //m_log.Debug(data); - NotecardCache.Cache(id, a.Data); - AsyncCommands.DataserverPlugin.DataserverReply( - reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax)); - }); - - ScriptSleep(m_sleepMsOnGetNotecardLine); - return tid.ToString(); - } - - public void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc) - { - SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); - if (obj == null) - return; - - if (obj.OwnerID != m_host.OwnerID) - return; - - SetEntityParams(new List() { obj }, rules, originFunc); - } - - public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) - { - SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); - - if (obj != null && obj.OwnerID == m_host.OwnerID) - return GetEntityParams(obj, rules); - - return new LSL_List(); - } - - public void print(string str) - { - // yes, this is a real LSL function. See: http://wiki.secondlife.com/wiki/Print - IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "OSSL"); - if (ossl != null) - { - ossl.CheckThreatLevel(ThreatLevel.High, "print"); - m_log.Info("LSL print():" + str); - } - } - - private string Name2Username(string name) - { - string[] parts = name.Split(new char[] {' '}); - if (parts.Length < 2) - return name.ToLower(); - if (parts[1] == "Resident") - return parts[0].ToLower(); - - return name.Replace(" ", ".").ToLower(); - } - - public LSL_String llGetUsername(string id) - { - return Name2Username(llKey2Name(id)); - } - - public LSL_String llRequestUsername(string id) - { - UUID rq = UUID.Random(); - - AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString()); - - AsyncCommands.DataserverPlugin.DataserverReply(rq.ToString(), Name2Username(llKey2Name(id))); - - return rq.ToString(); - } - - public LSL_String llGetDisplayName(string id) - { - return llKey2Name(id); - } - - public LSL_String llRequestDisplayName(string id) - { - UUID rq = UUID.Random(); - - AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString()); - - AsyncCommands.DataserverPlugin.DataserverReply(rq.ToString(), llKey2Name(id)); - - return rq.ToString(); - } - - private struct Tri - { - public Vector3 p1; - public Vector3 p2; - public Vector3 p3; - } - - private bool InBoundingBox(ScenePresence avatar, Vector3 point) - { - float height = avatar.Appearance.AvatarHeight; - Vector3 b1 = avatar.AbsolutePosition + new Vector3(-0.22f, -0.22f, -height/2); - Vector3 b2 = avatar.AbsolutePosition + new Vector3(0.22f, 0.22f, height/2); - - if (point.X > b1.X && point.X < b2.X && - point.Y > b1.Y && point.Y < b2.Y && - point.Z > b1.Z && point.Z < b2.Z) - return true; - return false; - } - - private ContactResult[] AvatarIntersection(Vector3 rayStart, Vector3 rayEnd) - { - List contacts = new List(); - - Vector3 ab = rayEnd - rayStart; - - World.ForEachScenePresence(delegate(ScenePresence sp) - { - Vector3 ac = sp.AbsolutePosition - rayStart; -// Vector3 bc = sp.AbsolutePosition - rayEnd; - - double d = Math.Abs(Vector3.Mag(Vector3.Cross(ab, ac)) / Vector3.Distance(rayStart, rayEnd)); - - if (d > 1.5) - return; - - double d2 = Vector3.Dot(Vector3.Negate(ab), ac); - - if (d2 > 0) - return; - - double dp = Math.Sqrt(Vector3.Mag(ac) * Vector3.Mag(ac) - d * d); - Vector3 p = rayStart + Vector3.Divide(Vector3.Multiply(ab, (float)dp), (float)Vector3.Mag(ab)); - - if (!InBoundingBox(sp, p)) - return; - - ContactResult result = new ContactResult (); - result.ConsumerID = sp.LocalId; - result.Depth = Vector3.Distance(rayStart, p); - result.Normal = Vector3.Zero; - result.Pos = p; - - contacts.Add(result); - }); - - return contacts.ToArray(); - } - - private ContactResult[] ObjectIntersection(Vector3 rayStart, Vector3 rayEnd, bool includePhysical, bool includeNonPhysical, bool includePhantom) - { - Ray ray = new Ray(rayStart, Vector3.Normalize(rayEnd - rayStart)); - List contacts = new List(); - - Vector3 ab = rayEnd - rayStart; - - World.ForEachSOG(delegate(SceneObjectGroup group) - { - if (m_host.ParentGroup == group) - return; - - if (group.IsAttachment) - return; - - if (group.RootPart.PhysActor == null) - { - if (!includePhantom) - return; - } - else - { - if (group.RootPart.PhysActor.IsPhysical) - { - if (!includePhysical) - return; - } - else - { - if (!includeNonPhysical) - return; - } - } - - // Find the radius ouside of which we don't even need to hit test - float minX; - float maxX; - float minY; - float maxY; - float minZ; - float maxZ; - - float radius = 0.0f; - - group.GetAxisAlignedBoundingBoxRaw(out minX, out maxX, out minY, out maxY, out minZ, out maxZ); - - if (Math.Abs(minX) > radius) - radius = Math.Abs(minX); - if (Math.Abs(minY) > radius) - radius = Math.Abs(minY); - if (Math.Abs(minZ) > radius) - radius = Math.Abs(minZ); - if (Math.Abs(maxX) > radius) - radius = Math.Abs(maxX); - if (Math.Abs(maxY) > radius) - radius = Math.Abs(maxY); - if (Math.Abs(maxZ) > radius) - radius = Math.Abs(maxZ); - radius = radius*1.413f; - Vector3 ac = group.AbsolutePosition - rayStart; -// Vector3 bc = group.AbsolutePosition - rayEnd; - - double d = Math.Abs(Vector3.Mag(Vector3.Cross(ab, ac)) / Vector3.Distance(rayStart, rayEnd)); - - // Too far off ray, don't bother - if (d > radius) - return; - - // Behind ray, drop - double d2 = Vector3.Dot(Vector3.Negate(ab), ac); - if (d2 > 0) - return; - - ray = new Ray(rayStart, Vector3.Normalize(rayEnd - rayStart)); - EntityIntersection intersection = group.TestIntersection(ray, true, false); - // Miss. - if (!intersection.HitTF) - return; - - Vector3 b1 = group.AbsolutePosition + new Vector3(minX, minY, minZ); - Vector3 b2 = group.AbsolutePosition + new Vector3(maxX, maxY, maxZ); - //m_log.DebugFormat("[LLCASTRAY]: min<{0},{1},{2}>, max<{3},{4},{5}> = hitp<{6},{7},{8}>", b1.X,b1.Y,b1.Z,b2.X,b2.Y,b2.Z,intersection.ipoint.X,intersection.ipoint.Y,intersection.ipoint.Z); - if (!(intersection.ipoint.X >= b1.X && intersection.ipoint.X <= b2.X && - intersection.ipoint.Y >= b1.Y && intersection.ipoint.Y <= b2.Y && - intersection.ipoint.Z >= b1.Z && intersection.ipoint.Z <= b2.Z)) - return; - - ContactResult result = new ContactResult (); - result.ConsumerID = group.LocalId; - result.Depth = intersection.distance; - result.Normal = intersection.normal; - result.Pos = intersection.ipoint; - - contacts.Add(result); - }); - - return contacts.ToArray(); - } - - private ContactResult? GroundIntersection(Vector3 rayStart, Vector3 rayEnd) - { - double[,] heightfield = World.Heightmap.GetDoubles(); - List contacts = new List(); - - double min = 2048.0; - double max = 0.0; - - // Find the min and max of the heightfield - for (int x = 0 ; x < World.Heightmap.Width ; x++) - { - for (int y = 0 ; y < World.Heightmap.Height ; y++) - { - if (heightfield[x, y] > max) - max = heightfield[x, y]; - if (heightfield[x, y] < min) - min = heightfield[x, y]; - } - } - - - // A ray extends past rayEnd, but doesn't go back before - // rayStart. If the start is above the highest point of the ground - // and the ray goes up, we can't hit the ground. Ever. - if (rayStart.Z > max && rayEnd.Z >= rayStart.Z) - return null; - - // Same for going down - if (rayStart.Z < min && rayEnd.Z <= rayStart.Z) - return null; - - List trilist = new List(); - - // Create our triangle list - for (int x = 1 ; x < World.Heightmap.Width ; x++) - { - for (int y = 1 ; y < World.Heightmap.Height ; y++) - { - Tri t1 = new Tri(); - Tri t2 = new Tri(); - - Vector3 p1 = new Vector3(x-1, y-1, (float)heightfield[x-1, y-1]); - Vector3 p2 = new Vector3(x, y-1, (float)heightfield[x, y-1]); - Vector3 p3 = new Vector3(x, y, (float)heightfield[x, y]); - Vector3 p4 = new Vector3(x-1, y, (float)heightfield[x-1, y]); - - t1.p1 = p1; - t1.p2 = p2; - t1.p3 = p3; - - t2.p1 = p3; - t2.p2 = p4; - t2.p3 = p1; - - trilist.Add(t1); - trilist.Add(t2); - } - } - - // Ray direction - Vector3 rayDirection = rayEnd - rayStart; - - foreach (Tri t in trilist) - { - // Compute triangle plane normal and edges - Vector3 u = t.p2 - t.p1; - Vector3 v = t.p3 - t.p1; - Vector3 n = Vector3.Cross(u, v); - - if (n == Vector3.Zero) - continue; - - Vector3 w0 = rayStart - t.p1; - double a = -Vector3.Dot(n, w0); - double b = Vector3.Dot(n, rayDirection); - - // Not intersecting the plane, or in plane (same thing) - // Ignoring this MAY cause the ground to not be detected - // sometimes - if (Math.Abs(b) < 0.000001) - continue; - - double r = a / b; - - // ray points away from plane - if (r < 0.0) - continue; - - Vector3 ip = rayStart + Vector3.Multiply(rayDirection, (float)r); - - float uu = Vector3.Dot(u, u); - float uv = Vector3.Dot(u, v); - float vv = Vector3.Dot(v, v); - Vector3 w = ip - t.p1; - float wu = Vector3.Dot(w, u); - float wv = Vector3.Dot(w, v); - float d = uv * uv - uu * vv; - - float cs = (uv * wv - vv * wu) / d; - if (cs < 0 || cs > 1.0) - continue; - float ct = (uv * wu - uu * wv) / d; - if (ct < 0 || (cs + ct) > 1.0) - continue; - - // Add contact point - ContactResult result = new ContactResult (); - result.ConsumerID = 0; - result.Depth = Vector3.Distance(rayStart, ip); - result.Normal = n; - result.Pos = ip; - - contacts.Add(result); - } - - if (contacts.Count == 0) - return null; - - contacts.Sort(delegate(ContactResult a, ContactResult b) - { - return (int)(a.Depth - b.Depth); - }); - - return contacts[0]; - } - - public LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options) - { - // Use llCastRay V3 if configured - if (m_useCastRayV3) - return llCastRayV3(start, end, options); - - LSL_List list = new LSL_List(); - - m_host.AddScriptLPS(1); - - Vector3 rayStart = start; - Vector3 rayEnd = end; - Vector3 dir = rayEnd - rayStart; - - float dist = Vector3.Mag(dir); - - int count = 1; - bool detectPhantom = false; - int dataFlags = 0; - int rejectTypes = 0; - - for (int i = 0; i < options.Length; i += 2) - { - if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_MAX_HITS) - count = options.GetLSLIntegerItem(i + 1); - else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DETECT_PHANTOM) - detectPhantom = (options.GetLSLIntegerItem(i + 1) > 0); - else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DATA_FLAGS) - dataFlags = options.GetLSLIntegerItem(i + 1); - else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_REJECT_TYPES) - rejectTypes = options.GetLSLIntegerItem(i + 1); - } - - if (count > 16) - count = 16; - - List results = new List(); - - bool checkTerrain = !((rejectTypes & ScriptBaseClass.RC_REJECT_LAND) == ScriptBaseClass.RC_REJECT_LAND); - bool checkAgents = !((rejectTypes & ScriptBaseClass.RC_REJECT_AGENTS) == ScriptBaseClass.RC_REJECT_AGENTS); - bool checkNonPhysical = !((rejectTypes & ScriptBaseClass.RC_REJECT_NONPHYSICAL) == ScriptBaseClass.RC_REJECT_NONPHYSICAL); - bool checkPhysical = !((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) == ScriptBaseClass.RC_REJECT_PHYSICAL); - - - if (World.SupportsRayCastFiltered()) - { - if (dist == 0) - return list; - - RayFilterFlags rayfilter = RayFilterFlags.ClosestAndBackCull; - if (checkTerrain) - rayfilter |= RayFilterFlags.land; -// if (checkAgents) -// rayfilter |= RayFilterFlags.agent; - if (checkPhysical) - rayfilter |= RayFilterFlags.physical; - if (checkNonPhysical) - rayfilter |= RayFilterFlags.nonphysical; - if (detectPhantom) - rayfilter |= RayFilterFlags.LSLPhantom; - - Vector3 direction = dir * ( 1/dist); - - if(rayfilter == 0) - { - list.Add(new LSL_Integer(0)); - return list; - } - - // get some more contacts to sort ??? - int physcount = 4 * count; - if (physcount > 20) - physcount = 20; - - object physresults; - physresults = World.RayCastFiltered(rayStart, direction, dist, physcount, rayfilter); - - if (physresults == null) - { - list.Add(new LSL_Integer(-3)); // timeout error - return list; - } - - results = (List)physresults; - - // for now physics doesn't detect sitted avatars so do it outside physics - if (checkAgents) - { - ContactResult[] agentHits = AvatarIntersection(rayStart, rayEnd); - foreach (ContactResult r in agentHits) - results.Add(r); - } - - // TODO: Replace this with a better solution. ObjectIntersection can only - // detect nonphysical phantoms. They are detected by virtue of being - // nonphysical (e.g. no PhysActor) so will not conflict with detecting - // physicsl phantoms as done by the physics scene - // We don't want anything else but phantoms here. - if (detectPhantom) - { - ContactResult[] objectHits = ObjectIntersection(rayStart, rayEnd, false, false, true); - foreach (ContactResult r in objectHits) - results.Add(r); - } - } - else - { - if (checkAgents) - { - ContactResult[] agentHits = AvatarIntersection(rayStart, rayEnd); - foreach (ContactResult r in agentHits) - results.Add(r); - } - - if (checkPhysical || checkNonPhysical || detectPhantom) - { - ContactResult[] objectHits = ObjectIntersection(rayStart, rayEnd, checkPhysical, checkNonPhysical, detectPhantom); - for (int iter = 0; iter < objectHits.Length; iter++) - { - // Redistance the Depth because the Scene RayCaster returns distance from center to make the rezzing code simpler. - objectHits[iter].Depth = Vector3.Distance(objectHits[iter].Pos, rayStart); - results.Add(objectHits[iter]); - } - } - } - - if (checkTerrain) - { - ContactResult? groundContact = GroundIntersection(rayStart, rayEnd); - if (groundContact != null) - results.Add((ContactResult)groundContact); - } - - results.Sort(delegate(ContactResult a, ContactResult b) - { - return a.Depth.CompareTo(b.Depth); - }); - - int values = 0; - SceneObjectGroup thisgrp = m_host.ParentGroup; - - foreach (ContactResult result in results) - { - if (result.Depth > dist) - continue; - - // physics ray can return colisions with host prim - if (m_host.LocalId == result.ConsumerID) - continue; - - UUID itemID = UUID.Zero; - int linkNum = 0; - - SceneObjectPart part = World.GetSceneObjectPart(result.ConsumerID); - // It's a prim! - if (part != null) - { - // dont detect members of same object ??? - if (part.ParentGroup == thisgrp) - continue; - - if ((dataFlags & ScriptBaseClass.RC_GET_ROOT_KEY) == ScriptBaseClass.RC_GET_ROOT_KEY) - itemID = part.ParentGroup.UUID; - else - itemID = part.UUID; - - linkNum = part.LinkNum; - } - else - { - ScenePresence sp = World.GetScenePresence(result.ConsumerID); - /// It it a boy? a girl? - if (sp != null) - itemID = sp.UUID; - } - - list.Add(new LSL_String(itemID.ToString())); - list.Add(new LSL_String(result.Pos.ToString())); - - if ((dataFlags & ScriptBaseClass.RC_GET_LINK_NUM) == ScriptBaseClass.RC_GET_LINK_NUM) - list.Add(new LSL_Integer(linkNum)); - - if ((dataFlags & ScriptBaseClass.RC_GET_NORMAL) == ScriptBaseClass.RC_GET_NORMAL) - list.Add(new LSL_Vector(result.Normal)); - - values++; - if (values >= count) - break; - } - - list.Add(new LSL_Integer(values)); - - return list; - } - - /// - /// Implementation of llCastRay similar to SL 2015-04-21. - /// http://wiki.secondlife.com/wiki/LlCastRay - /// Uses pure geometry, bounding shapes, meshing and no physics - /// for prims, sculpts, meshes, avatars and terrain. - /// Implements all flags, reject types and data flags. - /// Can handle both objects/groups and prims/parts, by config. - /// May sometimes be inaccurate owing to calculation precision, - /// meshing detail level and a bug in libopenmetaverse PrimMesher. - /// - public LSL_List llCastRayV3(LSL_Vector start, LSL_Vector end, LSL_List options) - { - m_host.AddScriptLPS(1); - LSL_List result = new LSL_List(); - - // Prepare throttle data - int calledMs = Environment.TickCount; - Stopwatch stopWatch = new Stopwatch(); - stopWatch.Start(); - UUID regionId = World.RegionInfo.RegionID; - UUID userId = UUID.Zero; - int msAvailable = 0; - // Throttle per owner when attachment or "vehicle" (sat upon) - if (m_host.ParentGroup.IsAttachment || m_host.ParentGroup.GetSittingAvatars().Count > 0) - { - userId = m_host.OwnerID; - msAvailable = m_msPerAvatarInCastRay; - } - // Throttle per parcel when not attachment or vehicle - else - { - LandData land = World.GetLandData(m_host.GetWorldPosition()); - if (land != null) - msAvailable = m_msPerRegionInCastRay * land.Area / 65536; - } - // Clamp for "oversized" parcels on varregions - if (msAvailable > m_msMaxInCastRay) - msAvailable = m_msMaxInCastRay; - - // Check throttle data - int fromCalledMs = calledMs - m_msThrottleInCastRay; - lock (m_castRayCalls) - { - for (int i = m_castRayCalls.Count - 1; i >= 0; i--) - { - // Delete old calls from throttle data - if (m_castRayCalls[i].CalledMs < fromCalledMs) - m_castRayCalls.RemoveAt(i); - // Use current region (in multi-region sims) - else if (m_castRayCalls[i].RegionId == regionId) - { - // Reduce available time with recent calls - if (m_castRayCalls[i].UserId == userId) - msAvailable -= m_castRayCalls[i].UsedMs; - } - } - } - - // Return failure if not enough available time - if (msAvailable < m_msMinInCastRay) - { - result.Add(new LSL_Integer(ScriptBaseClass.RCERR_CAST_TIME_EXCEEDED)); - return result; - } - - // Initialize - List rayHits = new List(); - float tol = m_floatToleranceInCastRay; - Vector3 pos1Ray = start; - Vector3 pos2Ray = end; - - // Get input options - int rejectTypes = 0; - int dataFlags = 0; - int maxHits = 1; - bool detectPhantom = false; - for (int i = 0; i < options.Length; i += 2) - { - if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_REJECT_TYPES) - rejectTypes = options.GetLSLIntegerItem(i + 1); - else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DATA_FLAGS) - dataFlags = options.GetLSLIntegerItem(i + 1); - else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_MAX_HITS) - maxHits = options.GetLSLIntegerItem(i + 1); - else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DETECT_PHANTOM) - detectPhantom = (options.GetLSLIntegerItem(i + 1) != 0); - } - if (maxHits > m_maxHitsInCastRay) - maxHits = m_maxHitsInCastRay; - bool rejectAgents = ((rejectTypes & ScriptBaseClass.RC_REJECT_AGENTS) != 0); - bool rejectPhysical = ((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) != 0); - bool rejectNonphysical = ((rejectTypes & ScriptBaseClass.RC_REJECT_NONPHYSICAL) != 0); - bool rejectLand = ((rejectTypes & ScriptBaseClass.RC_REJECT_LAND) != 0); - bool getNormal = ((dataFlags & ScriptBaseClass.RC_GET_NORMAL) != 0); - bool getRootKey = ((dataFlags & ScriptBaseClass.RC_GET_ROOT_KEY) != 0); - bool getLinkNum = ((dataFlags & ScriptBaseClass.RC_GET_LINK_NUM) != 0); - - // Calculate some basic parameters - Vector3 vecRay = pos2Ray - pos1Ray; - float rayLength = vecRay.Length(); - - // Try to get a mesher and return failure if none, degenerate ray, or max 0 hits - IRendering primMesher = null; - List renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); - if (renderers.Count < 1 || rayLength < tol || m_maxHitsInCastRay < 1) - { - result.Add(new LSL_Integer(ScriptBaseClass.RCERR_UNKNOWN)); - return result; - } - primMesher = RenderingLoader.LoadRenderer(renderers[0]); - - // Iterate over all objects/groups and prims/parts in region - World.ForEachSOG( - delegate(SceneObjectGroup group) - { - // Check group filters unless part filters are configured - bool isPhysical = (group.RootPart != null && group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical); - bool isNonphysical = !isPhysical; - bool isPhantom = group.IsPhantom || group.IsVolumeDetect; - bool isAttachment = group.IsAttachment; - bool doGroup = true; - if (isPhysical && rejectPhysical) - doGroup = false; - if (isNonphysical && rejectNonphysical) - doGroup = false; - if (isPhantom && detectPhantom) - doGroup = true; - if (m_filterPartsInCastRay) - doGroup = true; - if (isAttachment && !m_doAttachmentsInCastRay) - doGroup = false; - // Parse object/group if passed filters - if (doGroup) - { - // Iterate over all prims/parts in object/group - foreach(SceneObjectPart part in group.Parts) - { - // Check part filters if configured - if (m_filterPartsInCastRay) - { - isPhysical = (part.PhysActor != null && part.PhysActor.IsPhysical); - isNonphysical = !isPhysical; - isPhantom = ((part.Flags & PrimFlags.Phantom) != 0) || (part.VolumeDetectActive); - bool doPart = true; - if (isPhysical && rejectPhysical) - doPart = false; - if (isNonphysical && rejectNonphysical) - doPart = false; - if (isPhantom && detectPhantom) - doPart = true; - if (!doPart) - continue; - } - - // Parse prim/part and project ray if passed filters - Vector3 scalePart = part.Scale; - Vector3 posPart = part.GetWorldPosition(); - Quaternion rotPart = part.GetWorldRotation(); - Quaternion rotPartInv = Quaternion.Inverse(rotPart); - Vector3 pos1RayProj = ((pos1Ray - posPart) * rotPartInv) / scalePart; - Vector3 pos2RayProj = ((pos2Ray - posPart) * rotPartInv) / scalePart; - - // Filter parts by shape bounding boxes - Vector3 shapeBoxMax = new Vector3(0.5f, 0.5f, 0.5f); - if (!part.Shape.SculptEntry) - shapeBoxMax = shapeBoxMax * (new Vector3(m_primSafetyCoeffX, m_primSafetyCoeffY, m_primSafetyCoeffZ)); - shapeBoxMax = shapeBoxMax + (new Vector3(tol, tol, tol)); - if (RayIntersectsShapeBox(pos1RayProj, pos2RayProj, shapeBoxMax)) - { - // Prepare data needed to check for ray hits - RayTrans rayTrans = new RayTrans(); - rayTrans.PartId = part.UUID; - rayTrans.GroupId = part.ParentGroup.UUID; - rayTrans.Link = group.PrimCount > 1 ? part.LinkNum : 0; - rayTrans.ScalePart = scalePart; - rayTrans.PositionPart = posPart; - rayTrans.RotationPart = rotPart; - rayTrans.ShapeNeedsEnds = true; - rayTrans.Position1Ray = pos1Ray; - rayTrans.Position1RayProj = pos1RayProj; - rayTrans.VectorRayProj = pos2RayProj - pos1RayProj; - - // Get detail level depending on type - int lod = 0; - // Mesh detail level - if (part.Shape.SculptEntry && part.Shape.SculptType == (byte)SculptType.Mesh) - lod = (int)m_meshLodInCastRay; - // Sculpt detail level - else if (part.Shape.SculptEntry && part.Shape.SculptType == (byte)SculptType.Mesh) - lod = (int)m_sculptLodInCastRay; - // Shape detail level - else if (!part.Shape.SculptEntry) - lod = (int)m_primLodInCastRay; - - // Try to get cached mesh if configured - ulong meshKey = 0; - FacetedMesh mesh = null; - if (m_useMeshCacheInCastRay) - { - meshKey = part.Shape.GetMeshKey(Vector3.One, (float)(4 << lod)); - lock (m_cachedMeshes) - { - m_cachedMeshes.TryGetValue(meshKey, out mesh); - } - } - - // Create mesh if no cached mesh - if (mesh == null) - { - // Make an OMV prim to be able to mesh part - Primitive omvPrim = part.Shape.ToOmvPrimitive(posPart, rotPart); - byte[] sculptAsset = null; - if (omvPrim.Sculpt != null) - sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString()); - - // When part is mesh, get mesh - if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null) - { - AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset); - FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, m_meshLodInCastRay, out mesh); - meshAsset = null; - } - - // When part is sculpt, create mesh - // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt. - else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null) - { - IJ2KDecoder imgDecoder = World.RequestModuleInterface(); - if (imgDecoder != null) - { - Image sculpt = imgDecoder.DecodeToImage(sculptAsset); - if (sculpt != null) - { - mesh = primMesher.GenerateFacetedSculptMesh(omvPrim, (Bitmap)sculpt, m_sculptLodInCastRay); - sculpt.Dispose(); - } - } - } - - // When part is shape, create mesh - else if (omvPrim.Sculpt == null) - { - if ( - omvPrim.PrimData.PathBegin == 0.0 && omvPrim.PrimData.PathEnd == 1.0 && - omvPrim.PrimData.PathTaperX == 0.0 && omvPrim.PrimData.PathTaperY == 0.0 && - omvPrim.PrimData.PathSkew == 0.0 && - omvPrim.PrimData.PathTwist - omvPrim.PrimData.PathTwistBegin == 0.0 - ) - rayTrans.ShapeNeedsEnds = false; - mesh = primMesher.GenerateFacetedMesh(omvPrim, m_primLodInCastRay); - } - - // Cache mesh if configured - if (m_useMeshCacheInCastRay && mesh != null) - { - lock(m_cachedMeshes) - { - if (!m_cachedMeshes.ContainsKey(meshKey)) - m_cachedMeshes.Add(meshKey, mesh); - } - } - } - // Check mesh for ray hits - AddRayInFacetedMesh(mesh, rayTrans, ref rayHits); - mesh = null; - } - } - } - } - ); - - // Check avatar filter - if (!rejectAgents) - { - // Iterate over all avatars in region - World.ForEachRootScenePresence( - delegate (ScenePresence sp) - { - // Get bounding box - Vector3 lower; - Vector3 upper; - BoundingBoxOfScenePresence(sp, out lower, out upper); - // Parse avatar - Vector3 scalePart = upper - lower; - Vector3 posPart = sp.AbsolutePosition; - Quaternion rotPart = sp.GetWorldRotation(); - Quaternion rotPartInv = Quaternion.Inverse(rotPart); - posPart = posPart + (lower + upper) * 0.5f * rotPart; - // Project ray - Vector3 pos1RayProj = ((pos1Ray - posPart) * rotPartInv) / scalePart; - Vector3 pos2RayProj = ((pos2Ray - posPart) * rotPartInv) / scalePart; - - // Filter avatars by shape bounding boxes - Vector3 shapeBoxMax = new Vector3(0.5f + tol, 0.5f + tol, 0.5f + tol); - if (RayIntersectsShapeBox(pos1RayProj, pos2RayProj, shapeBoxMax)) - { - // Prepare data needed to check for ray hits - RayTrans rayTrans = new RayTrans(); - rayTrans.PartId = sp.UUID; - rayTrans.GroupId = sp.ParentPart != null ? sp.ParentPart.ParentGroup.UUID : sp.UUID; - rayTrans.Link = sp.ParentPart != null ? UUID2LinkNumber(sp.ParentPart, sp.UUID) : 0; - rayTrans.ScalePart = scalePart; - rayTrans.PositionPart = posPart; - rayTrans.RotationPart = rotPart; - rayTrans.ShapeNeedsEnds = false; - rayTrans.Position1Ray = pos1Ray; - rayTrans.Position1RayProj = pos1RayProj; - rayTrans.VectorRayProj = pos2RayProj - pos1RayProj; - - // Try to get cached mesh if configured - PrimitiveBaseShape prim = PrimitiveBaseShape.CreateSphere(); - int lod = (int)m_avatarLodInCastRay; - ulong meshKey = prim.GetMeshKey(Vector3.One, (float)(4 << lod)); - FacetedMesh mesh = null; - if (m_useMeshCacheInCastRay) - { - lock (m_cachedMeshes) - { - m_cachedMeshes.TryGetValue(meshKey, out mesh); - } - } - - // Create mesh if no cached mesh - if (mesh == null) - { - // Make OMV prim and create mesh - prim.Scale = scalePart; - Primitive omvPrim = prim.ToOmvPrimitive(posPart, rotPart); - mesh = primMesher.GenerateFacetedMesh(omvPrim, m_avatarLodInCastRay); - - // Cache mesh if configured - if (m_useMeshCacheInCastRay && mesh != null) - { - lock(m_cachedMeshes) - { - if (!m_cachedMeshes.ContainsKey(meshKey)) - m_cachedMeshes.Add(meshKey, mesh); - } - } - } - - // Check mesh for ray hits - AddRayInFacetedMesh(mesh, rayTrans, ref rayHits); - mesh = null; - } - } - ); - } - - // Check terrain filter - if (!rejectLand) - { - // Parse terrain - - // Mesh terrain and check bounding box - Vector3 lower; - Vector3 upper; - List triangles = TrisFromHeightmapUnderRay(pos1Ray, pos2Ray, out lower, out upper); - lower.Z -= tol; - upper.Z += tol; - if ((pos1Ray.Z >= lower.Z || pos2Ray.Z >= lower.Z) && (pos1Ray.Z <= upper.Z || pos2Ray.Z <= upper.Z)) - { - // Prepare data needed to check for ray hits - RayTrans rayTrans = new RayTrans(); - rayTrans.PartId = UUID.Zero; - rayTrans.GroupId = UUID.Zero; - rayTrans.Link = 0; - rayTrans.ScalePart = new Vector3 (1.0f, 1.0f, 1.0f); - rayTrans.PositionPart = Vector3.Zero; - rayTrans.RotationPart = Quaternion.Identity; - rayTrans.ShapeNeedsEnds = true; - rayTrans.Position1Ray = pos1Ray; - rayTrans.Position1RayProj = pos1Ray; - rayTrans.VectorRayProj = vecRay; - - // Check mesh - AddRayInTris(triangles, rayTrans, ref rayHits); - triangles = null; - } - } - - // Sort hits by ascending distance - rayHits.Sort((s1, s2) => s1.Distance.CompareTo(s2.Distance)); - - // Check excess hits per part and group - for (int t = 0; t < 2; t++) - { - int maxHitsPerType = 0; - UUID id = UUID.Zero; - if (t == 0) - maxHitsPerType = m_maxHitsPerPrimInCastRay; - else - maxHitsPerType = m_maxHitsPerObjectInCastRay; - - // Handle excess hits only when needed - if (maxHitsPerType < m_maxHitsInCastRay) - { - // Find excess hits - Hashtable hits = new Hashtable(); - for (int i = rayHits.Count - 1; i >= 0; i--) - { - if (t == 0) - id = rayHits[i].PartId; - else - id = rayHits[i].GroupId; - if (hits.ContainsKey(id)) - hits[id] = (int)hits[id] + 1; - else - hits[id] = 1; - } - - // Remove excess hits - for (int i = rayHits.Count - 1; i >= 0; i--) - { - if (t == 0) - id = rayHits[i].PartId; - else - id = rayHits[i].GroupId; - int hit = (int)hits[id]; - if (hit > m_maxHitsPerPrimInCastRay) - { - rayHits.RemoveAt(i); - hit--; - hits[id] = hit; - } - } - } - } - - // Parse hits into result list according to data flags - int hitCount = rayHits.Count; - if (hitCount > maxHits) - hitCount = maxHits; - for (int i = 0; i < hitCount; i++) - { - RayHit rayHit = rayHits[i]; - if (getRootKey) - result.Add(new LSL_Key(rayHit.GroupId.ToString())); - else - result.Add(new LSL_Key(rayHit.PartId.ToString())); - result.Add(new LSL_Vector(rayHit.Position)); - if (getLinkNum) - result.Add(new LSL_Integer(rayHit.Link)); - if (getNormal) - result.Add(new LSL_Vector(rayHit.Normal)); - } - result.Add(new LSL_Integer(hitCount)); - - // Add to throttle data - stopWatch.Stop(); - CastRayCall castRayCall = new CastRayCall(); - castRayCall.RegionId = regionId; - castRayCall.UserId = userId; - castRayCall.CalledMs = calledMs; - castRayCall.UsedMs = (int)stopWatch.ElapsedMilliseconds; - lock (m_castRayCalls) - { - m_castRayCalls.Add(castRayCall); - } - - // Return hits - return result; - } - - /// - /// Struct for transmitting parameters required for finding llCastRay ray hits. - /// - public struct RayTrans - { - public UUID PartId; - public UUID GroupId; - public int Link; - public Vector3 ScalePart; - public Vector3 PositionPart; - public Quaternion RotationPart; - public bool ShapeNeedsEnds; - public Vector3 Position1Ray; - public Vector3 Position1RayProj; - public Vector3 VectorRayProj; - } - - /// - /// Struct for llCastRay ray hits. - /// - public struct RayHit - { - public UUID PartId; - public UUID GroupId; - public int Link; - public Vector3 Position; - public Vector3 Normal; - public float Distance; - } - - /// - /// Struct for llCastRay throttle data. - /// - public struct CastRayCall - { - public UUID RegionId; - public UUID UserId; - public int CalledMs; - public int UsedMs; - } - - /// - /// Helper to check if a ray intersects a shape bounding box. - /// - private bool RayIntersectsShapeBox(Vector3 pos1RayProj, Vector3 pos2RayProj, Vector3 shapeBoxMax) - { - // Skip if ray can't intersect bounding box; - Vector3 rayBoxProjMin = Vector3.Min(pos1RayProj, pos2RayProj); - Vector3 rayBoxProjMax = Vector3.Max(pos1RayProj, pos2RayProj); - if ( - rayBoxProjMin.X > shapeBoxMax.X || rayBoxProjMin.Y > shapeBoxMax.Y || rayBoxProjMin.Z > shapeBoxMax.Z || - rayBoxProjMax.X < -shapeBoxMax.X || rayBoxProjMax.Y < -shapeBoxMax.Y || rayBoxProjMax.Z < -shapeBoxMax.Z - ) - return false; - - // Check if ray intersect any bounding box side - int sign = 0; - float dist = 0.0f; - Vector3 posProj = Vector3.Zero; - Vector3 vecRayProj = pos2RayProj - pos1RayProj; - - // Check both X sides unless ray is parallell to them - if (Math.Abs(vecRayProj.X) > m_floatToleranceInCastRay) - { - for (sign = -1; sign <= 1; sign += 2) - { - dist = ((float)sign * shapeBoxMax.X - pos1RayProj.X) / vecRayProj.X; - posProj = pos1RayProj + vecRayProj * dist; - if (Math.Abs(posProj.Y) <= shapeBoxMax.Y && Math.Abs(posProj.Z) <= shapeBoxMax.Z) - return true; - } - } - - // Check both Y sides unless ray is parallell to them - if (Math.Abs(vecRayProj.Y) > m_floatToleranceInCastRay) - { - for (sign = -1; sign <= 1; sign += 2) - { - dist = ((float)sign * shapeBoxMax.Y - pos1RayProj.Y) / vecRayProj.Y; - posProj = pos1RayProj + vecRayProj * dist; - if (Math.Abs(posProj.X) <= shapeBoxMax.X && Math.Abs(posProj.Z) <= shapeBoxMax.Z) - return true; - } - } - - // Check both Z sides unless ray is parallell to them - if (Math.Abs(vecRayProj.Z) > m_floatToleranceInCastRay) - { - for (sign = -1; sign <= 1; sign += 2) - { - dist = ((float)sign * shapeBoxMax.Z - pos1RayProj.Z) / vecRayProj.Z; - posProj = pos1RayProj + vecRayProj * dist; - if (Math.Abs(posProj.X) <= shapeBoxMax.X && Math.Abs(posProj.Y) <= shapeBoxMax.Y) - return true; - } - } - - // No hits on bounding box so return false - return false; - } - - /// - /// Helper to parse FacetedMesh for ray hits. - /// - private void AddRayInFacetedMesh(FacetedMesh mesh, RayTrans rayTrans, ref List rayHits) - { - if (mesh != null) - { - foreach (Face face in mesh.Faces) - { - for (int i = 0; i < face.Indices.Count; i += 3) - { - Tri triangle = new Tri(); - triangle.p1 = face.Vertices[face.Indices[i]].Position; - triangle.p2 = face.Vertices[face.Indices[i + 1]].Position; - triangle.p3 = face.Vertices[face.Indices[i + 2]].Position; - AddRayInTri(triangle, rayTrans, ref rayHits); - } - } - } - } - - /// - /// Helper to parse Tri (triangle) List for ray hits. - /// - private void AddRayInTris(List triangles, RayTrans rayTrans, ref List rayHits) - { - foreach (Tri triangle in triangles) - { - AddRayInTri(triangle, rayTrans, ref rayHits); - } - } - - /// - /// Helper to add ray hit in a Tri (triangle). - /// - private void AddRayInTri(Tri triProj, RayTrans rayTrans, ref List rayHits) - { - // Check for hit in triangle - Vector3 posHitProj; - Vector3 normalProj; - if (HitRayInTri(triProj, rayTrans.Position1RayProj, rayTrans.VectorRayProj, out posHitProj, out normalProj)) - { - // Hack to circumvent ghost face bug in PrimMesher by removing hits in (ghost) face plane through shape center - if (Math.Abs(Vector3.Dot(posHitProj, normalProj)) < m_floatToleranceInCastRay && !rayTrans.ShapeNeedsEnds) - return; - - // Transform hit and normal to region coordinate system - Vector3 posHit = rayTrans.PositionPart + (posHitProj * rayTrans.ScalePart) * rayTrans.RotationPart; - Vector3 normal = Vector3.Normalize((normalProj * rayTrans.ScalePart) * rayTrans.RotationPart); - - // Remove duplicate hits at triangle intersections - float distance = Vector3.Distance(rayTrans.Position1Ray, posHit); - for (int i = rayHits.Count - 1; i >= 0; i--) - { - if (rayHits[i].PartId != rayTrans.PartId) - break; - if (Math.Abs(rayHits[i].Distance - distance) < m_floatTolerance2InCastRay) - return; - } - - // Build result data set - RayHit rayHit = new RayHit(); - rayHit.PartId = rayTrans.PartId; - rayHit.GroupId = rayTrans.GroupId; - rayHit.Link = rayTrans.Link; - rayHit.Position = posHit; - rayHit.Normal = normal; - rayHit.Distance = distance; - rayHits.Add(rayHit); - } - } - - /// - /// Helper to find ray hit in triangle - /// - bool HitRayInTri(Tri triProj, Vector3 pos1RayProj, Vector3 vecRayProj, out Vector3 posHitProj, out Vector3 normalProj) - { - float tol = m_floatToleranceInCastRay; - posHitProj = Vector3.Zero; - - // Calculate triangle edge vectors - Vector3 vec1Proj = triProj.p2 - triProj.p1; - Vector3 vec2Proj = triProj.p3 - triProj.p2; - Vector3 vec3Proj = triProj.p1 - triProj.p3; - - // Calculate triangle normal - normalProj = Vector3.Cross(vec1Proj, vec2Proj); - - // Skip if degenerate triangle or ray parallell with triangle plane - float divisor = Vector3.Dot(vecRayProj, normalProj); - if (Math.Abs(divisor) < tol) - return false; - - // Skip if exit and not configured to detect - if (divisor > tol && !m_detectExitsInCastRay) - return false; - - // Skip if outside ray ends - float distanceProj = Vector3.Dot(triProj.p1 - pos1RayProj, normalProj) / divisor; - if (distanceProj < -tol || distanceProj > 1 + tol) - return false; - - // Calculate hit position in triangle - posHitProj = pos1RayProj + vecRayProj * distanceProj; - - // Skip if outside triangle bounding box - Vector3 triProjMin = Vector3.Min(Vector3.Min(triProj.p1, triProj.p2), triProj.p3); - Vector3 triProjMax = Vector3.Max(Vector3.Max(triProj.p1, triProj.p2), triProj.p3); - if ( - posHitProj.X < triProjMin.X - tol || posHitProj.Y < triProjMin.Y - tol || posHitProj.Z < triProjMin.Z - tol || - posHitProj.X > triProjMax.X + tol || posHitProj.Y > triProjMax.Y + tol || posHitProj.Z > triProjMax.Z + tol - ) - return false; - - // Skip if outside triangle - if ( - Vector3.Dot(Vector3.Cross(vec1Proj, normalProj), posHitProj - triProj.p1) > tol || - Vector3.Dot(Vector3.Cross(vec2Proj, normalProj), posHitProj - triProj.p2) > tol || - Vector3.Dot(Vector3.Cross(vec3Proj, normalProj), posHitProj - triProj.p3) > tol - ) - return false; - - // Return hit - return true; - } - - /// - /// Helper to parse selected parts of HeightMap into a Tri (triangle) List and calculate bounding box. - /// - private List TrisFromHeightmapUnderRay(Vector3 posStart, Vector3 posEnd, out Vector3 lower, out Vector3 upper) - { - // Get bounding X-Y rectangle of terrain under ray - lower = Vector3.Min(posStart, posEnd); - upper = Vector3.Max(posStart, posEnd); - lower.X = (float)Math.Floor(lower.X); - lower.Y = (float)Math.Floor(lower.Y); - float zLower = float.MaxValue; - upper.X = (float)Math.Ceiling(upper.X); - upper.Y = (float)Math.Ceiling(upper.Y); - float zUpper = float.MinValue; - - // Initialize Tri (triangle) List - List triangles = new List(); - - // Set parsing lane direction to major ray X-Y axis - Vector3 vec = posEnd - posStart; - float xAbs = Math.Abs(vec.X); - float yAbs = Math.Abs(vec.Y); - bool bigX = true; - if (yAbs > xAbs) - { - bigX = false; - vec = vec / yAbs; - } - else if (xAbs > yAbs || xAbs > 0.0f) - vec = vec / xAbs; - else - vec = new Vector3(1.0f, 1.0f, 0.0f); - - // Simplify by start parsing in lower end of lane - if ((bigX && vec.X < 0.0f) || (!bigX && vec.Y < 0.0f)) - { - Vector3 posTemp = posStart; - posStart = posEnd; - posEnd = posTemp; - vec = vec * -1.0f; - } - - // First 1x1 rectangle under ray - float xFloorOld = 0.0f; - float yFloorOld = 0.0f; - Vector3 pos = posStart; - float xFloor = (float)Math.Floor(pos.X); - float yFloor = (float)Math.Floor(pos.Y); - AddTrisFromHeightmap(xFloor, yFloor, ref triangles, ref zLower, ref zUpper); - - // Parse every remaining 1x1 rectangle under ray - while (pos != posEnd) - { - // Next 1x1 rectangle under ray - xFloorOld = xFloor; - yFloorOld = yFloor; - pos = pos + vec; - - // Clip position to 1x1 rectangle border - xFloor = (float)Math.Floor(pos.X); - yFloor = (float)Math.Floor(pos.Y); - if (bigX && pos.X > xFloor) - { - pos.Y -= vec.Y * (pos.X - xFloor); - pos.X = xFloor; - } - else if (!bigX && pos.Y > yFloor) - { - pos.X -= vec.X * (pos.Y - yFloor); - pos.Y = yFloor; - } - - // Last 1x1 rectangle under ray - if ((bigX && pos.X >= posEnd.X) || (!bigX && pos.Y >= posEnd.Y)) - { - pos = posEnd; - xFloor = (float)Math.Floor(pos.X); - yFloor = (float)Math.Floor(pos.Y); - } - - // Add new 1x1 rectangle in lane - if ((bigX && xFloor != xFloorOld) || (!bigX && yFloor != yFloorOld)) - AddTrisFromHeightmap(xFloor, yFloor, ref triangles, ref zLower, ref zUpper); - // Add last 1x1 rectangle in old lane at lane shift - if (bigX && yFloor != yFloorOld) - AddTrisFromHeightmap(xFloor, yFloorOld, ref triangles, ref zLower, ref zUpper); - if (!bigX && xFloor != xFloorOld) - AddTrisFromHeightmap(xFloorOld, yFloor, ref triangles, ref zLower, ref zUpper); - } - - // Finalize bounding box Z - lower.Z = zLower; - upper.Z = zUpper; - - // Done and returning Tri (triangle)List - return triangles; - } - - /// - /// Helper to add HeightMap squares into Tri (triangle) List and adjust bounding box. - /// - private void AddTrisFromHeightmap(float xPos, float yPos, ref List triangles, ref float zLower, ref float zUpper) - { - int xInt = (int)xPos; - int yInt = (int)yPos; - - // Corner 1 of 1x1 rectangle - int x = Util.Clamp(xInt+1, 0, World.Heightmap.Width - 1); - int y = Util.Clamp(yInt+1, 0, World.Heightmap.Height - 1); - Vector3 pos1 = new Vector3(x, y, (float)World.Heightmap[x, y]); - // Adjust bounding box - zLower = Math.Min(zLower, pos1.Z); - zUpper = Math.Max(zUpper, pos1.Z); - - // Corner 2 of 1x1 rectangle - x = Util.Clamp(xInt, 0, World.Heightmap.Width - 1); - y = Util.Clamp(yInt+1, 0, World.Heightmap.Height - 1); - Vector3 pos2 = new Vector3(x, y, (float)World.Heightmap[x, y]); - // Adjust bounding box - zLower = Math.Min(zLower, pos2.Z); - zUpper = Math.Max(zUpper, pos2.Z); - - // Corner 3 of 1x1 rectangle - x = Util.Clamp(xInt, 0, World.Heightmap.Width - 1); - y = Util.Clamp(yInt, 0, World.Heightmap.Height - 1); - Vector3 pos3 = new Vector3(x, y, (float)World.Heightmap[x, y]); - // Adjust bounding box - zLower = Math.Min(zLower, pos3.Z); - zUpper = Math.Max(zUpper, pos3.Z); - - // Corner 4 of 1x1 rectangle - x = Util.Clamp(xInt+1, 0, World.Heightmap.Width - 1); - y = Util.Clamp(yInt, 0, World.Heightmap.Height - 1); - Vector3 pos4 = new Vector3(x, y, (float)World.Heightmap[x, y]); - // Adjust bounding box - zLower = Math.Min(zLower, pos4.Z); - zUpper = Math.Max(zUpper, pos4.Z); - - // Add triangle 1 - Tri triangle1 = new Tri(); - triangle1.p1 = pos1; - triangle1.p2 = pos2; - triangle1.p3 = pos3; - triangles.Add(triangle1); - - // Add triangle 2 - Tri triangle2 = new Tri(); - triangle2.p1 = pos3; - triangle2.p2 = pos4; - triangle2.p3 = pos1; - triangles.Add(triangle2); - } - - /// - /// Helper to get link number for a UUID. - /// - private int UUID2LinkNumber(SceneObjectPart part, UUID id) - { - SceneObjectGroup group = part.ParentGroup; - if (group != null) - { - // Parse every link for UUID - int linkCount = group.PrimCount + group.GetSittingAvatarsCount(); - for (int link = linkCount; link > 0; link--) - { - ISceneEntity entity = GetLinkEntity(part, link); - // Return link number if UUID match - if (entity != null && entity.UUID == id) - return link; - } - } - // Return link number 0 if no links or UUID matches - return 0; - } - - public LSL_Integer llManageEstateAccess(int action, string avatar) - { - m_host.AddScriptLPS(1); - EstateSettings estate = World.RegionInfo.EstateSettings; - bool isAccount = false; - bool isGroup = false; - - if (!estate.IsEstateOwner(m_host.OwnerID) || !estate.IsEstateManagerOrOwner(m_host.OwnerID)) - return 0; - - UUID id = new UUID(); - if (!UUID.TryParse(avatar, out id)) - return 0; - - UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, id); - isAccount = account != null ? true : false; - if (!isAccount) - { - IGroupsModule groups = World.RequestModuleInterface(); - if (groups != null) - { - GroupRecord group = groups.GetGroupRecord(id); - isGroup = group != null ? true : false; - if (!isGroup) - return 0; - } - else - return 0; - } - - switch (action) - { - case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_AGENT_ADD: - if (!isAccount) return 0; - if (estate.HasAccess(id)) return 1; - if (estate.IsBanned(id)) - estate.RemoveBan(id); - estate.AddEstateUser(id); - break; - case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_AGENT_REMOVE: - if (!isAccount || !estate.HasAccess(id)) return 0; - estate.RemoveEstateUser(id); - break; - case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_GROUP_ADD: - if (!isGroup) return 0; - if (estate.GroupAccess(id)) return 1; - estate.AddEstateGroup(id); - break; - case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_GROUP_REMOVE: - if (!isGroup || !estate.GroupAccess(id)) return 0; - estate.RemoveEstateGroup(id); - break; - case ScriptBaseClass.ESTATE_ACCESS_BANNED_AGENT_ADD: - if (!isAccount) return 0; - if (estate.IsBanned(id)) return 1; - EstateBan ban = new EstateBan(); - ban.EstateID = estate.EstateID; - ban.BannedUserID = id; - estate.AddBan(ban); - break; - case ScriptBaseClass.ESTATE_ACCESS_BANNED_AGENT_REMOVE: - if (!isAccount || !estate.IsBanned(id)) return 0; - estate.RemoveBan(id); - break; - default: return 0; - } - return 1; - } - - public LSL_Integer llGetMemoryLimit() - { - m_host.AddScriptLPS(1); - // The value returned for Mono scripts in SL - return 65536; - } - - public LSL_Integer llSetMemoryLimit(LSL_Integer limit) - { - m_host.AddScriptLPS(1); - // Treat as an LSO script - return ScriptBaseClass.FALSE; - } - - public LSL_Integer llGetSPMaxMemory() - { - m_host.AddScriptLPS(1); - // The value returned for Mono scripts in SL - return 65536; - } - - public virtual LSL_Integer llGetUsedMemory() - { - m_host.AddScriptLPS(1); - // The value returned for Mono scripts in SL - return 65536; - } - - public void llScriptProfiler(LSL_Integer flags) - { - m_host.AddScriptLPS(1); - // This does nothing for LSO scripts in SL - } - - #region Not Implemented - // - // Listing the unimplemented lsl functions here, please move - // them from this region as they are completed - // - - public void llSetSoundQueueing(int queue) - { - m_host.AddScriptLPS(1); - - if (m_SoundModule != null) - m_SoundModule.SetSoundQueueing(m_host.UUID, queue == ScriptBaseClass.TRUE.value); - } - - public void llCollisionSprite(string impact_sprite) - { - m_host.AddScriptLPS(1); - NotImplemented("llCollisionSprite"); - } - - public void llGodLikeRezObject(string inventory, LSL_Vector pos) - { - m_host.AddScriptLPS(1); - NotImplemented("llGodLikeRezObject"); - } - - public LSL_String llTransferLindenDollars(string destination, int amount) - { - UUID txn = UUID.Random(); - - Util.FireAndForget(delegate(object x) - { - int replycode = 0; - string replydata = destination + "," + amount.ToString(); - - try - { - TaskInventoryItem item = m_item; - if (item == null) - { - replydata = "SERVICE_ERROR"; - return; - } - - m_host.AddScriptLPS(1); - - if (item.PermsGranter == UUID.Zero) - { - replydata = "MISSING_PERMISSION_DEBIT"; - return; - } - - if ((item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) - { - replydata = "MISSING_PERMISSION_DEBIT"; - return; - } - - UUID toID = new UUID(); - - if (!UUID.TryParse(destination, out toID)) - { - replydata = "INVALID_AGENT"; - return; - } - - IMoneyModule money = World.RequestModuleInterface(); - - if (money == null) - { - replydata = "TRANSFERS_DISABLED"; - return; - } - - bool result = money.ObjectGiveMoney( - m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); - - if (result) - { - replycode = 1; - return; - } - - replydata = "LINDENDOLLAR_INSUFFICIENTFUNDS"; - } - finally - { - m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( - "transaction_result", new Object[] { - new LSL_String(txn.ToString()), - new LSL_Integer(replycode), - new LSL_String(replydata) }, - new DetectParams[0])); - } - }, null, "LSL_Api.llTransferLindenDollars"); - - return txn.ToString(); - } - - #endregion - } - - public class NotecardCache - { - protected class Notecard - { - public string[] text; - public DateTime lastRef; - } - - private static Dictionary m_Notecards = - new Dictionary(); - - public static void Cache(UUID assetID, byte[] text) - { - CheckCache(); - - lock (m_Notecards) - { - if (m_Notecards.ContainsKey(assetID)) - return; - - Notecard nc = new Notecard(); - nc.lastRef = DateTime.Now; - try - { - nc.text = SLUtil.ParseNotecardToArray(text); - } - catch(SLUtil.NotANotecardFormatException) - { - nc.text = new string[0]; - } - m_Notecards[assetID] = nc; - } - } - - public static bool IsCached(UUID assetID) - { - lock (m_Notecards) - { - return m_Notecards.ContainsKey(assetID); - } - } - - public static int GetLines(UUID assetID) - { - if (!IsCached(assetID)) - return -1; - - lock (m_Notecards) - { - m_Notecards[assetID].lastRef = DateTime.Now; - return m_Notecards[assetID].text.Length; - } - } - - /// - /// Get a notecard line. - /// - /// - /// Lines start at index 0 - /// - public static string GetLine(UUID assetID, int lineNumber) - { - if (lineNumber < 0) - return ""; - - string data; - - if (!IsCached(assetID)) - return ""; - - lock (m_Notecards) - { - m_Notecards[assetID].lastRef = DateTime.Now; - - if (lineNumber >= m_Notecards[assetID].text.Length) - return "\n\n\n"; - - data = m_Notecards[assetID].text[lineNumber]; - - return data; - } - } - - /// - /// Get a notecard line. - /// - /// - /// Lines start at index 0 - /// - /// Maximum length of the returned line. - /// - /// - /// If the line length is longer than , - /// the return string will be truncated. - /// - public static string GetLine(UUID assetID, int lineNumber, int maxLength) - { - string line = GetLine(assetID, lineNumber); - - if (line.Length > maxLength) - line = line.Substring(0, maxLength); - - return line; - } - - public static void CheckCache() - { - lock (m_Notecards) - { - foreach (UUID key in new List(m_Notecards.Keys)) - { - Notecard nc = m_Notecards[key]; - if (nc.lastRef.AddSeconds(30) < DateTime.Now) - m_Notecards.Remove(key); - } - } - } - } -} +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.Runtime.Remoting.Lifetime; +using System.Text; +using System.Threading; +using System.Text.RegularExpressions; +using Nini.Config; +using log4net; +using OpenMetaverse; +using OpenMetaverse.Assets; +using OpenMetaverse.Packets; +using OpenMetaverse.Rendering; +using OpenSim; +using OpenSim.Framework; + +using OpenSim.Region.CoreModules; +using OpenSim.Region.CoreModules.World.Land; +using OpenSim.Region.CoreModules.World.Terrain; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.Framework.Scenes.Animation; +using OpenSim.Region.Framework.Scenes.Scripting; +using OpenSim.Region.Physics.Manager; +using OpenSim.Region.ScriptEngine.Shared; +using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; +using OpenSim.Region.ScriptEngine.Shared.ScriptBase; +using OpenSim.Region.ScriptEngine.Interfaces; +using OpenSim.Region.ScriptEngine.Shared.Api.Interfaces; +using OpenSim.Services.Interfaces; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; +using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; +using PrimType = OpenSim.Region.Framework.Scenes.PrimType; +using AssetLandmark = OpenSim.Framework.AssetLandmark; +using RegionFlags = OpenSim.Framework.RegionFlags; + +using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat; +using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger; +using LSL_Key = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString; +using LSL_List = OpenSim.Region.ScriptEngine.Shared.LSL_Types.list; +using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion; +using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString; +using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3; +using System.Reflection; +using System.Linq; +using PermissionMask = OpenSim.Framework.PermissionMask; + +namespace OpenSim.Region.ScriptEngine.Shared.Api +{ + // MUST be a ref type + public class UserInfoCacheEntry + { + public int time; + public UserAccount account; + public PresenceInfo pinfo; + } + + /// + /// Contains all LSL ll-functions. This class will be in Default AppDomain. + /// + public class LSL_Api : MarshalByRefObject, ILSL_Api, IScriptApi + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public int LlRequestAgentDataCacheTimeoutMs { get; set; } + + protected IScriptEngine m_ScriptEngine; + protected SceneObjectPart m_host; + + /// + /// Used for script sleeps when we are using co-operative script termination. + /// + /// null if co-operative script termination is not active + WaitHandle m_coopSleepHandle; + + /// + /// The timer used by the ScriptInstance to measure how long the script has executed. + /// + private Stopwatch m_executionTimer; + + /// + /// The item that hosts this script + /// + protected TaskInventoryItem m_item; + + protected bool throwErrorOnNotImplemented = false; + protected AsyncCommandManager AsyncCommands = null; + protected float m_ScriptDelayFactor = 1.0f; + protected float m_ScriptDistanceFactor = 1.0f; + protected float m_MinTimerInterval = 0.5f; + protected float m_recoilScaleFactor = 0.0f; + + protected DateTime m_timer = DateTime.Now; + protected bool m_waitingForScriptAnswer = false; + protected bool m_automaticLinkPermission = false; + protected IMessageTransferModule m_TransferModule = null; + protected int m_notecardLineReadCharsMax = 255; + protected int m_scriptConsoleChannel = 0; + protected bool m_scriptConsoleChannelEnabled = false; + protected IUrlModule m_UrlModule = null; + protected Dictionary m_userInfoCache = new Dictionary(); + protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. + protected int m_sleepMsOnSetTexture = 200; + protected int m_sleepMsOnSetLinkTexture = 200; + protected int m_sleepMsOnScaleTexture = 200; + protected int m_sleepMsOnOffsetTexture = 200; + protected int m_sleepMsOnRotateTexture = 200; + protected int m_sleepMsOnSetPos = 200; + protected int m_sleepMsOnSetRot = 200; + protected int m_sleepMsOnSetLocalRot = 200; + protected int m_sleepMsOnPreloadSound = 1000; + protected int m_sleepMsOnMakeExplosion = 100; + protected int m_sleepMsOnMakeFountain = 100; + protected int m_sleepMsOnMakeSmoke = 100; + protected int m_sleepMsOnMakeFire = 100; + protected int m_sleepMsOnRezAtRoot = 100; + protected int m_sleepMsOnInstantMessage = 2000; + protected int m_sleepMsOnEmail = 20000; + protected int m_sleepMsOnCreateLink = 1000; + protected int m_sleepMsOnGiveInventory = 3000; + protected int m_sleepMsOnRequestAgentData = 100; + protected int m_sleepMsOnRequestInventoryData = 1000; + protected int m_sleepMsOnSetDamage = 5000; + protected int m_sleepMsOnTextBox = 1000; + protected int m_sleepMsOnAdjustSoundVolume = 100; + protected int m_sleepMsOnEjectFromLand = 5000; + protected int m_sleepMsOnAddToLandPassList = 100; + protected int m_sleepMsOnDialog = 1000; + protected int m_sleepMsOnRemoteLoadScript = 3000; + protected int m_sleepMsOnRemoteLoadScriptPin = 3000; + protected int m_sleepMsOnOpenRemoteDataChannel = 1000; + protected int m_sleepMsOnSendRemoteData = 3000; + protected int m_sleepMsOnRemoteDataReply = 3000; + protected int m_sleepMsOnCloseRemoteDataChannel = 1000; + protected int m_sleepMsOnSetPrimitiveParams = 200; + protected int m_sleepMsOnSetLinkPrimitiveParams = 200; + protected int m_sleepMsOnXorBase64Strings = 300; + protected int m_sleepMsOnSetParcelMusicURL = 2000; + protected int m_sleepMsOnGetPrimMediaParams = 1000; + protected int m_sleepMsOnGetLinkMedia = 1000; + protected int m_sleepMsOnSetPrimMediaParams = 1000; + protected int m_sleepMsOnSetLinkMedia = 1000; + protected int m_sleepMsOnClearPrimMedia = 1000; + protected int m_sleepMsOnClearLinkMedia = 1000; + protected int m_sleepMsOnRequestSimulatorData = 1000; + protected int m_sleepMsOnLoadURL = 10000; + protected int m_sleepMsOnParcelMediaCommandList = 2000; + protected int m_sleepMsOnParcelMediaQuery = 2000; + protected int m_sleepMsOnModPow = 1000; + protected int m_sleepMsOnSetPrimURL = 2000; + protected int m_sleepMsOnRefreshPrimURL = 20000; + protected int m_sleepMsOnMapDestination = 1000; + protected int m_sleepMsOnAddToLandBanList = 100; + protected int m_sleepMsOnRemoveFromLandPassList = 100; + protected int m_sleepMsOnRemoveFromLandBanList = 100; + protected int m_sleepMsOnResetLandBanList = 100; + protected int m_sleepMsOnResetLandPassList = 100; + protected int m_sleepMsOnGetParcelPrimOwners = 2000; + protected int m_sleepMsOnGetNumberOfNotecardLines = 100; + protected int m_sleepMsOnGetNotecardLine = 100; + protected string m_internalObjectHost = "lsl.opensim.local"; + protected bool m_restrictEmail = false; + protected ISoundModule m_SoundModule = null; + + protected float m_avatarHeightCorrection = 0.2f; + protected bool m_useSimpleBoxesInGetBoundingBox = false; + protected bool m_addStatsInGetBoundingBox = false; + + //LSL Avatar Bounding Box (lABB), lower (1) and upper (2), + //standing (Std), Groundsitting (Grs), Sitting (Sit), + //along X, Y and Z axes, constants (0) and coefficients (1) + protected float m_lABB1StdX0 = -0.275f; + protected float m_lABB2StdX0 = 0.275f; + protected float m_lABB1StdY0 = -0.35f; + protected float m_lABB2StdY0 = 0.35f; + protected float m_lABB1StdZ0 = -0.1f; + protected float m_lABB1StdZ1 = -0.5f; + protected float m_lABB2StdZ0 = 0.1f; + protected float m_lABB2StdZ1 = 0.5f; + protected float m_lABB1GrsX0 = -0.3875f; + protected float m_lABB2GrsX0 = 0.3875f; + protected float m_lABB1GrsY0 = -0.5f; + protected float m_lABB2GrsY0 = 0.5f; + protected float m_lABB1GrsZ0 = -0.05f; + protected float m_lABB1GrsZ1 = -0.375f; + protected float m_lABB2GrsZ0 = 0.5f; + protected float m_lABB2GrsZ1 = 0.0f; + protected float m_lABB1SitX0 = -0.5875f; + protected float m_lABB2SitX0 = 0.1875f; + protected float m_lABB1SitY0 = -0.35f; + protected float m_lABB2SitY0 = 0.35f; + protected float m_lABB1SitZ0 = -0.35f; + protected float m_lABB1SitZ1 = -0.375f; + protected float m_lABB2SitZ0 = -0.25f; + protected float m_lABB2SitZ1 = 0.25f; + + protected float m_primSafetyCoeffX = 2.414214f; + protected float m_primSafetyCoeffY = 2.414214f; + protected float m_primSafetyCoeffZ = 1.618034f; + protected bool m_useCastRayV3 = false; + protected float m_floatToleranceInCastRay = 0.00001f; + protected float m_floatTolerance2InCastRay = 0.001f; + protected DetailLevel m_primLodInCastRay = DetailLevel.Medium; + protected DetailLevel m_sculptLodInCastRay = DetailLevel.Medium; + protected DetailLevel m_meshLodInCastRay = DetailLevel.Highest; + protected DetailLevel m_avatarLodInCastRay = DetailLevel.Medium; + protected int m_maxHitsInCastRay = 16; + protected int m_maxHitsPerPrimInCastRay = 16; + protected int m_maxHitsPerObjectInCastRay = 16; + protected bool m_detectExitsInCastRay = false; + protected bool m_filterPartsInCastRay = false; + protected bool m_doAttachmentsInCastRay = false; + protected int m_msThrottleInCastRay = 200; + protected int m_msPerRegionInCastRay = 40; + protected int m_msPerAvatarInCastRay = 10; + protected int m_msMinInCastRay = 2; + protected int m_msMaxInCastRay = 40; + protected static List m_castRayCalls = new List(); + protected bool m_useMeshCacheInCastRay = true; + protected static Dictionary m_cachedMeshes = new Dictionary(); + + //An array of HTTP/1.1 headers that are not allowed to be used + //as custom headers by llHTTPRequest. + private string[] HttpStandardHeaders = + { + "Accept", "Accept-Charset", "Accept-Encoding", "Accept-Language", + "Accept-Ranges", "Age", "Allow", "Authorization", "Cache-Control", + "Connection", "Content-Encoding", "Content-Language", + "Content-Length", "Content-Location", "Content-MD5", + "Content-Range", "Content-Type", "Date", "ETag", "Expect", + "Expires", "From", "Host", "If-Match", "If-Modified-Since", + "If-None-Match", "If-Range", "If-Unmodified-Since", "Last-Modified", + "Location", "Max-Forwards", "Pragma", "Proxy-Authenticate", + "Proxy-Authorization", "Range", "Referer", "Retry-After", "Server", + "TE", "Trailer", "Transfer-Encoding", "Upgrade", "User-Agent", + "Vary", "Via", "Warning", "WWW-Authenticate" + }; + + public void Initialize( + IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, WaitHandle coopSleepHandle, + Stopwatch executionTimer) + { + m_ScriptEngine = scriptEngine; + m_host = host; + m_item = item; + m_coopSleepHandle = coopSleepHandle; + m_executionTimer = executionTimer; + + LoadConfig(); + + m_TransferModule = + m_ScriptEngine.World.RequestModuleInterface(); + m_UrlModule = m_ScriptEngine.World.RequestModuleInterface(); + m_SoundModule = m_ScriptEngine.World.RequestModuleInterface(); + + AsyncCommands = new AsyncCommandManager(m_ScriptEngine); + } + + /// + /// Load configuration items that affect script, object and run-time behavior. */ + /// + private void LoadConfig() + { + LlRequestAgentDataCacheTimeoutMs = 20000; + + IConfig seConfig = m_ScriptEngine.Config; + + if (seConfig != null) + { + m_ScriptDelayFactor = + seConfig.GetFloat("ScriptDelayFactor", m_ScriptDelayFactor); + m_ScriptDistanceFactor = + seConfig.GetFloat("ScriptDistanceLimitFactor", m_ScriptDistanceFactor); + m_MinTimerInterval = + seConfig.GetFloat("MinTimerInterval", m_MinTimerInterval); + m_automaticLinkPermission = + seConfig.GetBoolean("AutomaticLinkPermission", m_automaticLinkPermission); + m_notecardLineReadCharsMax = + seConfig.GetInt("NotecardLineReadCharsMax", m_notecardLineReadCharsMax); + + // Rezzing an object with a velocity can create recoil. This feature seems to have been + // removed from recent versions of SL. The code computes recoil (vel*mass) and scales + // it by this factor. May be zero to turn off recoil all together. + m_recoilScaleFactor = m_ScriptEngine.Config.GetFloat("RecoilScaleFactor", m_recoilScaleFactor); + } + + if (m_notecardLineReadCharsMax > 65535) + m_notecardLineReadCharsMax = 65535; + + // load limits for particular subsystems. + IConfigSource seConfigSource = m_ScriptEngine.ConfigSource; + + if (seConfigSource != null) + { + IConfig lslConfig = seConfigSource.Configs["LL-Functions"]; + if (lslConfig != null) + { + m_restrictEmail = lslConfig.GetBoolean("RestrictEmail", m_restrictEmail); + m_avatarHeightCorrection = lslConfig.GetFloat("AvatarHeightCorrection", m_avatarHeightCorrection); + m_useSimpleBoxesInGetBoundingBox = lslConfig.GetBoolean("UseSimpleBoxesInGetBoundingBox", m_useSimpleBoxesInGetBoundingBox); + m_addStatsInGetBoundingBox = lslConfig.GetBoolean("AddStatsInGetBoundingBox", m_addStatsInGetBoundingBox); + m_lABB1StdX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingXconst", m_lABB1StdX0); + m_lABB2StdX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingXconst", m_lABB2StdX0); + m_lABB1StdY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingYconst", m_lABB1StdY0); + m_lABB2StdY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingYconst", m_lABB2StdY0); + m_lABB1StdZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingZconst", m_lABB1StdZ0); + m_lABB1StdZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxStandingZcoeff", m_lABB1StdZ1); + m_lABB2StdZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingZconst", m_lABB2StdZ0); + m_lABB2StdZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxStandingZcoeff", m_lABB2StdZ1); + m_lABB1GrsX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingXconst", m_lABB1GrsX0); + m_lABB2GrsX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingXconst", m_lABB2GrsX0); + m_lABB1GrsY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingYconst", m_lABB1GrsY0); + m_lABB2GrsY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingYconst", m_lABB2GrsY0); + m_lABB1GrsZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingZconst", m_lABB1GrsZ0); + m_lABB1GrsZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxGroundsittingZcoeff", m_lABB1GrsZ1); + m_lABB2GrsZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingZconst", m_lABB2GrsZ0); + m_lABB2GrsZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxGroundsittingZcoeff", m_lABB2GrsZ1); + m_lABB1SitX0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingXconst", m_lABB1SitX0); + m_lABB2SitX0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingXconst", m_lABB2SitX0); + m_lABB1SitY0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingYconst", m_lABB1SitY0); + m_lABB2SitY0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingYconst", m_lABB2SitY0); + m_lABB1SitZ0 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingZconst", m_lABB1SitZ0); + m_lABB1SitZ1 = lslConfig.GetFloat("LowerAvatarBoundingBoxSittingZcoeff", m_lABB1SitZ1); + m_lABB2SitZ0 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingZconst", m_lABB2SitZ0); + m_lABB2SitZ1 = lslConfig.GetFloat("UpperAvatarBoundingBoxSittingZcoeff", m_lABB2SitZ1); + m_primSafetyCoeffX = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientX", m_primSafetyCoeffX); + m_primSafetyCoeffY = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientY", m_primSafetyCoeffY); + m_primSafetyCoeffZ = lslConfig.GetFloat("PrimBoundingBoxSafetyCoefficientZ", m_primSafetyCoeffZ); + m_useCastRayV3 = lslConfig.GetBoolean("UseLlCastRayV3", m_useCastRayV3); + m_floatToleranceInCastRay = lslConfig.GetFloat("FloatToleranceInLlCastRay", m_floatToleranceInCastRay); + m_floatTolerance2InCastRay = lslConfig.GetFloat("FloatTolerance2InLlCastRay", m_floatTolerance2InCastRay); + m_primLodInCastRay = (DetailLevel)lslConfig.GetInt("PrimDetailLevelInLlCastRay", (int)m_primLodInCastRay); + m_sculptLodInCastRay = (DetailLevel)lslConfig.GetInt("SculptDetailLevelInLlCastRay", (int)m_sculptLodInCastRay); + m_meshLodInCastRay = (DetailLevel)lslConfig.GetInt("MeshDetailLevelInLlCastRay", (int)m_meshLodInCastRay); + m_avatarLodInCastRay = (DetailLevel)lslConfig.GetInt("AvatarDetailLevelInLlCastRay", (int)m_avatarLodInCastRay); + m_maxHitsInCastRay = lslConfig.GetInt("MaxHitsInLlCastRay", m_maxHitsInCastRay); + m_maxHitsPerPrimInCastRay = lslConfig.GetInt("MaxHitsPerPrimInLlCastRay", m_maxHitsPerPrimInCastRay); + m_maxHitsPerObjectInCastRay = lslConfig.GetInt("MaxHitsPerObjectInLlCastRay", m_maxHitsPerObjectInCastRay); + m_detectExitsInCastRay = lslConfig.GetBoolean("DetectExitHitsInLlCastRay", m_detectExitsInCastRay); + m_filterPartsInCastRay = lslConfig.GetBoolean("FilterPartsInLlCastRay", m_filterPartsInCastRay); + m_doAttachmentsInCastRay = lslConfig.GetBoolean("DoAttachmentsInLlCastRay", m_doAttachmentsInCastRay); + m_msThrottleInCastRay = lslConfig.GetInt("ThrottleTimeInMsInLlCastRay", m_msThrottleInCastRay); + m_msPerRegionInCastRay = lslConfig.GetInt("AvailableTimeInMsPerRegionInLlCastRay", m_msPerRegionInCastRay); + m_msPerAvatarInCastRay = lslConfig.GetInt("AvailableTimeInMsPerAvatarInLlCastRay", m_msPerAvatarInCastRay); + m_msMinInCastRay = lslConfig.GetInt("RequiredAvailableTimeInMsInLlCastRay", m_msMinInCastRay); + m_msMaxInCastRay = lslConfig.GetInt("MaximumAvailableTimeInMsInLlCastRay", m_msMaxInCastRay); + m_useMeshCacheInCastRay = lslConfig.GetBoolean("UseMeshCacheInLlCastRay", m_useMeshCacheInCastRay); + } + + IConfig smtpConfig = seConfigSource.Configs["SMTP"]; + if (smtpConfig != null) + { + // there's an smtp config, so load in the snooze time. + EMAIL_PAUSE_TIME = smtpConfig.GetInt("email_pause_time", EMAIL_PAUSE_TIME); + + m_internalObjectHost = smtpConfig.GetString("internal_object_host", m_internalObjectHost); + } + } + m_sleepMsOnEmail = EMAIL_PAUSE_TIME * 1000; + } + + public override Object InitializeLifetimeService() + { + ILease lease = (ILease)base.InitializeLifetimeService(); + + if (lease.CurrentState == LeaseState.Initial) + { + lease.InitialLeaseTime = TimeSpan.FromMinutes(0); +// lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0); +// lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0); + } + return lease; + } + + protected virtual void ScriptSleep(int delay) + { + delay = (int)((float)delay * m_ScriptDelayFactor); + if (delay == 0) + return; + + Sleep(delay); + } + + protected virtual void Sleep(int delay) + { + if (m_executionTimer != null) + m_executionTimer.Stop(); // sleep time doesn't count as execution time, since it doesn't use the CPU + + try + { + if (m_coopSleepHandle == null) + System.Threading.Thread.Sleep(delay); + else + CheckForCoopTermination(delay); + } + finally + { + if (m_executionTimer != null) + m_executionTimer.Start(); + } + } + + /// + /// Check for co-operative termination. + /// + /// If called with 0, then just the check is performed with no wait. + protected virtual void CheckForCoopTermination(int delay) + { + if (m_coopSleepHandle.WaitOne(delay)) + throw new ScriptCoopStopException(); + } + + public Scene World + { + get { return m_ScriptEngine.World; } + } + + public void state(string newState) + { + m_ScriptEngine.SetState(m_item.ItemID, newState); + } + + /// + /// Reset the named script. The script must be present + /// in the same prim. + /// + public void llResetScript() + { + m_host.AddScriptLPS(1); + + // We need to tell the URL module, if we hav one, to release + // the allocated URLs + if (m_UrlModule != null) + m_UrlModule.ScriptRemoved(m_item.ItemID); + + m_ScriptEngine.ApiResetScript(m_item.ItemID); + } + + public void llResetOtherScript(string name) + { + UUID item; + + m_host.AddScriptLPS(1); + + if ((item = GetScriptByName(name)) != UUID.Zero) + m_ScriptEngine.ResetScript(item); + else + Error("llResetOtherScript", "Can't find script '" + name + "'"); + } + + public LSL_Integer llGetScriptState(string name) + { + UUID item; + + m_host.AddScriptLPS(1); + + if ((item = GetScriptByName(name)) != UUID.Zero) + { + return m_ScriptEngine.GetScriptState(item) ?1:0; + } + + Error("llGetScriptState", "Can't find script '" + name + "'"); + + // If we didn't find it, then it's safe to + // assume it is not running. + + return 0; + } + + public void llSetScriptState(string name, int run) + { + UUID item; + + m_host.AddScriptLPS(1); + + // These functions are supposed to be robust, + // so get the state one step at a time. + + if ((item = GetScriptByName(name)) != UUID.Zero) + { + m_ScriptEngine.SetScriptState(item, run == 0 ? false : true); + } + else + { + Error("llSetScriptState", "Can't find script '" + name + "'"); + } + } + + /// + /// Get a given link entity from a linkset (linked objects and any sitting avatars). + /// + /// + /// If there are any ScenePresence's in the linkset (i.e. because they are sat upon one of the prims), then + /// these are counted as extra entities that correspond to linknums beyond the number of prims in the linkset. + /// The ScenePresences receive linknums in the order in which they sat. + /// + /// + /// The link entity. null if not found. + /// + /// + /// + /// Can be either a non-negative integer or ScriptBaseClass.LINK_THIS (-4). + /// If ScriptBaseClass.LINK_THIS then the entity containing the script is returned. + /// If the linkset has one entity and a linknum of zero is given, then the single entity is returned. If any + /// positive integer is given in this case then null is returned. + /// If the linkset has more than one entity and a linknum greater than zero but equal to or less than the number + /// of entities, then the entity which corresponds to that linknum is returned. + /// Otherwise, if a positive linknum is given which is greater than the number of entities in the linkset, then + /// null is returned. + /// + public ISceneEntity GetLinkEntity(SceneObjectPart part, int linknum) + { + if (linknum < 0) + { + if (linknum == ScriptBaseClass.LINK_THIS) + return part; + else + return null; + } + + int actualPrimCount = part.ParentGroup.PrimCount; + List sittingAvatars = part.ParentGroup.GetSittingAvatars(); + int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; + + // Special case for a single prim. In this case the linknum is zero. However, this will not match a single + // prim that has any avatars sat upon it (in which case the root prim is link 1). + if (linknum == 0) + { + if (actualPrimCount == 1 && sittingAvatars.Count == 0) + return part; + + return null; + } + // Special case to handle a single prim with sitting avatars. GetLinkPart() would only match zero but + // here we must match 1 (ScriptBaseClass.LINK_ROOT). + else if (linknum == ScriptBaseClass.LINK_ROOT && actualPrimCount == 1) + { + if (sittingAvatars.Count > 0) + return part.ParentGroup.RootPart; + else + return null; + } + else if (linknum <= adjustedPrimCount) + { + if (linknum <= actualPrimCount) + { + return part.ParentGroup.GetLinkNumPart(linknum); + } + else + { + return sittingAvatars[linknum - actualPrimCount - 1]; + } + } + else + { + return null; + } + } + + public List GetLinkParts(int linkType) + { + return GetLinkParts(m_host, linkType); + } + + public static List GetLinkParts(SceneObjectPart part, int linkType) + { + List ret = new List(); + ret.Add(part); + + switch (linkType) + { + case ScriptBaseClass.LINK_SET: + return new List(part.ParentGroup.Parts); + + case ScriptBaseClass.LINK_ROOT: + ret = new List(); + ret.Add(part.ParentGroup.RootPart); + return ret; + + case ScriptBaseClass.LINK_ALL_OTHERS: + ret = new List(part.ParentGroup.Parts); + + if (ret.Contains(part)) + ret.Remove(part); + + return ret; + + case ScriptBaseClass.LINK_ALL_CHILDREN: + ret = new List(part.ParentGroup.Parts); + + if (ret.Contains(part.ParentGroup.RootPart)) + ret.Remove(part.ParentGroup.RootPart); + return ret; + + case ScriptBaseClass.LINK_THIS: + return ret; + + default: + if (linkType < 0) + return new List(); + + SceneObjectPart target = part.ParentGroup.GetLinkNumPart(linkType); + if (target == null) + return new List(); + ret = new List(); + ret.Add(target); + return ret; + } + } + + public List GetLinkEntities(int linkType) + { + return GetLinkEntities(m_host, linkType); + } + + public List GetLinkEntities(SceneObjectPart part, int linkType) + { + List ret; + + switch (linkType) + { + case ScriptBaseClass.LINK_SET: + return new List(part.ParentGroup.Parts); + + case ScriptBaseClass.LINK_ROOT: + return new List() { part.ParentGroup.RootPart }; + + case ScriptBaseClass.LINK_ALL_OTHERS: + ret = new List(part.ParentGroup.Parts); + + if (ret.Contains(part)) + ret.Remove(part); + + return ret; + + case ScriptBaseClass.LINK_ALL_CHILDREN: + ret = new List(part.ParentGroup.Parts); + + if (ret.Contains(part.ParentGroup.RootPart)) + ret.Remove(part.ParentGroup.RootPart); + + return ret; + + case ScriptBaseClass.LINK_THIS: + return new List() { part }; + + default: + if (linkType < 0) + return new List(); + + ISceneEntity target = GetLinkEntity(part, linkType); + if (target == null) + return new List(); + + return new List() { target }; + } + } + + //These are the implementations of the various ll-functions used by the LSL scripts. + public LSL_Float llSin(double f) + { + m_host.AddScriptLPS(1); + return (double)Math.Sin(f); + } + + public LSL_Float llCos(double f) + { + m_host.AddScriptLPS(1); + return (double)Math.Cos(f); + } + + public LSL_Float llTan(double f) + { + m_host.AddScriptLPS(1); + return (double)Math.Tan(f); + } + + public LSL_Float llAtan2(double x, double y) + { + m_host.AddScriptLPS(1); + return (double)Math.Atan2(x, y); + } + + public LSL_Float llSqrt(double f) + { + m_host.AddScriptLPS(1); + return (double)Math.Sqrt(f); + } + + public LSL_Float llPow(double fbase, double fexponent) + { + m_host.AddScriptLPS(1); + return (double)Math.Pow(fbase, fexponent); + } + + public LSL_Integer llAbs(int i) + { + // changed to replicate LSL behaviour whereby minimum int value is returned untouched. + m_host.AddScriptLPS(1); + if (i == Int32.MinValue) + return i; + else + return (int)Math.Abs(i); + } + + public LSL_Float llFabs(double f) + { + m_host.AddScriptLPS(1); + return (double)Math.Abs(f); + } + + public LSL_Float llFrand(double mag) + { + m_host.AddScriptLPS(1); + + return Util.RandomClass.NextDouble() * mag; + } + + public LSL_Integer llFloor(double f) + { + m_host.AddScriptLPS(1); + return (int)Math.Floor(f); + } + + public LSL_Integer llCeil(double f) + { + m_host.AddScriptLPS(1); + return (int)Math.Ceiling(f); + } + + // Xantor 01/May/2008 fixed midpointrounding (2.5 becomes 3.0 instead of 2.0, default = ToEven) + public LSL_Integer llRound(double f) + { + m_host.AddScriptLPS(1); + return (int)Math.Round(f, MidpointRounding.AwayFromZero); + } + + //This next group are vector operations involving squaring and square root. ckrinke + public LSL_Float llVecMag(LSL_Vector v) + { + m_host.AddScriptLPS(1); + return LSL_Vector.Mag(v); + } + + public LSL_Vector llVecNorm(LSL_Vector v) + { + m_host.AddScriptLPS(1); + return LSL_Vector.Norm(v); + } + + private double VecDist(LSL_Vector a, LSL_Vector b) + { + double dx = a.x - b.x; + double dy = a.y - b.y; + double dz = a.z - b.z; + return Math.Sqrt(dx * dx + dy * dy + dz * dz); + } + + public LSL_Float llVecDist(LSL_Vector a, LSL_Vector b) + { + m_host.AddScriptLPS(1); + return VecDist(a, b); + } + + //Now we start getting into quaternions which means sin/cos, matrices and vectors. ckrinke + + /// + /// Convert an LSL rotation to a Euler vector. + /// + /// + /// Using algorithm based off http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/quat_2_euler_paper_ver2-1.pdf + /// to avoid issues with singularity and rounding with Y rotation of +/- PI/2 + /// + /// + /// + public LSL_Vector llRot2Euler(LSL_Rotation r) + { + m_host.AddScriptLPS(1); + + LSL_Vector v = new LSL_Vector(0.0, 0.0, 1.0) * r; // Z axis unit vector unaffected by Z rotation component of r. + double m = LSL_Vector.Mag(v); // Just in case v isn't normalized, need magnitude for Asin() operation later. + if (m == 0.0) return new LSL_Vector(); + double x = Math.Atan2(-v.y, v.z); + double sin = v.x / m; + if (sin < -0.999999 || sin > 0.999999) x = 0.0; // Force X rotation to 0 at the singularities. + double y = Math.Asin(sin); + // Rotate X axis unit vector by r and unwind the X and Y rotations leaving only the Z rotation + v = new LSL_Vector(1.0, 0.0, 0.0) * ((r * new LSL_Rotation(Math.Sin(-x / 2.0), 0.0, 0.0, Math.Cos(-x / 2.0))) * new LSL_Rotation(0.0, Math.Sin(-y / 2.0), 0.0, Math.Cos(-y / 2.0))); + double z = Math.Atan2(v.y, v.x); + + return new LSL_Vector(x, y, z); + } + + /* From wiki: + The Euler angle vector (in radians) is converted to a rotation by doing the rotations around the 3 axes + in Z, Y, X order. So llEuler2Rot(<1.0, 2.0, 3.0> * DEG_TO_RAD) generates a rotation by taking the zero rotation, + a vector pointing along the X axis, first rotating it 3 degrees around the global Z axis, then rotating the resulting + vector 2 degrees around the global Y axis, and finally rotating that 1 degree around the global X axis. + */ + + /* How we arrived at this llEuler2Rot + * + * Experiment in SL to determine conventions: + * llEuler2Rot()=<1,0,0,0> + * llEuler2Rot(<0,PI,0>)=<0,1,0,0> + * llEuler2Rot(<0,0,PI>)=<0,0,1,0> + * + * Important facts about Quaternions + * - multiplication is non-commutative (a*b != b*a) + * - http://en.wikipedia.org/wiki/Quaternion#Basis_multiplication + * + * Above SL experiment gives (c1,c2,c3,s1,s2,s3 as defined in our llEuler2Rot): + * Qx = c1+i*s1 + * Qy = c2+j*s2; + * Qz = c3+k*s3; + * + * Rotations applied in order (from above) Z, Y, X + * Q = (Qz * Qy) * Qx + * ((c1+i*s1)*(c2+j*s2))*(c3+k*s3) + * (c1*c2+i*s1*c2+j*c1*s2+ij*s1*s2)*(c3+k*s3) + * (c1*c2+i*s1*c2+j*c1*s2+k*s1*s2)*(c3+k*s3) + * c1*c2*c3+i*s1*c2*c3+j*c1*s2*c3+k*s1*s2*c3+k*c1*c2*s3+ik*s1*c2*s3+jk*c1*s2*s3+kk*s1*s2*s3 + * c1*c2*c3+i*s1*c2*c3+j*c1*s2*c3+k*s1*s2*c3+k*c1*c2*s3 -j*s1*c2*s3 +i*c1*s2*s3 -s1*s2*s3 + * regroup: x=i*(s1*c2*c3+c1*s2*s3) + * y=j*(c1*s2*c3-s1*c2*s3) + * z=k*(s1*s2*c3+c1*c2*s3) + * s= c1*c2*c3-s1*s2*s3 + * + * This implementation agrees with the functions found here: + * http://lslwiki.net/lslwiki/wakka.php?wakka=LibraryRotationFunctions + * And with the results in SL. + * + * It's also possible to calculate llEuler2Rot by direct multiplication of + * the Qz, Qy, and Qx vectors (as above - and done in the "accurate" function + * from the wiki). + * Apparently in some cases this is better from a numerical precision perspective? + */ + + public LSL_Rotation llEuler2Rot(LSL_Vector v) + { + m_host.AddScriptLPS(1); + + double x,y,z,s; + + double c1 = Math.Cos(v.x * 0.5); + double c2 = Math.Cos(v.y * 0.5); + double c3 = Math.Cos(v.z * 0.5); + double s1 = Math.Sin(v.x * 0.5); + double s2 = Math.Sin(v.y * 0.5); + double s3 = Math.Sin(v.z * 0.5); + + x = s1 * c2 * c3 + c1 * s2 * s3; + y = c1 * s2 * c3 - s1 * c2 * s3; + z = s1 * s2 * c3 + c1 * c2 * s3; + s = c1 * c2 * c3 - s1 * s2 * s3; + + return new LSL_Rotation(x, y, z, s); + } + + public LSL_Rotation llAxes2Rot(LSL_Vector fwd, LSL_Vector left, LSL_Vector up) + { + m_host.AddScriptLPS(1); + double s; + double tr = fwd.x + left.y + up.z + 1.0; + + if (tr >= 1.0) + { + s = 0.5 / Math.Sqrt(tr); + return new LSL_Rotation( + (left.z - up.y) * s, + (up.x - fwd.z) * s, + (fwd.y - left.x) * s, + 0.25 / s); + } + else + { + double max = (left.y > up.z) ? left.y : up.z; + + if (max < fwd.x) + { + s = Math.Sqrt(fwd.x - (left.y + up.z) + 1.0); + double x = s * 0.5; + s = 0.5 / s; + return new LSL_Rotation( + x, + (fwd.y + left.x) * s, + (up.x + fwd.z) * s, + (left.z - up.y) * s); + } + else if (max == left.y) + { + s = Math.Sqrt(left.y - (up.z + fwd.x) + 1.0); + double y = s * 0.5; + s = 0.5 / s; + return new LSL_Rotation( + (fwd.y + left.x) * s, + y, + (left.z + up.y) * s, + (up.x - fwd.z) * s); + } + else + { + s = Math.Sqrt(up.z - (fwd.x + left.y) + 1.0); + double z = s * 0.5; + s = 0.5 / s; + return new LSL_Rotation( + (up.x + fwd.z) * s, + (left.z + up.y) * s, + z, + (fwd.y - left.x) * s); + } + } + } + + public LSL_Vector llRot2Fwd(LSL_Rotation r) + { + m_host.AddScriptLPS(1); + + double x, y, z, m; + + m = r.x * r.x + r.y * r.y + r.z * r.z + r.s * r.s; + // m is always greater than zero + // if m is not equal to 1 then Rotation needs to be normalized + if (Math.Abs(1.0 - m) > 0.000001) // allow a little slop here for calculation precision + { + m = 1.0 / Math.Sqrt(m); + r.x *= m; + r.y *= m; + r.z *= m; + r.s *= m; + } + + // Fast Algebric Calculations instead of Vectors & Quaternions Product + x = r.x * r.x - r.y * r.y - r.z * r.z + r.s * r.s; + y = 2 * (r.x * r.y + r.z * r.s); + z = 2 * (r.x * r.z - r.y * r.s); + return (new LSL_Vector(x, y, z)); + } + + public LSL_Vector llRot2Left(LSL_Rotation r) + { + m_host.AddScriptLPS(1); + + double x, y, z, m; + + m = r.x * r.x + r.y * r.y + r.z * r.z + r.s * r.s; + // m is always greater than zero + // if m is not equal to 1 then Rotation needs to be normalized + if (Math.Abs(1.0 - m) > 0.000001) // allow a little slop here for calculation precision + { + m = 1.0 / Math.Sqrt(m); + r.x *= m; + r.y *= m; + r.z *= m; + r.s *= m; + } + + // Fast Algebric Calculations instead of Vectors & Quaternions Product + x = 2 * (r.x * r.y - r.z * r.s); + y = -r.x * r.x + r.y * r.y - r.z * r.z + r.s * r.s; + z = 2 * (r.x * r.s + r.y * r.z); + return (new LSL_Vector(x, y, z)); + } + + public LSL_Vector llRot2Up(LSL_Rotation r) + { + m_host.AddScriptLPS(1); + double x, y, z, m; + + m = r.x * r.x + r.y * r.y + r.z * r.z + r.s * r.s; + // m is always greater than zero + // if m is not equal to 1 then Rotation needs to be normalized + if (Math.Abs(1.0 - m) > 0.000001) // allow a little slop here for calculation precision + { + m = 1.0 / Math.Sqrt(m); + r.x *= m; + r.y *= m; + r.z *= m; + r.s *= m; + } + + // Fast Algebric Calculations instead of Vectors & Quaternions Product + x = 2 * (r.x * r.z + r.y * r.s); + y = 2 * (-r.x * r.s + r.y * r.z); + z = -r.x * r.x - r.y * r.y + r.z * r.z + r.s * r.s; + return (new LSL_Vector(x, y, z)); + } + + public LSL_Rotation llRotBetween(LSL_Vector a, LSL_Vector b) + { + //A and B should both be normalized + m_host.AddScriptLPS(1); + LSL_Rotation rotBetween; + // Check for zero vectors. If either is zero, return zero rotation. Otherwise, + // continue calculation. + if (a == new LSL_Vector(0.0f, 0.0f, 0.0f) || b == new LSL_Vector(0.0f, 0.0f, 0.0f)) + { + rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f); + } + else + { + a = LSL_Vector.Norm(a); + b = LSL_Vector.Norm(b); + double dotProduct = LSL_Vector.Dot(a, b); + // There are two degenerate cases possible. These are for vectors 180 or + // 0 degrees apart. These have to be detected and handled individually. + // + // Check for vectors 180 degrees apart. + // A dot product of -1 would mean the angle between vectors is 180 degrees. + if (dotProduct < -0.9999999f) + { + // First assume X axis is orthogonal to the vectors. + LSL_Vector orthoVector = new LSL_Vector(1.0f, 0.0f, 0.0f); + orthoVector = orthoVector - a * (a.x / LSL_Vector.Dot(a, a)); + // Check for near zero vector. A very small non-zero number here will create + // a rotation in an undesired direction. + if (LSL_Vector.Mag(orthoVector) > 0.0001) + { + rotBetween = new LSL_Rotation(orthoVector.x, orthoVector.y, orthoVector.z, 0.0f); + } + // If the magnitude of the vector was near zero, then assume the X axis is not + // orthogonal and use the Z axis instead. + else + { + // Set 180 z rotation. + rotBetween = new LSL_Rotation(0.0f, 0.0f, 1.0f, 0.0f); + } + } + // Check for parallel vectors. + // A dot product of 1 would mean the angle between vectors is 0 degrees. + else if (dotProduct > 0.9999999f) + { + // Set zero rotation. + rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f); + } + else + { + // All special checks have been performed so get the axis of rotation. + LSL_Vector crossProduct = LSL_Vector.Cross(a, b); + // Quarternion s value is the length of the unit vector + dot product. + double qs = 1.0 + dotProduct; + rotBetween = new LSL_Rotation(crossProduct.x, crossProduct.y, crossProduct.z, qs); + // Normalize the rotation. + double mag = LSL_Rotation.Mag(rotBetween); + // We shouldn't have to worry about a divide by zero here. The qs value will be + // non-zero because we already know if we're here, then the dotProduct is not -1 so + // qs will not be zero. Also, we've already handled the input vectors being zero so the + // crossProduct vector should also not be zero. + rotBetween.x = rotBetween.x / mag; + rotBetween.y = rotBetween.y / mag; + rotBetween.z = rotBetween.z / mag; + rotBetween.s = rotBetween.s / mag; + // Check for undefined values and set zero rotation if any found. This code might not actually be required + // any longer since zero vectors are checked for at the top. + if (Double.IsNaN(rotBetween.x) || Double.IsNaN(rotBetween.y) || Double.IsNaN(rotBetween.z) || Double.IsNaN(rotBetween.s)) + { + rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f); + } + } + } + return rotBetween; + } + + public void llWhisper(int channelID, string text) + { + m_host.AddScriptLPS(1); + + if (text.Length > 1023) + text = text.Substring(0, 1023); + + World.SimChat(Utils.StringToBytes(text), + ChatTypeEnum.Whisper, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.DeliverMessage(ChatTypeEnum.Whisper, channelID, m_host.Name, m_host.UUID, text); + } + + public void llSay(int channelID, string text) + { + m_host.AddScriptLPS(1); + + if (m_scriptConsoleChannelEnabled && (channelID == m_scriptConsoleChannel)) + { + Console.WriteLine(text); + } + else + { + if (text.Length > 1023) + text = text.Substring(0, 1023); + + World.SimChat(Utils.StringToBytes(text), + ChatTypeEnum.Say, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.DeliverMessage(ChatTypeEnum.Say, channelID, m_host.Name, m_host.UUID, text); + } + } + + public void llShout(int channelID, string text) + { + m_host.AddScriptLPS(1); + + if (text.Length > 1023) + text = text.Substring(0, 1023); + + World.SimChat(Utils.StringToBytes(text), + ChatTypeEnum.Shout, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, true); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.DeliverMessage(ChatTypeEnum.Shout, channelID, m_host.Name, m_host.UUID, text); + } + + public void llRegionSay(int channelID, string text) + { + if (channelID == 0) + { + Error("llRegionSay", "Cannot use on channel 0"); + return; + } + + if (text.Length > 1023) + text = text.Substring(0, 1023); + + m_host.AddScriptLPS(1); + + World.SimChat(Utils.StringToBytes(text), + ChatTypeEnum.Region, channelID, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.DeliverMessage(ChatTypeEnum.Region, channelID, m_host.Name, m_host.UUID, text); + } + + public void llRegionSayTo(string target, int channel, string msg) + { + if (msg.Length > 1023) + msg = msg.Substring(0, 1023); + + m_host.AddScriptLPS(1); + + if (channel == ScriptBaseClass.DEBUG_CHANNEL) + { + return; + } + + UUID TargetID; + UUID.TryParse(target, out TargetID); + + World.SimChatToAgent(TargetID, Utils.StringToBytes(msg), + channel, m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, true); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg); + } + + public LSL_Integer llListen(int channelID, string name, string ID, string msg) + { + m_host.AddScriptLPS(1); + UUID keyID; + UUID.TryParse(ID, out keyID); + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + return wComm.Listen(m_host.LocalId, m_item.ItemID, m_host.UUID, channelID, name, keyID, msg); + else + return -1; + } + + public void llListenControl(int number, int active) + { + m_host.AddScriptLPS(1); + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.ListenControl(m_item.ItemID, number, active); + } + + public void llListenRemove(int number) + { + m_host.AddScriptLPS(1); + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + wComm.ListenRemove(m_item.ItemID, number); + } + + public void llSensor(string name, string id, int type, double range, double arc) + { + m_host.AddScriptLPS(1); + UUID keyID = UUID.Zero; + UUID.TryParse(id, out keyID); + + AsyncCommands.SensorRepeatPlugin.SenseOnce(m_host.LocalId, m_item.ItemID, name, keyID, type, range, arc, m_host); + } + + public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate) + { + m_host.AddScriptLPS(1); + UUID keyID = UUID.Zero; + UUID.TryParse(id, out keyID); + + AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_host.LocalId, m_item.ItemID, name, keyID, type, range, arc, rate, m_host); + } + + public void llSensorRemove() + { + m_host.AddScriptLPS(1); + AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_host.LocalId, m_item.ItemID); + } + + public string resolveName(UUID objecUUID) + { + // try avatar username surname + UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, objecUUID); + if (account != null) + { + string avatarname = account.Name; + return avatarname; + } + // try an scene object + SceneObjectPart SOP = World.GetSceneObjectPart(objecUUID); + if (SOP != null) + { + string objectname = SOP.Name; + return objectname; + } + + EntityBase SensedObject; + World.Entities.TryGetValue(objecUUID, out SensedObject); + + if (SensedObject == null) + { + IGroupsModule groups = World.RequestModuleInterface(); + if (groups != null) + { + GroupRecord gr = groups.GetGroupRecord(objecUUID); + if (gr != null) + return gr.GroupName; + } + return String.Empty; + } + + return SensedObject.Name; + } + + public LSL_String llDetectedName(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return String.Empty; + return detectedParams.Name; + } + + public LSL_String llDetectedKey(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return String.Empty; + return detectedParams.Key.ToString(); + } + + public LSL_String llDetectedOwner(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return String.Empty; + return detectedParams.Owner.ToString(); + } + + public LSL_Integer llDetectedType(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return 0; + return new LSL_Integer(detectedParams.Type); + } + + public LSL_Vector llDetectedPos(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return new LSL_Vector(); + return detectedParams.Position; + } + + public LSL_Vector llDetectedVel(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return new LSL_Vector(); + return detectedParams.Velocity; + } + + public LSL_Vector llDetectedGrab(int number) + { + m_host.AddScriptLPS(1); + DetectParams parms = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (parms == null) + return new LSL_Vector(0, 0, 0); + + return parms.OffsetPos; + } + + public LSL_Rotation llDetectedRot(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return new LSL_Rotation(); + return detectedParams.Rotation; + } + + public LSL_Integer llDetectedGroup(int number) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (detectedParams == null) + return new LSL_Integer(0); + if (m_host.GroupID == detectedParams.Group) + return new LSL_Integer(1); + return new LSL_Integer(0); + } + + public LSL_Integer llDetectedLinkNumber(int number) + { + m_host.AddScriptLPS(1); + DetectParams parms = m_ScriptEngine.GetDetectParams(m_item.ItemID, number); + if (parms == null) + return new LSL_Integer(0); + + return new LSL_Integer(parms.LinkNum); + } + + /// + /// See http://wiki.secondlife.com/wiki/LlDetectedTouchBinormal for details + /// + public LSL_Vector llDetectedTouchBinormal(int index) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); + if (detectedParams == null) + return new LSL_Vector(); + return detectedParams.TouchBinormal; + } + + /// + /// See http://wiki.secondlife.com/wiki/LlDetectedTouchFace for details + /// + public LSL_Integer llDetectedTouchFace(int index) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); + if (detectedParams == null) + return new LSL_Integer(-1); + return new LSL_Integer(detectedParams.TouchFace); + } + + /// + /// See http://wiki.secondlife.com/wiki/LlDetectedTouchNormal for details + /// + public LSL_Vector llDetectedTouchNormal(int index) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); + if (detectedParams == null) + return new LSL_Vector(); + return detectedParams.TouchNormal; + } + + /// + /// See http://wiki.secondlife.com/wiki/LlDetectedTouchPos for details + /// + public LSL_Vector llDetectedTouchPos(int index) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); + if (detectedParams == null) + return new LSL_Vector(); + return detectedParams.TouchPos; + } + + /// + /// See http://wiki.secondlife.com/wiki/LlDetectedTouchST for details + /// + public LSL_Vector llDetectedTouchST(int index) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); + if (detectedParams == null) + return new LSL_Vector(-1.0, -1.0, 0.0); + return detectedParams.TouchST; + } + + /// + /// See http://wiki.secondlife.com/wiki/LlDetectedTouchUV for details + /// + public LSL_Vector llDetectedTouchUV(int index) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index); + if (detectedParams == null) + return new LSL_Vector(-1.0, -1.0, 0.0); + return detectedParams.TouchUV; + } + + public virtual void llDie() + { + m_host.AddScriptLPS(1); + throw new SelfDeleteException(); + } + + public LSL_Float llGround(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + Vector3 pos = m_host.GetWorldPosition() + (Vector3)offset; + + //Get the slope normal. This gives us the equation of the plane tangent to the slope. + LSL_Vector vsn = llGroundNormal(offset); + + // Clamp to valid position + if (pos.X < 0) + pos.X = 0; + else if (pos.X >= World.Heightmap.Width) + pos.X = World.Heightmap.Width - 1; + if (pos.Y < 0) + pos.Y = 0; + else if (pos.Y >= World.Heightmap.Height) + pos.Y = World.Heightmap.Height - 1; + + //Get the height for the integer coordinates from the Heightmap + float baseheight = (float)World.Heightmap[(int)pos.X, (int)pos.Y]; + + //Calculate the difference between the actual coordinates and the integer coordinates + float xdiff = pos.X - (float)((int)pos.X); + float ydiff = pos.Y - (float)((int)pos.Y); + + //Use the equation of the tangent plane to adjust the height to account for slope + + return (((vsn.x * xdiff) + (vsn.y * ydiff)) / (-1 * vsn.z)) + baseheight; + } + + public LSL_Float llCloud(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + float cloudCover = 0f; + ICloudModule module = World.RequestModuleInterface(); + if (module != null) + { + Vector3 pos = m_host.GetWorldPosition(); + int x = (int)(pos.X + offset.x); + int y = (int)(pos.Y + offset.y); + + cloudCover = module.CloudCover(x, y, 0); + + } + return cloudCover; + } + + public LSL_Vector llWind(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + LSL_Vector wind = new LSL_Vector(0, 0, 0); + IWindModule module = World.RequestModuleInterface(); + if (module != null) + { + Vector3 pos = m_host.GetWorldPosition(); + int x = (int)(pos.X + offset.x); + int y = (int)(pos.Y + offset.y); + + Vector3 windSpeed = module.WindSpeed(x, y, 0); + + wind.x = windSpeed.X; + wind.y = windSpeed.Y; + } + return wind; + } + + public void llSetStatus(int status, int value) + { + m_host.AddScriptLPS(1); + + int statusrotationaxis = 0; + + if ((status & ScriptBaseClass.STATUS_PHYSICS) == ScriptBaseClass.STATUS_PHYSICS) + { + if (value != 0) + { + SceneObjectGroup group = m_host.ParentGroup; + bool allow = true; + + foreach (SceneObjectPart part in group.Parts) + { + if (part.Scale.X > World.m_maxPhys || part.Scale.Y > World.m_maxPhys || part.Scale.Z > World.m_maxPhys) + { + allow = false; + break; + } + } + + if (!allow) + return; + + m_host.ScriptSetPhysicsStatus(true); + } + else + { + m_host.ScriptSetPhysicsStatus(false); + } + } + + if ((status & ScriptBaseClass.STATUS_PHANTOM) == ScriptBaseClass.STATUS_PHANTOM) + { + m_host.ParentGroup.ScriptSetPhantomStatus(value != 0); + } + + if ((status & ScriptBaseClass.STATUS_CAST_SHADOWS) == ScriptBaseClass.STATUS_CAST_SHADOWS) + { + m_host.AddFlag(PrimFlags.CastShadows); + } + + if ((status & ScriptBaseClass.STATUS_ROTATE_X) == ScriptBaseClass.STATUS_ROTATE_X) + { + statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_X; + } + + if ((status & ScriptBaseClass.STATUS_ROTATE_Y) == ScriptBaseClass.STATUS_ROTATE_Y) + { + statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Y; + } + + if ((status & ScriptBaseClass.STATUS_ROTATE_Z) == ScriptBaseClass.STATUS_ROTATE_Z) + { + statusrotationaxis |= ScriptBaseClass.STATUS_ROTATE_Z; + } + + if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB) == ScriptBaseClass.STATUS_BLOCK_GRAB) + m_host.BlockGrab = value != 0; + + if ((status & ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT) == ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT) + m_host.ParentGroup.BlockGrabOverride = value != 0; + + if ((status & ScriptBaseClass.STATUS_DIE_AT_EDGE) == ScriptBaseClass.STATUS_DIE_AT_EDGE) + { + if (value != 0) + m_host.SetDieAtEdge(true); + else + m_host.SetDieAtEdge(false); + } + + if ((status & ScriptBaseClass.STATUS_RETURN_AT_EDGE) == ScriptBaseClass.STATUS_RETURN_AT_EDGE) + { + if (value != 0) + m_host.SetReturnAtEdge(true); + else + m_host.SetReturnAtEdge(false); + } + + if ((status & ScriptBaseClass.STATUS_SANDBOX) == ScriptBaseClass.STATUS_SANDBOX) + { + if (value != 0) + m_host.SetStatusSandbox(true); + else + m_host.SetStatusSandbox(false); + } + + if (statusrotationaxis != 0) + { + m_host.SetAxisRotation(statusrotationaxis, value); + } + } + + private bool IsPhysical() + { + return ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) == (uint)PrimFlags.Physics); + } + + public LSL_Integer llGetStatus(int status) + { + m_host.AddScriptLPS(1); + // m_log.Debug(m_host.ToString() + " status is " + m_host.GetEffectiveObjectFlags().ToString()); + switch (status) + { + case ScriptBaseClass.STATUS_PHYSICS: + return IsPhysical() ? 1 : 0; + + case ScriptBaseClass.STATUS_PHANTOM: + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) == (uint)PrimFlags.Phantom) + { + return 1; + } + return 0; + + case ScriptBaseClass.STATUS_CAST_SHADOWS: + if ((m_host.GetEffectiveObjectFlags() & (uint)PrimFlags.CastShadows) == (uint)PrimFlags.CastShadows) + { + return 1; + } + return 0; + + case ScriptBaseClass.STATUS_BLOCK_GRAB: + return m_host.BlockGrab ? 1 : 0; + + case ScriptBaseClass.STATUS_BLOCK_GRAB_OBJECT: + return m_host.ParentGroup.BlockGrabOverride ? 1 : 0; + + case ScriptBaseClass.STATUS_DIE_AT_EDGE: + if (m_host.GetDieAtEdge()) + return 1; + else + return 0; + + case ScriptBaseClass.STATUS_RETURN_AT_EDGE: + if (m_host.GetReturnAtEdge()) + return 1; + else + return 0; + + case ScriptBaseClass.STATUS_ROTATE_X: + // if (m_host.GetAxisRotation(2) != 0) + if (m_host.GetAxisRotation((int)SceneObjectGroup.axisSelect.STATUS_ROTATE_X) != 0) + return 1; + else + return 0; + + case ScriptBaseClass.STATUS_ROTATE_Y: + if (m_host.GetAxisRotation((int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Y) != 0) + return 1; + else + return 0; + + case ScriptBaseClass.STATUS_ROTATE_Z: + if (m_host.GetAxisRotation((int)SceneObjectGroup.axisSelect.STATUS_ROTATE_Z) != 0) + return 1; + else + return 0; + + case ScriptBaseClass.STATUS_SANDBOX: + if (m_host.GetStatusSandbox()) + return 1; + else + return 0; + } + return 0; + } + + public void llSetScale(LSL_Vector scale) + { + m_host.AddScriptLPS(1); + SetScale(m_host, scale); + } + + protected void SetScale(SceneObjectPart part, LSL_Vector scale) + { + // TODO: this needs to trigger a persistance save as well + if (part == null || part.ParentGroup.IsDeleted) + return; + + // First we need to check whether or not we need to clamp the size of a physics-enabled prim + PhysicsActor pa = part.ParentGroup.RootPart.PhysActor; + if (pa != null && pa.IsPhysical) + { + scale.x = Math.Max(World.m_minPhys, Math.Min(World.m_maxPhys, scale.x)); + scale.y = Math.Max(World.m_minPhys, Math.Min(World.m_maxPhys, scale.y)); + scale.z = Math.Max(World.m_minPhys, Math.Min(World.m_maxPhys, scale.z)); + } + else + { + // If not physical, then we clamp the scale to the non-physical min/max + scale.x = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, scale.x)); + scale.y = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, scale.y)); + scale.z = Math.Max(World.m_minNonphys, Math.Min(World.m_maxNonphys, scale.z)); + } + + Vector3 tmp = part.Scale; + tmp.X = (float)scale.x; + tmp.Y = (float)scale.y; + tmp.Z = (float)scale.z; + part.Scale = tmp; + part.SendFullUpdateToAllClients(); + } + + public LSL_Vector llGetScale() + { + m_host.AddScriptLPS(1); + return new LSL_Vector(m_host.Scale.X, m_host.Scale.Y, m_host.Scale.Z); + } + + public void llSetClickAction(int action) + { + m_host.AddScriptLPS(1); + m_host.ClickAction = (byte)action; + m_host.ParentGroup.HasGroupChanged = true; + m_host.ScheduleFullUpdate(); + return; + } + + public void llSetColor(LSL_Vector color, int face) + { + m_host.AddScriptLPS(1); + + if (face == ScriptBaseClass.ALL_SIDES) + face = SceneObjectPart.ALL_SIDES; + + m_host.SetFaceColorAlpha(face, color, null); + } + + public void llSetContentType(LSL_Key id, LSL_Integer type) + { + m_host.AddScriptLPS(1); + + if (m_UrlModule == null) + return; + + // Make sure the content type is text/plain to start with + m_UrlModule.HttpContentType(new UUID(id), "text/plain"); + + // Is the object owner online and in the region + ScenePresence agent = World.GetScenePresence(m_host.ParentGroup.OwnerID); + if (agent == null || agent.IsChildAgent) + return; // Fail if the owner is not in the same region + + // Is it the embeded browser? + string userAgent = m_UrlModule.GetHttpHeader(new UUID(id), "user-agent"); + if (userAgent.IndexOf("SecondLife") < 0) + return; // Not the embedded browser. Is this check good enough? + + // Use the IP address of the client and check against the request + // seperate logins from the same IP will allow all of them to get non-text/plain as long + // as the owner is in the region. Same as SL! + string logonFromIPAddress = agent.ControllingClient.RemoteEndPoint.Address.ToString(); + string requestFromIPAddress = m_UrlModule.GetHttpHeader(new UUID(id), "remote_addr"); + //m_log.Debug("IP from header='" + requestFromIPAddress + "' IP from endpoint='" + logonFromIPAddress + "'"); + if (requestFromIPAddress == null || requestFromIPAddress.Trim() == "") + return; + if (logonFromIPAddress == null || logonFromIPAddress.Trim() == "") + return; + + // If the request isnt from the same IP address then the request cannot be from the owner + if (!requestFromIPAddress.Trim().Equals(logonFromIPAddress.Trim())) + return; + + switch (type) + { + case ScriptBaseClass.CONTENT_TYPE_HTML: + m_UrlModule.HttpContentType(new UUID(id), "text/html"); + break; + case ScriptBaseClass.CONTENT_TYPE_XML: + m_UrlModule.HttpContentType(new UUID(id), "application/xml"); + break; + case ScriptBaseClass.CONTENT_TYPE_XHTML: + m_UrlModule.HttpContentType(new UUID(id), "application/xhtml+xml"); + break; + case ScriptBaseClass.CONTENT_TYPE_ATOM: + m_UrlModule.HttpContentType(new UUID(id), "application/atom+xml"); + break; + case ScriptBaseClass.CONTENT_TYPE_JSON: + m_UrlModule.HttpContentType(new UUID(id), "application/json"); + break; + case ScriptBaseClass.CONTENT_TYPE_LLSD: + m_UrlModule.HttpContentType(new UUID(id), "application/llsd+xml"); + break; + case ScriptBaseClass.CONTENT_TYPE_FORM: + m_UrlModule.HttpContentType(new UUID(id), "application/x-www-form-urlencoded"); + break; + case ScriptBaseClass.CONTENT_TYPE_RSS: + m_UrlModule.HttpContentType(new UUID(id), "application/rss+xml"); + break; + default: + m_UrlModule.HttpContentType(new UUID(id), "text/plain"); + break; + } + } + + public void SetTexGen(SceneObjectPart part, int face,int style) + { + Primitive.TextureEntry tex = part.Shape.Textures; + MappingType textype; + textype = MappingType.Default; + if (style == (int)ScriptBaseClass.PRIM_TEXGEN_PLANAR) + textype = MappingType.Planar; + + if (face >= 0 && face < GetNumberOfSides(part)) + { + tex.CreateFace((uint) face); + tex.FaceTextures[face].TexMapType = textype; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + else if (face == ScriptBaseClass.ALL_SIDES) + { + for (uint i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].TexMapType = textype; + } + tex.DefaultTexture.TexMapType = textype; + } + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public void SetGlow(SceneObjectPart part, int face, float glow) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face >= 0 && face < GetNumberOfSides(part)) + { + tex.CreateFace((uint) face); + tex.FaceTextures[face].Glow = glow; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + else if (face == ScriptBaseClass.ALL_SIDES) + { + for (uint i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].Glow = glow; + } + tex.DefaultTexture.Glow = glow; + } + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public void SetShiny(SceneObjectPart part, int face, int shiny, Bumpiness bump) + { + + Shininess sval = new Shininess(); + + switch (shiny) + { + case 0: + sval = Shininess.None; + break; + case 1: + sval = Shininess.Low; + break; + case 2: + sval = Shininess.Medium; + break; + case 3: + sval = Shininess.High; + break; + default: + sval = Shininess.None; + break; + } + + Primitive.TextureEntry tex = part.Shape.Textures; + if (face >= 0 && face < GetNumberOfSides(part)) + { + tex.CreateFace((uint) face); + tex.FaceTextures[face].Shiny = sval; + tex.FaceTextures[face].Bump = bump; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + else if (face == ScriptBaseClass.ALL_SIDES) + { + for (uint i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].Shiny = sval; + tex.FaceTextures[i].Bump = bump; + } + tex.DefaultTexture.Shiny = sval; + tex.DefaultTexture.Bump = bump; + } + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public void SetFullBright(SceneObjectPart part, int face, bool bright) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face >= 0 && face < GetNumberOfSides(part)) + { + tex.CreateFace((uint) face); + tex.FaceTextures[face].Fullbright = bright; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + else if (face == ScriptBaseClass.ALL_SIDES) + { + for (uint i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].Fullbright = bright; + } + } + tex.DefaultTexture.Fullbright = bright; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public LSL_Float llGetAlpha(int face) + { + m_host.AddScriptLPS(1); + + return GetAlpha(m_host, face); + } + + protected LSL_Float GetAlpha(SceneObjectPart part, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + int i; + double sum = 0.0; + for (i = 0 ; i < GetNumberOfSides(part); i++) + sum += (double)tex.GetFace((uint)i).RGBA.A; + return sum; + } + if (face >= 0 && face < GetNumberOfSides(part)) + { + return (double)tex.GetFace((uint)face).RGBA.A; + } + return 0.0; + } + + public void llSetAlpha(double alpha, int face) + { + m_host.AddScriptLPS(1); + + SetAlpha(m_host, alpha, face); + } + + public void llSetLinkAlpha(int linknumber, double alpha, int face) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + foreach (SceneObjectPart part in parts) + SetAlpha(part, alpha, face); + } + + protected void SetAlpha(SceneObjectPart part, double alpha, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; + if (face >= 0 && face < GetNumberOfSides(part)) + { + texcolor = tex.CreateFace((uint)face).RGBA; + texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f); + tex.FaceTextures[face].RGBA = texcolor; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + else if (face == ScriptBaseClass.ALL_SIDES) + { + for (int i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + texcolor = tex.FaceTextures[i].RGBA; + texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f); + tex.FaceTextures[i].RGBA = texcolor; + } + } + + // In some cases, the default texture can be null, eg when every face + // has a unique texture + if (tex.DefaultTexture != null) + { + texcolor = tex.DefaultTexture.RGBA; + texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f); + tex.DefaultTexture.RGBA = texcolor; + } + + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + /// + /// Set flexi parameters of a part. + /// + /// FIXME: Much of this code should probably be within the part itself. + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected void SetFlexi(SceneObjectPart part, bool flexi, int softness, float gravity, float friction, + float wind, float tension, LSL_Vector Force) + { + if (part == null) + return; + + if (flexi) + { + part.Shape.FlexiEntry = true; // this setting flexi true isn't working, but the below parameters do + // work once the prim is already flexi + part.Shape.FlexiSoftness = softness; + part.Shape.FlexiGravity = gravity; + part.Shape.FlexiDrag = friction; + part.Shape.FlexiWind = wind; + part.Shape.FlexiTension = tension; + part.Shape.FlexiForceX = (float)Force.x; + part.Shape.FlexiForceY = (float)Force.y; + part.Shape.FlexiForceZ = (float)Force.z; + part.Shape.PathCurve = (byte)Extrusion.Flexible; + } + else + { + // Other values not set, they do not seem to be sent to the viewer + // Setting PathCurve appears to be what actually toggles the check box and turns Flexi on and off + part.Shape.PathCurve = (byte)Extrusion.Straight; + part.Shape.FlexiEntry = false; + } + part.ParentGroup.HasGroupChanged = true; + part.ScheduleFullUpdate(); + } + + /// + /// Set a light point on a part + /// + /// FIXME: Much of this code should probably be in SceneObjectGroup + /// + /// + /// + /// + /// + /// + /// + protected void SetPointLight(SceneObjectPart part, bool light, LSL_Vector color, float intensity, float radius, float falloff) + { + if (part == null) + return; + + if (light) + { + part.Shape.LightEntry = true; + part.Shape.LightColorR = Util.Clip((float)color.x, 0.0f, 1.0f); + part.Shape.LightColorG = Util.Clip((float)color.y, 0.0f, 1.0f); + part.Shape.LightColorB = Util.Clip((float)color.z, 0.0f, 1.0f); + part.Shape.LightIntensity = Util.Clip((float)intensity, 0.0f, 1.0f); + part.Shape.LightRadius = Util.Clip((float)radius, 0.1f, 20.0f); + part.Shape.LightFalloff = Util.Clip((float)falloff, 0.01f, 2.0f); + } + else + { + part.Shape.LightEntry = false; + } + + part.ParentGroup.HasGroupChanged = true; + part.ScheduleFullUpdate(); + } + + public LSL_Vector llGetColor(int face) + { + m_host.AddScriptLPS(1); + return GetColor(m_host, face); + } + + protected LSL_Vector GetColor(SceneObjectPart part, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + Color4 texcolor; + LSL_Vector rgb = new LSL_Vector(); + if (face == ScriptBaseClass.ALL_SIDES) + { + int i; + + for (i = 0 ; i < GetNumberOfSides(part); i++) + { + texcolor = tex.GetFace((uint)i).RGBA; + rgb.x += texcolor.R; + rgb.y += texcolor.G; + rgb.z += texcolor.B; + } + + rgb.x /= (float)GetNumberOfSides(part); + rgb.y /= (float)GetNumberOfSides(part); + rgb.z /= (float)GetNumberOfSides(part); + + return rgb; + } + + if (face >= 0 && face < GetNumberOfSides(part)) + { + texcolor = tex.GetFace((uint)face).RGBA; + rgb.x = texcolor.R; + rgb.y = texcolor.G; + rgb.z = texcolor.B; + + return rgb; + } + else + { + return new LSL_Vector(); + } + } + + public void llSetTexture(string texture, int face) + { + m_host.AddScriptLPS(1); + SetTexture(m_host, texture, face); + ScriptSleep(m_sleepMsOnSetTexture); + } + + public void llSetLinkTexture(int linknumber, string texture, int face) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + foreach (SceneObjectPart part in parts) + SetTexture(part, texture, face); + + ScriptSleep(m_sleepMsOnSetLinkTexture); + } + + protected void SetTexture(SceneObjectPart part, string texture, int face) + { + UUID textureID = new UUID(); + + textureID = ScriptUtils.GetAssetIdFromItemName(m_host, texture, (int)AssetType.Texture); + if (textureID == UUID.Zero) + { + if (!UUID.TryParse(texture, out textureID)) + return; + } + + Primitive.TextureEntry tex = part.Shape.Textures; + + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); + texface.TextureID = textureID; + tex.FaceTextures[face] = texface; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + else if (face == ScriptBaseClass.ALL_SIDES) + { + for (uint i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].TextureID = textureID; + } + } + tex.DefaultTexture.TextureID = textureID; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public void llScaleTexture(double u, double v, int face) + { + m_host.AddScriptLPS(1); + + ScaleTexture(m_host, u, v, face); + ScriptSleep(m_sleepMsOnScaleTexture); + } + + protected void ScaleTexture(SceneObjectPart part, double u, double v, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); + texface.RepeatU = (float)u; + texface.RepeatV = (float)v; + tex.FaceTextures[face] = texface; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + if (face == ScriptBaseClass.ALL_SIDES) + { + for (int i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].RepeatU = (float)u; + tex.FaceTextures[i].RepeatV = (float)v; + } + } + tex.DefaultTexture.RepeatU = (float)u; + tex.DefaultTexture.RepeatV = (float)v; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public void llOffsetTexture(double u, double v, int face) + { + m_host.AddScriptLPS(1); + OffsetTexture(m_host, u, v, face); + ScriptSleep(m_sleepMsOnOffsetTexture); + } + + protected void OffsetTexture(SceneObjectPart part, double u, double v, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); + texface.OffsetU = (float)u; + texface.OffsetV = (float)v; + tex.FaceTextures[face] = texface; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + if (face == ScriptBaseClass.ALL_SIDES) + { + for (int i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].OffsetU = (float)u; + tex.FaceTextures[i].OffsetV = (float)v; + } + } + tex.DefaultTexture.OffsetU = (float)u; + tex.DefaultTexture.OffsetV = (float)v; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public void llRotateTexture(double rotation, int face) + { + m_host.AddScriptLPS(1); + RotateTexture(m_host, rotation, face); + ScriptSleep(m_sleepMsOnRotateTexture); + } + + protected void RotateTexture(SceneObjectPart part, double rotation, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.CreateFace((uint)face); + texface.Rotation = (float)rotation; + tex.FaceTextures[face] = texface; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + if (face == ScriptBaseClass.ALL_SIDES) + { + for (int i = 0; i < GetNumberOfSides(part); i++) + { + if (tex.FaceTextures[i] != null) + { + tex.FaceTextures[i].Rotation = (float)rotation; + } + } + tex.DefaultTexture.Rotation = (float)rotation; + part.UpdateTextureEntry(tex.GetBytes()); + return; + } + } + + public LSL_String llGetTexture(int face) + { + m_host.AddScriptLPS(1); + return GetTexture(m_host, face); + } + + protected LSL_String GetTexture(SceneObjectPart part, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + face = 0; + } + + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface; + texface = tex.GetFace((uint)face); + string texture = texface.TextureID.ToString(); + + lock (part.TaskInventory) + { + foreach (KeyValuePair inv in part.TaskInventory) + { + if (inv.Value.AssetID == texface.TextureID) + { + texture = inv.Value.Name.ToString(); + break; + } + } + } + + return texture; + } + else + { + return UUID.Zero.ToString(); + } + } + + public void llSetPos(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + + SetPos(m_host, pos, true); + + ScriptSleep(m_sleepMsOnSetPos); + } + + /// + /// Tries to move the entire object so that the root prim is within 0.1m of position. http://wiki.secondlife.com/wiki/LlSetRegionPos + /// Documentation indicates that the use of x/y coordinates up to 10 meters outside the bounds of a region will work but do not specify what happens if there is no adjacent region for the object to move into. + /// Uses the RegionSize constant here rather than hard-coding 266.0 to alert any developer modifying OpenSim to support variable-sized regions that this method will need tweaking. + /// + /// + /// 1 if successful, 0 otherwise. + public LSL_Integer llSetRegionPos(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + + // BEGIN WORKAROUND + // IF YOU GET REGION CROSSINGS WORKING WITH THIS FUNCTION, REPLACE THE WORKAROUND. + // + // This workaround is to prevent silent failure of this function. + // According to the specification on the SL Wiki, providing a position outside of the + if (pos.x < 0 || pos.x > World.RegionInfo.RegionSizeX || pos.y < 0 || pos.y > World.RegionInfo.RegionSizeY) + { + return 0; + } + // END WORK AROUND + else if ( // this is not part of the workaround if-block because it's not related to the workaround. + IsPhysical() || + m_host.ParentGroup.IsAttachment || // return FALSE if attachment + ( + pos.x < -10.0 || // return FALSE if more than 10 meters into a west-adjacent region. + pos.x > (World.RegionInfo.RegionSizeX + 10) || // return FALSE if more than 10 meters into a east-adjacent region. + pos.y < -10.0 || // return FALSE if more than 10 meters into a south-adjacent region. + pos.y > (World.RegionInfo.RegionSizeY + 10) || // return FALSE if more than 10 meters into a north-adjacent region. + pos.z > Constants.RegionHeight // return FALSE if altitude than 4096m + ) + ) + { + return 0; + } + + // if we reach this point, then the object is not physical, it's not an attachment, and the destination is within the valid range. + // this could possibly be done in the above else-if block, but we're doing the check here to keep the code easier to read. + + Vector3 objectPos = m_host.ParentGroup.RootPart.AbsolutePosition; + LandData here = World.GetLandData(objectPos); + LandData there = World.GetLandData(pos); + + // we're only checking prim limits if it's moving to a different parcel under the assumption that if the object got onto the parcel without exceeding the prim limits. + + bool sameParcel = here.GlobalID == there.GlobalID; + + if (!sameParcel && !World.Permissions.CanRezObject( + m_host.ParentGroup.PrimCount, m_host.ParentGroup.OwnerID, pos)) + { + return 0; + } + + SetPos(m_host.ParentGroup.RootPart, pos, false); + + return VecDist(pos, llGetRootPosition()) <= 0.1 ? 1 : 0; + } + + // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) + // note linked setpos is capped "differently" + private LSL_Vector SetPosAdjust(LSL_Vector start, LSL_Vector end) + { + if (llVecDist(start, end) > 10.0f * m_ScriptDistanceFactor) + return start + m_ScriptDistanceFactor * 10.0f * llVecNorm(end - start); + else + return end; + } + + protected LSL_Vector GetSetPosTarget(SceneObjectPart part, LSL_Vector targetPos, LSL_Vector fromPos) + { + if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) + return fromPos; + + // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) + + + float ground = World.GetGroundHeight((float)targetPos.x, (float)targetPos.y); + bool disable_underground_movement = m_ScriptEngine.Config.GetBoolean("DisableUndergroundMovement", true); + + if (part.ParentGroup.RootPart == part) + { + if ((targetPos.z < ground) && disable_underground_movement && m_host.ParentGroup.AttachmentPoint == 0) + targetPos.z = ground; + } + LSL_Vector real_vec = SetPosAdjust(fromPos, targetPos); + + return real_vec; + } + + /// + /// set object position, optionally capping the distance. + /// + /// + /// + /// if TRUE, will cap the distance to 10m. + protected void SetPos(SceneObjectPart part, LSL_Vector targetPos, bool adjust) + { + // Capped movemment if distance > 10m (http://wiki.secondlife.com/wiki/LlSetPos) + LSL_Vector currentPos = GetPartLocalPos(part); + + float ground = World.GetGroundHeight((float)targetPos.x, (float)targetPos.y); + bool disable_underground_movement = m_ScriptEngine.Config.GetBoolean("DisableUndergroundMovement", true); + + if (part.ParentGroup.RootPart == part) + { + if ((targetPos.z < ground) && disable_underground_movement && m_host.ParentGroup.AttachmentPoint == 0) + targetPos.z = ground; + SceneObjectGroup parent = part.ParentGroup; + parent.UpdateGroupPosition(!adjust ? targetPos : + SetPosAdjust(currentPos, targetPos)); + } + else + { + part.OffsetPosition = !adjust ? targetPos : + SetPosAdjust(currentPos, targetPos); + SceneObjectGroup parent = part.ParentGroup; + parent.HasGroupChanged = true; + parent.ScheduleGroupForTerseUpdate(); + } + } + + public LSL_Vector llGetPos() + { + m_host.AddScriptLPS(1); + return m_host.GetWorldPosition(); + } + + public LSL_Vector llGetLocalPos() + { + m_host.AddScriptLPS(1); + return GetPartLocalPos(m_host); + } + + protected LSL_Vector GetPartLocalPos(SceneObjectPart part) + { + m_host.AddScriptLPS(1); + + Vector3 pos; + + if (!part.IsRoot) + { + pos = part.OffsetPosition; + } + else + { + if (part.ParentGroup.IsAttachment) + { + pos = part.AttachedPos; + } + else + { + pos = part.AbsolutePosition; + } + } + +// m_log.DebugFormat("[LSL API]: Returning {0} in GetPartLocalPos()", pos); + + return new LSL_Vector(pos); + } + + public void llSetRot(LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + + // try to let this work as in SL... + if (m_host.ParentID == 0) + { + // special case: If we are root, rotate complete SOG to new rotation + SetRot(m_host, rot); + } + else + { + // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. + SceneObjectPart rootPart = m_host.ParentGroup.RootPart; + if (rootPart != null) // better safe than sorry + { + SetRot(m_host, rootPart.RotationOffset * (Quaternion)rot); + } + } + + ScriptSleep(m_sleepMsOnSetRot); + } + + public void llSetLocalRot(LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + SetRot(m_host, rot); + ScriptSleep(m_sleepMsOnSetLocalRot); + } + + protected void SetRot(SceneObjectPart part, Quaternion rot) + { + part.UpdateRotation(rot); + // Update rotation does not move the object in the physics scene if it's a linkset. + +//KF: Do NOT use this next line if using ODE physics engine. This need a switch based on .ini Phys Engine type +// part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition; + + // So, after thinking about this for a bit, the issue with the part.ParentGroup.AbsolutePosition = part.ParentGroup.AbsolutePosition line + // is it isn't compatible with vehicles because it causes the vehicle body to have to be broken down and rebuilt + // It's perfectly okay when the object is not an active physical body though. + // So, part.ParentGroup.ResetChildPrimPhysicsPositions(); does the thing that Kitto is warning against + // but only if the object is not physial and active. This is important for rotating doors. + // without the absoluteposition = absoluteposition happening, the doors do not move in the physics + // scene + PhysicsActor pa = part.PhysActor; + + if (pa != null && !pa.IsPhysical) + { + part.ParentGroup.ResetChildPrimPhysicsPositions(); + } + } + + /// + /// See http://lslwiki.net/lslwiki/wakka.php?wakka=ChildRotation + /// + public LSL_Rotation llGetRot() + { + // unlinked or root prim then use llRootRotation + // see llRootRotaion for references. + if (m_host.LinkNum == 0 || m_host.LinkNum == 1) + { + return llGetRootRotation(); + } + + m_host.AddScriptLPS(1); + Quaternion q = m_host.GetWorldRotation(); + return new LSL_Rotation(q.X, q.Y, q.Z, q.W); + } + + private LSL_Rotation GetPartRot(SceneObjectPart part) + { + Quaternion q; + if (part.LinkNum == 0 || part.LinkNum == 1) // unlinked or root prim + { + if (part.ParentGroup.AttachmentPoint != 0) + { + ScenePresence avatar = World.GetScenePresence(part.ParentGroup.AttachedAvatar); + if (avatar != null) + { + if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) + q = avatar.CameraRotation; // Mouselook + else + q = avatar.GetWorldRotation(); // Currently infrequently updated so may be inaccurate + } + else + q = part.ParentGroup.GroupRotation; // Likely never get here but just in case + } + else + q = part.ParentGroup.GroupRotation; // just the group rotation + + return new LSL_Rotation(q); + } + + return new LSL_Rotation(part.GetWorldRotation()); + } + + public LSL_Rotation llGetLocalRot() + { + m_host.AddScriptLPS(1); + + return new LSL_Rotation(m_host.RotationOffset); + } + + public void llSetForce(LSL_Vector force, int local) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + if (local != 0) + force *= llGetRot(); + + m_host.ParentGroup.RootPart.SetForce(force); + } + } + + public LSL_Vector llGetForce() + { + LSL_Vector force = new LSL_Vector(0.0, 0.0, 0.0); + + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + force = m_host.ParentGroup.RootPart.GetForce(); + } + + return force; + } + + public void llSetVelocity(LSL_Vector velocity, int local) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + if (local != 0) + velocity *= llGetRot(); + + m_host.ParentGroup.RootPart.Velocity = velocity; + } + } + + public void llSetAngularVelocity(LSL_Vector angularVelocity, int local) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + if (local != 0) + angularVelocity *= llGetRot(); + + m_host.ParentGroup.RootPart.AngularVelocity = angularVelocity; + } + } + + public LSL_Integer llTarget(LSL_Vector position, double range) + { + m_host.AddScriptLPS(1); + return m_host.ParentGroup.registerTargetWaypoint(position, + (float)range); + } + + public void llTargetRemove(int number) + { + m_host.AddScriptLPS(1); + m_host.ParentGroup.unregisterTargetWaypoint(number); + } + + public LSL_Integer llRotTarget(LSL_Rotation rot, double error) + { + m_host.AddScriptLPS(1); + return m_host.ParentGroup.registerRotTargetWaypoint(rot, (float)error); + } + + public void llRotTargetRemove(int number) + { + m_host.AddScriptLPS(1); + m_host.ParentGroup.unregisterRotTargetWaypoint(number); + } + + public void llMoveToTarget(LSL_Vector target, double tau) + { + m_host.AddScriptLPS(1); + m_host.MoveToTarget(target, (float)tau); + } + + public void llStopMoveToTarget() + { + m_host.AddScriptLPS(1); + m_host.StopMoveToTarget(); + } + + public void llApplyImpulse(LSL_Vector force, int local) + { + m_host.AddScriptLPS(1); + //No energy force yet + Vector3 v = force; + if (v.Length() > 20000.0f) + { + v.Normalize(); + v = v * 20000.0f; + } + m_host.ApplyImpulse(v, local != 0); + } + + public void llApplyRotationalImpulse(LSL_Vector force, int local) + { + m_host.AddScriptLPS(1); + m_host.ApplyAngularImpulse(force, local != 0); + } + + public void llSetTorque(LSL_Vector torque, int local) + { + m_host.AddScriptLPS(1); + m_host.SetAngularImpulse(torque, local != 0); + } + + public LSL_Vector llGetTorque() + { + m_host.AddScriptLPS(1); + + return new LSL_Vector(m_host.ParentGroup.GetTorque()); + } + + public void llSetForceAndTorque(LSL_Vector force, LSL_Vector torque, int local) + { + m_host.AddScriptLPS(1); + llSetForce(force, local); + llSetTorque(torque, local); + } + + public LSL_Vector llGetVel() + { + m_host.AddScriptLPS(1); + + Vector3 vel; + + if (m_host.ParentGroup.IsAttachment) + { + ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); + vel = avatar.GetWorldVelocity(); + } + else + { + vel = m_host.Velocity; + } + + return new LSL_Vector(vel); + } + + public LSL_Vector llGetAccel() + { + m_host.AddScriptLPS(1); + + return new LSL_Vector(m_host.Acceleration); + } + + public LSL_Vector llGetOmega() + { + m_host.AddScriptLPS(1); + + return new LSL_Vector(m_host.AngularVelocity); + } + + public LSL_Float llGetTimeOfDay() + { + m_host.AddScriptLPS(1); + return (double)((DateTime.Now.TimeOfDay.TotalMilliseconds / 1000) % (3600 * 4)); + } + + public LSL_Float llGetWallclock() + { + m_host.AddScriptLPS(1); + return DateTime.Now.TimeOfDay.TotalSeconds; + } + + public LSL_Float llGetTime() + { + m_host.AddScriptLPS(1); + TimeSpan ScriptTime = DateTime.Now - m_timer; + return (double)(ScriptTime.TotalMilliseconds / 1000); + } + + public void llResetTime() + { + m_host.AddScriptLPS(1); + m_timer = DateTime.Now; + } + + public LSL_Float llGetAndResetTime() + { + m_host.AddScriptLPS(1); + TimeSpan ScriptTime = DateTime.Now - m_timer; + m_timer = DateTime.Now; + return (double)(ScriptTime.TotalMilliseconds / 1000); + } + + public void llSound(string sound, double volume, int queue, int loop) + { + m_host.AddScriptLPS(1); + Deprecated("llSound", "Use llPlaySound instead"); + } + + // Xantor 20080528 PlaySound updated so it accepts an objectinventory name -or- a key to a sound + // 20080530 Updated to remove code duplication + public void llPlaySound(string sound, double volume) + { + m_host.AddScriptLPS(1); + + // send the sound, once, to all clients in range + if (m_SoundModule != null) + { + m_SoundModule.SendSound( + m_host.UUID, + ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), + volume, false, m_host.SoundQueueing ? (byte)SoundFlags.Queue : (byte)SoundFlags.None, + 0, false, false); + } + } + + public void llLoopSound(string sound, double volume) + { + m_host.AddScriptLPS(1); + if (m_SoundModule != null) + { + m_SoundModule.LoopSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), + volume, 20, false); + } + } + + public void llLoopSoundMaster(string sound, double volume) + { + m_host.AddScriptLPS(1); + if (m_SoundModule != null) + { + m_SoundModule.LoopSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), + volume, 20, true); + } + } + + public void llLoopSoundSlave(string sound, double volume) + { + m_host.AddScriptLPS(1); + lock (m_host.ParentGroup.LoopSoundSlavePrims) + { + m_host.ParentGroup.LoopSoundSlavePrims.Add(m_host); + } + } + + public void llPlaySoundSlave(string sound, double volume) + { + m_host.AddScriptLPS(1); + + // send the sound, once, to all clients in range + if (m_SoundModule != null) + { + m_SoundModule.SendSound(m_host.UUID, + ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, false, 0, + 0, true, false); + } + } + + public void llTriggerSound(string sound, double volume) + { + m_host.AddScriptLPS(1); + // send the sound, once, to all clients in rangeTrigger or play an attached sound in this part's inventory. + if (m_SoundModule != null) + { + m_SoundModule.SendSound(m_host.UUID, + ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, true, 0, 0, + false, false); + } + } + + public void llStopSound() + { + m_host.AddScriptLPS(1); + + if (m_SoundModule != null) + m_SoundModule.StopSound(m_host.UUID); + } + + public void llPreloadSound(string sound) + { + m_host.AddScriptLPS(1); + if (m_SoundModule != null) + m_SoundModule.PreloadSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), 0); + ScriptSleep(m_sleepMsOnPreloadSound); + } + + /// + /// Return a portion of the designated string bounded by + /// inclusive indices (start and end). As usual, the negative + /// indices, and the tolerance for out-of-bound values, makes + /// this more complicated than it might otherwise seem. + /// + public LSL_String llGetSubString(string src, int start, int end) + { + m_host.AddScriptLPS(1); + + // Normalize indices (if negative). + // After normlaization they may still be + // negative, but that is now relative to + // the start, rather than the end, of the + // sequence. + + if (start < 0) + { + start = src.Length+start; + } + if (end < 0) + { + end = src.Length+end; + } + + // Conventional substring + if (start <= end) + { + // Implies both bounds are out-of-range. + if (end < 0 || start >= src.Length) + { + return String.Empty; + } + // If end is positive, then it directly + // corresponds to the lengt of the substring + // needed (plus one of course). BUT, it + // must be within bounds. + if (end >= src.Length) + { + end = src.Length-1; + } + + if (start < 0) + { + return src.Substring(0,end+1); + } + // Both indices are positive + return src.Substring(start, (end+1) - start); + } + + // Inverted substring (end < start) + else + { + // Implies both indices are below the + // lower bound. In the inverted case, that + // means the entire string will be returned + // unchanged. + if (start < 0) + { + return src; + } + // If both indices are greater than the upper + // bound the result may seem initially counter + // intuitive. + if (end >= src.Length) + { + return src; + } + + if (end < 0) + { + if (start < src.Length) + { + return src.Substring(start); + } + else + { + return String.Empty; + } + } + else + { + if (start < src.Length) + { + return src.Substring(0,end+1) + src.Substring(start); + } + else + { + return src.Substring(0,end+1); + } + } + } + } + + /// + /// Delete substring removes the specified substring bounded + /// by the inclusive indices start and end. Indices may be + /// negative (indicating end-relative) and may be inverted, + /// i.e. end < start. + /// + public LSL_String llDeleteSubString(string src, int start, int end) + { + m_host.AddScriptLPS(1); + + // Normalize indices (if negative). + // After normlaization they may still be + // negative, but that is now relative to + // the start, rather than the end, of the + // sequence. + if (start < 0) + { + start = src.Length+start; + } + if (end < 0) + { + end = src.Length+end; + } + // Conventionally delimited substring + if (start <= end) + { + // If both bounds are outside of the existing + // string, then return unchanges. + if (end < 0 || start >= src.Length) + { + return src; + } + // At least one bound is in-range, so we + // need to clip the out-of-bound argument. + if (start < 0) + { + start = 0; + } + + if (end >= src.Length) + { + end = src.Length-1; + } + + return src.Remove(start,end-start+1); + } + // Inverted substring + else + { + // In this case, out of bounds means that + // the existing string is part of the cut. + if (start < 0 || end >= src.Length) + { + return String.Empty; + } + + if (end > 0) + { + if (start < src.Length) + { + return src.Remove(start).Remove(0,end+1); + } + else + { + return src.Remove(0,end+1); + } + } + else + { + if (start < src.Length) + { + return src.Remove(start); + } + else + { + return src; + } + } + } + } + + /// + /// Insert string inserts the specified string identified by src + /// at the index indicated by index. Index may be negative, in + /// which case it is end-relative. The index may exceed either + /// string bound, with the result being a concatenation. + /// + public LSL_String llInsertString(string dest, int index, string src) + { + m_host.AddScriptLPS(1); + + // Normalize indices (if negative). + // After normlaization they may still be + // negative, but that is now relative to + // the start, rather than the end, of the + // sequence. + if (index < 0) + { + index = dest.Length+index; + + // Negative now means it is less than the lower + // bound of the string. + + if (index < 0) + { + return src+dest; + } + + } + + if (index >= dest.Length) + { + return dest+src; + } + + // The index is in bounds. + // In this case the index refers to the index that will + // be assigned to the first character of the inserted string. + // So unlike the other string operations, we do not add one + // to get the correct string length. + return dest.Substring(0,index)+src+dest.Substring(index); + + } + + public LSL_String llToUpper(string src) + { + m_host.AddScriptLPS(1); + return src.ToUpper(); + } + + public LSL_String llToLower(string src) + { + m_host.AddScriptLPS(1); + return src.ToLower(); + } + + public void llGiveMoney(string destination, int amount) + { + Util.FireAndForget(x => + { + m_host.AddScriptLPS(1); + + if (m_item.PermsGranter == UUID.Zero) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) + { + Error("llGiveMoney", "No permissions to give money"); + return; + } + + UUID toID = new UUID(); + + if (!UUID.TryParse(destination, out toID)) + { + Error("llGiveMoney", "Bad key in llGiveMoney"); + return; + } + + IMoneyModule money = World.RequestModuleInterface(); + + if (money == null) + { + NotImplemented("llGiveMoney"); + return; + } + + money.ObjectGiveMoney( + m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); + }, null, "LSL_Api.llGiveMoney"); + } + + public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) + { + m_host.AddScriptLPS(1); + Deprecated("llMakeExplosion", "Use llParticleSystem instead"); + ScriptSleep(m_sleepMsOnMakeExplosion); + } + + public void llMakeFountain(int particles, double scale, double vel, double lifetime, double arc, int bounce, string texture, LSL_Vector offset, double bounce_offset) + { + m_host.AddScriptLPS(1); + Deprecated("llMakeFountain", "Use llParticleSystem instead"); + ScriptSleep(m_sleepMsOnMakeFountain); + } + + public void llMakeSmoke(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) + { + m_host.AddScriptLPS(1); + Deprecated("llMakeSmoke", "Use llParticleSystem instead"); + ScriptSleep(m_sleepMsOnMakeSmoke); + } + + public void llMakeFire(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) + { + m_host.AddScriptLPS(1); + Deprecated("llMakeFire", "Use llParticleSystem instead"); + ScriptSleep(m_sleepMsOnMakeFire); + } + + public void llRezAtRoot(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param) + { + m_host.AddScriptLPS(1); + + Util.FireAndForget(x => + { + if (Double.IsNaN(rot.x) || Double.IsNaN(rot.y) || Double.IsNaN(rot.z) || Double.IsNaN(rot.s)) + return; + + float dist = (float)llVecDist(llGetPos(), pos); + + if (dist > m_ScriptDistanceFactor * 10.0f) + return; + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(inventory); + + if (item == null) + { + Error("llRezAtRoot", "Can't find object '" + inventory + "'"); + return; + } + + if (item.InvType != (int)InventoryType.Object) + { + Error("llRezAtRoot", "Can't create requested object; object is missing from database"); + return; + } + + // need the magnitude later + // float velmag = (float)Util.GetMagnitude(llvel); + + List new_groups = World.RezObject(m_host, item, pos, rot, vel, param); + + // If either of these are null, then there was an unknown error. + if (new_groups == null) + return; + + foreach (SceneObjectGroup group in new_groups) + { + // objects rezzed with this method are die_at_edge by default. + group.RootPart.SetDieAtEdge(true); + + group.ResumeScripts(); + + m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams( + "object_rez", new Object[] { + new LSL_String( + group.RootPart.UUID.ToString()) }, + new DetectParams[0])); + + float groupmass = group.GetMass(); + + PhysicsActor pa = group.RootPart.PhysActor; + + //Recoil. + if (pa != null && pa.IsPhysical && (Vector3)vel != Vector3.Zero) + { + Vector3 recoil = -vel * groupmass * m_recoilScaleFactor; + if (recoil != Vector3.Zero) + { + llApplyImpulse(recoil, 0); + } + } + // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) + } + }, null, "LSL_Api.llRezAtRoot"); + + //ScriptSleep((int)((groupmass * velmag) / 10)); + ScriptSleep(m_sleepMsOnRezAtRoot); + } + + public void llRezObject(string inventory, LSL_Vector pos, LSL_Vector vel, LSL_Rotation rot, int param) + { + llRezAtRoot(inventory, pos, vel, rot, param); + } + + public void llLookAt(LSL_Vector target, double strength, double damping) + { + m_host.AddScriptLPS(1); + // Determine where we are looking from + LSL_Vector from = llGetPos(); + + // normalized direction to target + LSL_Vector dir = llVecNorm(target - from); + // use vertical to help compute left axis + LSL_Vector up = new LSL_Vector(0.0, 0.0, 1.0); + // find normalized left axis parallel to horizon + LSL_Vector left = llVecNorm(LSL_Vector.Cross(up, dir)); + // make up orthogonal to left and dir + up = LSL_Vector.Cross(dir, left); + + // compute rotation based on orthogonal axes + LSL_Rotation rot = new LSL_Rotation(0.0, 0.707107, 0.0, 0.707107) * llAxes2Rot(dir, left, up); + + // Per discussion with Melanie, for non-physical objects llLookAt appears to simply + // set the rotation of the object, copy that behavior + PhysicsActor pa = m_host.PhysActor; + + if (m_host.ParentGroup.IsAttachment || strength == 0 || pa == null || !pa.IsPhysical) + { + llSetRot(rot); + } + else + { + m_host.StartLookAt(rot, (float)strength, (float)damping); + } + } + + public void llStopLookAt() + { + m_host.AddScriptLPS(1); + m_host.StopLookAt(); + } + + public void llSetTimerEvent(double sec) + { + if (sec != 0.0 && sec < m_MinTimerInterval) + sec = m_MinTimerInterval; + m_host.AddScriptLPS(1); + // Setting timer repeat + AsyncCommands.TimerPlugin.SetTimerEvent(m_host.LocalId, m_item.ItemID, sec); + } + + public virtual void llSleep(double sec) + { +// m_log.Info("llSleep snoozing " + sec + "s."); + m_host.AddScriptLPS(1); + + Sleep((int)(sec * 1000)); + } + + public LSL_Float llGetMass() + { + m_host.AddScriptLPS(1); + + if (m_host.ParentGroup.IsAttachment) + { + ScenePresence attachedAvatar = World.GetScenePresence(m_host.ParentGroup.AttachedAvatar); + + if (attachedAvatar != null) + { + return attachedAvatar.GetMass(); + } + else + { + return 0; + } + } + else + { + if (m_host.IsRoot) + { + return m_host.ParentGroup.GetMass(); + } + else + { + return m_host.GetMass(); + } + } + } + + public LSL_Float llGetMassMKS() + { + // this is what the wiki says it does! + // http://wiki.secondlife.com/wiki/LlGetMassMKS + return llGetMass() * 100.0; + } + + public void llCollisionFilter(string name, string id, int accept) + { + m_host.AddScriptLPS(1); + m_host.CollisionFilter.Clear(); + UUID objectID; + + if (!UUID.TryParse(id, out objectID)) + objectID = UUID.Zero; + + if (objectID == UUID.Zero && name == "") + return; + + m_host.CollisionFilter.Add(accept,objectID.ToString() + name); + } + + public void llTakeControls(int controls, int accept, int pass_on) + { + if (m_item.PermsGranter != UUID.Zero) + { + ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); + + if (presence != null) + { + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) + { + presence.RegisterControlEventsToScript(controls, accept, pass_on, m_host.LocalId, m_item.ItemID); + } + } + } + + m_host.AddScriptLPS(1); + } + + public void llReleaseControls() + { + m_host.AddScriptLPS(1); + + if (m_item.PermsGranter != UUID.Zero) + { + ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); + + if (presence != null) + { + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) + { + // Unregister controls from Presence + presence.UnRegisterControlEventsToScript(m_host.LocalId, m_item.ItemID); + // Remove Take Control permission. + m_item.PermsMask &= ~ScriptBaseClass.PERMISSION_TAKE_CONTROLS; + } + } + } + } + + public void llReleaseURL(string url) + { + m_host.AddScriptLPS(1); + if (m_UrlModule != null) + m_UrlModule.ReleaseURL(url); + } + + /// + /// Attach the object containing this script to the avatar that owns it. + /// + /// + /// The attachment point (e.g. ATTACH_CHEST) + /// + /// true if the attach suceeded, false if it did not + public bool AttachToAvatar(int attachmentPoint) + { + SceneObjectGroup grp = m_host.ParentGroup; + ScenePresence presence = World.GetScenePresence(m_host.OwnerID); + + IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule; + + if (attachmentsModule != null) + return attachmentsModule.AttachObject(presence, grp, (uint)attachmentPoint, false, true, true); + else + return false; + } + + /// + /// Detach the object containing this script from the avatar it is attached to. + /// + /// + /// Nothing happens if the object is not attached. + /// + public void DetachFromAvatar() + { + Util.FireAndForget(DetachWrapper, m_host, "LSL_Api.DetachFromAvatar"); + } + + private void DetachWrapper(object o) + { + if (World.AttachmentsModule != null) + { + SceneObjectPart host = (SceneObjectPart)o; + ScenePresence presence = World.GetScenePresence(host.OwnerID); + World.AttachmentsModule.DetachSingleAttachmentToInv(presence, host.ParentGroup); + } + } + + public void llAttachToAvatar(int attachmentPoint) + { + m_host.AddScriptLPS(1); + +// if (m_host.ParentGroup.RootPart.AttachmentPoint == 0) +// return; + + if (m_item.PermsGranter != m_host.OwnerID) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0) + AttachToAvatar(attachmentPoint); + } + + public void llDetachFromAvatar() + { + m_host.AddScriptLPS(1); + + if (m_host.ParentGroup.AttachmentPoint == 0) + return; + + if (m_item.PermsGranter != m_host.OwnerID) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0) + DetachFromAvatar(); + } + + public void llTakeCamera(string avatar) + { + m_host.AddScriptLPS(1); + Deprecated("llTakeCamera", "Use llSetCameraParams instead"); + } + + public void llReleaseCamera(string avatar) + { + m_host.AddScriptLPS(1); + Deprecated("llReleaseCamera", "Use llClearCameraParams instead"); + } + + public LSL_String llGetOwner() + { + m_host.AddScriptLPS(1); + + return m_host.OwnerID.ToString(); + } + + public void llInstantMessage(string user, string message) + { + m_host.AddScriptLPS(1); + + // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. + // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, + // but I don't think we have a list of scenes available from here. + // (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.) + + // user is a UUID + + // TODO: figure out values for client, fromSession, and imSessionID + // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); + + GridInstantMessage msg = new GridInstantMessage(); + msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid; + msg.toAgentID = new Guid(user); // toAgentID.Guid; + msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here +// m_log.Debug("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); +// m_log.Debug("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); + msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp; + //if (client != null) + //{ + msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName; + //} + //else + //{ + // msg.fromAgentName = "(hippos)";// Added for posterity. This means that we can't figure out who sent it + //} + // Cap the message length at 1024. + if (message != null && message.Length > 1024) + msg.message = message.Substring(0, 1024); + else + msg.message = message; + msg.dialog = (byte)19; // messgage from script ??? // dialog; + msg.fromGroup = false;// fromGroup; + msg.offline = (byte)0; //offline; + msg.ParentEstateID = 0; //ParentEstateID; + msg.Position = new Vector3(m_host.AbsolutePosition); + msg.RegionID = World.RegionInfo.RegionID.Guid;//RegionID.Guid; + + Vector3 pos = m_host.AbsolutePosition; + msg.binaryBucket + = Util.StringToBytes256( + "{0}/{1}/{2}/{3}", + World.RegionInfo.RegionName, + (int)Math.Floor(pos.X), + (int)Math.Floor(pos.Y), + (int)Math.Floor(pos.Z)); + + if (m_TransferModule != null) + { + m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); + } + + ScriptSleep(m_sleepMsOnInstantMessage); + } + + public void llEmail(string address, string subject, string message) + { + m_host.AddScriptLPS(1); + IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface(); + if (emailModule == null) + { + Error("llEmail", "Email module not configured"); + return; + } + + //Restrict email destination to the avatars registered email address? + //The restriction only applies if the destination address is not local. + if (m_restrictEmail == true && address.Contains(m_internalObjectHost) == false) + { + UserAccount account = + World.UserAccountService.GetUserAccount( + World.RegionInfo.ScopeID, + m_host.OwnerID); + + if (account == null) + { + Error("llEmail", "Can't find user account for '" + m_host.OwnerID.ToString() + "'"); + return; + } + + if (String.IsNullOrEmpty(account.Email)) + { + Error("llEmail", "User account has not registered an email address."); + return; + } + + address = account.Email; + } + + emailModule.SendEmail(m_host.UUID, address, subject, message); + ScriptSleep(m_sleepMsOnEmail); + } + + public void llGetNextEmail(string address, string subject) + { + m_host.AddScriptLPS(1); + IEmailModule emailModule = m_ScriptEngine.World.RequestModuleInterface(); + if (emailModule == null) + { + Error("llGetNextEmail", "Email module not configured"); + return; + } + Email email; + + email = emailModule.GetNextEmail(m_host.UUID, address, subject); + + if (email == null) + return; + + m_ScriptEngine.PostObjectEvent(m_host.LocalId, + new EventParams("email", + new Object[] { + new LSL_String(email.time), + new LSL_String(email.sender), + new LSL_String(email.subject), + new LSL_String(email.message), + new LSL_Integer(email.numLeft)}, + new DetectParams[0])); + + } + + public LSL_String llGetKey() + { + m_host.AddScriptLPS(1); + return m_host.UUID.ToString(); + } + + public LSL_Key llGenerateKey() + { + m_host.AddScriptLPS(1); + return UUID.Random().ToString(); + } + + public void llSetBuoyancy(double buoyancy) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); + } + } + + /// + /// Attempt to clamp the object on the Z axis at the given height over tau seconds. + /// + /// Height to hover. Height of zero disables hover. + /// False if height is calculated just from ground, otherwise uses ground or water depending on whichever is higher + /// Number of seconds over which to reach target + public void llSetHoverHeight(double height, int water, double tau) + { + m_host.AddScriptLPS(1); + + if (m_host.PhysActor != null) + { + PIDHoverType hoverType = PIDHoverType.Ground; + if (water != 0) + { + hoverType = PIDHoverType.GroundAndWater; + } + + m_host.SetHoverHeight((float)height, hoverType, (float)tau); + } + } + + public void llStopHover() + { + m_host.AddScriptLPS(1); + if (m_host.PhysActor != null) + { + m_host.SetHoverHeight(0f, PIDHoverType.Ground, 0f); + } + } + + public void llMinEventDelay(double delay) + { + m_host.AddScriptLPS(1); + try + { + m_ScriptEngine.SetMinEventDelay(m_item.ItemID, delay); + } + catch (NotImplementedException) + { + // Currently not implemented in DotNetEngine only XEngine + NotImplemented("llMinEventDelay", "In DotNetEngine"); + } + } + + public void llSoundPreload(string sound) + { + m_host.AddScriptLPS(1); + Deprecated("llSoundPreload", "Use llPreloadSound instead"); + } + + public void llRotLookAt(LSL_Rotation target, double strength, double damping) + { + m_host.AddScriptLPS(1); + + // Per discussion with Melanie, for non-physical objects llLookAt appears to simply + // set the rotation of the object, copy that behavior + PhysicsActor pa = m_host.PhysActor; + + if (strength == 0 || pa == null || !pa.IsPhysical) + { + llSetLocalRot(target); + } + else + { + m_host.RotLookAt(target, (float)strength, (float)damping); + } + } + + public LSL_Integer llStringLength(string str) + { + m_host.AddScriptLPS(1); + if (str.Length > 0) + { + return str.Length; + } + else + { + return 0; + } + } + + public void llStartAnimation(string anim) + { + m_host.AddScriptLPS(1); + + if (m_item.PermsGranter == UUID.Zero) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) + { + ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); + + if (presence != null) + { + // Do NOT try to parse UUID, animations cannot be triggered by ID + UUID animID = ScriptUtils.GetAssetIdFromItemName(m_host, anim, (int)AssetType.Animation); + if (animID == UUID.Zero) + presence.Animator.AddAnimation(anim, m_host.UUID); + else + presence.Animator.AddAnimation(animID, m_host.UUID); + } + } + } + + public void llStopAnimation(string anim) + { + m_host.AddScriptLPS(1); + + if (m_item.PermsGranter == UUID.Zero) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0) + { + ScenePresence presence = World.GetScenePresence(m_item.PermsGranter); + + if (presence != null) + { + UUID animID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, anim); + + if (animID == UUID.Zero) + presence.Animator.RemoveAnimation(anim); + else + presence.Animator.RemoveAnimation(animID, true); + } + } + } + + public void llPointAt(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + } + + public void llStopPointAt() + { + m_host.AddScriptLPS(1); + } + + public void llTargetOmega(LSL_Vector axis, double spinrate, double gain) + { + m_host.AddScriptLPS(1); + TargetOmega(m_host, axis, spinrate, gain); + } + + protected void TargetOmega(SceneObjectPart part, LSL_Vector axis, double spinrate, double gain) + { + PhysicsActor pa = part.PhysActor; + if ( ( pa == null || !pa.IsPhysical ) && gain == 0.0d ) + spinrate = 0.0d; + part.UpdateAngularVelocity(axis * spinrate); + } + + public LSL_Integer llGetStartParameter() + { + m_host.AddScriptLPS(1); + return m_ScriptEngine.GetStartParameter(m_item.ItemID); + } + + public void llRequestPermissions(string agent, int perm) + { + UUID agentID; + + if (!UUID.TryParse(agent, out agentID)) + return; + + if (agentID == UUID.Zero || perm == 0) // Releasing permissions + { + llReleaseControls(); + + m_item.PermsGranter = UUID.Zero; + m_item.PermsMask = 0; + + m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( + "run_time_permissions", new Object[] { + new LSL_Integer(0) }, + new DetectParams[0])); + + return; + } + + if (m_item.PermsGranter != agentID || (perm & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0) + llReleaseControls(); + + m_host.AddScriptLPS(1); + + int implicitPerms = 0; + + if (m_host.ParentGroup.IsAttachment && (UUID)agent == m_host.ParentGroup.AttachedAvatar) + { + // When attached, certain permissions are implicit if requested from owner + implicitPerms = ScriptBaseClass.PERMISSION_TAKE_CONTROLS | + ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | + ScriptBaseClass.PERMISSION_CONTROL_CAMERA | + ScriptBaseClass.PERMISSION_TRACK_CAMERA | + ScriptBaseClass.PERMISSION_ATTACH; + } + else + { + if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(sp => sp.UUID == agentID) != null) + { + // When agent is sitting, certain permissions are implicit if requested from sitting agent + implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | + ScriptBaseClass.PERMISSION_CONTROL_CAMERA | + ScriptBaseClass.PERMISSION_TRACK_CAMERA | + ScriptBaseClass.PERMISSION_TAKE_CONTROLS; + } + else + { + if (World.GetExtraSetting("auto_grant_attach_perms") == "true") + implicitPerms = ScriptBaseClass.PERMISSION_ATTACH; + } + } + + if ((perm & (~implicitPerms)) == 0) // Requested only implicit perms + { + lock (m_host.TaskInventory) + { + m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; + m_host.TaskInventory[m_item.ItemID].PermsMask = perm; + } + + m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( + "run_time_permissions", new Object[] { + new LSL_Integer(perm) }, + new DetectParams[0])); + + return; + } + + ScenePresence presence = World.GetScenePresence(agentID); + + if (presence != null) + { + // If permissions are being requested from an NPC and were not implicitly granted above then + // auto grant all requested permissions if the script is owned by the NPC or the NPCs owner + INPCModule npcModule = World.RequestModuleInterface(); + if (npcModule != null && npcModule.IsNPC(agentID, World)) + { + if (npcModule.CheckPermissions(agentID, m_host.OwnerID)) + { + lock (m_host.TaskInventory) + { + m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; + m_host.TaskInventory[m_item.ItemID].PermsMask = perm; + } + + m_ScriptEngine.PostScriptEvent( + m_item.ItemID, + new EventParams( + "run_time_permissions", new Object[] { new LSL_Integer(perm) }, new DetectParams[0])); + } + + // it is an NPC, exit even if the permissions werent granted above, they are not going to answer + // the question! + return; + } + + string ownerName = resolveName(m_host.ParentGroup.RootPart.OwnerID); + if (ownerName == String.Empty) + ownerName = "(hippos)"; + + if (!m_waitingForScriptAnswer) + { + lock (m_host.TaskInventory) + { + m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID; + m_host.TaskInventory[m_item.ItemID].PermsMask = 0; + } + + presence.ControllingClient.OnScriptAnswer += handleScriptAnswer; + m_waitingForScriptAnswer=true; + } + + presence.ControllingClient.SendScriptQuestion( + m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, m_item.ItemID, perm); + + return; + } + + // Requested agent is not in range, refuse perms + m_ScriptEngine.PostScriptEvent( + m_item.ItemID, + new EventParams("run_time_permissions", new Object[] { new LSL_Integer(0) }, new DetectParams[0])); + } + + void handleScriptAnswer(IClientAPI client, UUID taskID, UUID itemID, int answer) + { + if (taskID != m_host.UUID) + return; + + client.OnScriptAnswer -= handleScriptAnswer; + m_waitingForScriptAnswer = false; + + if ((answer & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0) + llReleaseControls(); + + lock (m_host.TaskInventory) + { + m_host.TaskInventory[m_item.ItemID].PermsMask = answer; + } + + m_ScriptEngine.PostScriptEvent( + m_item.ItemID, + new EventParams("run_time_permissions", new Object[] { new LSL_Integer(answer) }, new DetectParams[0])); + } + + public LSL_String llGetPermissionsKey() + { + m_host.AddScriptLPS(1); + + return m_item.PermsGranter.ToString(); + } + + public LSL_Integer llGetPermissions() + { + m_host.AddScriptLPS(1); + + int perms = m_item.PermsMask; + + if (m_automaticLinkPermission) + perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS; + + return perms; + } + + public LSL_Integer llGetLinkNumber() + { + m_host.AddScriptLPS(1); + + if (m_host.ParentGroup.PrimCount > 1) + { + return m_host.LinkNum; + } + else + { + return 0; + } + } + + public void llSetLinkColor(int linknumber, LSL_Vector color, int face) + { + List parts = GetLinkParts(linknumber); + + foreach (SceneObjectPart part in parts) + part.SetFaceColorAlpha(face, color, null); + } + + public void llCreateLink(string target, int parent) + { + m_host.AddScriptLPS(1); + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 + && !m_automaticLinkPermission) + { + Error("llCreateLink", "PERMISSION_CHANGE_LINKS permission not set"); + return; + } + + CreateLink(target, parent); + } + + public void CreateLink(string target, int parent) + { + UUID targetID; + + if (!UUID.TryParse(target, out targetID)) + return; + + SceneObjectPart targetPart = World.GetSceneObjectPart((UUID)targetID); + + if (targetPart.ParentGroup.AttachmentPoint != 0) + return; // Fail silently if attached + + if (targetPart.ParentGroup.RootPart.OwnerID != m_host.ParentGroup.RootPart.OwnerID) + return; + + SceneObjectGroup parentPrim = null, childPrim = null; + + if (targetPart != null) + { + if (parent != 0) + { + parentPrim = m_host.ParentGroup; + childPrim = targetPart.ParentGroup; + } + else + { + parentPrim = targetPart.ParentGroup; + childPrim = m_host.ParentGroup; + } + + // Required for linking + childPrim.RootPart.ClearUpdateSchedule(); + parentPrim.LinkToGroup(childPrim, true); + } + + parentPrim.TriggerScriptChangedEvent(Changed.LINK); + parentPrim.RootPart.CreateSelected = true; + parentPrim.HasGroupChanged = true; + parentPrim.ScheduleGroupForFullUpdate(); + + IClientAPI client = null; + ScenePresence sp = World.GetScenePresence(m_host.OwnerID); + if (sp != null) + client = sp.ControllingClient; + + if (client != null) + parentPrim.SendPropertiesToClient(client); + + ScriptSleep(m_sleepMsOnCreateLink); + } + + public void llBreakLink(int linknum) + { + m_host.AddScriptLPS(1); + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 + && !m_automaticLinkPermission) + { + Error("llBreakLink", "PERMISSION_CHANGE_LINKS permission not set"); + return; + } + + BreakLink(linknum); + } + + public void BreakLink(int linknum) + { + if (linknum < ScriptBaseClass.LINK_THIS) + return; + + SceneObjectGroup parentPrim = m_host.ParentGroup; + + if (parentPrim.AttachmentPoint != 0) + return; // Fail silently if attached + SceneObjectPart childPrim = null; + + switch (linknum) + { + case ScriptBaseClass.LINK_ROOT: + break; + case ScriptBaseClass.LINK_SET: + case ScriptBaseClass.LINK_ALL_OTHERS: + case ScriptBaseClass.LINK_ALL_CHILDREN: + case ScriptBaseClass.LINK_THIS: + foreach (SceneObjectPart part in parentPrim.Parts) + { + if (part.UUID != m_host.UUID) + { + childPrim = part; + break; + } + } + break; + default: + childPrim = parentPrim.GetLinkNumPart(linknum); + if (childPrim.UUID == m_host.UUID) + childPrim = null; + break; + } + + if (linknum == ScriptBaseClass.LINK_ROOT) + { + // Restructuring Multiple Prims. + List parts = new List(parentPrim.Parts); + parts.Remove(parentPrim.RootPart); + foreach (SceneObjectPart part in parts) + { + parentPrim.DelinkFromGroup(part.LocalId, true); + } + parentPrim.HasGroupChanged = true; + parentPrim.ScheduleGroupForFullUpdate(); + parentPrim.TriggerScriptChangedEvent(Changed.LINK); + + if (parts.Count > 0) + { + SceneObjectPart newRoot = parts[0]; + parts.Remove(newRoot); + foreach (SceneObjectPart part in parts) + { + // Required for linking + part.ClearUpdateSchedule(); + newRoot.ParentGroup.LinkToGroup(part.ParentGroup); + } + newRoot.ParentGroup.HasGroupChanged = true; + newRoot.ParentGroup.ScheduleGroupForFullUpdate(); + } + } + else + { + if (childPrim == null) + return; + + parentPrim.DelinkFromGroup(childPrim.LocalId, true); + parentPrim.HasGroupChanged = true; + parentPrim.ScheduleGroupForFullUpdate(); + parentPrim.TriggerScriptChangedEvent(Changed.LINK); + } + } + + public void llBreakAllLinks() + { + m_host.AddScriptLPS(1); + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 + && !m_automaticLinkPermission) + { + Error("llBreakAllLinks", "PERMISSION_CHANGE_LINKS permission not set"); + return; + } + + BreakAllLinks(); + } + + public void BreakAllLinks() + { + SceneObjectGroup parentPrim = m_host.ParentGroup; + if (parentPrim.AttachmentPoint != 0) + return; // Fail silently if attached + + List parts = new List(parentPrim.Parts); + parts.Remove(parentPrim.RootPart); + + foreach (SceneObjectPart part in parts) + { + parentPrim.DelinkFromGroup(part.LocalId, true); + parentPrim.TriggerScriptChangedEvent(Changed.LINK); + } + parentPrim.HasGroupChanged = true; + parentPrim.ScheduleGroupForFullUpdate(); + } + + public LSL_String llGetLinkKey(int linknum) + { + m_host.AddScriptLPS(1); + + ISceneEntity entity = GetLinkEntity(m_host, linknum); + + if (entity != null) + return entity.UUID.ToString(); + else + return ScriptBaseClass.NULL_KEY; + } + + /// + /// Returns the name of the child prim or seated avatar matching the + /// specified link number. + /// + /// + /// The number of a link in the linkset or a link-related constant. + /// + /// + /// The name determined to match the specified link number. + /// + /// + /// The rules governing the returned name are not simple. The only + /// time a blank name is returned is if the target prim has a blank + /// name. If no prim with the given link number can be found then + /// usually NULL_KEY is returned but there are exceptions. + /// + /// In a single unlinked prim, A call with 0 returns the name, all + /// other values for link number return NULL_KEY + /// + /// In link sets it is more complicated. + /// + /// If the script is in the root prim:- + /// A zero link number returns NULL_KEY. + /// Positive link numbers return the name of the prim, or NULL_KEY + /// if a prim does not exist at that position. + /// Negative link numbers return the name of the first child prim. + /// + /// If the script is in a child prim:- + /// Link numbers 0 or 1 return the name of the root prim. + /// Positive link numbers return the name of the prim or NULL_KEY + /// if a prim does not exist at that position. + /// Negative numbers return the name of the root prim. + /// + /// References + /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetLinkName + /// Mentions NULL_KEY being returned + /// http://wiki.secondlife.com/wiki/LlGetLinkName + /// Mentions using the LINK_* constants, some of which are negative + /// + public LSL_String llGetLinkName(int linknum) + { + m_host.AddScriptLPS(1); + + ISceneEntity entity = GetLinkEntity(m_host, linknum); + + if (entity != null) + return entity.Name; + else + return ScriptBaseClass.NULL_KEY; + } + + public LSL_Integer llGetInventoryNumber(int type) + { + m_host.AddScriptLPS(1); + int count = 0; + + lock (m_host.TaskInventory) + { + foreach (KeyValuePair inv in m_host.TaskInventory) + { + if (inv.Value.Type == type || type == -1) + { + count = count + 1; + } + } + } + + return count; + } + + public LSL_String llGetInventoryName(int type, int number) + { + m_host.AddScriptLPS(1); + ArrayList keys = new ArrayList(); + + lock (m_host.TaskInventory) + { + foreach (KeyValuePair inv in m_host.TaskInventory) + { + if (inv.Value.Type == type || type == -1) + { + keys.Add(inv.Value.Name); + } + } + } + + if (keys.Count == 0) + { + return String.Empty; + } + keys.Sort(); + if (keys.Count > number) + { + return (string)keys[number]; + } + return String.Empty; + } + + public LSL_Float llGetEnergy() + { + m_host.AddScriptLPS(1); + // TODO: figure out real energy value + return 1.0f; + } + + public void llGiveInventory(string destination, string inventory) + { + m_host.AddScriptLPS(1); + + UUID destId = UUID.Zero; + + if (!UUID.TryParse(destination, out destId)) + { + Error("llGiveInventory", "Can't parse destination key '" + destination + "'"); + return; + } + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(inventory); + + if (item == null) + { + Error("llGiveInventory", "Can't find inventory object '" + inventory + "'"); + return; + } + + UUID objId = item.ItemID; + + // check if destination is an object + if (World.GetSceneObjectPart(destId) != null) + { + // destination is an object + World.MoveTaskInventoryItem(destId, m_host, objId); + } + else + { + ScenePresence presence = World.GetScenePresence(destId); + + if (presence == null) + { + UserAccount account = + World.UserAccountService.GetUserAccount( + World.RegionInfo.ScopeID, + destId); + + if (account == null) + { + GridUserInfo info = World.GridUserService.GetGridUserInfo(destId.ToString()); + if(info == null || info.Online == false) + { + Error("llGiveInventory", "Can't find destination '" + destId.ToString() + "'"); + return; + } + } + } + // destination is an avatar + string message; + InventoryItemBase agentItem = World.MoveTaskInventoryItem(destId, UUID.Zero, m_host, objId, out message); + + if (agentItem == null) + { + llSay(0, message); + return; + } + + if (m_TransferModule != null) + { + byte[] bucket = new byte[1]; + bucket[0] = (byte)item.Type; + + GridInstantMessage msg = new GridInstantMessage(World, + m_host.OwnerID, m_host.Name, destId, + (byte)InstantMessageDialog.TaskInventoryOffered, + false, item.Name+". "+m_host.Name+" is located at "+ + World.RegionInfo.RegionName+" "+ + m_host.AbsolutePosition.ToString(), + agentItem.ID, true, m_host.AbsolutePosition, + bucket, true); + + m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); + } + + ScriptSleep(m_sleepMsOnGiveInventory); + } + } + + public void llRemoveInventory(string name) + { + m_host.AddScriptLPS(1); + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item == null) + return; + + if (item.ItemID == m_item.ItemID) + throw new ScriptDeleteException(); + else + m_host.Inventory.RemoveInventoryItem(item.ItemID); + } + + public void llSetText(string text, LSL_Vector color, double alpha) + { + m_host.AddScriptLPS(1); + Vector3 av3 = Util.Clip(color, 0.0f, 1.0f); + if (text.Length > 254) + text = text.Remove(254); + + byte[] data; + do + { + data = Util.UTF8.GetBytes(text); + if (data.Length > 254) + text = text.Substring(0, text.Length - 1); + } while (data.Length > 254); + + m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); + //m_host.ParentGroup.HasGroupChanged = true; + //m_host.ParentGroup.ScheduleGroupForFullUpdate(); + } + + public LSL_Float llWater(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + return World.RegionInfo.RegionSettings.WaterHeight; + } + + public void llPassTouches(int pass) + { + m_host.AddScriptLPS(1); + if (pass != 0) + m_host.PassTouches = true; + else + m_host.PassTouches = false; + } + + public LSL_String llRequestAgentData(string id, int data) + { + m_host.AddScriptLPS(1); + + UUID uuid = (UUID)id; + PresenceInfo pinfo = null; + UserAccount account; + + UserInfoCacheEntry ce; + + lock (m_userInfoCache) + { + if (!m_userInfoCache.TryGetValue(uuid, out ce)) + { + account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); + if (account == null) + { + m_userInfoCache[uuid] = null; // Cache negative + return UUID.Zero.ToString(); + } + + PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); + if (pinfos != null && pinfos.Length > 0) + { + foreach (PresenceInfo p in pinfos) + { + if (p.RegionID != UUID.Zero) + { + pinfo = p; + } + } + } + + ce = new UserInfoCacheEntry(); + ce.time = Util.EnvironmentTickCount(); + ce.account = account; + ce.pinfo = pinfo; + + m_userInfoCache[uuid] = ce; + } + else + { + if (ce == null) + return UUID.Zero.ToString(); + + account = ce.account; + + if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) + >= LlRequestAgentDataCacheTimeoutMs) + { + PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); + if (pinfos != null && pinfos.Length > 0) + { + foreach (PresenceInfo p in pinfos) + { + if (p.RegionID != UUID.Zero) + { + pinfo = p; + } + } + } + else + { + pinfo = null; + } + + ce.time = Util.EnvironmentTickCount(); + ce.pinfo = pinfo; + } + else + { + pinfo = ce.pinfo; + } + } + } + + string reply = String.Empty; + + switch (data) + { + case ScriptBaseClass.DATA_ONLINE: + if (pinfo != null && pinfo.RegionID != UUID.Zero) + reply = "1"; + else + reply = "0"; + break; + case ScriptBaseClass.DATA_NAME: // (First Last) + reply = account.FirstName + " " + account.LastName; + break; + case ScriptBaseClass.DATA_BORN: // (YYYY-MM-DD) + DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); + born = born.AddSeconds(account.Created); + reply = born.ToString("yyyy-MM-dd"); + break; + case ScriptBaseClass.DATA_RATING: // (0,0,0,0,0,0) + reply = "0,0,0,0,0,0"; + break; + case 7: // DATA_USERLEVEL (integer). This is not available in LL and so has no constant. + reply = account.UserLevel.ToString(); + break; + case ScriptBaseClass.DATA_PAYINFO: // (0|1|2|3) + reply = "0"; + break; + default: + return UUID.Zero.ToString(); // Raise no event + } + + UUID rq = UUID.Random(); + + UUID tid = AsyncCommands. + DataserverPlugin.RegisterRequest(m_host.LocalId, + m_item.ItemID, rq.ToString()); + + AsyncCommands. + DataserverPlugin.DataserverReply(rq.ToString(), reply); + + ScriptSleep(m_sleepMsOnRequestAgentData); + return tid.ToString(); + } + + public LSL_String llRequestInventoryData(string name) + { + m_host.AddScriptLPS(1); + + foreach (TaskInventoryItem item in m_host.Inventory.GetInventoryItems()) + { + if (item.Type == 3 && item.Name == name) + { + UUID tid = AsyncCommands. + DataserverPlugin.RegisterRequest(m_host.LocalId, + m_item.ItemID, item.AssetID.ToString()); + + Vector3 region = new Vector3(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); + + World.AssetService.Get(item.AssetID.ToString(), this, + delegate(string i, object sender, AssetBase a) + { + AssetLandmark lm = new AssetLandmark(a); + + float rx = (uint)(lm.RegionHandle >> 32); + float ry = (uint)lm.RegionHandle; + region = lm.Position + new Vector3(rx, ry, 0) - region; + + string reply = region.ToString(); + AsyncCommands. + DataserverPlugin.DataserverReply(i.ToString(), + reply); + }); + + ScriptSleep(m_sleepMsOnRequestInventoryData); + return tid.ToString(); + } + } + + ScriptSleep(m_sleepMsOnRequestInventoryData); + return String.Empty; + } + + public void llSetDamage(double damage) + { + m_host.AddScriptLPS(1); + m_host.ParentGroup.Damage = (float)damage; + } + + public void llTeleportAgentHome(string agent) + { + m_host.AddScriptLPS(1); + UUID agentId = new UUID(); + if (UUID.TryParse(agent, out agentId)) + { + ScenePresence presence = World.GetScenePresence(agentId); + if (presence != null) + { + // agent must be over the owners land + if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) + { + World.TeleportClientHome(agentId, presence.ControllingClient); + } + } + } + + ScriptSleep(m_sleepMsOnSetDamage); + } + + public void llTeleportAgent(string agent, string destination, LSL_Vector targetPos, LSL_Vector targetLookAt) + { + m_host.AddScriptLPS(1); + UUID agentId = new UUID(); + + if (UUID.TryParse(agent, out agentId)) + { + ScenePresence presence = World.GetScenePresence(agentId); + if (presence != null && presence.PresenceType != PresenceType.Npc) + { + // agent must not be a god + if (presence.GodLevel >= 200) return; + + if (destination == String.Empty) + destination = World.RegionInfo.RegionName; + + // agent must be over the owners land + if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) + { + DoLLTeleport(presence, destination, targetPos, targetLookAt); + } + else // or must be wearing the prim + { + if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID) + { + DoLLTeleport(presence, destination, targetPos, targetLookAt); + } + } + } + } + } + + public void llTeleportAgentGlobalCoords(string agent, LSL_Vector global_coords, LSL_Vector targetPos, LSL_Vector targetLookAt) + { + m_host.AddScriptLPS(1); + UUID agentId = new UUID(); + + ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y); + + if (UUID.TryParse(agent, out agentId)) + { + ScenePresence presence = World.GetScenePresence(agentId); + if (presence != null && presence.PresenceType != PresenceType.Npc) + { + // agent must not be a god + if (presence.GodLevel >= 200) return; + + // agent must be over the owners land + if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) + { + World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); + } + else // or must be wearing the prim + { + if (m_host.ParentGroup.AttachmentPoint != 0 && m_host.OwnerID == presence.UUID) + { + World.RequestTeleportLocation(presence.ControllingClient, regionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); + } + } + } + } + } + + private void DoLLTeleport(ScenePresence sp, string destination, Vector3 targetPos, Vector3 targetLookAt) + { + UUID assetID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, destination); + + // The destinaion is not an asset ID and also doesn't name a landmark. + // Use it as a sim name + if (assetID == UUID.Zero) + { + World.RequestTeleportLocation(sp.ControllingClient, destination, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); + return; + } + + AssetBase lma = World.AssetService.Get(assetID.ToString()); + if (lma == null) + return; + + if (lma.Type != (sbyte)AssetType.Landmark) + return; + + AssetLandmark lm = new AssetLandmark(lma); + + World.RequestTeleportLocation(sp.ControllingClient, lm.RegionHandle, targetPos, targetLookAt, (uint)TeleportFlags.ViaLocation); + } + + public void llTextBox(string agent, string message, int chatChannel) + { + IDialogModule dm = World.RequestModuleInterface(); + + if (dm == null) + return; + + m_host.AddScriptLPS(1); + UUID av = new UUID(); + if (!UUID.TryParse(agent,out av)) + { + Error("llTextBox", "First parameter must be a key"); + return; + } + + if (message == string.Empty) + { + Error("llTextBox", "Empty message"); + } + else if (message.Length > 512) + { + Error("llTextBox", "Message more than 512 characters"); + } + else + { + dm.SendTextBoxToUser(av, message, chatChannel, m_host.Name, m_host.UUID, m_host.OwnerID); + ScriptSleep(m_sleepMsOnTextBox); + } + } + + public void llModifyLand(int action, int brush) + { + m_host.AddScriptLPS(1); + ITerrainModule tm = m_ScriptEngine.World.RequestModuleInterface(); + if (tm != null) + { + tm.ModifyTerrain(m_host.OwnerID, m_host.AbsolutePosition, (byte) brush, (byte) action, m_host.OwnerID); + } + } + + public void llCollisionSound(string impact_sound, double impact_volume) + { + m_host.AddScriptLPS(1); + + // TODO: Parameter check logic required. + m_host.CollisionSound = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, impact_sound, AssetType.Sound); + m_host.CollisionSoundVolume = (float)impact_volume; + } + + public LSL_String llGetAnimation(string id) + { + // This should only return a value if the avatar is in the same region + m_host.AddScriptLPS(1); + UUID avatar = (UUID)id; + ScenePresence presence = World.GetScenePresence(avatar); + if (presence == null) + return ""; + + if (m_host.RegionHandle == presence.RegionHandle) + { + Dictionary animationstateNames = DefaultAvatarAnimations.AnimStateNames; + + if (presence != null) + { + AnimationSet currentAnims = presence.Animator.Animations; + string currentAnimationState = String.Empty; + if (animationstateNames.TryGetValue(currentAnims.ImplicitDefaultAnimation.AnimID, out currentAnimationState)) + return currentAnimationState; + } + } + + return String.Empty; + } + + public void llMessageLinked(int linknumber, int num, string msg, string id) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + UUID partItemID; + foreach (SceneObjectPart part in parts) + { + foreach (TaskInventoryItem item in part.Inventory.GetInventoryItems()) + { + if (item.Type == ScriptBaseClass.INVENTORY_SCRIPT) + { + partItemID = item.ItemID; + int linkNumber = m_host.LinkNum; + if (m_host.ParentGroup.PrimCount == 1) + linkNumber = 0; + + object[] resobj = new object[] + { + new LSL_Integer(linkNumber), new LSL_Integer(num), new LSL_String(msg), new LSL_String(id) + }; + + m_ScriptEngine.PostScriptEvent(partItemID, + new EventParams("link_message", + resobj, new DetectParams[0])); + } + } + } + } + + public void llPushObject(string target, LSL_Vector impulse, LSL_Vector ang_impulse, int local) + { + m_host.AddScriptLPS(1); + bool pushrestricted = World.RegionInfo.RegionSettings.RestrictPushing; + bool pushAllowed = false; + + bool pusheeIsAvatar = false; + UUID targetID = UUID.Zero; + + if (!UUID.TryParse(target,out targetID)) + return; + + ScenePresence pusheeav = null; + Vector3 PusheePos = Vector3.Zero; + SceneObjectPart pusheeob = null; + + ScenePresence avatar = World.GetScenePresence(targetID); + if (avatar != null) + { + pusheeIsAvatar = true; + + // Pushee doesn't have a physics actor + if (avatar.PhysicsActor == null) + return; + + // Pushee is in GodMode this pushing object isn't owned by them + if (avatar.GodLevel > 0 && m_host.OwnerID != targetID) + return; + + pusheeav = avatar; + + // Find pushee position + // Pushee Linked? + SceneObjectPart sitPart = pusheeav.ParentPart; + if (sitPart != null) + PusheePos = sitPart.AbsolutePosition; + else + PusheePos = pusheeav.AbsolutePosition; + } + + if (!pusheeIsAvatar) + { + // not an avatar so push is not affected by parcel flags + pusheeob = World.GetSceneObjectPart((UUID)target); + + // We can't find object + if (pusheeob == null) + return; + + // Object not pushable. Not an attachment and has no physics component + if (!pusheeob.ParentGroup.IsAttachment && pusheeob.PhysActor == null) + return; + + PusheePos = pusheeob.AbsolutePosition; + pushAllowed = true; + } + else + { + if (pushrestricted) + { + ILandObject targetlandObj = World.LandChannel.GetLandObject(PusheePos); + + // We didn't find the parcel but region is push restricted so assume it is NOT ok + if (targetlandObj == null) + return; + + // Need provisions for Group Owned here + if (m_host.OwnerID == targetlandObj.LandData.OwnerID || + targetlandObj.LandData.IsGroupOwned || m_host.OwnerID == targetID) + { + pushAllowed = true; + } + } + else + { + ILandObject targetlandObj = World.LandChannel.GetLandObject(PusheePos); + if (targetlandObj == null) + { + // We didn't find the parcel but region isn't push restricted so assume it's ok + pushAllowed = true; + } + else + { + // Parcel push restriction + if ((targetlandObj.LandData.Flags & (uint)ParcelFlags.RestrictPushObject) == (uint)ParcelFlags.RestrictPushObject) + { + // Need provisions for Group Owned here + if (m_host.OwnerID == targetlandObj.LandData.OwnerID || + targetlandObj.LandData.IsGroupOwned || + m_host.OwnerID == targetID) + { + pushAllowed = true; + } + + //ParcelFlags.RestrictPushObject + //pushAllowed = true; + } + else + { + // Parcel isn't push restricted + pushAllowed = true; + } + } + } + } + + if (pushAllowed) + { + float distance = (PusheePos - m_host.AbsolutePosition).Length(); + float distance_term = distance * distance * distance; // Script Energy + float pusher_mass = m_host.GetMass(); + + float PUSH_ATTENUATION_DISTANCE = 17f; + float PUSH_ATTENUATION_SCALE = 5f; + float distance_attenuation = 1f; + if (distance > PUSH_ATTENUATION_DISTANCE) + { + float normalized_units = 1f + (distance - PUSH_ATTENUATION_DISTANCE) / PUSH_ATTENUATION_SCALE; + distance_attenuation = 1f / normalized_units; + } + + Vector3 applied_linear_impulse = impulse; + { + float impulse_length = applied_linear_impulse.Length(); + + float desired_energy = impulse_length * pusher_mass; + if (desired_energy > 0f) + desired_energy += distance_term; + + float scaling_factor = 1f; + scaling_factor *= distance_attenuation; + applied_linear_impulse *= scaling_factor; + + } + + if (pusheeIsAvatar) + { + if (pusheeav != null) + { + PhysicsActor pa = pusheeav.PhysicsActor; + + if (pa != null) + { + if (local != 0) + { + applied_linear_impulse *= m_host.GetWorldRotation(); + } + + pa.AddForce(applied_linear_impulse, true); + } + } + } + else + { + if (pusheeob != null) + { + if (pusheeob.PhysActor != null) + { + pusheeob.ApplyImpulse(applied_linear_impulse, local != 0); + } + } + } + } + } + + public void llPassCollisions(int pass) + { + m_host.AddScriptLPS(1); + if (pass == 0) + { + m_host.PassCollisions = false; + } + else + { + m_host.PassCollisions = true; + } + } + + public LSL_String llGetScriptName() + { + m_host.AddScriptLPS(1); + + return m_item.Name != null ? m_item.Name : String.Empty; + } + + public LSL_Integer llGetLinkNumberOfSides(int link) + { + m_host.AddScriptLPS(1); + + SceneObjectPart linkedPart; + + if (link == ScriptBaseClass.LINK_ROOT) + linkedPart = m_host.ParentGroup.RootPart; + else if (link == ScriptBaseClass.LINK_THIS) + linkedPart = m_host; + else + linkedPart = m_host.ParentGroup.GetLinkNumPart(link); + + return GetNumberOfSides(linkedPart); + } + + public LSL_Integer llGetNumberOfSides() + { + m_host.AddScriptLPS(1); + + return GetNumberOfSides(m_host); + } + + protected int GetNumberOfSides(SceneObjectPart part) + { + int sides = part.GetNumberOfSides(); + + if (part.GetPrimType() == PrimType.SPHERE && part.Shape.ProfileHollow > 0) + { + // Make up for a bug where LSL shows 4 sides rather than 2 + sides += 2; + } + + return sides; + } + + + /* The new / changed functions were tested with the following LSL script: + + default + { + state_entry() + { + rotation rot = llEuler2Rot(<0,70,0> * DEG_TO_RAD); + + llOwnerSay("to get here, we rotate over: "+ (string) llRot2Axis(rot)); + llOwnerSay("and we rotate for: "+ (llRot2Angle(rot) * RAD_TO_DEG)); + + // convert back and forth between quaternion <-> vector and angle + + rotation newrot = llAxisAngle2Rot(llRot2Axis(rot),llRot2Angle(rot)); + + llOwnerSay("Old rotation was: "+(string) rot); + llOwnerSay("re-converted rotation is: "+(string) newrot); + + llSetRot(rot); // to check the parameters in the prim + } + } + */ + + // Xantor 29/apr/2008 + // Returns rotation described by rotating angle radians about axis. + // q = cos(a/2) + i (x * sin(a/2)) + j (y * sin(a/2)) + k (z * sin(a/2)) + public LSL_Rotation llAxisAngle2Rot(LSL_Vector axis, double angle) + { + m_host.AddScriptLPS(1); + + double x, y, z, s, t; + + s = Math.Cos(angle * 0.5); + t = Math.Sin(angle * 0.5); // temp value to avoid 2 more sin() calcs + axis = LSL_Vector.Norm(axis); + x = axis.x * t; + y = axis.y * t; + z = axis.z * t; + + return new LSL_Rotation(x,y,z,s); + } + + /// + /// Returns the axis of rotation for a quaternion + /// + /// + /// + public LSL_Vector llRot2Axis(LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + + if (Math.Abs(rot.s) > 1) // normalization needed + rot.Normalize(); + + double s = Math.Sqrt(1 - rot.s * rot.s); + if (s < 0.001) + { + return new LSL_Vector(1, 0, 0); + } + else + { + double invS = 1.0 / s; + if (rot.s < 0) invS = -invS; + return new LSL_Vector(rot.x * invS, rot.y * invS, rot.z * invS); + } + } + + + // Returns the angle of a quaternion (see llRot2Axis for the axis) + public LSL_Float llRot2Angle(LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + + if (Math.Abs(rot.s) > 1) // normalization needed + rot.Normalize(); + + double angle = 2 * Math.Acos(rot.s); + if (angle > Math.PI) + angle = 2 * Math.PI - angle; + + return angle; + } + + public LSL_Float llAcos(double val) + { + m_host.AddScriptLPS(1); + return (double)Math.Acos(val); + } + + public LSL_Float llAsin(double val) + { + m_host.AddScriptLPS(1); + return (double)Math.Asin(val); + } + + // jcochran 5/jan/2012 + public LSL_Float llAngleBetween(LSL_Rotation a, LSL_Rotation b) + { + m_host.AddScriptLPS(1); + + double aa = (a.x * a.x + a.y * a.y + a.z * a.z + a.s * a.s); + double bb = (b.x * b.x + b.y * b.y + b.z * b.z + b.s * b.s); + double aa_bb = aa * bb; + if (aa_bb == 0) return 0.0; + double ab = (a.x * b.x + a.y * b.y + a.z * b.z + a.s * b.s); + double quotient = (ab * ab) / aa_bb; + if (quotient >= 1.0) return 0.0; + return Math.Acos(2 * quotient - 1); + } + + public LSL_String llGetInventoryKey(string name) + { + m_host.AddScriptLPS(1); + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item == null) + return UUID.Zero.ToString(); + + if ((item.CurrentPermissions + & (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) + == (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify)) + { + return item.AssetID.ToString(); + } + + return UUID.Zero.ToString(); + } + + public void llAllowInventoryDrop(int add) + { + m_host.AddScriptLPS(1); + + if (add != 0) + m_host.ParentGroup.RootPart.AllowedDrop = true; + else + m_host.ParentGroup.RootPart.AllowedDrop = false; + + // Update the object flags + m_host.ParentGroup.RootPart.aggregateScriptEvents(); + } + + public LSL_Vector llGetSunDirection() + { + m_host.AddScriptLPS(1); + + LSL_Vector SunDoubleVector3; + Vector3 SunFloatVector3; + + // sunPosition estate setting is set in OpenSim.Region.CoreModules.SunModule + // have to convert from Vector3 (float) to LSL_Vector (double) + SunFloatVector3 = World.RegionInfo.RegionSettings.SunVector; + SunDoubleVector3.x = (double)SunFloatVector3.X; + SunDoubleVector3.y = (double)SunFloatVector3.Y; + SunDoubleVector3.z = (double)SunFloatVector3.Z; + + return SunDoubleVector3; + } + + public LSL_Vector llGetTextureOffset(int face) + { + m_host.AddScriptLPS(1); + return GetTextureOffset(m_host, face); + } + + protected LSL_Vector GetTextureOffset(SceneObjectPart part, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + LSL_Vector offset = new LSL_Vector(); + if (face == ScriptBaseClass.ALL_SIDES) + { + face = 0; + } + if (face >= 0 && face < GetNumberOfSides(part)) + { + offset.x = tex.GetFace((uint)face).OffsetU; + offset.y = tex.GetFace((uint)face).OffsetV; + offset.z = 0.0; + return offset; + } + else + { + return offset; + } + } + + public LSL_Vector llGetTextureScale(int side) + { + m_host.AddScriptLPS(1); + Primitive.TextureEntry tex = m_host.Shape.Textures; + LSL_Vector scale; + if (side == -1) + { + side = 0; + } + scale.x = tex.GetFace((uint)side).RepeatU; + scale.y = tex.GetFace((uint)side).RepeatV; + scale.z = 0.0; + return scale; + } + + public LSL_Float llGetTextureRot(int face) + { + m_host.AddScriptLPS(1); + return GetTextureRot(m_host, face); + } + + protected LSL_Float GetTextureRot(SceneObjectPart part, int face) + { + Primitive.TextureEntry tex = part.Shape.Textures; + if (face == -1) + { + face = 0; + } + if (face >= 0 && face < GetNumberOfSides(part)) + { + return tex.GetFace((uint)face).Rotation; + } + else + { + return 0.0; + } + } + + public LSL_Integer llSubStringIndex(string source, string pattern) + { + m_host.AddScriptLPS(1); + return source.IndexOf(pattern); + } + + public LSL_String llGetOwnerKey(string id) + { + m_host.AddScriptLPS(1); + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) + { + try + { + SceneObjectPart obj = World.GetSceneObjectPart(key); + if (obj == null) + return id; // the key is for an agent so just return the key + else + return obj.OwnerID.ToString(); + } + catch (KeyNotFoundException) + { + return id; // The Object/Agent not in the region so just return the key + } + } + else + { + return UUID.Zero.ToString(); + } + } + + public LSL_Vector llGetCenterOfMass() + { + m_host.AddScriptLPS(1); + + return new LSL_Vector(m_host.GetCenterOfMass()); + } + + public LSL_List llListSort(LSL_List src, int stride, int ascending) + { + m_host.AddScriptLPS(1); + + if (stride <= 0) + { + stride = 1; + } + return src.Sort(stride, ascending); + } + + public LSL_Integer llGetListLength(LSL_List src) + { + m_host.AddScriptLPS(1); + + if (src == null) + { + return 0; + } + else + { + return src.Length; + } + } + + public LSL_Integer llList2Integer(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + if (index >= src.Length || index < 0) + { + return 0; + } + + // Vectors & Rotations always return zero in SL, but + // keys don't always return zero, it seems to be a bit complex. + else if (src.Data[index] is LSL_Vector || + src.Data[index] is LSL_Rotation) + { + return 0; + } + try + { + + if (src.Data[index] is LSL_Integer) + return (LSL_Integer)src.Data[index]; + else if (src.Data[index] is LSL_Float) + return Convert.ToInt32(((LSL_Float)src.Data[index]).value); + return new LSL_Integer(src.Data[index].ToString()); + } + catch (FormatException) + { + return 0; + } + } + + public LSL_Float llList2Float(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + if (index >= src.Length || index < 0) + { + return 0.0; + } + + // Vectors & Rotations always return zero in SL + else if (src.Data[index] is LSL_Vector || + src.Data[index] is LSL_Rotation) + { + return 0; + } + // valid keys seem to get parsed as integers then converted to floats + else + { + UUID uuidt; + if (src.Data[index] is LSL_Key && UUID.TryParse(src.Data[index].ToString(), out uuidt)) + { + return Convert.ToDouble(new LSL_Integer(src.Data[index].ToString()).value); + } + } + try + { + if (src.Data[index] is LSL_Integer) + return Convert.ToDouble(((LSL_Integer)src.Data[index]).value); + else if (src.Data[index] is LSL_Float) + return Convert.ToDouble(((LSL_Float)src.Data[index]).value); + else if (src.Data[index] is LSL_String) + return Convert.ToDouble(((LSL_String)src.Data[index]).m_string); + return Convert.ToDouble(src.Data[index]); + } + catch (FormatException) + { + return 0.0; + } + } + + public LSL_String llList2String(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + if (index >= src.Length || index < 0) + { + return String.Empty; + } + return src.Data[index].ToString(); + } + + public LSL_Key llList2Key(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + + if (index >= src.Length || index < 0) + { + return ""; + } + + // SL spits out an empty string for types other than key & string + // At the time of patching, LSL_Key is currently LSL_String, + // so the OR check may be a little redundant, but it's being done + // for completion and should LSL_Key ever be implemented + // as it's own struct + // NOTE: 3rd case is needed because a NULL_KEY comes through as + // type 'obj' and wrongly returns "" + else if (!(src.Data[index] is LSL_String || + src.Data[index] is LSL_Key || + src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) + { + return ""; + } + + return src.Data[index].ToString(); + } + + public LSL_Vector llList2Vector(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + if (index >= src.Length || index < 0) + { + return new LSL_Vector(0, 0, 0); + } + if (src.Data[index].GetType() == typeof(LSL_Vector)) + { + return (LSL_Vector)src.Data[index]; + } + + // SL spits always out ZERO_VECTOR for anything other than + // strings or vectors. Although keys always return ZERO_VECTOR, + // it is currently difficult to make the distinction between + // a string, a key as string and a string that by coincidence + // is a string, so we're going to leave that up to the + // LSL_Vector constructor. + else if (!(src.Data[index] is LSL_String || + src.Data[index] is LSL_Vector)) + { + return new LSL_Vector(0, 0, 0); + } + else + { + return new LSL_Vector(src.Data[index].ToString()); + } + } + + public LSL_Rotation llList2Rot(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + if (index >= src.Length || index < 0) + { + return new LSL_Rotation(0, 0, 0, 1); + } + + // SL spits always out ZERO_ROTATION for anything other than + // strings or vectors. Although keys always return ZERO_ROTATION, + // it is currently difficult to make the distinction between + // a string, a key as string and a string that by coincidence + // is a string, so we're going to leave that up to the + // LSL_Rotation constructor. + else if (!(src.Data[index] is LSL_String || + src.Data[index] is LSL_Rotation)) + { + return new LSL_Rotation(0, 0, 0, 1); + } + else if (src.Data[index].GetType() == typeof(LSL_Rotation)) + { + return (LSL_Rotation)src.Data[index]; + } + else + { + return new LSL_Rotation(src.Data[index].ToString()); + } + } + + public LSL_List llList2List(LSL_List src, int start, int end) + { + m_host.AddScriptLPS(1); + return src.GetSublist(start, end); + } + + public LSL_List llDeleteSubList(LSL_List src, int start, int end) + { + return src.DeleteSublist(start, end); + } + + public LSL_Integer llGetListEntryType(LSL_List src, int index) + { + m_host.AddScriptLPS(1); + if (index < 0) + { + index = src.Length + index; + } + if (index >= src.Length) + { + return 0; + } + + if (src.Data[index] is LSL_Integer || src.Data[index] is Int32) + return 1; + if (src.Data[index] is LSL_Float || src.Data[index] is Single || src.Data[index] is Double) + return 2; + if (src.Data[index] is LSL_String || src.Data[index] is String) + { + UUID tuuid; + if (UUID.TryParse(src.Data[index].ToString(), out tuuid)) + { + return 4; + } + else + { + return 3; + } + } + if (src.Data[index] is LSL_Vector) + return 5; + if (src.Data[index] is LSL_Rotation) + return 6; + if (src.Data[index] is LSL_List) + return 7; + return 0; + + } + + /// + /// Process the supplied list and return the + /// content of the list formatted as a comma + /// separated list. There is a space after + /// each comma. + /// + public LSL_String llList2CSV(LSL_List src) + { + m_host.AddScriptLPS(1); + + return string.Join(", ", + (new List(src.Data)).ConvertAll(o => + { + return o.ToString(); + }).ToArray()); + } + + /// + /// The supplied string is scanned for commas + /// and converted into a list. Commas are only + /// effective if they are encountered outside + /// of '<' '>' delimiters. Any whitespace + /// before or after an element is trimmed. + /// + + public LSL_List llCSV2List(string src) + { + + LSL_List result = new LSL_List(); + int parens = 0; + int start = 0; + int length = 0; + + m_host.AddScriptLPS(1); + + for (int i = 0; i < src.Length; i++) + { + switch (src[i]) + { + case '<': + parens++; + length++; + break; + case '>': + if (parens > 0) + parens--; + length++; + break; + case ',': + if (parens == 0) + { + result.Add(new LSL_String(src.Substring(start,length).Trim())); + start += length+1; + length = 0; + } + else + { + length++; + } + break; + default: + length++; + break; + } + } + + result.Add(new LSL_String(src.Substring(start,length).Trim())); + + return result; + } + + /// + /// Randomizes the list, be arbitrarily reordering + /// sublists of stride elements. As the stride approaches + /// the size of the list, the options become very + /// limited. + /// + /// + /// This could take a while for very large list + /// sizes. + /// + + public LSL_List llListRandomize(LSL_List src, int stride) + { + LSL_List result; + BetterRandom rand = new BetterRandom(); + + int chunkk; + int[] chunks; + + m_host.AddScriptLPS(1); + + if (stride <= 0) + { + stride = 1; + } + + // Stride MUST be a factor of the list length + // If not, then return the src list. This also + // traps those cases where stride > length. + + if (src.Length != stride && src.Length % stride == 0) + { + chunkk = src.Length/stride; + + chunks = new int[chunkk]; + + for (int i = 0; i < chunkk; i++) + { + chunks[i] = i; + } + + // Knuth shuffle the chunkk index + for (int i = chunkk - 1; i > 0; i--) + { + // Elect an unrandomized chunk to swap + int index = rand.Next(i + 1); + + // and swap position with first unrandomized chunk + int tmp = chunks[i]; + chunks[i] = chunks[index]; + chunks[index] = tmp; + } + + // Construct the randomized list + + result = new LSL_List(); + + for (int i = 0; i < chunkk; i++) + { + for (int j = 0; j < stride; j++) + { + result.Add(src.Data[chunks[i] * stride + j]); + } + } + } + else { + object[] array = new object[src.Length]; + Array.Copy(src.Data, 0, array, 0, src.Length); + result = new LSL_List(array); + } + + return result; + } + + /// + /// Elements in the source list starting with 0 and then + /// every i+stride. If the stride is negative then the scan + /// is backwards producing an inverted result. + /// Only those elements that are also in the specified + /// range are included in the result. + /// + + public LSL_List llList2ListStrided(LSL_List src, int start, int end, int stride) + { + + LSL_List result = new LSL_List(); + int[] si = new int[2]; + int[] ei = new int[2]; + bool twopass = false; + + m_host.AddScriptLPS(1); + + // First step is always to deal with negative indices + + if (start < 0) + start = src.Length+start; + if (end < 0) + end = src.Length+end; + + // Out of bounds indices are OK, just trim them + // accordingly + + if (start > src.Length) + start = src.Length; + + if (end > src.Length) + end = src.Length; + + if (stride == 0) + stride = 1; + + // There may be one or two ranges to be considered + + if (start != end) + { + + if (start <= end) + { + si[0] = start; + ei[0] = end; + } + else + { + si[1] = start; + ei[1] = src.Length; + si[0] = 0; + ei[0] = end; + twopass = true; + } + + // The scan always starts from the beginning of the + // source list, but members are only selected if they + // fall within the specified sub-range. The specified + // range values are inclusive. + // A negative stride reverses the direction of the + // scan producing an inverted list as a result. + + if (stride > 0) + { + for (int i = 0; i < src.Length; i += stride) + { + if (i<=ei[0] && i>=si[0]) + result.Add(src.Data[i]); + if (twopass && i>=si[1] && i<=ei[1]) + result.Add(src.Data[i]); + } + } + else if (stride < 0) + { + for (int i = src.Length - 1; i >= 0; i += stride) + { + if (i <= ei[0] && i >= si[0]) + result.Add(src.Data[i]); + if (twopass && i >= si[1] && i <= ei[1]) + result.Add(src.Data[i]); + } + } + } + else + { + if (start%stride == 0) + { + result.Add(src.Data[start]); + } + } + + return result; + } + + public LSL_Integer llGetRegionAgentCount() + { + m_host.AddScriptLPS(1); + return new LSL_Integer(World.GetRootAgentCount()); + } + + public LSL_Vector llGetRegionCorner() + { + m_host.AddScriptLPS(1); + return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); + } + + public LSL_String llGetEnv(LSL_String name) + { + m_host.AddScriptLPS(1); + if (name == "agent_limit") + { + return World.RegionInfo.RegionSettings.AgentLimit.ToString(); + } + else if (name == "dynamic_pathfinding") + { + return "0"; + } + else if (name == "estate_id") + { + return World.RegionInfo.EstateSettings.EstateID.ToString(); + } + else if (name == "estate_name") + { + return World.RegionInfo.EstateSettings.EstateName; + } + else if (name == "frame_number") + { + return World.Frame.ToString(); + } + else if (name == "region_cpu_ratio") + { + return "1"; + } + else if (name == "region_idle") + { + return "0"; + } + else if (name == "region_product_name") + { + if (World.RegionInfo.RegionType != String.Empty) + return World.RegionInfo.RegionType; + else + return ""; + } + else if (name == "region_product_sku") + { + return "OpenSim"; + } + else if (name == "region_start_time") + { + return World.UnixStartTime.ToString(); + } + else if (name == "sim_channel") + { + return "OpenSim"; + } + else if (name == "sim_version") + { + return World.GetSimulatorVersion(); + } + else if (name == "simulator_hostname") + { + IUrlModule UrlModule = World.RequestModuleInterface(); + return UrlModule.ExternalHostNameForLSL; + } + else + { + return ""; + } + } + + /// + /// Insert the list identified by into the + /// list designated by such that the first + /// new element has the index specified by + /// + + public LSL_List llListInsertList(LSL_List dest, LSL_List src, int index) + { + + LSL_List pref = null; + LSL_List suff = null; + + m_host.AddScriptLPS(1); + + if (index < 0) + { + index = index+dest.Length; + if (index < 0) + { + index = 0; + } + } + + if (index != 0) + { + pref = dest.GetSublist(0,index-1); + if (index < dest.Length) + { + suff = dest.GetSublist(index,-1); + return pref + src + suff; + } + else + { + return pref + src; + } + } + else + { + if (index < dest.Length) + { + suff = dest.GetSublist(index,-1); + return src + suff; + } + else + { + return src; + } + } + + } + + /// + /// Returns the index of the first occurrence of test + /// in src. + /// + /// Source list + /// List to search for + /// + /// The index number of the point in src where test was found if it was found. + /// Otherwise returns -1 + /// + public LSL_Integer llListFindList(LSL_List src, LSL_List test) + { + int index = -1; + int length = src.Length - test.Length + 1; + + m_host.AddScriptLPS(1); + + // If either list is empty, do not match + if (src.Length != 0 && test.Length != 0) + { + for (int i = 0; i < length; i++) + { + // Why this piece of insanity? This is because most script constants are C# value types (e.g. int) + // rather than wrapped LSL types. Such a script constant does not have int.Equal(LSL_Integer) code + // and so the comparison fails even if the LSL_Integer conceptually has the same value. + // Therefore, here we test Equals on both the source and destination objects. + // However, a future better approach may be use LSL struct script constants (e.g. LSL_Integer(1)). + if (src.Data[i].Equals(test.Data[0]) || test.Data[0].Equals(src.Data[i])) + { + int j; + for (j = 1; j < test.Length; j++) + if (!(src.Data[i+j].Equals(test.Data[j]) || test.Data[j].Equals(src.Data[i+j]))) + break; + + if (j == test.Length) + { + index = i; + break; + } + } + } + } + + return index; + } + + public LSL_String llGetObjectName() + { + m_host.AddScriptLPS(1); + return m_host.Name !=null ? m_host.Name : String.Empty; + } + + public void llSetObjectName(string name) + { + m_host.AddScriptLPS(1); + m_host.Name = name != null ? name : String.Empty; + } + + public LSL_String llGetDate() + { + m_host.AddScriptLPS(1); + DateTime date = DateTime.Now.ToUniversalTime(); + string result = date.ToString("yyyy-MM-dd"); + return result; + } + + public LSL_Integer llEdgeOfWorld(LSL_Vector pos, LSL_Vector dir) + { + m_host.AddScriptLPS(1); + + // edge will be used to pass the Region Coordinates offset + // we want to check for a neighboring sim + LSL_Vector edge = new LSL_Vector(0, 0, 0); + + if (dir.x == 0) + { + if (dir.y == 0) + { + // Direction vector is 0,0 so return + // false since we're staying in the sim + return 0; + } + else + { + // Y is the only valid direction + edge.y = dir.y / Math.Abs(dir.y); + } + } + else + { + LSL_Float mag; + if (dir.x > 0) + { + mag = (World.RegionInfo.RegionSizeX - pos.x) / dir.x; + } + else + { + mag = (pos.x/dir.x); + } + + mag = Math.Abs(mag); + + edge.y = pos.y + (dir.y * mag); + + if (edge.y > World.RegionInfo.RegionSizeY || edge.y < 0) + { + // Y goes out of bounds first + edge.y = dir.y / Math.Abs(dir.y); + } + else + { + // X goes out of bounds first or its a corner exit + edge.y = 0; + edge.x = dir.x / Math.Abs(dir.x); + } + } + + List neighbors = World.GridService.GetNeighbours(World.RegionInfo.ScopeID, World.RegionInfo.RegionID); + + uint neighborX = World.RegionInfo.RegionLocX + (uint)dir.x; + uint neighborY = World.RegionInfo.RegionLocY + (uint)dir.y; + + foreach (GridRegion sri in neighbors) + { + if (sri.RegionCoordX == neighborX && sri.RegionCoordY == neighborY) + return 0; + } + + return 1; + } + + /// + /// Not fully implemented yet. Still to do:- + /// AGENT_BUSY + /// Remove as they are done + /// + public LSL_Integer llGetAgentInfo(string id) + { + m_host.AddScriptLPS(1); + + UUID key = new UUID(); + if (!UUID.TryParse(id, out key)) + { + return 0; + } + + int flags = 0; + + ScenePresence agent = World.GetScenePresence(key); + if (agent == null) + { + return 0; + } + + if (agent.IsChildAgent) + return 0; // Fail if they are not in the same region + + // note: in OpenSim, sitting seems to cancel AGENT_ALWAYS_RUN, unlike SL + if (agent.SetAlwaysRun) + { + flags |= ScriptBaseClass.AGENT_ALWAYS_RUN; + } + + if (agent.HasAttachments()) + { + flags |= ScriptBaseClass.AGENT_ATTACHMENTS; + if (agent.HasScriptedAttachments()) + flags |= ScriptBaseClass.AGENT_SCRIPTED; + } + + if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0) + { + flags |= ScriptBaseClass.AGENT_FLYING; + flags |= ScriptBaseClass.AGENT_IN_AIR; // flying always implies in-air, even if colliding with e.g. a wall + } + + if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AWAY) != 0) + { + flags |= ScriptBaseClass.AGENT_AWAY; + } + + // seems to get unset, even if in mouselook, when avatar is sitting on a prim??? + if ((agent.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) + { + flags |= ScriptBaseClass.AGENT_MOUSELOOK; + } + + if ((agent.State & (byte)AgentState.Typing) != (byte)0) + { + flags |= ScriptBaseClass.AGENT_TYPING; + } + + string agentMovementAnimation = agent.Animator.CurrentMovementAnimation; + + if (agentMovementAnimation == "CROUCH") + { + flags |= ScriptBaseClass.AGENT_CROUCHING; + } + + if (agentMovementAnimation == "WALK" || agentMovementAnimation == "CROUCHWALK") + { + flags |= ScriptBaseClass.AGENT_WALKING; + } + + // not colliding implies in air. Note: flying also implies in-air, even if colliding (see above) + + // note: AGENT_IN_AIR and AGENT_WALKING seem to be mutually exclusive states in SL. + + // note: this may need some tweaking when walking downhill. you "fall down" for a brief instant + // and don't collide when walking downhill, which instantly registers as in-air, briefly. should + // there be some minimum non-collision threshold time before claiming the avatar is in-air? + if ((flags & ScriptBaseClass.AGENT_WALKING) == 0 && !agent.IsColliding ) + { + flags |= ScriptBaseClass.AGENT_IN_AIR; + } + + if (agent.ParentPart != null) + { + flags |= ScriptBaseClass.AGENT_ON_OBJECT; + flags |= ScriptBaseClass.AGENT_SITTING; + } + + if (agent.Animator.Animations.ImplicitDefaultAnimation.AnimID + == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) + { + flags |= ScriptBaseClass.AGENT_SITTING; + } + + return flags; + } + + public LSL_String llGetAgentLanguage(string id) + { + // This should only return a value if the avatar is in the same region, but eh. idc. + m_host.AddScriptLPS(1); + if (World.AgentPreferencesService == null) + { + Error("llGetAgentLanguage", "No AgentPreferencesService present"); + } + else + { + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) + { + return new LSL_String(World.AgentPreferencesService.GetLang(key)); + } + } + return new LSL_String("en-us"); + } + /// + /// http://wiki.secondlife.com/wiki/LlGetAgentList + /// The list of options is currently not used in SL + /// scope is one of:- + /// AGENT_LIST_REGION - all in the region + /// AGENT_LIST_PARCEL - all in the same parcel as the scripted object + /// AGENT_LIST_PARCEL_OWNER - all in any parcel owned by the owner of the + /// current parcel. + /// + public LSL_List llGetAgentList(LSL_Integer scope, LSL_List options) + { + m_host.AddScriptLPS(1); + + // the constants are 1, 2 and 4 so bits are being set, but you + // get an error "INVALID_SCOPE" if it is anything but 1, 2 and 4 + bool regionWide = scope == ScriptBaseClass.AGENT_LIST_REGION; + bool parcelOwned = scope == ScriptBaseClass.AGENT_LIST_PARCEL_OWNER; + bool parcel = scope == ScriptBaseClass.AGENT_LIST_PARCEL; + + LSL_List result = new LSL_List(); + + if (!regionWide && !parcelOwned && !parcel) + { + result.Add("INVALID_SCOPE"); + return result; + } + + ILandObject land; + UUID id = UUID.Zero; + + if (parcel || parcelOwned) + { + land = World.LandChannel.GetLandObject(m_host.ParentGroup.RootPart.GetWorldPosition()); + if (land == null) + { + id = UUID.Zero; + } + else + { + if (parcelOwned) + { + id = land.LandData.OwnerID; + } + else + { + id = land.LandData.GlobalID; + } + } + } + + World.ForEachRootScenePresence( + delegate (ScenePresence ssp) + { + // Gods are not listed in SL + if (!ssp.IsDeleted && ssp.GodLevel == 0.0 && !ssp.IsChildAgent) + { + if (!regionWide) + { + land = World.LandChannel.GetLandObject(ssp.AbsolutePosition); + if (land != null) + { + if (parcelOwned && land.LandData.OwnerID == id || + parcel && land.LandData.GlobalID == id) + { + result.Add(new LSL_Key(ssp.UUID.ToString())); + } + } + } + else + { + result.Add(new LSL_Key(ssp.UUID.ToString())); + } + } + // Maximum of 100 results + if (result.Length > 99) + { + return; + } + } + ); + return result; + } + + public void llAdjustSoundVolume(double volume) + { + m_host.AddScriptLPS(1); + m_host.AdjustSoundGain(volume); + ScriptSleep(m_sleepMsOnAdjustSoundVolume); + } + + public void llSetSoundRadius(double radius) + { + m_host.AddScriptLPS(1); + m_host.SoundRadius = radius; + } + + public LSL_String llKey2Name(string id) + { + m_host.AddScriptLPS(1); + UUID key = new UUID(); + if (UUID.TryParse(id,out key)) + { + ScenePresence presence = World.GetScenePresence(key); + + if (presence != null) + { + return presence.ControllingClient.Name; + //return presence.Name; + } + + if (World.GetSceneObjectPart(key) != null) + { + return World.GetSceneObjectPart(key).Name; + } + } + return String.Empty; + } + + + + public void llSetTextureAnim(int mode, int face, int sizex, int sizey, double start, double length, double rate) + { + m_host.AddScriptLPS(1); + + SetTextureAnim(m_host, mode, face, sizex, sizey, start, length, rate); + } + + public void llSetLinkTextureAnim(int linknumber, int mode, int face, int sizex, int sizey, double start, double length, double rate) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + foreach (SceneObjectPart part in parts) + { + SetTextureAnim(part, mode, face, sizex, sizey, start, length, rate); + } + } + + private void SetTextureAnim(SceneObjectPart part, int mode, int face, int sizex, int sizey, double start, double length, double rate) + { + + Primitive.TextureAnimation pTexAnim = new Primitive.TextureAnimation(); + pTexAnim.Flags = (Primitive.TextureAnimMode)mode; + + //ALL_SIDES + if (face == ScriptBaseClass.ALL_SIDES) + face = 255; + + pTexAnim.Face = (uint)face; + pTexAnim.Length = (float)length; + pTexAnim.Rate = (float)rate; + pTexAnim.SizeX = (uint)sizex; + pTexAnim.SizeY = (uint)sizey; + pTexAnim.Start = (float)start; + + part.AddTextureAnimation(pTexAnim); + part.SendFullUpdateToAllClients(); + part.ParentGroup.HasGroupChanged = true; + } + + public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east, + LSL_Vector bottom_south_west) + { + m_host.AddScriptLPS(1); + if (m_SoundModule != null) + { + m_SoundModule.TriggerSoundLimited(m_host.UUID, + ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, + bottom_south_west, top_north_east); + } + } + + public void llEjectFromLand(string pest) + { + m_host.AddScriptLPS(1); + UUID agentID = new UUID(); + if (UUID.TryParse(pest, out agentID)) + { + ScenePresence presence = World.GetScenePresence(agentID); + if (presence != null) + { + // agent must be over the owners land + ILandObject land = World.LandChannel.GetLandObject(presence.AbsolutePosition); + if (land == null) + return; + + if (m_host.OwnerID == land.LandData.OwnerID) + { + World.TeleportClientHome(agentID, presence.ControllingClient); + } + } + } + ScriptSleep(m_sleepMsOnEjectFromLand); + } + + public LSL_Integer llOverMyLand(string id) + { + m_host.AddScriptLPS(1); + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) + { + ScenePresence presence = World.GetScenePresence(key); + if (presence != null) // object is an avatar + { + if (m_host.OwnerID == World.LandChannel.GetLandObject(presence.AbsolutePosition).LandData.OwnerID) + return 1; + } + else // object is not an avatar + { + SceneObjectPart obj = World.GetSceneObjectPart(key); + + if (obj != null) + { + if (m_host.OwnerID == World.LandChannel.GetLandObject(obj.AbsolutePosition).LandData.OwnerID) + return 1; + } + } + } + + return 0; + } + + public LSL_String llGetLandOwnerAt(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + ILandObject land = World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); + if (land == null) + return UUID.Zero.ToString(); + return land.LandData.OwnerID.ToString(); + } + + /// + /// According to http://lslwiki.net/lslwiki/wakka.php?wakka=llGetAgentSize + /// only the height of avatars vary and that says: + /// Width (x) and depth (y) are constant. (0.45m and 0.6m respectively). + /// + public LSL_Vector llGetAgentSize(string id) + { + m_host.AddScriptLPS(1); + ScenePresence avatar = World.GetScenePresence((UUID)id); + LSL_Vector agentSize; + if (avatar == null || avatar.IsChildAgent) // Fail if not in the same region + { + agentSize = ScriptBaseClass.ZERO_VECTOR; + } + else + { + agentSize = GetAgentSize(avatar); + } + + return agentSize; + } + + public LSL_Integer llSameGroup(string agent) + { + m_host.AddScriptLPS(1); + UUID agentId = new UUID(); + if (!UUID.TryParse(agent, out agentId)) + return new LSL_Integer(0); + ScenePresence presence = World.GetScenePresence(agentId); + if (presence == null || presence.IsChildAgent) // Return flase for child agents + return new LSL_Integer(0); + IClientAPI client = presence.ControllingClient; + if (m_host.GroupID == client.ActiveGroupId) + return new LSL_Integer(1); + else + return new LSL_Integer(0); + } + + public void llUnSit(string id) + { + m_host.AddScriptLPS(1); + + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) + { + ScenePresence av = World.GetScenePresence(key); + List sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); + + if (av != null) + { + if (sittingAvatars.Contains(av)) + { + // if the avatar is sitting on this object, then + // we can unsit them. We don't want random scripts unsitting random people + // Lets avoid the popcorn avatar scenario. + av.StandUp(); + } + else + { + // If the object owner also owns the parcel + // or + // if the land is group owned and the object is group owned by the same group + // or + // if the object is owned by a person with estate access. + ILandObject parcel = World.LandChannel.GetLandObject(av.AbsolutePosition); + if (parcel != null) + { + if (m_host.OwnerID == parcel.LandData.OwnerID || + (m_host.OwnerID == m_host.GroupID && m_host.GroupID == parcel.LandData.GroupID + && parcel.LandData.IsGroupOwned) || World.Permissions.IsGod(m_host.OwnerID)) + { + av.StandUp(); + } + } + } + } + } + } + + public LSL_Vector llGroundSlope(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + + //Get the slope normal. This gives us the equation of the plane tangent to the slope. + LSL_Vector vsn = llGroundNormal(offset); + + //Plug the x,y coordinates of the slope normal into the equation of the plane to get + //the height of that point on the plane. The resulting vector gives the slope. + Vector3 vsl = vsn; + vsl.Z = (float)(((vsn.x * vsn.x) + (vsn.y * vsn.y)) / (-1 * vsn.z)); + vsl.Normalize(); + //Normalization might be overkill here + + vsn.x = vsl.X; + vsn.y = vsl.Y; + vsn.z = vsl.Z; + + return vsn; + } + + public LSL_Vector llGroundNormal(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + Vector3 pos = m_host.GetWorldPosition() + (Vector3)offset; + // Clamp to valid position + if (pos.X < 0) + pos.X = 0; + else if (pos.X >= World.Heightmap.Width) + pos.X = World.Heightmap.Width - 1; + if (pos.Y < 0) + pos.Y = 0; + else if (pos.Y >= World.Heightmap.Height) + pos.Y = World.Heightmap.Height - 1; + + //Find two points in addition to the position to define a plane + Vector3 p0 = new Vector3(pos.X, pos.Y, + (float)World.Heightmap[(int)pos.X, (int)pos.Y]); + Vector3 p1 = new Vector3(); + Vector3 p2 = new Vector3(); + if ((pos.X + 1.0f) >= World.Heightmap.Width) + p1 = new Vector3(pos.X + 1.0f, pos.Y, + (float)World.Heightmap[(int)pos.X, (int)pos.Y]); + else + p1 = new Vector3(pos.X + 1.0f, pos.Y, + (float)World.Heightmap[(int)(pos.X + 1.0f), (int)pos.Y]); + if ((pos.Y + 1.0f) >= World.Heightmap.Height) + p2 = new Vector3(pos.X, pos.Y + 1.0f, + (float)World.Heightmap[(int)pos.X, (int)pos.Y]); + else + p2 = new Vector3(pos.X, pos.Y + 1.0f, + (float)World.Heightmap[(int)pos.X, (int)(pos.Y + 1.0f)]); + + //Find normalized vectors from p0 to p1 and p0 to p2 + Vector3 v0 = new Vector3(p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z); + Vector3 v1 = new Vector3(p2.X - p0.X, p2.Y - p0.Y, p2.Z - p0.Z); + v0.Normalize(); + v1.Normalize(); + + //Find the cross product of the vectors (the slope normal). + Vector3 vsn = new Vector3(); + vsn.X = (v0.Y * v1.Z) - (v0.Z * v1.Y); + vsn.Y = (v0.Z * v1.X) - (v0.X * v1.Z); + vsn.Z = (v0.X * v1.Y) - (v0.Y * v1.X); + vsn.Normalize(); + //I believe the crossproduct of two normalized vectors is a normalized vector so + //this normalization may be overkill + + return new LSL_Vector(vsn); + } + + public LSL_Vector llGroundContour(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + LSL_Vector x = llGroundSlope(offset); + return new LSL_Vector(-x.y, x.x, 0.0); + } + + public LSL_Integer llGetAttached() + { + m_host.AddScriptLPS(1); + return m_host.ParentGroup.AttachmentPoint; + } + + public virtual LSL_Integer llGetFreeMemory() + { + m_host.AddScriptLPS(1); + // Make scripts designed for Mono happy + return 65536; + } + + public LSL_Integer llGetFreeURLs() + { + m_host.AddScriptLPS(1); + if (m_UrlModule != null) + return new LSL_Integer(m_UrlModule.GetFreeUrls()); + return new LSL_Integer(0); + } + + + public LSL_String llGetRegionName() + { + m_host.AddScriptLPS(1); + return World.RegionInfo.RegionName; + } + + public LSL_Float llGetRegionTimeDilation() + { + m_host.AddScriptLPS(1); + return (double)World.TimeDilation; + } + + /// + /// Returns the value reported in the client Statistics window + /// + public LSL_Float llGetRegionFPS() + { + m_host.AddScriptLPS(1); + return World.StatsReporter.LastReportedSimFPS; + } + + + /* particle system rules should be coming into this routine as doubles, that is + rule[0] should be an integer from this list and rule[1] should be the arg + for the same integer. wiki.secondlife.com has most of this mapping, but some + came from http://www.caligari-designs.com/p4u2 + + We iterate through the list for 'Count' elements, incrementing by two for each + iteration and set the members of Primitive.ParticleSystem, one at a time. + */ + + public enum PrimitiveRule : int + { + PSYS_PART_FLAGS = 0, + PSYS_PART_START_COLOR = 1, + PSYS_PART_START_ALPHA = 2, + PSYS_PART_END_COLOR = 3, + PSYS_PART_END_ALPHA = 4, + PSYS_PART_START_SCALE = 5, + PSYS_PART_END_SCALE = 6, + PSYS_PART_MAX_AGE = 7, + PSYS_SRC_ACCEL = 8, + PSYS_SRC_PATTERN = 9, + PSYS_SRC_INNERANGLE = 10, + PSYS_SRC_OUTERANGLE = 11, + PSYS_SRC_TEXTURE = 12, + PSYS_SRC_BURST_RATE = 13, + PSYS_SRC_BURST_PART_COUNT = 15, + PSYS_SRC_BURST_RADIUS = 16, + PSYS_SRC_BURST_SPEED_MIN = 17, + PSYS_SRC_BURST_SPEED_MAX = 18, + PSYS_SRC_MAX_AGE = 19, + PSYS_SRC_TARGET_KEY = 20, + PSYS_SRC_OMEGA = 21, + PSYS_SRC_ANGLE_BEGIN = 22, + PSYS_SRC_ANGLE_END = 23, + PSYS_PART_BLEND_FUNC_SOURCE = 24, + PSYS_PART_BLEND_FUNC_DEST = 25, + PSYS_PART_START_GLOW = 26, + PSYS_PART_END_GLOW = 27 + } + + internal Primitive.ParticleSystem.ParticleDataFlags ConvertUINTtoFlags(uint flags) + { + Primitive.ParticleSystem.ParticleDataFlags returnval = Primitive.ParticleSystem.ParticleDataFlags.None; + + return returnval; + } + + protected Primitive.ParticleSystem getNewParticleSystemWithSLDefaultValues() + { + Primitive.ParticleSystem ps = new Primitive.ParticleSystem(); + + // TODO find out about the other defaults and add them here + ps.PartStartColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); + ps.PartEndColor = new Color4(1.0f, 1.0f, 1.0f, 1.0f); + ps.PartStartScaleX = 1.0f; + ps.PartStartScaleY = 1.0f; + ps.PartEndScaleX = 1.0f; + ps.PartEndScaleY = 1.0f; + ps.BurstSpeedMin = 1.0f; + ps.BurstSpeedMax = 1.0f; + ps.BurstRate = 0.1f; + ps.PartMaxAge = 10.0f; + ps.BurstPartCount = 1; + ps.BlendFuncSource = ScriptBaseClass.PSYS_PART_BF_SOURCE_ALPHA; + ps.BlendFuncDest = ScriptBaseClass.PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA; + ps.PartStartGlow = 0.0f; + ps.PartEndGlow = 0.0f; + + return ps; + } + + public void llLinkParticleSystem(int linknumber, LSL_List rules) + { + m_host.AddScriptLPS(1); + + List parts = GetLinkParts(linknumber); + + foreach (SceneObjectPart part in parts) + { + SetParticleSystem(part, rules, "llLinkParticleSystem"); + } + } + + public void llParticleSystem(LSL_List rules) + { + m_host.AddScriptLPS(1); + SetParticleSystem(m_host, rules, "llParticleSystem"); + } + + private void SetParticleSystem(SceneObjectPart part, LSL_List rules, string originFunc) + { + if (rules.Length == 0) + { + part.RemoveParticleSystem(); + part.ParentGroup.HasGroupChanged = true; + } + else + { + Primitive.ParticleSystem prules = getNewParticleSystemWithSLDefaultValues(); + LSL_Vector tempv = new LSL_Vector(); + + float tempf = 0; + int tmpi = 0; + + for (int i = 0; i < rules.Length; i += 2) + { + int psystype; + try + { + psystype = rules.GetLSLIntegerItem(i); + } + catch (InvalidCastException) + { + Error(originFunc, string.Format("Error running particle system params index #{0}: particle system parameter type must be integer", i)); + return; + } + switch (psystype) + { + case (int)ScriptBaseClass.PSYS_PART_FLAGS: + try + { + prules.PartDataFlags = (Primitive.ParticleSystem.ParticleDataFlags)(uint)rules.GetLSLIntegerItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_FLAGS: arg #{0} - parameter 1 must be integer", i + 1)); + return; + } + break; + + case (int)ScriptBaseClass.PSYS_PART_START_COLOR: + try + { + tempv = rules.GetVector3Item(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_START_COLOR: arg #{0} - parameter 1 must be vector", i + 1)); + return; + } + prules.PartStartColor.R = (float)tempv.x; + prules.PartStartColor.G = (float)tempv.y; + prules.PartStartColor.B = (float)tempv.z; + break; + + case (int)ScriptBaseClass.PSYS_PART_START_ALPHA: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_START_ALPHA: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.PartStartColor.A = tempf; + break; + + case (int)ScriptBaseClass.PSYS_PART_END_COLOR: + try + { + tempv = rules.GetVector3Item(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_END_COLOR: arg #{0} - parameter 1 must be vector", i + 1)); + return; + } + prules.PartEndColor.R = (float)tempv.x; + prules.PartEndColor.G = (float)tempv.y; + prules.PartEndColor.B = (float)tempv.z; + break; + + case (int)ScriptBaseClass.PSYS_PART_END_ALPHA: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_END_ALPHA: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.PartEndColor.A = tempf; + break; + + case (int)ScriptBaseClass.PSYS_PART_START_SCALE: + try + { + tempv = rules.GetVector3Item(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_START_SCALE: arg #{0} - parameter 1 must be vector", i + 1)); + return; + } + prules.PartStartScaleX = validParticleScale((float)tempv.x); + prules.PartStartScaleY = validParticleScale((float)tempv.y); + break; + + case (int)ScriptBaseClass.PSYS_PART_END_SCALE: + try + { + tempv = rules.GetVector3Item(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_END_SCALE: arg #{0} - parameter 1 must be vector", i + 1)); + return; + } + prules.PartEndScaleX = validParticleScale((float)tempv.x); + prules.PartEndScaleY = validParticleScale((float)tempv.y); + break; + + case (int)ScriptBaseClass.PSYS_PART_MAX_AGE: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_MAX_AGE: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.PartMaxAge = tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_ACCEL: + try + { + tempv = rules.GetVector3Item(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_ACCEL: arg #{0} - parameter 1 must be vector", i + 1)); + return; + } + prules.PartAcceleration.X = (float)tempv.x; + prules.PartAcceleration.Y = (float)tempv.y; + prules.PartAcceleration.Z = (float)tempv.z; + break; + + case (int)ScriptBaseClass.PSYS_SRC_PATTERN: + try + { + tmpi = (int)rules.GetLSLIntegerItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_PATTERN: arg #{0} - parameter 1 must be integer", i + 1)); + return; + } + prules.Pattern = (Primitive.ParticleSystem.SourcePattern)tmpi; + break; + + // PSYS_SRC_INNERANGLE and PSYS_SRC_ANGLE_BEGIN use the same variables. The + // PSYS_SRC_OUTERANGLE and PSYS_SRC_ANGLE_END also use the same variable. The + // client tells the difference between the two by looking at the 0x02 bit in + // the PartFlags variable. + case (int)ScriptBaseClass.PSYS_SRC_INNERANGLE: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_INNERANGLE: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.InnerAngle = (float)tempf; + prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off. + break; + + case (int)ScriptBaseClass.PSYS_SRC_OUTERANGLE: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_OUTERANGLE: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.OuterAngle = (float)tempf; + prules.PartFlags &= 0xFFFFFFFD; // Make sure new angle format is off. + break; + + case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_SOURCE: + try + { + tmpi = (int)rules.GetLSLIntegerItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_BLEND_FUNC_SOURCE: arg #{0} - parameter 1 must be integer", i + 1)); + return; + } + prules.BlendFuncSource = (byte)tmpi; + break; + + case (int)ScriptBaseClass.PSYS_PART_BLEND_FUNC_DEST: + try + { + tmpi = (int)rules.GetLSLIntegerItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_BLEND_FUNC_DEST: arg #{0} - parameter 1 must be integer", i + 1)); + return; + } + prules.BlendFuncDest = (byte)tmpi; + break; + + case (int)ScriptBaseClass.PSYS_PART_START_GLOW: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_START_GLOW: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.PartStartGlow = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_PART_END_GLOW: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_PART_END_GLOW: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.PartEndGlow = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_TEXTURE: + try + { + prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetLSLStringItem(i + 1)); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_TEXTURE: arg #{0} - parameter 1 must be string or key", i + 1)); + return; + } + break; + + case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_RATE: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.BurstRate = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_BURST_PART_COUNT: + try + { + prules.BurstPartCount = (byte)(int)rules.GetLSLIntegerItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_PART_COUNT: arg #{0} - parameter 1 must be integer", i + 1)); + return; + } + break; + + case (int)ScriptBaseClass.PSYS_SRC_BURST_RADIUS: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_RADIUS: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.BurstRadius = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MIN: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_SPEED_MIN: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.BurstSpeedMin = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_BURST_SPEED_MAX: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_BURST_SPEED_MAX: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.BurstSpeedMax = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_MAX_AGE: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_MAX_AGE: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.MaxAge = (float)tempf; + break; + + case (int)ScriptBaseClass.PSYS_SRC_TARGET_KEY: + UUID key = UUID.Zero; + if (UUID.TryParse(rules.Data[i + 1].ToString(), out key)) + { + prules.Target = key; + } + else + { + prules.Target = part.UUID; + } + break; + + case (int)ScriptBaseClass.PSYS_SRC_OMEGA: + // AL: This is an assumption, since it is the only thing that would match. + try + { + tempv = rules.GetVector3Item(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_OMEGA: arg #{0} - parameter 1 must be vector", i + 1)); + return; + } + prules.AngularVelocity.X = (float)tempv.x; + prules.AngularVelocity.Y = (float)tempv.y; + prules.AngularVelocity.Z = (float)tempv.z; + break; + + case (int)ScriptBaseClass.PSYS_SRC_ANGLE_BEGIN: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_ANGLE_BEGIN: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.InnerAngle = (float)tempf; + prules.PartFlags |= 0x02; // Set new angle format. + break; + + case (int)ScriptBaseClass.PSYS_SRC_ANGLE_END: + try + { + tempf = (float)rules.GetLSLFloatItem(i + 1); + } + catch (InvalidCastException) + { + Error(originFunc, string.Format("Error running rule PSYS_SRC_ANGLE_END: arg #{0} - parameter 1 must be float", i + 1)); + return; + } + prules.OuterAngle = (float)tempf; + prules.PartFlags |= 0x02; // Set new angle format. + break; + } + + } + prules.CRC = 1; + + part.AddNewParticleSystem(prules); + part.ParentGroup.HasGroupChanged = true; + } + part.SendFullUpdateToAllClients(); + } + + private float validParticleScale(float value) + { + if (value > 4.0f) return 4.0f; + return value; + } + + public void llGroundRepel(double height, int water, double tau) + { + m_host.AddScriptLPS(1); + if (m_host.PhysActor != null) + { + float ground = (float)llGround(new LSL_Types.Vector3(0, 0, 0)); + float waterLevel = (float)llWater(new LSL_Types.Vector3(0, 0, 0)); + PIDHoverType hoverType = PIDHoverType.Ground; + if (water != 0) + { + hoverType = PIDHoverType.GroundAndWater; + if (ground < waterLevel) + height += waterLevel; + else + height += ground; + } + else + { + height += ground; + } + + m_host.SetHoverHeight((float)height, hoverType, (float)tau); + } + } + + public void llGiveInventoryList(string destination, string category, LSL_List inventory) + { + m_host.AddScriptLPS(1); + + UUID destID; + if (!UUID.TryParse(destination, out destID)) + return; + + List itemList = new List(); + + foreach (Object item in inventory.Data) + { + string rawItemString = item.ToString(); + + UUID itemID; + if (UUID.TryParse(rawItemString, out itemID)) + { + itemList.Add(itemID); + } + else + { + TaskInventoryItem taskItem = m_host.Inventory.GetInventoryItem(rawItemString); + + if (taskItem != null) + itemList.Add(taskItem.ItemID); + } + } + + if (itemList.Count == 0) + return; + + UUID folderID = m_ScriptEngine.World.MoveTaskInventoryItems(destID, category, m_host, itemList); + + if (folderID == UUID.Zero) + return; + + if (m_TransferModule != null) + { + byte[] bucket = new byte[] { (byte)AssetType.Folder }; + + Vector3 pos = m_host.AbsolutePosition; + + GridInstantMessage msg = new GridInstantMessage(World, + m_host.OwnerID, m_host.Name, destID, + (byte)InstantMessageDialog.TaskInventoryOffered, + false, string.Format("'{0}'", category), +// We won't go so far as to add a SLURL, but this is the format used by LL as of 2012-10-06 +// false, string.Format("'{0}' ( http://slurl.com/secondlife/{1}/{2}/{3}/{4} )", category, World.Name, (int)pos.X, (int)pos.Y, (int)pos.Z), + folderID, false, pos, + bucket, false); + + m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); + } + } + + public void llSetVehicleType(int type) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleType(type); + } + } + + //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in + //CFK 9/28: so these are not complete yet. + public void llSetVehicleFloatParam(int param, LSL_Float value) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleFloatParam(param, (float)value); + } + } + + //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in + //CFK 9/28: so these are not complete yet. + public void llSetVehicleVectorParam(int param, LSL_Vector vec) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, vec); + } + } + + //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in + //CFK 9/28: so these are not complete yet. + public void llSetVehicleRotationParam(int param, LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, rot); + } + } + + public void llSetVehicleFlags(int flags) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false); + } + } + + public void llRemoveVehicleFlags(int flags) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + { + m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true); + } + } + + protected void SitTarget(SceneObjectPart part, LSL_Vector offset, LSL_Rotation rot) + { + part.SitTargetPosition = offset; + part.SitTargetOrientation = rot; + part.ParentGroup.HasGroupChanged = true; + } + + public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + SitTarget(m_host, offset, rot); + } + + public void llLinkSitTarget(LSL_Integer link, LSL_Vector offset, LSL_Rotation rot) + { + m_host.AddScriptLPS(1); + if (link == ScriptBaseClass.LINK_ROOT) + SitTarget(m_host.ParentGroup.RootPart, offset, rot); + else if (link == ScriptBaseClass.LINK_THIS) + SitTarget(m_host, offset, rot); + else + { + SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); + if (null != part) + { + SitTarget(part, offset, rot); + } + } + } + + public LSL_String llAvatarOnSitTarget() + { + m_host.AddScriptLPS(1); + return m_host.SitTargetAvatar.ToString(); + } + + // http://wiki.secondlife.com/wiki/LlAvatarOnLinkSitTarget + public LSL_String llAvatarOnLinkSitTarget(int linknum) + { + m_host.AddScriptLPS(1); + if(linknum == ScriptBaseClass.LINK_SET || + linknum == ScriptBaseClass.LINK_ALL_CHILDREN || + linknum == ScriptBaseClass.LINK_ALL_OTHERS) return UUID.Zero.ToString(); + + List parts = GetLinkParts(linknum); + if (parts.Count == 0) return UUID.Zero.ToString(); + return parts[0].SitTargetAvatar.ToString(); + } + + + public void llAddToLandPassList(string avatar, double hours) + { + m_host.AddScriptLPS(1); + UUID key; + ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + + if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned)) + { + int expires = 0; + if (hours != 0) + expires = Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours); + + if (UUID.TryParse(avatar, out key)) + { + int idx = land.LandData.ParcelAccessList.FindIndex( + delegate(LandAccessEntry e) + { + if (e.AgentID == key && e.Flags == AccessList.Access) + return true; + return false; + }); + + if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires))) + return; + + if (idx != -1) + land.LandData.ParcelAccessList.RemoveAt(idx); + + LandAccessEntry entry = new LandAccessEntry(); + + entry.AgentID = key; + entry.Flags = AccessList.Access; + entry.Expires = expires; + + land.LandData.ParcelAccessList.Add(entry); + + World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); + } + } + ScriptSleep(m_sleepMsOnAddToLandPassList); + } + + public void llSetTouchText(string text) + { + m_host.AddScriptLPS(1); + m_host.TouchName = text; + } + + public void llSetSitText(string text) + { + m_host.AddScriptLPS(1); + m_host.SitName = text; + } + + public void llSetCameraEyeOffset(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + m_host.SetCameraEyeOffset(offset); + + if (m_host.ParentGroup.RootPart.GetCameraEyeOffset() == Vector3.Zero) + m_host.ParentGroup.RootPart.SetCameraEyeOffset(offset); + } + + public void llSetCameraAtOffset(LSL_Vector offset) + { + m_host.AddScriptLPS(1); + m_host.SetCameraAtOffset(offset); + + if (m_host.ParentGroup.RootPart.GetCameraAtOffset() == Vector3.Zero) + m_host.ParentGroup.RootPart.SetCameraAtOffset(offset); + } + + public void llSetLinkCamera(LSL_Integer link, LSL_Vector eye, LSL_Vector at) + { + m_host.AddScriptLPS(1); + + if (link == ScriptBaseClass.LINK_SET || + link == ScriptBaseClass.LINK_ALL_CHILDREN || + link == ScriptBaseClass.LINK_ALL_OTHERS) return; + + SceneObjectPart part = null; + + switch (link) + { + case ScriptBaseClass.LINK_ROOT: + part = m_host.ParentGroup.RootPart; + break; + case ScriptBaseClass.LINK_THIS: + part = m_host; + break; + default: + part = m_host.ParentGroup.GetLinkNumPart(link); + break; + } + + if (null != part) + { + part.SetCameraEyeOffset(eye); + part.SetCameraAtOffset(at); + } + } + + public LSL_String llDumpList2String(LSL_List src, string seperator) + { + m_host.AddScriptLPS(1); + if (src.Length == 0) + { + return String.Empty; + } + string ret = String.Empty; + foreach (object o in src.Data) + { + ret = ret + o.ToString() + seperator; + } + ret = ret.Substring(0, ret.Length - seperator.Length); + return ret; + } + + public LSL_Integer llScriptDanger(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + bool result = World.ScriptDanger(m_host.LocalId, pos); + if (result) + { + return 1; + } + else + { + return 0; + } + + } + + public void llDialog(string avatar, string message, LSL_List buttons, int chat_channel) + { + IDialogModule dm = World.RequestModuleInterface(); + + if (dm == null) + return; + + m_host.AddScriptLPS(1); + UUID av = new UUID(); + if (!UUID.TryParse(avatar,out av)) + { + Error("llDialog", "First parameter must be a key"); + return; + } + if (buttons.Length < 1) + { + Error("llDialog", "At least 1 button must be shown"); + return; + } + if (buttons.Length > 12) + { + Error("llDialog", "No more than 12 buttons can be shown"); + return; + } + string[] buts = new string[buttons.Length]; + for (int i = 0; i < buttons.Length; i++) + { + if (buttons.Data[i].ToString() == String.Empty) + { + Error("llDialog", "Button label cannot be blank"); + return; + } + if (buttons.Data[i].ToString().Length > 24) + { + Error("llDialog", "Button label cannot be longer than 24 characters"); + return; + } + buts[i] = buttons.Data[i].ToString(); + } + + dm.SendDialogToUser( + av, m_host.Name, m_host.UUID, m_host.OwnerID, + message, new UUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); + + ScriptSleep(m_sleepMsOnDialog); + } + + public void llVolumeDetect(int detect) + { + m_host.AddScriptLPS(1); + + if (!m_host.ParentGroup.IsDeleted) + m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0); + } + + public void llRemoteLoadScript(string target, string name, int running, int start_param) + { + m_host.AddScriptLPS(1); + Deprecated("llRemoteLoadScript", "Use llRemoteLoadScriptPin instead"); + ScriptSleep(m_sleepMsOnRemoteLoadScript); + } + + public void llSetRemoteScriptAccessPin(int pin) + { + m_host.AddScriptLPS(1); + m_host.ScriptAccessPin = pin; + } + + public void llRemoteLoadScriptPin(string target, string name, int pin, int running, int start_param) + { + m_host.AddScriptLPS(1); + + UUID destId = UUID.Zero; + + if (!UUID.TryParse(target, out destId)) + { + Error("llRemoteLoadScriptPin", "Can't parse key '" + target + "'"); + return; + } + + // target must be a different prim than the one containing the script + if (m_host.UUID == destId) + { + return; + } + + // copy the first script found with this inventory name + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + // make sure the object is a script + if (item == null || item.Type != 10) + { + Error("llRemoteLoadScriptPin", "Can't find script '" + name + "'"); + return; + } + + // the rest of the permission checks are done in RezScript, so check the pin there as well + World.RezScriptFromPrim(item.ItemID, m_host, destId, pin, running, start_param); + + // this will cause the delay even if the script pin or permissions were wrong - seems ok + ScriptSleep(m_sleepMsOnRemoteLoadScriptPin); + } + + public void llOpenRemoteDataChannel() + { + m_host.AddScriptLPS(1); + IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); + if (xmlrpcMod != null && xmlrpcMod.IsEnabled()) + { + UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_host.LocalId, m_item.ItemID, UUID.Zero); + IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface(); + if (xmlRpcRouter != null) + { + string ExternalHostName = m_ScriptEngine.World.RegionInfo.ExternalHostName; + + xmlRpcRouter.RegisterNewReceiver(m_ScriptEngine.ScriptModule, channelID, m_host.UUID, + m_item.ItemID, String.Format("http://{0}:{1}/", ExternalHostName, + xmlrpcMod.Port.ToString())); + } + object[] resobj = new object[] + { + new LSL_Integer(1), + new LSL_String(channelID.ToString()), + new LSL_String(UUID.Zero.ToString()), + new LSL_String(String.Empty), + new LSL_Integer(0), + new LSL_String(String.Empty) + }; + m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams("remote_data", resobj, + new DetectParams[0])); + } + ScriptSleep(m_sleepMsOnOpenRemoteDataChannel); + } + + public LSL_String llSendRemoteData(string channel, string dest, int idata, string sdata) + { + m_host.AddScriptLPS(1); + IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); + ScriptSleep(m_sleepMsOnSendRemoteData); + if (xmlrpcMod == null) + return ""; + return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString(); + } + + public void llRemoteDataReply(string channel, string message_id, string sdata, int idata) + { + m_host.AddScriptLPS(1); + IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); + if (xmlrpcMod != null) + xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); + ScriptSleep(m_sleepMsOnRemoteDataReply); + } + + public void llCloseRemoteDataChannel(string channel) + { + m_host.AddScriptLPS(1); + + IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface(); + if (xmlRpcRouter != null) + { + xmlRpcRouter.UnRegisterReceiver(channel, m_item.ItemID); + } + + IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface(); + if (xmlrpcMod != null) + xmlrpcMod.CloseXMLRPCChannel((UUID)channel); + ScriptSleep(m_sleepMsOnCloseRemoteDataChannel); + } + + public LSL_String llMD5String(string src, int nonce) + { + m_host.AddScriptLPS(1); + return Util.Md5Hash(String.Format("{0}:{1}", src, nonce.ToString())); + } + + public LSL_String llSHA1String(string src) + { + m_host.AddScriptLPS(1); + return Util.SHA1Hash(src).ToLower(); + } + + protected ObjectShapePacket.ObjectDataBlock SetPrimitiveBlockShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, byte profileshape, byte pathcurve) + { + float tempFloat; // Use in float expressions below to avoid byte cast precision issues. + ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); + + if (holeshape != (int)ScriptBaseClass.PRIM_HOLE_DEFAULT && + holeshape != (int)ScriptBaseClass.PRIM_HOLE_CIRCLE && + holeshape != (int)ScriptBaseClass.PRIM_HOLE_SQUARE && + holeshape != (int)ScriptBaseClass.PRIM_HOLE_TRIANGLE) + { + holeshape = (int)ScriptBaseClass.PRIM_HOLE_DEFAULT; + } + shapeBlock.PathCurve = pathcurve; + shapeBlock.ProfileCurve = (byte)holeshape; // Set the hole shape. + shapeBlock.ProfileCurve += profileshape; // Add in the profile shape. + if (cut.x < 0f) + { + cut.x = 0f; + } + if (cut.x > 1f) + { + cut.x = 1f; + } + if (cut.y < 0f) + { + cut.y = 0f; + } + if (cut.y > 1f) + { + cut.y = 1f; + } + if (cut.y - cut.x < 0.02f) + { + cut.x = cut.y - 0.02f; + if (cut.x < 0.0f) + { + cut.x = 0.0f; + cut.y = 0.02f; + } + } + shapeBlock.ProfileBegin = (ushort)(50000 * cut.x); + shapeBlock.ProfileEnd = (ushort)(50000 * (1 - cut.y)); + if (hollow < 0f) + { + hollow = 0f; + } + // If the prim is a Cylinder, Prism, Sphere, Torus or Ring (or not a + // Box or Tube) and the hole shape is a square, hollow is limited to + // a max of 70%. The viewer performs its own check on this value but + // we need to do it here also so llGetPrimitiveParams can have access + // to the correct value. + if (profileshape != (byte)ProfileCurve.Square && + holeshape == (int)ScriptBaseClass.PRIM_HOLE_SQUARE) + { + if (hollow > 0.70f) + { + hollow = 0.70f; + } + } + // Otherwise, hollow is limited to 99%. + else + { + if (hollow > 0.99f) + { + hollow = 0.99f; + } + } + shapeBlock.ProfileHollow = (ushort)(50000 * hollow); + if (twist.x < -1.0f) + { + twist.x = -1.0f; + } + if (twist.x > 1.0f) + { + twist.x = 1.0f; + } + if (twist.y < -1.0f) + { + twist.y = -1.0f; + } + if (twist.y > 1.0f) + { + twist.y = 1.0f; + } + // A fairly large precision error occurs for some calculations, + // if a float or double is directly cast to a byte or sbyte + // variable, in both .Net and Mono. In .Net, coding + // "(sbyte)(float)(some expression)" corrects the precision + // errors. But this does not work for Mono. This longer coding + // form of creating a tempoary float variable from the + // expression first, then casting that variable to a byte or + // sbyte, works for both .Net and Mono. These types of + // assignments occur in SetPrimtiveBlockShapeParams and + // SetPrimitiveShapeParams in support of llSetPrimitiveParams. + tempFloat = (float)(100.0d * twist.x); + shapeBlock.PathTwistBegin = (sbyte)tempFloat; + tempFloat = (float)(100.0d * twist.y); + shapeBlock.PathTwist = (sbyte)tempFloat; + + shapeBlock.ObjectLocalID = part.LocalId; + + part.Shape.SculptEntry = false; + return shapeBlock; + } + + // Prim type box, cylinder and prism. + protected void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, LSL_Vector taper_b, LSL_Vector topshear, byte profileshape, byte pathcurve) + { + float tempFloat; // Use in float expressions below to avoid byte cast precision issues. + ObjectShapePacket.ObjectDataBlock shapeBlock; + + shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist, profileshape, pathcurve); + + if (taper_b.x < 0f) + { + taper_b.x = 0f; + } + if (taper_b.x > 2f) + { + taper_b.x = 2f; + } + if (taper_b.y < 0f) + { + taper_b.y = 0f; + } + if (taper_b.y > 2f) + { + taper_b.y = 2f; + } + tempFloat = (float)(100.0d * (2.0d - taper_b.x)); + shapeBlock.PathScaleX = (byte)tempFloat; + tempFloat = (float)(100.0d * (2.0d - taper_b.y)); + shapeBlock.PathScaleY = (byte)tempFloat; + if (topshear.x < -0.5f) + { + topshear.x = -0.5f; + } + if (topshear.x > 0.5f) + { + topshear.x = 0.5f; + } + if (topshear.y < -0.5f) + { + topshear.y = -0.5f; + } + if (topshear.y > 0.5f) + { + topshear.y = 0.5f; + } + tempFloat = (float)(100.0d * topshear.x); + shapeBlock.PathShearX = (byte)tempFloat; + tempFloat = (float)(100.0d * topshear.y); + shapeBlock.PathShearY = (byte)tempFloat; + + part.Shape.SculptEntry = false; + part.UpdateShape(shapeBlock); + } + + // Prim type sphere. + protected void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, LSL_Vector dimple, byte profileshape, byte pathcurve) + { + ObjectShapePacket.ObjectDataBlock shapeBlock; + + shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist, profileshape, pathcurve); + + // profile/path swapped for a sphere + shapeBlock.PathBegin = shapeBlock.ProfileBegin; + shapeBlock.PathEnd = shapeBlock.ProfileEnd; + + shapeBlock.PathScaleX = 100; + shapeBlock.PathScaleY = 100; + + if (dimple.x < 0f) + { + dimple.x = 0f; + } + if (dimple.x > 1f) + { + dimple.x = 1f; + } + if (dimple.y < 0f) + { + dimple.y = 0f; + } + if (dimple.y > 1f) + { + dimple.y = 1f; + } + if (dimple.y - dimple.x < 0.02f) + { + dimple.x = dimple.y - 0.02f; + if (dimple.x < 0.0f) + { + dimple.x = 0.0f; + dimple.y = 0.02f; + } + } + shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x); + shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y)); + + part.Shape.SculptEntry = false; + part.UpdateShape(shapeBlock); + } + + // Prim type torus, tube and ring. + protected void SetPrimitiveShapeParams(SceneObjectPart part, int holeshape, LSL_Vector cut, float hollow, LSL_Vector twist, LSL_Vector holesize, LSL_Vector topshear, LSL_Vector profilecut, LSL_Vector taper_a, float revolutions, float radiusoffset, float skew, byte profileshape, byte pathcurve) + { + float tempFloat; // Use in float expressions below to avoid byte cast precision issues. + ObjectShapePacket.ObjectDataBlock shapeBlock; + + shapeBlock = SetPrimitiveBlockShapeParams(part, holeshape, cut, hollow, twist, profileshape, pathcurve); + + // profile/path swapped for a torrus, tube, ring + shapeBlock.PathBegin = shapeBlock.ProfileBegin; + shapeBlock.PathEnd = shapeBlock.ProfileEnd; + + if (holesize.x < 0.01f) + { + holesize.x = 0.01f; + } + if (holesize.x > 1f) + { + holesize.x = 1f; + } + if (holesize.y < 0.01f) + { + holesize.y = 0.01f; + } + if (holesize.y > 0.5f) + { + holesize.y = 0.5f; + } + tempFloat = (float)(100.0d * (2.0d - holesize.x)); + shapeBlock.PathScaleX = (byte)tempFloat; + tempFloat = (float)(100.0d * (2.0d - holesize.y)); + shapeBlock.PathScaleY = (byte)tempFloat; + if (topshear.x < -0.5f) + { + topshear.x = -0.5f; + } + if (topshear.x > 0.5f) + { + topshear.x = 0.5f; + } + if (topshear.y < -0.5f) + { + topshear.y = -0.5f; + } + if (topshear.y > 0.5f) + { + topshear.y = 0.5f; + } + tempFloat = (float)(100.0d * topshear.x); + shapeBlock.PathShearX = (byte)tempFloat; + tempFloat = (float)(100.0d * topshear.y); + shapeBlock.PathShearY = (byte)tempFloat; + if (profilecut.x < 0f) + { + profilecut.x = 0f; + } + if (profilecut.x > 1f) + { + profilecut.x = 1f; + } + if (profilecut.y < 0f) + { + profilecut.y = 0f; + } + if (profilecut.y > 1f) + { + profilecut.y = 1f; + } + if (profilecut.y - profilecut.x < 0.02f) + { + profilecut.x = profilecut.y - 0.02f; + if (profilecut.x < 0.0f) + { + profilecut.x = 0.0f; + profilecut.y = 0.02f; + } + } + shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x); + shapeBlock.ProfileEnd = (ushort)(50000 * (1 - profilecut.y)); + if (taper_a.x < -1f) + { + taper_a.x = -1f; + } + if (taper_a.x > 1f) + { + taper_a.x = 1f; + } + if (taper_a.y < -1f) + { + taper_a.y = -1f; + } + if (taper_a.y > 1f) + { + taper_a.y = 1f; + } + tempFloat = (float)(100.0d * taper_a.x); + shapeBlock.PathTaperX = (sbyte)tempFloat; + tempFloat = (float)(100.0d * taper_a.y); + shapeBlock.PathTaperY = (sbyte)tempFloat; + if (revolutions < 1f) + { + revolutions = 1f; + } + if (revolutions > 4f) + { + revolutions = 4f; + } + tempFloat = 66.66667f * (revolutions - 1.0f); + shapeBlock.PathRevolutions = (byte)tempFloat; + // limits on radiusoffset depend on revolutions and hole size (how?) seems like the maximum range is 0 to 1 + if (radiusoffset < 0f) + { + radiusoffset = 0f; + } + if (radiusoffset > 1f) + { + radiusoffset = 1f; + } + tempFloat = 100.0f * radiusoffset; + shapeBlock.PathRadiusOffset = (sbyte)tempFloat; + if (skew < -0.95f) + { + skew = -0.95f; + } + if (skew > 0.95f) + { + skew = 0.95f; + } + tempFloat = 100.0f * skew; + shapeBlock.PathSkew = (sbyte)tempFloat; + + part.Shape.SculptEntry = false; + part.UpdateShape(shapeBlock); + } + + // Prim type sculpt. + protected void SetPrimitiveShapeParams(SceneObjectPart part, string map, int type, byte pathcurve) + { + ObjectShapePacket.ObjectDataBlock shapeBlock = new ObjectShapePacket.ObjectDataBlock(); + UUID sculptId; + + if (!UUID.TryParse(map, out sculptId)) + sculptId = ScriptUtils.GetAssetIdFromItemName(m_host, map, (int)AssetType.Texture); + + if (sculptId == UUID.Zero) + return; + + shapeBlock.PathCurve = pathcurve; + shapeBlock.ObjectLocalID = part.LocalId; + shapeBlock.PathScaleX = 100; + shapeBlock.PathScaleY = 150; + + int flag = type & (ScriptBaseClass.PRIM_SCULPT_FLAG_INVERT | ScriptBaseClass.PRIM_SCULPT_FLAG_MIRROR); + + if (type != (ScriptBaseClass.PRIM_SCULPT_TYPE_CYLINDER | flag) && + type != (ScriptBaseClass.PRIM_SCULPT_TYPE_PLANE | flag) && + type != (ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE | flag) && + type != (ScriptBaseClass.PRIM_SCULPT_TYPE_TORUS | flag)) + { + // default + type = (int)ScriptBaseClass.PRIM_SCULPT_TYPE_SPHERE; + } + + part.Shape.SetSculptProperties((byte)type, sculptId); + part.Shape.SculptEntry = true; + part.UpdateShape(shapeBlock); + } + + public void llSetPrimitiveParams(LSL_List rules) + { + m_host.AddScriptLPS(1); + + SetLinkPrimParams(ScriptBaseClass.LINK_THIS, rules, "llSetPrimitiveParams"); + + ScriptSleep(m_sleepMsOnSetPrimitiveParams); + } + + public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) + { + m_host.AddScriptLPS(1); + + SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParams"); + + ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); + } + + public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) + { + m_host.AddScriptLPS(1); + + SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); + } + + protected void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc) + { + SetEntityParams(GetLinkEntities(linknumber), rules, originFunc); + } + + protected void SetEntityParams(List entities, LSL_List rules, string originFunc) + { + LSL_List remaining = null; + uint rulesParsed = 0; + + foreach (ISceneEntity entity in entities) + { + if (entity is SceneObjectPart) + remaining = SetPrimParams((SceneObjectPart)entity, rules, originFunc, ref rulesParsed); + else + remaining = SetAgentParams((ScenePresence)entity, rules, originFunc, ref rulesParsed); + } + + while (remaining != null && remaining.Length > 2) + { + int linknumber; + try + { + linknumber = remaining.GetLSLIntegerItem(0); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_LINK_TARGET: parameter 2 must be integer", rulesParsed)); + return; + } + + rules = remaining.GetSublist(1, -1); + entities = GetLinkEntities(linknumber); + + foreach (ISceneEntity entity in entities) + { + if (entity is SceneObjectPart) + remaining = SetPrimParams((SceneObjectPart)entity, rules, originFunc, ref rulesParsed); + else + remaining = SetAgentParams((ScenePresence)entity, rules, originFunc, ref rulesParsed); + } + } + } + + public void llSetKeyframedMotion(LSL_List frames, LSL_List options) + { + SceneObjectGroup group = m_host.ParentGroup; + + if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical) + return; + if (group.IsAttachment) + return; + + if (frames.Data.Length > 0) // We are getting a new motion + { + if (group.RootPart.KeyframeMotion != null) + group.RootPart.KeyframeMotion.Delete(); + group.RootPart.KeyframeMotion = null; + + int idx = 0; + + KeyframeMotion.PlayMode mode = KeyframeMotion.PlayMode.Forward; + KeyframeMotion.DataFormat data = KeyframeMotion.DataFormat.Translation | KeyframeMotion.DataFormat.Rotation; + + while (idx < options.Data.Length) + { + int option = (int)options.GetLSLIntegerItem(idx++); + int remain = options.Data.Length - idx; + + switch (option) + { + case ScriptBaseClass.KFM_MODE: + if (remain < 1) + break; + int modeval = (int)options.GetLSLIntegerItem(idx++); + switch(modeval) + { + case ScriptBaseClass.KFM_FORWARD: + mode = KeyframeMotion.PlayMode.Forward; + break; + case ScriptBaseClass.KFM_REVERSE: + mode = KeyframeMotion.PlayMode.Reverse; + break; + case ScriptBaseClass.KFM_LOOP: + mode = KeyframeMotion.PlayMode.Loop; + break; + case ScriptBaseClass.KFM_PING_PONG: + mode = KeyframeMotion.PlayMode.PingPong; + break; + } + break; + case ScriptBaseClass.KFM_DATA: + if (remain < 1) + break; + int dataval = (int)options.GetLSLIntegerItem(idx++); + data = (KeyframeMotion.DataFormat)dataval; + break; + } + } + + group.RootPart.KeyframeMotion = new KeyframeMotion(group, mode, data); + + idx = 0; + + int elemLength = 2; + if (data == (KeyframeMotion.DataFormat.Translation | KeyframeMotion.DataFormat.Rotation)) + elemLength = 3; + + List keyframes = new List(); + while (idx < frames.Data.Length) + { + int remain = frames.Data.Length - idx; + + if (remain < elemLength) + break; + + KeyframeMotion.Keyframe frame = new KeyframeMotion.Keyframe(); + frame.Position = null; + frame.Rotation = null; + + if ((data & KeyframeMotion.DataFormat.Translation) != 0) + { + LSL_Types.Vector3 tempv = frames.GetVector3Item(idx++); + frame.Position = new Vector3((float)tempv.x, (float)tempv.y, (float)tempv.z); + } + if ((data & KeyframeMotion.DataFormat.Rotation) != 0) + { + LSL_Types.Quaternion tempq = frames.GetQuaternionItem(idx++); + Quaternion q = new Quaternion((float)tempq.x, (float)tempq.y, (float)tempq.z, (float)tempq.s); + q.Normalize(); + frame.Rotation = q; + } + + float tempf = (float)frames.GetLSLFloatItem(idx++); + frame.TimeMS = (int)(tempf * 1000.0f); + + keyframes.Add(frame); + } + + group.RootPart.KeyframeMotion.SetKeyframes(keyframes.ToArray()); + group.RootPart.KeyframeMotion.Start(); + } + else + { + if (group.RootPart.KeyframeMotion == null) + return; + + if (options.Data.Length == 0) + { + group.RootPart.KeyframeMotion.Stop(); + return; + } + + int idx = 0; + + while (idx < options.Data.Length) + { + int option = (int)options.GetLSLIntegerItem(idx++); + + switch (option) + { + case ScriptBaseClass.KFM_COMMAND: + int cmd = (int)options.GetLSLIntegerItem(idx++); + switch (cmd) + { + case ScriptBaseClass.KFM_CMD_PLAY: + group.RootPart.KeyframeMotion.Start(); + break; + case ScriptBaseClass.KFM_CMD_STOP: + group.RootPart.KeyframeMotion.Stop(); + break; + case ScriptBaseClass.KFM_CMD_PAUSE: + group.RootPart.KeyframeMotion.Pause(); + break; + } + break; + } + } + } + } + + protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed) + { + int idx = 0; + int idxStart = 0; + + bool positionChanged = false; + LSL_Vector currentPosition = GetPartLocalPos(part); + + try + { + while (idx < rules.Length) + { + ++rulesParsed; + int code = rules.GetLSLIntegerItem(idx++); + + int remain = rules.Length - idx; + idxStart = idx; + + int face; + LSL_Vector v; + + switch (code) + { + case ScriptBaseClass.PRIM_POSITION: + case ScriptBaseClass.PRIM_POS_LOCAL: + if (remain < 1) + return null; + + try + { + v = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + if(code == ScriptBaseClass.PRIM_POSITION) + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); + else + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + positionChanged = true; + currentPosition = GetSetPosTarget(part, v, currentPosition); + + break; + case ScriptBaseClass.PRIM_SIZE: + if (remain < 1) + return null; + + v=rules.GetVector3Item(idx++); + SetScale(part, v); + + break; + case ScriptBaseClass.PRIM_ROTATION: + if (remain < 1) + return null; + LSL_Rotation q; + try + { + q = rules.GetQuaternionItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROTATION: arg #{1} - parameter 1 must be rotation", rulesParsed, idx - idxStart - 1)); + return null; + } + // try to let this work as in SL... + if (part.ParentID == 0) + { + // special case: If we are root, rotate complete SOG to new rotation + SetRot(part, q); + } + else + { + // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. + SceneObjectPart rootPart = part.ParentGroup.RootPart; + SetRot(part, rootPart.RotationOffset * (Quaternion)q); + } + + break; + + case ScriptBaseClass.PRIM_TYPE: + if (remain < 3) + return null; + + try + { + code = (int)rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE: arg #{1} - parameter 1 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + + remain = rules.Length - idx; + float hollow; + LSL_Vector twist; + LSL_Vector taper_b; + LSL_Vector topshear; + float revolutions; + float radiusoffset; + float skew; + LSL_Vector holesize; + LSL_Vector profilecut; + + switch (code) + { + case ScriptBaseClass.PRIM_TYPE_BOX: + if (remain < 6) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); // cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 5 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + topshear = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_BOX: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, + (byte)ProfileShape.Square, (byte)Extrusion.Straight); + break; + + case ScriptBaseClass.PRIM_TYPE_CYLINDER: + if (remain < 6) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // holeshape + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); // cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + topshear = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_CYLINDER: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, + (byte)ProfileShape.Circle, (byte)Extrusion.Straight); + break; + + case ScriptBaseClass.PRIM_TYPE_PRISM: + if (remain < 6) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // holeshape + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); //cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + topshear = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_PRISM: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, topshear, + (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Straight); + break; + + case ScriptBaseClass.PRIM_TYPE_SPHERE: + if (remain < 5) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // holeshape + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); // cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); // dimple + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SPHERE: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, face, v, hollow, twist, taper_b, + (byte)ProfileShape.HalfCircle, (byte)Extrusion.Curve1); + break; + + case ScriptBaseClass.PRIM_TYPE_TORUS: + if (remain < 11) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // holeshape + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); //cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + holesize = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + topshear = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + profilecut = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); // taper_a + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + revolutions = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + radiusoffset = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + skew = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TORUS: arg #{1} - parameter 13 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, + revolutions, radiusoffset, skew, (byte)ProfileShape.Circle, (byte)Extrusion.Curve1); + break; + + case ScriptBaseClass.PRIM_TYPE_TUBE: + if (remain < 11) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // holeshape + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); //cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + holesize = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + topshear = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + profilecut = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); // taper_a + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + revolutions = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + radiusoffset = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + skew = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_TUBE: arg #{1} - parameter 13 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, + revolutions, radiusoffset, skew, (byte)ProfileShape.Square, (byte)Extrusion.Curve1); + break; + + case ScriptBaseClass.PRIM_TYPE_RING: + if (remain < 11) + return null; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // holeshape + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + v = rules.GetVector3Item(idx++); //cut + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + hollow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + twist = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 6 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + holesize = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 7 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + topshear = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + profilecut = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 9 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + taper_b = rules.GetVector3Item(idx++); // taper_a + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 10 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + revolutions = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 11 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + radiusoffset = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 12 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + skew = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_RING: arg #{1} - parameter 13 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, face, v, hollow, twist, holesize, topshear, profilecut, taper_b, + revolutions, radiusoffset, skew, (byte)ProfileShape.EquilateralTriangle, (byte)Extrusion.Curve1); + break; + + case ScriptBaseClass.PRIM_TYPE_SCULPT: + if (remain < 2) + return null; + + string map = rules.Data[idx++].ToString(); + try + { + face = (int)rules.GetLSLIntegerItem(idx++); // type + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TYPE, PRIM_TYPE_SCULPT: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + SetPrimitiveShapeParams(part, map, face, (byte)Extrusion.Curve1); + break; + } + + break; + + case ScriptBaseClass.PRIM_TEXTURE: + if (remain < 5) + return null; + + face=(int)rules.GetLSLIntegerItem(idx++); + string tex; + LSL_Vector repeats; + LSL_Vector offsets; + double rotation; + + tex = rules.Data[idx++].ToString(); + try + { + repeats = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + offsets = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 4 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + rotation = (double)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXTURE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + + SetTexture(part, tex, face); + ScaleTexture(part, repeats.x, repeats.y, face); + OffsetTexture(part, offsets.x, offsets.y, face); + RotateTexture(part, rotation, face); + + break; + + case ScriptBaseClass.PRIM_COLOR: + if (remain < 3) + return null; + + LSL_Vector color; + double alpha; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + color = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + alpha = (double)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_COLOR: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + + part.SetFaceColorAlpha(face, color, alpha); + + break; + + case ScriptBaseClass.PRIM_FLEXIBLE: + if (remain < 7) + return null; + bool flexi; + int softness; + float gravity; + float friction; + float wind; + float tension; + LSL_Vector force; + + try + { + flexi = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + softness = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + gravity = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + friction = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + wind = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 6 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + tension = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 7 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + force = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FLEXIBLE: arg #{1} - parameter 8 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + + SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force); + + break; + + case ScriptBaseClass.PRIM_POINT_LIGHT: + if (remain < 5) + return null; + bool light; + LSL_Vector lightcolor; + float intensity; + float radius; + float falloff; + + try + { + light = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + lightcolor = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + intensity = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + radius = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 5 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + falloff = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POINT_LIGHT: arg #{1} - parameter 6 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + + SetPointLight(part, light, lightcolor, intensity, radius, falloff); + + break; + + case ScriptBaseClass.PRIM_GLOW: + if (remain < 2) + return null; + + float glow; + + try + { + face = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_GLOW: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + glow = (float)rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_GLOW: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + + SetGlow(part, face, glow); + + break; + + case ScriptBaseClass.PRIM_BUMP_SHINY: + if (remain < 3) + return null; + + int shiny; + Bumpiness bump; + + try + { + face = (int)rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + shiny = (int)rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + bump = (Bumpiness)(int)rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_BUMP_SHINY: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + + SetShiny(part, face, shiny, bump); + + break; + + case ScriptBaseClass.PRIM_FULLBRIGHT: + if (remain < 2) + return null; + bool st; + + try + { + face = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FULLBRIGHT: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + st = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_FULLBRIGHT: arg #{1} - parameter 4 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + SetFullBright(part, face , st); + break; + + case ScriptBaseClass.PRIM_MATERIAL: + if (remain < 1) + return null; + int mat; + + try + { + mat = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_MATERIAL: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + if (mat < 0 || mat > 7) + return null; + + part.Material = Convert.ToByte(mat); + break; + + case ScriptBaseClass.PRIM_PHANTOM: + if (remain < 1) + return null; + + string ph = rules.Data[idx++].ToString(); + part.ParentGroup.ScriptSetPhantomStatus(ph.Equals("1")); + + break; + + case ScriptBaseClass.PRIM_PHYSICS: + if (remain < 1) + return null; + string phy = rules.Data[idx++].ToString(); + part.ScriptSetPhysicsStatus(phy.Equals("1")); + break; + + case ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: + if (remain < 1) + return null; + + int shape_type; + + try + { + shape_type = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_PHYSICS_SHAPE_TYPE: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + + ExtraPhysicsData physdata = new ExtraPhysicsData(); + physdata.Density = part.Density; + physdata.Bounce = part.Restitution; + physdata.GravitationModifier = part.GravityModifier; + physdata.PhysShapeType = (PhysShapeType)shape_type; + + part.UpdateExtraPhysics(physdata); + + break; + + case ScriptBaseClass.PRIM_TEMP_ON_REZ: + if (remain < 1) + return null; + string temp = rules.Data[idx++].ToString(); + + part.ParentGroup.ScriptSetTemporaryStatus(temp.Equals("1")); + + break; + + case ScriptBaseClass.PRIM_TEXGEN: + if (remain < 2) + return null; + //face,type + int style; + + try + { + face = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXGEN: arg #{1} - parameter 2 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + style = rules.GetLSLIntegerItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXGEN: arg #{1} - parameter 3 must be integer", rulesParsed, idx - idxStart - 1)); + return null; + } + SetTexGen(part, face, style); + break; + case ScriptBaseClass.PRIM_TEXT: + if (remain < 3) + return null; + string primText; + LSL_Vector primTextColor; + LSL_Float primTextAlpha; + + try + { + primText = rules.GetLSLStringItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + primTextColor = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 3 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + primTextAlpha = rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_TEXT: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + Vector3 av3 = Util.Clip(primTextColor, 0.0f, 1.0f); + part.SetText(primText, av3, Util.Clip((float)primTextAlpha, 0.0f, 1.0f)); + + break; + + case ScriptBaseClass.PRIM_NAME: + if (remain < 1) + return null; + try + { + string primName = rules.GetLSLStringItem(idx++); + part.Name = primName; + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_NAME: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); + return null; + } + break; + case ScriptBaseClass.PRIM_DESC: + if (remain < 1) + return null; + try + { + string primDesc = rules.GetLSLStringItem(idx++); + part.Description = primDesc; + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_DESC: arg #{1} - parameter 2 must be string", rulesParsed, idx - idxStart - 1)); + return null; + } + break; + case ScriptBaseClass.PRIM_ROT_LOCAL: + if (remain < 1) + return null; + LSL_Rotation rot; + try + { + rot = rules.GetQuaternionItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1)); + return null; + } + SetRot(part, rot); + break; + + case ScriptBaseClass.PRIM_OMEGA: + if (remain < 3) + return null; + LSL_Vector axis; + LSL_Float spinrate; + LSL_Float gain; + + try + { + axis = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + spinrate = rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 3 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + try + { + gain = rules.GetLSLFloatItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_OMEGA: arg #{1} - parameter 4 must be float", rulesParsed, idx - idxStart - 1)); + return null; + } + TargetOmega(part, axis, (double)spinrate, (double)gain); + break; + + case ScriptBaseClass.PRIM_SLICE: + if (remain < 1) + return null; + LSL_Vector slice; + try + { + slice = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_SLICE: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); + return null; + } + part.UpdateSlice((float)slice.x, (float)slice.y); + break; + + case ScriptBaseClass.PRIM_LINK_TARGET: + if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. + return null; + + return rules.GetSublist(idx, -1); + + default: + Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - unsupported parameter", rulesParsed, idx - idxStart)); + return null; + } + } + } + catch (InvalidCastException e) + { + Error(originFunc, string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message); + } + finally + { + if (positionChanged) + { + if (part.ParentGroup.RootPart == part) + { + SceneObjectGroup parent = part.ParentGroup; + parent.UpdateGroupPosition(currentPosition); + } + else + { + part.OffsetPosition = currentPosition; + SceneObjectGroup parent = part.ParentGroup; + parent.HasGroupChanged = true; + parent.ScheduleGroupForTerseUpdate(); + } + } + } + + return null; + } + + protected LSL_List SetAgentParams(ScenePresence sp, LSL_List rules, string originFunc, ref uint rulesParsed) + { + int idx = 0; + int idxStart = 0; + + try + { + while (idx < rules.Length) + { + ++rulesParsed; + int code = rules.GetLSLIntegerItem(idx++); + + int remain = rules.Length - idx; + idxStart = idx; + + switch (code) + { + case ScriptBaseClass.PRIM_POSITION: + case ScriptBaseClass.PRIM_POS_LOCAL: + if (remain < 1) + return null; + + try + { + sp.OffsetPosition = rules.GetVector3Item(idx++); + } + catch(InvalidCastException) + { + if (code == ScriptBaseClass.PRIM_POSITION) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); + } + else + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 2 must be vector", rulesParsed, idx - idxStart - 1)); + } + return null; + } + break; + + case ScriptBaseClass.PRIM_ROTATION: + if (remain < 1) + return null; + + Quaternion inRot; + + try + { + inRot = rules.GetQuaternionItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROTATION: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1)); + return null; + } + + SceneObjectPart parentPart = sp.ParentPart; + + if (parentPart != null) + sp.Rotation = m_host.GetWorldRotation() * inRot; + + break; + + case ScriptBaseClass.PRIM_ROT_LOCAL: + if (remain < 1) + return null; + + try + { + sp.Rotation = rules.GetQuaternionItem(idx++); + } + catch(InvalidCastException) + { + Error(originFunc, string.Format("Error running rule #{0} -> PRIM_ROT_LOCAL: arg #{1} - parameter 2 must be rotation", rulesParsed, idx - idxStart - 1)); + return null; + } + + break; + + case ScriptBaseClass.PRIM_TYPE: + Error(originFunc, "PRIM_TYPE disallowed on agent"); + return null; + + case ScriptBaseClass.PRIM_OMEGA: + Error(originFunc, "PRIM_OMEGA disallowed on agent"); + return null; + + case ScriptBaseClass.PRIM_LINK_TARGET: + if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. + return null; + + return rules.GetSublist(idx, -1); + + default: + Error(originFunc, + string.Format("Error running rule #{0} on agent: arg #{1} - disallowed on agent", rulesParsed, idx - idxStart)); + return null; + } + } + } + catch (InvalidCastException e) + { + Error( + originFunc, + string.Format("Error running rule #{0}: arg #{1} - ", rulesParsed, idx - idxStart) + e.Message); + } + + return null; + } + + public LSL_String llStringToBase64(string str) + { + m_host.AddScriptLPS(1); + try + { + byte[] encData_byte; + encData_byte = Util.UTF8.GetBytes(str); + string encodedData = Convert.ToBase64String(encData_byte); + return encodedData; + } + catch + { + Error("llBase64ToString", "Error encoding string"); + return String.Empty; + } + } + + public LSL_String llBase64ToString(string str) + { + m_host.AddScriptLPS(1); + try + { + byte[] b = Convert.FromBase64String(str); + return Encoding.UTF8.GetString(b); + } + catch + { + Error("llBase64ToString", "Error decoding string"); + return String.Empty; + } + } + + public LSL_String llXorBase64Strings(string str1, string str2) + { + m_host.AddScriptLPS(1); + Deprecated("llXorBase64Strings", "Use llXorBase64 instead"); + ScriptSleep(m_sleepMsOnXorBase64Strings); + return String.Empty; + } + + public void llRemoteDataSetRegion() + { + m_host.AddScriptLPS(1); + Deprecated("llRemoteDataSetRegion", "Use llOpenRemoteDataChannel instead"); + } + + public LSL_Float llLog10(double val) + { + m_host.AddScriptLPS(1); + return (double)Math.Log10(val); + } + + public LSL_Float llLog(double val) + { + m_host.AddScriptLPS(1); + return (double)Math.Log(val); + } + + public LSL_List llGetAnimationList(string id) + { + m_host.AddScriptLPS(1); + + LSL_List l = new LSL_List(); + ScenePresence av = World.GetScenePresence((UUID)id); + if (av == null || av.IsChildAgent) // only if in the region + return l; + UUID[] anims; + anims = av.Animator.GetAnimationArray(); + foreach (UUID foo in anims) + l.Add(new LSL_Key(foo.ToString())); + return l; + } + + public void llSetParcelMusicURL(string url) + { + m_host.AddScriptLPS(1); + + ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + + if (land.LandData.OwnerID != m_host.OwnerID) + return; + + land.SetMusicUrl(url); + + ScriptSleep(m_sleepMsOnSetParcelMusicURL); + } + + public LSL_String llGetParcelMusicURL() + { + m_host.AddScriptLPS(1); + + ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + + if (land.LandData.OwnerID != m_host.OwnerID) + return String.Empty; + + return land.GetMusicUrl(); + } + + public LSL_Vector llGetRootPosition() + { + m_host.AddScriptLPS(1); + + return new LSL_Vector(m_host.ParentGroup.AbsolutePosition); + } + + /// + /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetRot + /// http://lslwiki.net/lslwiki/wakka.php?wakka=ChildRotation + /// Also tested in sl in regards to the behaviour in attachments/mouselook + /// In the root prim:- + /// Returns the object rotation if not attached + /// Returns the avatars rotation if attached + /// Returns the camera rotation if attached and the avatar is in mouselook + /// + public LSL_Rotation llGetRootRotation() + { + m_host.AddScriptLPS(1); + Quaternion q; + if (m_host.ParentGroup.AttachmentPoint != 0) + { + ScenePresence avatar = World.GetScenePresence(m_host.ParentGroup.AttachedAvatar); + if (avatar != null) + if ((avatar.AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0) + q = avatar.CameraRotation; // Mouselook + else + q = avatar.GetWorldRotation(); // Currently infrequently updated so may be inaccurate + else + q = m_host.ParentGroup.GroupRotation; // Likely never get here but just in case + } + else + q = m_host.ParentGroup.GroupRotation; // just the group rotation + + return new LSL_Rotation(q); + } + + public LSL_String llGetObjectDesc() + { + return m_host.Description!=null?m_host.Description:String.Empty; + } + + public void llSetObjectDesc(string desc) + { + m_host.AddScriptLPS(1); + m_host.Description = desc!=null?desc:String.Empty; + } + + public LSL_String llGetCreator() + { + m_host.AddScriptLPS(1); + return m_host.CreatorID.ToString(); + } + + public LSL_String llGetTimestamp() + { + m_host.AddScriptLPS(1); + return DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); + } + + public LSL_Integer llGetNumberOfPrims() + { + m_host.AddScriptLPS(1); + + return m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount(); + } + + /// + /// Full implementation of llGetBoundingBox according to SL 2015-04-15. + /// http://wiki.secondlife.com/wiki/LlGetBoundingBox + /// http://lslwiki.net/lslwiki/wakka.php?wakka=llGetBoundingBox + /// Returns local bounding box of avatar without attachments + /// if target is non-seated avatar or prim/mesh in avatar attachment. + /// Returns local bounding box of object including seated avatars + /// if target is seated avatar or prim/mesh in object. + /// Uses meshing of prims for high accuracy + /// or less accurate box models for speed. + /// + public LSL_List llGetBoundingBox(string obj) + { + m_host.AddScriptLPS(1); + + // Get target avatar if non-seated avatar or attachment, or prim and object + UUID objID = UUID.Zero; + UUID.TryParse(obj, out objID); + ScenePresence agent = World.GetScenePresence(objID); + if (agent != null) + { + if (agent.ParentPart != null) + { + objID = agent.ParentPart.UUID; + agent = null; + } + } + SceneObjectGroup group = null; + SceneObjectPart target = World.GetSceneObjectPart(objID); + if (target != null) + { + group = target.ParentGroup; + if (group.IsAttachment) { + objID = group.AttachedAvatar; + agent = World.GetScenePresence(objID); + group = null; + target = null; + } + } + + // Initialize but break if no target + LSL_List result = new LSL_List(); + int groupCount = 0; + int partCount = 0; + int vertexCount = 0; + if (target == null && agent == null) + { + result.Add(new LSL_Vector()); + result.Add(new LSL_Vector()); + if (m_addStatsInGetBoundingBox) + result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); + return result; + } + Vector3 minPosition = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); + Vector3 maxPosition = new Vector3(float.MinValue, float.MinValue, float.MinValue); + + // Try to get a mesher + IRendering primMesher = null; + List renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); + if (renderers.Count > 0) + primMesher = RenderingLoader.LoadRenderer(renderers[0]); + + // Get bounding box of just avatar, seated or not + if (agent != null) + { + bool hasParent = false; + Vector3 lower; + Vector3 upper; + BoundingBoxOfScenePresence(agent, out lower, out upper); + Vector3 offset = Vector3.Zero; + + // Since local bounding box unrotated and untilted, keep it simple + AddBoundingBoxOfSimpleBox(lower, upper, offset, agent.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + partCount++; + groupCount++; + + // Return lower and upper bounding box corners + result.Add(new LSL_Vector(minPosition)); + result.Add(new LSL_Vector(maxPosition)); + if (m_addStatsInGetBoundingBox) + result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); + return result; + } + // Get bounding box of object including seated avatars + else if (group != null) + { + // Merge bounding boxes of all parts (prims and mesh) + foreach (SceneObjectPart part in group.Parts) + { + bool hasParent = (!part.IsRoot); + // When requested or if no mesher, keep it simple + if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) + { + AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + } + // Do the full mounty + else + { + Primitive omvPrim = part.Shape.ToOmvPrimitive(part.OffsetPosition, part.RotationOffset); + byte[] sculptAsset = null; + if (omvPrim.Sculpt != null) + sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString()); + + // When part is mesh + // Quirk: Only imports as incompletely populated faceted mesh object, so needs an own handler. + if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null) + { + AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset); + FacetedMesh mesh = null; + FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, DetailLevel.Highest, out mesh); + meshAsset = null; + if (mesh != null) + { + AddBoundingBoxOfFacetedMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + mesh = null; + } + } + + // When part is sculpt + // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt. + else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null) + { + IJ2KDecoder imgDecoder = World.RequestModuleInterface(); + if (imgDecoder != null) + { + Image sculpt = imgDecoder.DecodeToImage(sculptAsset); + if (sculpt != null) + { + SimpleMesh mesh = primMesher.GenerateSimpleSculptMesh(omvPrim, (Bitmap)sculpt, DetailLevel.Medium); + sculpt.Dispose(); + if (mesh != null) + { + AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + mesh = null; + } + } + } + } + + // When part is prim + else if (omvPrim.Sculpt == null) + { + SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); + if (mesh != null) + { + AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + mesh = null; + } + } + + // When all else fails, try fallback to simple box + else + { + AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + } + } + partCount++; + } + } + + // Merge bounding boxes of seated avatars + foreach (ScenePresence sp in group.GetSittingAvatars()) + { + Vector3 lower; + Vector3 upper; + BoundingBoxOfScenePresence(sp, out lower, out upper); + Vector3 offset = sp.OffsetPosition; + + bool hasParent = true; + // When requested or if no mesher, keep it simple + if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) + { + AddBoundingBoxOfSimpleBox(lower, upper, offset, sp.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + } + // Do the full mounty + else + { + // Prim shapes don't do center offsets, so add it here. + offset = offset + (lower + upper) * 0.5f * sp.Rotation; + Primitive omvPrim = MakeOpenMetaversePrim(upper - lower, offset, sp.Rotation, ScriptBaseClass.PRIM_TYPE_SPHERE); + SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); + AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); + mesh = null; + } + partCount++; + } + + groupCount++; + + // Return lower and upper bounding box corners + result.Add(new LSL_Vector(minPosition)); + result.Add(new LSL_Vector(maxPosition)); + if (m_addStatsInGetBoundingBox) + result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); + + primMesher = null; + return result; + } + + /// + /// Helper to calculate bounding box of an avatar. + /// + private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper) + { + // Adjust from OS model + // avatar height = visual height - 0.2, bounding box height = visual height + // to SL model + // avatar height = visual height, bounding box height = visual height + 0.2 + float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection; + + // According to avatar bounding box in SL 2015-04-18: + // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h> + // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5> + // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h> + + // When avatar is sitting + if (sp.ParentPart != null) + { + lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height); + upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height); + } + // When avatar is groundsitting + else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) + { + lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height); + upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height); + } + // When avatar is standing or flying + else + { + lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height); + upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height); + } + } + + /// + /// Helper to approximate a part with a simple box. + /// + private void AddBoundingBoxOfSimpleBox(Vector3 corner1, Vector3 corner2, Vector3 offset, Quaternion rotation, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) + { + // Parse the 8 box corners + for (int i = 0; i < 8; i++) + { + // Calculate each box corner + Vector3 position = corner1; + if ((i & 1) != 0) + position.X = corner2.X; + if ((i & 2) != 0) + position.Y = corner2.Y; + if ((i & 4) != 0) + position.Z = corner2.Z; + // Rotate part unless part is root + if (hasParent) + position = position * rotation; + position = position + offset; + // Adjust lower and upper bounding box corners if needed + lower = Vector3.Min(lower, position); + upper = Vector3.Max(upper, position); + count++; + } + } + + /// + /// Helper to parse a meshed prim and needed especially + /// for accuracy with tortured prims and sculpts. + /// + private void AddBoundingBoxOfSimpleMesh(SimpleMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) + { + // Quirk: A meshed box contains 10 instead of the 8 necessary vertices. + if (mesh != null) + { + // Parse each vertex in mesh + foreach (Vertex vertex in mesh.Vertices) + { + Vector3 position = vertex.Position; + position = position * prim.Scale; + // Rotate part unless part is root + if (hasParent) + position = position * prim.Rotation; + position = position + prim.Position; + // Adjust lower and upper bounding box corners if needed + lower = Vector3.Min(lower, position); + upper = Vector3.Max(upper, position); + count++; + } + } + } + + /// + /// Helper to parse mesh because no method exists + /// to parse mesh assets to SimpleMesh. + /// + private void AddBoundingBoxOfFacetedMesh(FacetedMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) + { + if (mesh != null) + { + // Parse each face in mesh + // since vertex array isn't populated. + // This parses each unique vertex 3-6 times. + foreach (Face face in mesh.Faces) + { + // Parse each vertex in face + foreach (Vertex vertex in face.Vertices) + { + Vector3 position = vertex.Position; + position = position * prim.Scale; + // Rotate part unless part is root + if (hasParent) + position = position * prim.Rotation; + position = position + prim.Position; + // Adjust lower and upper bounding box corners if needed + lower = Vector3.Min(lower, position); + upper = Vector3.Max(upper, position); + count++; + } + } + } + } + + /// + /// Helper to make up an OpenMetaverse prim + /// needed to create mesh from parts. + /// + private Primitive MakeOpenMetaversePrim(Vector3 scale, Vector3 position, Quaternion rotation, int primType) + { + // Initialize and set common parameters + Primitive prim = new OpenMetaverse.Primitive(); + prim.Scale = scale; + prim.Position = position; + prim.Rotation = rotation; + prim.PrimData.PathShearX = 0.0f; + prim.PrimData.PathShearY = 0.0f; + prim.PrimData.PathBegin = 0.0f; + prim.PrimData.PathEnd = 1.0f; + prim.PrimData.PathScaleX = 1.0f; + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.PathTaperX = 0.0f; + prim.PrimData.PathTaperY = 0.0f; + prim.PrimData.PathTwistBegin = 0.0f; + prim.PrimData.PathTwist = 0.0f; + prim.PrimData.ProfileBegin = 0.0f; + prim.PrimData.ProfileEnd = 1.0f; + prim.PrimData.ProfileHollow = 0.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)1; + prim.PrimData.ProfileHole = (HoleType)0; + prim.PrimData.PathCurve = (PathCurve)16; + prim.PrimData.PathRadiusOffset = 0.0f; + prim.PrimData.PathRevolutions = 1.0f; + prim.PrimData.PathSkew = 0.0f; + prim.PrimData.PCode = OpenMetaverse.PCode.Prim; + prim.PrimData.State = (byte)0; + + // Set type specific parameters + switch (primType) + { + // Set specific parameters for box + case ScriptBaseClass.PRIM_TYPE_BOX: + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)1; + prim.PrimData.PathCurve = (PathCurve)16; + break; + // Set specific parameters for cylinder + case ScriptBaseClass.PRIM_TYPE_CYLINDER: + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)0; + prim.PrimData.PathCurve = (PathCurve)16; + break; + // Set specific parameters for prism + case ScriptBaseClass.PRIM_TYPE_PRISM: + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)3; + prim.PrimData.PathCurve = (PathCurve)16; + break; + // Set specific parameters for sphere + case ScriptBaseClass.PRIM_TYPE_SPHERE: + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)5; + prim.PrimData.PathCurve = (PathCurve)32; + break; + // Set specific parameters for torus + case ScriptBaseClass.PRIM_TYPE_TORUS: + prim.PrimData.PathScaleY = 0.5f; + prim.PrimData.ProfileCurve = (ProfileCurve)0; + prim.PrimData.PathCurve = (PathCurve)32; + break; + // Set specific parameters for tube + case ScriptBaseClass.PRIM_TYPE_TUBE: + prim.PrimData.PathScaleY = 0.5f; + prim.PrimData.ProfileCurve = (ProfileCurve)1; + prim.PrimData.PathCurve = (PathCurve)32; + break; + // Set specific parameters for ring + case ScriptBaseClass.PRIM_TYPE_RING: + prim.PrimData.PathScaleY = 0.5f; + prim.PrimData.ProfileCurve = (ProfileCurve)3; + prim.PrimData.PathCurve = (PathCurve)32; + break; + // Set specific parameters for sculpt + case ScriptBaseClass.PRIM_TYPE_SCULPT: + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)5; + prim.PrimData.PathCurve = (PathCurve)32; + break; + // Default to specific parameters for box + default: + prim.PrimData.PathScaleY = 1.0f; + prim.PrimData.ProfileCurve = (ProfileCurve)1; + prim.PrimData.PathCurve = (PathCurve)16; + break; + } + + return prim; + } + + /// + /// Implementation of llGetGeometricCenter according to SL 2015-04-30. + /// http://wiki.secondlife.com/wiki/LlGetGeometricCenter + /// Returns the average position offset of all linked parts, + /// including the root prim and seated avatars, + /// relative to the root prim in local coordinates. + /// + public LSL_Vector llGetGeometricCenter() + { + // Subtract whatever position the root prim has to make it zero + Vector3 offset = m_host.ParentGroup.RootPart.OffsetPosition * -1.0f; + + // Add all prim/part position offsets + foreach (SceneObjectPart part in m_host.ParentGroup.Parts) + offset = offset + part.OffsetPosition; + // Add all avatar/scene presence position offsets + foreach (ScenePresence sp in m_host.ParentGroup.GetSittingAvatars()) + offset = offset + sp.OffsetPosition; + + // Calculate and return the average offset + offset = offset / (float)(m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount()); + return new LSL_Vector(offset); + } + + public LSL_List GetEntityParams(ISceneEntity entity, LSL_List rules) + { + LSL_List result = new LSL_List(); + LSL_List remaining = null; + + while (true) + { +// m_log.DebugFormat( +// "[LSL API]: GetEntityParams has {0} rules with scene entity named {1}", +// rules.Length, entity != null ? entity.Name : "NULL"); + + if (entity == null) + return result; + + if (entity is SceneObjectPart) + remaining = GetPrimParams((SceneObjectPart)entity, rules, ref result); + else + remaining = GetAgentParams((ScenePresence)entity, rules, ref result); + + if (remaining == null || remaining.Length < 2) + return result; + + int linknumber = remaining.GetLSLIntegerItem(0); + rules = remaining.GetSublist(1, -1); + entity = GetLinkEntity(m_host, linknumber); + } + } + + public LSL_List llGetPrimitiveParams(LSL_List rules) + { + m_host.AddScriptLPS(1); + + return GetEntityParams(m_host, rules); + } + + public LSL_List llGetLinkPrimitiveParams(int linknumber, LSL_List rules) + { + m_host.AddScriptLPS(1); + + return GetEntityParams(GetLinkEntity(m_host, linknumber), rules); + } + + public LSL_Vector GetAgentSize(ScenePresence sp) + { + return new LSL_Vector(0.45, 0.6, sp.Appearance.AvatarHeight); + } + + /// + /// Gets params for a seated avatar in a linkset. + /// + /// + /// + /// + /// + public LSL_List GetAgentParams(ScenePresence sp, LSL_List rules, ref LSL_List res) + { + int idx = 0; + while (idx < rules.Length) + { + int code = (int)rules.GetLSLIntegerItem(idx++); + int remain = rules.Length-idx; + + switch (code) + { + case (int)ScriptBaseClass.PRIM_MATERIAL: + res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MATERIAL_FLESH)); + break; + + case (int)ScriptBaseClass.PRIM_PHYSICS: + res.Add(ScriptBaseClass.FALSE); + break; + + case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: + res.Add(ScriptBaseClass.FALSE); + break; + + case (int)ScriptBaseClass.PRIM_PHANTOM: + res.Add(ScriptBaseClass.FALSE); + break; + + case (int)ScriptBaseClass.PRIM_POSITION: + res.Add(new LSL_Vector(sp.AbsolutePosition)); + break; + + case (int)ScriptBaseClass.PRIM_SIZE: + res.Add(GetAgentSize(sp)); + break; + + case (int)ScriptBaseClass.PRIM_ROTATION: + res.Add(sp.GetWorldRotation()); + break; + + case (int)ScriptBaseClass.PRIM_TYPE: + res.Add(new LSL_Integer(ScriptBaseClass.PRIM_TYPE_BOX)); + res.Add(new LSL_Integer(ScriptBaseClass.PRIM_HOLE_DEFAULT)); + res.Add(new LSL_Vector(0, 1, 0)); + res.Add(new LSL_Float(0)); + res.Add(new LSL_Vector(0, 0, 0)); + res.Add(new LSL_Vector(1, 1, 0)); + res.Add(new LSL_Vector(0, 0, 0)); + break; + + case (int)ScriptBaseClass.PRIM_TEXTURE: + if (remain < 1) + return null; + + int face = (int)rules.GetLSLIntegerItem(idx++); + if (face > 21) + break; + + res.Add(new LSL_String("")); + res.Add(ScriptBaseClass.ZERO_VECTOR); + res.Add(ScriptBaseClass.ZERO_VECTOR); + res.Add(new LSL_Float(0)); + break; + + case (int)ScriptBaseClass.PRIM_COLOR: + if (remain < 1) + return null; + + face = (int)rules.GetLSLIntegerItem(idx++); + if (face > 21) + break; + + res.Add(ScriptBaseClass.ZERO_VECTOR); + res.Add(new LSL_Float(0)); + break; + + case (int)ScriptBaseClass.PRIM_BUMP_SHINY: + if (remain < 1) + return null; + + face = (int)rules.GetLSLIntegerItem(idx++); + if (face > 21) + break; + + res.Add(ScriptBaseClass.PRIM_SHINY_NONE); + res.Add(ScriptBaseClass.PRIM_BUMP_NONE); + break; + + case (int)ScriptBaseClass.PRIM_FULLBRIGHT: + if (remain < 1) + return null; + + face = (int)rules.GetLSLIntegerItem(idx++); + if (face > 21) + break; + + res.Add(ScriptBaseClass.FALSE); + break; + + case (int)ScriptBaseClass.PRIM_FLEXIBLE: + res.Add(ScriptBaseClass.FALSE); + res.Add(new LSL_Integer(0)); + res.Add(new LSL_Float(0)); + res.Add(new LSL_Float(0)); + res.Add(new LSL_Float(0)); + res.Add(new LSL_Float(0)); + res.Add(ScriptBaseClass.ZERO_VECTOR); + break; + + case (int)ScriptBaseClass.PRIM_TEXGEN: + if (remain < 1) + return null; + + face = (int)rules.GetLSLIntegerItem(idx++); + if (face > 21) + break; + + res.Add(ScriptBaseClass.PRIM_TEXGEN_DEFAULT); + break; + + case (int)ScriptBaseClass.PRIM_POINT_LIGHT: + res.Add(ScriptBaseClass.FALSE); + res.Add(ScriptBaseClass.ZERO_VECTOR); + res.Add(ScriptBaseClass.ZERO_VECTOR); + break; + + case (int)ScriptBaseClass.PRIM_GLOW: + if (remain < 1) + return null; + + face = (int)rules.GetLSLIntegerItem(idx++); + if (face > 21) + break; + + res.Add(new LSL_Float(0)); + break; + + case (int)ScriptBaseClass.PRIM_TEXT: + res.Add(new LSL_String("")); + res.Add(ScriptBaseClass.ZERO_VECTOR); + res.Add(new LSL_Float(1)); + break; + + case (int)ScriptBaseClass.PRIM_ROT_LOCAL: + res.Add(new LSL_Rotation(sp.Rotation)); + break; + + case (int)ScriptBaseClass.PRIM_POS_LOCAL: + res.Add(new LSL_Vector(sp.OffsetPosition)); + break; + + case (int)ScriptBaseClass.PRIM_SLICE: + res.Add(new LSL_Vector(0, 1, 0)); + break; + + case (int)ScriptBaseClass.PRIM_LINK_TARGET: + if(remain < 3) + return null; + + return rules.GetSublist(idx, -1); + } + } + + return null; + } + + public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) + { + int idx = 0; + while (idx < rules.Length) + { + int code = (int)rules.GetLSLIntegerItem(idx++); + int remain = rules.Length - idx; + + switch (code) + { + case (int)ScriptBaseClass.PRIM_MATERIAL: + res.Add(new LSL_Integer(part.Material)); + break; + + case (int)ScriptBaseClass.PRIM_PHYSICS: + if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.Physics) != 0) + res.Add(new LSL_Integer(1)); + else + res.Add(new LSL_Integer(0)); + break; + + case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: + if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.TemporaryOnRez) != 0) + res.Add(new LSL_Integer(1)); + else + res.Add(new LSL_Integer(0)); + break; + + case (int)ScriptBaseClass.PRIM_PHANTOM: + if ((part.GetEffectiveObjectFlags() & (uint)PrimFlags.Phantom) != 0) + res.Add(new LSL_Integer(1)); + else + res.Add(new LSL_Integer(0)); + break; + + case (int)ScriptBaseClass.PRIM_POSITION: + LSL_Vector v = new LSL_Vector(part.AbsolutePosition); + + // For some reason, the part.AbsolutePosition.* values do not change if the + // linkset is rotated; they always reflect the child prim's world position + // as though the linkset is unrotated. This is incompatible behavior with SL's + // implementation, so will break scripts imported from there (not to mention it + // makes it more difficult to determine a child prim's actual inworld position). + if (!part.IsRoot) + { + LSL_Vector rootPos = new LSL_Vector(m_host.ParentGroup.AbsolutePosition); + v = ((v - rootPos) * llGetRootRotation()) + rootPos; + } + + res.Add(v); + break; + + case (int)ScriptBaseClass.PRIM_SIZE: + res.Add(new LSL_Vector(part.Scale)); + break; + + case (int)ScriptBaseClass.PRIM_ROTATION: + res.Add(GetPartRot(part)); + break; + + case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: + res.Add(new LSL_Integer((int)part.PhysicsShapeType)); + break; + + case (int)ScriptBaseClass.PRIM_TYPE: + // implementing box + PrimitiveBaseShape Shape = part.Shape; + int primType = (int)part.GetPrimType(); + res.Add(new LSL_Integer(primType)); + double topshearx = (double)(sbyte)Shape.PathShearX / 100.0; // Fix negative values for PathShearX + double topsheary = (double)(sbyte)Shape.PathShearY / 100.0; // and PathShearY. + switch (primType) + { + case ScriptBaseClass.PRIM_TYPE_BOX: + case ScriptBaseClass.PRIM_TYPE_CYLINDER: + case ScriptBaseClass.PRIM_TYPE_PRISM: + res.Add(new LSL_Integer(Shape.ProfileCurve) & 0xf0); // Isolate hole shape nibble. + res.Add(new LSL_Vector(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); + res.Add(new LSL_Float(Shape.ProfileHollow / 50000.0)); + res.Add(new LSL_Vector(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); + res.Add(new LSL_Vector(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0)); + res.Add(new LSL_Vector(topshearx, topsheary, 0)); + break; + + case ScriptBaseClass.PRIM_TYPE_SPHERE: + res.Add(new LSL_Integer(Shape.ProfileCurve) & 0xf0); // Isolate hole shape nibble. + res.Add(new LSL_Vector(Shape.PathBegin / 50000.0, 1 - Shape.PathEnd / 50000.0, 0)); + res.Add(new LSL_Float(Shape.ProfileHollow / 50000.0)); + res.Add(new LSL_Vector(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); + res.Add(new LSL_Vector(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); + break; + + case ScriptBaseClass.PRIM_TYPE_SCULPT: + res.Add(new LSL_String(Shape.SculptTexture.ToString())); + res.Add(new LSL_Integer(Shape.SculptType)); + break; + + case ScriptBaseClass.PRIM_TYPE_RING: + case ScriptBaseClass.PRIM_TYPE_TUBE: + case ScriptBaseClass.PRIM_TYPE_TORUS: + // holeshape + res.Add(new LSL_Integer(Shape.ProfileCurve) & 0xf0); // Isolate hole shape nibble. + + // cut + res.Add(new LSL_Vector(Shape.PathBegin / 50000.0, 1 - Shape.PathEnd / 50000.0, 0)); + + // hollow + res.Add(new LSL_Float(Shape.ProfileHollow / 50000.0)); + + // twist + res.Add(new LSL_Vector(Shape.PathTwistBegin / 100.0, Shape.PathTwist / 100.0, 0)); + + // vector holesize + res.Add(new LSL_Vector(1 - (Shape.PathScaleX / 100.0 - 1), 1 - (Shape.PathScaleY / 100.0 - 1), 0)); + + // vector topshear + res.Add(new LSL_Vector(topshearx, topsheary, 0)); + + // vector profilecut + res.Add(new LSL_Vector(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); + + // vector tapera + res.Add(new LSL_Vector(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0)); + + // float revolutions + res.Add(new LSL_Float(Math.Round(Shape.PathRevolutions * 0.015d, 2, MidpointRounding.AwayFromZero)) + 1.0d); + // Slightly inaccurate, because an unsigned byte is being used to represent + // the entire range of floating-point values from 1.0 through 4.0 (which is how + // SL does it). + // + // Using these formulas to store and retrieve PathRevolutions, it is not + // possible to use all values between 1.00 and 4.00. For instance, you can't + // represent 1.10. You can represent 1.09 and 1.11, but not 1.10. So, if you + // use llSetPrimitiveParams to set revolutions to 1.10 and then retreive them + // with llGetPrimitiveParams, you'll retrieve 1.09. You can also see a similar + // behavior in the viewer as you cannot set 1.10. The viewer jumps to 1.11. + // In SL, llSetPrimitveParams and llGetPrimitiveParams can set and get a value + // such as 1.10. So, SL must store and retreive the actual user input rather + // than only storing the encoded value. + + // float radiusoffset + res.Add(new LSL_Float(Shape.PathRadiusOffset / 100.0)); + + // float skew + res.Add(new LSL_Float(Shape.PathSkew / 100.0)); + break; + } + break; + + case (int)ScriptBaseClass.PRIM_TEXTURE: + if (remain < 1) + return null; + + int face = (int)rules.GetLSLIntegerItem(idx++); + Primitive.TextureEntry tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + for (face = 0 ; face < GetNumberOfSides(part); face++) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + + res.Add(new LSL_String(texface.TextureID.ToString())); + res.Add(new LSL_Vector(texface.RepeatU, + texface.RepeatV, + 0)); + res.Add(new LSL_Vector(texface.OffsetU, + texface.OffsetV, + 0)); + res.Add(new LSL_Float(texface.Rotation)); + } + } + else + { + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + + res.Add(new LSL_String(texface.TextureID.ToString())); + res.Add(new LSL_Vector(texface.RepeatU, + texface.RepeatV, + 0)); + res.Add(new LSL_Vector(texface.OffsetU, + texface.OffsetV, + 0)); + res.Add(new LSL_Float(texface.Rotation)); + } + } + break; + + case (int)ScriptBaseClass.PRIM_COLOR: + if (remain < 1) + return null; + + face=(int)rules.GetLSLIntegerItem(idx++); + + tex = part.Shape.Textures; + Color4 texcolor; + if (face == ScriptBaseClass.ALL_SIDES) + { + for (face = 0 ; face < GetNumberOfSides(part); face++) + { + texcolor = tex.GetFace((uint)face).RGBA; + res.Add(new LSL_Vector(texcolor.R, + texcolor.G, + texcolor.B)); + res.Add(new LSL_Float(texcolor.A)); + } + } + else + { + texcolor = tex.GetFace((uint)face).RGBA; + res.Add(new LSL_Vector(texcolor.R, + texcolor.G, + texcolor.B)); + res.Add(new LSL_Float(texcolor.A)); + } + break; + + case (int)ScriptBaseClass.PRIM_BUMP_SHINY: + if (remain < 1) + return null; + + face=(int)rules.GetLSLIntegerItem(idx++); + + tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + for (face = 0; face < GetNumberOfSides(part); face++) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + // Convert Shininess to PRIM_SHINY_* + res.Add(new LSL_Integer((uint)texface.Shiny >> 6)); + // PRIM_BUMP_* + res.Add(new LSL_Integer((int)texface.Bump)); + } + } + else + { + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + // Convert Shininess to PRIM_SHINY_* + res.Add(new LSL_Integer((uint)texface.Shiny >> 6)); + // PRIM_BUMP_* + res.Add(new LSL_Integer((int)texface.Bump)); + } + } + break; + + case (int)ScriptBaseClass.PRIM_FULLBRIGHT: + if (remain < 1) + return null; + + face = (int)rules.GetLSLIntegerItem(idx++); + + tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + for (face = 0; face < GetNumberOfSides(part); face++) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0)); + } + } + else + { + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + res.Add(new LSL_Integer(texface.Fullbright ? 1 : 0)); + } + } + break; + + case (int)ScriptBaseClass.PRIM_FLEXIBLE: + PrimitiveBaseShape shape = part.Shape; + + if (shape.FlexiEntry) + res.Add(new LSL_Integer(1)); // active + else + res.Add(new LSL_Integer(0)); + res.Add(new LSL_Integer(shape.FlexiSoftness));// softness + res.Add(new LSL_Float(shape.FlexiGravity)); // gravity + res.Add(new LSL_Float(shape.FlexiDrag)); // friction + res.Add(new LSL_Float(shape.FlexiWind)); // wind + res.Add(new LSL_Float(shape.FlexiTension)); // tension + res.Add(new LSL_Vector(shape.FlexiForceX, // force + shape.FlexiForceY, + shape.FlexiForceZ)); + break; + + case (int)ScriptBaseClass.PRIM_TEXGEN: + if (remain < 1) + return null; + + face=(int)rules.GetLSLIntegerItem(idx++); + + tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + for (face = 0; face < GetNumberOfSides(part); face++) + { + MappingType texgen = tex.GetFace((uint)face).TexMapType; + // Convert MappingType to PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR etc. + res.Add(new LSL_Integer((uint)texgen >> 1)); + } + } + else + { + if (face >= 0 && face < GetNumberOfSides(part)) + { + MappingType texgen = tex.GetFace((uint)face).TexMapType; + res.Add(new LSL_Integer((uint)texgen >> 1)); + } + } + break; + + case (int)ScriptBaseClass.PRIM_POINT_LIGHT: + shape = part.Shape; + + if (shape.LightEntry) + res.Add(new LSL_Integer(1)); // active + else + res.Add(new LSL_Integer(0)); + res.Add(new LSL_Vector(shape.LightColorR, // color + shape.LightColorG, + shape.LightColorB)); + res.Add(new LSL_Float(shape.LightIntensity)); // intensity + res.Add(new LSL_Float(shape.LightRadius)); // radius + res.Add(new LSL_Float(shape.LightFalloff)); // falloff + break; + + case (int)ScriptBaseClass.PRIM_GLOW: + if (remain < 1) + return null; + + face=(int)rules.GetLSLIntegerItem(idx++); + + tex = part.Shape.Textures; + if (face == ScriptBaseClass.ALL_SIDES) + { + for (face = 0; face < GetNumberOfSides(part); face++) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + res.Add(new LSL_Float(texface.Glow)); + } + } + else + { + if (face >= 0 && face < GetNumberOfSides(part)) + { + Primitive.TextureEntryFace texface = tex.GetFace((uint)face); + res.Add(new LSL_Float(texface.Glow)); + } + } + break; + + case (int)ScriptBaseClass.PRIM_TEXT: + Color4 textColor = part.GetTextColor(); + res.Add(new LSL_String(part.Text)); + res.Add(new LSL_Vector(textColor.R, + textColor.G, + textColor.B)); + res.Add(new LSL_Float(1.0 - textColor.A)); + break; + case (int)ScriptBaseClass.PRIM_NAME: + res.Add(new LSL_String(part.Name)); + break; + case (int)ScriptBaseClass.PRIM_DESC: + res.Add(new LSL_String(part.Description)); + break; + case (int)ScriptBaseClass.PRIM_ROT_LOCAL: + res.Add(new LSL_Rotation(part.RotationOffset)); + break; + case (int)ScriptBaseClass.PRIM_POS_LOCAL: + res.Add(new LSL_Vector(GetPartLocalPos(part))); + break; + case (int)ScriptBaseClass.PRIM_SLICE: + PrimType prim_type = part.GetPrimType(); + bool useProfileBeginEnd = (prim_type == PrimType.SPHERE || prim_type == PrimType.TORUS || prim_type == PrimType.TUBE || prim_type == PrimType.RING); + res.Add(new LSL_Vector( + (useProfileBeginEnd ? part.Shape.ProfileBegin : part.Shape.PathBegin) / 50000.0, + 1 - (useProfileBeginEnd ? part.Shape.ProfileEnd : part.Shape.PathEnd) / 50000.0, + 0 + )); + break; + case (int)ScriptBaseClass.PRIM_LINK_TARGET: + + // TODO: Should be issuing a runtime script warning in this case. + if (remain < 2) + return null; + + return rules.GetSublist(idx, -1); + } + } + + return null; + } + + public LSL_List llGetPrimMediaParams(int face, LSL_List rules) + { + m_host.AddScriptLPS(1); + ScriptSleep(m_sleepMsOnGetPrimMediaParams); + return GetPrimMediaParams(m_host, face, rules); + } + + public LSL_List llGetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) + { + m_host.AddScriptLPS(1); + ScriptSleep(m_sleepMsOnGetLinkMedia); + if (link == ScriptBaseClass.LINK_ROOT) + return GetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); + else if (link == ScriptBaseClass.LINK_THIS) + return GetPrimMediaParams(m_host, face, rules); + else + { + SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); + if (null != part) + return GetPrimMediaParams(part, face, rules); + } + + return new LSL_List(); + } + + private LSL_List GetPrimMediaParams(SceneObjectPart part, int face, LSL_List rules) + { + // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid + // TODO: Need to correctly handle case where a face has no media (which gives back an empty list). + // Assuming silently fail means give back an empty list. Ideally, need to check this. + if (face < 0 || face > part.GetNumberOfSides() - 1) + return new LSL_List(); + + IMoapModule module = m_ScriptEngine.World.RequestModuleInterface(); + if (null == module) + return new LSL_List(); + + MediaEntry me = module.GetMediaEntry(part, face); + + // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams + if (null == me) + return new LSL_List(); + + LSL_List res = new LSL_List(); + + for (int i = 0; i < rules.Length; i++) + { + int code = (int)rules.GetLSLIntegerItem(i); + + switch (code) + { + case ScriptBaseClass.PRIM_MEDIA_ALT_IMAGE_ENABLE: + // Not implemented + res.Add(new LSL_Integer(0)); + break; + + case ScriptBaseClass.PRIM_MEDIA_CONTROLS: + if (me.Controls == MediaControls.Standard) + res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MEDIA_CONTROLS_STANDARD)); + else + res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MEDIA_CONTROLS_MINI)); + break; + + case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL: + res.Add(new LSL_String(me.CurrentURL)); + break; + + case ScriptBaseClass.PRIM_MEDIA_HOME_URL: + res.Add(new LSL_String(me.HomeURL)); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP: + res.Add(me.AutoLoop ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_PLAY: + res.Add(me.AutoPlay ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_SCALE: + res.Add(me.AutoScale ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_ZOOM: + res.Add(me.AutoZoom ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); + break; + + case ScriptBaseClass.PRIM_MEDIA_FIRST_CLICK_INTERACT: + res.Add(me.InteractOnFirstClick ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); + break; + + case ScriptBaseClass.PRIM_MEDIA_WIDTH_PIXELS: + res.Add(new LSL_Integer(me.Width)); + break; + + case ScriptBaseClass.PRIM_MEDIA_HEIGHT_PIXELS: + res.Add(new LSL_Integer(me.Height)); + break; + + case ScriptBaseClass.PRIM_MEDIA_WHITELIST_ENABLE: + res.Add(me.EnableWhiteList ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE); + break; + + case ScriptBaseClass.PRIM_MEDIA_WHITELIST: + string[] urls = (string[])me.WhiteList.Clone(); + + for (int j = 0; j < urls.Length; j++) + urls[j] = Uri.EscapeDataString(urls[j]); + + res.Add(new LSL_String(string.Join(", ", urls))); + break; + + case ScriptBaseClass.PRIM_MEDIA_PERMS_INTERACT: + res.Add(new LSL_Integer((int)me.InteractPermissions)); + break; + + case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: + res.Add(new LSL_Integer((int)me.ControlPermissions)); + break; + + default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS; + } + } + + return res; + } + + public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules) + { + m_host.AddScriptLPS(1); + ScriptSleep(m_sleepMsOnSetPrimMediaParams); + return SetPrimMediaParams(m_host, face, rules); + } + + public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) + { + m_host.AddScriptLPS(1); + ScriptSleep(m_sleepMsOnSetLinkMedia); + if (link == ScriptBaseClass.LINK_ROOT) + return SetPrimMediaParams(m_host.ParentGroup.RootPart, face, rules); + else if (link == ScriptBaseClass.LINK_THIS) + return SetPrimMediaParams(m_host, face, rules); + else + { + SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); + if (null != part) + return SetPrimMediaParams(part, face, rules); + } + + return ScriptBaseClass.LSL_STATUS_NOT_FOUND; + } + + private LSL_Integer SetPrimMediaParams(SceneObjectPart part, LSL_Integer face, LSL_List rules) + { + // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid + // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. + // Don't perform the media check directly + if (face < 0 || face > part.GetNumberOfSides() - 1) + return ScriptBaseClass.LSL_STATUS_NOT_FOUND; + + IMoapModule module = m_ScriptEngine.World.RequestModuleInterface(); + if (null == module) + return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED; + + MediaEntry me = module.GetMediaEntry(part, face); + if (null == me) + me = new MediaEntry(); + + int i = 0; + + while (i < rules.Length - 1) + { + int code = rules.GetLSLIntegerItem(i++); + + switch (code) + { + case ScriptBaseClass.PRIM_MEDIA_ALT_IMAGE_ENABLE: + me.EnableAlterntiveImage = (rules.GetLSLIntegerItem(i++) != 0 ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_CONTROLS: + int v = rules.GetLSLIntegerItem(i++); + if (ScriptBaseClass.PRIM_MEDIA_CONTROLS_STANDARD == v) + me.Controls = MediaControls.Standard; + else + me.Controls = MediaControls.Mini; + break; + + case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL: + me.CurrentURL = rules.GetLSLStringItem(i++); + break; + + case ScriptBaseClass.PRIM_MEDIA_HOME_URL: + me.HomeURL = rules.GetLSLStringItem(i++); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP: + me.AutoLoop = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_PLAY: + me.AutoPlay = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_SCALE: + me.AutoScale = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_AUTO_ZOOM: + me.AutoZoom = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_FIRST_CLICK_INTERACT: + me.InteractOnFirstClick = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_WIDTH_PIXELS: + me.Width = (int)rules.GetLSLIntegerItem(i++); + break; + + case ScriptBaseClass.PRIM_MEDIA_HEIGHT_PIXELS: + me.Height = (int)rules.GetLSLIntegerItem(i++); + break; + + case ScriptBaseClass.PRIM_MEDIA_WHITELIST_ENABLE: + me.EnableWhiteList = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false); + break; + + case ScriptBaseClass.PRIM_MEDIA_WHITELIST: + string[] rawWhiteListUrls = rules.GetLSLStringItem(i++).ToString().Split(new char[] { ',' }); + List whiteListUrls = new List(); + Array.ForEach( + rawWhiteListUrls, delegate(string rawUrl) { whiteListUrls.Add(rawUrl.Trim()); }); + me.WhiteList = whiteListUrls.ToArray(); + break; + + case ScriptBaseClass.PRIM_MEDIA_PERMS_INTERACT: + me.InteractPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); + break; + + case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL: + me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++); + break; + + default: return ScriptBaseClass.LSL_STATUS_MALFORMED_PARAMS; + } + } + + module.SetMediaEntry(part, face, me); + + return ScriptBaseClass.LSL_STATUS_OK; + } + + public LSL_Integer llClearPrimMedia(LSL_Integer face) + { + m_host.AddScriptLPS(1); + ScriptSleep(m_sleepMsOnClearPrimMedia); + return ClearPrimMedia(m_host, face); + } + + public LSL_Integer llClearLinkMedia(LSL_Integer link, LSL_Integer face) + { + m_host.AddScriptLPS(1); + ScriptSleep(m_sleepMsOnClearLinkMedia); + if (link == ScriptBaseClass.LINK_ROOT) + return ClearPrimMedia(m_host.ParentGroup.RootPart, face); + else if (link == ScriptBaseClass.LINK_THIS) + return ClearPrimMedia(m_host, face); + else + { + SceneObjectPart part = m_host.ParentGroup.GetLinkNumPart(link); + if (null != part) + return ClearPrimMedia(part, face); + } + + return ScriptBaseClass.LSL_STATUS_NOT_FOUND; + } + + private LSL_Integer ClearPrimMedia(SceneObjectPart part, LSL_Integer face) + { + // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid + // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this. + // FIXME: Don't perform the media check directly + if (face < 0 || face > part.GetNumberOfSides() - 1) + return ScriptBaseClass.LSL_STATUS_NOT_FOUND; + + IMoapModule module = m_ScriptEngine.World.RequestModuleInterface(); + if (null == module) + return ScriptBaseClass.LSL_STATUS_NOT_SUPPORTED; + + module.ClearMediaEntry(part, face); + + return ScriptBaseClass.LSL_STATUS_OK; + } + + // + // + // The .NET definition of base 64 is: + // + // + // Significant: A-Z a-z 0-9 + - + // + // + // Whitespace: \t \n \r ' ' + // + // + // Valueless: = + // + // + // End-of-string: \0 or '==' + // + // + // + // + // Each point in a base-64 string represents + // a 6 bit value. A 32-bit integer can be + // represented using 6 characters (with some + // redundancy). + // + // + // LSL requires a base64 string to be 8 + // characters in length. LSL also uses '/' + // rather than '-' (MIME compliant). + // + // + // RFC 1341 used as a reference (as specified + // by the SecondLife Wiki). + // + // + // SL do not record any kind of exception for + // these functions, so the string to integer + // conversion returns '0' if an invalid + // character is encountered during conversion. + // + // + // References + // + // + // http://lslwiki.net/lslwiki/wakka.php?wakka=Base64 + // + // + // + // + // + // + + // + // Table for converting 6-bit integers into + // base-64 characters + // + + protected static readonly char[] i2ctable = + { + 'A','B','C','D','E','F','G','H', + 'I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X', + 'Y','Z', + 'a','b','c','d','e','f','g','h', + 'i','j','k','l','m','n','o','p', + 'q','r','s','t','u','v','w','x', + 'y','z', + '0','1','2','3','4','5','6','7', + '8','9', + '+','/' + }; + + // + // Table for converting base-64 characters + // into 6-bit integers. + // + + protected static readonly int[] c2itable = + { + -1,-1,-1,-1,-1,-1,-1,-1, // 0x + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // 1x + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // 2x + -1,-1,-1,63,-1,-1,-1,64, + 53,54,55,56,57,58,59,60, // 3x + 61,62,-1,-1,-1,0,-1,-1, + -1,1,2,3,4,5,6,7, // 4x + 8,9,10,11,12,13,14,15, + 16,17,18,19,20,21,22,23, // 5x + 24,25,26,-1,-1,-1,-1,-1, + -1,27,28,29,30,31,32,33, // 6x + 34,35,36,37,38,39,40,41, + 42,43,44,45,46,47,48,49, // 7x + 50,51,52,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // 8x + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // 9x + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // Ax + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // Bx + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // Cx + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // Dx + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // Ex + -1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1, // Fx + -1,-1,-1,-1,-1,-1,-1,-1 + }; + + // + // Converts a 32-bit integer into a Base64 + // character string. Base64 character strings + // are always 8 characters long. All iinteger + // values are acceptable. + // + // + // 32-bit integer to be converted. + // + // + // 8 character string. The 1st six characters + // contain the encoded number, the last two + // characters are padded with "=". + // + + public LSL_String llIntegerToBase64(int number) + { + // uninitialized string + + char[] imdt = new char[8]; + + m_host.AddScriptLPS(1); + + // Manually unroll the loop + + imdt[7] = '='; + imdt[6] = '='; + imdt[5] = i2ctable[number<<4 & 0x3F]; + imdt[4] = i2ctable[number>>2 & 0x3F]; + imdt[3] = i2ctable[number>>8 & 0x3F]; + imdt[2] = i2ctable[number>>14 & 0x3F]; + imdt[1] = i2ctable[number>>20 & 0x3F]; + imdt[0] = i2ctable[number>>26 & 0x3F]; + + return new string(imdt); + } + + // + // Converts an eight character base-64 string + // into a 32-bit integer. + // + // + // 8 characters string to be converted. Other + // length strings return zero. + // + // + // Returns an integer representing the + // encoded value providedint he 1st 6 + // characters of the string. + // + // + // This is coded to behave like LSL's + // implementation (I think), based upon the + // information available at the Wiki. + // If more than 8 characters are supplied, + // zero is returned. + // If a NULL string is supplied, zero will + // be returned. + // If fewer than 6 characters are supplied, then + // the answer will reflect a partial + // accumulation. + // + // The 6-bit segments are + // extracted left-to-right in big-endian mode, + // which means that segment 6 only contains the + // two low-order bits of the 32 bit integer as + // its high order 2 bits. A short string therefore + // means loss of low-order information. E.g. + // + // |<---------------------- 32-bit integer ----------------------->|<-Pad->| + // |<--Byte 0----->|<--Byte 1----->|<--Byte 2----->|<--Byte 3----->|<-Pad->| + // |3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1| | | | | | | | | | |P|P|P|P| + // |1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|P|P|P|P| + // | str[0] | str[1] | str[2] | str[3] | str[4] | str[6] | + // + // + // + + public LSL_Integer llBase64ToInteger(string str) + { + int number = 0; + int digit; + + m_host.AddScriptLPS(1); + + // Require a well-fromed base64 string + + if (str.Length > 8) + return 0; + + // The loop is unrolled in the interests + // of performance and simple necessity. + // + // MUST find 6 digits to be well formed + // -1 == invalid + // 0 == padding + + if ((digit = c2itable[str[0]]) <= 0) + { + return digit < 0 ? (int)0 : number; + } + number += --digit<<26; + + if ((digit = c2itable[str[1]]) <= 0) + { + return digit < 0 ? (int)0 : number; + } + number += --digit<<20; + + if ((digit = c2itable[str[2]]) <= 0) + { + return digit < 0 ? (int)0 : number; + } + number += --digit<<14; + + if ((digit = c2itable[str[3]]) <= 0) + { + return digit < 0 ? (int)0 : number; + } + number += --digit<<8; + + if ((digit = c2itable[str[4]]) <= 0) + { + return digit < 0 ? (int)0 : number; + } + number += --digit<<2; + + if ((digit = c2itable[str[5]]) <= 0) + { + return digit < 0 ? (int)0 : number; + } + number += --digit>>4; + + // ignore trailing padding + + return number; + } + + public LSL_Float llGetGMTclock() + { + m_host.AddScriptLPS(1); + return DateTime.UtcNow.TimeOfDay.TotalSeconds; + } + + public LSL_String llGetHTTPHeader(LSL_Key request_id, string header) + { + m_host.AddScriptLPS(1); + + if (m_UrlModule != null) + return m_UrlModule.GetHttpHeader(new UUID(request_id), header); + return String.Empty; + } + + + public LSL_String llGetSimulatorHostname() + { + m_host.AddScriptLPS(1); + IUrlModule UrlModule = World.RequestModuleInterface(); + return UrlModule.ExternalHostNameForLSL; + } + + // + // Scan the string supplied in 'src' and + // tokenize it based upon two sets of + // tokenizers provided in two lists, + // separators and spacers. + // + // + // + // Separators demarcate tokens and are + // elided as they are encountered. Spacers + // also demarcate tokens, but are themselves + // retained as tokens. + // + // Both separators and spacers may be arbitrarily + // long strings. i.e. ":::". + // + // The function returns an ordered list + // representing the tokens found in the supplied + // sources string. If two successive tokenizers + // are encountered, then a NULL entry is added + // to the list. + // + // It is a precondition that the source and + // toekizer lisst are non-null. If they are null, + // then a null pointer exception will be thrown + // while their lengths are being determined. + // + // A small amount of working memoryis required + // of approximately 8*#tokenizers. + // + // There are many ways in which this function + // can be implemented, this implementation is + // fairly naive and assumes that when the + // function is invooked with a short source + // string and/or short lists of tokenizers, then + // performance will not be an issue. + // + // In order to minimize the perofrmance + // effects of long strings, or large numbers + // of tokeizers, the function skips as far as + // possible whenever a toekenizer is found, + // and eliminates redundant tokenizers as soon + // as is possible. + // + // The implementation tries to avoid any copying + // of arrays or other objects. + // + + private LSL_List ParseString(string src, LSL_List separators, LSL_List spacers, bool keepNulls) + { + int beginning = 0; + int srclen = src.Length; + int seplen = separators.Length; + object[] separray = separators.Data; + int spclen = spacers.Length; + object[] spcarray = spacers.Data; + int mlen = seplen+spclen; + + int[] offset = new int[mlen+1]; + bool[] active = new bool[mlen]; + + int best; + int j; + + // Initial capacity reduces resize cost + + LSL_List tokens = new LSL_List(); + + // All entries are initially valid + + for (int i = 0; i < mlen; i++) + active[i] = true; + + offset[mlen] = srclen; + + while (beginning < srclen) + { + + best = mlen; // as bad as it gets + + // Scan for separators + + for (j = 0; j < seplen; j++) + { + if (separray[j].ToString() == String.Empty) + active[j] = false; + + if (active[j]) + { + // scan all of the markers + if ((offset[j] = src.IndexOf(separray[j].ToString(), beginning)) == -1) + { + // not present at all + active[j] = false; + } + else + { + // present and correct + if (offset[j] < offset[best]) + { + // closest so far + best = j; + if (offset[best] == beginning) + break; + } + } + } + } + + // Scan for spacers + + if (offset[best] != beginning) + { + for (j = seplen; (j < mlen) && (offset[best] > beginning); j++) + { + if (spcarray[j-seplen].ToString() == String.Empty) + active[j] = false; + + if (active[j]) + { + // scan all of the markers + if ((offset[j] = src.IndexOf(spcarray[j-seplen].ToString(), beginning)) == -1) + { + // not present at all + active[j] = false; + } + else + { + // present and correct + if (offset[j] < offset[best]) + { + // closest so far + best = j; + } + } + } + } + } + + // This is the normal exit from the scanning loop + + if (best == mlen) + { + // no markers were found on this pass + // so we're pretty much done + if ((keepNulls) || ((!keepNulls) && (srclen - beginning) > 0)) + tokens.Add(new LSL_String(src.Substring(beginning, srclen - beginning))); + break; + } + + // Otherwise we just add the newly delimited token + // and recalculate where the search should continue. + if ((keepNulls) || ((!keepNulls) && (offset[best] - beginning) > 0)) + tokens.Add(new LSL_String(src.Substring(beginning,offset[best]-beginning))); + + if (best < seplen) + { + beginning = offset[best] + (separray[best].ToString()).Length; + } + else + { + beginning = offset[best] + (spcarray[best - seplen].ToString()).Length; + string str = spcarray[best - seplen].ToString(); + if ((keepNulls) || ((!keepNulls) && (str.Length > 0))) + tokens.Add(new LSL_String(str)); + } + } + + // This an awkward an not very intuitive boundary case. If the + // last substring is a tokenizer, then there is an implied trailing + // null list entry. Hopefully the single comparison will not be too + // arduous. Alternatively the 'break' could be replced with a return + // but that's shabby programming. + + if ((beginning == srclen) && (keepNulls)) + { + if (srclen != 0) + tokens.Add(new LSL_String("")); + } + + return tokens; + } + + public LSL_List llParseString2List(string src, LSL_List separators, LSL_List spacers) + { + m_host.AddScriptLPS(1); + return this.ParseString(src, separators, spacers, false); + } + + public LSL_List llParseStringKeepNulls(string src, LSL_List separators, LSL_List spacers) + { + m_host.AddScriptLPS(1); + return this.ParseString(src, separators, spacers, true); + } + + public LSL_Integer llGetObjectPermMask(int mask) + { + m_host.AddScriptLPS(1); + + int permmask = 0; + + if (mask == ScriptBaseClass.MASK_BASE)//0 + { + permmask = (int)m_host.BaseMask; + } + + else if (mask == ScriptBaseClass.MASK_OWNER)//1 + { + permmask = (int)m_host.OwnerMask; + } + + else if (mask == ScriptBaseClass.MASK_GROUP)//2 + { + permmask = (int)m_host.GroupMask; + } + + else if (mask == ScriptBaseClass.MASK_EVERYONE)//3 + { + permmask = (int)m_host.EveryoneMask; + } + + else if (mask == ScriptBaseClass.MASK_NEXT)//4 + { + permmask = (int)m_host.NextOwnerMask; + } + + return permmask; + } + + public void llSetObjectPermMask(int mask, int value) + { + m_host.AddScriptLPS(1); + + if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) + { + if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) + { + if (mask == ScriptBaseClass.MASK_BASE)//0 + { + m_host.BaseMask = (uint)value; + } + + else if (mask == ScriptBaseClass.MASK_OWNER)//1 + { + m_host.OwnerMask = (uint)value; + } + + else if (mask == ScriptBaseClass.MASK_GROUP)//2 + { + m_host.GroupMask = (uint)value; + } + + else if (mask == ScriptBaseClass.MASK_EVERYONE)//3 + { + m_host.EveryoneMask = (uint)value; + } + + else if (mask == ScriptBaseClass.MASK_NEXT)//4 + { + m_host.NextOwnerMask = (uint)value; + } + } + } + } + + public LSL_Integer llGetInventoryPermMask(string itemName, int mask) + { + m_host.AddScriptLPS(1); + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName); + + if (item == null) + return -1; + + switch (mask) + { + case 0: + return (int)item.BasePermissions; + case 1: + return (int)item.CurrentPermissions; + case 2: + return (int)item.GroupPermissions; + case 3: + return (int)item.EveryonePermissions; + case 4: + return (int)item.NextPermissions; + } + + return -1; + } + + public void llSetInventoryPermMask(string itemName, int mask, int value) + { + m_host.AddScriptLPS(1); + + if (m_ScriptEngine.Config.GetBoolean("AllowGodFunctions", false)) + { + if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) + { + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName); + + if (item != null) + { + switch (mask) + { + case 0: + item.BasePermissions = (uint)value; + break; + case 1: + item.CurrentPermissions = (uint)value; + break; + case 2: + item.GroupPermissions = (uint)value; + break; + case 3: + item.EveryonePermissions = (uint)value; + break; + case 4: + item.NextPermissions = (uint)value; + break; + } + } + } + } + } + + public LSL_String llGetInventoryCreator(string itemName) + { + m_host.AddScriptLPS(1); + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(itemName); + + if (item == null) + { + Error("llGetInventoryCreator", "Can't find item '" + item + "'"); + + return String.Empty; + } + + return item.CreatorID.ToString(); + } + + public void llOwnerSay(string msg) + { + m_host.AddScriptLPS(1); + + World.SimChatBroadcast(Utils.StringToBytes(msg), ChatTypeEnum.Owner, 0, + m_host.AbsolutePosition, m_host.Name, m_host.UUID, false); +// IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); +// wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); + } + + public LSL_String llRequestSecureURL() + { + m_host.AddScriptLPS(1); + if (m_UrlModule != null) + return m_UrlModule.RequestSecureURL(m_ScriptEngine.ScriptModule, m_host, m_item.ItemID).ToString(); + return UUID.Zero.ToString(); + } + + public LSL_String llRequestSimulatorData(string simulator, int data) + { + IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "OSSL"); + + try + { + m_host.AddScriptLPS(1); + + string reply = String.Empty; + + GridRegion info; + + if (World.RegionInfo.RegionName == simulator) + info = new GridRegion(World.RegionInfo); + else + info = World.GridService.GetRegionByName(m_ScriptEngine.World.RegionInfo.ScopeID, simulator); + + switch (data) + { + case ScriptBaseClass.DATA_SIM_POS: + if (info == null) + { + ScriptSleep(m_sleepMsOnRequestSimulatorData); + return UUID.Zero.ToString(); + } + + bool isHypergridRegion = false; + + if (World.RegionInfo.RegionName != simulator && info.RegionSecret != "") + { + // Hypergrid is currently placing real destination region co-ords into RegionSecret. + // But other code can also use this field for a genuine RegionSecret! Therefore, if + // anything is present we need to disambiguate. + // + // FIXME: Hypergrid should be storing this data in a different field. + RegionFlags regionFlags + = (RegionFlags)m_ScriptEngine.World.GridService.GetRegionFlags( + info.ScopeID, info.RegionID); + isHypergridRegion = (regionFlags & RegionFlags.Hyperlink) != 0; + } + + if (isHypergridRegion) + { + uint rx = 0, ry = 0; + Utils.LongToUInts(Convert.ToUInt64(info.RegionSecret), out rx, out ry); + + reply = new LSL_Vector( + rx, + ry, + 0).ToString(); + } + else + { + // Local grid co-oridnates + reply = new LSL_Vector( + info.RegionLocX, + info.RegionLocY, + 0).ToString(); + } + break; + case ScriptBaseClass.DATA_SIM_STATUS: + if (info != null) + reply = "up"; // Duh! + else + reply = "unknown"; + break; + case ScriptBaseClass.DATA_SIM_RATING: + if (info == null) + { + ScriptSleep(m_sleepMsOnRequestSimulatorData); + return UUID.Zero.ToString(); + } + int access = info.Maturity; + if (access == 0) + reply = "PG"; + else if (access == 1) + reply = "MATURE"; + else if (access == 2) + reply = "ADULT"; + else + reply = "UNKNOWN"; + break; + case ScriptBaseClass.DATA_SIM_RELEASE: + if (ossl != null) + ossl.CheckThreatLevel(ThreatLevel.High, "llRequestSimulatorData"); + reply = "OpenSim"; + break; + default: + ScriptSleep(m_sleepMsOnRequestSimulatorData); + return UUID.Zero.ToString(); // Raise no event + } + UUID rq = UUID.Random(); + + UUID tid = AsyncCommands. + DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString()); + + AsyncCommands. + DataserverPlugin.DataserverReply(rq.ToString(), reply); + + ScriptSleep(m_sleepMsOnRequestSimulatorData); + return tid.ToString(); + } + catch(Exception) + { + //m_log.Error("[LSL_API]: llRequestSimulatorData" + e.ToString()); + return UUID.Zero.ToString(); + } + } + + public LSL_String llRequestURL() + { + m_host.AddScriptLPS(1); + + if (m_UrlModule != null) + return m_UrlModule.RequestURL(m_ScriptEngine.ScriptModule, m_host, m_item.ItemID).ToString(); + return UUID.Zero.ToString(); + } + + public void llForceMouselook(int mouselook) + { + m_host.AddScriptLPS(1); + m_host.SetForceMouselook(mouselook != 0); + } + + public LSL_Float llGetObjectMass(string id) + { + m_host.AddScriptLPS(1); + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) + { + try + { + SceneObjectPart obj = World.GetSceneObjectPart(World.Entities[key].LocalId); + if (obj != null) + return (double)obj.GetMass(); + // the object is null so the key is for an avatar + ScenePresence avatar = World.GetScenePresence(key); + if (avatar != null) + if (avatar.IsChildAgent) + // reference http://www.lslwiki.net/lslwiki/wakka.php?wakka=llGetObjectMass + // child agents have a mass of 1.0 + return 1; + else + return (double)avatar.GetMass(); + } + catch (KeyNotFoundException) + { + return 0; // The Object/Agent not in the region so just return zero + } + } + return 0; + } + + /// + /// illListReplaceList removes the sub-list defined by the inclusive indices + /// start and end and inserts the src list in its place. The inclusive + /// nature of the indices means that at least one element must be deleted + /// if the indices are within the bounds of the existing list. I.e. 2,2 + /// will remove the element at index 2 and replace it with the source + /// list. Both indices may be negative, with the usual interpretation. An + /// interesting case is where end is lower than start. As these indices + /// bound the list to be removed, then 0->end, and start->lim are removed + /// and the source list is added as a suffix. + /// + + public LSL_List llListReplaceList(LSL_List dest, LSL_List src, int start, int end) + { + LSL_List pref = null; + + m_host.AddScriptLPS(1); + + // Note that although we have normalized, both + // indices could still be negative. + if (start < 0) + { + start = start+dest.Length; + } + + if (end < 0) + { + end = end+dest.Length; + } + // The comventional case, remove a sequence starting with + // start and ending with end. And then insert the source + // list. + if (start <= end) + { + // If greater than zero, then there is going to be a + // surviving prefix. Otherwise the inclusive nature + // of the indices mean that we're going to add the + // source list as a prefix. + if (start > 0) + { + pref = dest.GetSublist(0,start-1); + // Only add a suffix if there is something + // beyond the end index (it's inclusive too). + if (end + 1 < dest.Length) + { + return pref + src + dest.GetSublist(end + 1, -1); + } + else + { + return pref + src; + } + } + // If start is less than or equal to zero, then + // the new list is simply a prefix. We still need to + // figure out any necessary surgery to the destination + // based upon end. Note that if end exceeds the upper + // bound in this case, the entire destination list + // is removed. + else + { + if (end + 1 < dest.Length) + { + return src + dest.GetSublist(end + 1, -1); + } + else + { + return src; + } + } + } + // Finally, if start > end, we strip away a prefix and + // a suffix, to leave the list that sits ens + // and start, and then tag on the src list. AT least + // that's my interpretation. We can get sublist to do + // this for us. Note that one, or both of the indices + // might have been negative. + else + { + return dest.GetSublist(end + 1, start - 1) + src; + } + } + + public void llLoadURL(string avatar_id, string message, string url) + { + m_host.AddScriptLPS(1); + + IDialogModule dm = World.RequestModuleInterface(); + if (null != dm) + dm.SendUrlToUser( + new UUID(avatar_id), m_host.Name, m_host.UUID, m_host.OwnerID, false, message, url); + + ScriptSleep(m_sleepMsOnLoadURL); + } + + public void llParcelMediaCommandList(LSL_List commandList) + { + // TODO: Not implemented yet (missing in libomv?): + // PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) + + m_host.AddScriptLPS(1); + + // according to the docs, this command only works if script owner and land owner are the same + // lets add estate owners and gods, too, and use the generic permission check. + ILandObject landObject = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + if (!World.Permissions.CanEditParcelProperties(m_host.OwnerID, landObject, GroupPowers.ChangeMedia)) return; + + bool update = false; // send a ParcelMediaUpdate (and possibly change the land's media URL)? + byte loop = 0; + + LandData landData = landObject.LandData; + string url = landData.MediaURL; + string texture = landData.MediaID.ToString(); + bool autoAlign = landData.MediaAutoScale != 0; + string mediaType = ""; // TODO these have to be added as soon as LandData supports it + string description = ""; + int width = 0; + int height = 0; + + ParcelMediaCommandEnum? commandToSend = null; + float time = 0.0f; // default is from start + + ScenePresence presence = null; + + for (int i = 0; i < commandList.Data.Length; i++) + { + ParcelMediaCommandEnum command = (ParcelMediaCommandEnum)commandList.Data[i]; + switch (command) + { + case ParcelMediaCommandEnum.Agent: + // we send only to one agent + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_String) + { + UUID agentID; + if (UUID.TryParse((LSL_String)commandList.Data[i + 1], out agentID)) + { + presence = World.GetScenePresence(agentID); + } + } + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_AGENT must be a key"); + ++i; + } + break; + + case ParcelMediaCommandEnum.Loop: + loop = 1; + commandToSend = command; + update = true; //need to send the media update packet to set looping + break; + + case ParcelMediaCommandEnum.Play: + loop = 0; + commandToSend = command; + update = true; //need to send the media update packet to make sure it doesn't loop + break; + + case ParcelMediaCommandEnum.Pause: + case ParcelMediaCommandEnum.Stop: + case ParcelMediaCommandEnum.Unload: + commandToSend = command; + break; + + case ParcelMediaCommandEnum.Url: + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_String) + { + url = (LSL_String)commandList.Data[i + 1]; + update = true; + } + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_URL must be a string"); + ++i; + } + break; + + case ParcelMediaCommandEnum.Texture: + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_String) + { + texture = (LSL_String)commandList.Data[i + 1]; + update = true; + } + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TEXTURE must be a string or a key"); + ++i; + } + break; + + case ParcelMediaCommandEnum.Time: + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_Float) + { + time = (float)(LSL_Float)commandList.Data[i + 1]; + } + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TIME must be a float"); + ++i; + } + break; + + case ParcelMediaCommandEnum.AutoAlign: + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_Integer) + { + autoAlign = (LSL_Integer)commandList.Data[i + 1]; + update = true; + } + + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_AUTO_ALIGN must be an integer"); + ++i; + } + break; + + case ParcelMediaCommandEnum.Type: + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_String) + { + mediaType = (LSL_String)commandList.Data[i + 1]; + update = true; + } + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_TYPE must be a string"); + ++i; + } + break; + + case ParcelMediaCommandEnum.Desc: + if ((i + 1) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_String) + { + description = (LSL_String)commandList.Data[i + 1]; + update = true; + } + else Error("llParcelMediaCommandList", "The argument of PARCEL_MEDIA_COMMAND_DESC must be a string"); + ++i; + } + break; + + case ParcelMediaCommandEnum.Size: + if ((i + 2) < commandList.Length) + { + if (commandList.Data[i + 1] is LSL_Integer) + { + if (commandList.Data[i + 2] is LSL_Integer) + { + width = (LSL_Integer)commandList.Data[i + 1]; + height = (LSL_Integer)commandList.Data[i + 2]; + update = true; + } + else Error("llParcelMediaCommandList", "The second argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer"); + } + else Error("llParcelMediaCommandList", "The first argument of PARCEL_MEDIA_COMMAND_SIZE must be an integer"); + i += 2; + } + break; + + default: + NotImplemented("llParcelMediaCommandList", "Parameter not supported yet: " + Enum.Parse(typeof(ParcelMediaCommandEnum), commandList.Data[i].ToString()).ToString()); + break; + }//end switch + }//end for + + // if we didn't get a presence, we send to all and change the url + // if we did get a presence, we only send to the agent specified, and *don't change the land settings*! + + // did something important change or do we only start/stop/pause? + if (update) + { + if (presence == null) + { + // we send to all + landData.MediaID = new UUID(texture); + landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0; + landData.MediaWidth = width; + landData.MediaHeight = height; + landData.MediaType = mediaType; + + // do that one last, it will cause a ParcelPropertiesUpdate + landObject.SetMediaUrl(url); + + // now send to all (non-child) agents in the parcel + World.ForEachRootScenePresence(delegate(ScenePresence sp) + { + if (sp.currentParcelUUID == landData.GlobalID) + { + sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL, + landData.MediaID, + landData.MediaAutoScale, + mediaType, + description, + width, height, + loop); + } + }); + } + else if (!presence.IsChildAgent) + { + // we only send to one (root) agent + presence.ControllingClient.SendParcelMediaUpdate(url, + new UUID(texture), + autoAlign ? (byte)1 : (byte)0, + mediaType, + description, + width, height, + loop); + } + } + + if (commandToSend != null) + { + // the commandList contained a start/stop/... command, too + if (presence == null) + { + // send to all (non-child) agents in the parcel + World.ForEachRootScenePresence(delegate(ScenePresence sp) + { + if (sp.currentParcelUUID == landData.GlobalID) + { + sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this? + (ParcelMediaCommandEnum)commandToSend, + time); + } + }); + } + else if (!presence.IsChildAgent) + { + presence.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this? + (ParcelMediaCommandEnum)commandToSend, + time); + } + } + ScriptSleep(m_sleepMsOnParcelMediaCommandList); + } + + public LSL_List llParcelMediaQuery(LSL_List aList) + { + m_host.AddScriptLPS(1); + LSL_List list = new LSL_List(); + //TO DO: make the implementation for the missing commands + //PARCEL_MEDIA_COMMAND_LOOP_SET float loop Use this to get or set the parcel's media loop duration. (1.19.1 RC0 or later) + for (int i = 0; i < aList.Data.Length; i++) + { + + if (aList.Data[i] != null) + { + switch ((ParcelMediaCommandEnum) aList.Data[i]) + { + case ParcelMediaCommandEnum.Url: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaURL)); + break; + case ParcelMediaCommandEnum.Desc: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).Description)); + break; + case ParcelMediaCommandEnum.Texture: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaID.ToString())); + break; + case ParcelMediaCommandEnum.Type: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaType)); + break; + case ParcelMediaCommandEnum.Size: + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaWidth)); + list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition).MediaHeight)); + break; + default: + ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url; + NotImplemented("llParcelMediaQuery", "Parameter not supported yet: " + Enum.Parse(mediaCommandEnum.GetType() , aList.Data[i].ToString()).ToString()); + break; + } + + } + } + ScriptSleep(m_sleepMsOnParcelMediaQuery); + return list; + } + + public LSL_Integer llModPow(int a, int b, int c) + { + m_host.AddScriptLPS(1); + Int64 tmp = 0; + Math.DivRem(Convert.ToInt64(Math.Pow(a, b)), c, out tmp); + ScriptSleep(m_sleepMsOnModPow); + return Convert.ToInt32(tmp); + } + + public LSL_Integer llGetInventoryType(string name) + { + m_host.AddScriptLPS(1); + + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item == null) + return -1; + + return item.Type; + } + + public void llSetPayPrice(int price, LSL_List quick_pay_buttons) + { + m_host.AddScriptLPS(1); + + if (quick_pay_buttons.Data.Length < 4) + { + Error("llSetPayPrice", "List must have at least 4 elements"); + return; + } + m_host.ParentGroup.RootPart.PayPrice[0]=price; + + m_host.ParentGroup.RootPart.PayPrice[1]=(LSL_Integer)quick_pay_buttons.Data[0]; + m_host.ParentGroup.RootPart.PayPrice[2]=(LSL_Integer)quick_pay_buttons.Data[1]; + m_host.ParentGroup.RootPart.PayPrice[3]=(LSL_Integer)quick_pay_buttons.Data[2]; + m_host.ParentGroup.RootPart.PayPrice[4]=(LSL_Integer)quick_pay_buttons.Data[3]; + m_host.ParentGroup.HasGroupChanged = true; + } + + public LSL_Vector llGetCameraPos() + { + m_host.AddScriptLPS(1); + + if (m_item.PermsGranter == UUID.Zero) + return Vector3.Zero; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) + { + Error("llGetCameraPos", "No permissions to track the camera"); + return Vector3.Zero; + } + + ScenePresence presence = World.GetScenePresence(m_host.OwnerID); + if (presence != null) + { + LSL_Vector pos = new LSL_Vector(presence.CameraPosition); + return pos; + } + + return Vector3.Zero; + } + + public LSL_Rotation llGetCameraRot() + { + m_host.AddScriptLPS(1); + + if (m_item.PermsGranter == UUID.Zero) + return Quaternion.Identity; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0) + { + Error("llGetCameraRot", "No permissions to track the camera"); + return Quaternion.Identity; + } + + ScenePresence presence = World.GetScenePresence(m_host.OwnerID); + if (presence != null) + { + return new LSL_Rotation(presence.CameraRotation); + } + + return Quaternion.Identity; + } + + public void llSetPrimURL(string url) + { + m_host.AddScriptLPS(1); + Deprecated("llSetPrimURL", "Use llSetPrimMediaParams instead"); + ScriptSleep(m_sleepMsOnSetPrimURL); + } + + public void llRefreshPrimURL() + { + m_host.AddScriptLPS(1); + Deprecated("llRefreshPrimURL"); + ScriptSleep(m_sleepMsOnRefreshPrimURL); + } + + public LSL_String llEscapeURL(string url) + { + m_host.AddScriptLPS(1); + try + { + return Uri.EscapeDataString(url); + } + catch (Exception ex) + { + return "llEscapeURL: " + ex.ToString(); + } + } + + public LSL_String llUnescapeURL(string url) + { + m_host.AddScriptLPS(1); + try + { + return Uri.UnescapeDataString(url); + } + catch (Exception ex) + { + return "llUnescapeURL: " + ex.ToString(); + } + } + + public void llMapDestination(string simname, LSL_Vector pos, LSL_Vector lookAt) + { + m_host.AddScriptLPS(1); + DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, 0); + if (detectedParams == null) return; // only works on the first detected avatar + + ScenePresence avatar = World.GetScenePresence(detectedParams.Key); + if (avatar != null) + { + avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, + simname, pos, lookAt); + } + ScriptSleep(m_sleepMsOnMapDestination); + } + + public void llAddToLandBanList(string avatar, double hours) + { + m_host.AddScriptLPS(1); + UUID key; + ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned)) + { + int expires = 0; + if (hours != 0) + expires = Util.UnixTimeSinceEpoch() + (int)(3600.0 * hours); + + if (UUID.TryParse(avatar, out key)) + { + int idx = land.LandData.ParcelAccessList.FindIndex( + delegate(LandAccessEntry e) + { + if (e.AgentID == key && e.Flags == AccessList.Ban) + return true; + return false; + }); + + if (idx != -1 && (land.LandData.ParcelAccessList[idx].Expires == 0 || (expires != 0 && expires < land.LandData.ParcelAccessList[idx].Expires))) + return; + + if (idx != -1) + land.LandData.ParcelAccessList.RemoveAt(idx); + + LandAccessEntry entry = new LandAccessEntry(); + + entry.AgentID = key; + entry.Flags = AccessList.Ban; + entry.Expires = expires; + + land.LandData.ParcelAccessList.Add(entry); + + World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); + } + } + ScriptSleep(m_sleepMsOnAddToLandBanList); + } + + public void llRemoveFromLandPassList(string avatar) + { + m_host.AddScriptLPS(1); + UUID key; + ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageAllowed)) + { + if (UUID.TryParse(avatar, out key)) + { + int idx = land.LandData.ParcelAccessList.FindIndex( + delegate(LandAccessEntry e) + { + if (e.AgentID == key && e.Flags == AccessList.Access) + return true; + return false; + }); + + if (idx != -1) + { + land.LandData.ParcelAccessList.RemoveAt(idx); + World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); + } + } + } + ScriptSleep(m_sleepMsOnRemoveFromLandPassList); + } + + public void llRemoveFromLandBanList(string avatar) + { + m_host.AddScriptLPS(1); + UUID key; + ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition); + if (World.Permissions.CanEditParcelProperties(m_host.OwnerID, land, GroupPowers.LandManageBanned)) + { + if (UUID.TryParse(avatar, out key)) + { + int idx = land.LandData.ParcelAccessList.FindIndex( + delegate(LandAccessEntry e) + { + if (e.AgentID == key && e.Flags == AccessList.Ban) + return true; + return false; + }); + + if (idx != -1) + { + land.LandData.ParcelAccessList.RemoveAt(idx); + World.EventManager.TriggerLandObjectUpdated((uint)land.LandData.LocalID, land); + } + } + } + ScriptSleep(m_sleepMsOnRemoveFromLandBanList); + } + + public void llSetCameraParams(LSL_List rules) + { + m_host.AddScriptLPS(1); + + // the object we are in + UUID objectID = m_host.ParentUUID; + if (objectID == UUID.Zero) + return; + + // we need the permission first, to know which avatar we want to set the camera for + UUID agentID = m_item.PermsGranter; + + if (agentID == UUID.Zero) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) + return; + + ScenePresence presence = World.GetScenePresence(agentID); + + // we are not interested in child-agents + if (presence.IsChildAgent) return; + + SortedDictionary parameters = new SortedDictionary(); + object[] data = rules.Data; + for (int i = 0; i < data.Length; ++i) + { + int type; + try + { + type = Convert.ToInt32(data[i++].ToString()); + } + catch + { + Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1])); + return; + } + if (i >= data.Length) break; // odd number of entries => ignore the last + + // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) + switch (type) + { + case ScriptBaseClass.CAMERA_FOCUS: + case ScriptBaseClass.CAMERA_FOCUS_OFFSET: + case ScriptBaseClass.CAMERA_POSITION: + LSL_Vector v = (LSL_Vector)data[i]; + try + { + parameters.Add(type + 1, (float)v.x); + } + catch + { + switch(type) + { + case ScriptBaseClass.CAMERA_FOCUS: + Error("llSetCameraParams", "CAMERA_FOCUS: Parameter x is invalid"); + return; + case ScriptBaseClass.CAMERA_FOCUS_OFFSET: + Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter x is invalid"); + return; + case ScriptBaseClass.CAMERA_POSITION: + Error("llSetCameraParams", "CAMERA_POSITION: Parameter x is invalid"); + return; + } + } + try + { + parameters.Add(type + 2, (float)v.y); + } + catch + { + switch(type) + { + case ScriptBaseClass.CAMERA_FOCUS: + Error("llSetCameraParams", "CAMERA_FOCUS: Parameter y is invalid"); + return; + case ScriptBaseClass.CAMERA_FOCUS_OFFSET: + Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter y is invalid"); + return; + case ScriptBaseClass.CAMERA_POSITION: + Error("llSetCameraParams", "CAMERA_POSITION: Parameter y is invalid"); + return; + } + } + try + { + parameters.Add(type + 3, (float)v.z); + } + catch + { + switch(type) + { + case ScriptBaseClass.CAMERA_FOCUS: + Error("llSetCameraParams", "CAMERA_FOCUS: Parameter z is invalid"); + return; + case ScriptBaseClass.CAMERA_FOCUS_OFFSET: + Error("llSetCameraParams", "CAMERA_FOCUS_OFFSET: Parameter z is invalid"); + return; + case ScriptBaseClass.CAMERA_POSITION: + Error("llSetCameraParams", "CAMERA_POSITION: Parameter z is invalid"); + return; + } + } + break; + default: + // TODO: clean that up as soon as the implicit casts are in + if (data[i] is LSL_Float) + parameters.Add(type, (float)((LSL_Float)data[i]).value); + else if (data[i] is LSL_Integer) + parameters.Add(type, (float)((LSL_Integer)data[i]).value); + else + { + try + { + parameters.Add(type, Convert.ToSingle(data[i])); + } + catch + { + Error("llSetCameraParams", string.Format("{0}: Parameter is invalid", type)); + } + } + break; + } + } + if (parameters.Count > 0) presence.ControllingClient.SendSetFollowCamProperties(objectID, parameters); + } + + public void llClearCameraParams() + { + m_host.AddScriptLPS(1); + + // the object we are in + UUID objectID = m_host.ParentUUID; + if (objectID == UUID.Zero) + return; + + // we need the permission first, to know which avatar we want to clear the camera for + UUID agentID = m_item.PermsGranter; + + if (agentID == UUID.Zero) + return; + + if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) + return; + + ScenePresence presence = World.GetScenePresence(agentID); + + // we are not interested in child-agents + if (presence.IsChildAgent) + return; + + presence.ControllingClient.SendClearFollowCamProperties(objectID); + } + + public LSL_Float llListStatistics(int operation, LSL_List src) + { + m_host.AddScriptLPS(1); + switch (operation) + { + case ScriptBaseClass.LIST_STAT_RANGE: + return src.Range(); + case ScriptBaseClass.LIST_STAT_MIN: + return src.Min(); + case ScriptBaseClass.LIST_STAT_MAX: + return src.Max(); + case ScriptBaseClass.LIST_STAT_MEAN: + return src.Mean(); + case ScriptBaseClass.LIST_STAT_MEDIAN: + return LSL_List.ToDoubleList(src).Median(); + case ScriptBaseClass.LIST_STAT_NUM_COUNT: + return src.NumericLength(); + case ScriptBaseClass.LIST_STAT_STD_DEV: + return src.StdDev(); + case ScriptBaseClass.LIST_STAT_SUM: + return src.Sum(); + case ScriptBaseClass.LIST_STAT_SUM_SQUARES: + return src.SumSqrs(); + case ScriptBaseClass.LIST_STAT_GEOMETRIC_MEAN: + return src.GeometricMean(); + case ScriptBaseClass.LIST_STAT_HARMONIC_MEAN: + return src.HarmonicMean(); + default: + return 0.0; + } + } + + public LSL_Integer llGetUnixTime() + { + m_host.AddScriptLPS(1); + return Util.UnixTimeSinceEpoch(); + } + + public LSL_Integer llGetParcelFlags(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + return (int)World.LandChannel.GetLandObject((float)pos.x, (float)pos.y).LandData.Flags; + } + + public LSL_Integer llGetRegionFlags() + { + m_host.AddScriptLPS(1); + IEstateModule estate = World.RequestModuleInterface(); + if (estate == null) + return 67108864; + return (int)estate.GetRegionFlags(); + } + + public LSL_String llXorBase64StringsCorrect(string str1, string str2) + { + m_host.AddScriptLPS(1); + string ret = String.Empty; + string src1 = llBase64ToString(str1); + string src2 = llBase64ToString(str2); + int c = 0; + for (int i = 0; i < src1.Length; i++) + { + ret += (char) (src1[i] ^ src2[c]); + + c++; + if (c >= src2.Length) + c = 0; + } + return llStringToBase64(ret); + } + + public LSL_String llHTTPRequest(string url, LSL_List parameters, string body) + { + // Partial implementation: support for parameter flags needed + // see http://wiki.secondlife.com/wiki/LlHTTPRequest + // parameter flags support are implemented in ScriptsHttpRequests.cs + // in StartHttpRequest + + m_host.AddScriptLPS(1); + IHttpRequestModule httpScriptMod = + m_ScriptEngine.World.RequestModuleInterface(); + List param = new List(); + bool ok; + Int32 flag; + + for (int i = 0; i < parameters.Data.Length; i += 2) + { + ok = Int32.TryParse(parameters.Data[i].ToString(), out flag); + if (!ok || flag < 0 || + flag > (int)HttpRequestConstants.HTTP_PRAGMA_NO_CACHE) + { + Error("llHTTPRequest", "Parameter " + i.ToString() + " is an invalid flag"); + } + + param.Add(parameters.Data[i].ToString()); //Add parameter flag + + if (flag != (int)HttpRequestConstants.HTTP_CUSTOM_HEADER) + { + param.Add(parameters.Data[i+1].ToString()); //Add parameter value + } + else + { + //Parameters are in pairs and custom header takes + //arguments in pairs so adjust for header marker. + ++i; + + //Maximum of 8 headers are allowed based on the + //Second Life documentation for llHTTPRequest. + for (int count = 1; count <= 8; ++count) + { + //Enough parameters remaining for (another) header? + if (parameters.Data.Length - i < 2) + { + //There must be at least one name/value pair for custom header + if (count == 1) + Error("llHTTPRequest", "Missing name/value for custom header at parameter " + i.ToString()); + break; + } + + if (HttpStandardHeaders.Contains(parameters.Data[i].ToString(), StringComparer.OrdinalIgnoreCase)) + Error("llHTTPRequest", "Name is invalid as a custom header at parameter " + i.ToString()); + + param.Add(parameters.Data[i].ToString()); + param.Add(parameters.Data[i+1].ToString()); + + //Have we reached the end of the list of headers? + //End is marked by a string with a single digit. + if (i+2 >= parameters.Data.Length || + Char.IsDigit(parameters.Data[i].ToString()[0])) + { + break; + } + + i += 2; + } + } + } + + Vector3 position = m_host.AbsolutePosition; + Vector3 velocity = m_host.Velocity; + Quaternion rotation = m_host.RotationOffset; + string ownerName = String.Empty; + ScenePresence scenePresence = World.GetScenePresence(m_host.OwnerID); + if (scenePresence == null) + ownerName = resolveName(m_host.OwnerID); + else + ownerName = scenePresence.Name; + + RegionInfo regionInfo = World.RegionInfo; + + Dictionary httpHeaders = new Dictionary(); + + string shard = "OpenSim"; + IConfigSource config = m_ScriptEngine.ConfigSource; + if (config.Configs["Network"] != null) + { + shard = config.Configs["Network"].GetString("shard", shard); + } + + httpHeaders["X-SecondLife-Shard"] = shard; + httpHeaders["X-SecondLife-Object-Name"] = m_host.Name; + httpHeaders["X-SecondLife-Object-Key"] = m_host.UUID.ToString(); + httpHeaders["X-SecondLife-Region"] = string.Format("{0} ({1}, {2})", regionInfo.RegionName, regionInfo.RegionLocX, regionInfo.RegionLocY); + httpHeaders["X-SecondLife-Local-Position"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000})", position.X, position.Y, position.Z); + httpHeaders["X-SecondLife-Local-Velocity"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000})", velocity.X, velocity.Y, velocity.Z); + httpHeaders["X-SecondLife-Local-Rotation"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000}, {3:0.000000})", rotation.X, rotation.Y, rotation.Z, rotation.W); + httpHeaders["X-SecondLife-Owner-Name"] = ownerName; + httpHeaders["X-SecondLife-Owner-Key"] = m_host.OwnerID.ToString(); + string userAgent = config.Configs["Network"].GetString("user_agent", null); + if (userAgent != null) + httpHeaders["User-Agent"] = userAgent; + + string authregex = @"^(https?:\/\/)(\w+):(\w+)@(.*)$"; + Regex r = new Regex(authregex); + int[] gnums = r.GetGroupNumbers(); + Match m = r.Match(url); + if (m.Success) { + for (int i = 1; i < gnums.Length; i++) { + //System.Text.RegularExpressions.Group g = m.Groups[gnums[i]]; + //CaptureCollection cc = g.Captures; + } + if (m.Groups.Count == 5) { + httpHeaders["Authorization"] = String.Format("Basic {0}", Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(m.Groups[2].ToString() + ":" + m.Groups[3].ToString()))); + url = m.Groups[1].ToString() + m.Groups[4].ToString(); + } + } + + HttpInitialRequestStatus status; + UUID reqID + = httpScriptMod.StartHttpRequest(m_host.LocalId, m_item.ItemID, url, param, httpHeaders, body, out status); + + if (status == HttpInitialRequestStatus.DISALLOWED_BY_FILTER) + Error("llHttpRequest", string.Format("Request to {0} disallowed by filter", url)); + + if (reqID != UUID.Zero) + return reqID.ToString(); + else + return null; + } + + + public void llHTTPResponse(LSL_Key id, int status, string body) + { + // Partial implementation: support for parameter flags needed + // see http://wiki.secondlife.com/wiki/llHTTPResponse + + m_host.AddScriptLPS(1); + + if (m_UrlModule != null) + m_UrlModule.HttpResponse(new UUID(id), status,body); + } + + public void llResetLandBanList() + { + m_host.AddScriptLPS(1); + LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition).LandData; + if (land.OwnerID == m_host.OwnerID) + { + foreach (LandAccessEntry entry in land.ParcelAccessList) + { + if (entry.Flags == AccessList.Ban) + { + land.ParcelAccessList.Remove(entry); + } + } + } + ScriptSleep(m_sleepMsOnResetLandBanList); + } + + public void llResetLandPassList() + { + m_host.AddScriptLPS(1); + LandData land = World.LandChannel.GetLandObject(m_host.AbsolutePosition).LandData; + if (land.OwnerID == m_host.OwnerID) + { + foreach (LandAccessEntry entry in land.ParcelAccessList) + { + if (entry.Flags == AccessList.Access) + { + land.ParcelAccessList.Remove(entry); + } + } + } + ScriptSleep(m_sleepMsOnResetLandPassList); + } + + public LSL_Integer llGetParcelPrimCount(LSL_Vector pos, int category, int sim_wide) + { + m_host.AddScriptLPS(1); + + ILandObject lo = World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); + + if (lo == null) + return 0; + + IPrimCounts pc = lo.PrimCounts; + + if (sim_wide != ScriptBaseClass.FALSE) + { + if (category == ScriptBaseClass.PARCEL_COUNT_TOTAL) + { + return pc.Simulator; + } + else + { + // counts not implemented yet + return 0; + } + } + else + { + if (category == ScriptBaseClass.PARCEL_COUNT_TOTAL) + return pc.Total; + else if (category == ScriptBaseClass.PARCEL_COUNT_OWNER) + return pc.Owner; + else if (category == ScriptBaseClass.PARCEL_COUNT_GROUP) + return pc.Group; + else if (category == ScriptBaseClass.PARCEL_COUNT_OTHER) + return pc.Others; + else if (category == ScriptBaseClass.PARCEL_COUNT_SELECTED) + return pc.Selected; + else if (category == ScriptBaseClass.PARCEL_COUNT_TEMP) + return 0; // counts not implemented yet + } + + return 0; + } + + public LSL_List llGetParcelPrimOwners(LSL_Vector pos) + { + m_host.AddScriptLPS(1); + LandObject land = (LandObject)World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); + LSL_List ret = new LSL_List(); + if (land != null) + { + foreach (KeyValuePair detectedParams in land.GetLandObjectOwners()) + { + ret.Add(new LSL_String(detectedParams.Key.ToString())); + ret.Add(new LSL_Integer(detectedParams.Value)); + } + } + ScriptSleep(m_sleepMsOnGetParcelPrimOwners); + return ret; + } + + public LSL_Integer llGetObjectPrimCount(string object_id) + { + m_host.AddScriptLPS(1); + SceneObjectPart part = World.GetSceneObjectPart(new UUID(object_id)); + if (part == null) + { + return 0; + } + else + { + return part.ParentGroup.PrimCount; + } + } + + public LSL_Integer llGetParcelMaxPrims(LSL_Vector pos, int sim_wide) + { + m_host.AddScriptLPS(1); + + ILandObject lo = World.LandChannel.GetLandObject((float)pos.x, (float)pos.y); + + if (lo == null) + return 0; + + if (sim_wide != 0) + return lo.GetSimulatorMaxPrimCount(); + else + return lo.GetParcelMaxPrimCount(); + } + + public LSL_List llGetParcelDetails(LSL_Vector pos, LSL_List param) + { + m_host.AddScriptLPS(1); + LandData land = World.GetLandData(pos); + if (land == null) + { + return new LSL_List(0); + } + LSL_List ret = new LSL_List(); + foreach (object o in param.Data) + { + switch (o.ToString()) + { + case "0": + ret.Add(new LSL_String(land.Name)); + break; + case "1": + ret.Add(new LSL_String(land.Description)); + break; + case "2": + ret.Add(new LSL_Key(land.OwnerID.ToString())); + break; + case "3": + ret.Add(new LSL_Key(land.GroupID.ToString())); + break; + case "4": + ret.Add(new LSL_Integer(land.Area)); + break; + case "5": + ret.Add(new LSL_Key(land.GlobalID.ToString())); + break; + default: + ret.Add(new LSL_Integer(0)); + break; + } + } + return ret; + } + + public LSL_String llStringTrim(string src, int type) + { + m_host.AddScriptLPS(1); + if (type == (int)ScriptBaseClass.STRING_TRIM_HEAD) { return src.TrimStart(); } + if (type == (int)ScriptBaseClass.STRING_TRIM_TAIL) { return src.TrimEnd(); } + if (type == (int)ScriptBaseClass.STRING_TRIM) { return src.Trim(); } + return src; + } + + public LSL_List llGetObjectDetails(string id, LSL_List args) + { + m_host.AddScriptLPS(1); + + LSL_List ret = new LSL_List(); + UUID key = new UUID(); + if (UUID.TryParse(id, out key)) + { + ScenePresence av = World.GetScenePresence(key); + + if (av != null) + { + foreach (object o in args.Data) + { + switch (int.Parse(o.ToString())) + { + case ScriptBaseClass.OBJECT_NAME: + ret.Add(new LSL_String(av.Firstname + " " + av.Lastname)); + break; + case ScriptBaseClass.OBJECT_DESC: + ret.Add(new LSL_String("")); + break; + case ScriptBaseClass.OBJECT_POS: + ret.Add(new LSL_Vector((double)av.AbsolutePosition.X, (double)av.AbsolutePosition.Y, (double)av.AbsolutePosition.Z)); + break; + case ScriptBaseClass.OBJECT_ROT: + ret.Add(new LSL_Rotation(av.GetWorldRotation())); + break; + case ScriptBaseClass.OBJECT_VELOCITY: + ret.Add(new LSL_Vector(av.GetWorldVelocity())); + break; + case ScriptBaseClass.OBJECT_OWNER: + ret.Add(new LSL_String(id)); + break; + case ScriptBaseClass.OBJECT_GROUP: + ret.Add(new LSL_String(UUID.Zero.ToString())); + break; + case ScriptBaseClass.OBJECT_CREATOR: + ret.Add(new LSL_String(UUID.Zero.ToString())); + break; + // For the following 8 see the Object version below + case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: + ret.Add(new LSL_Integer(av.RunningScriptCount())); + break; + case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: + ret.Add(new LSL_Integer(av.ScriptCount())); + break; + case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: + ret.Add(new LSL_Integer(av.RunningScriptCount() * 16384)); + break; + case ScriptBaseClass.OBJECT_SCRIPT_TIME: + ret.Add(new LSL_Float(av.ScriptExecutionTime() / 1000.0f)); + break; + case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: + ret.Add(new LSL_Integer(1)); + break; + case ScriptBaseClass.OBJECT_SERVER_COST: + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_STREAMING_COST: + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_PHYSICS_COST: + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_ROOT: + SceneObjectPart p = av.ParentPart; + if (p != null) + { + ret.Add(new LSL_String(p.ParentGroup.RootPart.UUID.ToString())); + } + else + { + ret.Add(new LSL_String(id)); + } + break; + case ScriptBaseClass.OBJECT_ATTACHED_POINT: + ret.Add(new LSL_Integer(0)); + break; + case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: // Pathfinding + ret.Add(new LSL_Integer(ScriptBaseClass.OPT_AVATAR)); + break; + case ScriptBaseClass.OBJECT_PHYSICS: + ret.Add(new LSL_Integer(0)); + break; + case ScriptBaseClass.OBJECT_PHANTOM: + ret.Add(new LSL_Integer(0)); + break; + case ScriptBaseClass.OBJECT_TEMP_ON_REZ: + ret.Add(new LSL_Integer(0)); + break; + case ScriptBaseClass.OBJECT_RENDER_WEIGHT: + ret.Add(new LSL_Integer(-1)); + break; + case ScriptBaseClass.OBJECT_HOVER_HEIGHT: + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: + LSL_Float shapeType; + if (av.Appearance.VisualParams[(int)AvatarAppearance.VPElement.SHAPE_MALE] != 0) + shapeType = new LSL_Float(1); + else + shapeType = new LSL_Float(0); + ret.Add(shapeType); + break; + case ScriptBaseClass.OBJECT_LAST_OWNER_ID: + ret.Add(new LSL_Key(ScriptBaseClass.NULL_KEY)); + break; + default: + // Invalid or unhandled constant. + ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); + break; + } + } + + return ret; + } + + SceneObjectPart obj = World.GetSceneObjectPart(key); + if (obj != null) + { + foreach (object o in args.Data) + { + switch (int.Parse(o.ToString())) + { + case ScriptBaseClass.OBJECT_NAME: + ret.Add(new LSL_String(obj.Name)); + break; + case ScriptBaseClass.OBJECT_DESC: + ret.Add(new LSL_String(obj.Description)); + break; + case ScriptBaseClass.OBJECT_POS: + ret.Add(new LSL_Vector(obj.AbsolutePosition.X, obj.AbsolutePosition.Y, obj.AbsolutePosition.Z)); + break; + case ScriptBaseClass.OBJECT_ROT: + Quaternion rot = Quaternion.Identity; + + if (obj.ParentGroup.IsAttachment) + { + ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); + + if (sp != null) + rot = sp.GetWorldRotation(); + } + else + { + if (obj.ParentGroup.RootPart == obj) + rot = obj.ParentGroup.GroupRotation; + else + rot = obj.GetWorldRotation(); + } + + LSL_Rotation objrot = new LSL_Rotation(rot); + ret.Add(objrot); + + break; + case ScriptBaseClass.OBJECT_VELOCITY: + Vector3 vel = Vector3.Zero; + + if (obj.ParentGroup.IsAttachment) + { + ScenePresence sp = World.GetScenePresence(obj.ParentGroup.AttachedAvatar); + + if (sp != null) + vel = sp.GetWorldVelocity(); + } + else + { + vel = obj.Velocity; + } + + ret.Add(vel); + break; + case ScriptBaseClass.OBJECT_OWNER: + ret.Add(new LSL_String(obj.OwnerID.ToString())); + break; + case ScriptBaseClass.OBJECT_GROUP: + ret.Add(new LSL_String(obj.GroupID.ToString())); + break; + case ScriptBaseClass.OBJECT_CREATOR: + ret.Add(new LSL_String(obj.CreatorID.ToString())); + break; + case ScriptBaseClass.OBJECT_RUNNING_SCRIPT_COUNT: + ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount())); + break; + case ScriptBaseClass.OBJECT_TOTAL_SCRIPT_COUNT: + ret.Add(new LSL_Integer(obj.ParentGroup.ScriptCount())); + break; + case ScriptBaseClass.OBJECT_SCRIPT_MEMORY: + // The value returned in SL for mono scripts is 65536 * number of active scripts + // and 16384 * number of active scripts for LSO. since llGetFreememory + // is coded to give the LSO value use it here + ret.Add(new LSL_Integer(obj.ParentGroup.RunningScriptCount() * 16384)); + break; + case ScriptBaseClass.OBJECT_SCRIPT_TIME: + // Average cpu time in seconds per simulator frame expended on all scripts in the object + ret.Add(new LSL_Float(obj.ParentGroup.ScriptExecutionTime() / 1000.0f)); + break; + case ScriptBaseClass.OBJECT_PRIM_EQUIVALENCE: + // according to the SL wiki A prim or linkset will have prim + // equivalent of the number of prims in a linkset if it does not + // contain a mesh anywhere in the link set or is not a normal prim + // The value returned in SL for normal prims is prim count + ret.Add(new LSL_Integer(obj.ParentGroup.PrimCount)); + break; + // The following 3 costs I have intentionaly coded to return zero. They are part of + // "Land Impact" calculations. These calculations are probably not applicable + // to OpenSim and are not yet complete in SL + case ScriptBaseClass.OBJECT_SERVER_COST: + // The linden calculation is here + // http://wiki.secondlife.com/wiki/Mesh/Mesh_Server_Weight + // The value returned in SL for normal prims looks like the prim count + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_STREAMING_COST: + // The linden calculation is here + // http://wiki.secondlife.com/wiki/Mesh/Mesh_Streaming_Cost + // The value returned in SL for normal prims looks like the prim count * 0.06 + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_PHYSICS_COST: + // The linden calculation is here + // http://wiki.secondlife.com/wiki/Mesh/Mesh_physics + // The value returned in SL for normal prims looks like the prim count + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_CHARACTER_TIME: // Pathfinding + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_ROOT: + ret.Add(new LSL_String(obj.ParentGroup.RootPart.UUID.ToString())); + break; + case ScriptBaseClass.OBJECT_ATTACHED_POINT: + ret.Add(new LSL_Integer(obj.ParentGroup.AttachmentPoint)); + break; + case ScriptBaseClass.OBJECT_PATHFINDING_TYPE: + byte pcode = obj.Shape.PCode; + if (obj.ParentGroup.AttachmentPoint != 0 + || pcode == (byte)PCode.Grass + || pcode == (byte)PCode.Tree + || pcode == (byte)PCode.NewTree) + { + ret.Add(new LSL_Integer(ScriptBaseClass.OPT_OTHER)); + } + else + { + ret.Add(new LSL_Integer(ScriptBaseClass.OPT_LEGACY_LINKSET)); + } + break; + case ScriptBaseClass.OBJECT_PHYSICS: + if (obj.ParentGroup.AttachmentPoint != 0) + { + ret.Add(new LSL_Integer(0)); // Always false if attached + } + else + { + ret.Add(new LSL_Integer(obj.ParentGroup.UsesPhysics ? 1 : 0)); + } + break; + case ScriptBaseClass.OBJECT_PHANTOM: + if (obj.ParentGroup.AttachmentPoint != 0) + { + ret.Add(new LSL_Integer(0)); // Always false if attached + } + else + { + ret.Add(new LSL_Integer(obj.ParentGroup.IsPhantom ? 1 : 0)); + } + break; + case ScriptBaseClass.OBJECT_TEMP_ON_REZ: + ret.Add(new LSL_Integer(obj.ParentGroup.IsTemporary ? 1 : 0)); + break; + case ScriptBaseClass.OBJECT_RENDER_WEIGHT: + ret.Add(new LSL_Integer(0)); + break; + case ScriptBaseClass.OBJECT_HOVER_HEIGHT: + ret.Add(new LSL_Float(0)); + break; + case ScriptBaseClass.OBJECT_BODY_SHAPE_TYPE: + ret.Add(new LSL_Float(-1)); + break; + case ScriptBaseClass.OBJECT_LAST_OWNER_ID: + ret.Add(new LSL_Key(obj.ParentGroup.LastOwnerID.ToString())); + break; + default: + // Invalid or unhandled constant. + ret.Add(new LSL_Integer(ScriptBaseClass.OBJECT_UNKNOWN_DETAIL)); + break; + } + } + + return ret; + } + } + + return new LSL_List(); + } + + internal UUID GetScriptByName(string name) + { + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item == null || item.Type != 10) + return UUID.Zero; + + return item.ItemID; + } + + /// + /// Reports the script error in the viewer's Script Warning/Error dialog and shouts it on the debug channel. + /// + /// The name of the command that generated the error. + /// The error message to report to the user. + internal void Error(string command, string message) + { + string text = command + ": " + message; + if (text.Length > 1023) + { + text = text.Substring(0, 1023); + } + + World.SimChat(Utils.StringToBytes(text), ChatTypeEnum.DebugChannel, ScriptBaseClass.DEBUG_CHANNEL, + m_host.ParentGroup.RootPart.AbsolutePosition, m_host.Name, m_host.UUID, false); + + IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface(); + if (wComm != null) + { + wComm.DeliverMessage(ChatTypeEnum.Shout, ScriptBaseClass.DEBUG_CHANNEL, m_host.Name, m_host.UUID, text); + } + } + + /// + /// Reports that the command is not implemented as a script error. + /// + /// The name of the command that is not implemented. + /// Additional information to report to the user. (Optional) + internal void NotImplemented(string command, string message = "") + { + if (throwErrorOnNotImplemented) + { + if (message != "") + { + message = " - " + message; + } + + throw new NotImplementedException("Command not implemented: " + command + message); + } + else + { + string text = "Command not implemented"; + if (message != "") + { + text = text + " - " + message; + } + + Error(command, text); + } + } + + /// + /// Reports that the command is deprecated as a script error. + /// + /// The name of the command that is deprecated. + /// Additional information to report to the user. (Optional) + internal void Deprecated(string command, string message = "") + { + string text = "Command deprecated"; + if (message != "") + { + text = text + " - " + message; + } + + Error(command, text); + } + + public delegate void AssetRequestCallback(UUID assetID, AssetBase asset); + protected void WithNotecard(UUID assetID, AssetRequestCallback cb) + { + World.AssetService.Get(assetID.ToString(), this, + delegate(string i, object sender, AssetBase a) + { + UUID uuid = UUID.Zero; + UUID.TryParse(i, out uuid); + cb(uuid, a); + }); + } + + public LSL_String llGetNumberOfNotecardLines(string name) + { + m_host.AddScriptLPS(1); + + UUID assetID = UUID.Zero; + + if (!UUID.TryParse(name, out assetID)) + { + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item != null && item.Type == 7) + assetID = item.AssetID; + } + + if (assetID == UUID.Zero) + { + // => complain loudly, as specified by the LSL docs + Error("llGetNumberOfNotecardLines", "Can't find notecard '" + name + "'"); + + return UUID.Zero.ToString(); + } + + string reqIdentifier = UUID.Random().ToString(); + + // was: UUID tid = tid = AsyncCommands. + UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, reqIdentifier); + + if (NotecardCache.IsCached(assetID)) + { + AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(assetID).ToString()); + + ScriptSleep(m_sleepMsOnGetNumberOfNotecardLines); + return tid.ToString(); + } + + WithNotecard(assetID, delegate (UUID id, AssetBase a) + { + if (a == null || a.Type != 7) + { + Error("llGetNumberOfNotecardLines", "Can't find notecard '" + name + "'"); + return; + } + + NotecardCache.Cache(id, a.Data); + AsyncCommands.DataserverPlugin.DataserverReply(reqIdentifier, NotecardCache.GetLines(id).ToString()); + }); + + ScriptSleep(m_sleepMsOnGetNumberOfNotecardLines); + return tid.ToString(); + } + + public LSL_String llGetNotecardLine(string name, int line) + { + m_host.AddScriptLPS(1); + + UUID assetID = UUID.Zero; + + if (!UUID.TryParse(name, out assetID)) + { + TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name); + + if (item != null && item.Type == 7) + assetID = item.AssetID; + } + + if (assetID == UUID.Zero) + { + // => complain loudly, as specified by the LSL docs + Error("llGetNotecardLine", "Can't find notecard '" + name + "'"); + + return UUID.Zero.ToString(); + } + + string reqIdentifier = UUID.Random().ToString(); + + // was: UUID tid = tid = AsyncCommands. + UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, reqIdentifier); + + if (NotecardCache.IsCached(assetID)) + { + AsyncCommands.DataserverPlugin.DataserverReply( + reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax)); + + ScriptSleep(m_sleepMsOnGetNotecardLine); + return tid.ToString(); + } + + WithNotecard(assetID, delegate (UUID id, AssetBase a) + { + if (a == null || a.Type != 7) + { + Error("llGetNotecardLine", "Can't find notecard '" + name + "'"); + return; + } + + string data = Encoding.UTF8.GetString(a.Data); + //m_log.Debug(data); + NotecardCache.Cache(id, a.Data); + AsyncCommands.DataserverPlugin.DataserverReply( + reqIdentifier, NotecardCache.GetLine(assetID, line, m_notecardLineReadCharsMax)); + }); + + ScriptSleep(m_sleepMsOnGetNotecardLine); + return tid.ToString(); + } + + public void SetPrimitiveParamsEx(LSL_Key prim, LSL_List rules, string originFunc) + { + SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); + if (obj == null) + return; + + if (obj.OwnerID != m_host.OwnerID) + return; + + SetEntityParams(new List() { obj }, rules, originFunc); + } + + public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) + { + SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); + + if (obj != null && obj.OwnerID == m_host.OwnerID) + return GetEntityParams(obj, rules); + + return new LSL_List(); + } + + public void print(string str) + { + // yes, this is a real LSL function. See: http://wiki.secondlife.com/wiki/Print + IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "OSSL"); + if (ossl != null) + { + ossl.CheckThreatLevel(ThreatLevel.High, "print"); + m_log.Info("LSL print():" + str); + } + } + + private string Name2Username(string name) + { + string[] parts = name.Split(new char[] {' '}); + if (parts.Length < 2) + return name.ToLower(); + if (parts[1] == "Resident") + return parts[0].ToLower(); + + return name.Replace(" ", ".").ToLower(); + } + + public LSL_String llGetUsername(string id) + { + return Name2Username(llKey2Name(id)); + } + + public LSL_String llRequestUsername(string id) + { + UUID rq = UUID.Random(); + + AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString()); + + AsyncCommands.DataserverPlugin.DataserverReply(rq.ToString(), Name2Username(llKey2Name(id))); + + return rq.ToString(); + } + + public LSL_String llGetDisplayName(string id) + { + return llKey2Name(id); + } + + public LSL_String llRequestDisplayName(string id) + { + UUID rq = UUID.Random(); + + AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString()); + + AsyncCommands.DataserverPlugin.DataserverReply(rq.ToString(), llKey2Name(id)); + + return rq.ToString(); + } + + private struct Tri + { + public Vector3 p1; + public Vector3 p2; + public Vector3 p3; + } + + private bool InBoundingBox(ScenePresence avatar, Vector3 point) + { + float height = avatar.Appearance.AvatarHeight; + Vector3 b1 = avatar.AbsolutePosition + new Vector3(-0.22f, -0.22f, -height/2); + Vector3 b2 = avatar.AbsolutePosition + new Vector3(0.22f, 0.22f, height/2); + + if (point.X > b1.X && point.X < b2.X && + point.Y > b1.Y && point.Y < b2.Y && + point.Z > b1.Z && point.Z < b2.Z) + return true; + return false; + } + + private ContactResult[] AvatarIntersection(Vector3 rayStart, Vector3 rayEnd) + { + List contacts = new List(); + + Vector3 ab = rayEnd - rayStart; + + World.ForEachScenePresence(delegate(ScenePresence sp) + { + Vector3 ac = sp.AbsolutePosition - rayStart; +// Vector3 bc = sp.AbsolutePosition - rayEnd; + + double d = Math.Abs(Vector3.Mag(Vector3.Cross(ab, ac)) / Vector3.Distance(rayStart, rayEnd)); + + if (d > 1.5) + return; + + double d2 = Vector3.Dot(Vector3.Negate(ab), ac); + + if (d2 > 0) + return; + + double dp = Math.Sqrt(Vector3.Mag(ac) * Vector3.Mag(ac) - d * d); + Vector3 p = rayStart + Vector3.Divide(Vector3.Multiply(ab, (float)dp), (float)Vector3.Mag(ab)); + + if (!InBoundingBox(sp, p)) + return; + + ContactResult result = new ContactResult (); + result.ConsumerID = sp.LocalId; + result.Depth = Vector3.Distance(rayStart, p); + result.Normal = Vector3.Zero; + result.Pos = p; + + contacts.Add(result); + }); + + return contacts.ToArray(); + } + + private ContactResult[] ObjectIntersection(Vector3 rayStart, Vector3 rayEnd, bool includePhysical, bool includeNonPhysical, bool includePhantom) + { + Ray ray = new Ray(rayStart, Vector3.Normalize(rayEnd - rayStart)); + List contacts = new List(); + + Vector3 ab = rayEnd - rayStart; + + World.ForEachSOG(delegate(SceneObjectGroup group) + { + if (m_host.ParentGroup == group) + return; + + if (group.IsAttachment) + return; + + if (group.RootPart.PhysActor == null) + { + if (!includePhantom) + return; + } + else + { + if (group.RootPart.PhysActor.IsPhysical) + { + if (!includePhysical) + return; + } + else + { + if (!includeNonPhysical) + return; + } + } + + // Find the radius ouside of which we don't even need to hit test + float minX; + float maxX; + float minY; + float maxY; + float minZ; + float maxZ; + + float radius = 0.0f; + + group.GetAxisAlignedBoundingBoxRaw(out minX, out maxX, out minY, out maxY, out minZ, out maxZ); + + if (Math.Abs(minX) > radius) + radius = Math.Abs(minX); + if (Math.Abs(minY) > radius) + radius = Math.Abs(minY); + if (Math.Abs(minZ) > radius) + radius = Math.Abs(minZ); + if (Math.Abs(maxX) > radius) + radius = Math.Abs(maxX); + if (Math.Abs(maxY) > radius) + radius = Math.Abs(maxY); + if (Math.Abs(maxZ) > radius) + radius = Math.Abs(maxZ); + radius = radius*1.413f; + Vector3 ac = group.AbsolutePosition - rayStart; +// Vector3 bc = group.AbsolutePosition - rayEnd; + + double d = Math.Abs(Vector3.Mag(Vector3.Cross(ab, ac)) / Vector3.Distance(rayStart, rayEnd)); + + // Too far off ray, don't bother + if (d > radius) + return; + + // Behind ray, drop + double d2 = Vector3.Dot(Vector3.Negate(ab), ac); + if (d2 > 0) + return; + + ray = new Ray(rayStart, Vector3.Normalize(rayEnd - rayStart)); + EntityIntersection intersection = group.TestIntersection(ray, true, false); + // Miss. + if (!intersection.HitTF) + return; + + Vector3 b1 = group.AbsolutePosition + new Vector3(minX, minY, minZ); + Vector3 b2 = group.AbsolutePosition + new Vector3(maxX, maxY, maxZ); + //m_log.DebugFormat("[LLCASTRAY]: min<{0},{1},{2}>, max<{3},{4},{5}> = hitp<{6},{7},{8}>", b1.X,b1.Y,b1.Z,b2.X,b2.Y,b2.Z,intersection.ipoint.X,intersection.ipoint.Y,intersection.ipoint.Z); + if (!(intersection.ipoint.X >= b1.X && intersection.ipoint.X <= b2.X && + intersection.ipoint.Y >= b1.Y && intersection.ipoint.Y <= b2.Y && + intersection.ipoint.Z >= b1.Z && intersection.ipoint.Z <= b2.Z)) + return; + + ContactResult result = new ContactResult (); + result.ConsumerID = group.LocalId; + result.Depth = intersection.distance; + result.Normal = intersection.normal; + result.Pos = intersection.ipoint; + + contacts.Add(result); + }); + + return contacts.ToArray(); + } + + private ContactResult? GroundIntersection(Vector3 rayStart, Vector3 rayEnd) + { + double[,] heightfield = World.Heightmap.GetDoubles(); + List contacts = new List(); + + double min = 2048.0; + double max = 0.0; + + // Find the min and max of the heightfield + for (int x = 0 ; x < World.Heightmap.Width ; x++) + { + for (int y = 0 ; y < World.Heightmap.Height ; y++) + { + if (heightfield[x, y] > max) + max = heightfield[x, y]; + if (heightfield[x, y] < min) + min = heightfield[x, y]; + } + } + + + // A ray extends past rayEnd, but doesn't go back before + // rayStart. If the start is above the highest point of the ground + // and the ray goes up, we can't hit the ground. Ever. + if (rayStart.Z > max && rayEnd.Z >= rayStart.Z) + return null; + + // Same for going down + if (rayStart.Z < min && rayEnd.Z <= rayStart.Z) + return null; + + List trilist = new List(); + + // Create our triangle list + for (int x = 1 ; x < World.Heightmap.Width ; x++) + { + for (int y = 1 ; y < World.Heightmap.Height ; y++) + { + Tri t1 = new Tri(); + Tri t2 = new Tri(); + + Vector3 p1 = new Vector3(x-1, y-1, (float)heightfield[x-1, y-1]); + Vector3 p2 = new Vector3(x, y-1, (float)heightfield[x, y-1]); + Vector3 p3 = new Vector3(x, y, (float)heightfield[x, y]); + Vector3 p4 = new Vector3(x-1, y, (float)heightfield[x-1, y]); + + t1.p1 = p1; + t1.p2 = p2; + t1.p3 = p3; + + t2.p1 = p3; + t2.p2 = p4; + t2.p3 = p1; + + trilist.Add(t1); + trilist.Add(t2); + } + } + + // Ray direction + Vector3 rayDirection = rayEnd - rayStart; + + foreach (Tri t in trilist) + { + // Compute triangle plane normal and edges + Vector3 u = t.p2 - t.p1; + Vector3 v = t.p3 - t.p1; + Vector3 n = Vector3.Cross(u, v); + + if (n == Vector3.Zero) + continue; + + Vector3 w0 = rayStart - t.p1; + double a = -Vector3.Dot(n, w0); + double b = Vector3.Dot(n, rayDirection); + + // Not intersecting the plane, or in plane (same thing) + // Ignoring this MAY cause the ground to not be detected + // sometimes + if (Math.Abs(b) < 0.000001) + continue; + + double r = a / b; + + // ray points away from plane + if (r < 0.0) + continue; + + Vector3 ip = rayStart + Vector3.Multiply(rayDirection, (float)r); + + float uu = Vector3.Dot(u, u); + float uv = Vector3.Dot(u, v); + float vv = Vector3.Dot(v, v); + Vector3 w = ip - t.p1; + float wu = Vector3.Dot(w, u); + float wv = Vector3.Dot(w, v); + float d = uv * uv - uu * vv; + + float cs = (uv * wv - vv * wu) / d; + if (cs < 0 || cs > 1.0) + continue; + float ct = (uv * wu - uu * wv) / d; + if (ct < 0 || (cs + ct) > 1.0) + continue; + + // Add contact point + ContactResult result = new ContactResult (); + result.ConsumerID = 0; + result.Depth = Vector3.Distance(rayStart, ip); + result.Normal = n; + result.Pos = ip; + + contacts.Add(result); + } + + if (contacts.Count == 0) + return null; + + contacts.Sort(delegate(ContactResult a, ContactResult b) + { + return (int)(a.Depth - b.Depth); + }); + + return contacts[0]; + } + + public LSL_List llCastRay(LSL_Vector start, LSL_Vector end, LSL_List options) + { + // Use llCastRay V3 if configured + if (m_useCastRayV3) + return llCastRayV3(start, end, options); + + LSL_List list = new LSL_List(); + + m_host.AddScriptLPS(1); + + Vector3 rayStart = start; + Vector3 rayEnd = end; + Vector3 dir = rayEnd - rayStart; + + float dist = Vector3.Mag(dir); + + int count = 1; + bool detectPhantom = false; + int dataFlags = 0; + int rejectTypes = 0; + + for (int i = 0; i < options.Length; i += 2) + { + if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_MAX_HITS) + count = options.GetLSLIntegerItem(i + 1); + else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DETECT_PHANTOM) + detectPhantom = (options.GetLSLIntegerItem(i + 1) > 0); + else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DATA_FLAGS) + dataFlags = options.GetLSLIntegerItem(i + 1); + else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_REJECT_TYPES) + rejectTypes = options.GetLSLIntegerItem(i + 1); + } + + if (count > 16) + count = 16; + + List results = new List(); + + bool checkTerrain = !((rejectTypes & ScriptBaseClass.RC_REJECT_LAND) == ScriptBaseClass.RC_REJECT_LAND); + bool checkAgents = !((rejectTypes & ScriptBaseClass.RC_REJECT_AGENTS) == ScriptBaseClass.RC_REJECT_AGENTS); + bool checkNonPhysical = !((rejectTypes & ScriptBaseClass.RC_REJECT_NONPHYSICAL) == ScriptBaseClass.RC_REJECT_NONPHYSICAL); + bool checkPhysical = !((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) == ScriptBaseClass.RC_REJECT_PHYSICAL); + + + if (World.SupportsRayCastFiltered()) + { + if (dist == 0) + return list; + + RayFilterFlags rayfilter = RayFilterFlags.ClosestAndBackCull; + if (checkTerrain) + rayfilter |= RayFilterFlags.land; +// if (checkAgents) +// rayfilter |= RayFilterFlags.agent; + if (checkPhysical) + rayfilter |= RayFilterFlags.physical; + if (checkNonPhysical) + rayfilter |= RayFilterFlags.nonphysical; + if (detectPhantom) + rayfilter |= RayFilterFlags.LSLPhantom; + + Vector3 direction = dir * ( 1/dist); + + if(rayfilter == 0) + { + list.Add(new LSL_Integer(0)); + return list; + } + + // get some more contacts to sort ??? + int physcount = 4 * count; + if (physcount > 20) + physcount = 20; + + object physresults; + physresults = World.RayCastFiltered(rayStart, direction, dist, physcount, rayfilter); + + if (physresults == null) + { + list.Add(new LSL_Integer(-3)); // timeout error + return list; + } + + results = (List)physresults; + + // for now physics doesn't detect sitted avatars so do it outside physics + if (checkAgents) + { + ContactResult[] agentHits = AvatarIntersection(rayStart, rayEnd); + foreach (ContactResult r in agentHits) + results.Add(r); + } + + // TODO: Replace this with a better solution. ObjectIntersection can only + // detect nonphysical phantoms. They are detected by virtue of being + // nonphysical (e.g. no PhysActor) so will not conflict with detecting + // physicsl phantoms as done by the physics scene + // We don't want anything else but phantoms here. + if (detectPhantom) + { + ContactResult[] objectHits = ObjectIntersection(rayStart, rayEnd, false, false, true); + foreach (ContactResult r in objectHits) + results.Add(r); + } + } + else + { + if (checkAgents) + { + ContactResult[] agentHits = AvatarIntersection(rayStart, rayEnd); + foreach (ContactResult r in agentHits) + results.Add(r); + } + + if (checkPhysical || checkNonPhysical || detectPhantom) + { + ContactResult[] objectHits = ObjectIntersection(rayStart, rayEnd, checkPhysical, checkNonPhysical, detectPhantom); + for (int iter = 0; iter < objectHits.Length; iter++) + { + // Redistance the Depth because the Scene RayCaster returns distance from center to make the rezzing code simpler. + objectHits[iter].Depth = Vector3.Distance(objectHits[iter].Pos, rayStart); + results.Add(objectHits[iter]); + } + } + } + + if (checkTerrain) + { + ContactResult? groundContact = GroundIntersection(rayStart, rayEnd); + if (groundContact != null) + results.Add((ContactResult)groundContact); + } + + results.Sort(delegate(ContactResult a, ContactResult b) + { + return a.Depth.CompareTo(b.Depth); + }); + + int values = 0; + SceneObjectGroup thisgrp = m_host.ParentGroup; + + foreach (ContactResult result in results) + { + if (result.Depth > dist) + continue; + + // physics ray can return colisions with host prim + if (m_host.LocalId == result.ConsumerID) + continue; + + UUID itemID = UUID.Zero; + int linkNum = 0; + + SceneObjectPart part = World.GetSceneObjectPart(result.ConsumerID); + // It's a prim! + if (part != null) + { + // dont detect members of same object ??? + if (part.ParentGroup == thisgrp) + continue; + + if ((dataFlags & ScriptBaseClass.RC_GET_ROOT_KEY) == ScriptBaseClass.RC_GET_ROOT_KEY) + itemID = part.ParentGroup.UUID; + else + itemID = part.UUID; + + linkNum = part.LinkNum; + } + else + { + ScenePresence sp = World.GetScenePresence(result.ConsumerID); + /// It it a boy? a girl? + if (sp != null) + itemID = sp.UUID; + } + + list.Add(new LSL_String(itemID.ToString())); + list.Add(new LSL_String(result.Pos.ToString())); + + if ((dataFlags & ScriptBaseClass.RC_GET_LINK_NUM) == ScriptBaseClass.RC_GET_LINK_NUM) + list.Add(new LSL_Integer(linkNum)); + + if ((dataFlags & ScriptBaseClass.RC_GET_NORMAL) == ScriptBaseClass.RC_GET_NORMAL) + list.Add(new LSL_Vector(result.Normal)); + + values++; + if (values >= count) + break; + } + + list.Add(new LSL_Integer(values)); + + return list; + } + + /// + /// Implementation of llCastRay similar to SL 2015-04-21. + /// http://wiki.secondlife.com/wiki/LlCastRay + /// Uses pure geometry, bounding shapes, meshing and no physics + /// for prims, sculpts, meshes, avatars and terrain. + /// Implements all flags, reject types and data flags. + /// Can handle both objects/groups and prims/parts, by config. + /// May sometimes be inaccurate owing to calculation precision, + /// meshing detail level and a bug in libopenmetaverse PrimMesher. + /// + public LSL_List llCastRayV3(LSL_Vector start, LSL_Vector end, LSL_List options) + { + m_host.AddScriptLPS(1); + LSL_List result = new LSL_List(); + + // Prepare throttle data + int calledMs = Environment.TickCount; + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); + UUID regionId = World.RegionInfo.RegionID; + UUID userId = UUID.Zero; + int msAvailable = 0; + // Throttle per owner when attachment or "vehicle" (sat upon) + if (m_host.ParentGroup.IsAttachment || m_host.ParentGroup.GetSittingAvatars().Count > 0) + { + userId = m_host.OwnerID; + msAvailable = m_msPerAvatarInCastRay; + } + // Throttle per parcel when not attachment or vehicle + else + { + LandData land = World.GetLandData(m_host.GetWorldPosition()); + if (land != null) + msAvailable = m_msPerRegionInCastRay * land.Area / 65536; + } + // Clamp for "oversized" parcels on varregions + if (msAvailable > m_msMaxInCastRay) + msAvailable = m_msMaxInCastRay; + + // Check throttle data + int fromCalledMs = calledMs - m_msThrottleInCastRay; + lock (m_castRayCalls) + { + for (int i = m_castRayCalls.Count - 1; i >= 0; i--) + { + // Delete old calls from throttle data + if (m_castRayCalls[i].CalledMs < fromCalledMs) + m_castRayCalls.RemoveAt(i); + // Use current region (in multi-region sims) + else if (m_castRayCalls[i].RegionId == regionId) + { + // Reduce available time with recent calls + if (m_castRayCalls[i].UserId == userId) + msAvailable -= m_castRayCalls[i].UsedMs; + } + } + } + + // Return failure if not enough available time + if (msAvailable < m_msMinInCastRay) + { + result.Add(new LSL_Integer(ScriptBaseClass.RCERR_CAST_TIME_EXCEEDED)); + return result; + } + + // Initialize + List rayHits = new List(); + float tol = m_floatToleranceInCastRay; + Vector3 pos1Ray = start; + Vector3 pos2Ray = end; + + // Get input options + int rejectTypes = 0; + int dataFlags = 0; + int maxHits = 1; + bool detectPhantom = false; + for (int i = 0; i < options.Length; i += 2) + { + if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_REJECT_TYPES) + rejectTypes = options.GetLSLIntegerItem(i + 1); + else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DATA_FLAGS) + dataFlags = options.GetLSLIntegerItem(i + 1); + else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_MAX_HITS) + maxHits = options.GetLSLIntegerItem(i + 1); + else if (options.GetLSLIntegerItem(i) == ScriptBaseClass.RC_DETECT_PHANTOM) + detectPhantom = (options.GetLSLIntegerItem(i + 1) != 0); + } + if (maxHits > m_maxHitsInCastRay) + maxHits = m_maxHitsInCastRay; + bool rejectAgents = ((rejectTypes & ScriptBaseClass.RC_REJECT_AGENTS) != 0); + bool rejectPhysical = ((rejectTypes & ScriptBaseClass.RC_REJECT_PHYSICAL) != 0); + bool rejectNonphysical = ((rejectTypes & ScriptBaseClass.RC_REJECT_NONPHYSICAL) != 0); + bool rejectLand = ((rejectTypes & ScriptBaseClass.RC_REJECT_LAND) != 0); + bool getNormal = ((dataFlags & ScriptBaseClass.RC_GET_NORMAL) != 0); + bool getRootKey = ((dataFlags & ScriptBaseClass.RC_GET_ROOT_KEY) != 0); + bool getLinkNum = ((dataFlags & ScriptBaseClass.RC_GET_LINK_NUM) != 0); + + // Calculate some basic parameters + Vector3 vecRay = pos2Ray - pos1Ray; + float rayLength = vecRay.Length(); + + // Try to get a mesher and return failure if none, degenerate ray, or max 0 hits + IRendering primMesher = null; + List renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); + if (renderers.Count < 1 || rayLength < tol || m_maxHitsInCastRay < 1) + { + result.Add(new LSL_Integer(ScriptBaseClass.RCERR_UNKNOWN)); + return result; + } + primMesher = RenderingLoader.LoadRenderer(renderers[0]); + + // Iterate over all objects/groups and prims/parts in region + World.ForEachSOG( + delegate(SceneObjectGroup group) + { + // Check group filters unless part filters are configured + bool isPhysical = (group.RootPart != null && group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical); + bool isNonphysical = !isPhysical; + bool isPhantom = group.IsPhantom || group.IsVolumeDetect; + bool isAttachment = group.IsAttachment; + bool doGroup = true; + if (isPhysical && rejectPhysical) + doGroup = false; + if (isNonphysical && rejectNonphysical) + doGroup = false; + if (isPhantom && detectPhantom) + doGroup = true; + if (m_filterPartsInCastRay) + doGroup = true; + if (isAttachment && !m_doAttachmentsInCastRay) + doGroup = false; + // Parse object/group if passed filters + if (doGroup) + { + // Iterate over all prims/parts in object/group + foreach(SceneObjectPart part in group.Parts) + { + // Check part filters if configured + if (m_filterPartsInCastRay) + { + isPhysical = (part.PhysActor != null && part.PhysActor.IsPhysical); + isNonphysical = !isPhysical; + isPhantom = ((part.Flags & PrimFlags.Phantom) != 0) || (part.VolumeDetectActive); + bool doPart = true; + if (isPhysical && rejectPhysical) + doPart = false; + if (isNonphysical && rejectNonphysical) + doPart = false; + if (isPhantom && detectPhantom) + doPart = true; + if (!doPart) + continue; + } + + // Parse prim/part and project ray if passed filters + Vector3 scalePart = part.Scale; + Vector3 posPart = part.GetWorldPosition(); + Quaternion rotPart = part.GetWorldRotation(); + Quaternion rotPartInv = Quaternion.Inverse(rotPart); + Vector3 pos1RayProj = ((pos1Ray - posPart) * rotPartInv) / scalePart; + Vector3 pos2RayProj = ((pos2Ray - posPart) * rotPartInv) / scalePart; + + // Filter parts by shape bounding boxes + Vector3 shapeBoxMax = new Vector3(0.5f, 0.5f, 0.5f); + if (!part.Shape.SculptEntry) + shapeBoxMax = shapeBoxMax * (new Vector3(m_primSafetyCoeffX, m_primSafetyCoeffY, m_primSafetyCoeffZ)); + shapeBoxMax = shapeBoxMax + (new Vector3(tol, tol, tol)); + if (RayIntersectsShapeBox(pos1RayProj, pos2RayProj, shapeBoxMax)) + { + // Prepare data needed to check for ray hits + RayTrans rayTrans = new RayTrans(); + rayTrans.PartId = part.UUID; + rayTrans.GroupId = part.ParentGroup.UUID; + rayTrans.Link = group.PrimCount > 1 ? part.LinkNum : 0; + rayTrans.ScalePart = scalePart; + rayTrans.PositionPart = posPart; + rayTrans.RotationPart = rotPart; + rayTrans.ShapeNeedsEnds = true; + rayTrans.Position1Ray = pos1Ray; + rayTrans.Position1RayProj = pos1RayProj; + rayTrans.VectorRayProj = pos2RayProj - pos1RayProj; + + // Get detail level depending on type + int lod = 0; + // Mesh detail level + if (part.Shape.SculptEntry && part.Shape.SculptType == (byte)SculptType.Mesh) + lod = (int)m_meshLodInCastRay; + // Sculpt detail level + else if (part.Shape.SculptEntry && part.Shape.SculptType == (byte)SculptType.Mesh) + lod = (int)m_sculptLodInCastRay; + // Shape detail level + else if (!part.Shape.SculptEntry) + lod = (int)m_primLodInCastRay; + + // Try to get cached mesh if configured + ulong meshKey = 0; + FacetedMesh mesh = null; + if (m_useMeshCacheInCastRay) + { + meshKey = part.Shape.GetMeshKey(Vector3.One, (float)(4 << lod)); + lock (m_cachedMeshes) + { + m_cachedMeshes.TryGetValue(meshKey, out mesh); + } + } + + // Create mesh if no cached mesh + if (mesh == null) + { + // Make an OMV prim to be able to mesh part + Primitive omvPrim = part.Shape.ToOmvPrimitive(posPart, rotPart); + byte[] sculptAsset = null; + if (omvPrim.Sculpt != null) + sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString()); + + // When part is mesh, get mesh + if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null) + { + AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset); + FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, m_meshLodInCastRay, out mesh); + meshAsset = null; + } + + // When part is sculpt, create mesh + // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt. + else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null) + { + IJ2KDecoder imgDecoder = World.RequestModuleInterface(); + if (imgDecoder != null) + { + Image sculpt = imgDecoder.DecodeToImage(sculptAsset); + if (sculpt != null) + { + mesh = primMesher.GenerateFacetedSculptMesh(omvPrim, (Bitmap)sculpt, m_sculptLodInCastRay); + sculpt.Dispose(); + } + } + } + + // When part is shape, create mesh + else if (omvPrim.Sculpt == null) + { + if ( + omvPrim.PrimData.PathBegin == 0.0 && omvPrim.PrimData.PathEnd == 1.0 && + omvPrim.PrimData.PathTaperX == 0.0 && omvPrim.PrimData.PathTaperY == 0.0 && + omvPrim.PrimData.PathSkew == 0.0 && + omvPrim.PrimData.PathTwist - omvPrim.PrimData.PathTwistBegin == 0.0 + ) + rayTrans.ShapeNeedsEnds = false; + mesh = primMesher.GenerateFacetedMesh(omvPrim, m_primLodInCastRay); + } + + // Cache mesh if configured + if (m_useMeshCacheInCastRay && mesh != null) + { + lock(m_cachedMeshes) + { + if (!m_cachedMeshes.ContainsKey(meshKey)) + m_cachedMeshes.Add(meshKey, mesh); + } + } + } + // Check mesh for ray hits + AddRayInFacetedMesh(mesh, rayTrans, ref rayHits); + mesh = null; + } + } + } + } + ); + + // Check avatar filter + if (!rejectAgents) + { + // Iterate over all avatars in region + World.ForEachRootScenePresence( + delegate (ScenePresence sp) + { + // Get bounding box + Vector3 lower; + Vector3 upper; + BoundingBoxOfScenePresence(sp, out lower, out upper); + // Parse avatar + Vector3 scalePart = upper - lower; + Vector3 posPart = sp.AbsolutePosition; + Quaternion rotPart = sp.GetWorldRotation(); + Quaternion rotPartInv = Quaternion.Inverse(rotPart); + posPart = posPart + (lower + upper) * 0.5f * rotPart; + // Project ray + Vector3 pos1RayProj = ((pos1Ray - posPart) * rotPartInv) / scalePart; + Vector3 pos2RayProj = ((pos2Ray - posPart) * rotPartInv) / scalePart; + + // Filter avatars by shape bounding boxes + Vector3 shapeBoxMax = new Vector3(0.5f + tol, 0.5f + tol, 0.5f + tol); + if (RayIntersectsShapeBox(pos1RayProj, pos2RayProj, shapeBoxMax)) + { + // Prepare data needed to check for ray hits + RayTrans rayTrans = new RayTrans(); + rayTrans.PartId = sp.UUID; + rayTrans.GroupId = sp.ParentPart != null ? sp.ParentPart.ParentGroup.UUID : sp.UUID; + rayTrans.Link = sp.ParentPart != null ? UUID2LinkNumber(sp.ParentPart, sp.UUID) : 0; + rayTrans.ScalePart = scalePart; + rayTrans.PositionPart = posPart; + rayTrans.RotationPart = rotPart; + rayTrans.ShapeNeedsEnds = false; + rayTrans.Position1Ray = pos1Ray; + rayTrans.Position1RayProj = pos1RayProj; + rayTrans.VectorRayProj = pos2RayProj - pos1RayProj; + + // Try to get cached mesh if configured + PrimitiveBaseShape prim = PrimitiveBaseShape.CreateSphere(); + int lod = (int)m_avatarLodInCastRay; + ulong meshKey = prim.GetMeshKey(Vector3.One, (float)(4 << lod)); + FacetedMesh mesh = null; + if (m_useMeshCacheInCastRay) + { + lock (m_cachedMeshes) + { + m_cachedMeshes.TryGetValue(meshKey, out mesh); + } + } + + // Create mesh if no cached mesh + if (mesh == null) + { + // Make OMV prim and create mesh + prim.Scale = scalePart; + Primitive omvPrim = prim.ToOmvPrimitive(posPart, rotPart); + mesh = primMesher.GenerateFacetedMesh(omvPrim, m_avatarLodInCastRay); + + // Cache mesh if configured + if (m_useMeshCacheInCastRay && mesh != null) + { + lock(m_cachedMeshes) + { + if (!m_cachedMeshes.ContainsKey(meshKey)) + m_cachedMeshes.Add(meshKey, mesh); + } + } + } + + // Check mesh for ray hits + AddRayInFacetedMesh(mesh, rayTrans, ref rayHits); + mesh = null; + } + } + ); + } + + // Check terrain filter + if (!rejectLand) + { + // Parse terrain + + // Mesh terrain and check bounding box + Vector3 lower; + Vector3 upper; + List triangles = TrisFromHeightmapUnderRay(pos1Ray, pos2Ray, out lower, out upper); + lower.Z -= tol; + upper.Z += tol; + if ((pos1Ray.Z >= lower.Z || pos2Ray.Z >= lower.Z) && (pos1Ray.Z <= upper.Z || pos2Ray.Z <= upper.Z)) + { + // Prepare data needed to check for ray hits + RayTrans rayTrans = new RayTrans(); + rayTrans.PartId = UUID.Zero; + rayTrans.GroupId = UUID.Zero; + rayTrans.Link = 0; + rayTrans.ScalePart = new Vector3 (1.0f, 1.0f, 1.0f); + rayTrans.PositionPart = Vector3.Zero; + rayTrans.RotationPart = Quaternion.Identity; + rayTrans.ShapeNeedsEnds = true; + rayTrans.Position1Ray = pos1Ray; + rayTrans.Position1RayProj = pos1Ray; + rayTrans.VectorRayProj = vecRay; + + // Check mesh + AddRayInTris(triangles, rayTrans, ref rayHits); + triangles = null; + } + } + + // Sort hits by ascending distance + rayHits.Sort((s1, s2) => s1.Distance.CompareTo(s2.Distance)); + + // Check excess hits per part and group + for (int t = 0; t < 2; t++) + { + int maxHitsPerType = 0; + UUID id = UUID.Zero; + if (t == 0) + maxHitsPerType = m_maxHitsPerPrimInCastRay; + else + maxHitsPerType = m_maxHitsPerObjectInCastRay; + + // Handle excess hits only when needed + if (maxHitsPerType < m_maxHitsInCastRay) + { + // Find excess hits + Hashtable hits = new Hashtable(); + for (int i = rayHits.Count - 1; i >= 0; i--) + { + if (t == 0) + id = rayHits[i].PartId; + else + id = rayHits[i].GroupId; + if (hits.ContainsKey(id)) + hits[id] = (int)hits[id] + 1; + else + hits[id] = 1; + } + + // Remove excess hits + for (int i = rayHits.Count - 1; i >= 0; i--) + { + if (t == 0) + id = rayHits[i].PartId; + else + id = rayHits[i].GroupId; + int hit = (int)hits[id]; + if (hit > m_maxHitsPerPrimInCastRay) + { + rayHits.RemoveAt(i); + hit--; + hits[id] = hit; + } + } + } + } + + // Parse hits into result list according to data flags + int hitCount = rayHits.Count; + if (hitCount > maxHits) + hitCount = maxHits; + for (int i = 0; i < hitCount; i++) + { + RayHit rayHit = rayHits[i]; + if (getRootKey) + result.Add(new LSL_Key(rayHit.GroupId.ToString())); + else + result.Add(new LSL_Key(rayHit.PartId.ToString())); + result.Add(new LSL_Vector(rayHit.Position)); + if (getLinkNum) + result.Add(new LSL_Integer(rayHit.Link)); + if (getNormal) + result.Add(new LSL_Vector(rayHit.Normal)); + } + result.Add(new LSL_Integer(hitCount)); + + // Add to throttle data + stopWatch.Stop(); + CastRayCall castRayCall = new CastRayCall(); + castRayCall.RegionId = regionId; + castRayCall.UserId = userId; + castRayCall.CalledMs = calledMs; + castRayCall.UsedMs = (int)stopWatch.ElapsedMilliseconds; + lock (m_castRayCalls) + { + m_castRayCalls.Add(castRayCall); + } + + // Return hits + return result; + } + + /// + /// Struct for transmitting parameters required for finding llCastRay ray hits. + /// + public struct RayTrans + { + public UUID PartId; + public UUID GroupId; + public int Link; + public Vector3 ScalePart; + public Vector3 PositionPart; + public Quaternion RotationPart; + public bool ShapeNeedsEnds; + public Vector3 Position1Ray; + public Vector3 Position1RayProj; + public Vector3 VectorRayProj; + } + + /// + /// Struct for llCastRay ray hits. + /// + public struct RayHit + { + public UUID PartId; + public UUID GroupId; + public int Link; + public Vector3 Position; + public Vector3 Normal; + public float Distance; + } + + /// + /// Struct for llCastRay throttle data. + /// + public struct CastRayCall + { + public UUID RegionId; + public UUID UserId; + public int CalledMs; + public int UsedMs; + } + + /// + /// Helper to check if a ray intersects a shape bounding box. + /// + private bool RayIntersectsShapeBox(Vector3 pos1RayProj, Vector3 pos2RayProj, Vector3 shapeBoxMax) + { + // Skip if ray can't intersect bounding box; + Vector3 rayBoxProjMin = Vector3.Min(pos1RayProj, pos2RayProj); + Vector3 rayBoxProjMax = Vector3.Max(pos1RayProj, pos2RayProj); + if ( + rayBoxProjMin.X > shapeBoxMax.X || rayBoxProjMin.Y > shapeBoxMax.Y || rayBoxProjMin.Z > shapeBoxMax.Z || + rayBoxProjMax.X < -shapeBoxMax.X || rayBoxProjMax.Y < -shapeBoxMax.Y || rayBoxProjMax.Z < -shapeBoxMax.Z + ) + return false; + + // Check if ray intersect any bounding box side + int sign = 0; + float dist = 0.0f; + Vector3 posProj = Vector3.Zero; + Vector3 vecRayProj = pos2RayProj - pos1RayProj; + + // Check both X sides unless ray is parallell to them + if (Math.Abs(vecRayProj.X) > m_floatToleranceInCastRay) + { + for (sign = -1; sign <= 1; sign += 2) + { + dist = ((float)sign * shapeBoxMax.X - pos1RayProj.X) / vecRayProj.X; + posProj = pos1RayProj + vecRayProj * dist; + if (Math.Abs(posProj.Y) <= shapeBoxMax.Y && Math.Abs(posProj.Z) <= shapeBoxMax.Z) + return true; + } + } + + // Check both Y sides unless ray is parallell to them + if (Math.Abs(vecRayProj.Y) > m_floatToleranceInCastRay) + { + for (sign = -1; sign <= 1; sign += 2) + { + dist = ((float)sign * shapeBoxMax.Y - pos1RayProj.Y) / vecRayProj.Y; + posProj = pos1RayProj + vecRayProj * dist; + if (Math.Abs(posProj.X) <= shapeBoxMax.X && Math.Abs(posProj.Z) <= shapeBoxMax.Z) + return true; + } + } + + // Check both Z sides unless ray is parallell to them + if (Math.Abs(vecRayProj.Z) > m_floatToleranceInCastRay) + { + for (sign = -1; sign <= 1; sign += 2) + { + dist = ((float)sign * shapeBoxMax.Z - pos1RayProj.Z) / vecRayProj.Z; + posProj = pos1RayProj + vecRayProj * dist; + if (Math.Abs(posProj.X) <= shapeBoxMax.X && Math.Abs(posProj.Y) <= shapeBoxMax.Y) + return true; + } + } + + // No hits on bounding box so return false + return false; + } + + /// + /// Helper to parse FacetedMesh for ray hits. + /// + private void AddRayInFacetedMesh(FacetedMesh mesh, RayTrans rayTrans, ref List rayHits) + { + if (mesh != null) + { + foreach (Face face in mesh.Faces) + { + for (int i = 0; i < face.Indices.Count; i += 3) + { + Tri triangle = new Tri(); + triangle.p1 = face.Vertices[face.Indices[i]].Position; + triangle.p2 = face.Vertices[face.Indices[i + 1]].Position; + triangle.p3 = face.Vertices[face.Indices[i + 2]].Position; + AddRayInTri(triangle, rayTrans, ref rayHits); + } + } + } + } + + /// + /// Helper to parse Tri (triangle) List for ray hits. + /// + private void AddRayInTris(List triangles, RayTrans rayTrans, ref List rayHits) + { + foreach (Tri triangle in triangles) + { + AddRayInTri(triangle, rayTrans, ref rayHits); + } + } + + /// + /// Helper to add ray hit in a Tri (triangle). + /// + private void AddRayInTri(Tri triProj, RayTrans rayTrans, ref List rayHits) + { + // Check for hit in triangle + Vector3 posHitProj; + Vector3 normalProj; + if (HitRayInTri(triProj, rayTrans.Position1RayProj, rayTrans.VectorRayProj, out posHitProj, out normalProj)) + { + // Hack to circumvent ghost face bug in PrimMesher by removing hits in (ghost) face plane through shape center + if (Math.Abs(Vector3.Dot(posHitProj, normalProj)) < m_floatToleranceInCastRay && !rayTrans.ShapeNeedsEnds) + return; + + // Transform hit and normal to region coordinate system + Vector3 posHit = rayTrans.PositionPart + (posHitProj * rayTrans.ScalePart) * rayTrans.RotationPart; + Vector3 normal = Vector3.Normalize((normalProj * rayTrans.ScalePart) * rayTrans.RotationPart); + + // Remove duplicate hits at triangle intersections + float distance = Vector3.Distance(rayTrans.Position1Ray, posHit); + for (int i = rayHits.Count - 1; i >= 0; i--) + { + if (rayHits[i].PartId != rayTrans.PartId) + break; + if (Math.Abs(rayHits[i].Distance - distance) < m_floatTolerance2InCastRay) + return; + } + + // Build result data set + RayHit rayHit = new RayHit(); + rayHit.PartId = rayTrans.PartId; + rayHit.GroupId = rayTrans.GroupId; + rayHit.Link = rayTrans.Link; + rayHit.Position = posHit; + rayHit.Normal = normal; + rayHit.Distance = distance; + rayHits.Add(rayHit); + } + } + + /// + /// Helper to find ray hit in triangle + /// + bool HitRayInTri(Tri triProj, Vector3 pos1RayProj, Vector3 vecRayProj, out Vector3 posHitProj, out Vector3 normalProj) + { + float tol = m_floatToleranceInCastRay; + posHitProj = Vector3.Zero; + + // Calculate triangle edge vectors + Vector3 vec1Proj = triProj.p2 - triProj.p1; + Vector3 vec2Proj = triProj.p3 - triProj.p2; + Vector3 vec3Proj = triProj.p1 - triProj.p3; + + // Calculate triangle normal + normalProj = Vector3.Cross(vec1Proj, vec2Proj); + + // Skip if degenerate triangle or ray parallell with triangle plane + float divisor = Vector3.Dot(vecRayProj, normalProj); + if (Math.Abs(divisor) < tol) + return false; + + // Skip if exit and not configured to detect + if (divisor > tol && !m_detectExitsInCastRay) + return false; + + // Skip if outside ray ends + float distanceProj = Vector3.Dot(triProj.p1 - pos1RayProj, normalProj) / divisor; + if (distanceProj < -tol || distanceProj > 1 + tol) + return false; + + // Calculate hit position in triangle + posHitProj = pos1RayProj + vecRayProj * distanceProj; + + // Skip if outside triangle bounding box + Vector3 triProjMin = Vector3.Min(Vector3.Min(triProj.p1, triProj.p2), triProj.p3); + Vector3 triProjMax = Vector3.Max(Vector3.Max(triProj.p1, triProj.p2), triProj.p3); + if ( + posHitProj.X < triProjMin.X - tol || posHitProj.Y < triProjMin.Y - tol || posHitProj.Z < triProjMin.Z - tol || + posHitProj.X > triProjMax.X + tol || posHitProj.Y > triProjMax.Y + tol || posHitProj.Z > triProjMax.Z + tol + ) + return false; + + // Skip if outside triangle + if ( + Vector3.Dot(Vector3.Cross(vec1Proj, normalProj), posHitProj - triProj.p1) > tol || + Vector3.Dot(Vector3.Cross(vec2Proj, normalProj), posHitProj - triProj.p2) > tol || + Vector3.Dot(Vector3.Cross(vec3Proj, normalProj), posHitProj - triProj.p3) > tol + ) + return false; + + // Return hit + return true; + } + + /// + /// Helper to parse selected parts of HeightMap into a Tri (triangle) List and calculate bounding box. + /// + private List TrisFromHeightmapUnderRay(Vector3 posStart, Vector3 posEnd, out Vector3 lower, out Vector3 upper) + { + // Get bounding X-Y rectangle of terrain under ray + lower = Vector3.Min(posStart, posEnd); + upper = Vector3.Max(posStart, posEnd); + lower.X = (float)Math.Floor(lower.X); + lower.Y = (float)Math.Floor(lower.Y); + float zLower = float.MaxValue; + upper.X = (float)Math.Ceiling(upper.X); + upper.Y = (float)Math.Ceiling(upper.Y); + float zUpper = float.MinValue; + + // Initialize Tri (triangle) List + List triangles = new List(); + + // Set parsing lane direction to major ray X-Y axis + Vector3 vec = posEnd - posStart; + float xAbs = Math.Abs(vec.X); + float yAbs = Math.Abs(vec.Y); + bool bigX = true; + if (yAbs > xAbs) + { + bigX = false; + vec = vec / yAbs; + } + else if (xAbs > yAbs || xAbs > 0.0f) + vec = vec / xAbs; + else + vec = new Vector3(1.0f, 1.0f, 0.0f); + + // Simplify by start parsing in lower end of lane + if ((bigX && vec.X < 0.0f) || (!bigX && vec.Y < 0.0f)) + { + Vector3 posTemp = posStart; + posStart = posEnd; + posEnd = posTemp; + vec = vec * -1.0f; + } + + // First 1x1 rectangle under ray + float xFloorOld = 0.0f; + float yFloorOld = 0.0f; + Vector3 pos = posStart; + float xFloor = (float)Math.Floor(pos.X); + float yFloor = (float)Math.Floor(pos.Y); + AddTrisFromHeightmap(xFloor, yFloor, ref triangles, ref zLower, ref zUpper); + + // Parse every remaining 1x1 rectangle under ray + while (pos != posEnd) + { + // Next 1x1 rectangle under ray + xFloorOld = xFloor; + yFloorOld = yFloor; + pos = pos + vec; + + // Clip position to 1x1 rectangle border + xFloor = (float)Math.Floor(pos.X); + yFloor = (float)Math.Floor(pos.Y); + if (bigX && pos.X > xFloor) + { + pos.Y -= vec.Y * (pos.X - xFloor); + pos.X = xFloor; + } + else if (!bigX && pos.Y > yFloor) + { + pos.X -= vec.X * (pos.Y - yFloor); + pos.Y = yFloor; + } + + // Last 1x1 rectangle under ray + if ((bigX && pos.X >= posEnd.X) || (!bigX && pos.Y >= posEnd.Y)) + { + pos = posEnd; + xFloor = (float)Math.Floor(pos.X); + yFloor = (float)Math.Floor(pos.Y); + } + + // Add new 1x1 rectangle in lane + if ((bigX && xFloor != xFloorOld) || (!bigX && yFloor != yFloorOld)) + AddTrisFromHeightmap(xFloor, yFloor, ref triangles, ref zLower, ref zUpper); + // Add last 1x1 rectangle in old lane at lane shift + if (bigX && yFloor != yFloorOld) + AddTrisFromHeightmap(xFloor, yFloorOld, ref triangles, ref zLower, ref zUpper); + if (!bigX && xFloor != xFloorOld) + AddTrisFromHeightmap(xFloorOld, yFloor, ref triangles, ref zLower, ref zUpper); + } + + // Finalize bounding box Z + lower.Z = zLower; + upper.Z = zUpper; + + // Done and returning Tri (triangle)List + return triangles; + } + + /// + /// Helper to add HeightMap squares into Tri (triangle) List and adjust bounding box. + /// + private void AddTrisFromHeightmap(float xPos, float yPos, ref List triangles, ref float zLower, ref float zUpper) + { + int xInt = (int)xPos; + int yInt = (int)yPos; + + // Corner 1 of 1x1 rectangle + int x = Util.Clamp(xInt+1, 0, World.Heightmap.Width - 1); + int y = Util.Clamp(yInt+1, 0, World.Heightmap.Height - 1); + Vector3 pos1 = new Vector3(x, y, (float)World.Heightmap[x, y]); + // Adjust bounding box + zLower = Math.Min(zLower, pos1.Z); + zUpper = Math.Max(zUpper, pos1.Z); + + // Corner 2 of 1x1 rectangle + x = Util.Clamp(xInt, 0, World.Heightmap.Width - 1); + y = Util.Clamp(yInt+1, 0, World.Heightmap.Height - 1); + Vector3 pos2 = new Vector3(x, y, (float)World.Heightmap[x, y]); + // Adjust bounding box + zLower = Math.Min(zLower, pos2.Z); + zUpper = Math.Max(zUpper, pos2.Z); + + // Corner 3 of 1x1 rectangle + x = Util.Clamp(xInt, 0, World.Heightmap.Width - 1); + y = Util.Clamp(yInt, 0, World.Heightmap.Height - 1); + Vector3 pos3 = new Vector3(x, y, (float)World.Heightmap[x, y]); + // Adjust bounding box + zLower = Math.Min(zLower, pos3.Z); + zUpper = Math.Max(zUpper, pos3.Z); + + // Corner 4 of 1x1 rectangle + x = Util.Clamp(xInt+1, 0, World.Heightmap.Width - 1); + y = Util.Clamp(yInt, 0, World.Heightmap.Height - 1); + Vector3 pos4 = new Vector3(x, y, (float)World.Heightmap[x, y]); + // Adjust bounding box + zLower = Math.Min(zLower, pos4.Z); + zUpper = Math.Max(zUpper, pos4.Z); + + // Add triangle 1 + Tri triangle1 = new Tri(); + triangle1.p1 = pos1; + triangle1.p2 = pos2; + triangle1.p3 = pos3; + triangles.Add(triangle1); + + // Add triangle 2 + Tri triangle2 = new Tri(); + triangle2.p1 = pos3; + triangle2.p2 = pos4; + triangle2.p3 = pos1; + triangles.Add(triangle2); + } + + /// + /// Helper to get link number for a UUID. + /// + private int UUID2LinkNumber(SceneObjectPart part, UUID id) + { + SceneObjectGroup group = part.ParentGroup; + if (group != null) + { + // Parse every link for UUID + int linkCount = group.PrimCount + group.GetSittingAvatarsCount(); + for (int link = linkCount; link > 0; link--) + { + ISceneEntity entity = GetLinkEntity(part, link); + // Return link number if UUID match + if (entity != null && entity.UUID == id) + return link; + } + } + // Return link number 0 if no links or UUID matches + return 0; + } + + public LSL_Integer llManageEstateAccess(int action, string avatar) + { + m_host.AddScriptLPS(1); + EstateSettings estate = World.RegionInfo.EstateSettings; + bool isAccount = false; + bool isGroup = false; + + if (!estate.IsEstateOwner(m_host.OwnerID) || !estate.IsEstateManagerOrOwner(m_host.OwnerID)) + return 0; + + UUID id = new UUID(); + if (!UUID.TryParse(avatar, out id)) + return 0; + + UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, id); + isAccount = account != null ? true : false; + if (!isAccount) + { + IGroupsModule groups = World.RequestModuleInterface(); + if (groups != null) + { + GroupRecord group = groups.GetGroupRecord(id); + isGroup = group != null ? true : false; + if (!isGroup) + return 0; + } + else + return 0; + } + + switch (action) + { + case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_AGENT_ADD: + if (!isAccount) return 0; + if (estate.HasAccess(id)) return 1; + if (estate.IsBanned(id)) + estate.RemoveBan(id); + estate.AddEstateUser(id); + break; + case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_AGENT_REMOVE: + if (!isAccount || !estate.HasAccess(id)) return 0; + estate.RemoveEstateUser(id); + break; + case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_GROUP_ADD: + if (!isGroup) return 0; + if (estate.GroupAccess(id)) return 1; + estate.AddEstateGroup(id); + break; + case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_GROUP_REMOVE: + if (!isGroup || !estate.GroupAccess(id)) return 0; + estate.RemoveEstateGroup(id); + break; + case ScriptBaseClass.ESTATE_ACCESS_BANNED_AGENT_ADD: + if (!isAccount) return 0; + if (estate.IsBanned(id)) return 1; + EstateBan ban = new EstateBan(); + ban.EstateID = estate.EstateID; + ban.BannedUserID = id; + estate.AddBan(ban); + break; + case ScriptBaseClass.ESTATE_ACCESS_BANNED_AGENT_REMOVE: + if (!isAccount || !estate.IsBanned(id)) return 0; + estate.RemoveBan(id); + break; + default: return 0; + } + return 1; + } + + public LSL_Integer llGetMemoryLimit() + { + m_host.AddScriptLPS(1); + // The value returned for Mono scripts in SL + return 65536; + } + + public LSL_Integer llSetMemoryLimit(LSL_Integer limit) + { + m_host.AddScriptLPS(1); + // Treat as an LSO script + return ScriptBaseClass.FALSE; + } + + public LSL_Integer llGetSPMaxMemory() + { + m_host.AddScriptLPS(1); + // The value returned for Mono scripts in SL + return 65536; + } + + public virtual LSL_Integer llGetUsedMemory() + { + m_host.AddScriptLPS(1); + // The value returned for Mono scripts in SL + return 65536; + } + + public void llScriptProfiler(LSL_Integer flags) + { + m_host.AddScriptLPS(1); + // This does nothing for LSO scripts in SL + } + + #region Not Implemented + // + // Listing the unimplemented lsl functions here, please move + // them from this region as they are completed + // + + public void llSetSoundQueueing(int queue) + { + m_host.AddScriptLPS(1); + + if (m_SoundModule != null) + m_SoundModule.SetSoundQueueing(m_host.UUID, queue == ScriptBaseClass.TRUE.value); + } + + public void llCollisionSprite(string impact_sprite) + { + m_host.AddScriptLPS(1); + NotImplemented("llCollisionSprite"); + } + + public void llGodLikeRezObject(string inventory, LSL_Vector pos) + { + m_host.AddScriptLPS(1); + NotImplemented("llGodLikeRezObject"); + } + + public LSL_String llTransferLindenDollars(string destination, int amount) + { + UUID txn = UUID.Random(); + + Util.FireAndForget(delegate(object x) + { + int replycode = 0; + string replydata = destination + "," + amount.ToString(); + + try + { + TaskInventoryItem item = m_item; + if (item == null) + { + replydata = "SERVICE_ERROR"; + return; + } + + m_host.AddScriptLPS(1); + + if (item.PermsGranter == UUID.Zero) + { + replydata = "MISSING_PERMISSION_DEBIT"; + return; + } + + if ((item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) + { + replydata = "MISSING_PERMISSION_DEBIT"; + return; + } + + UUID toID = new UUID(); + + if (!UUID.TryParse(destination, out toID)) + { + replydata = "INVALID_AGENT"; + return; + } + + IMoneyModule money = World.RequestModuleInterface(); + + if (money == null) + { + replydata = "TRANSFERS_DISABLED"; + return; + } + + bool result = money.ObjectGiveMoney( + m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); + + if (result) + { + replycode = 1; + return; + } + + replydata = "LINDENDOLLAR_INSUFFICIENTFUNDS"; + } + finally + { + m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( + "transaction_result", new Object[] { + new LSL_String(txn.ToString()), + new LSL_Integer(replycode), + new LSL_String(replydata) }, + new DetectParams[0])); + } + }, null, "LSL_Api.llTransferLindenDollars"); + + return txn.ToString(); + } + + #endregion + } + + public class NotecardCache + { + protected class Notecard + { + public string[] text; + public DateTime lastRef; + } + + private static Dictionary m_Notecards = + new Dictionary(); + + public static void Cache(UUID assetID, byte[] text) + { + CheckCache(); + + lock (m_Notecards) + { + if (m_Notecards.ContainsKey(assetID)) + return; + + Notecard nc = new Notecard(); + nc.lastRef = DateTime.Now; + try + { + nc.text = SLUtil.ParseNotecardToArray(text); + } + catch(SLUtil.NotANotecardFormatException) + { + nc.text = new string[0]; + } + m_Notecards[assetID] = nc; + } + } + + public static bool IsCached(UUID assetID) + { + lock (m_Notecards) + { + return m_Notecards.ContainsKey(assetID); + } + } + + public static int GetLines(UUID assetID) + { + if (!IsCached(assetID)) + return -1; + + lock (m_Notecards) + { + m_Notecards[assetID].lastRef = DateTime.Now; + return m_Notecards[assetID].text.Length; + } + } + + /// + /// Get a notecard line. + /// + /// + /// Lines start at index 0 + /// + public static string GetLine(UUID assetID, int lineNumber) + { + if (lineNumber < 0) + return ""; + + string data; + + if (!IsCached(assetID)) + return ""; + + lock (m_Notecards) + { + m_Notecards[assetID].lastRef = DateTime.Now; + + if (lineNumber >= m_Notecards[assetID].text.Length) + return "\n\n\n"; + + data = m_Notecards[assetID].text[lineNumber]; + + return data; + } + } + + /// + /// Get a notecard line. + /// + /// + /// Lines start at index 0 + /// + /// Maximum length of the returned line. + /// + /// + /// If the line length is longer than , + /// the return string will be truncated. + /// + public static string GetLine(UUID assetID, int lineNumber, int maxLength) + { + string line = GetLine(assetID, lineNumber); + + if (line.Length > maxLength) + line = line.Substring(0, maxLength); + + return line; + } + + public static void CheckCache() + { + lock (m_Notecards) + { + foreach (UUID key in new List(m_Notecards.Keys)) + { + Notecard nc = m_Notecards[key]; + if (nc.lastRef.AddSeconds(30) < DateTime.Now) + m_Notecards.Remove(key); + } + } + } + } +} From a5967d918aee8cb6945b092f77b05def38d9eca8 Mon Sep 17 00:00:00 2001 From: Drake Arconis Date: Fri, 14 Aug 2015 18:10:07 -0400 Subject: [PATCH 2/4] Send a proper ownerid for Object messages to conform with what viewer expects Signed-off-by: Melanie Thielker --- OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs index 10122e6b56..a9d2de0b20 100644 --- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs @@ -274,17 +274,20 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat string fromName = c.From; UUID fromID = UUID.Zero; + UUID ownerID = UUID.Zero; ChatSourceType sourceType = ChatSourceType.Object; if (null != c.Sender) { ScenePresence avatar = (c.Scene as Scene).GetScenePresence(c.Sender.AgentId); fromID = c.Sender.AgentId; fromName = avatar.Name; + ownerID = c.Sender.AgentId; sourceType = ChatSourceType.Agent; } else if (c.SenderUUID != UUID.Zero) { - fromID = c.SenderUUID; + fromID = c.SenderUUID; + ownerID = ((SceneObjectPart)c.SenderObject).OwnerID; } // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType); @@ -302,7 +305,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat return; client.SendChatMessage( - c.Message, (byte)cType, CenterOfRegion, fromName, fromID, fromID, + c.Message, (byte)cType, CenterOfRegion, fromName, fromID, ownerID, (byte)sourceType, (byte)ChatAudibleLevel.Fully); receiverIDs.Add(client.AgentId); From 1bfdc9f32b5b1465015a01e5a15b0ba74d43631f Mon Sep 17 00:00:00 2001 From: dahlia Date: Fri, 14 Aug 2015 16:55:06 -0700 Subject: [PATCH 3/4] Update libomv managed dlls to 49a5cf05c32e --- bin/OpenMetaverse.StructuredData.dll | Bin 118784 -> 102400 bytes bin/OpenMetaverse.dll | Bin 2453504 -> 2195456 bytes bin/OpenMetaverseTypes.dll | Bin 122880 -> 110592 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bin/OpenMetaverse.StructuredData.dll b/bin/OpenMetaverse.StructuredData.dll index 6e8cd89668c961df941cb31ed1bddb776590eaf9..8c72174e68cbdf3c0fcd2a9b3d9bcde9152e1b41 100755 GIT binary patch literal 102400 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�ZdqHJB}dBv_}pw48F5b?6mOUpqH4>8i} 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≠{TQB?S%Dc%9hhT5F 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 literal 118784 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�m-bewKF1KZbFY5F8|$T%6+f3dI|6$NT}Qz$qa% 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 diff --git a/bin/OpenMetaverse.dll b/bin/OpenMetaverse.dll index 94ab09383525d2a093d7f6e0605f0a9a77e3d042..9854fe087c79496308b69a58a44b4691afbdafc2 100755 GIT binary patch literal 2195456 zcmeFa378yJ)i+*K-Ce!RlJxYXdzK_KNtn<~_Y6sfB@@U(AnYJJN!WK1LJGPA2$c$9 z-;%HhiUXnoBC?Bs$i9mTh^VL_5kXN9!3|Wz@c;eJy;WVk!OW}w_xqmbW1gh%J?EZ# z?m6e~Ywfo95+h_7Mi~D;`p7Wuh0DKr^84{Ws}bDNeP4@lSNz#Y_crYM?4*5;T~h2h zp++NXh_)$HDla}`^S>ChVXZG$n-ahiEf#&AKMw;~=3k+k|hLAC^ z>bZTr)Lu0v_cS(4GmJeZ8Agx7KD0#pSHm@oq~OOYxrw0s^7jbBf#+Yyn0Jl<0^>*H zwIejk!1pusfp447M1s`MS0))v0dU0L9>a(Qh+}|v48Q{`j{58hz)ibpy{KzYFoYq> zp#z0t;RyIeHtJ5AL*WMg<{`TV3P&xoK`639W}!Qwif(=&+Na)6E%2!YKDEH77WmWx zpIYEk3w&yUPc87N1wOUFrxy5s$O2#Cyc&O;o0>+%xc;><#?$8}jRwJv{^wvbpIU{; zVKcPKgwtj(%o^6zzNu!&-qJ7u>HmttXw2+a4xS&s(&X@)xoUrmS3#o2RrbZXS zHy0flK9=F>Mys_UI~&2KiV@1r0k8rrx?FNtpNQryD?1m+U-pqV=H8|eHzxHN30h`k zJm-yyr>6%LhMdWO9@~IVr5>$SdN7981D5J?36D;XdOSss5%cu)z>*5|NCotmUqg?! zDm@rO>j6`Axr9fjM?IdR$B21)dPGEzaREKHt)WM{N)N`+dcYK2F5%JXQIDtSF=C#c z9+v2l3Fxt14L#bc^k59F2TalB5+0o%^>~UNBj)Mp5fwc;0(vZ{p+{$x9*m*&fGN6M z!lTop9#7F@#5_Gcuttdb(G}2R`x<(TuhN4tv>q@;mrHnbdeq}7dW@K-r$=1$m=Mro zhZ=fJtkQ!qv>q@;mrHnbdi-~IdU~K?M}Bk%^gz#8)$aCG>A@IU5169MB|JJk>hYBP z7%@*zk4DjBQb3QLYUnY!N)N`+dcYK2F5%JXQIDtSF=C#c9$3#teoP7Iv2zVQHmcHt zF|-~qMVCu>bb8d|DSC{Ur>94==+PU{W0x9wOs&#`F|-~qMVCu>bb8d|DSC{Ur>94Y z=&^A?k6ml%k*(5$F|-~qMVCu>bb8d|DSC{Ur>Dml(PNW<9=p}hqpwO2#?X4e6kRUi z(dki-r|2pM-4ruRq4SPS`V0_%OyNIJ?ilk zJx0va(*tuUl&k3hJ@%}j$BZgH7(?p;Q*^n6N2fCwgoi&|~i!dTddp2V-bGV2Uo6@aXiY$5ZqeF;7pA zwCJ&AK#zTD=rOZO55~}Xz!Y6B;nC?)kEiG{VxFEJ8PQ`XpvS&7^q5tp2V-bGV2Uo6 z@aXiY$5ZqeG0%ynvon&$s*AIWc6Zh8Hrm}yySr<5JMAve?)KWK){$9%)O3WlEulP(rn43B&iP>@Y@cQsmNOWq zL?muC?1hkV=o|x!Q%-w=ct*CIPWZEn5SCqxpT^wLRa|C(i{+$1*J|1afGD4gC8COp zjx@b05|h@ERMPq8vM5$t_M@1=WiR2}e}RWEqkUD(wxS+c3_`I8W*&Rn%LPU4Z7q4*N?xwwXaX*TXfM|iw3pLy z?d6PCdpRl8-pM5|rzRT9(Y^L&OJ0sKHI~CP?d3>EdpTIp-Weq?yDW`mtFOImIJK8; zk6DDh67FpA!t@Duj(CrucP_oFj-{9RWUg95FIy7rWn-efQr8s$E4;?C?waZ1QpVe# z{^D`;9z?G!5TiOXo3Um~r+5=qiQTPtf=Zm_;jAt!BOSoT@vLKZL&B*72r5%g?ONjz9r z&5IPlLv;xrQUnjzC3rv)JW`k7F-7oLU4jo3!Q*uaE>r|h)FqhJAi4QeU4pX|!IO0f z+Hg(~mVDMDNZV(W+q&m`CB$sAP9iZ0@S0!t^ByO{*70BzXa()Wk5%h~L0?js`Z7VrleImVv~QR!XWxG)ncBSmN2#l?+NT*O%6@0kRCTA zT8&WFhLrs+AvKc7o&YFkDIlFuJ?p9yfm~I<4^^VToU=rd zgc%A)TEgkfs*@-jCA5@u9OqydX@FBQECJb*5jupf(I{R++m6v_(R|DpZ45C)eq*J2 zV{1cLTgD3xT4pRV;fuBM$C3Q043hj=DM7=C)e>>f@&R2;&h-&#*Y*7^VfSnwh^PW} zo{wm;UU1L!p|HCO{+4)tjO9owarb;6a$^-JRuhbdX*c%_KYB~dT@9eR1Qi}en-IyK z0`d+OD&xw&Iex~o&{%!kOT_@j=wUf?IHGVqi#WkeTET|xQ<)vFqc})*G{x$hvO35& zWlWUpPKqfN5HO`eC{rqbzY|s<;g*ya_|J;Qtud4tpnRV;V5qBNOl>*i)6;|D?=yj|r4HEvGaq zY!8$MwTqxCH>EzGl5uY{@#qaUw>oaIaI8o z1C>v!Nl};=HcqgAVp7Mp>`Kt(PbjWT7*=C6J_)@GOVaw1TL*vT!22^xgmy* zeGb9`wr@%|$67;Gw(r+1U8v|H0ecmG){l$lt(dZZK*m0O_T($ZCf`$4oO4i&)QsN$ z72S_2o~(4YPlu3e+0D8)!wTu9Tqf$!7YoJg)d;(uVX@4@rdUX5XS^B>ySI$UV0{6F zQPv^`dI4i9%i5}qrL6sEyk81RW183cSk@|oq^!Nppv>Am;)dzIfVh^!-*oZrnTB<( z28MOsl^Fh37z*WZrwlLL-v>}F;f{gm!Hf<_cM4mmsVpW0(RUR<^hGw`2b-hXyYxoM=D*O(iCyLxV8 zZmNbS!kq_vns~S^FzH9D8gmxIjmH0awnaZSn_7a|)a2z%%*z=sGh$Vl5%V)6R+bsD zdYQqzU|;=zwp@=1XU{}gDlgcPauZo)C3%9f&`ed3Jq!6|*R#;a71vKJsI*NNY?J*D z%jthsc%Vv^Z7NI?E;CJcW0`HFjyIvJm3fG7p$c@VBsEl4>k-(=G>%3s*@SkwLA8y) zsMR)Zkfx|INZQ7aB`K3bt~9^3>2P%~ZJ&dMKIPBYXZe2no4z+)iO%#Djz%{gTs}_sVJ)8g zGG+Yk1e3m-Lfn;5fi4iaCNF71UWkxtCL#Oy%8<`1x{!UG9}==1-=DE1KF3la18WH| zJ?#0SnzP?nYbeR%s_N4;uOJ`c z7s|3aRDnhvdabGsfpcnFoZ|_VMo2BA$XW`2(iL#_T#6-mjO9I}pJl$KTgG$`$r@Q{ zNlezM{vxYhl|fSG|0+QbBUZ@$o9_?1@6n%GI|oa#?js1b9R8+@2MkED7GOByzAsS} zgn7l^gJ8t{M-a5!e+I#*`#}(lx&Hzf$QeD_;@TGaFKw4_g(0d8bH0~fe@2V}+9j>* z@@Or)d?*rB28mt%EkTcoT{igsi2IT654)Hs!7ijpyAAYb)^0<4Jr0cJ@E7|o%3cBt z!$PLS(O|?41wqRV2f?Tt34$@#3W9Mr3b5K>7viEo{ep9$XP+OyKAX}$6P10QfV7%f zY3Lr41S^BYK5+?p60t&Vg8t0f?Wp@xqC0=n#Z#5;0t|=UMv0=Jh}#r^V3+0~7;#&I zpyiGUf>C!Yz-rCc1>_IeXcN%K_!S{!U!d!ZX=~-rCWsvAT zLxLI+OZ5wbfUCvX3u~gX8`pC|$}rN|%bEUsE|gXyE-6uzM{BQ)rV-belC(~h6J>ia zW>_k{-NJr)>uS@5dIB_PM@-`m*kn3wGN5b{6Pw6d`^KWKLiqMnYwcMHii1|KI85^q zA-B)>>qYxbd;~IlQy)mX0|9@(@5jPy&IiJ79{y@8bKbriWXEJFS-cNTaKbX(!zUo` zLhfO7HdyxqTSSYQD4vI(-i(b#BGFqoIAWY&Iiy*`Id&H1BVnU{B$N3X5cPRW3kabq*eu%D74RgwXhfe>FIL_Yt z6K|8m`CB`2>W_0dyyufFu7Ob!Rw!eyg~znQ*{G+c|u4v(<~`CKDo-IZsy zb98(zel6!k>Qkz!w)9#5lmT^Rkm&dUgF^N?2(orxE=K%}Dl~@di-Bp%ZG*YOCGa&{ z4g;da=hXUy0K-@}x)g!#zl6V!yNtLGf#c=|7<>+J|2^wlTFnjVZ(zC8M)ghn(n_!0 zj|u*~Br#92=)Ov=?;URJeupd}8#7ep%U&&(QhE7(*kMc9!A!gRVc2Xs+>^Jj0Q0HE zRkF=hbn;k-JyhCJ{#IEgB3)2rkXXj@gFJU%NgA+u5I|0H#Bcc$S22 zW+1LS?SrjmVKr)tD`yEhwBV%a+|bZ>GMY45WWdkrx#BB+0qnBZP;J&v96T{*Qs>f% zg20+$-c0vtYlJE(oUvG4%w7p@`MEmmV%R&B##y21VVsQ_V_MD~z@Yv43X?MnH$u=* z_KS!T6ccgY^iTEtoEWqf^rCs*-jxHYpvF^o+%L(a*U6#VOnft}b5ed9v5S zNdKE>KG)x>&v$V84bX&a;vEUG@yir`P_J;a}4zgL8YI&7KRc|x^ zs9mb!pkrZwi_I2k2mUuIeczpCsBko7s^W`yC8 zn*l{YT7T&kvLy_(F2>f7Es{UFc#RV8m~!z{7t${2Rt8DdclbeJx6}7`x?MHX_4Za} zcomNHhr8QzW_PCEhCK84F~~TZ_PeG>#+W^r?(1RDG}(z!2%Z&nrwd{dC_>J?sM*R$ zoB3E2y(mt2xLf#`kaM?Bw|M}253ufF0C7JNGkgR%HImboJ|^Tm=yRG0Y%QZxA2jC1 z9O`p}(r0o>pCMtU5Teg4K}->S9`d=*4PYOpShE9&M|`q50qmnB+bV!~%qQC#*xIs& z4U}bLE@j=I3dgCn3delO^~xYA9NSg~$!XQkqFHsflc3YUFywCU`@`-Iz90R}LS$+q z#t|+(QFj5tYKbcCz+%WckFu^;YgRXlT}#7k84KMcD@K(;BJ0f(bPHmo-CN+VPH2D) ze>!`Ms@vS-`xnyOhH1W`(!8}+nzst$${Pc8LD{*Z{Sq{jJZ>J_!W3Q_a3K2G1p@|U z+-1IBT2j@{VPRJjsFgG)he~eWJ%qT+5mZ%V)VkMF=&>F3Sf%pnvRZkyOfsP|NQ6JW zGN@F?msjLe$Uavc4C8zV=bwxPO!r*1Zu09|ZOfvKs8VH+q`O#xUPG*~d!X-+xCi)t z6#Ih!1ohSuu@M>C`smMrK0;Qc+{Heeb`SIY!4e~_-Tr=1#61Z9 zpe0(OIy2ZOy$*eLpg!;SNFTdptukX^qHDcd!dULTp3P(0k{g}R&mtO~_+NfM}pA233 z$4;`vqmkzC7_?q3kroR)?uJ*7+nEPDOCBiO%&TRa+eCoMAhFHu610uj=8l?D@oZJt zz+A&XZAca$#Wav>T1(I>VomEtUsF^)FG`#o*h2fT6>Hok|j-6`MWI=_!&euv$qetwr5Zzb|6U*|MdL-p+> zu0#~x4{9W4Zs=1gv9vre(eD8@wKoQm0KFp5b-> zjz@}!;YnJDCnK|8hZycZf@q!-b^jT}@Mxs_K@h_;wJwIgC1yNw>wXx-@G!9Z?;wUJ zfZYv2437c39|bYz0JFS!Bc;Nj_!9r~fLFp|ce;e;DMc4+A|(t@thym!%y_hj0j*_s zv2?J{Ujtk2A$1KWUBW}F0V;E@SOKdgOl4Hdc^j>Yvl?RuNl?S903W0Mt_(7SY-P!N zYDJ9GNeM6Jw%ty3*M!DWT{ZO2E-r@o&_&iQ2L(M~x*=a4*p}1%2~}s!UMUPpr5G zIyahD)Iqx%b}l3f<-MrnUE?LBgVt8S>i`!~J}rBUN*3uxq~G6L(&eiH`8{>!f0;(c zN&PKgjJZfNI_zAE_&#u15V(Y#aZAmzv72GZ34TQglRvEWI}!TrBk7D|I>+jCu9re) zIXhCX8^K2xFM+=yiHP^6lK1A4_m+wXw|a09#ow}9eLYQMInv)3>6hE}S+Q%>xtz(L z$XYTV(go%UI;emk`(aEQkOe|pBrS)qKwQDdCjp`A;uvBx?v`*wcawJ^jQ#wyvB9yT zh;*Gluu6RvMcYRm{j`R6Vm=BF$@Ay-x?9C|YLtjNY zrl$G=sFXZ%bx&ij^s#b_Ph*FHbq}E88gUg72Z|-S@jG-U80(-fdK{WG;%X1kjMWKA zORfZ)4jINwhiu|ST%NS-Nz9L~wJ)KI>P;86M>BtIFOH;AtCiGh1NPI62KyH1a&2#W zVOR)sZ&%Va6>cr3>@3_x%IvL(r>WJwh19f|fj2*lg}yy;(MLK5-b9;+79O2Ln5Ko| zO|JLg1xYamvZh$nX(q*1q=->9jo6xqcmOe*h(rJ}hls`iVlEL) z0mM8angfV!fKa*D0<0(9=D=z}ws+wu1~9AB@4$So+4^!?OwUeh$CI+mM^V z8{JX+V)X7!F?CoxKeux&#AP}9jVebfGRw{OaTcr&#b?cLL3M5R_R6wR*cntYDQmK! z6I^!3o$Mb%1PQcJOjR2l=GumFfaq`(btqy*6zfaQQq*J1c^NU>ZY;-nh+hJsW_vwc zq%)(D;w{i1`;1tbHn|J@4itWe3BPrU-x0#^3G!{` z?l}j7o+fQFfcPE|**i$q9Ke1b*dMtq0n85=u@#641ya*6vNsLmAj%&ce@#u}_JXcv zyuLe_wN}hPb7vMVhs9;z%vr*gZz7mBnHkyfoB2;vQyqy{dIvYRR`erMvl({|CvgJA zszPv|P$T2QphJwNj?leFyfP()JE zB&G%2yUK577Vh!PW_F6Eg_nRxMr#+{naEPZENt-Ocsr^zTd;AQc^K52nq+ z;R$bRsY_DIH0F-fB=bnJzqKMqtHc6AC1cJZG*B4wH)#n?4`~8f*`s=4A%sbnN)zHX zR5;&`#z=O7Ws5jg#6ZZh(RW%=G$?`1F1dfUD>Ch1zwE6z9j!PT_dm0VKB#nbwW5RM zAx_hojl>*uX^FCHHa^z=7J|~vGw%}v{RJH3!_L9rnL;hs;2{Jf0ai(5q>cKVh+EEI z5oO(ysZ-(ooA&DBAkCeelsym^7WXhwjM#Da_W|16hsFci#D`h{N~<)BwQo1msx*IXf)N!9XtuTFN5%oNeAtZC< zWt7Qgn>=^IzAa*Kcyy?=<43R^$DtE6nm8bW->Pm*+6WY9*@fY{F!cWk2r(J?DIC@3 zoR3DJIj)<4p#tvnU_#7cQFT}4H8;JGF~6x9ix=UuY?#vOD?EaTs-Y;Djd~-tY~6!- z95H?X`421Ar6W~c`Ywu(^OZi`)M2hAh%W)LT>GzqzxZv471T!*#6>k_Xy#2wc_<{u*mNcxHwkUn($Jr<=hP#xw+Smg^Us^ zaD^;zg%4tp-g54h-+SbjsTBK|qZp8J9HRDJCK!Wzcza7>BN{f0BOzPyNmTxX6<+aW zi0Cep)gAwKZVmBB;XI2Jl#E@Tj6S}$pv9+<3>p|0Mx5A#Ed&kYS?L;gaPCAXv;s2pl~B{*1jK1 zhfqW@NOAHJeW+5+mQYs>%p}I41vXp3yCh#Qtt8TN8FSRip-f{94!eXUg-mA<GCoVX^jLagKCchYj;!RMtzbrNl;-w zhNP7w{U1w`BFVrfWV_sY4~iO8>U+LY4@1k8m9)|`ute?Gkecz57KRazfIe7iRIyJ* z<4NxOvkE9okOPf`zW%fiKf-09hIuGoMvpQ3Ak{{g#yVr>Q=b30hWr;)|85%HX8*2c z0)+?khlh@PHY9%T5&Rptqfl-1vgw}zhF5$^HGSVhV)=%?)`kt^Fqbr28!YDmpwvn# zfCmX+b{%HOLj+{$6u`p-KF}eL5Ws?zkUdI3)=EM47y(EiA&(Q-pn)d{e58RV31DC< zWKR*m08fDL5->IJGyz%tv>e9geN2ms=@7u%2JjZsIZKPM=ys{*RPRb*6UD((c*XJx9CeYWF9j&FnIlQ^Ht{kF9TaJ@#_-xDYqQ02$=Ym*x@2v(#9gv9@o0&c#D##V$VJ*+qusUI zU8miPwR?$nFV*g4bZg2-&XA9cAs_itKJuk}$B8VEA$pxp=QUgjrBGQ=Vkk|Yt66e2Krh{UDL7ZB)&iH7@#b|0l%$_EC6Cquzg0zv#3 ziAuZ#1p0BJ;Xa|=C$;;OcE79Lr?vY%?S5aoKhW+obXo7Q4<&!TicA6GFad}|{#23t zX;t!PPLe;%8u_!{lRxV{`I{{XSNKEDX8}{*=d}An?LM#FA8Gdm?f#hVUwmO09l|g+ zgkfX~!^jkdktqx#Qy7Vi#C`&piT;#sDa(llGr=PCMNRdyaw?)hC0J1XTvPo*yD!l# zWgde;%}@v^fr#`=5EXTvw35%^Sb{X2ii&IP^FYhKR3t5yMkeM7XXX z5fOh95w5}^qJ$yhdN1Ph;T#YMzl)ru&{iimPd3Cr0KjhJy3v z9dKNBZ-smInO$cuJ}$d&8MMEG77lGzqF+=4cYwnE;<>-i@%bJE94`EO&xXDX#Zh2Z z-@jA#5QcD_3TunTGLG4VXw_pF!1VWbkJs z&K?0u z43@Z7#pU?pIVOBZohv^HgK$mnkNDh~STnbr${-B0EO)3fsC4FZmIR#)hG};z-*0A* zMC$I=Km_E%)i-q@mGTx)-z)m!Ux|V*wX9~|Bm27AN)PRYklxdf^YlaTLiag@#6l0;A$Uyo8b3-@Q(!B z#(2c<5Iooi-z9jX5B`bZUwrV-1h*dR#r+GxbA9ly1fTc8zY*+Adc^M$Jkkf>CwQ9= z{+-}IeDEIx=eK%s|4DF-4}L)KMIZbZ!Jd>y{2{@mKKO5fclqE3f*XABBZ51&d2zAi z5iVTjgAD|K>4PT0spCB25Wy3CFih}1AB+$Tr#)hP5-(iX-3Oxtuk^tf!Pk5+PB5SG z;wA{5?1OmcHC%Ya2b%~c+CAcCg8TSj3&CrAa16oU``}oDGdjGuNrEeVu$ACbKA0jn zw$meSBe>WH#}T~V2h#-K@xcs1oP5?*qn+THKG;F<86WH%yDcM&|)2geh<$p2_D!@@O&TaA^3t1P9ivdqDMTL;L$!fh2R}NxDmk*e6W|`cHLgwsRY;g z;Kl@h?t@u^lY2a3?&KAg`CuQxdwh^Pdj(^XN1P|Pvk&$Yyxa!|2(I_RO$lZvdvP(a z4HpVNIGx}FJ~)FQuJCHp4HDeL2R9=)?1S8kEd0g?w;(vMkr#JMf;hLNS4Hq{HALl8$VHSt`6Py66Jf~^~Sq1zBV&KDa%>=X`Jng6*4l#5)o^+y{3ec#9A2Oz?dl+=bx0 zJ}>UB1TXZ#-3b1~2X`kpG3OC~h9K6Jw2*rcyweBwB>15Z?nQ9>yhpq@!ApE_AA&FW z;JySm>i3BEBe>iL_a}I-4=yBV4tT_i2=3~GiwS<-2M-|lst+DWuy0c@?m+}s_~5|= zAM(LN2*##)#D@~x%Lfl5c(o56PVfyMJc8h~>0aC;37+PIM-hC&2ahJ$GQ%T2hTuXU zJeJ_KKDY#+9;2nu=i3~AI@bf~eY5mg^#7IL`urNh%f4C482Vcx8SE&!gv%a?1#h*t zSMQsp^?1%h`YT4vlVeTlaf0Y^LqLz`YUuIxDm@rO>w&fZE|>7=^r**E^cXQuPY-P3 zB0p{n=<&lEdVHfw55~}XbWjh%qtl}vPtjw#wcyq(M2sr$exm3@p2JB01u&^dr_7Z%F;0#58MZ!7+`y0XmtBJJd6F~uOtMLM;O)<10S&Hv+y08boR4As(JPKutO2~TYN#U_n*z>{g8VW9CIbjmPuz{ zfa>|C!rN$g+Ov5i0gK*^AU>Hv*ZwgGaO{MB6KnoI=9>Sxz{$%q?ma|1{4MM}h;88u zNiDE?lScW~^E2xM((8>YIczqe67S#=Q#iBqkn~byYg*RMc84z5Kg0drUhZ8ur(%0T zM=Q-!T^#1E4w8B5Dg*_R@h{)=9T!ZTjg!dxClDUevmgYHE#OQR_UeszC*BN^u8$X3)j8Cf7N z;p0e31Q!Kx;IBJA;~|{6Lc@}f=j8L71G<(RujAZMQy0@);v7pX8B2!UHP9&;i@)Hm zrQXSy{WHXsdE@xGyH}jPvh1HDFg^XG;szKn6;H;URkcib0eM!3i489dgso)F$o>L6 z-HQZm*)I_|y~LC&0m-<&>!EhAlt zK)Ogp1%qsV4NQ|3N)b}9?AIy9=hoxYXg-<@t7oF4Hf2jskDJkSIC}xiq3F`noA9m> zKr?%-GNj6{)|apN2c*;#95BVy zeM<7db(Dmvdm-MDGhFZq*>598@sIf7`PYp?QTrYEPr}-vnQyf;xPqWm9yxoUBF*@5 zI3I(J&w^?Dye6{`mxD86Z8cVS%tT+tGB#(b^sg6|+VN8VdN=zSr!q+ThI=IFBE-tR z3%T5H`!F{Ce7~yAFSz#-qky#uK0dYv5z~z`CqoLT!U`m=#{BkH%a1h+oihpX{RiGL`Fciw07 z`(PPLTIBo6P;ar-SWcZEEyMrW$3GUtD=Cg+YL5i*&L5cC{XorZM_cMyf&I)7+8+h~rsjYb2sjaw9txEBDN%7p|!h2{Y zwCalg7hzZ&9p;!?E?4Pt{VLFNU-_=;sW&%E&;^Lq z66fsl*EBGg_crJu6-mXE+8 zbIF)HeGJYQz+Y|MEwmA{?Al;p?rYD54OY_z+bbKat!0D9g*Agh?h`dx%Qyn9wQ&Y{ zy^mok#`!C2@j6F%RR)PY&t*{e*tP%SW00;yt{Tqgj*h>;OBD=`7n@W|BET>P)8~tD zGDZliA;Tn1itj*Zv_EQa&jWR?)gzE0tKektf<}GB(vSoRAuuUTIn~*A7~y zPxYr$j9CYH{plFvgvEV=rNT4chppq8Iq0*Dm~$HAzKOWn`+Im7#gCiJM<5p+ zAVbe|Dw45Y}ON*bIRgLXUL44l|$*7P5 znQBZnCgaJ-0olL8Qa%xGb%j$+$)*J%m;l``zjSLf%3 z?;o1qal+3bKL(fcTPFNC_MQ+nc!o4t{3qiTKfo{Ujh%`Zj)UhOY@8!bG|zkrhC|)@ z5I`!t>K&LAwGIb~6ZQuD3}NZXD8qh4LQG;djQb)Mn_97~!+D+S;-?j}8W^SG^f(C6 zILK0wO_k7{#IC+B!}3^>m^kn3tK zt?>=%M}50+oVm?rs`ccW)-O=q-^YKiorBjn0#yY|3q}iSorh=pvKy*0Y7o}7&^Yl- z_F5!{XB;kqqdNMs2Ld_%khx=H@Qpk^M6v_Aa4s`tR$T#_q;+XBJct>3B$xD-h9m$7 zO4cVM{VCJo3U@LrmfbLp_Vr#YQ9&TQ72hr!3#HvP5GHCT;kD89U;!&Py)~Lm(Tn8) z$;fP_EAx zih$+o-cn*zNLO|o*eGeR9Q{kS>1klHFl5ehXgB7EH$P7gsxgFV+-A&qTbZ8y#CD*; zDt0oIy$#|fiW#ur0$>(XN6f#l0NC9+I7a1wUhl;uIv&kl336HQv+NGg&G=zd)~Dx# z-+ADtj2F6&2F37|B`L6^JK1trnEE?0`ecyZ2^RfL9@GU$#?Uq_b4<*O z#skQHfwc}Nh`M8Odo?=}o+475umTpg$wh{rF&i_J#EhToInxB-XM9H)SwfVNuP8He zmxX#bYDjDdT-?QMa=8hB(GJQcscW1zvg`f{CX~P85a3N$dlKZCx60^ zjWb!O{v_$SiV*U<6K`Wym~XXx*UV}`MjENiXiSG88tbh9OcI80<-1*g`yy$Lwv+c4l31eS99 zfIuUWBwZzh;Ox%0Vvd=iy_{_Ie zyJX@^J`cU+wO1X+%YRdTo{7ZJlJ8feeet&!Wed$|MuG{e9}mu3h2-Y?%{e~rb{%UQ z-=WW9%#8<3NTOaw%kXX$TDZbo(8rvAaiOXo7XpT< zs{B#O$Vr=`kTL~CSzZOK+9nQI@C9hJ&2U12DnA- z6F}UC6-&yN-&?u%W*}?E!gMIRIefA&f^9o9kByKO^f(_NJGuu3@qn1XO(=Vz>=vNK z!nDlVpYgj+f6e$IW9aW*-)8dLtH#AFE7`9i=dpkw+H*TjZF?5pgVCi+Wqk}AJ46iQ z657<7C~Gc`oB@_dzVhyla)P%qXjh&A-l-I{lI!_uTX1J!CqojWQGT1`x0%0lQz{@8 z5nRerPE^(0R17;Q$ruJ)vr!7tDg4uWKY=`FIZ|YeuRu7wy4TB|KKLaqWkAuiae*g-dNsYV6E~C}qj9sDpC zQ+gw$OrAk4PikCpoEi~L(jL{uw5m2HrP>%s+g6hHi7IK^`s2w~X-rZnoxZeo{aa$- z0BMtnVzOUWz!fx{Oo5*36>zwMk=+s{#{CTPAeq2&L;`5GajA4N-Sc;7H?1?7?w&NT z03c2&8w1;D{J`woe()mmjcIN0;9Q3>FrYC5x!e%Ee$y5_o zLQ>7SbTWk=Yb<^vxdeW#To}JmEQmA?n%FQJt6IjZxnR(g9E%;av8rvvJx*$~Zi$?% zcW*&aN~bb891oy3iKi+=+03v*y{=AXpjgI3^Q5$l^oz}XXr=HtU;9in6h^W=pGdZM z4MdXd;|DRnlwvKl_64k;2F7MR$>wCcJrxms)2R;W07cwX zXFAoDn=Pjek{!dzu1iznljF;e8;ozA;2k&UOili_{5yVc&mf8eQy7!+PMW#-t+BD=nN zE+K2#l$ZaxYUu+jNEll-#c8{3hhLv|7l8P(DR1w2@5FQd@J#?IJg3O!Y4XuWzcFX> z@E1GgCR>h^ueP|m(5!)+e-b&L-!afGs;+bfDu_l(ySF8|IBeXs10q_uMg~mOph+2j8*A(EU2J_{Ev1`^6zP06evWK7~$C z5A+#l&jNbt`p{JW4cs21Z8IY@4xRX9Gow!racwTbb$Fi9@WveMKDBx1{e<4KFt`QZ zSKSK9$=aHIF?z#<6)14L6BEgP4FdNSwiIGaF!+)ltEg=DgxmIvwC$PZe69;`RdNo3 zGdFmW?pw|1m@`@L2=lU9jeAc^OXx1|4V% zDj^?}?Z^C>2+;nXYHnOi9Z_g5LxYuc&$q14bNTZbzk4p6MXgHjy98C^SX-U7m~Si` zR>gpMx(@k&8FWnJSy{d=yJ8k5k{G~nOdD7Uz@%s9*)T`caj=OYPmp3A=d4Z2S~Qe! z*{_H=XCt81QZ2#&Mz^w@ujplAq<qsjt5RZAB!KaXFQs&dM;1Vym+<2n!yQi6;|k7ecRh`N9@CG*1@>x730LS5&NgqgnhW zil%)G%O}=%^g4D1x*d!>Itl+1@biy*U|Yk*Oa#+!$+da%ra_>|xsOdwR97%`bZ4Ta za`r*HRJ@0&oWNAb2dmn~|L&G^1~OXSySj`SB=hW;b1D3RDm5kMe2$@C zhj18+mS*9KQYM138lc#r&-}VsypsYfRceYZ^B@EN!uBJwP$zYY!$)Z*vwOwxK-^?q z)ubmC<;H5v=SX;pr_WA`m2QJ-9x9a6f_aF`Q-t$hLrY zp+4jBT`(3twvxgBXef=*{Le+YoBO)@#`QgCF0eE&G`L0-|C!6&4`DjF$6J!m}n(d_xYx;;&~lepX+O zTvc}|d!J9Erf0W-nya~pIezW4XiIz3-SM?tJnqe8uI_E`Zn?U*qy6gM&hF-`d%I-R zb9Jv8{aoEULBkW3i)UV|<8~tML`3b5BVKm`k;uu9(Ow;+3o*tc#sow_%n99%phqM; z_URF)JFf1{=)~K#+o9b~?S7)Loj$kjrvCyvXsGO#hPnPz;a2l(>-e?Z%!hR0Dzuq$ z0r7f4WD376N3<6^XldntYC zi2(tD{!TesKzz2(eHeH=W`JMx8QBNfn3~xK=pYi&;1zNoB9#gSnvgonbs+4+KRknp zztx{<-A0jS6kqQ+`~8gW@K=trWAOMaQYg+x^|R3mVj2_-dyZkt&>Y%$sL<-eH0D9X zWP?uE-WIXYQqzxqEW~>r@@HnhkBIqWv^IwXnA-B*|89ywe->u~sX}o(a1uT$0Al@s zNiU#S+cOnOP!ZcZ_=t?XBm7t+3bP;P_tdcd!L<9$wmux+$vy&qb|=u}b7mnj3$Ms3 zTpDeIt=n+?<*iLgm?&?xvtmNS43IF*0}q3Sf@AS{)JA^jHe+#+(t}9 zdaZR!+`lq7<6{3w!S9L3{Tm$B_u#xc(!;qbjO*_MHjnu=UCmND^k*?z3E96x&FHH{ zuiBM{X*D*a--Gz_eBv04df5)Bw-mW{$8s2!_lB5`_w@FvtH2g*at#(-6aNnEg(kIT zXlGd(>dkG*YpjX#-A>;!e7~7eI~?)fN(lh;NyNi$NGw+eKf4SMABMw#Yupn@A72j`B3( z^zia|_IrrmgqPY&k)DHH=9~#`(c&La_IN@eR~f!+3f_po-`jH+FXa~)qH5bSn~Wr_ zVXQLAXBTjk-rfg#EW(*>Q79Il(cVld2Dwog?m$SvZZD^|A2WHvB#Z)sG)@};l684`GA--hWb`l5J6H!_<0jwxrdf+2+gXQ z{SmB%ug^9RDDFop6W+d^O*vEIMt!2b-Mxs(5)Pt~0iQOS1)k`*(+mu|89EWSoerMb z>3}PJX9}6{6)9I;Kza8)_eZ*w_dUlmJXp*e#?bfjFk|g<3D+)9_3nGt<2etquNW~; z_G{Dw^AfZR69Rf*ZM{m5iB)q6;bh(5_r$;@WqQ{7NvY$Q|Ye@XlS5aB~%y3jg|oq62$8s}+YxU4oS2VAUnqy+LG%)+K0F9Ab3|zNBP`*CqIzN+MiFfYuzJ z%WIe0EBMmkn{2UnS6|RmxQN0bzj&vhQ*sV@7n0>S`Qg|0ctarj79*o{VGW&oZP%l$ z7GD4^fe-J=_#Kngf1*R;#^=-XTO$2Ycre!Ce(37C3*8M2Yj;1OgE!ayMK_R7vJB^b zB%v`E=D^*7JU)cYTn^b!BBA`@9>i$`#s$*l;kXW`1ybS&LHRvwFjt_MMybgX-9KQpeo&5GRm3xW3A)(eGLD9GZchpr(6`4$cEi;}v7V2i`rlknu-^ehuYA z${40q*@GcwWAVqx7<~K34a3B-Xc6aV5>jwtAsKDNFkFZ*2ru(-TB!4a*O2`?rwSL7 zyoh;u5x5gtoQk|?jyqw#f9w7ZN+`en(CP1eM2p35R5oG;^%5>>S&`ah{H zk$SZy%0qYmch{EgBUQc7dExJmrEvDRqNW5%cEy@KiEh z7PE<>gGS;sw9}^1i+YIShp{R<(cqXmk;jA`J3fn_ozr}X+83)5#K zjYCm)PczYL*?XdGRbk=mUm!)ulIB+C(A?K$ToOV^24m(XA8?g=ko_w$>{G(V8|YK8 z!;>uj6u5*HQH?v^K}SmvYQg7Wq{Eg>-VHgJJq!|@!37#CbRr$M6$)9H1Vo69v5q5gMG%Yv}ecVl7d9L<}k8L>N=MCIY zk~N+i;o^U?_z!f`JU4z7maXw^)i2Tsxx;YUu#4so-AacAn{WX=R@ilJ;HcnAD3{-? z^x4#Zf@kR?yYj(QERhK>St7e3hW>31N^@VK06xJy!@0YEG4|bHX*rZ8`(_M;eEa-V z3Xi`as~>|^evg`h=7(yc3vYX(>rdFWs%oOYYy5B46Vu@+S89(!+ux@U7~-WT8!tV% zLpmK!XWt_wM|~O<(I}4kJQT(aLbiqGXk!6|S%N&U4Ag7`d)@eUH8f@(d{yPamsK8o zg^t7Dz*q%erD1SC)`x0k&JeD&dG_&lT;+^s!JMaaOsPHe-4Z1?HDvUsl2b##L6s6t zO;H4$S|ufihsC>)llFVip|(t=lp71J5JG*~$686YftoCPBE=(7H*{KlQE6*KsrU%| zi#OnqQ*j$iJ#eCrlMk$v1L!Mk2DW;DDK%e-j;}R~RJ8S-u=P!}wXun^_4P;{<^5VZ zXr``%tA^t8fYxf1;v@1ALuxCV zUDsxhhIwjcY~gyaj3ILykSV3i#rc0`Zd_%q>a#Y6K`>ZPvaS}}F!Qoshgj>=3ALWC zGvD$i7kd313yfopwAv@J49skJrYc!9bs4w?GNQ5j8lA9v10774zD_sd-Y8(${f4;s z0=u|T_hz~d87>fHJzk+)!@-(y{4IgLK^YMQ%{_l+chvPq6 z+sXKk(V4)+CGfvh!!rVSh6Vp)y_H`#Hgbm+A4Dxl@@~ zPtapf*E}Slt{9?ns3!9XtnPMVP{`E)84SYDN-gto?)-2K;a4d4x3Sz?XhYGfzJtM7 z$l;jHT`1rD5Jayt4wy!4-MI8b-9>(wL+>n1t#GpaT}1AA8wYn~M&K?+NJteGnIJ0y zhv>8#lPiJJfq>4Q-y^=vt3$mGOPe4Ty7a0+Ti~dgLWCR+{CJv*2a~vR5R!5nl9}l% z??5(OlJL$@ii#q2W})z2yj%&nbkkk53KSuz0<9JjVFHq-KTguzO2tzdR8muE;aZL2 zkqlR+P(>R|40ohg$gqd`(W@9juhoZ2R%lZt!=9b|%I7^srp9@<8Pk8|%_-D3bI{!+ zi!Cbe|HQm^50I>-AKy!cKTwl3GtLucqRQNXxcW@m>FP`xZErayX8q2uFg1vd(ZxqM$z=jR{_L+`C`GC^{&{9V)a~!hB|HIOiyBJ zOfqNI3kWQH8DhpNr;xJ!7?iU(Q7vSJP^4pOQSlArSKLtu_LlB%fe2KRc&xNW7fZ|7 zN(o;6Y+H@eSN5!$DtGy8S^2}7DK0~mt(lgFH8H0F`fBs+3-b&fpn?4X@NqG`^PtM4 z^y1jVl{N)s)`L~^0R%arv8NMrxFM;S_G1_+qFk_1 z$`5E;W5@m@puKfBTthCixc6PPzJ_@mIXrJn_@j4pzM)~v*algP#kip1(gzwApwYv+ z>_+Bo1;O}^I+?l4(upQk4m^(}5d}k@=xCO={{!{O`t%hIp;Nn;ga$l7}Zeuhk zT+|!nsxu-@M*omE#tj)~BCT&BEz{w8L4RxEZ^)itX~)EbAv|m)D++17!k`=ZGtkI4 z;uITKbsaA1s4SK63bvBz^7uox$~)EylfzsKP9A*-l6 zKd;BW$6+@l4B9Z{XTK6{HKjMnZyQ^IlfV3qcCnduc!hT8;AALh33QlhGa)XeJ1$j! z)2JC&5-9s@X|ya*>wJ{wb74h&SBEJr5<6WYwLDy$qUT zMd!14qw#opEj%i?93I=o&+`;tzS@w*+3ZAqFC8dqv7X9!#&UXShZR^ZQV$2_GL1O<-V{iePmxeJO5=Upn#dg~>?! zrQKucc3j%se)vKeCB-YpB!!ESzN!$a$wjl8(9a-n2rnb_&bagy!Lj+eC7p|;#{fq* z$^kJLq&kn>_5pNSF_EEfGQ2ntqWhj&oD?5~(8TD3=#<+wm?bdB>O=B&+=+rrR$HdV z%X)|!n}~6l9_XT7wuy*u*cKbvsQgSdDs>99p~o*98YXmk?RwU1*`n00a~bE`rE+&B z$H#4GH!LT@*7F@SmVxH6x&?`~MpSDz4!59L4zb|MRxnnhLPqmD;FG2Z%+HOg0SDR$ zN#MB|8(U=cc9Q_axsAl-uh?Jx#|nxQz*B!RFk=e&o)y%#o4Cvv+WG2ETAF8%|= zckaW&Tj4zv@@$dqE4sBn;Qa{1eYPO#A)r>ggv!~6_p-3qDq%R`c9WdJ!us+jr4`@) zzm*pIAsnPMz5~5XXFDh@Wx5|1m#@A=)3Ptqr(zA_}ZG3$VehXZ1T~SSj z0rSiy%93%P*c}g+mF!MH+a0?us%-RIim?I%cE@qaMG6@Un7PX@A2Z7W#WKA(oleu} z2)<=pCTu$VZC*b~9xzdaD4ACW&lM?A;`+|tW=7!#Z;l@_I-%qJ(5X0%>zZcveXQlm zs|t-)aRn-e`#9F#OlKAn!TMdA%W4zZ?Vp4nA>i5F3{KL{1x5VQ?8ywo4J`Evj6y@6 z_0ht{(9v?pPTqQm7B&aMT)7qEWh3CLu?GltYhsfn>=}ZcO>C-!y^dIC4zMq%gt5$& zh!!3OI;PpZPLk|6G}*jfs-BsM7XB&NbOp9~2hz5eWA#{cGj#Y5Fz>}UiDDP1@CmTL z!(2_z<5;E|ui2*}4b-PtZm=)~-0+sbuzXfaCXSu*1~GB?u61lUCLiCjPeT;_Y+o!6 zQ#}=xcXwPdxmZo!wcuc?!FE85x1PK3JjhCV6H&<;Tr+e5%JVx2%E90NOMN$3KmHN5 z#Ng_U3=1}NX?b92aD{CpmX-&W23OcNVrh9`X>h^XtB{0C%Ufb@L5het6^#M%=?GSf z94r@U+|i#Hl_G+70K>^fdo`scj~A{^Hllv>eLxj!#?PW1YuNy~Eb|zdjw8?-k@nhU zL(+=HX;zHZ2p;tC1)5HQSU32xokXz;Y;jZ+oI8>zmL++wbSOoM>L}3yYodyRu2P~v zZ5E7*C{d}B>15=3rlp`v(h5NB$*6*Ky*tOq-m2z-JDa5(HnV?25$ZcwS}oJr3Dz>5 zo$)K}m%7XFAle=LPZoPn=yU<>wF-+osj_EK_w5l0*h75mnZ)j(uqT#dcU0Jm%CSrw z9BwbiQW#)=r0VjFh!ipg2T?y9hZ<=EYTW&6r=hZt+ipKR>*iVmhj(X(fR zfmGUF(ZO^mdKTxCJS=rE9f}^rQU_(XAeK64I|evV2h*YG*>g&%Q3unZ=vkbK^irb^ zrbE$7Se{;gH!Sm0?=0v;(jS}vGViSPdEilbR{BJSmz|Yn41E@~2fd3+IM`;>UTRIY z-dX8-Jm$qY%*J{2F=`tMp(Dt;ZzlL3ng})Z;07jF_jV$0MT0ihv#$ z)X?LkDm@rO>oJ*n5FVW#^>~UNBj)Mp@u=u=azKv@Yv^%Gl^%?t^_W6E2#-#WdOSss z5%cu)cue&8Y(S5TYUpull^%?t_1K7d5FVW#^>~UNBj)Mp@wn)5T0oCAHS}<*^k59F z2ab7lxr9fjM?IdR$B21)dORU|tPJR}wuT;Vl^%?t^_WUM2#-#WdOSss5%cu)cvAFO z70?5(S5&pTr&sC07+Mb;3+QqQk4}$zJVlQY^Yrw1O7vJA(BtA7dYnhTmkM$FUGhTmk zM$FUG`=7hluQze3%6~RGu32spY2iGOIRS_IkkD#y{ zCrKNuLrE}+>oRA_r7d5E!YQ9X(38Y!GB_MjFNvPFl?;pP5{y>_hu0-&!{#lLIG`@U zor=SebqVfO1V_~+z}pH;;^?{rc|~wcJ%Ykj%20=pz_%n?eXcDpMrnN(^{#kwx17Ox z3GX-QlHlK_aA#sE-*PI0cEw7jJ0w9bBUZ?r1%IFv=@UClCnVoed5-B!oXm7GYa93> zle4fNVLALw7yD+&yN?14hur^u6Ul0nkmUu6-1D{&{@QlyrwWQdc)!S|&fq);S5V8XaSf%6 zo%{{_F{_*@wxX(W&G(}iOvU2UM>s^A+a2`zq!P3n3yO)&4jt;?7H7M7AsT6J)$dId zUITM&RhedWE<)Tyov>y0$+kH?4}6Qn&c#Sp_zVmZa-xB( z-7Rj6^@$xAKORL{Zo~Rdrw^E+GBB+f1}nCm>4=g!75Y7hr{86nmY9R zrVhGid6f8la}Z^DLlKUM9`SqAScrVE<_GzVl6R0zT=2IRe`AiC;V%}s4x3I3M zi@Bx%Q6*#6H;lU*=n&z)5UFqO_0{yd8gaV7MJHj=iT4=Wa+kmEr&wdL{D|Tu;3sd)<2Vblr_6#x zC~)wmdjJ-wczb~}=0d`>jG4=ry%EDLAj0)C;W~L_KuQEj=aFq0 zlEnqI$XHsWc}iODV|rf7fuqLVxcF3FhVmxhF}Z!1*D#805o4+R>tVA~QB21j?>-KSvJDSa%^= zkQ}%#h{NLCDDF$*utrqdxV^;2ywgitc`8mN)dvEnQ_hvpP7VYHHsQ@+xnok%+gt@w z-WDtmKPQ_Se~f%|&H{e|nCBR!aPe9)lPWG^QB4r%<-2McisA(+D~`nW4upG2WaXE7eoSo9 z{rJSevB~ZR^|bYd_$^+?Bs(yPd_Q39%=jbH#1>)Y0B@in4nte6I zk#^b_aQb0r+MwBipiLA#Duu5uwo#Vx56Fy_KX_Mg`8WT(TlX#*jy8wl}g$kJ~ya1%!V ziBB5{@je3~Mr&dedSR#%8w~~4bUD!9hjVhUZRH)57WTYM>)oXZ3;79Ud8=Z&DXt)# z^B|zD!FC?po;Go7J6~8y_bsGIx_`rO@rU%5P4F}AR+MLO2hw$r0UKFLN{|a}9}xTq zUj$k0%Da%p?*Mv#$!%D=bHLMdIn~mKV;Muq`+E0n!VQ`c$#F|3AzyO5&jnPHYhc=n z=CrBaw!En`qQ%wJqK{g<4Nomhg)}OS-V-76$>(*6Vfj62x}4GK!`7>)cn37qDF)iG z*k%+jr<*0fqB*8 z;AoDf{p*`=)VPXe912BVm3D_SD%cmMD?V-k2pgVt(QvWh85cA>+oKgjJ2TU74V~Yh zrUp&SOK4(pZ0xp^#%?J!nT{XbPhTHpyIS((>_^|a0Clb_{rB`J+59N_7!n>3 z#T-Y>K~c<+#LS6ejt!X21sV&Vn0cajDowbBGNJSZ4neuSCN|{EOMX9Xz~Rwi>(lRx zu-KNV_r-Gm^-x)C)A(jMN8Su)Fwdp91+D_Nz9Q^%q7Ge9>rWi%)%(7x*kvFm;Yb?ViXPzrb&L$3QA!if&3Lmcj)Jx`gxar z-mRba@cC(w8IvP3rbcE=%*>dWnK3alV`4gtBt~ZU0%oQ^)6bvl=P&g0m-=}hpP^<< zhRm1>nK2PFVMG4yN;dMF3;>q(M#Mw+2S-ts$0=r;-b2HKbY^Vc~SccN`b&j<1y*QD(Q+EY**QFFpZW?*|0R=yvp%dBr_b67crbqA#N?TO>BtCQXY z#dSORt+Y3jw$p_6cOcutRq##(f8RNg!Vs%ML?U{OWSU)}=7jj3{R?ami_faF@;rf| zu0`xTQ9aTL8awwhq+M9w)tP{?8<-iH9S_X#L|Yp%?E%If2bM->QWfRGee11!JZUeS zU5^|8=%+Db8xr78yFQNLrx#nZOqWi*{D`S`@fK)xBCofF9mUfXiE|qgcjwKnl@W(NJNMb$k(O$(f@1?3 z9~@9nh%r6Ga9%TUT5?d(KFKjXcD9}cWM?;Bz`@k)ro5q(I&GvT>I;6=;G- z#FVGJ0JW5x_X&1p)Nx-#B)E;7wI>slL_Hovb*;-Ygk0PdrzEPez$t)q zW7DPY=I)`Vzl;zJIvfTK$#@R3M5k*<)zyxodw^lroTfNGF5R4+X(GY`XlNahf1laaC>XJ>HUvs;X=53Aj)G zAj@UDV9IarUY5&70b{WE?cLUL**Kf>+uLWkY;8^X?d`H$HuR?a_Kvp1o0L!W4z|RB zmA|eTg!L|uMRiq&BA}-0LlJ%kedTs(Ymp!ygOgCLGhQD(xh>1waXU7lwY9&&s)V&Eaf7i-s5PdbD@h|6X-1Y zAE2^FZ;<(GN05AV0aB2X0u(uPB!wxBq(nNBK^56Kaj;>DojZH{5Iz9;P53^DI_H?~ zM|kG(9^}*6mMfmJoh!}agHY7_0Jz{g@jU`K+FEeWi>I@kXK6hOf5q34>5|IoP83G$ zWE|5KFRYJ;Y#_uwc1F2%n6cN#Tzv?bmmKoxY>Avpg|VEOYWiO?J3 zX*j5PJR6RE@J%qc@~*@)kD+ooBX`aRIm$v+xoQgox3XI}Z5OtsY}cTWWSg*EIHC+b z&n}HWsVx4QGWhW_ct)%={YPc-<99BN-=hrvZW(-K8T@b={8}0OO&Q#}OKE<6W$;dA z@Cjw`MP=}B%U~`RjM~%0DS%PhKer5iv<&{H4Bl|>QhxiE!8?}uw^tT_aT)wT35*XLHpStxR*&tdYE7{M z`~@`7;R08Mw$XD9o5XOP>t<|cd7j4<^iR;o%f$LHqJc*FVYISssTo*qgJVY~V>|)} z)jk3o4}wkCb+sj&#}L5FgUxc%PO7cxkCWmF{3O)=|3Aw1iiA4TNzoSAb~#UirtbkT zhc4uxu)hYjxE)0D_)1dmgoaegeHxc@K(QC8*d166mD>zW_afZ;XL=GPZ!i-6P7%ID z!g~TjmxL0fUUl13>3DwA_;Kj44$7||U&N>L8|0qPMSw-j@59#kVEb)~t9^N0Nmx2^ zDDkZ}-gbB`67Bp1heSsyr2L-X>a?3^!bsYSk)zd;T@aH60uH8{(hHmqsc&JAeX!=b za2bBpk^wmgqA+NdaZD`7ZTgYpA^hU+-6d9MC30UNJx)!Z+JyVXDUWy87%r4adUxX) z&0Qq_2_#QBzXiw6!dc*MsRIioJN7<41BcE6#z3D2Nq1f070~EQ0xVA=LG*bU(I&Ga zL=p+2FUp8kMu{X6L|>K>{XI$~k@9`BEey%OpwB}|%q1V=*JFO>l1~^US98gy3^J{` zm}I^td(ZKO#7%4dU1!24miquMY36ViqYafKgsaO4Rc3LO5vB(umn!L^{n%0#xVq(c zu&iPP;28oUH-O(0SR2n>U;`{L(&J^Z+_OlK#+7ZN2F9X7)&N4*0M^R-tZy|XDhG8M zg8V;ZJ7nelAX(eFw_!BtHxJgbSz0PP_YR}}i8h2qWaXZtc2Zi(IW$I;&wUmxfg4#= zSWlEbQRh3|*ITn<<|Wyfi^)cc8gmqjX+yu<{~lpR9YS7Aq7*6PMIo#5+G5{Ouu@*k z@!NR?Lc-0KhrBkxJx%o5+=sLnbY=gY`$axdwtk+rwwD|Si^!K!zHRWJ#q$7l>^v_0 z;`mKw?Trfi0*D}j(4xQz!ZXC)w(>BH$uU+uOwCiwL>~N8=Cg7*vn;*Pn+MK5<|V<* z7mO-KVh-_%6iOu{Q77&PmJuFZRSbiFW%Vc;^0uA75}g zu559uxi~D0QPEN!94X~I#yj-)Y24VC8RJi<6gwz~Q;z8WN?E+jjOB+SC^IQn(&@y0 z(w3Fl&NBS@ZPC%!7ORmjf*F>wW%6-Lr%Omhu$}TFqV`$J@<%;V_Yz{A0=}uf0?I!# z{5zt@YgP1EQ=tb_Xg#n}vehFzFgyk12QvqBH1(0Z&#JqQm>k6JuMkACy? z_4rcsup)Z=rHUT03O$%Y>#;udAUrTVYVj03`pwhV<15i49?|2kRrIhc^k53D#|G4c z@WAw_#Z&a?H&2eaVa8Pc^bT=0=sL(YQ3u(q=pbvR4$`@Gkp7{AG_ej+%Ah}+AmH*> zZ8u-nkS)$*@i`RTZXOc!D1vdd2nsKtON1}U@gxYgI7hRXpg2sZ#i4zoBIu||Fh&uq zQ;VSRv65k8O&K~Ahg>ZV?RP4Ib!!rgR|K6U1f3&g_hsiK+yd3MV{Ql{RUhpvl;+>z zm&K>K_f)Q1!%F%dEKk&y33s}>SOQoXg^r5tEtaTWq>6b}N%TJ3O^#IRVdNyLa>X?Uxt73p&V$@vQ|`;vzUB66a_=nc%cDf@T_kF(l*aBsSX+I!0HMU% zHGpH@9tc;6XuIU(l1_iu{paLs@&2>&ooKer7$y#+evU=|SJcdnqIHjlpP-$MP*`QL ztRGg@v?vpPJ7R*v_!rA&xhk8H)yifAv1xgfl+A`g6kKPT0IgtwMT&g_jAE%N@82ju zSl-4#IOc5lK5vgo$j9>5LJfqt9_y5wz#CB-a z=pP9$bR>U!1}^<-DbyotY{_Vh>rEIVG-jlwHex6ZLa)TmC((~gQSGX_ByM|US@0Zz zHPqoTb&fzM7VT>@gstliSlDj6@80-g}MOxYOIcawl7g{Ves z^kw?p8sobTU1Q1E%&o{5{))aod%S(C0O@t_Em-$nd;?je-3?$TZfQP_Tbi3u?96FKQP7U(`+lzLebrd?|ATd@0u@P*utcN~BcdOE*9;OXOs)yAK=H zv`-w@%)Josbl4R87Tqml-z_U_jZBYkN9$*KpDpS5`8BSa)OWgE(tockncx@yd6SLp^(RmkQ-6Rm=cmQ z9*K8DTx8@If8RWSu|-(2jSWd3P%NxR%>&1+u8&e0Y<0yY0Ne&Tf@Qca1qg8?iR&!I zwGx*r#f>6vYAJ3saL;;OrN}WP%$MTYi0dxJwG%g~6gQT*bxLvLh?`i7n@C)5DQ-M* zlS^?Eh?`Q1>maTNIPAs!5cbl0acLrK{(1~6pJ0BRlnnRiq2<5!#}+$bR6Df$7}{O7 zfgU%QzM+h7yKTxRrmcqW1a2V(K?mNPr7qeK+9GfZQJSbN1C$g1QCl&M6dR$f2}yww z+J=yn0HJLOiR}q(M@XzrXnR6pZ$dKxsfr{fBWec{h_MLmNJz??&`yMCaMmbV&970@ zN2txaW9Y9lKozx`Y6~8PArfLYjyH;q0Neo}PeC}>}I;0uc`q)t4K;BiWgJ$l{Tqqhs*+ulaZ*T?JzjFNtnD0+_o zy;&4Ji|MzFVsrP_&F1y>xT4SFxVcX$M%)2P+nN~U>cb5GScFEjE|1xxt~L<=PlUT)T-}Ie+1a-+PUo+D5ME!CFdg3e zf$paG*0uz9jwYI48cc> z^KT&h+d%A?vj(6tNxsQ;z6l`5FmcWrI=^^i9TUHP*b2f<48bKo#_EE}8yALyx#h%x zu^bz}@?j*AYBSVdwXNst-mlH$h0reV~JeOVMG_9enef;79?1)$1eF$v97 zde4v;E(N0c(u*&fiQH2E^ zy@J?j1dCVqMvCGT3XPkdaI(%0kR_8WZUGneW=h!QLrIZz8C_MBiYUsHUni4P$wh*y zG$Kaf2Dk!f%h(6@l2smZL6>G|Rwu5+vcfytQyW$*om#3`B`w>GOmdAqmEWzr#F;=3 zfor+krw1!lv~jhhEI7^584PQdcoA+So5h<_&D@sAelk8@L!aFA%75cpx{}(8a|2L+ z3}X`hv-sbN^%4L4BmNZp!=H__@E^sefWHm6d-0z}n15`0_M zrCibp+|F_XU$a~(&`~8cEL9aDrMP&Ard&1y)VQ_;mI4ulr6b3h8 zP_3(3+=VdiH$?Z!T%4EivkY5aCy8ACsyTye@nw$@|I;CVbj~0oh$({8Y7#t!aSd=d zwH86)LDUQooI!$MQUS*D=X@HajJqL{KL?kAeaq+CX{u=Zh>OgC(Q`fN4AO{ zY}-opU<$3rCe(xQ!1SoaQ}pOJPhXFrqDNmukCrNWuwgFMgDJEgc$u_%ga@WaEuNxB zzj^w43==&zj_5JGiXMEcl+}JSqssy>$?dyhQa$#oL&LSMjPV ze1M zC~LdrQ6krmgD5qXbcMjzf{V^yQ8&O=l@N=t-N*$8%)hcd_nR+l(%= zZHqd5B9tm!&(HNXbZ#SMiyral&_Syd^xUwZb$*AH<(Ft*3QSkL{S-X@3%PPF&P=e5 zlzUXOeK1ljrvyilvw&0w9*PHB+G|gZDnq_(cUlA6*@Y`Xpes!nj56KlFS~Q$eoUwtV};R83K(dan!KG3+f-0a$tn1#V$QPO4{ z{NL5xEOdoAvYam}$s(E6h zg?ZxfUwOA!a$Ifn{b`Nt8Z_#^l-E3zOG#d1@T$g4V0lCTzkO9#?-vX~W=;S3%%D^C z{MwPgQpWjNLhj$Fd)VY>6Oq zPw^{2`h>$Znv(Z)uKqS=r_|kKVNGg$*}R&n1xha#)6pPGj<7BEI*=k zv&{pjHKJLQooiPN<+|nO)Trik*X9O%O;pRI6|FiFHC;>*+snHn>=?}x<|$kb5$0cG01R3?0YXqo(?z7B<7Zl}zs z<|fM2tYvB{ktvgD_GKEH8CoLKP+z7d$kdc+Dw8Qwynr(8St=8HSX!nLYq8U?QO#M( z)S_k5Zmr91Sf<67X?SLMiA=+NnX-^6o539qC3YHC{1Ii^hcX$1urtCiwiq<_pg|)h z;fn+}9t;}$l^Dd_%-I(HcP_nuk$s~9@fph@u8Y7j)m*N({9DrznpG#K3JpL ztZa@KcSLTSH_OD`$@tjEV~ToA#Y3G7G@gD(f*zo}2|hH5&_o~VCbW(Z^#W2e?>Qf} zUVvH`DEO+Y(mLZHoPXF5?wp@~5T?~__ZG1)Zwf38lk`n zeQGZypo5{X1xX<{^#BFHv;hKU%BM2tlu ziA17pHSu=(xjmm@B1R(-W06QAk!YqS-a$Wia7<+?~&m3CX~ORA53PG7+Lf&Ej}Cytg-z{@(Dt z0LZ%)>-pf1xM8;cj$$HXWm5Xlj@t#u%M$uOomyC7xEny=>XT2XHn^iz&aB67?ql|!V<&p={CZIhVAJ`*{bALpA*H+w%wkVt5fJ>>E zk9Q(|ng+$Z#qx}ME}oc_y9sSV@h%9MIOjREiMe-hJ5bm9XziH@Yn_WXv?%LyQBf$0rA4tSMM;ICVA8sZBx9Rn zh0`GldT=*G^eVD+TDWGf{cEi3m^iVMbFv0@a}PVxXjAWu*NtIc8e6_yWGEm>5mR8v zY<=ig+wUIw)qefTdy3{Ox#q`JlVk>+K9nSyweQc{=`%rC1{WjWiO@NVId&1bX%H{v zN$0y0`OXA(13BYRS?PlxRQMoG8TepH;>n48K9aaW5~oUvE|RzrtP`rvg#RbZkuERA67nwM*gqYfk+2 zdF8L3IO-DlJxP9-;#XU&uCOIED)rYut3ltB}evyN_kTN@DSb5DSQ_tt}tc}$0OV4oB;|mha-ShFn1v6IyD)kl3PaCM$0~9GxEavZoGpJ zM-qRn#w66z^0gXAFuvqm1g6k)hFCGv>Jct`%?0ndv7LTOpv5deq_>>d_ybz8+oT zS4T(mm|VrLoC-adLhFHyTRp-9)1wwo(WBoyeLb+L1ipGqL=QAF74_rT3O$%Y>#;fY zAUrTVYVj03`pwhV1B>;cMPak4d7(qKFK(( zZ=ReN`Z2y)_@@^{CGj)*8t%LLr9i)kMkW!k(^>-9rnGqz^l;N8ecg&?i`Y>vEOCf24KREA3yGF6^GOJuuGD0__FZh zzK^)}E!1L3oB~&}nli|=eM?2~eocbS6#)+YtHB|!2>w=+fMZ=y0B0Un=YY768FwT) z)Gf>Yg#KSgw(ul+46B?yWWfY|?roIQ6!AHc{Q@XA+*uaKd{ps;@v>^;V~k~LlhG^= zrMXVeNI&)xf9Fd5VywYtGaip&lloZ7wrCzCSt*^)N!b2U*E$T5q(>N8p zd!&p*L*^G1-&ES;R72nRVfnrX|T$3d^F&eC}LB#?YtzG zSABQdW zx{>y-3y_NFdcrOLv%BA`D8jPDG9TVgktuF~78sl8FGs7}I%!a+EpuSr$@q3xj_qs) zZ_ZBb)^5JW-Vh0j)9KpQ9*;pO|J(dtAaB~N~;L@)^tnGl@Xn&0NW0M$GOMQq=i`pb+JKG~F zJ9Vh(vXhU4+3h0E2DF{uvD&JA7n6IJyhEQCp~Sr zeqGOa1X1>)dJLtwt*E2i8qO7&JRCp?tjxpv#4|Q#KsSY?Dk9|`h8nA0Kob<8Urx=s z1Qimw@`bc|Y)LXURn0LNAOQo|$^f9e3+mt?dX`0tbGKNHAImsMA`{2uK)8USh?5F! z=P~^F$2Lsg1qSO><7%53d!4UrK)tyZ2m5f#^ky$)#si{v1N9!I^}b5$opKL{Vr9B0 zGsLr)7K>v(GBkrks3guzD20hBX|E%AL!o)Ic2$6f z0K^!c`2QG`lk=by3BPS|EOA1W#Z$m_?Ww7CwG3XGxtriH`3;orNp}Qtbq|hk9YwAW zhg|EUT%$99vqfXJg)zBvbz|sgy6n;C_t)>tXVsbmz5-mn0UC5uztUx+zA%8;m@jM^ zgsS*P3=^HG^@-#-Si#7lbMax_FD7&6gGLU?wx^(e2-wxA16kX_ z3J+WWokIsYo!=)?x0|c9l{h>=I_kO&%)~puXCCdU_X(HRn1q6C=DOy0FJ)-ekqMs-6SqSDi8I37Q#$t+6B0;=V6Q8V~r|=mj zVl)yl7KtPhiB8qTr|}uiJQEFK!Gh{^O?8HTevi+PHKRezSg@8z8Mj8wl0WrzTiBZY z7rgz`L)En^iI&`(n8}-Hn#GgQyYSeZM0h>myfan!cL{{gQsKk#2K3lqfd&=L_T(ej zEbass^_D68YKE7q@VaOjymM9fE%N_?3Zwqo-U=0d6K#Zdo(eBw_Xh3}?p7pic9;fqvw9@GAa;o=9_zUp0!U}ul%O8d%hAbh*U4fNgQuP_&u7`<$m zeASxnjUdL!Rk*4Z0exx}-cC1!5T?j}Lg;m*z_sG0dmEuPfm(4(D0y~u~!v6p03b?DYPD#8gBIn4@{3*JVlRw^YrzYA$t5S zqQ~A<^mwL152nz1Y)d@|4@{3*JVlRw^Yr!DT=e*TM2~%{=z%UwnO`x5)?+*BL3m(# z)Z!_6^qZ%z2SyCh@A^YT53GBvs2|T&=)n|PkL{@k;eqKK((Z=QJTyo9Xz7W|`r z{z*Sy=F?vr3+o_-G>fxg67P8l&SCHc2K}Mf7YVrhRh!T+ zRzsG(XojMj&_jYt6v28m2`)r4h=I-ZYZBm&6B2CT6J(u}@#2aKv4P5CL!ZJ~3IcSq zq`!R(o?A+}2STY~wFV5U6?i|A^Bi8BX?tjHF&eAGar%Hs-~t-qd?t-@Z4&)1xqF7=D;$g33V9dNhv)dpW%z>7)MtZQ zjl90Uu8ixHMaj6w2SHTK`!EP+y^kW{k0p#lO5ve04)O^Q5$i<9q8@@gTT`AhlsuP| zWh!H1e-(!1Q6kUZf+)*-BM5i63^&@msV&})_pdQ85}Wnj3@EeSTN1t$`Nq7rgK*q? zHwa^0**hT+_ud0gMIDrFT*g`1HWjB~c%@^gcM675I`qkqr!u_8?&HAAekepN6wkGz zB;l*XB32N#JP1)m@4a!vakl*%e0#}HHkXIYG6s$d28?Yf>zE0YwfHlP z$a^-}+Ae=BZvwtts~D1P<9PH$wqx3jIIe|#E2qH-7-_+;EKJCcEPRUEfF2h;T~_Si z5JPs4aAl^;wn7m*`@_)r5%Ch-0l=M1+Lq4Z#^7I&9(msdG{>o?!;;P@{HSp%=Ojd`bSo34d zqIPk6m*DjPckxC-5Zz zwFH~r2E_awn4`U$HS`Y>-=cwk61Y_ZUlF)T178!kO@Nei=A|D#Cna5Z6_(z$_Y=@4 zZz>;PrNgJ>3nk^uM`@cb-;pW#97#C`0#iCTYP#%*V%#%T#Oh_+8G#?!0&HV-_{TVs zk?oBd1ANMu{B<}U_5;f>uvY?o7WSO_P6Mb-x*JT22I(3Y)x|-)vAW_xtU4G8*a}3p zi-W{tsg-U6qQqv+n6;a|bsG8H2m9}g|1S`}4$nWEIByf-Mfg7e|0e?e2k_HgMxZzt zqVgc2fFrILj(K-Ong|Ye>BhW!1ed|_+oh3pjJy}PBnA==hLF=P2jjvOWv(;r`^+xG z?67#hN_HVG%r3;C6BqODW6n5c*88Od0wyBD&r5OjOz;a4%T{9HY%ilYlmg%gtsrfv zZ-@&8!1%ZKI2nhL!uU~PoKTE!g*A)KWQ>hBRTzi3kZ}@>A0gu~QW!rZjFXD-USM2l zNPIjQ#Uactl}S~}F2n`dB{M0-5kqQ5v59GACyw@_&<1chjSJFp$BxEHAv{Q_vH!vQ zl>~xFDTMn=aiY=#qEcE3a0)!IIE(_+Ww61cLVyq#3J~G~clUnHjKT=X=n2WFPBQ8m zRk#@*m^cS5u9-U%{kv#uFGE)FFZVKf2D^V{1lu?hE4fH+oiCH!8+0r(++ zg#mP733L&lk#iQxjv41ra8D-ON7&q4jELURT7;X>(=OrdZIVJhEwk!D&MaZSV=?}R z-j;|=dUs=x;E3+c_{KjBoSnld{8>~?O{AU4U|9n92oOb&(6e2pa25cKopTd0oVk!e zv1og25yqiz+ls9u)E-^ zxwkRQhL;AWF6_Zv#Bh?(6U0e7AO=L41+G z2@@>Z4s;Q9a3X@mt?BXO=<)dCdaaYaNw0_uof(0|Ej6}R!T)Qs00hD4>Z+h`uPt&#TGGRK8=Du)9r{G zF&S}}xgIV?nNWhs+e->Cc&B_6b`<`EHbar*7O@bI!%s)yUBQx7h|L|3D3zZYo7+Wf z?|{f3n>#@$O2_7oVSLHh98>7AhnesXkMO|89%}KN0mT;eo2Ng9va9HEY($UmRMDeQ zp$AiFJ@A>?>Jc889<_Li9{uL&>#>{YQH<#E-70!4s?dWev>y1zYxM{ZOpjVTMUQ^- z^!3K((Z=Sv$dx#zK((Z=Sv$IAj)jco998RMBHeg&s_y^*~pz)gwGG zJ!oH68I60!n(kgnK zQlSS^Xg&6z9)t&`M=hSBN56TN>T&9~=z%%YviCVtMD-v%FgZifDNd9+)1rc!uTC zAD+G*bEG`ZjOcMnmGU^NLJy|UdhEsWAUrTVYVj03`pwhVV_(tZ?1&zxR?*{}3O$%Y z>w#r2tsdcl=~0WP=+SSUz8?FD9#}vh^xIFXqQ~+IJ(xo4u@ChiJTN_K@f1D!&69J2 zvoI#eKRwUK4+0%zpIQgmE!9Ex>~xTwBOPS_LI?SZ)2ryV*gJ4fZ zfU)};1hW(Y#_4Mi?57AY-d}^@Lp7C*Ie;1ja})>63)CRkSaGA=68LogvAV;nM+p*E64;=h&KgzDT{mc5D*sFHmt z_*gOyfDMX`YQFRo3@Sx(QuEyxU;+lytYuL$U;0BtX?j*Jf9hK1lr9JFxnf_|U&}cY zRXM+xS|x9~#JN~1&+ByjwVyUtVg-0BT;#sGWCbY4A@bW|NjfIbY-cC@bQUL#Gwg%aGN}3J>fyLZC^D!Su5`7W zlh8P2r_K}In&S#q8gk8N*Emd^B($Cgt+X-;XDO11z8TC`aaKg7>Uk~`#}y-G2EgnN zPwkB?_7}@?v43b;l%ZPhKi-&rpnn(4P-DMil&$Hn}>cD3DOmT)DUth*SXLUB?IS3BL)ND|?vSMUtZVwE* z_Hjc`d6dh=B>C@RheK%+!50ql7nyX_sWm3MCe&gQjOlL9G2LJ>NlOvikZ})BVLjAn zD|Z?IS$vZ6t6;FmWaJ!KW@5XP6_fCM7naXc5~m2%0bV6LHi}1gU@KnI-M^ZBaeHR0 zGD_@=`&tlnfY=w8mFTd_#>0grQG+LyODGvx_Cq*E{fsf{eSe>WDR&YcgmMteV=9%e zZ_HyR;nZpYHxaf{Af3wFNwsvlcp=2c5!8oQ6MuV%Q5hxT&y=VmMEo6su=y3@ueH28?PYs%DP_omPd(bH!!Mr2N_Hg2K=?W8;Oodqr2=L?%wMI8V7{;+Ac$h z;=O7+p#Ur6-c6E&f^b~;QntJ|1E)_4XXD-TNHulDzTC%$EgYHR5@p{5kwt|Pm`8+u z@;Neyig`x|Vaq$}Tk>4M zJkL;h9#kz)wBb;oJWBFJ1BQKpZn;;zXww3Tr!he-Xm9^1<|{ zaTN2pR@H+UbmOr|hU=uOWqE?|Esv5czr(2F)?_eF81UC}4K#$_Ns>$<{)tMZ)+wGC z!F~y>w>W~pv}DX%8bO#uco78W^Aw}+MzH@Pqa_imK7D0se_V2XL zC8!UB)W=2eBfJv;RWG9t|8x5HPj&T5jfx$sVT_nt-54>q!Wh{2UsdywH8fZ275@5v zt$S&4$?*l1J`h1iT_C%lr1&FL(W1uWWYwY;U%w3c9!p=pU$yz`RP*(7r4p7$iLd`4 zh_bvDs^(!ay6NS_&H0-x9;9lX0O)j_FG&;>^UjMvE#3uyDxDHCvhDc)O4jV!WL0Mz z6lm9-M@!#xFFE7jT)a-yMl|`Jd>eP&+HQH2*!3NW+FQ;zco*SnM)BX-I2$}uJV50$ zyIMY<3A6Gj$>(#4nj`sqQ8SGs6_@-8CRZQb5lreVwK@ZjD&aUQ%HU9CPa^ z1~N)}>qfBkzf0JbTB^VhnlY-6-ZnVAM!K{-AQa8YbAWD!Q21|M@Uqc7@9+or}Kk4!$Ar3jU$5+THIjh!PyksUOFdnBgN3%rOcT5-i>@u zV7}-VOTOnZL+s{Q!5ppXnbjvT1cKgjBsW=Ug%Oa$Ii{JzX=Z8!B#tZ8&&K#(b1dG> zlMK4rI0$uB8wM3HGKB@WYOn+nq%$@~tKBh&xOTU0e zL~u57?8!xN3F6pwjo@O$#gJhHXA$>JDP5AdH5zxY$~Q$^0%;Q|m)WPBWe_wnPFOxB z6by(edS^MvyRkvG44-l-q?`#-x|Us*b}F^8wDVIeUdN#aKYJ;CrZi?hUBo#iz+=p)g{d!$pP0ccnZeT~BNg zJln+jxUNy~;lp5p#7eggCI}O%b@dX*(r2A84a`LvCkh{~*6PDjJm_{KD(a%qT>i-W z?4>+$%|RB8H{`-$Pl43A|Nnmd3|+Y#7>5776L@T(~1m&C-QN$(@Zj$-a1 zMqI^b{{S)U^#`1PMhv_C0p>1Xln7r(GyDY!ttjE`0in2_pU2Nh$nS=LiWCC5VrNjyf=LaJH%q%yFP@CecF0&`6%pO!>&Rf!d^2?@D5N3%^W)& zE`lunj7ElAaEe%@D(9PF_ePA&x*5zFo2FAnG06JjeTkwxL6TZ9D zAT?n6z^j0a_3FWm36MK%#u7E|V^N>1QIU zDle*&>+KLZ?ht?5+f*cyJAIUAG36vbQZ)9&z3MRIN6$j^R*aSnaKoEOE-<XzpE z!U5oj{dVkr2KVN$-|qVd&sqBb|JO(S1EBoDoO06-ePt4iNB?*VIBf0n+lVQC8&Q1@ z#$CuZVi!24Y9qErYSZP)3-`xTvZcq6F~SbhppCc!RA?iv!~<Q(adGh zB;9#<lYBmf%K-{D##;U>OF+)4}~9T%veC%W$@oA-+ug_WluAwy{bX#(^6Z zDMOISggRc|Mh^cY0JEO6AAKocl($|7-S-24x?k4DVrKvMde$y<@iu3<{+3<5CTJ00 zenZTVDCQ5u43A=7A_g7mFx9V#863qtOH4}?^CB^$qL`O~QT4YyivB$bvr)_o#I!~+ ze2EL_5pHnWpTg*Mid?! zkjJ&cLxR@@JPr?eoCe)a2M?{&!}uU@&%hcQwI&7&VY+ta!Hssx-I6P8+^z5{2A7Xe z^?|D5WIc@k&00x*D{8KPykgJIrh6tK1{;7W6uAg`4=be1=_7e%57i?{0Jh(GC^k8aUk>#hp zi>bi8N20sc(S-H1No5CfPs-)u7nfg^Lb!OIWFHT72R zCkQQ+n0-56FpnG$zn=H?*by^wKSe|U?aL7U{ybxjADTW(b2-$sR^aB9Su4gII1ij~ zj>x{_ULO49j5!!v1bEVxbDrgJ-wMW^wB^3)yfJ)|7(JaC zzi{^6aVx`GR4*Am*z%Y8Vh1H7pK9)^) zrDc2yR{{6@+RpE-j%eh`xH0EPDB_8xoFSsZRtK*0oV}uZgqgb)aaIZ&&j zUm{XLGKSJNr020@+Ys#ZraH@E9(;2qc>l5SecH!de#F$e!Wtwh&V$S+W?`#ry_t<= zN97iQ@u;*_XV-W2n8_90Z4jd&W_PsAN@p(x_h%bYCfe{7J@2t4?@FsEP+lr6`_YL7 zJx_EsmSe32J@4a4)K}qFMsvKd>!HRmqqI*Y&v}_X)zM;|^M(Y5Cv;$ht)oVA9Q|$> zY*j~VCa%s29Ffaol<I)QK};JDMsq zls#%z+RUzK8#1>$X4QAqTd1qESB#u9yJdF0-O#mznOf039)9&~U7~v<--znjj^)6{ zr4rZGmdN9ZT4iGOOkA3+Qz5XR*&9+vCl~bGmdLl469&c(2*udCe}GM3@|PVP%l!;0 z&KjK7&y;>9^)sQLarJB*Jgc!`R%6|)#>QEV^|NBL;-OdX={WAsSd zxu4G_^~^m0z{>p!zjX=RpM+<9as*D7eGs9B)%)S1x;iAsIULf-&vC{@dBf_>jNC&Y zD$GZ`sqS8X7%;~%^7wC9-L|^5*)E)qXdF9$^IOtVk#uTfXeW-YfDhsZ3d7jLsGn<$ zV)pRP@Q`cK<+DK)Q|%7YeK)lk4Itbl=BqA2^rDoer)y7#Bp$pL0m!2gTnPW3!=NM zsq8j3TWAcW75F|V;JFO)6)%K%Y16^ll(d7vf3E26+EluRBXwm?Ilo3}pfXEqxvFD$ z%59$B(kzF}L(|3IBc?9VmMT7r09v`+AMh+b zho6R2GKX;n+->nZpoH@Re$%VRU@2=#nFOn}^_WirClmW-QfE7iF|zBa&vets7~Pxs z;iNHRI~C@<73DaWWh)uhi7@ra;)~2Zk&@g~l6x|{AnUvY^u%QDj{}iosL>wC(O^ss zoM{wkdsZKr9nGui&S1rrrTm zd=-#KeCN*orXb-~j$0kj(JtMv%Zl3aSTW}{(3eXD#}NNa8NsY35uF0lQrBq>~*!3y$oC~P~J`?Zc zTY_zbX^b<*Z|$#@PZ=}!2xW30)A^98_y+jm>xBl2Y$?!|d=uD)t`01yehZ=InAH@^ zy^WBPt-kFLDX^A;ABPTxi6NANH>d2S>{ABMP7k@9o-!=i6nRF={j4E-7Qn9Yeb?e>88k z>WA|&wf_V^^>4-y9T7=se$^Ki|_AttEeYiprXv!mPhgS&L8T ztV5rOX03f$(@`zwD?+TNoF7JOUCS=0r+)`&wBdlR zx{kKAhxWzy$Xe^W^AE5otM0Yx}PBj$809$CV=6 zefV1R&yx8U_>`aXd_UtOZLsMwh2E1o3%vr5aH&Pa4~(zEcOQ)Cv8IY14^`;F6j~3g+iLX) z4@{3*JVlRw^W4VFVX)G6Y<%n-_afdoIPToaVR+9rP4{sM>AsC$=No9{J%UgtQeZH% zpD7+@3JiWoN<4k|QQ~*UIwC7vikE8vTi@3gz}NYww*=GqbdcqzgEWCzG%SclQT^_L z_ZWe=$4uhk5l=X^vh8r=7@YRTcsa^6k{E51QZIZ#$X(?oKg}_ z93ZfqAVjC3KH7~=HQUi`j2ZtPow>&NQ`B^iX{=|=J>PE|E#oG9VO$>Q5os5O)?4m7 zu!XYG@u@lbUZbQzDyH?0|6`8$T(_ zNifw$R z@f>R*ej_}i_!Mw>&l^|ZKaDW|@YWRpq!Oco@xA*o@IS8R6H#Gx`R8$eJc}m3g?dIT zS91SUB(~J@k=vr8?41-$fkhQ;!^IZs&=x8D_*CMA%0=?iQnm6`5z#Em7Gy*WtG=za zG{zq6*Ogxwqh9pGDdUwll-UBCr6FV3HjIXFa^E}GJHf^oYj~~>6zO6;eleX%Lr3OJ z3n!qdP*?{SXP~yD%iV}T;Y_w6a#(PSj5KMY!6b@zwcxbEAq?6H8}~M45OkXG19USU z-G5ex7>)?~f+aJQ=o(-*?gj9GS1=xtDBOX(u#{s5v?elW;g3ha7Y40If7;uaaH8LL zYcYyvDI1tZ(pY|B;6}!(RcefaV==p0hH)kIFAjw`Xi}`)_H3(?!QyWDFq}f;_6JXK?~`DDQz3o;ow@d?wvK6`KbCxh+GU}rSwCTdpQZ&dOb zgLoXJjo&=DwN5|l-`{*w_@=g>COYx$zxlziKg>H8{~O{T9qXWdM-Vj<=Pcl#`!Pww zF+8X}Ev6@}!SD^n({84_jX^K5q<1o}6nXaQHMzMvJU$aRI2A@gw6*jgS%NBhTqJjc-Z zXBA!sg(<2_@6KsM;aP<@1j~0(6#KPcSu-_Rd?6FRS3)Lp``=USF+#l&jD$O5nawk_ zni{fhM=sY86rm8$46DXd2E;S#XRtahl710EkJ2EXl2lDk;nce5Eqs}xWq2RzoVl2p z=t3o8zUhjRD!iC1qOoE_QwDRd;`{J8G!$5}kWZqFC$o67uz_jpr1Mj6X=P(Mcr`yw zbq!7Fi7HfwC0VMBWr<$C3ETLnocszE7=tIrZ!gxo+Zz07ME66`o--XL;ZX5q+p{r+ zU%pQ)4ZW&kL}3_=B$r2hMC@F_wrX0eil={Q+R=qpp@px}6017eQibt?X+wYa6NRcP zbSV@%#UC&&)(PUuDGo<-&N$aeTWn^=B!D?&=Gu9HDU!AgpMM)ss&KO@;Vk?b`=d``r8L3}2NFPLs#$o@^-HDS76l5B#I#g8Q7 zDSN^QVz`f*y+q@hqNa@E(fB6ZBYOh-Yb4m7fKu z>aS`1%20piVwOszaWNOO7}jK2B93lKY?e(vPK~A}r^di)otN z&!uHsOf#tK-^|5Sc}Wv}CFwkhZYzIw2FIOJ&JTL}lsY#x+ZJ z?PZpvXX&0vLM9|kXl8nnkYSlgl!P5+2U!FKL=agUZin^ehOn<;6In(@K|uwP9c14Z zkxg(#iGbh&h(3KPqJ;nVdrsYZtCxYq_nyE1d_L2+>YP(m=Tx0KwO3(5yXd$ds|8LQ zN%ZIOh>Tpu9c?@>J&T+gaNJ!3>JoN5=6tqefKCZ_gJXYPPMSzS4+?1o%IXH_Q6W@f zV2d+hyr3)wtgby%x&62DIgHlb0n%nQ?pS{Oi~Gx32RaRO7Gqp_IiSB5FTG&1G&-Oh*QTq4 z-G%`VEN-oOrS(uaayC)zTxlxuS@H_ifyEv7Sjy2=P>vM0sY_wX<9v1=Uf@!v(l@uJU}4JZ{SnK>k6kK6R`wncNszoKnM}BhxM{yixJSPT=`_WQSl7mv zlIK+gMk(EixX#?{g2n+o6cU+7X*qUcpW&O*r{Eltj;%_cN2Zyv)d%5UMEgMiu!P*^mB2iHQGkAO;pjP75KDe|$6FvT@#s*kUU`yeSqqf=L!vY#T` ztR`wW7(ra}%C?5g0W*@dEG)&-T()T`p60I&)#pRl&4{dg^CnIE%DM)OGhSG8T!m1< z8t@=mlKM5^_ld7r17--b=D0Uj0et#vR~?{^W^H}#rfa|x#km-5?2^@vGgv#tcnxyI z@Q`>Q$50bFT8OWagCUF@pQ0S}ubCVZ#VK;EcASA6*rE+N;+7ocCUPVi*(U zGdU)TQ{-6fI0HGbhaGx_6~wSSFzMQ0uP}XIR~`&uH#HeaV{GNb${2t1&+Me2VK+|N zM&qP;F;3P{NO#W3d==nP() zo|&zD`?Q0L=25e>_*gsDsG^~T|c<$ zk9Yl;_k6!fcej59KdYR*dAZL!y)`gsd1EPf|RkGeD>3kT^en6L?8fPDKAhuUy66_RGPs+1swN%Vw0TxEW<@D>tI2 zz{~TRg56_xM1K?exP$k>vmAJw$>gh_n?>oX*Nk9h$=J@wubbB-zs8uuR%}t0jb$dn)aTmRN?Msn38Oe7O1Tmn7gnuuUPbOkcVY)q z6gopAdK~6$)L~Y!<%%d?$FfDQbmh5^NahK#m32APBccbK{cc>CR14>U4_+cAr(sN9 z-ja5^j>K6Ine&hb--Qd&sOZ6WNJyJn#rGE04IJv0d$6uzMM(Hx!>7A7s3cbsxXQr+ zdZ#)c$??(a3dBb3AYn4qk?cs7&IZKsNZWxUX_r6%Y&8<|tz?xx5VRubk@(^nV5Z-S zGPxD$H|U{Eybh<`?V->^Dfd!*uy7SgB6VY%riD~qzbV+U>qQ6Zg>rokm>I0@j>>`i zxu0xSBc@PU8&FasrV8o@2$k~tLpM%R&ImmTe_H6qf%DMak@Ba*W3j5Ycx%4gj&ivT z`O=*WC?YMo4mn$!GgyfWEoP*wfydh3{-Dj96RIzY@ z>-LyI2^k-^WpIrJn%#`9MaQcf!&DArDx>%~nw{s88a)QAablJ_b~|+ow;70TeS>P0 z@V`!#k@|yq@l_7)N3iNoQ7eVxk*YF=h`W-bCm}bm326a+DZO=`SEk8$KA)0xPphuz zs2lLwK`Q8vhoGrw!V!=!0@9JJ0bNf}DjM=;u*HXU3=Av;0}FWn4t7ppDg>s+?7#?b z!haZnwdSRHd0V8fVa;246m~bg05Y??37`Gg@X2O`Jy5h*^bHH4CL4yP1$mH(<3b6p z_F6?`*c<*uJ#Q;xC=cC3wrT9*9|wD;wrN@KD1Cc1hS{2bO>Q}g`!cxC4xGg9K)Gq% z9WJ`-A0-#Lgj~rEg~7!15kpd$ghCg7uxovhIT8^YC^)_pjA z`o-P;oZU%`WL2{Em4hJM2!zAWK%&^H!c)*H-5^#UJ&vg99Kdd|jm}Z|D95F%C&&LQ zmd(7y;@C#VD9_v%@LBNuJ=Pgq7lJyI@~>u{F@2S9(k+?qUqk0A2Y25))sH|c*zisF-S);>aiRzP=@B*ixcyZ-knGJtxO`JZIf^z==%4$Q%14o~|0RJJ{4e7h_t+t}wh}AAscZsDdj~MsEEWsWVgzR+ zc8nDc)O~y8>vZsi_0D{C5kkW7Q>zk@8nq7Xh@Ep(Bj^pMTa&5r%3_cXZ=Av-&c#oT zOu{KO?nv%Pme+CGS1!z`w)Hx3)vsi#xF;(9g~*S}rl3P~qHN!SvbEUC=Ewm^)vw;z zri4R@KJHx1-Y#y$bPz%BzLx3!Bm zQP~VyjopCTp<&pZ&Xfv@?YLXOTM>nsTMMJwuwezwmY@-pQ3|wy)D^_F6%fPM;anLS zz;(g~(0c0Re=FM(m93Ffly}&$8_2XEkSQ%W*_Fv>@HjcelB^V;2*9j#JZ5YfN6B0B znX3W`?$u^8lAtliwax5{ebNou%xvt~<(l_#++4Qx2HJiufHl)Qw596GUiE)LAMazi zh~=87zMAaU`r4i<9mwV`U0Y=}h9>ISq3Zd)X6pIJ*_68;CF=R75LNL1i|*ozjj5h@ zihA<5P#snE6c5z%&k{s^N&hdF&s5w02B=B?nR)rGcZ&2CcPqs15A)^!7yA0Ym5)YW z!_2hwb*o5UnYFgQGH)Y&W!~m9^75I_Om#fwdcE%6^gq|#T^FnF@?1E#Nk4!xsh+MH z_48&Lb-dK1dX#9?34(eNp%T8=%yxZnCD>fiR_or5Gsy{Q-MgSxY^gBJoksJM&_?=| zl~ee1*i&JT&~C#9^}O%dv02v#^>+W*-uJ2waz3aCc^`zlI!A*EA>HGRDU&OZhR)MW zK-29Q8jf!q%ttEO1N>N3sFpES$Pqb1MkQIeg<02M_!5A}0* z*3X|I8pq>rq56W>Pw|XvhwwOr8s+AxhRhCTY{FPD;jp{Ll(l2Zj+Jq2;4T^>=MP?p^&%TGlX{uZjws4U_!vK&iU#+%Aw9w`cA!B+R7 zPdgq%=W(xc6jweuPOVvv0hQ1Al=lFn0-4EW6(~f766tpOd{Wb#f4MDGqqRf(jJeA= zMjgv~T5@0>?$5TI@rJr*$NMLjuB3Xw)uAr->wXD3+;Cyq31w2oO_g2{OVQ?J;M6`e zH>?x+q;@{nG7jG5VMb3mGaSyX>9qEot z3HNt}XDgor{t?=!j&(RL@(^dx;)D|;ez#nJR*#ZO)g!1lLv>_JPaCUB7G5|>9Zek3Z(uSib4>@O|3X+yGPFH4vxs`=>J;!7wC$i@D$m&M0aTtO-15l%`d09D! z@)+_F69+xqirX10_y=b=k}dd$$ahBU!6z)jxoQ`zqn^G2C^HMx37JFRkrcC3= z3kv#P!Ya(|r?kDI378l^to1*-_d%N`^Zu0cP&l zU~aSom>Fe*??6$HDlRh!Y1wq#-UEs{FxV8Y-gcvPGEFf%nsT^RQd zc;}?QZ@Nv*`O-w}9ngOt{8!(eEjI49W;Sk*L3RV`QBtY)6x8iv<1%XFJ_%6V=E6K2nubZ7ek!1M^C1@89Ot^Gw%3*m)Ha~ zj^lmHnUC*UFie-cV|f#XYXFr(`6nocIs=rBK?svOsg&16 z`(f_eD!5?9LeDhKKtAG*ZuDiiSYGHzRklOETjY_IbpN=0oeeB+U)?Onye#-<@TH8D zeMVYf{@MH_{B!V8>yoZ4Mt}*dL-lWX6d4WEP0b4C4ocO4l7ji3pl(K}gnw7) zPWpG!U0ks~%jy;ukH_CabqWi~c<@HmJrYDv<6!-6crE$0#gaAYsVL}Uu}`sB#SQ4V z6)sUhPY}8(R-tq=RTGyxSU%8m?1H(T*weHTs~{ixLAN%O?_MO^h!Xkk3sFh`e!3Ht zmyz%anD4lM8%1gzU4%5Sc#B2QTw8S=2#7nu*FFslQ;Qqy#!S4t4A@^vI{XbmB5rZP< z&5-vQvHi7uWqne7rT{%w))P@WO#Y#q@U!y{cMY)I9%rC7R)jSKHF(gpiJ!cG~W=xkQz$KXW2RpuX* zu7hKvyBQSaorq1w+5G3&4n3xmT)%JD4&8tOo8#4^q#e33M0Gg+P2zb2QQ!*d&|UOz z3EgN*Z?!$Qg&v*#x;^w4{5wK-N5=nN=qdPjhVG7(9FXzvvLM6q!*=KA>)NVg(gQK3r zb2gYqNK4ZD_#wb{bDOA~j!l3%zbDt+m=cnUKFT{OB7kw;PX~w_HzIVznATEYcF%|{ zkHz*KZd1~zDE2(iU3wM+PWSpwP>4qs8phl)kCEYeY_qjRcPA? zsx@f45Rme>58XOv;O|fm*wF$=?b*o!Nafkt0!ZE2#R5cCXIBdv)tpaQ(5T|<2B=-8 zT5(de^*Pz2_X5haKd%=JJB8HqU!K%b!rs9guB6Ar_7b>EaJDv*$E6*cE(RXCfFH+jLnLB?j`w-p|O?k=^)>W zZ9`k8GyVC!G)M-Q?sMcO=kK5YaxG9UPSJ9cAjLgR;mH`^N^|||Eru=Uzf+v)|GnZY zw2!jmWtFP(oK=z8_^N3?NJ$#8k&!ow(40iHfZK5!41T-DY!)PC(aXxWMW4Y0iQ2+= z?60teKZbsYI_9e9=~U4#U{mcJ-4<%h`ykHNlWaX7`hYwGI75IxUrPW zEr3|clPrK(%9AaCSjtl@fLO{?BYzm6ZXt?xT@uW}Bg3D^a-pL_W{m<3$C zgS$tuiH`*4)WO)R)cpSE1fH{%pS9q|cMIZpjJjBmUPVu_@+R;aoyUj_Gi4mYwj%jCBk`Dc z33q$sO3#DGLH8{TOEkL1Eynesy9Wz$x>9>jtdYKZaDN_jm-NG> znG!B-4f`T{BTs(HyuU{KS+6#$c~_wL9IqZFHSeo}`ZYpfKYVQ|J4xwT>R1S^Ukn+T zuU?_)yxc6E%O$dUl%z8rqVSfIxL;wd_P-Lk6aJUswuD8KstmBtbr8}=-s3F-O@C#x z^uH*P)uSZ+O9b^RN%OMMo$xQMOEVS9thVh%q-kuMgH>5fgRg3q^1Fzp5hW@AQ&8_C zRKkBRbf^4P;*LeV!1pbH*fuQ4AX23e+lI|rAwXr}_cMOU zu={A(bDC++4iZ&8N;GFjL7j_GDSwyHo%DAO-3fmuxEoW~wYC$G{!2(d?(w*veOBAU zy_3nFku>gepbPhL@KfAVeO?z~0;+rhW)v4R-wab#W1lRVL}fP+DSh2d?$LhE1CP-4 zF0KLo+kDCSMCEID+ge zW^D}ItcZb|_hfmjZF}lnGP1-RxLLCTH|yS>dff*;tRDEVOMp+Pyl}G?;KSMxJ;<}{ zJ$Oq;qCLXcJ081V#fZhXOAeFt~Da?C0E=L7=*Iy@&Kzjq0a|-L16Y+vm z*%7OZJL4U-;+~aH0kLy&P>G8pcnNA}-K_#(qI>6L_s+a$F%>)0iN#jZ7RX+Iyd~v+ zo~a*!A4xqta*)#_2W_J}B1A@ZMUHp!eUKkQvatmKW?dJdR{!5o$sNUts zCf%-d58i3!{fiAToC;vpJu`@5_}Hv_Zs@6I-3tOw8Mm8bkMvHEb@tHCS-H?jFDfI# zF^JKuT&<-DJjq=8G%}itV48zuL;(&-GI`Q8U3iF{`INGYF^ z?L2r+I-5_+t{pfW+05hMc3~cJ7~Ld=vP@OyBOmzEYe0wFiG>c3j9lyG;1yU2(2f9E z_liKEF}$H^GOJbdtW7`d`svWmB>ha*PrlIAsae{kpYEQno}RA4vVACLvC!4K>~K`w zuD(LoltS0k(T6c-+>qzr1<=a#1y_ha%=QJBil6INnqQNU!L6FXqpsk1>s5qnH#itU z#LGL$1UH5apRrM#>Tl%WasX`(&Jusb0dC0#{>C7y%G1EXTBUs<8h_oKzvl}{jA9>> zmD8vZVv<3iD)4r<2r=0pP!)LJT7<|O1g<50GR)adq%o`1k6MKnxMtyktgcR}3LnEN z>L{)WLox7zHjU-bp?&I=sl1(4j>C(r+Ph$D3C(NUG&HN@epJ&bLq)yhP2qUKpmS&aa-ZmmVjYgzvXpgMi7^p#;P;?J% zn05aa%2h(-1Dg4*`GFD+prQ^Bb-JC$;izI#$8K^Fu@uP$|AKWY6(_GmT&Xl zLQ4xrk60QwigH~b934LU18{Wv?1IA4E0>$Wk@wjpfTL6H<%6S3P29BnBsppd$YlQ? zO4F{!Y+AlguJ!|Js$2>R#}v7O&&f{{^ER}8cvrwqU>^(DSzbkcoVfc+`y+dKjqX)) z;ke!`FH(K$AMd}<^H!-C9{Y*?O8SSq;bsgkLt$zufdQ`f9$ZuAbXvat>|(qs7wgH1 zS;R&w3pZutW5$QTIGNU;AHfTk5)lD~3lGA{GYe2G9gH1*ctdV?_f&A(tNm9wkUMBa z+n*iT&(EHz&Bf%bWGQz1b*~Mx1oLmnv=? z;R?PVc})6$NB;QBB5=V!Ir12q_epbV1TOfeMIO^-m#NadFgd0hI8KiUbZgQX5dafo zkw*%_UmgMM_&De6p9GvTf~{cLD*C4m4oBe`lcV6m=hyg@4>hc^xOpUM%AAh8!P-FR`yo%m6~1>L{4_>B*dzs}UsIIYClbN@_+-DfqEnpT%o zYh6+^?W8o57{4_H;$HS7lvoDxcoZJzrsQ>kKBdWL%(mXa*rwRa&cC1GKLzE+i+14~ z?L43Parj?G{YZG+q`9Po1^9u&_>x!nF7-fhe93wMv<~!+U;R49IcB+00h*l zTG!_e+RxI!V%NNTB;aZxkHH-a%W9~)GVTQcAXm^^H185*ss|vv>~3X;tYLp^J{xRs zbzpVUusWG@nFZL;n$-=h`E1(#38KwZ7EMJ@9z0}DFg%R0nQ*7ji!64)(4KJ1?RDj4 zWH0m`84r-Wz^>xs$5wOBDeH|TMd_I}5C@Tkp|ucBVCS)>5OSK8pTS1ErkTHuyg#um z(hoAfRYS~0h`e^ZYf8Bd&mGw0Z9yp`lNLk#*!r=)kH`Avz#EGl7VAAVaDTOB-m@(R z{`;2Rmbh_GjrYt`H_uOF$8YQv>gCvTaAEMy`9brEo^7fYQ44*JnXvfl;UhiloDLAA z{V~U^IoA{%mzaz&Fw8K?CZLainQ=K6DeEVQiy-tGehKH&AllZnl!5NIm%NZ>%xto+ zbTZm@E81lUnAK=yc>!?|#Ax-*_F1TVuR_M;(HH@?;F+SZ3Kqt%=0>en9A-WM8s3KQ zf%vwk7W@Xe>5QSq;(g%Sx**jftOjHEA=@0QB49yRYD#x$DJntv5R5VwLT_1Hq5MAq z^U4;`R(;{)*=aX4g*b4Q(gBS2-DS?Dvzc3u0cz=m|DVb1zVhR zOSYlwbF_YVH>TW?Z*|`VxmrMMkY>&7Y6Y`-9R@~;!a#pO)irhZ<=E7J2JZuZx@F{o z7V}o{^(|AM2;8r?^u8C=P?N_ zXFfphYxEZlYb-5y8iA)ki}ik@#v}|$ts-}KrL%6*3)+!wjfX@_J_c>yGEmCp09T~JhdkASZsD|>ZUK%dQ;bi4nwAf2tP4d8r<2{I;p_jy>g>k0ftm4j3r{Y6% zut3bW=P_#)d!2S%!~Tw89q%ay9RPh{lOkpw9Pep%w8y>K0Ewo{12<#5Js$@KI7BoJ zln`c=P-X&$muO%ElQynB8^YE_gwhg4p!EQfwL597B6x|Uyf*?M;cpfJoY>X0v$F3E zFV8_Zvz35cV-|}C1|07h6=4veED=Ug-*J9(bZvZ<28TAiI-*r*$^8;cBM7gfQdoh0y)AlZG{Q4PqR;MZh5f*(0!lWddb*Yf+L- z9R*v!4GEMnvIYDofHKzBv9g8v2r*no)iJY$8D&IV6tekP7?N}C$HvSdxs0-{I5r@V zTj*`dxd2Au&ad&UU*j98@y&xTx^dr*aRD$oM7Po&BapN7q->^6<_s&0I29^5hO3-G zr=G*3RNc7pirp|1!AwM{v)>CF;j-rg9m9Cp9Qd^Zg-E;}@9qVQqsXO<(Y%y_IkTL5 z6;Sd(o9XB3kle(y4v5oo6ZPD^rkS1d?sEviF@T&Dco zhqOZF8J?Q)f7%KuSB?h&S_`>+yixY4$UuEAO|Rmq90D6%*o4zz3g~hQ=u9~nkbV?m z7BDs58sacIJd|xhR^!cQJzfSR=Z3pL+B*6atPkdvTPtrPtjGx(UI>H_?*kf_j>Xtl zNv05kmn(XgV1c@ng=5N%5oDOZ)MP*mK(g&*Y^d>sb9Mt6X5!E0?H z1G4#6?kmbJW%2_bFYft?APAbX!x1QsWJrP!Z!`*SAdTqEBvY z|IshO_Ir20f?*|cbcpsaJ&w~$znvXRP9G__=R!Sfy&Fw}M9~@V=O7XjhGRM&wq2^_ zf%|p3X>j2F1Bup!{9Q$0qz&+rm2McS8!*%SLOE=`Te#0zKq|A;BeK?Ouh*eu${S?k zSy}y)i7ZLPUF64(R6^-x$(9lGL}j*gqv#Edh22cWWtBGL{Q?PLGVcgvO?e|5Sg8Os z8^$MF+4_SgDD=FWi7Hh&l2L7F11m>KRHp?>5vgTt}p47<7 z`#D)z{;Xm?)Tu1NkDN7fU=yE$P2|2a9Dc{&*IHVy3;Hl`w&eb*ZjO(+zWm!z@0P4& zp942|?qe<*8TWYWi0DF_y9&7)z?br#63ZTj@W0f;Go}4eeQmR)EXqA57{XpEeV=5E zU7O#Lk0m&{&Th|sI39ti)6w(6U^+A2j^dmV^cGm|!$+$TQn>bSCaFi4$CAMi+ECE2 z>ywq}7G%9Q5u45|!}A6`(vrjT7Cr3T7%QjS=}u=j@=P8VQlHU{WF0qw#8dmgs!YAs;+)Qa^0wX)cKMKGw|232Q!1xs1EGES6R z&`MRbroAf-gVP3s(^^`DjQC}ouaZidrRN|cEfoCkQVK4Li|-%wNneAwmbKyIO1a?v zM4a?kh>H;?v-0%)i#X|8(D!Hhq~}22JM>AHfxh?YldcAR|3x3`zNGL+`Xqbx+#m@4 zLJ(KU@*(JN1aX}|0{xXBF84>EzZ1kAH4*5)3F7*gB({n^F8zz|J^E-jOkwI}Z)h-B zm|DHTjbwUOEB$B<)YSTH5kX9~@5p!53?@6wU{Y&%5L-^`{l+y=Q}MC-8r1wrc!blQ z{+eVWlU{Q^1x33?YO>xv^;T@*x-F*JxFp_oRWKHLE#CUaVBGA;TE*|fI(_t;I*#}e zJK$pvp*lGp-55gbjedgF|Gp-~*%dFSW+V=)89fcvOem~smi6`lSsAN%>e41fbOimh z7r=w}Nf4->faX*5P)$~&;{8~pnT(p{cyvRWeG%M}=D*R(7P?ZS*wtfb@+nl$I11=+ zP~yV?T4i8=;XjP&OOU`_&5?E ztt1Rwq0g!$+JnI)dQBzS4^*9*`bt8msU(>qf|yD&!E6*-G;TUVni5;KzLH36+B#x$ zLr_Whq_JH|%#<<=E;?iw)u{@gu5_a}hWkIH&8x)Qyr6#E8*hCg7^^$61ECRbMD^nh z_O+ge4zaJbIkiRlT0289_O*V#tgf#$4I~+l=!~}oe#5@jPVk8Spue&s-KMX#2Z=&O z0dgxMsU~pmPGqPg0PI4f>1%C6x9Mx`K)2~@F>x7=f_^u+qnZW4)`Q282x0m0K<2O zljvt`1>5o_@;vTkQ2ynQnmLX?(>7s#@$9fg3n z=>AC|y#b^za7>XqgAjab;FuOT)(RZc14n=0m=QSE4jeNB$E?7yPT&{_9J2$*x`Cq< zIMxdsgMnixaFhebaNwBZCQo8+_s?}_s$-su`=AL~-`znS^W9IWW5hi{9UHjg>e$e| zQ5_q(FVeA`7buxN=;6?XKR};S!w2iUu-uz2Q<*X|%8v0|2e;UxM_XD5HNrEw97brL z!gMJz^%X(qMxR*O)9${F6wR;eh0<$aGmhIye#0;BwE`BeQ8Q3HB@6Cq&gimsW zCN=maG5IAigz|+Lk**6r`7W97di=U!Bt#<;ViAcTK|E-Phxm|ycnrG-VsFzHmN124j;$Kc5?*d38)I>U_Ntz>p<#wf=D;?Im)dC;k-1JK zfgwigP%&Le!coCmDbA1J?kNsN;+b5!G6dBhenlRBN$cI)FvfcS?iR6G2kE}$`6fnW zxV((M0okN7i(>)a$D>1^NkPurUJywh$^A#WLME8#d@~AUHnS>O-XK{K_Mx2)DyV}c zP7bLQYF_HDKw)sLak}i7Ihugya%|c*$}`)8laL<&v^dJ;guCa-ywr*b$y@I-2$vZJ z>pft;(l^wvw9@@-Mv!nnCs9$jN(Gtt92N|$XZ}=263NPtv`%c_oEYcw|Hv|}%^~5+ zVqgXs(5Kg_G@6nXJ<&^;TJH+}4iujIbdWUKw&(To9$aG&nIP{8d8_a$^6qWS4DF0nTEIv-?hJOzdF?!8`!C|VSG8azGJ#L&c*=l! zJBkpZ>*4@li~v0H$*3yrq*@uT!r140Ld+9GB+~k@>?Mq2%dGGxkY*zy623%+*(l+s z@;-JWGM{-qU|W1yM_?96RB1)#YNA$UFae>&h*ML*gahM-#(97>s~bJBp~YG^mIX{n zkjhd77&HR;bl2gRS@;v_{@>wqIimVtK6!U7W<=CxNX9qjK_!c5X4mFHD&W$_th2InZ7*fRsg|R6k zo^TdVRn8?_3Y?RXZ*gRw0J*|KPFAEL>Kz#ih|aT!dJT~h_Zs59k+y*Nd=j%fcLX#1 z)1*hXN|Xl@4YDRaMAj)HtHxcqfKiKG9EPMt+75XntbejBvg55}K4B%-(K+&pm2vVR zE92x_R>sNatc>#_7T>kVX~(@Way}F}UyGb=r-roO-!F8IM$qjd=aG@~%*gqzz!`Tc z7eXX|A820OeF9*AdvU%^=gxGNJ`GFce?pufbNt=Jxi6i&(dC!IxqZ~c6V zpMsBA*u{~&3(6&4LPLk%td_}_p@06iq&9$W60jWsNq+}^QvQzophLEkd~rfdzK*{u zzC1P>TxnB6j|$!8w8RIy<-|~RVt-+I$uq8r5-hdjAH?A9JCM}?J}-cd(?Y<(0{Hb- z1fY827LC6`$?;0Y%&$}~V$K~R1pk zfdW|PfPf4Ca|9&ZGeHtN+07sE_dPs{akr07UsgwA) zyAEPVl+d_3zAJ!DB0yCDJ4Jvc0@yzUeBM7A5O;|HSW@w&#{f|JB4nK%cTW!C{;>cj zT-LqLxMaoH?Z~5y$&AI{hNpT7LUlPA%@ypu$)J9sdB^q}%?8Q1?8v^I*;PHiMN=1I zbZcvl%b)I5NYg6c&mi5-ta~e<`J9TmpMqYrK>Guf=K&&|u)(URQ@IRZ|2RT187->{ zX(^*cM_}nA?*2;zlT14vL~$`;@&Z$$w1`>h5gHeBmMCpTh%a=sWTrL=-H8IFsk1{b z)zGwcCiF5u!A8^m3HI*q0z}P-n*hSn?vo);b&aSascX&M-Un zq|O@PoB&wLnbCgasg;RJPd0T79f|6lu6&sR4n~0TUY!|ZL<0B{ z!n?Aa88IRGtg4LIkBr)nY)M2B`;l?Qei)G0j}+__?MEJyz}%AyGx8O9=by&o6rn*0 zjE6+kU_2I6D{G9$=7cmD520%?9s*rT6^_fhpNW!$rtwI)*HWjMgJl>CdQ7D_L9ma7 z*si!sPeO$~6WF12yvL^_;r=cpLnQQ=NX`=MDjQ3W!JZ8)`ZMPU(V`74KIkzi5oc?e zg3%R{zVrhn{bLfYc%t+VuppX#d!egiXtR7f7D%J?%b{P>pA>huVfvFKefN*J{aSVf zNs9Rn=nWQF^X;lPw+uq5gR>`a#_;f-{P)4lxzb>~j=Od83Eb+gW+LrWaBeg=$n(VU z*i6v=P4HUw#Y9}HM$S3%!o>|Cx}z5 zGj=8K#6ydiG0+en5HEMr4oY8m@bnjnN7PpOZY_(?`w#>Z{&b

ic$ zDssGZ72LDaMGKZNuwDz6R9Gg9=Q%E=WX{oSTFM1S;`tyRIZ%8DJSM|(-a3@~qbfI; zV>hxmG7RRVDKH(TwTxdHm4xYkmD3qHDr1!^$JqanG_+i|PO7emi7k&ApQw9IZCi0< z7IxG{`rc!FqV27Tbcvmf8a?9ma5f2|TNM&<<|?fao6ln#{k{HU+GLXW;RFvoL%DZ8@SI36S$Tm*4&4MO%2=2Hn> zXJ$Yir;ei36=%Zvu7K6aP&uqvWYB-)zfRWq5n57CnO@8I^ItXt9`RnU0n%Gg55rYnbb z#p7@?C(6)@Hw|e{#vVivxI<$*c4Gt(<)czupt%sK-ZEqpeQIb`8!(MZ1q@X|$_+s2 zSIC5EN{ZOfner8N0f;Shpersl#lVc3IHD%$+G1xDvgiP0L0XGl=8d|*>%Wi(aqm1z z>y$GXz*oLOwUBwt4S|=re(!wZqltW+)nW+q_WS{u_4MhlovlMHnauFn*xG|SU&lGe z507&(iekxX$H}&4J@EOS$Z>(l(V8}#{ehEx@uh@fw$CxMeZOM+HBmT8eWGxfI=&Qf zaZdR%^Bp(e%lX|Q?%j;9nYyTQ;sP-7x}1f+g;j~uHEC_mq3Im>Z_q9U}kF@ zTDb;55SO+g^da|l#2p;9jAP{@aW30*Y_m4orw95{3MqXK_HXbmWy%PEcc}vrRt6%( zd)&9-F73(qWshz#9gDq>JghFkEGC}%_8-KCVPp@v_aC6!{=(;2bF-YWn9g+}({A2@?5QF4oUoGc^802mZNJ0#9_XZ>(2Fb}fefMap zTY#9oa_fL1-HQQ`={!TcS3^vMROjG`V(HsdBdIkyb9e+MjvvqKc~)<#W> zP|R5ywMm3xzS^j*BGleQU5h+2BJUTWK2?WW8lk8;c7&HjDAb%9)Yl@^r-_ochM2w8 zCCKPDKHb)zF@m$6;Pj5hj7~r9;lRiMAPbM}!_TRWs9Z<3zk{Ey)X+z96VLT@Vk>TW z9!@h1&BB({e0scsyJd32lhsqY8VSog-qBbU5&jr~Zy?!Sc)l#PsxTMx9JO#I|5kjsmu?oQuQZ&qeYPgP|}tt;s?Nc74!V%OR1Mo`=e1<<#r|j?5x&ts}Do z#+>j>YP{$c&I!w#8fnrM4cvpqgT{#uA~AAR>T96Xl}&h(ym})u0cT0wI=!yk1O&i! zIvs%P^f>^(9VskzIRMw`aR9E<;Q(BxzX7;TcLQ*p-U`@c0hP6!hY(a?nE|u0)K|e$ zha)V=>(nzysZKSer4U^8W@aJ}w+v0oV_UjdTv5)}@yad0%?<|777lv!LKDSY7$_#U zZ_g=owGXY0v3Xm*eY|ojVj6A_d>U^%6uupU=Qc$5(?BinsaH$LM7_j06_#q%Mbk9k z`1hk>C{}MH?;K5Ml~to$9@_q7zN30O(Eh!k43zFZxK}w;m@6nv$B(ADG81<~-r29^9SCEG#1=BYINyy|;FzK4%lQ{W(gJ$Rg|>vpndJ6_ z$NA$fbk}O9hR6PZXcFEbq_5nHwEAa`bWds-P)M zmoCL5Pr^F^nDW|j@5}hAFPxz->&0)CJCQUZ;=G)H5q{u4o9-`25XpgX9-Qx8UjTR+ z>cekBW~Vt0%qA*_L+4kv%T%-}!Pv^K=mrvOHkkuSR$^~p*^5tcUkF%LYt5O?gvXh6 zSvaI;IXzO(;Nd*Etd%CbQ{Y5X@g5?`>rEhT-+7Q5+iY@rLMfk_@jEO!?p69M8V{`R z*qvkLxx8Dv&)u7$#QbMuSqz8r65cV09ZNVkH^OW!odKTFnZ`?e<(_!;h-v5pod!^R zDn@Y(I*44qFo(6{_Y!9afF-LY;U<>PLz7 z1MaXU*ae%BdXtfAqeYy~NC}sB$w(zCe;h$sv~-&a%cRxYvde-#!!Jlmdc zG-^Go`wRq~8JGV*Asv zXAlPtNb2_KTI;Qp3*I9*n`F9=e(A1=IYih00Xf7{5Uta}z2mt2Tv zb8;*P$G_%3xiT?(CE6UNo2#!kV%wU1Ca%A?zfEp%%(-7jB*8&or_d`<3{sumz}f3e z37mb-w7@yVnI1T&I{i80))6dfjkFC;>|;B|5)HKYqdlD1 zIT*sofrY85KK*MZ$3$_89IG8?AjcT@s(aU2ay;Hdj_)+c!4O7{!zc&+YbM7;af%$P z9Ve!mZ$;9weOVj;+!g@D0l@79U_bMX_*R~veDK^v&-dx!cOH*-SYENZh? zikVjFs+-3yE{U-0bsECUBPVCQQnSkTza0ShvMo6P7J}=ufsLmn0s~n8`O=7D98UU z-R=u$_%X=?&YkMo7-W<%0C3_nE=I2zV94fFaqK8p!gvATmRN$|O9ODBgh2)1mnk`f zt|9-rg3(UbfZtOva<&E>*T|8}3JxMaSILp(HoQ=J2BOMV;G%FbxJlfjd{{uJU_#l! z5g_BQU}9Cg6dBX?n0&Lnn04bjXYm*oT4HUi>m>~BFoE7(+J!@txz@1JW2RT0Masqb z=*%*2Jq{-YUZ^|=1jEUYX0lUR$nY7wS-UM9gYI9D**bh1JO&$>g(`z(G{ruDVTk3L zNGgUtQ>-2QB$Czdq6~2KL0>?`a8lMyrh=vqqm~ZxoG3w$Bc^e#o6I5Trbrso%48hF z@N{Qf&Yvj2sr(Qe*Sw=GJTEu`RYdF3@V?md%1ULb)bj{nD%1;fu5vJ#t(lLx;UarJ z1_Y>1H3WaCCGgm9C~xLeQH7oMc(#HW0tYif_$`+wWc)`+9DCw3Wt`ZMYX-Upom6ED z2s?Hf>$ZpR$>GsB(*GjUAH}Gw+mx8>3;#AIBJ2ItA0t+uAyZfZ#iJ!9OkiLIg*^fs zdT^?Dz*{+3U{dxH)7^*(8+KG1E`v5W6^xA?3|}Y8^(M@x%DXxRe=(mED^|9I7$!bm zE9+El;Fk4>pD67+nRcLwr1d_6YkG@L<(3jT5Ixbe`K4H46J2|Z$6kpQ-wE7Tv=nb^ z$sx;R9q>4OCqbX8N5dF!4e4RbxjEIJFkc>`bCq)p=ihz`0N?#N0D0kf#MpUxHMlyg zf=hcaBWXe%%TQYaQrRj5SAK?A;-zz#pXm|?aQfaLW{v>>562J!P>Ay0uw7e=X0T^hZjUE=t9OCAau}r(U9$&F0!UPhu0@B-lv0e? za9_Mn@@CMzsa`G}zs0eOsko);%I@*Rq?T0$+&~c5O_ApbtHSFH7>rKv>h@n;n;VI; zljvR5GSpIRG(xyW^s~xMR!panb6Xpx#h@90mYilxi5)vHda(>2p%PKH$W{-P|Q#!!$ZbwS3c*z`}wsd({os3N{J++sY z|2UZO6-BN5n&dOx&q6oT9+Bq~my!IG^)EA=v#;us|RHQp%NnDUP9oyZJ@NFKTQFJd0)E3kjK3@Nm39~!B# zttRfG&&ZKgVq>qvw}`wlcPTuJEJu5ADX&sEes-;Gqya2}K36`}P#jlBv2954F`aWM zk5!9kNl^NiAx7*s8Y*P6<6X%#?k+z8fh$vi)tz3L4|^@1uA+9KWyTNAov&avyK^D4 zEv}w@+YEg7MtmO*6~t?Z>&lB^Kf)VdxElt)-Wzy>)PD;<>7^$_r3(J(_>HHN6;vMF zX3YdNAGSe!{4@D*1meS;`lMRA9g_}>-(xcw^j1^nNF{}=H87yQF^#YXVIEB=qf{|fwHi~q;* zKgx^PEip3Q>0rR01z|=XYKAJkhPvvnL;O|E@csZ%XEa64CW^Q6HYT_(Q9Cz9m5AD? zDQcLgsZCMq5ryT%CTW$4!bPb~P=iE0*%UQI)D6v0nk93HKYwEUT;eMe@EZ|-{>1o=fgf@wNPLvY-6lYe z5ji>masiQ3CqOO)(%cuv3WghgF2Xw_f&F_L+A$@vBgeBsYDBI2alC&Zly@6zL>nvt z?#C3s%>)csfExkOJ9H*n(3?m$%>vv`z*-jI4g#iIfbS8|ZvpNkV1@;_i-5H)z}*DQ zv;g-IFv|kmOTao7;2{FKEWpDAbX$N&2Eb!g~X~U4? z8BjH%WXSQXpjIK&6#qH6tDj~%QU8#qUO=|Oe$RaG61v!qXISk$izFWcf@Pk9Z7%a%`G56ss^Of&|m+$c`$Fhe2s=ST{GUpWMmdsqF z#L}a&^!O4>k4Dn%OC0fpdFM_NOaxEeO>U`)u(19KAz=ygkdDMSG4*y4H3mA4Bs?+o zbWj&%S+RtPO-J~%s4-@eTqr321)G0#qA}h@XR2#nI(9wsVjA_XoQ$70tPfxeRxd#h ziVAlMu<`WQ-^4F!1BEYF(s5qiJ6|8Q7)r@AeeI6>Cn!y@;+gT7hftwq=z^oJkd<+0 z)3OJ|%PfVrZy5$dz_NVc#fm-?kj^tM*~(s3`3(vN2Tb(* zNx7EP877c(Fv|l*@t?#04E%o<{~O`|1pE_@IvN`~4vHehh_eW#-!h4K`rKEc-2pVN z&ws^ryG8&_=(}6-tUO8_K$9ix-9QZaD*9<$Sq*>wtwaHjKmB2c4I=`eZ(VaVOZvBlduFg4LidM%OYqJ zmf*Uu$=J8RGym2K?n|3~i5LpEEZ<&t1Nrv3ACd1AcPsf$b$5{OG;^kP}K0onK&_FSR z%at%0^e!M~%?j%mQ+@jF2@%#w9b->)CS#&F7o)x|S?xH3wKu#OfVT2q^`B ze$T^u4RSDqk>d!;LI0Y`F;Sc%$7;tJ$T3soSY^raW)nHyZ;*o_j2sopLI0Y`F;Sc% z$7;tJ$T3Ugh^3?Qc&mvVEyUO86+;*~j-(v)ubCVZ#VK;EcASA6*uMt7id%C0LF5SV z1AZHh@sF@0i+cBSYK zC@RbAqUcb9850srR)V!BB*uF{=3>r6!8o{b?7k{BQXcNbMo z;XoeO#`YkyxaiJru;@M>lFn2wh`270@zt zy*hne?pyHg#R`pyin}6o@%=0;)-nf?1@jfcO5>dvDv=PJh&&v?>5 zS7J~fE=z&WDpoAb%Bm0R-q*m-@c)#bWaY1@tPxWfdXFeCX`8Y1I96N#21<*)^tiGo z!*Y#h{v#9cdOdiZLtZbLE_wGgnMD+Rj`HrdSFC?9~hQg6%TUtP6?yFlz*4y!*tl)@HSx_JTsr?;X9YS?=XYBS6{(9u6_q5 z>Ku>1cxH;zno;Ep%7|A;7E6CL^GXT1TNhI_`RY$J4{mIh2fq-`>QRyhza*--VlE}U zNhIZOp*nevNGcvk`chM2QsoTTDg8~jQMtYVxz_)m@`EXnh$AS^+Kxv?(l%FAo-Ybt zsw$X8`FUf084mwW4mIokq|A2BYm+k&U>Aqhf_n-JGck#^#mw=``xe0!PIDXu^-Bko@y z#l_!3^-xtz@r>i1MPC9LZ^mC{d$azDwm0W5x4o_YN$@u2BqkoHw=7?*ndYn5!9aWU zt!DB+DG}DAME)NTRa~(y1^BiIz~4gkcPfB*pl?q}4C+IMJY#uN{?qU^W03sa0RA@k zpYmtySI8t(a5KjvH))&E$bLoarpIg8O^++PwmG|PBHp=SkbP3VXMzW;DgV!SVEqlb(E7{7(>5nsf62=S z)nBY5WMi|y6aP?8_NM%IY_H@0!}g~A zcWrOR|0leS8q+^tb|Y1%L&Vm!_ee7lGiX8@Q6geiP>&*1($CRdT(Jd3dJK@X$KOKr zc#32^5UEvy2#Px1W_we9yX{3wW_#2AB-@+uC&O!rls5g3ts+C*TS9L+*oSg#9Q!e( zJhhK>XR|)i0n)>%M~ScphNzVPIdR{G7?R%kSOxb_2>~#h2Zx^itbb7GNqXmz^z$JA z{RM2SLg6!_4#z(^^dvo>q=#65GXN;XvS{BAv!KfeZ6Wk<3wk18lfqsceDjPJ%k=(LC*|h za4qOrA+%~imjdb^Y5~q6nPk}U78KY2n+!X_g03JmO{TmM3hnf5&$7@{@Rx^fxk1i9 zG4vPxrEptn8FabCF8&Vo=YK~Bp)QdUYNDz~eU^gtPqtL3BR!m+!Nt^}cz?xGOUN0C zRwH!1Y$;nqZPiVQ{x=btcJ!tHhcfr?`yUc?6B->ol8d1@O^%c|HWbFjXmdWNZSfbH z8Q9asQrDxz=A1!PaRsIy;{L@5>v;SvR8Q1?j(E@(pD8h@FIDLogdU%5fv}MuD;+ui zEWnx+lHv7N_%0x?%aqs4oALS$iMAdkyk1RIaYZkA9T#5tTd00Tc@+eY2&=a||nev^F5^Y3@@?Ahw zaYcd3cNxN_J^mJ|U!d|C50vjhi9t}~{RjA$Sl$_zKqvf5EeN#pB6uww3c47Q=ePXl zbtv_GO`dBN2{dXMR%>!KHKOo=b>JfK{}JlUDy{E#HOun1kO62{>QIv9e;~??amJYM zcQeOZhXx#vu5@)X?aYcNoTGW08O%*0W>)5TD|^GHQr5S*fBK{3&(Z$(J#|cQOSJz- z;jbPg{Qb$|Zz1`+SNKa-{*Jk#wxM-#6zmbu7_I6Kw>_C-%PH@6Ap*g^AoMKd{Ek)s|Za#V>buE5ep+&>Rt z9gn|->SxrhiU+E_L}E~1%0C*uCJegqL~+G0u=YPtNM2DiTQ*Wxm9UOg(`GFqzqoIR zXpCgK6xAn;Jb>y{mXd}m?D_#AwaxEU2d-YV z?vXVR1PfUdgf^aS?_$dFn9A{;W^%kBsn?@Kjvobb3{j5jLpkV5SO2AQh)3l3vBaeQ zP>!E`m>fn&xbJ*Z^7bH2H zFRw`u^`Y1II=oHt+3?3Xh0Vy{-;}@aHRJF15@S6|_q* zoQMgQC+*edV4avwIWI^l|UFqr^Wkx)qz4{$OeVDzP z&(2?ewuEjPlrK2Dx&?SG<~owYNoV?gxCbejatsCaGZmW-c}O!Qr0GbNQ%?WnI%3NH zbTsV!W;tK3StKHntL5|#3A z3Eg&a2roAiW%79~=JQuIpV8N&D_y-^^I1G$KHplGZO!|7T;s-lhOzCyYe&*+$7cKT zq20#i-n280)Bh-rlhC=+Qgm?3J5}$?(efqyd>c|u`IGrc`knYV;kBJuiL$QkOjqtf z7+l0Dt9r7y8ePQc-i2ja?2;!=&oom{lQGU=Zx5bQ%F+?t>ToZw=japFCk;ov%1R$U zZuh0QMr%q9SJ=T_!`1yCz|~9yui=XKB>o&c?Z7f!hT#>@r@w@wpH9kuk)Ndh3w{#* zFZuE4QPz*@wtN=-fI~N!H`9Qoj!B3{F$xj@h1nV96j`@X<5FU3T77MA3y?;Ui7DkLNxP&8PeK-LM*=tl@mdVPr8u6uIo z6Me5-8K-}_2XU-R2{)o3-vojWKglg;h4qiZLr}pxW;wlqu?tVLqa)4(0eoYoZD{j+ zYrbt8xcH{g$7yfz&7_Yr+v1x=AE#}_w+?)zOcn*nnQj3M5R@f| z)7%1@O;C;?&RYv;-4Mh{YXOx2I;hl2GEP|wY`qA^`D%d;GANFoIX-8a1vC_bIL$1e zatPwQx`2iWf~9hNPG<{fP6*;$wt(gm)Ilmvy$fhw7#C;91++dvA~@ z_yGRMoB{l9xA-Q&J8{RR#E{Qb-(zcswe4g+*FSmBuAGfqMI08fiEC?y`|l6H{k18s zSbd+7V rNU`P~;6}@<&n+htAI8rEo0smu34>6=-aRM6Od)1D!z|uH!pQq4M&N0+ z@&=U4o5e11)MKL94Mt3lC#N{idx0e0zSe*FNQ^n%&)=vPm?PJci1nfyR}}PW2Or zr}AUA`v#Hp)0#VCRas7`Fpk_S;AO_vUlI|tO?WgIuTdt zZ7V&;pBp7*g!D-jF+_p=$u*!E1a(;;yG){PUJuE-EwZFHouIxN&{_n|ssU|6&_E4n z0YK8z@`q~Rqal2~8u%FCg+j5KL^1n=7Rs>7Zlu3~1y6b(Wvc7cfEE)py9Ts~pml3N zn-Wy20c}Q5xdya3LBlnmEeM)pfwKNQ%a`(~MgB$>DCup8Foo(g>e$9Lh=qc<8CA{C z)*wDYMCBb^_cB{**(9l8=(%X`cMghuW02r{>PRsvc7h5Q`UONa)avd}y^~AZ4TY|9 z6s?3(9y=`l^coQRDSmGah-TNHS_7i3^w+8Zu`l9JsR7aU_|pWW9d`d$tV@$Te#)Ks zNvoWbA$|2W*r3wyAg*C`DYL^n6umSwOz8UWkzgO%R#}=6L+n|3S6#&FiQ|LL=q!Y3 z2;$ABU{?(6Fmk>t-tM}yVXna`Uv)TYtL_CSpueUXXE z2e~9VO<$zW^hKIXU!=tJMfyu$q`LXMF}dJTE4!(E<>~HosAOP3E2Gt(YP}SnP zs6!K*+eE{I81kJZY=(4@6PAT(N^e(^C=CwZ^OLJs%yTL@W9#6VY215{`6x%O|1u+e zj@@wpea4?~yFtq|C}r$RnT>v!X=5FX$9mf5Z{05Lsq-?iZ{QN3oj9*>1}ZS;Q{G06 zteaPO3n0uZoWOa7KfsM=qXgv9~J>vH?t@kcd*GNfS0f2+cqe;D$Q^l$#qOBBBxmM1=?u zQIXz3L@6TDYv=+?kuC!EhT->qKj+*sv$JvWz{tN2{xx@S^uL|VX{zwo^H4LINDPIaH7Pq9 z{>Ut+8h;&+5i=$~#-=7r2~3#&mjsj1vj~=U_e9A%y*wqzLAtv&cxm^-a1@D$JR_@I zckwdHP_&c`^rH5;EYVUQd@q(k*#MEjYCn}NY$^~N-2QRx-kZQfiY(;b8{%+jpnt`q zH>Xthud4L9Bo*m$q@paK+JgwtXRB_nqw&=3dbD5N{zv=O?S!;n-JVGMh22q20?&OF z%p<*+811DGFqD}4SP1b&2|EK7(uaple>FVpE~??-u&Ejzb|}^GurpEcRWfGOGO>Y? zWj~)A4k62(T9_zM#+Acee3eC3fc3O3n=H*hn?7vlwp?0QwxDRsFaHPHa{ry-1CSy) zG_n=^cfmd#OU6A|S>GyU7*KJhb=Igw;mpdqqUcn;l%TMVCrc_rkbs}HjGbN+hnS#Jn)LQo>aD_Ft%&MjIvdY?M%F}mQ6@S z1G#R3D199>tXpt}s{CR4y)Ao6Qv0ps*}1_k;{8 zf-*{&$lNE>y|{e1oHuRj=-)is;m0|%E!UdcnENy8gi=y_E;kAAJP=EC5NO~b{a#-> z+u_OlHOQY_B^k_IB~AMqvuPou0%nRBL?Ib>R>bolo)7TWC7vIhcwSAaGn1;bC7esf z3;R;?NFkB=Bw<*fUR*vbOi-2MGL6`R>mW4s)&NanEC9#@m*94b&wF(ZIalUf# z+)Gh_l-QjRyK~cGqv@-k=AC-KW^uN2#C}Z|DruMAv5^&$Tw8bl^lVqQTW{J-Xzfuh z*|bT!vWn83?NR$P-JsZ=?Iw!B`|4Lw?!Nepm!QTngFT{nrxY(${~N+hnCfti)!`b$ zote6n!d;q8cyq_5u6JbjW>fy$$r;5z*w)#UKlgYx<P;bi(UzP9Pb3{6%d zW%&s6HC0&`EG~D~hK#HxrO`f1B`c%3kr^{4CjH}bvQ(xz!#2zt%bR7h=+x3l_chMD zc3^LfCf4PGT4ig_3sY#lh9|X6aORvFtXO6z$j~CKAMjHn3^f?Q;NrEvDxH-dm-i8s z-q(q!>D;1~i6Tt?rs01Wy>T2P37*}8G6H$i>2%ol!nh+kTE2~=Wj6}B0T8Ia#9J16 zzq(=N7cew|p0+n-j8jR2@g_d9I#Yr0ysEnk_agoEJGV$!pZo@T)U{NpIY`20u#Iscewu;J<=<3xt2C2L46haq<5?;C_1r ztAXQ<5`H1fDBTm`_XYwS4!9ql@0L!2d!G?)#S*j??tQ5IoJ9Q@(JH56F5ZM!`7oZW zyac=VE@rD~mtV~Ge$DC9;$u82Z@Ldca-$jyXY6NUT?5XHi^QSgr$@WLnrN3d{>Dhj!Vkc*>`s|opW z6mlyd3jGaH@GSxOdVrDQw*hea(!%)txlAdUn!t$@=-a#z{<$`*e+vb6=|&5sVq|e{ zd65jkk)s?a>KB3b8jUBb%^kRNItpAuxZZ z)RpZ>6DlXw+A72`9gJC(0N9No=pE!T}$J3bth z$a{}iSz*xT(C*%kTIJr3G*WJ(UcY1nDVI^`gM>=C zi$Wg?&`8;fdfmYYQvRaQdkK{?7=_+XsFcGf^gcqREUsdGje6ZluOrY9r$>0*O|PYO zz3!sdvbtXP&}(^JuV2yYNO+AXkawd%rlgt2DaWr@7f3u)t5@Q_AB0ky{y0#V%v!BU zDSs-uDu0Pc`8&9d2g{$!k~c7U6kpY@GRPEcUG(UqN8cA>(Q z!$7U)^SyCjK30`i-aYUD-&e-0)X-I486B8rR(=KQo-sabp~B~X;gWr$wr_;JDd~;} z9CK8xRgP=p=&rwun_dc@O{{Z2K(O`M1X=(jo*#VhSrg+(@OBt^dr9-gy7K^d*^m9s z%1fy@yEb>qt8t#&PK3QM#;U2-n523HYPs0qp`z`dpopou-#4l^bHI<_4I-I`GwHIW zTL3xet$Z3d-(r7{{IR00w9_5HGEo) zeCZZsKd_8fM=Fge*Z`UD$%#R2mt&LKF6Sk+T@FfWJC7#LLE8n4x&I=@m|*Ps5Eya$ zGT;&R5jgfL>TO42Tr3!S{!@(eM`COej6pj77kK;`GCh*l|8tD}M@BOG zL!vWAirhcZIR`WC7Gq=X3uq9+MaN1PD%lBWf!N;QQC|7!${idXh^aRQw}?xVseOY@ z&)NQ*nvjII6ZS!2a5dF*sUfl4(Hu`qAFuR%R2H*74zpp|HzqI3#E)A(#rWXF9ru^_ zR-gkWMjhV9LiW?VW{f6a)N95gy>`W*#XE!dAR^a{@%j!gLa1xT+JSpKXUa_qb83cl3LdKS_*NC16+lq=z#UZ11sEaUl78AZI0y1#!3-u4G? znjbkjAYXr$EUQj}iG?g2Rv8y~*IC)mPw*`^w&U!(d; z%7^2e#%F8f|}WPEbzkE4pl ze#iTLddwJ)_Wl6yne&G&(z2~WBP1KQ^0rl@d?O{t{S+Fqg=m|gByNA~^zl$-_>8JO z2~4PQ)uENs(8F^cWqN;*={1H|9CTvgOIkR0DvJ0b@AvdeO2T9@f?dlIYynv8B0lio z0tP)!r^jS^OreJ!p=B|c8~j#;KjGISlM$dWom!YF3>K+^(pp%W3LLnWLM@bdj7`jB zhdmEl3e);dN|Yx!x1(Q3$QEyjyHHh^nIyp5n+O2a_fX~_uL5*w6L;&x4Gkk=cGJAp zEd2t=p~0WQ`G5$6nNY37V9>A6*iig0fq@h^8YME+lZuJcLt;W1X}s^O02zZJGD9IU z0}-_Z0upF+lt@rNDkijyMxPv@HzLy)k;M~{ph#2#L*r=lu>gV*SfB_6ZKCnM?aWxB z#0e-o1ON|QZa@tm6pK}nV}Gwfhes6 z0ur=35_v$I&_*h5+_4iAd+%aGS6jSqLy&}w2BeGyq>MzQjKthwBoj)EBoc@W!p$cj zaBV%BIs^lWK;gTk4u$*M(NF{A`%IN$WZX6o|g~{065vH0Ac}Pfe#Ri*=&NLF<7WCvEhth$H7Re~}0aiAL z@p@@L1Gy5zl?X1w+qgfJ8BUs|9$~oF*G>s>x>nZ>9C(*O2odK zwb!^lyavrcqaZg+GvEoncz+aw0Qs5FBLgQMO!8*Y$o1qZgRpqB6>v)$m8}TbTC5b< z`$%Y=Lu-jpjA0W7r-uCf7xAhQbZIUK@lB3|@g3klko|8=u^v~fCp=-+<+q$DO+j04 zy5uy{758`JeaU%%An&p7WHiAk0Bg{u`W`L7|MHi0%#-#)BAWC>Aq# z^o6Wq3`V1}6Fv?3rv7%*{uHe8E~vdTZ2CoD7RXt@i47!I?*dzYdudmOO0*`>0>f6? z4IivrrYgI`!ZKlso?A?xFy^dDIlSrmX@rXAWH??*L%~HjuA{EygGZBV1mbpXOHNfu zoNkS)q{qIry$8tUW?@^gvA;xVgYwrmJmA&w3OGG8f zCPG;z87E!f%VHV}Aj=_RmL*cW8l(7Ax*eKiFfZ$^Eme$-X;jFtAmcN#h}7^X{*`s$J3k{~XsVBY=={Z%W;GQ}&= zhawGQb5DhBL;(omn#0Q#1*I)Lzp>3@wbqHcFRYlKw3?;;U~9tS;1EoyjKi^M!+4py zv=D%SVWq+emkfIBvso2&{6+AL<_X%D64)_zGn)4|Vmx1H8lNzxEmhlSrqN;?d$P(a zbm03Vavz@N{wz%U06G9Xkmf_CR6~zGx^s)zOe!qn*k2LfBe-wTQ^GoT=GeU;PW#4KrhhZd z^TF_Mu*x0D(-=tnC3Pg}B61C2uYr3X(2Q)f?x51;q`K@146tc3&)ymIm(;KlFqeh-&Rod!myx^7g$6T^v}QU8r?4|iYFI&7$&LF}NeFX8 z(X$=Or1PcGn7h5ommRb(37*C{ee+fy%6S8H{9nqEKlozZ<`{E1^X?m1mdHSD$se(d z0VO7XqLJ|aOvCj4N+VZUho;N>8}02LbdX^&jiK`k8?25P`oK4b5Mi_72aW(e9Zr z6l)3CeAdnm60gxCygqBhNmGSnyUKNG%f^#p(Yinq2qcvAq4I#W@#6Fq! zRlWFb?7-~DROKRWfPi5`zL+T7angHfrA5em(Xlg^hjc3Mq@l*hbUP8NXrO*c>b zWMwCPZ;G_(%C(yo`vQr+fSM0)u`z`^+2;h$dOp5^iM8M_|!0!pzA_91ifKmkT z7XtbsfIkq>9|8QCfU*EwCYCp#>`YE?y0TBDeTK4cM*B=KXB0LkYELO__o1F>BHxV-nvT0hCjJ8GfKEVU1JGzW2xWRr3!ao+n`B#>m?&m#cIzq=v;$;4kp0FslpL;#YV_eKDcr}sqwlCk##5KGy+ zpfNOKrR)4Q&Xm2x6>Q^0)mxH`q2Cg7F(UKmuAXi9W2w>JVjT_V0%Y&X zG2`^*a72z$M2)0bnV$We~SaZ(*Q21dxi7+Q|il!NXMC&y?wMUFA!^yN5K zQ{)&kPG64WL=IdI59;~Jb>x^eLJr2za;%{o zbbmNGM#Cv`j2Wjd2i`kDdo>u5gct!zpr%8K*DD7etP&BXWGDjvOBuAqQhBkW zjD}O>7&A`pX{^I2ia-4hBs(T;W!tW;Y#z0hEsVCZl4>in2d>xJi8dd;LKD3emh!#;8^ zKCJ@0J!*glRe*O!4e-Npm_BT@Fnq5sMe$CB0b}z~0{lQ>z!)$RK*lSku?Tr|0?J!u z`a~Hc?Jj3mB#FWi??Y2KMymCaG19~0^=ZV4d5^#zNj=N{GS674ana$RC|Jejr^77V^3YaFmVg`+9!z*FTEjAtuf!N>kOK44q& zdpXP#$@fN;-)_D9o*|i6>m}(uQ@mD5e$NW*N=Nr#{cIMxKL*`3r2C|zYuBUOC~~tw5~2*BaQ7x6Oeg?qvfzav-qde8hNh9D~?6B+(u^l3p7eb@E(z-XA=Fkvw0i zcs{Hi&%c+7R_i4^|3SPyhgfm%kDI82toJ98&P9sOA@%6|PLS1l37vPu>rkQdUSLmn z?{0!7W&09oZmZg~z3R1TFG<5y>m@W_7O%Y#EAIWKrcH~sFK>a)$)vMH$@b}bvOOqF z*Ln$^hs0|Sk?rBYp70)_J-_y0o(J3$zLv{xt}=5LH1BK2I#nzmMbPGWc_*tmZe#qK zS^Eeh?Zw~?{aC4_Em_%0MHB~=;V11i2T&Y<)?%*T+jaDwiP_O7n*}=ff_%h|b zOUb<)M0DV=U5iOcto0JPj1#irNO)%8NO-u`i=3cG-1`7AM&l=L9EtSdFJ`kfi@OISwKsI{ zA9oK@mJ(K+uq!=jlm30qS!h**$gAJoOt*eo$+CgA`X?oSTz)rN1BwT_xpyHafWd!%g7Gu zji86?wFw2>N3q;mFDWBM@p=TY@NDDc(2??{gpTxbZ))huc$?9YU;Am+$wv{@a{0|w zu2%1dhyw?EdnJx?CA?`77wX66QD?#{MV*$n1)ce|dyv8gp}=pha)Y8Ej&;qcsRjf0b#oTGgM0_3F>_Qb}sPByEPpYY}3_ycYs{+5Z8JGv-isP=liWrS$0m+;mgULC?)BkVYVYPodg zy(T!(;)yFKt~y-!Jbaxz9H)55)#IUA2-SKC4=v)A7aqp@JkXi*vYH3F^5Uw?L(E{G zb{ctjNafK{^>|226IJUaJY>Y{XvB(p4X{Va_%3R6{}Di5Bm~p&5b_iuuSOwH z08+wmKjZx-3La)aO!330&k*u@6!L3A-iSh;B?K!6VXO^=ycmT%4M={m-qm?6>hm~! z6f5ZGLKKe?1v>c<@&X}P;s_zn1yQjy5`v#+KrD5{&1B`TOzfX9u~CGmGYyB{cy}4? z0$0JS%i6t6@!1FvUwH&CW?Jsc8QfsL2GJX^(fb=XJofppzd}3veAr*59Xe8Ie~tEk zfi~=~)847zZ_v(7Sis+;J+JI<(awEZz<*2o2g?37?c7BJ{CBi-9}4z&Xy-l}?C;Xv zpzQC_{=SO)d)m3RhA@AiJw?0hty%7$3E&p05BMVi+*b1eeYO*zp3#5puJJS|4I8l75shLGYbAM+MASpBkkN#1D+3P=Vlu02HHXI z?<#JB_9+T((mqMqE!qppo}}G?9XC>8Z3K!mLEMV7+zhNu05uSV5&=*ntT-ZSxlM#w z3QIHXNr}=z{{;NU6UGfZ*t4`Jl)aVqw6eF+&OJSZX{Vjrd46(s5Wp>JACMz}Thu-v zPXM=YfJU-2wi;(7G+bS3TDy)c!49`b!Z!u!mvbV z(`V+Po2;<-kj3TBgiIBvrAA?v^^ZI*^k5ByFSlUv>k)8*O{;9>?8l?pEV=w!HzBHX4@w zNZIf8BVp|)B_JCE9EwXMd1E`9sGv$(_RaVtY|ysKMVv-ukWMqvE2*aht)Ti@_Ae2R z?Tc#9|7cF>h&95A_Qo=fM+1JAv^U(Xs%~${|J;Q^3-2p%yjfjFKOS8dblmeq22TZl zrWGeJ61+u?j)i{E6EubWl!Xp90-Fk$QUH>y_SlSpQ-GzAJZAu_R%)c^3|)H~? z{cNJulHwBaNV>+kjdZV# zSqsH6p|AP7OuzDUs%#P-3P2iRCqgP!L1S#$w@9w2Jh|35Y0GhvC+uUdLf(8+@`O8Y zbAJG5!OoKWh4kC=1q*#MI({Ud=+wV7^(`A?t#qPHxQzN-o~=;B2lK-%b@u!p~)Sk zxlh7bO?Dru*TP$|azdyTW1vf@=wnhJ`uyqYAP0M#z+)mjq{|`XQU)yoq6PtMDFg5n z24qtiK&BF>KaOA%8Tb?e6l^F1@MNN3<4TCIH6aMdP7Z=s(9c@-y{Z!PzR9f+@Y|5L zTF8r3+V0Fmx)zC)8(f%l16TKqU9{^u_?^BK8YIMzt{l1!EGI`orxvA3Sk=#1y>2Uf zaEF10C64ZC)B3vg*)V5tJ&%LsBT;2Nf+xjJ5U(yvPPeE7V$qcZG)Qe|e=un>z9V_Z zU9|Eis%6?+=|#I3dC-WOC2#DxU+YA1ce{{GDYsj`J@{5IlCkUum`XVAJrBs_u9!AI zM$_@{a(VRT9WffXBc=mwLvvmbNSwg6t@g$uyx_#*x|ko==62fr1kDXWbVdUW#sUpS z;ypA*;%z%d;%z&L1R|e=n+$KS%^kG4qc(SG_hQwQFQ zX2=i02rN*9+FOU(N1LC~=Dyn8k7k$@435|g4N?ruq+nnsg#=!QTT@4#26eOi@qPeqi9URaOff8jDI!mA=5QXk2P?C#64;LuOhfseF?kk{wE@YrylbPr+ z%wsu&Z%CFatwvHfvZwR7=XxH(qJATM5VEIp{XD(?ZTX$B(w`dDq>cy(h`V58fuS~M9ftbYGaOg z?OWh&uA(>*z`^D!Vy}jfLN$a`qL4l(b}SQgz|8fT$Iur05x*r28!Q|^S0LpAALQv% zA~krDG7yvR?72$Rm=vnn{YuoB2t0eD5;Z0Q&u&qo#zf$a<8Z44iU))M9u7g(jxCPC zy!FJR$f;y@(ReXs)cZ&wU2`-7s&ZnAF1mFnC$W`-5CUcW%kZ@1JIl=XDVu`MhQuAw zc;A(HvsJvWN<4m5Jlaf`-$=ZeaR`Qz{ON-Paqk?4E23-~Yqta@?_0`^V9NdN8uxeT zuAGf}CQx*%rJ&6 z058|4%B?Y|p9@jL6^4J-nfN_pMa)@BX;mjh+im@m*@yww|Gp3a*4NzKyfFrLR-E?#+2XV)ZWx&HL3#zlne7k8+tdv2|EerQl+rRIvE1l(3EVDR$aM6jcsw4uAwW1Rp zHN;UeZNTMEVsXAiS!aMr0Epi?GXfxG=X*YY=T5$9JISAI6wQlY{Fr6z9 z%x5SLW-Nc4g%Fb9;D^>TfO8<}yo%uc3Fq%Hz#l!%R37OI#A70i3rpWYxuM@#@Uzc> zqhZedNEO^YITsF`H~u<2I%ZFFW+8Y=DzuPIxnF}vX&nOfPje2a=c(dK=+bu)F6Ev^ zBIm){)V~KV1fCCDTiiJjk^RvmiVj;KEg7_wyQjd31c&V_^q3{djp?&{Y7kC@0KWCW zH}GTJi-~Q_eI~f21W~>Rk9k{QwxVt@?H%|*BO9rtSbgXB;qhTr->~ zA;%lTpHX(MVe=02_atwM2GoMdwfqLNt8xJ-RKAZ-Q!K9>7s3JUWYejOts8U1Z#)m| zy*pY5Z`jK!^bc(aRDGldU&5+xE@l4!G1AGLAhv%9M{nc6FQ7>dS2!@vKN}V0Ia$w5 zYkNzZq z$db?G8}f~@u6zaahfGtt@?#jR%J#*u#oNX9C zInPG@jQW>T`L^VoB0Uq%X@0D7dp4zt>}6yT(KljEG@Gd9%ie}W<-y&qZJ$LDGux0` zR~kfZoR)3KuXCONr_uzfS3Vj#*X26xPeWYiCEusqm2K$6-#Yn-p7_p%66Qiei!rn! zrOPQN7N?3(QT@TeZCDRt-On~wwg9OMeb>5dBN+<9y}g89&S7m!OTW>uUHUptC-k^nwKSxU|;QGHI=YO6fe>^*J+qMy0W=U;w8XWeb}085PI6q-IpP z@;XJ8E5fJ`sKco5RfkdK6=hUG+EVB+A8nX}!w@P(->peew(KdNQE{wGX-1W+Q!}bu z5k`GL9Y%exI*cl>D5DC}mcpXVqm6T(XBYB!Fo}UQ2VJsfH|K6Zp|^ZrG%mSquSZeH zCNP+i3J_LNtZEvSX(-50nLSDsYtA-hoAc{Dw$|Au6E9cOCKb(NgPv`Age|w+cFs0; zuFIFMMEU#?VIJG{Y%@fX>U|Da!TUl$*R`&M#iESIh8_!YO?k0Fu{^txY?FO8Jm**< zKvm120@&BU8_UCUUJCL^J5|$_-w7A!AL|X6)L=}eW+zu5t>l_MbG%wNkUJq&=+Z>07c{bT?jCa0?xOfskbsHbY0t`n&dHmmo zhW1JPH^R;z;Vt-o0>qF8D$(_5Ylk`)sg=c;1=+XvBEnKaNNefkVf&0#p4X` z2Vz}-BJcfBtf%6dk@q999`qKh7lqazi}eD??p-X_nV9-}mxxuOT}o>q<6TFy$Ge_J z-utOCZdS(6l<{+A+@cJ=IERq8DdTo!{6ZPORK}gk_?0s5QpVlNxK|nXDdT=+JV0ah zcky-BLUu_#??D2KNRS1~yobcj5qB;p1MdoUy))j!1b2Cl(8zm_(ohHDHYmtrG`hXV zX%z3d3MufU@_1Sq&nV;9G(=$zR$`u|!{t{UAMaAy1J3_H%)0b%)bURq+TSVLh~{}hE_&H1nuifg_Hqxc5;mNnPX zcKhSwj5R-jZHi(1;}dJ1fUSGYQ~2iAJdbbR%Vy--;*EfCqlc>L-Tm;vd|_)C0}W;c z`yo&i1cw5t`)5Po;|Ht<(W_^*2%)4+5Dp=7<1kR}M3gONVL@R*J%)`y8iB_9*1FccW4J?6q zvveRMK-(%Jln#d7V+q2-Cjo#<>f=y1R+_IzAYa>!?)3?H z#njc^o5(>Cd4X(Oizi)8Z%f8g?o-hIdt1Sc1@yd)Rc$L!y(RVdFjh?bV&#Ld$c=Di zXey+s^vAe6Xb?>e+EIgOY7i5f5oy|Uk^H6{ePYeT>p$_l{TP))QeW0PVDd+-e>soE zR~7E^L^EI79=yfM=%6I2a5yJ!+Gx0Ngi$dxFv-Lxv9RaT>k@ zQy6Mt7>W&xv@R+n!#Wr@2ejC&4dlSO`1T&98ZT{P3Cx*1GejaVHe z5*fIeB{ZHE+GAE&Es-heCzYbePVCv$lTf8wlpA(pIUBQp%)lb&r_~g(0vl3P60lsk zS6H& z!Rn7&z6<+BC@+-*C&>B7R&+3?%Q|F#9=B_}cJwva{}O1xn7XH)tLuevmF0E7E5_2f z3lU-c00#uD(k{roSQ#432#rb}$&Rek@dFv+k(lH<*SKQ_mdoU)3;rBsx^KroNDVQ^ z^*Ki&YIXL7wZm-p=!lZ#5Tm?#tn@h~>Oiw;#wr_7jU-r~^OF&5fRBXnI=J{T>zDKz zbDxD1RZR+Hz3N@3E|0A7?Vi*x=q)6J?H)sDIiX=_gb1ZHuJw}AFg^5IHD6@oH$Nl_ySy2qXjsY?E0bmF8&+x!le8}(?O{dRsYiRJ z5UBMM+OtBhI4Sso#SZ;9Fm^Aw{K8bDS1#xAc6T=%N89ep3e* zj2{Q<0prmpF;)_2QfPlnfN76ypULbyu@qPBI3LcW;$C3wyKDbUC4 z_fbGH!`n>r7ag6;5SXjGVSFy}J|WPq(jDj@)yl5I_562$1uNwZ$^5MO{(`LI{HPv| zH3IEYN@Tc9d>#R!Dy4*_UJK_qrdrUnVy1gfU#jS9!A=FgrCm|*)R~LHXZm7NvfJ=p zdVJKtOh0vgb#Ej6Sz{Z_#c=jEVLSo&<&uA_C`C-2jf#zp@(gaY%#5K~V_hk|88@u) z=J51sv0N;7X7NO= zj5DUE62ziiTh{I^KeHU1qLyiMjZ) z+%o$eWMwFGhmoCT6h1F9$BjQj<||l++?$|02uCHQJvg%$&xzt4yN1F78jUg4Vg3w3 zESGY~dvBdtJSxHP>C&BGE8RVWr~GgxES~NelGK}lZ8?tRS`+rK5MbcpY&^F$9=4G< zc)=3EH=L(Q>ZRYp_=B+ao0h~%4(w~LnuYkKXHZ6|O;Xcx zC2__L@1do1e@j>v`i$-ZX-xG~SRqd8Lr9jiZho4W#yv*YOKLjL^=llcHLgUOP&YP_ zL=Gh@fPFVm=4K(;>22Qwmwhijc$_z0x(}9VFz<(1b+)*23L0U&PVyK|X{ceysv<@p zy*qO4H$SvtFFbDh7EWlW5O{K(cB$Gq?-Uet6bSZ+(Gg4m@qIm34aU6fRTuuGsjfXr zKb3c`L~T+K)dR>Km_FwY0kfo+jz{uB6W}TtEI$Cg)jsiNNQXw2jbou38^>tXnfo#~ zb)_q@lJ#fKWM zn3TrWamqx6UIXrMGO4{kQ#6WtHdXpSTEpIH&XyOk31tCR7}`rWVsS=NP&ItRxDV9o zoPuD{kwu@*@H~f{!uqn(Lo6s7-T`>&VFE1Gn12Nsj`5$2R#$b?mvzARWm7M24(iZs z?dN_UjH?pK+6lFzQV+Pba-;%B0%sH7vL6At@~paEkHX9SIVx8%#$Ncy@A@#S_5|N2SM#m1h4pamZ^^fE^NdwnO0{x$(eW`P zgL2r9i#2TIxx6(970&yj4oov$&N3r7?9T!`@2n89|IQ}#K>{y5wxtc}R+&@e7~Z{2Nh?qK8MJv5kMuE2$a3+1$kI?LPFYMR~+C=0Eo z<=qHV_eWQwKT6pTg7k>~2q!f}aP~*mDsmg`lXA-}`){aELB}+%1iA6D)4-)hZwy_R zX?$kfX)lfA<}=n-o6WDEi}T|6{Y6)Y9I8XSy8g5W^+%KD&`{M=%$&~f@BN#`Nx*Y8 z+jjK8(lr^?e(Bl(FdNd{AC&z#<3q5X|S_M zpQnJpW8qENPs7@Paf!6zoP)8iIR<06Yru~x%&KGA7Hh1!CfDzJ*1m^2gJhT9=NX{2 za`vxbL~pW4kB#Hv@i|Fg!&6V|*v+`?!sot=M8IyVI2J~8k1Mp>^2!xFZy3`$C-uVK^xA?CRP!nYQ}U%b_MO4iSxlS+S$+9>|!jt zCtP;zQrtBw($q`WB_&-6KO%W_L|f`~G&zE&uCR~&Zq+_^w=uAz>NicibUAU~aT&;u zyonhzXu;2~w59#n{mQgWDdOfdOf7pTox!4b*1sE-H`@D^u364U9|N9iS?-o$v$#RY z@3J>&)OHqXtp9U~$;KvZRi)wz)F2vR@q7-R@a2Njr~$>30a3~sDP=z|C<#xC-O4SS zwS5ww1&V&kTDUZtwjj(UoF9Ovx#HA~YE3U@j=IDw{P87zfv*&5UJz13#>Wh6C{9;=s zyLvAmiLkqxE9H%qmq4OP{Op%uwSR*T4mx}So$@QRvMPQCF-3`a=~aNro1=yhlsdBX z8r-5Nx%4`Hny}yI?hP;d4LE@UQ;^KS^*E=2cJ<)koJQJy3vj%1nZtqq-_n{C4sZ_t zZMdcZ`a4E^X}Gi1+L%M9p;gp|+TKxi(H5InA>YGOI#EsIo5s`|eS6CI`JH|m#EsLD z1~=48gFV6P!0h&o)&VFNYISfb!s3@&PoaZ_4T zSSS?ILM}J6AuXAqNu|ozDVUGJ*mEGIX|))$w^OwKVTNp(mG>Z+w=W3l-4E`FM0PE> zpApm%W-#|e;>LEs`x8H1BTNd@czw_QJATK&os(_|8z8Z^5P*T1x-<0X?>@%!RRRZcw)xqfam5APpGRfCXXLC_HT~d ztysi z9^ExXTIb_vdKO2+xd6p<<(P4@pQ0Q;7dZ}y$noboavV594#v=Oe3^34{o&*o4X4O4 zW}Lnpw}>2zBXazujvNP#kb^O_9N4bu@#y|=a*T#kfYng{o&*o4X4O4W}I9T=3N~Aw4O8;SZ!sVYb%pYTS+-+8W+*w@~d{jn^2Xo ztMqyHE?Dr*XhmvafMylo3!?^TQ2|aEHNZq8MiOpS04TYSX+C7mga*mNn(UhSrDGAU zZ*}0y*@sd`z}_aFC>>A#9iS6Lx*uphQ4qDiiwbJohCHt9UgDlg<*K>ZRftdIS{uJH z@6mqWu6BSQt8s6raX%iofkW*m3jYDL5jDsS!(t2J{iFKH$P9dtLM8$oUPXo^#K|Lw&pz$mR9`_MMM~mCv&r{u|5+LQi1SBc< zMftu!gl7|>jZbjO8}CN6%}g5=;AZ~dIScZ*OyfSKibv*@8)lRn=7}3-mmB7c%k)*A-57*`qG&ck{pBN3-eHaV7-i*ZSK8(cc zK8(a`RT2rvm%>dV%e1+irV}8eH;~a6$ix$YkJN#W(&o|Hw6(cHo5yI=(Po9F z0ucrx5eWod*zWQ^%F*brD|exN$vm>1e=e^fiAxIi0LHt#Q&VXi=f~VSY2OPF-U!D7 z@^R4tZ{H7qT+U2kE$Jy;-p3geF$mz#ISJF;$^!_r=JO!$JQO&;KxgMAzV8Wi9uhcR zIxi2LtLXeo;PmKRaH$`6HJx7zoF~%xc;H+^=cLR0z+a^Eh`@Ogo!17=FVXpa;5?bm z9WM9dewofQ0_Q1o{yK1eh0e{c@B^Pp=h1=lt90HJIKM`xd8Hrt>vZlKI8USV+ktZ} zoi7H?)9LKH%8&aEI#&kHGw8fEaGptL>S{mmS#<6dIKN5fd4cn6I$sN%-=cHoHGbT0 z(|JPR{0^OW2F`QnY`)eHd@h|sfpZ<57Y5Gn!l~-UIKx&&#VB$ke(lRBTx)&|?}+o_ zYUd?^^Hm1EwAy)D;1pDs!&$ltjZEnpesBQBDqYPs2j$-~fWY`A+Pum`*tDPq4YZ*# zuMMpeRhKmKM)kO23VeCnW5VA$4sUrwlNBs@Y7eG)`ciCL;;(a&9RJT%urUe^_DPq) zagzu8Y`m(>IFoz_BPs{#)|8Zqd(P{@B+c`*c|MuOIWlx>^)MJ2Hf+C1QN*91urqw8(ieTQ(C~~bv0xCPaUBtSIM(@t? zo2d^bz=iMa zz{_1oXWsp7LTfgq`14yIXyA8O_UtpUaNa-J#O=jJ+4#^oT(3)R9m^&fa4KUPf9Mchgg^Y5l65p#Lwk+-(@^+Pk7J6~xKA88g9)$rKl08F> z$^2nWX>N=3e-ycQHXg(nuyQl-tPoDuW2dyo%4b=jpaTbY&yusoBg^}d>G_4sj`YkI z{e0)s)3&@yfndGFo1h=bt9;(d~Z?96zwb4G)62a2!S6Ar>8I~N|bkEwW4ofaG{ zF*eTeV8O_xkh*t-i!wr9_LbZ(VjbEZMDB%Le0^xjALCoiH{<6l%HX}s9+uSx%S@uU zuI4}>nHoB0(U2O0qHw;5Y)&nT4_Oz;Ss6fXSN&eX*abN615TEQ3=n@zA-2w0#D_S$ zlBSi`I7vg$Huz=!<(QQkN}{YA+b#+)-^MXSLiCQ_54`lndw1jy*c-tka13d6%Hs#$ zjU|Pkwdewno1;QAhbAHFB%hmKif)2)L5^vpF*WqJSSUqF z2oI|2Z1?!Vw_~e0K8l~MX)6&{b5w*BUAi83FZR+1n))XYL7E7JmlQ-nl0;JX1%*u| z@!4DyKzax=1tLa2-7it;9+&YQ?|@)xdRQzk#Tw;t&(JzMw02-+m^ zf$RJ8$;SSanaU|@iQYwnf9ONIzh1b6cD^Ci)Zc_rN||bXnTAS$U~mvy#fpm=n7sgb58z60$fV#DwY)l8i!a{&JkX()9v2^Nj~7j|?f* zcae;lGb2Gb^uapYeQ4)UV?M>|-h>=mGe5n2e^mvSqd`O|!-Kf=T)s$E(xJA5!c`bQ zdj*whO|r5{Q;JbGdG^`MS95fpO`fyp0$(+jusQgQ7{UydaiwsnCkstlC0v*Z6>5zi zd@I+M?jMgsPT6$nB6=ZRan%Y1fAFpTkL21iq?a*Qa~z+|kRFHs*$nC7`CMr8LLVMC zjKOD|=YovPwKep&Lm8NrZ8#?zUzAM@U4XldL%i=NsGqRqNY6FuM>w#m-HfZg)QUIxJhFkw07~%h24i7v=2_8Q0N&H4-zDB@T)Ch zLWdaoR@9<2I-G?UM1*}VP%?%tHRPwwQg+Nt#__0EMkQmWgww!C7nJ}^D~g;&0#gMV zHnbtRk{5n&X8#Z6MYghE|G$yLu@yb#TYSX;?kFEem)9Z)1_|-aDkQOi-fNs3zlbF?%ih5k)@|F4_F?ce9%W3^yOSj zewcjE9w*Zl@!iU)Y35(_`s@9Ij8b^2u;%{s~Lr0W`x z%71_CA9eOGuB3m}z8GWZ{fkq%e?j+$+rJnM=K_pJR*o6xTY67|*n&NYtLSj~ReKT* zYQx}WG&td&1o!?dV`ubDk4oE$)_E=4FJw%-gjIaS^PkR~Iaf}O24kdN4ZaCTDX=e|d99nAU zgtW4#Gha$3b(126PB0-IY6%xMEhrpJlrAIJ3Ff&Ovy#deiWYAN*v1(*Yq*OCb^VJc zOrNYJDujoz5--UmXP$4uF^Rc#b=Wj z&bd<^-cjebA2vE)H@ei_l!S2_%06ynpbzuYxh2*s?8_pRO7ToD-V6z4>a~9CO5;n7b7iOefRlq|)b9{)saEL+tI1llmY{*x>W1199Uo;OjB)rS}bv z!@fbUtW~MSC|Md4jlf)1la)4?3vG>11?*3L)FPXur%Y<4O}jS8(o?E1XRF3k;Um*` zhi&>$|L0PLU8g5gh5e@Y_v45cs}3)3RA)f>5WO3M6#|@FvHF~MQOIxxkik?D2m?TF zt1ooo_7TGGc%!j`Tj&koJiLU3gM}dmtj1prbX=9cMw{1a^Ez!_PxIPfb)LboI?vEp zoo8UK&NDE#03((N{7Cj_c(ITyNv+T zrLlHP~{epnXzkuB%9W-^&fWuH$US9OQ&~zEZ>R2x=u);O?Tuj;m>>J{i ztX09LLB`%5XAcALlLQ|L2JIEI^4O#}b-H60=DYR;t(yC?JKtz$<(l9_q1;90gQ3C9X#Tu}J z6M$6#NL3!ZG2LIm3Vv7fcJPrEJjb5#2vQ!1ip$nk1xm0p_73XZEdWNjmXy{S1|%5F7F8TK+ieoC1ca-Zu0-j6AlJxrzDPHL z3KO4&OKnWCwEJoBu9FSI#lYXZJQWtnDV`;D&$Ib@8+L>6gZSqfWF!9hGx5)%8W(O_ zk+#h+`6E1y|2$wt{AUQnkLC2sa6gGWh{;ZT=`#4D!ZurTZFp$T&%*A%+Y7m3_OBqi zC}pYOA|>`wVjdI0FM5%Hx5C@|6a9K!8n}n|$12yK>4KhFptW+|U+Kzwe}U0#bwNKk z-4e0#3XWFWcOW?<-1q?miA%)x`yhx)#*!2{|D^yt1Qti?mRr;Ao=Ed%%TB=g{MV5P zmG5I*(v;45EL7>3w>u5&#O_72!($eu|bkS2{Y&+EXwug<&PEhA|x$bm6vf?S^QA>=uYm`zVN=v*$>7&L5 zLo*%CE%{4%2%cag#2;xysu(;eMfZ;PIuyy`;~j@V?UawQX_0V zvDFR|AgrN)HvvBI0*>-x5VbUD!E{QpeZV`1z!WKok%B0dST&ATv~ffM$2iBDh7ztU z{}0(grBvr8pEY_7Uq9TkalPO0^~1%Ck0Mu}L7vYkz>-7j(~bk1Y>0Hf)SA#Y_z1I` zkwQ4sJO{^@TWC$9zZwsV^lAgm+SSAfdw*NhuXDD{UlA|MM80jfo5!A)1&N$ZP-mR# z$C9~iF?up^lZS)CnJ0E&jKVQwTZ%npN^`^&tjTKRmrbADL9L@41!C=LeHKS=i~b^( z0;4;B480|(q!bmaV|s78JO!$ar17+*wZ!NMN@c9d4JaDv(wng2<{5PD0p6KhdyV%&~RsTMtWjq07zh)jjDC&tzZN*@1MwsNxtH2^Cr15tctguuy#7F0!6<^g3{9R+VJiI)orQER@f=UU~s`!BS6gyeF*6*dS^_QD9xhlv+AjIHd}|fhwH%kE^hv zt?H^Scvh|nLo<~xda@yj)UkfJAsr6Dqz^1{%+h6i>@#YpVj7Fz?z=4@(Ul$ z3`6;(jbUkK;NEIwS`s+gS98zVKTrM9z5Q}(83!%#$G36g5%BgLc+>Ob`C5n37jcE( z-Fqqzm#E&F!;qvJ)Xvsp!(_DiONKet*gr)#z7s4rKr~7-{KUv+nB&eW+$iJ$8r{e` zt5CQiU@4E$u1<|nb~R?Ws;=_=nnB!seLj@+SUF2*xi6xNcE_V%^<~9)53)*`WT~BZ zi^wkSEGm=?yp?8>Y0+R%Rbn`?pBgJPkmJJ$U#fqR89vnM3pR%E3*ZQ;t5S5TPSNh9 zR6iX*s4=Qq=$`HI+9d5$!J`*FH3Bv&Isvjs0J{SPZ{FHa+#3IA&>VtV?n_L&Rz%H3 zSkl(dD< zq4-eb(T-rv#x$-qX1?tAeg8Cma;<+~bSHD>=S`W)nK*GU^RLRz`{uaQZw!ZZZl$hs z!z?!qkvjKPgd3T)k$y6g!Sj9{WU%E5rbb}$GAM5-aSR26qT z3lh|}2>nf#_x}og&JJ~?Os3`R|D!1OH;A9 zOzdlv$G>l(Rac~_}vVY^TeBTMy}yBQO1pJE)kShuBPfj(`AUtl^D@w zZ~~!_t#q-T+{4%|zeOzkoRgQD)oypgZ`yFvH0MP0l5(Y(8x#`kgAWX&J7@PGgo0T1 z1ln@}!^4z7(#$aWjP6ewO{XIXSNjYNw1+|nN_!&WL&JtHHC5sT7fs zu8c?2X(Vhle&jq;67a`cnv?w7_sS;BuVNZsKR;*(`g`k>I zqmN@v!2^A&0%5OX{0s~Do52eE9N)g?ew0+_xWM@U zoK~q9p&BgbMuMlop6rxdZMQdv!*ZSu;Dx~|kADOnPUp{!6@K_duq!uKtsi0)veE}Ky=&;R<`IO+Hx4&UYZuOPjl)KY zbEA(-Ibcp3#!BQ1{~KT@_0_8>L^;1&2+-bc_XDNIfqkWvymR{-*3TbtTh=nYeL+pd z+j6x?$asF@i1?N(VaSnP2D;J!J{Ky?ebz?nBC^ieerY<1@mxX5I0!twLOMUzboLAA z%vmi-Lpq&06EqzOQ$q(Dx+1hL_G!gRGlbY8vz#rxgqi}K@oOF>>v$_A-?#f}+RF{4 zm*JHY5Awxc$1q+cUzcdUhRBx$#%hXnsgJ+(8$_gZmjw_l9nUSA2HGm)HR8Ek<5?Ks zX+x|l{8+KlD;m+2AxN>lE%bl>8eC#)@L3q>DPrDp%Kbczgf~nBtH&?UThTolbooQr z7ggAoRM?kw*x!hm@Lmzq@?I4)>Afaq%6nbRjQ6IPY3~g&8@#u~Z1jF7W|Q|@F`K=& zVS+a2+Dkz9b;!K>9l&gC?`Jaob1i#wSQ;?DE5USy8>NtNk`E(GT1g?cg(Y0$@FYu3 zv~L^6AqvY<&l~V{yFJk?rXzX^8jS7tP5lPlW(^q;Zt{8OTGle> zPJEq5_<4n&_wbpr?%Z>4RUZhjAlJ?_(zih*sIuJHfy4Ga$;$7LN%kzD6l|TH&ija{ zvE^>5!uH?;yWTcMKG;ne3%2fVrw=GJww;LWFn%0-xI%lI|5-DC47~O9IIBZ!XA{w- z{M<-v4?gg~E$YMLe`CNlVS;lz`|I#lgD@8VM>?b!HhEHpZc0(`5NqCs_*5a|khs_>1e)Zw|ICg+3zpK~5j zg(U^KA$x`VjE%qMLbG#gi0?(>t1s`GG37@~p~d-Ih%a+H@J-@pGkmJ#9UFh+3*((K zqUM}kiDh4YR`SCFU4;+%o0nrty}9BNtf8#`w+%ueTgW;m336#*&hha&m%~h_|-BxIG#v`g<^9fc0(#SmZo4xlRW^D%tbn%=5DOO{+TroxjeAe#|Y%e#W8&gSP*;)@pU zvB{e+~Z8$@L54z$p z;hRvH;9NWg{*cpSO23JPiO$WV;)9g8O_9%7%ipBJBBECYQ;QR&nbmP^2C(28i zpRMs>e#{RtCDM2uF}B8Qa$&Nw9q{PFL#wj~Kc6M?*|XbjSD&#a=9Iz|XGw_f1fn{J zpUV|KKQYJJvrH{ab?yl9Jx)~N=nW$oRzCTREweW(Z05Wc;-j^8#I&Zi)Oo9hkB#J``L0d!QE1VO6b1`jJwiAn zhxgZxDtx5SQVZ@Za-*zpKw(y`Pgn6A`W#p2s`cqEEG}M0zvZ<)J%#;>x5KB1$&yj) zIRViwC!BF>Jtr2|5E_240%=6ppM=D%jZ;VqL_Q-uGYT})qd|efxDhgiMone}t)>W> z5uVM;vzFHAd3;#mFlP#~Gg1M?Ek%3uvNqcEvv5S=2xm?;zR@e-zn{()mKK&eL%^px z09E0l4Q$xEpu%;!jaAch?;ZWz*q76 zj}w6J57qc;8noP`uYb4Cpd7n6nSH4CE@v_ius>VF|Op|+s(cGfFCyii^69M9kqBSsy=#IVREg{q~cwy7w54C>|E=K?(t3f-cH}cNBCxn z@6h)_et7b)Ccx;4T`5$YJ8Ba9X(sktI~q=ebcy!MCndXORR*eUs+DCv`G{75Q=gG%Bg~EAOr=)!CZV zx5h?_Th&E=oW^@uX2QG*6A&e~E-8+nDb;0TBXtT%@#9R{1gZK7c%>$F#n?ze8>Ug@ z$C)!KsRtiuteaO?Yf?CjI+nbW_KF{8*BVlX!0oKYhlQ^$Db7BafY*+V6b|egMSh&K zYe>C)2uN+jXH-(yDH2kg4UM4$o<>sqI2Q+`ock!y%l!NSAHPberTDR|9Ta(hP(IH4 zA=U}^{SUF?^ny|3#~B1Fy$H3({}e0EM;JwZoWnw_Cll)r`MDk+rT{C(n%nWYeJraJ zMYcKeaqa_xyjtylg9xqr@oB}UDqX9FDWgrfqy>|Yvl$R*tUC~)U_GK1>jh)VEjC(3 zew@`I*7JzA)t04r@(SjV(#R%ELuA7}gnK?;;%b#~&1wkoV+ zOINm`MSh$EL#(RlA*r!>1}m##Sq+BdExa^I0H>EJXZI z77mKvC02f%6~O9mwvf$}`8f|C#p{wKOJs#VT(2ukM6+C&G=_$f<6Rl_I#&bVe~b0= ziIpGcAz&S`^6^T*I)X3pquCY`30jcogjDKj1 z#ogcFEF3q69QYCO^W#hzEBA z9^Qmh?`cxM9~-GlNQxh460k-`ne*Uw_T3bzKWI{a92+SPMrB0mIKZm=!m~)_T7GD& z&8soAd$L%}k8@9m^_2iCZT|sQj%JJeIJj=(^IC+}S-=l%{{dExm5cm1`-WJZ04r_( z0agx&i~KmJhgdHs*8BLOtqSXcF^w@e*e>$p42M|%7GR~V3hUVVZ7##fTHOD~-q**; zHQoPD?(EL&&TbwyS+kqR87sTS?B+p2Y%-Cgp~OQ|A|-+#;vo?k&P0mIM1+P$1ffAF znwFv|N~)?6DXOZft!k>iq?#(es-=o58o&4ZbMC{rcW0A38vXtAjhD}!d7pDWpU?T6 z&v`!gUe)*4j=QN21l2(#41Ef&oTbZDUCjam+q0IC;mss>e>$#m0zsl4_qe`6hJBs| z836JrblpH*Nz@oHuyvhEhUL2UkO#+U+>?w5QKx~GJ=4C#&vmckd&`{o5ojH*ws^fd zO`_I$TsQi;@+hAS!*l%sxss?Y9@lsLTya{re`Q?pR+C7YMD_ZOYk@Wd)dZ4hAfKYP zen_q)>I~s3bG5}}xSC|0=IWg!hqLQL`t>7t}t2x4k=(XkOk3_xfaoz56 zP5<^&)z)U}N}~1w1G^Q>Kv1uZ8Tu4H@MCf%Q455t_yB|I5|W#2u51O)ly88&D(D%0 zGWIB?kf{5>(3q~OCn@C>Tgqli5fZ8we~es7)WBqK4Do&Q8$~S=!4;$`U!F+Q5(P@X>fhI zJFad4s0<76F0ROjD8N-nmL^dzgSFk?Cw>Rr+ejvXxVDl;6sle+Tr^NegMl`Sltp!0 zfDo~j6jtMH%XN}{NsS%ux|>Q*6($SR~# zA*%3S6h)$%pLg6{7hoU!R#QM|7PA9zM5P9BxjHC>kPj(@M9p-CsDNz?-Yu3O0UolnOVpCHFs7`Y~1aCOZfsK%2_2l*7b zMl5h8QS-`iUGeF-_8?ahMPr&Rg(h_^P|kg&I@nTZzz|MsQ51=yElg2z{eL~?4lUiZ z6tN~nvHT%KMJb9z-72DF4BCL8zT;NO5S9E)1^PaIQLRMHmJ6i(DEiXyQM z_)1v=;?|~DDrb|kI{du)L`osC3* zaxf^ol#?liM2!LKq!KApDP<1H0uZ(nuJWA`(vi{_Udm~dLZTLfq3#2{#xEg#o7R(J zH_vrQAF2m9ogzroGvP(>@~(O}tcWuxf<(1!rLDY$gEUXMqs~igEnX?yHZ#a}71#S}3Izm)>% zrWA`QBFtEmrw9_YAs~X>73Fjz;;FDA&ZYTr@dAT4&2kv=BetU{41iCO{%_Kw$TGJItt$frE>ERZXSx+B1q425-z zscX1-)k1P5QJaM;XF%#51ieo1Q*b?(TuD^ykE}w@S9Nn5ir;Dy2)UZ0owJM7629*~ zpHfKF3^26qJdXkvldQ0%R5*XVfLuw`YLDyfWcU!tlb?=jkz7gCuXZ8V61kG7ZQyF! z`CaPTXIsF3;S-LX6XET=gi=UU2N)*xI$<(`>Ufe1{8Ga1;x8pv614^l^j?wYbQ1a$ z`@$EID~YC4HLM9l#MyRTkChH_(P z4Y_(Y344!iCApF)UjEU#>Tzc0HlZ@CR6f%c!Yo%%6p6YQy4q%WoCVlQ@{TTmw*?dK z64okmB~h_IlPf3gYAAwg63H}>7Sk-@xL!%FBe`H;8bu=R=2;-*(@*KueHtl|)fN)7`wL0j_16AeEuJv8W;3?OKW=QKxwYSWJtoCb$bD_7P*qBHZZU)FbP35lVkz8id{Wj-Qo6_sBS7V_;=?UhPP1^iCPA(c5inF zrN|Z2PdVJ)POc=za2s}Lp)z5I+iz12iF(}Aek-;AfTaEnF;t~}^_}EOvP-$%MXn?= zuGp2@WnA&~f6k-rL&G=p?@$Vf8ic}|-N`uoR?}#awKw#aflFR_63QXhlPifj!{w^h zkl_O)Pm-%Rq_}z5N!fSFl|()3as7Y{>;D3h0nuE+ns2;X8LIoZn_NlMWH7KjdKMX; zO|snN8osN$hg?ZapSXz(%Xu2wWhlFTk6cOA2C&k)>UOe)tl!YOdh?=i3$FXfl|-@F zwx@NqfH|Z%o4@tpJ?(x}eaxl|)@47Vz$gucHO{bZZN}7Q{Ia z@Q%!rsf6U=mNY z1~?5!e@r32B#{eyf%t*xzccDGiklbAJP5aLfiFmXDHt<2H7_+N)i($aNsUVlz&k4f zLQ=IUymTzpD}ZvPIJ#I-$7KUd+eJif;(;vci!ZX{x{uh9m$VL0v^(o{wL9k zNw^jc#y8`BB0TW|c@8fa*crH9Kuq^e{U{AdqK*$3atVH`6*Q!Dp7w#FZ;)zoAC2bQ7Q9EY{SPMl z!+MD3P-i}F1ZEJ#wDLhKz7|6d1%I{3d1N*YOcThiL10qrT1R9XnwB;J(e|>uM z6g4AJ(*v3*{C3uC{(jAvd(_%vXVs?Wq%I7?&8huUC&(KQ!(xt}&>ZzeCgzkf11Ujn>_;8Z3YC z&6%koVY-F4sTzqI11-$QovEt(G>$pqJLfV(!f&Geol;2Dbde&b-Sb%XWh84sTHtIl zb$JA#Nt3*T^=Y=Pj}B++cPNTP-6x`0t?F4yd7b2ALzL`+g*yQG2f31{#&;YusWAwu zsU&kic%_Y(CpWVIo3RAjxnI0Xt|V%SaP^K=){yIZa<$D;!G7I)=_eTOeSpEfL-v|0GuuHQnR7kX*@7 zSc9v~K1KU*M*e_YNz@vT>s{o!iR2j&a*c4`g}R1wh<}kQiFz3fcGXkMACfDHs(ROT zvo-|P1d{0>EuyPU&`v_Q*+=9`qWD;~*~ZT%*UQMYyH`xHh&+yJ9C^MM9+qAa!1l6>g8R? z6(19gq)AlO2i4teA8Tg?P<3h!9Jv2$~HJNKm&618X- z>fVoBNz~1|kZU8klBh>_A=ll=l|;P`uBM$o#BbI7uda4>y2^&|c1}_XiP{GYyBj zH6c+S>}pLatep;OLZSwJ%wF1kHv7L`JHx06i5j_!HL0|AhEo#~HAOUW`x9fS6!2JQ zeB3Skm@Qel^~FEt@ijsIqsH|7i%TVL z=CE=@G>!u(ibQ=-u_&&ED2lZgLezm2MWXtC!gg3mskqpoC{|AhQBx?2L}f*k^e$5o zRA-Z{1o8DQ;dbs0Ay*Q0hj5i0(oJOe9LbvoSLcAyt(Gq#8w>D7{@wYZ&Y=`VqO3>{ z*ova0@>Mf_tKlFhK&9t{hmk9ZnhXZ^*5m4zq5E`lQC=zumxHhQ=Dd2IE7fId$@f9Fky-p=p5>?Z~ z<(fuNb&^a2@o^1j7S^;>x0>Z~y#PU9Bi5^?N5nv3jC};TlBlb|Dyc1S7lP_>lIKBq zpU2%#4|gf#NOC1nZ-aqt*BYywuFf(qgkwx2R}z&0E6vp_yo6|17G6lWbBd$Ll|&ut z=c?x5w^{)5DQasvxss^!T(0U`GW<`t9!;(!a(zrUxc}S&e1tqrB9EVU%T*2?#kiqv zmGFV|G>N*`wSef_)dJG*g!8Op$(2Ms=jZB~;ZxMsOmZbrZ-A?A1zJ~g^TYSX&PEZV zs-j3A=3Q{dQ3Qz^#Vpd$vEx*S{e|sh9cH?FXD-?B2J_T67{hwLJg`0_mL!1 zKw3Ura+llbp@Vh~Yct{Zx@J=fi8=`k?N0DK3iwZkfm6tpL|wHDxy~V15_K=Q8mD93 zHmjx(9rmf@N}`?-uI`@Vf5i1PawSn6xG7}cI6N9bwU9&(XU$?`x%Hhiy}zWAc(NvS<9drPr@&cIc9Mt3GVdwOl0HqcRv5_eEPe9qDVfw(&QJG<%bpk*LO6_AVi79-osK#q?on{;w24 zBA*!zBf=SILW}qtMUbfZ6_#Q}*iyVj5hU^j(@IJaTEyEFL82b7q!ef(+rpOO?-W5I zA4d&cib_PhLlGouP$INP$zU>>>BD%`KPZAkzPlQ-6qSj1mm)~ive2d2XjAlbn)C*?(ie&*y~6hX3suYHsk5&CN%A5sL#4!-u$MMPy^ z`}l|=NYvfp>*Y_0%(YI%9`!Lrkf?1TMPLl5%xV8k5hSXq7)S8eYoKl1q(SssL)W(n^9FGe9`4fvG zNYuv_iU|E}k|;%xsBC>`j}oU1{e_h(iXc(*Dijg=^C#65LGsy+7cq(;`RvAvI7N_r zcH>12MUZ@U<3%k+kbHI?m7oZc&(5RjD1zj(8};fbg5=*+wahhYkXd1K4#DdLG5+(dD6Z^RA-a|2UzBzyImKdzwDTz2$IkuoKl1q zk){X|`QBdnQj~8Op%=yc9ABCwv=kAy1-%GvCHvLlQLDnX zi#;fUL~Rt0DtAlTFT$yd&?0!*FHIsB1_Ezu z!Y{%pMQ9Oi6hWdoMZ^qHuSrNqYQSvWT{q)!_*#Agt_$A%=G&gsghZXTi#4hA@F+t~ zNYsj5tx1K4M|)8d619F8Ya-QELG5Iz35j}U7i&^!?X*)967}w`)}+GP>7XVgs<}6t z=l{R9GmM&$sBybklS*r6I5i_$=wiCSB! zl(z6v_NEjPwV_feeZot*mr_X7(^7ZtHGOYDaE5_Nn-L0k!})vUN}^(Y*h+T5^;TX@ zx;4}#qWj2|L`@K`OF=y~-EoTy<$f>c5bn6u?dAXb$(2N1wF9pDKA5l$#dQO@lBnl) zA=mGdD~W1upk2#bpi*5QAXgGKbr*8|0lAW>6+7dq?>L6K+xSFRzZ+|X~XZ0ml61B+VdUKGgcS$E5ifcb| zB~ed!TxQJzkL$Z-xr!OWaZQpd ziOM#*x}JuhQCpbk`_^?k_kkvIB~j}xBr zm3mg1TuIbau(E4wSy`?Xc-HRZN}?X{xW4V@TDfPnkSmGG_IGuiil9+j;#3uR)*j?a zqLjz=CO_B8J!>erlBg#CpdqfV%MtXof=cZ=f?P?|6CPJ9RgP-~{yLIeNz??evhBLm&$SY}W+Rb)BcqWO zJtC3+wIU6LZ$%=BL`*#jj#lx5+DKLAu4p8Yza4N)y&~wp0_X>Vei%UO)8z0`0BsTU z;{ZBF(CtKzvs`IY1dSwsp4Y=gPZIRs0S+q!?ZLDLhua1HglP>94+tb=KpZsuI1rJpvN~|cLtRDkq zMFC~~7$_?WDC@^SSy4b)KL*N*0?PW)=n{x5v7&&oel)r_QC1XC){nt~6$O;_V{l+a z0cHId99U66SwCLdXG^Rpz^ot>W>v+-#u|MLN~98_k1()>hrnF*HTeq>mE3zwOoy&` z0ceSJn(W!$9Fy9ut*Ol~MXEfDvaYsiM$cNEc+?*tn)RlIh_zXPKv{2|LM2ups}1eR z!fmTa-&A`#oRBd)h)>=Fg z*^4ElO!XPwX#7ksg{190+IuwF;4-91bnK&lWi~=kUHtPgB(m^7R?!iLo&RePZjUu* zo3j10NmELFO)5RScTH;K@aZ)oqOHw|5Ay5_9z*bdANy}F@*EVy0&mj9G1h?W!0dqR z;H>_=uQdpAe4K_MNizG4C4Fouj$&F%&VU_C0~pMVL(q=fOXB7-t{uT_zme6E#V8fN zO4+c(?9pN$q%VjVtyOYHp!7 z!X?HE69$lRKl~|?AY98Z3H-1say?qsn`q~$UWE?y92g@fvp3hx_EI#-OsCiVPxYeM zqRo+NrWds&kZZOVbzvZCi5ImZ5VgjOx+oBJyBEby!_@ErFY4kz)DvFRC4s0dUewY+ z)XQGfR{~LQdr`{+QIQtchL;7R>btBCfm&kj~7jfVdj!^37~Q z-)Tk}b+aleNpXMolhMN#=#uYubSW->MFgO+%`TjxjpL5LTc4QH@Ybp)pt1+ zV1Jbv>v(gmS}qybWo5>B==FlKKQq&Qi>PiCSFs509IaN}>qV^!L_I3J*afGt5gQ4r zHRpV&rI}vIoQpVqbD~>5&;bTv)Jc&OZ$|vjwnwX6!hL z<*)p2yjXVXjGZR2{FQ&gipE4Vr$VyMI+xuAN5zxA>Z}pknl{FP^K?3 zscaQb^?vshZ}oontLob$Sz3%@_U%z4mF7)-o-MKFh_jweoRv+SRb}F=uf9EMrLAgw zJSybO5_?SIY^Y{>c9+E26wUPPD~Yp@G;wy6#MwcbID1Lr>>W*iL);>adwEr*%6vJdqd*v1x=h?Vc#ANRb33q z9#A5JmSayQ5$wWDR_wdbzd66ZK zarQc@DsmSV75LC&Lsg=wF1o5CRux?}ca)XPMq{l_GZI(VCwq1-Ly~ALb3e4`R~2iX zk-(4d^G9`Tz>Gu#7EYskThUnIaTb8RXZryF(;9q=AkE!A9N;7k{+b|d+uk4G$l)>2 zlScO>lNT8!=4_~*k%%``51KKfPA?ZHe)*G6K8ee^9qxkl3BDTH(3ohfYpieV+1RhD zsb6)nUo6=VI|tIE57vM4KLN``Lp3I!;MK3XA>K6OStg=Z9Y`dD#m|wbuAw>}Oe7-* z63LkHEE3f>RM!L($q<1=GB~`1L_Hg-YyF8Ds%0V5ud1Oc*$}^}A=WgbUo6&faH>yc z0!ou?sA`Bc%UTA18HJV2L?>c^9Wj6rl9bV0_%tvf&^S1y%X31J%5#bfCq`>d2!T@# zI87?g3FR)&sYW<4T601OoN7Df`c~YHsgr_y+xw-;by>@@k!4HW3rTprD{j-uI|1KQ<}^_kY(lh zSaRyw4SMlNkIXT!bXF(u=2$DgTrL&&CYtd$+uub7d%NvPOs;z5A4ZF@7IVF604H0E zxzh9_obhc>wmO-RhAUHl8m=q1C$II=h|3R)Cb1HhpvXH}JGTvspHmIM^i&%br`7Oc zP6f9o3m#i3?qbe9wkI#}U|D=RBG_k<7nbA*QEZlx%0Gxkp zPhMx_;gWK(EY-|(vOqHdS(cfAEXGVgmS83z3ojFp<(3J^BFhA1X=MVkpfUkjMwx&t zo=kvKwe3kdjbj!mqAa0|bh2H!m*R$m!XmE$pc+op>x>D0HraKAUZ`&J=z# zvlBG;W4+(P7Qe}6rli!N3CKexGlk&{8LOg^y`TiXx{JNaQ&83f_6?(%2`K8q-BAcbZi^6}&on z>%aNWq4GPdCTu$%YVRAKfoQ$gh(Zm-e$Iuk1-|MF-6SXWWcgR;j9HncT5O?4`$jTf z!(?$-Z8S5PW8hkB9_0@}sA*84KmL@MCstLs8^%C?$6xXMfrv1-fs*rO(L3V6IH_Bb7- z7}nRaw#NoRbRh=@C1Qm%=7@=y)}-_&^dgoH$BM7uM^gV;H5c74lgILhLTc$W1h>}b z4?`cDISjzoh*RcBoa$wO!+SYvkefhN#>8h&$gPv zk@(Zos?7|91$Fgr9o?qZqSmw#+WJ*#+lj*s+fBES4r~*#O*B;H+n^>*73nbu3gO?h zX_1~+;-`d9jI_~io0>$Er8HE3IqYans%;RmuC+;Oe_d;{Is;y?ZYixKdj#m7BKXj9 zLtzcH$1dipNFL4H3O)1J18Iw?*w7wlSNV`3K&pMn1R%ZqiRKgXr&p^6+Q&6T3TT(54F@d0I~df)M(}w=$n;!RDYD`Mw}0*nTXW| zNmyzTlj>BXEOk9O-OMcb@ud61pZ|R`e@mO2AN<+ITscz_<;q#yB^^d1tfOUD zJha;ArG_GJ;+NKn{M~#5_Uw|c4UkB9)KR7>&0E@#z|G z3*t)f#d{L(;(V7NQmbXDwFvt>Dp1#6<3R0gW@6j(bh<-#+Lk^;KF?%Tdy@Y?YeK}vjx6LsoTn5mXuiV7`*IG;z z^M^#a`9m<@By<}KL+ATyS$RZvEYHhl%G*&sd`KSUTj7^CRL_ryLS9|D@&)sWyb$?5 z5_y;V<+W;gL?N%foV;K@k+;KqRgvZBd+?q4221_*_{iC%Gr`_c@1W{S^Cc+g*%BO; z1$vGICorfOO#kNUNTgI?@K+O|V&*pg0a%M!HrGGFL5}LSpSru|`k4+>`4A_bMq8R2zK&BEo67!wRN`#1ffyl8$uCkFMh#Z4D$}F{! zFA_O{X;$0F;Y3a)vc^UZAu@xxmfOfdM2;mg&qh8^WG0dGY-AFVXb( zpR+jWZp_ChoQ7aPpx3qVc zy{`to+@%Jtur>8+;A$K3YTzOp@oL~28}Vx3Iveq7;8Gj$YT!&8@oM0F8}Vx392@a! zpkN~h;&0(3+VWf*@#^Ga8}aJoD>mZQz*mXrHqd4zGqc^FWtu{x?fUE=@+U)Pel|#= zeNU_pPeBOnhFyFI8WsP>m)uJKo`aZp{--z zGFV07d>YaKSwN(*v{3&!mw&8c9)B{ogI61(_yZUdW>PjLxvb(@#P+f={;)DP;g?=> zS&?IU>~ndKUhL3@SeYCnxb{k+PuLDW$vlKjjMia&+J1FBcP-i5<~QTZ+o>d<*=5&-)pC!$=qM_X1AsV20QA z#*`b&^+r`>3<~*P53COhxq*>bE85dxFk|5!^gH>nKniD|YzZ|BJayZSC1us0pMXf| zgRMv&JlF?UA$o{!!XzE_Y7Hbe>psBgEv(Ee@qvCL zW3pH93HyYq;<4yBl9?%pO2p8U#Hxxjfm9Wb6MDSR6NJtJ%|A&VO1%&M*bc!D73ttH zIfwPk5LC0QFAqf7B2k`)So+Ev##_`pa#kUAqIV>NUEKt3HfHA13AjCheed?vuspuU z!QhD0iFQ!NfS=vjLG?*g@n=#@ca3D{JIKr@w0AXJOv1EMH0=T`1Lb^xzdc}^ zs^U0^sf!O7UL7Ae{Dds(Vm|=3Ec=&efi5a2SIsIXLTfP==8X6h%G!O0Z8zQ1=&U6);20~iY=+WypN8_WPqWJheOUI8iyOvl#J=SA~pLJ2sZ(*+OA9Ey}$&1il;+fpq5Fd%G!*&@w8GpY+wR#zOiNQbHS z2@WbFmzBq!R}0Ek4YL|?WK(zo;vA`QtH~Z4Bw;Ln7F3F5=UGKgmf7R;Z&h&-J!&{Q zf$U5@n`fD1S|8143A5}kK?ii24b>fZX$@>%t+&P425d)GTL9a0f+jIV)w#S0jE$NP z5tARuZZv7xzvNo5T*+k{jH%2pGl~52lE{=hrcT6#8RHCAMwys8o;kg=deF)24?~n> zeqJP%UU68xT7bm1zNlUu&lzUsMx@V@LTWBkEKq zVr`|-7HcBYz>ojb0z~LZlWOYx9!!=pP}^><`{mQDs{DbB;?fu40~lV8aMq3C;@FA#3S+QPmcNs&Xo&$h`yL`4 z5t5Y=3?QOKA|}}CM>8FP-@^jGvw`33@*9jVrDWKQXN!|)Jp6+g!aA~J58Xd>;9e)Y z2buji?KYViDvYd5EC1Sq5_z2fK6*{!&QpzP@P6hr*dF9w@oLkS*omA$SBOCqVQ3x z*oDbBjQ%hLaklDA8feNO<>k^mm8b3 z>|b8HUIach>QP@3`Q;_~GDQ`ckd?^4;@+78d!8Oy^#(HQLCI_`dNOLHw~A!cl+>Bm z!I*XNVl^h&r@;7NC#~ahtfMn0gHQYKIHquqtXh2T3h*=b$X4K- z3wvZlv8U6s+@4M_-z3Oi7$RRxsr2GK9Lt9U#-Zy+Aj|WJhUfK$ZIGkFPKl{ zg~*o>d8_^MaJWQyL?I8)d~_{eFrUZ^k*`kVUE`N`m6k^o^7@sN7tAN}LgcF#dDr^o zVJng4BMNzq<>UqPiM$Z`dWyWS`Q@$F@`ys-Zsp_!^NG9=`EaIzF=mZl-ZfetQOHY{ zlNZb<@sPvnKjhkJ_X&%WuGcaT1lA_{rwa`J-tL|%w|{YBol{PGUg@`ys-?&ahK^NG9= z`38u*+x+sTXn8~-uce&4U_Ox-BHuufce`KSAzB_$$iu|7YyAcDiM$Z`28q0H`{f;~ z9veWd(b5+FsVe;rfAr3~Rpd#ep673m%|l}EM6Fd##d0W*8F!*p zAEC*CnVjA14co?~9NNe}nMug!{N~v?`y( z59}L{u$nZ(B0Z}E*5cp%ETrGsP#2dSuKtbj%m~r02^)QOa#j?R^Kbq%Nsb4&c~7i= zV~w3$J%pmgg1cl%)`7kkbyB3~S&@d}_!)^@8R>bG4!2p+M(3i&Ks-Zy2hyj-maM^q zuF$cVh(zQT6don~7;><{Vst%jhm{zpS@~!1jmo8KePP7jjPHdf;`c_q$=#OrbX*)dNV{zec?1rMIzsOV-7T-+~+Wtj&BW6N&LyB;EV^7tf#k z2<(RN(&PU6`F)Q=!0L5!|9$sD;QJ?zs>-!TCHA8+bL(?I){~NKQ?!>&cOt^UjXm? zlFsq={qq;(8g;_Hcm40#xve@OHP3B<=AAfirQE8O%^OAik2bz^lgPL!d&T11TAlox zg9k3lVJ6O$OpyBvwfcLt0NIt>@6P>9N8U00%V!Ye{Qk$ndg%+r zjk%9C>*~V}+?=~qhnXOE8*{ADIb!GS_gs#zf`HsjgIBye`~n0X>%acJ+@sVTdmNEk zxwRyfI_`C5#Zfgtx#Px7nsMW34%{9ED0kfi+#A)>xwnA4MyIp$t^A#X1nf1+0gojZ z7mzoebjq(2dt?>tmMUbfTOYY6Tupxn6=gM2`Pqy^;l zI-QbVV(hFFkoV{`_&h;=l&e;*6>9KFf`1fntt&$$p!Bq_yYl7b;0Wit`l(h zXh+ax1g{WKx!`#ONvtBL>SLF=-;$_^ME$DU z2llPbEM^d62>CR`ig%F5U0{r;5~7B^h@zLxOXPWT-)Lj&ldNw92X*f?E7eXw#xU@7O#50CDBqO z>KBJC;+cyW#QS2%r=g~Jr)!INW*MTy7V+)LMO|z`#*$p`~3z*kW-Oy?}qw?DYWRtC}!v5=)tVwD)RoJ8~n7q?;-EeQ&c1BGsp^J)3H*Yi~{MR@a_RCF|M;rkd*7lPPd*Q0veZqq5np&yV6`e;sE@ zxU)L;2{&kzBp%L8g;CW1E6_h1O%B!rc4QyBHyC>yI5+mIwTiszW{%jr3D>W7Yh%BJ z>Vwq%8xnfZ&LKlXZE*=KV~*LoU-kh00pq>|9-WT~xXJ}55xiT#CtYv>!5aj8-34V>hjU`sXx`W9 z;{VE&IKKdRpbJihg*$Nt4d6l-Jc}Tn6al#21#uZC(uoNzz-=ywUA;)>Kmq%XaRf~# z7!z=k3!X#p?=rm2alzXOz9`^I7krH1PX*lIg8V2-C*P`Et6p)zBMEYPP^)V8bEMx( z5EuRc9_WHM62zefnhrM+#^NBu4q9;A3*ol-a}oZ?IEL^t4PER&g+th0mb1NBMeh5L zogyq4G+11svn|(uE@SRXkp~P{YUm35DeOaDmuX(y(;v%^Bw9rV$;)Q4BXy9fjEq%e zK8DP{O6F=I%8!&+QVncnB?j0R{#`FYeZ7S8}dB?iNrVaKW##!|*gErZ7kW3Lt& z3>q?QCfBfpc70uIguiBl*D%b<4(xLs!&iWLVI0M*(qee3Fg7b<80;#hGS)e=zEZR1 z2K(4wq8;lUc(S&A*RDTyz=es-ah1-&E%LEnmmCZ-hrg;XMGkx`d;2^4jW7R8;< zu@9h2wu%f=)b&m&5Waz7RusZ(9UchZ=!6Rgk=eDH8MnbZ=37PnB`3R4++;BPx)HwF z2;bs_3;UAc*T_(9d*^CG@ys(Mv*?9u@A6!$$Ha~YxP9XwXEjtOErNbu0kI6Sj64lg5t`T)ex%u-xbnvd7eR^wqy z(^elNlmB_7=COWT;W3>ud=3rp8ID|jK8KPIN=>!!klA$n^l8VXq^X_W*Xs|y*dlLG z9z)zM;tJFM?2ntyD*)1Q+2>D}soq(6XFxH>PZk^D)zp9SJ!k-nvF=Y~E{0ba1&FDC z;GqgT0WUmsO|Zt}a8B6-YYlPt8DTB@-kph-1UnKf3CfFp(h&Eu5!Rx=w=>a_U`L`Q zL3z=Uah}0jjIb7c-_Ar!f*pyL1m#6fHpI;_!dmqGI}&POu}Hpo*X8hJAy(IBFU&E5XDd4%BU*C)F(RfW0l_n?fyX^9#XUEZ zKhHw;1pn`#kGG0Eo#G(`|K?|7y0EnYH-GgZM9e;faGqDMiS*n}pD!T8_mP2bbSX&y zz(WM^_eb{M4ffv$_!p1yk3;W`-TM2m(_bQntW086m43(+az8u|y|4$@U}e6q4_7Qa zdoGW#r}~dRDwfP|z@C2UywOu)sU{uXfAsiRs@VyTjHQO9+U53q>crFt2{h%8=i}Gd zUryA?h5Y)yRy>)x4!>)%0%Q-8C)q7IijZ6RD2HUoLLc7G9EQJpKrb~FMlM{BtX3Y& zU0%&zi$8exSN=x)ZOY#Sn*TaTwvjx(gHp(AZ`Lya;o~&cofvEF1I!9Bh zNR#B{2IsBF=?spnbgM|K`G&!>1tyd32YbzN6PPLPw`zyT--6$5)ayZHMq%lD=X-h) z{SWk_M_P-?q>EP?>UjQXt1}Z8p%cL~SSG8wT8BsTia`@t9n)EH{!QdWI=faR0^!09NC(Pcf?|uiOBXM+a1pUtw>E|%!CN)jpuvO z$Wc3!(_wAhH)<8WN1>ujv?hNmw6uz>N=lR}Eho{DH))C|@35W8L%D`&Ir(ouOq*4t zNhwE6yCXTBleC-#cK&t9-(f4A|0XTli1*=$uUkdd29BKd?OEEQDzX=>(h8g7OjFJ$ z>*DEyK6>_y$v0vx7Eceku6e@bC!u~keQn|1f%{I6r{@g(xN6_Fc>0V7kL;1V8oMO% z^mi|NH<~*Y`-eIQW z`-ZS*tmZjeQonxjA7`^17hHG8?A&XTgi!7`Fn#AlN%H4kfB)2+C5%`rIgCM(&Y==@ zTk4xP*;R8u>Fg4Vq<%G5QT+78@_D&~#OUX*oOot#x-ejD?miajPuSs(r_Vch^upX? zspk7{*s>_c?~}&U0mGZ(o`_LfA7lhnGD@ zITjWH?ZAt-j}9Pf_NdhW_#gxdvfODEB-W ze<1br);(7~ox?3=C{G!=p3MD{MBVrNL(fyzhf^kR$$eRpEL**4OAasGMQX<8xI5Z; zkEA~D(!2jbS&#nxh`;8J6x$KXy^4&TD<#Q0H(mX14!7@-`-}|_e4Kj|t*7%GL|N(! zQ}BKkIW?8z+2aNLvI|b699)A!%8@rZDS6)7IZ8mRr|sNX@lnhF8F7H z*gyqXbiw~2hztDyFTg0SrT?1XNdmrigv0Zv1P>E%Qk4TfOmK{VZ+*c5?sGjkanR#O1YBIN5BKzirbSZKLW8-+y!xOE7D0?3SO9Fm;ij(q>1kVug5m%+(5j;x3 zjc&y~MR00G=Tk1NuM8^=kNWdH2?1vJZFW`zbj`aNr zGP$L$aqWp^LZp)?S$Nrp>kNAk9427g)srXdoy{PH-U(bG>+IO$N6}5G_1X_=5zuF!(nK{+z+zOK>xTD}?X&8N``8nBB$Tr4qb_!K);AErWYX z@T&}-BEcmLUL-+ud6B|o37)~=FbST(;5rFTW3aCT4`vWwT!FOl3?3#Z9?pyurc1Dm z!DA#ikijt$?8D$h305=sXW_sD(?V9zw;0sYUSaSSL4VKSi<0&k2DeG@F$Qs=6goV} zAgH#_VyS~mg&kjvMf0=j@UrRptq1iSk36(7g4Mt`<|a^mU?L4QIN(>N_Xu9gV; z1koQlI>puXg8r1Kt7%+4An21sah=HF@RXoGBl=5p6jG|V+9K#vL=9=L3i@-RIY(M7 zp8qnqwJK|W?wwFs*>_;q^Dy?&q7os`t1dhQE|8QjEXmgf@ZKdUtbUjkcb5_+mKrDv zt5Nj0i4schi$V}lnvlx(C*s}M)sDpKGgD$7-r~0EN@Y4mN z^slJ&Sb77Mj;qCj{@RBIe1r)#vwF>}XRYn@&obLWx;N9*s#U`5H$D{K=+X|i4v{sI zP&4aSrN91yx2IRz4dXfHl!ifmfOX6GEn(NtfOR9-LRcDsom#ho-w~EpAaGSfwXMJd zPyp{~A*%OiIZ6+cx?*Dxo0ju=8crJ=v-w1c7KFRea0W^XMit9gmQS6fI|`jcYMsUd zN}CxdjTco^wJe`{JP00WS2P;XK)a&NfCd^6O$Id3fM_weknEZACjD@?ufuNB^N7SJ zme}Xj;dQLDHBz&-r}i@5C09>F-P+>sd06k&UX^-5;1>vc)l{Wk7WjV%yVVp&#n4Uc z&+%!YqprbAC6G8Sb*A6Du^Re~kUC?GXCuDN_d+nZ;tRM^S7Lr#{hJL>UJ6jUulmB7 zS-eHRwno&|CYO$hdIP1lg6h78Y6GRRI<0hV)LL60Ub_y>vo5a1j{2J225*6W7_J(0 zOVJc>{D@6pmxIZb@sXgI8Y1WmKD2;)w0O%>%y!!0NTSQHdEvDHGtkjl#s6V0x9!!a z$-?W!uDtkBJg>{IHT?f-=z2Tff21hIvt^*qr|#MW@_rH)0{&0k4U~o0!Prs8|5*U| zKlL{FumIW@t0G)oU}b6dX9?|a=*f;i7OVIYQhFc%iL28D-5Nlb3i<~hDkiS4(Ia6@ ztwR#sF-b&Eq5Z0o{i-{88&D7Q_#8k?JtWL9Ge)PfcJYhwh2lx*O}vkBAT#?PP};g zC!fUBBIMOh8&fM0wtMiHw72TWOQ@ky(jTxIyY*qZjP^2_9ME^*!*m$~rSAZx%NQtq z$10LG?bFjrUNMy&3=N-+igKRJx~ORA0rgf~cS>#^eEOsX8prjAE2UrRS7m?3Qva$h z%ttpxcSFZYhtsNzhrP}OLih3`bS48SU^SR1(Km$y-AKnu@y&xtW*?b_li5MZ=`Ds?-waAW_> zSa&Q!-uukhR~hSm`W3NHo3XF?Vo_<*+3KZ&Ol`FD+j_jt)UNO2Q#6uVzD47dYGNlo zNh6>1MPL6aMA?&k`-7+e*$m<`b+3`Rdq3D^A87+jF1D3<4Bi{hr1}Lj{esR}*B;ZR zb4JcD(y^&$vcB^NuqD2{>JFYg3uneT?XE`njq+F zMBN@au8tP;b)wvju+z>F6gw|I%@zsz22szG)CxiW5=eWipl=eD6*woqadnrVews4QYJ^eV3@A z?@&SCBWg&SEa>}zv>)Lzrd9lB0G%#rKOpM1^SDxi{wsi9Cg_I&RCgyI5jFI^S<-$S zNV`GMe*-l}ReTIt;O#;9b%8$#@c3BJNS$Bf#>uo=52A)8h6-v0(8C3d2GB)O;)FZGS_u+QgdplV-EcJKBgWfG#@Rk~i2{uTWZWrT%)pjXNL}y{kVa$LkG%!+~B|t9Vq*817(K}l>N9yWfWwG z4wU`4M!5xDVuuct{kX^B^b&h?!0gC9SdVAy))B?t+>0u)TL;SCT%$6XW49iY&Rm1s ztsXLZmi_Mx{^TzyOrvfq`;h0Lt+|qoM={2A~`d43q-{P>u%%%7G!O*qO={ULMG?fAb}e z!9EZlDUzWEv>YRV za%eD6juBDCZe75j*4!E5kYMEC*r3;Z(a3EURwDR^jqiDGDyg^>rC~2U?aQ0i=yEqL zOMH51cMS)=TH2z~eefA?EnXP!q0#GI7VH+EEe+N1eJ(7vY}M%FE-H3!)94E>DrxuB z=({c|9)WLyupEhloN|Z~dueo#iwfVYMo0P4c8wn7q9UzBqqAI8I1JP10Jq434%eu1 z(~4#zG`h-up}O>(YIYx#OZVDTg7kj0ZnA{=ASr(g5Tm(nnc}sVymLx;=`~&pY=YC-fDkMp6=?+ z_*&I>=10z6f&*fGf-P&tRz+vFiu7Sq8lBlH(uGa7^ku6^7xt!%t%|;E73spJF#57p zqzjvA>9zPWBT;v5-Kyx}R*{ZvmW{q_73snzU;46DqzjuUec39~g-vPnWvfURHq+9V zts-66MCr>`kuGfNKwq|sbYT;vFXKa_MBVi;>>wyT*xMRyRdiabNMAKM(7~-D{n}gW zw<@}_Rip=-C|wy}q$g_FjIL}I>A~I_1GOnAJ=jF)y;hM9XzD=kwTkpd6Q%cBMY^Yl z%HC;}+;wK(>YR(Nm89bX!ruQ13$Z^@_i(3Gt(UYDh`NPv`s@S96#vl9$WnK$(m=@@ zC|PP$4q(U|C|MfaFnROIgTLeCH@iqLAX?RCkvq{Z_Zhr|H!4xm!iUxC?-i7o3~zzg zG4fty>01RJWfdnOI{y~gv)x*e6SdkAgB9*S7yikkXQpi*X%|Sk5yZUf#w68qP%Nsy zt$hQUr2cG!meEnK|3>p~i!k;PKelBJw9lmX$L%Yt_&Hy>T2(<2olJBJx4hitUaR`5 zL><7WLjqB{K^({^BLl}itN8flRfI}^YMkNLkK-(cj0q@SVcmnMVAPAC{g!xI{N^)Gr3nFVFi@QH7W=9 z%%}G!H`}(eg=tqfjBMSe<+#G(M9aIv7Z_FE6{a$(iz|FFfNEDbf@l|4I5L20SD5BQ zWiPsWKVX4ig>rttQX#6GAFx!23itsF1T^3WED+FuAFx0`1Af2)0S)*83*`C1`BU)q zvgw5MxbEB|vFqtNL|et95O3N`y9#re7QbK8ekqXl7lIy5)N>%c=W(ppo+!ugRSJaW z0Ux74pp;{zr9hyRV|X3~dZnzn0N#EqA@)nR`h9T*BCX;vh&6q2iJ&tAs4h7j%w=y3tG=@44<_yD@EpeOiH@wFR08&OYPLh0eDFv?9m4U`IZwHy@&N<9tB zQDLCe(?F>(Q0i%*R2V4rG*Bv>9Z+}}J1`e$|JfhsG-LExrE{y`T;8$jI4XE^1W)7f zGDC9jv3OF@J%sTcqGv8bg3>ICj;j+K(HcDwXjGl=fLh2Q1|o|v+$GVclSlC2=OpAw z_H4&T!1jDa<(swlj@-9`BjF!p*72o2tk+VaxqsOFehN{Ulx;bZ_I$24l}* z<(SJj?}zdA?j$}XjD+?Q2^ijQ+4Mx{A@R zk0bhrvL#Lt%w5fBw?jwt?|ivq!RUYbqT`HqyKv;LJJeLIhS8gxlOyMZ-Z7<9&WXF@ zOf07MKvsREj&Bru2H=&4c>5T8tG1@0M(rmun4}@TwpdFUUh(n%Gug6jz%>|N0&sYZ z+7weqA)~#Ci^&zAYkUFq)#>;B;7&l9`-QB>sOT#VOLCwUXm6TEZ=!W^Ub!CiW}X=K zEGYN9lGUKwrSuJ~2cAH(@{H!n+9S+bF;cTy2(vacEDL5<2VvHNh9BX6FROtt{YJyG zyrkpkI&cpu?c?n!sF0|bORr7OwSTz#JN>FHY>i9nIf~_FWhDE>+9#pi#JsMdU%XIY zfl+I?j=_2}#Ixdb?ce~uW?e%J6~_Aon(wIZ^J_S|AzWd|sBKSco{5G;vSje6ZAh$Z zz>#&o+6KJROgqr1=d#b}`yj3AEb*FCp{VDut?EKSPb2F3kW7{sVJOQK=uF8(qhfDz zlksT@DtavZNP8*nr=5-%<9^!VS_}7zBBN{8785Xm*Z6AfrfEmk`66*Q!?=m2*^jyt z*M!h*I5*Ms7`+&}j4R{Q?p?I$tTA%HU9`jfchMH2ws;qfm$`H~#W|@b(16QQL0!_o zt+VgQIM@Sii}$$jkn0%`2J7ACST8ezqr_Z|{@jnw0~%HDIiP%XX6%C~lL5LHe|sKg z>!~@;C&!o?>qpPh=v)`Q5w`|Q3pDE1Xl5C8%4^iEea-i5px6hkv0JR@)Ul_5h(a6) z@dTnaoMv|>GCFIK_fQ70hfLJ8O^URP*u^T+9GR~`3E48i=ja(l<5)%7#EX*r385HT zC=s8?V~X3b!jsHeGutf`jfBru`FLm};d4^~lt#j*c8CshREgPbhqf_g=(a=Kc)HnY zv-CoI$z&*@ zGKDNqs5>S~cMzDfF-12*v4UTS*nEE!SK7fhQ1AR_>nN-Ay@CphUGi9_B)GO8guEqk zX+L_$xmYkaSIW(mRwdM9P=>r6&e;JVckTf2Z!|xE%0frZwK4aTfBMo=s~U7TUE*A% z^QIB4s#DNK0hC{r!iSlNy0Zeu|Bd|@veey+tcl4R)+9>G~LUJArEFmHOkmLMR8iP=ui&Wp&k% zvZDGMS~6aaz+9S>2>EW7Z1>1Qn^L_tz>ntPqgT|#RkKw-nujkQ`cQGlz&G}o4~hi7 zvB!K_xMK-_wL8k3=Sp3@K7Sl)_=;tGNjc)*vsJD zbsvi99Pgv=Ero7)l+(VatUVC-lzV@HZnXr7y=ECxg9W{is5^GY)SiMa4Wu0_=taJ? z`T~P@sreA3(S4@W`?+?#M-?Na+RM!ishjo*87iqHDx11#RHj-~5-4>u(o#tdS1u}P zsU)jy8UEVUCi{RJ+O%VY#fb50vQ@D_cvG+s6+dTk!(hw@KbP`*8>h_YZN+L{ zU-9#r)ioDWa3hz)63x9Fza4W+JK3}Ydoyt-pK9E(<+x?%cF)qOGh^kQy5vf$_i69I zNayR+nU0p{U#D3~pH5%qKWAU}&Z%rrmm-Sg%ZR$8U#t49pkEE3e-?B_0R6Y1 zm-|qs|L41h_zzV<@w!^2|EC^6Dc-1T>H(DE4U~ESrFa9S9zZGHK&giwE9OJ)8|cHG zF|C^^hm8KKkjpH8-y)rJB~iDVk+pjQ?^(Hmu*|#k!wgkOY>XYJ*>a&reL={;}Qt5>-qUb#s=~PS91BPZF>YNuiWo`H(>-tJ6>gw+_xvPj8b-k~o zy_%>o4CzL@+LuMssZt(LiqUCh8AW+O{~u}Z0UlRze*dp`rCn9q zE6FR#og%YHGQ~986w^ZQ)i%v^Oj}sl5G*f&1PCQIDO5v3hX5fV2|d(MLm+fQHH3r| zQYfK?Vt(hGxo7Y0TJTN&e?N~kXFoIVJLS%uJ9loY+1Z&Ncg!Ck^p44M_Bxzb@Ly!0 z`4q;%tvC)c?bN3gsWwz(e{F+SOtxUC{ZfXwLQ=Iuue+RKJQR+OHi$2}e9hVaPkZ-v zWvhwB&Cn>d8CLDxEF<@BhSA<#IbZXM?pO8gb6{Gzy+hwVm$ckBhMMov4qK?Ex6&@2 z!i0hMyqX+Bk2;^U+@q93P0yg+@;!rgICm(1g5yAmKjQKF0{n8f(0KhaI|cqlozDGY zXEretPrX)=+Kn8kt)|HTFM~M^|M$%;tBJ*b{9l`!>A1NWdNAkqK1;Rqf*>xr?Zo~2 zLZpgYxTp97(IquBT!Xu)hF+w!7n7E6B<(5wT=a)EY3~#LQ56ki!KqQXuoYRPiv62q z17(paD9Z*~a}9-M17(pyT3w-K*+5yO3J)wBD2r4T-bE&jCN36Sg1FyX+f#}b<~*n$b+XimL9_z2~n!Bs#! z>H6;&f>FR}2d`~A?VpdovJr_Q!7fR>%`oRviSJ+UR zV6(-zn90gkY(G|)n6<3HtS2!Wt^%{^h}qf|nC%@Jzq}&qtvO>KKDdFy(Pb!cVWxTs zkGDy^OOjnbs;CbLb2#oWabHi=*&MS^Ii|VzF#4`f$(fitJi}CB7PBbdV6e^3+{rIT zOgwz68#5x*K&`_R?8b9L0f!nd4w0)X=&IbcdWs80udJase-a>pe#}aW!bo4uSHlm z)a{l^?9Yvgf2pF1=dD-Z)??bf>8YYx-!Vs)VE9b;{PSwGj9#VzFm>rg> z<|9lN-$e4#bu13&ImaUJjj*3Z*OG8$2GRJ~8{*@EK6=corEd(bbXz^rZhWx@DzNezKdZO04p(?fJ+^NJ* zqcRQMR?AnAPAXea<7ZkqhbARx#@YZ&SkW*nYNog+TPx~y`cYyn`?~PPjb6tzC-p-y zN%Re-2#$23!3K$2c>i(>moJwL)v9iSpTjtAFwN$M=poD3ns(gNe!;Q~u z{pu1AqwTmqxX)|5<2AumxrLKKbos5-y^4U{dg0#`no96NlMs-@g+RO!%&MO*&xq#L* z9CN`df$_J00S+8CDPKKet%DPthO+wD<=8@jYGTNy0%cnSs{MzJf*bq|%h!Lj18QkX z$+!_bp6-YFB;V^%9?x%rb#m}QB#EDx4B6wot)%7WGts1 zW6K*LQ+!|aF4BsP+ORuwy}KrDhv+?|UcMBaHPZ}Qr6ncx76~DEQC#hj>@hIAw z`$Vc@L_8QBgbh{EZP;R)B5&#x zDs21{i`lGD3^>RSRjTxmrAimM`9fKBq~vyl2X4MV)n~aKL2GVZ<#q(+<_l?cYQ^mc z%FP$3Ixe>(C^uh4ZfXNO$%D-osP-FfN2KNE3shy`cEknI>b>dd5<509`*TRFC(_h{ znIiXyK=0*!3*0sEHCMH3n3D{B&F4|1i$^nG^Z6}lxqFpI$8gQ(v8u@b;hGQgLN}BEzt(bInt*P0B9Xs#4)>^76{q_S)Dx5gYEu3FXsk10Dg4ZlS@W?@w1c=%9mg zdt=HG3b!x|zAVRCpWc3k`#bo0ujrLJOoNwdH0V_GuW%RMAdrp@j*lZc9@5hKZgC%; zW7q_3mnt&7x=S>oFSpOqeBeHGrRKEWjMp-CG#b7kemP!iTT1W7E7tAdm#}_}O<>9) zAiQ++4bXw(dc!$s6rKMyJ1MJ|j!0aXa${8>yoCXGNO6;dKCT^&8%3NOqk?mD@cC1< zap3AgY-M=i#tBov&HRf;9W?}Qd%~SjVU`#lir9g~YYtKDJABU(zC+j4pf>_ee;IGL zSlZE`mjd$Mo&F4NsyYWF-7C1s=>eo$vEswu>64 zg0ZqC)i_Saik4K{n6a!S6*y)rXNi9*{IM}g{1ZA`w(=gJP|_I(^0Ym%$yi)>Krz?G zf83Inn1lZv(EL}Pr7h4S1y8WcmAkQLX-`&lM9tEeykf)9Zuz4I?aKFScc7Cc2cM#= z^4ts8*F~QuEgv|Q0h5OeG@#NB88CT8KcO8@_|M~nQ|Cuq$()A$BO39_XNd7VNRyP~ zv#`X#(uw9P?1NWf>duiy4erUoD6$KYabr~9gTy2_rNli*YrvmxHVFs(XAl?Hk@Nhz z#1B!fO;Ik?AwI0AW=x%u7genKd~#2AHRgr$$vvy@RyrR0BkxwKIUcdljg5m08j7rI z@XAxF{NsE!f>jPxthsUNQl6bWhr9~ss5!O1vmHAL{-uiAAQ-xJVf;d*C^0S9ch~|x zBOAE59MfFf2oYZ2Vd7NbTzY1E9AB46Y=-vmHMua0{xcHABVIJc!>r*oI7$va&)9O` zNf$pC{XJ>CAp=X9^GtOYHkdHr9dCnB?5q+bEzAF01 zD%w;02sHH9aID3Y@&i3Y@~5hV4aMe}Y_c~=%e!VzaT;h?5sePj(XF`{UW=Q_;xDu) zHxclz!hfyB#|rj*8T)3%^&3X9)kh z8mEgp0^_w@%sI-Dw*!Y9->=TGAmhKtl3kw7^RRVL<;1k8~r_IyN%V-hfjqRP}9lz=%F#i>gilt4KaRVL=B1kAyx z5_4Dr=4cc!pXm*6y5QJ^D2_%UO0zBwODT;Tg5}eFjzyJ@IV$1ohJ#Th=CB0J(Wnx0 zTuNzwioNnxnjDNO({We==4ceKW{w<|Qre=ib&vM@_%|QE=a3Z4w8c0!fpSEupd6Y& zIUrR~j!d8&k18k!CQuGX6_n!=C`Y3T%3&#tn1W$`%11AX9EvIua!exTP*j0ACJ}Qe z3Rv5NW0LmA*lUl5hxoT{QP<#5;f~`H?p)X45aT0C9GJ*C9#wLVOynFMDmjNH4Gw~# zR_P>W;v9_Pge8tj#2o%&d_;-E5_xTY9GA#z^W(sj(ym;QVJ3+Yl*3Q(tcKw@M9kr* z0&^T9=I|4jqr`EDn8Qy+YK}w19DXV=$01@4KNXnc5HW|J3f~-uG|$01S`+wYgV(*v zi|^rup1;giW{UN*nVX|W*G7l;lsS3~qvJ6?Q=Cv`J(kgx2e)vc*w*7}o%dB)kFT{}zbbk{ zZS=NP(GzQ<`GT3aVk-_jC>z*p>M!$74dKe^B0Sg3qy>)XDOske8IOXC~W_bD7@;!z#p6J4Mx_B8(qghLI z9eWk@OMD6l>j+=^eq?s(Ne1F2wH2DyW-QaQ0L2nl~@8gNn0bhV~rGmYk}+V#LgzpP8PTZHuf^{niu7; zdx^7KRitOX3caT>TVM6=&Jwy(O8r5}wXJgTGfO-Gmmgfz70VL)R+ulXf%8D#3m(p` zqcdzQi0T=P6uV$~FYD3sB4N6SaWIw0N4BZ>K@uG}*vZO|jf9C3J!$Mb58Y+UcK>4^x^Z;sppmz|9*=fSeHX=_ za8T{YnuafqtgE28tHy}?usM>0j?Oc>dMwc5F)_ZTVr@SsY_nQj9Ub#g-a4ful;zJAAdC$RlFdPqe>r!-;c) z1+Lj8x0pD$R0Zdz60h0MxsAlRZ9;nO=iE5rHTx&Gia57MMR~Y6LceLmn^W})+VF_) zj8(Og$Lj#8#8#*x?~RBag_?&ondanR2KDcsgxA4$V)dCn8kQ6mpdBiooFm4n)zWma zbuX_1gzM0U!{^r8j*L-}^oTOP*s`@>Mmw9$Ocz*;>K#}J-!0LSl%5I07gREMM0pTA z6d==3^*Z*)`Ot9LM|AJN#zWL4szXDl!<(yC*MT_HVO&)m>Jl^Ii}!4#ij1kM!+Ng6 z7}kLe47qm zdCcTrL|AG>*_Jjn;3a`!`B|T^%vh)KIm<|oZLcqGg3@$l>+`Fn(faBb!9Ia@9)^YA zWMZYn7IPC#C_ePq#H{(&xx^7C2hF%eixOj3gUM+52;)AlJB4;V*L8N^Sl{ic8(*42 zyW++dD!1#G-1x$_EnDdru{rXo?bqlFyt#+|zU1Z}MunSuSh{E>R@X{yhQDpOt@Mqc z&efWW*CR!Dz8`IrDm;MQrtl#CH1!Rp3lDK8$|M&y!&`nQZiZAwJxE6>9v0{A?OmJG zic$*_g2pd`5N!?g>gu$^1HHGJjsRWSnGRPS7GVEgik;0H6`L*k*3ZPmnb(Ew!*$aV zIFG?$2?$H0ELL)mrO7{xa_RC?TE$8ZvNV;H#YzscG?kRaN)EC#F%1XJ9=s5in1>fV z(iwf6WwTj|wWBk8StEW?YNly%m5 zMC&wl`>;T5q~${s+k<0Y#dCCY8OBb{k?0$%>vS2YMqv5|rOQAy?$dXCgGwkxJM$|a zNPCJCRf-PMa*1_iq9zC0AqOU}C=Km+@AgQ1&acED$^3nxZBhxWMya2NlR<35P=Ha) zs$78NU=F`0x8Yr<@T{qbnx}8i5L5Ad^=g4MEScPz(I>Mszo8Et2i|F@9z%(- z&paHQ`|8CGs&OZaQLZs>h~xIW3}ue)hpVYSi=9#-L-p^+o;0CptvMAeT+{ITGq&)U zvHLKL#ViWO;=J#YlX>G>9ii+VL-OyU232G86KHc5xT4Kja$XHmLr4APOWL}Nm8@v% zZu}m)tr=6@)+9rPdjb#PGI)}eQeW-zRX3ST&bxr?f z$=Sa<&PV^|kEq#k326*|74BhY*EUEdu0+Ux(N3ZP1Fs~h_NYBYmz(+EB|c)6F40ln ztmP6i%aCxxJPp|^>8^RSNu9U$`H@$F$3On%rI5Bmqq4x&HjY4ZinLr zdRTm|PNT_KBm}LwYkypz@q5)C;Q?YopsoA5k7{N)KG3(SZ|j~2nkx1=sn3kUF$y1F zZ5nu#E>}RZa4jDbuuOa*A5~x!KCM>ysXLBz1$<4}pSm0B%W}Qp+iDjl)_ppBPi~t5 zd`l_a6Fz8Hz~`;BUQn07Cn3E5*R;usp++_D;9M!tnwDBQ(3&>s3ACn7CV{3jPt`77 zeO>e>4jro?MVQ7>mAmf~D0J0O@mlXT1J6{{>M7MKjBC8L0T<)4$$|6uJ+C~A66C7N ze@4|d!7^+4H{TM}R6MZiH^0WTLDe@J@XAH_X{@*thzBcNA+cSdyqPLKlrZI2x%Rrg zO?hWR`AtJu(j8=(upqm2`6fL&0~o?vwhnIt!AVAVsmYX^qH+8h)OQEg4F<5L*FV`r`SfYZs?a4%JCIF`6~HBCOmIoLl>R(?_-yo#_7{^HSH zPYN(194f+z8B%D@xfj|aUemz4OC}?xBfk(AjQYoas znuOYaQi+|B5C7poAU3!LsWBKz^h@`tuu1i0$P$Z?D$-+|PQPl>F}L2!lkrOy`_luj zvN`bK*s^hY0G|&@;}e~szaNe=gt@$Ww#w0vOsO;A_PxKC?Y4}5=*AlLbsx5G=DxQY z@(%kRRe9gT2h?i!y^!z4$QK_p&T1lqW?mgu{i}y?aX4+oStBW?E8~;Z(-mT#^2r#d zx@*vQtq?Bm@5L*!c#c5Ys0RQBo{P+3XEf`&X?DTMRf(kyO+!^~nsKO9^{|vu=2dy@R>71vnemx~sz_O6N)c+o5AWHgH=&pe+^CANutr;79v z%BN=#lIc9RQi)k&-z?wb6w1pCKUFzW)x?~sXV z65r$jH!2_R(_-C+xB?x@NB3AarPELnwI03qPEY2aMCZqAhoYB*;XvODhzmX>>U{=;_qsgI=FHmA?!J$GXWGeYIe6b6w|J!-LG=&fg7~(Jjg3 z==@X2xg_gB!hY9Fs1#W?+$k*?o z3wy#7d%+AeQ16Q977_rP7)StYY9IlynSlhr<^~b~Uo(&Z*up>pU`qoDfUOK90Jb)e z0NBPr0$^JM34rYkBmlNIkO0`hKmuS#0||hg3?#67bmUjYZGgR>BnMtVyOnl9eDv@aTfOE{7Y~=xw-gl=z*7^7vO$Vc9-0;RK9^}Plue9Eg*8T*c%0TOM**g7|);rPKmr~2tnZ8w{l4q8) z9{7~!06WvpFHj72k0#&Ivc zJlhO^%~|XPG@0^JUwbl_my=vGI(0K%4KBQn7>#!m);N4-^s@_t)|BSr z?d3h8t!3G${ZPfWmd4U7RHCgVQ}_c6OSAQ(XOQ8deUYNH7gVmjb?SW>6tgXZ{F!Y% zn^Bp<8#LLCq$VQXg(~)g((eCt%02$;lzV<<%FqF4GEFO*wKdy{lCo|y*2Ma7L$;;x zM^vG@9UF`7b1-_~0MIo323+06Jn>Jg=gt_xDw?;VX*&;}wfaG54z^%^JhmD-*Ej@= z=Af1G6QOeL!~51v<|jaAho4OxwfEjA%TRnD7I`>|JUlx*IGb|s(pAwD^6K40*G>|NktkXk z<9ZJNo1poR_tZDye<#?)3f_)mzbs;eowJm>y$+W*=#Z-l)j4JBDl=)A6=jpHFNGW$D!lh?QEOe! zVMr&%OVH*+_`xWR_X%m(oADI-aG0l0MbURd8`c$nR^EUki%&rpGyCHp`4`l0!N4iK ziF8xCuJA2{$@~gv%~ZPZS48RjejE7MJ@&!9q<`$dH<7kEQ&%`Sw#mpQ(_8!}R_q5> zf*U&RL0IK9-TU5G7l*EUsyz4TgY}_En%|E>nQr5JtvD`)^P}15s!i$Kl*S}xemi2D z^d@`9cjWt#HRltl#GXjM2kMZVoIUZP2HbnsjoRn$Maq#F^}`&aIg|ez>fG`q*3Xl9 zJQdqCuq%Ey6yCz$d4x@PsHJ=@v0^90oKnw+tehCPN$A?i#JI$2+j@RkpV$=nV;-3u zxE5}4;8-0cD{O#2{gW$xaP6xzgO8A7G+~OybSl3ZLM>}$aQ6L2o_uiMSOR}D;cs|d zU13wC$WKZn`ug{+S0~M_*`MlPHKmC99-*kuhFyMmeK0Cqhr;x&n(7~39})-9QW;&T z>q3cF4q+2c(A(3QB`wLihWg=kDri`FLP7t+3G=R=AW8u2W*`BuyMYA29tIKsdm2ap z%ruYym}MXVFxx-^Q-y8NKrGK*j*tM@+du+f9|H-1eGMdjQQQRGCONnO^g9!AWXHP| zW4Vy>G#>8{z`)x3UUDJREz2=s;Vz&F6J{qD(x8IP6r}009Bq|wX75`ela#W`-@}0# zR}yKP(%*pE@Ww|W{>}e`J8TY%d#U{PsBv!Du-;;7KAvR7YG1B5c`Q}xD*jb`@468R zzqUy({H98QmrEwK0EcT63ojCSq>M1j$LTkwc^=tP4Vhf)tBXKWgDZ3;>YC~YW}@CZ*Y7m&Pc%j8GL)!(r(}u#>UUarDT0B2 zG2)C0@HWBe0bIfq?+`48>S(U}8hrEWKQ8ts62tMI|I)=H&ywWtE_yLo)grKzp6QfM=FXejd>0hx06MX8Ds_qq4`%uo7PZ3v5De%7h zkyDSud?VYG9hv_nw@8+it@^K6h38|kz;4JkIatDHsNNuZ(s(4O*Q6#s$Mf9*FL6i_w0!5 zm{5qZ@W9TW9b5Q}9uVOojdRqva+I5Eyrag4s4>WQOm<9m1ddx*)bBLNaRZO(d`^$i z6`<%2vYDUZ4wG^16N>AgT-gbQZP{1x(!c1lNV(Rf$e{`CrTJaPQw3j z(7Z1QN2EP?MB=-jn$XesFQ8;<@Csx;unbw3sFDjgCZ+Uu@NCEu|5Q;9RRdqpfC?Ts z+-b~9YRF6J@8D^q{8L3a5)LHNFs7=CI)w)OQ$@c;%0E@~R8sz_q8wERhS51yRn)g> zz&|MOtws}I@uC^ z;^GGOoHSxO^0#9v^{pV ze&E1R?ylLof!&zCQP-|n$|H_Qj0t6|OMDZ*_eL2{yb9Z6a>tV|yV*1yK8X~Ipw}Wu zbq`#Mxj>KR%}q%eq{DQXMx`r}rqF<?G= znsT5K7Ap6*up?t~2aVQ_YvxR%onvk%mZ`Za&z8Pxpc4pTC)!a9!ZCJjQ zZW;!E4m$V~{0Y+#+=nKV-yg+5s^LgA`KhJD+lDR6EgF^>6V9vQas(r;L_}g)?yPbI z%cQyfn8aE;ggHSnkx9%sH0UvFWD@9aiG8_^2iZpXd$5aVN5wY(=+CCo`EAgBOEj`kPtu)DM`U#I5TzN@ z7=f`-l5yF(K=MDse$}a43~>u@L!krp7{F8z{Vd17U4>2t;|g5}8ge-#Ds)p8M&oZw z3SWZmMzg5Ril-p6wD#)Yap?-!i*F<>zKypec~{2e(r6H0stKRR?@lxgW@U-<@qYzq z_QC0?p3YhOO|DO2RT=YboR1|FImGdNw6m$NF5P)RQ#v)}<8WAD9ClBkzt7>U~4So%bgKE<6W@+62qP_J* zZhbCJ&quQ^(PZ>{DdaN;lSv8=u7wS|(4lsSM0K`w$HNjn&{|kOi+gz&wJ&cx3Md-Ym~-@AaV;H}+0BrKT`b&p^|uJXj^2zl7zPmu;R$(cXd; zz0+8p10vCm;y3hdhjl-c2Wx4Ca}kRbu;GR8G1=ru6fVWDFeHq|3Y{XwItv*5Fqfz< zV=IdFlZrCVI0~bDZ84{#m#CPS#>~g9ami^bf@DX|qsBBcTNsTdnbt}ebbA{Lt4AX+ zRcu(&Q&^pi*Iwvj(2;8&HT3~hJ=>8TwWK|l&CSQMZgSf7M7ep?g&%YvVQ02;8V`!u z&ccuIdp_1glKmS+zvl5*dsnuruoQ9q$0j3H7=!+jKZrYdH)e0`rR&fyGTH9J1ZJG$^Vef1Df=2DU)fPu)Et!^mF>X9j*GD64c`V(M-WZ3 zuFAKQ0$+t~aHl;hIbaf2*iVMYAx-z6J^l>k(Bq=<+4l^UX-!Js2M zt_)ei=RGdCx~iPkG3bjVV{83L{`M?J^WB$i>t6GSr}ROL+2E zn1vLft7G>KKSM7soxrR!h22@?{UcG>fxmXG{MFuodQ8tYM0@y4=sCOq5`2!w^$_hd z?YJrB$86EY!V5@|ZPG5JqGlVg|J)O`&A3pw{!vkZdH>+muuB&vp~9)cDCXZ2!gjV` zTecZFw;Q<`$23BErptrDdYS`moS7OO3c34ikHq*3g z{!`pCYc2Jeopby0<;5maP4&u{3LajP9 ziccmQIhB)^wvn7L;skwQK8o7jhA}id$epls2fI_Yt*|o0n}tfYCvkLW z%eLnahgr6@kmnJCqix@|@lbmf%GTeVOk$*^%paw+GCPtoH~&ngfUn#r3{Dn`61 zH)Kal?##BGh}W?;6$WV8Hux(PuYE*cBfO0$@ds*x8A8+aUW|qqfJQFMeZM>a`SPGn zjIZN~F?N9PNi>X?#{i_GdrsI{Yi*I}*{u35RZbDkce8HITC&b*$82KtpfveW3|6~VA<=4Uw?qph&sawcolIymG zA5lzc4$1_*KY}O~Wko9fEb$Lg9T2CYtVqS5CH^Vr$RaDpwUHx#44I=+(R)Rz<#SXj zdap=T&JmSen|&w~`cP_F?g!;Qgr*4%L=X8Fc}j6B6fi;EAb+fg2HQBl4qW7Cvlh32 z@#B$if`^vH9jNQFIn!zjq+ z5{?_=68?jU32+N>C%D+yRnn&rQV>MhSd8(W9hA?xy~g%V~LTh;-?4I<;^~%hAo1>6(=; z6Q^UVl(dxGji%vgOy`Uf*l9Yu*IFGl>B?Qf!W53>VHZC;tABRIKl}DW#nzhrKiLeC zxWXf2yW*gU_e z=Rx;B_yPSng2LNDXUIPdIz|0a&|fgkzwxKI*S?8knlptxFc78-AA`)DJ+LwI!Ivfa z`1Rlm&}S#nSSWhFJG_pmGroyAUEKT-JkFFq1@+Qh z&FSK90Qv2ZTmCdd-z#5USH!9M1Ps(|4O&}lZ`AF_?M-dX@iZmRs~c@C@$5tZmt52g zUqfNr+w~!tw)XrM{Du8l7jeVIlV$~Lx3^(1h;d05RwAJ5Db2d9Qkjmpq__&h=wi&e z?QJbz?XN}tD$|wyp`cr$pwqVv(~9}I0b0C#}Mt)mll-~&17Pf)>P8dwS+U_s9t zl~-gro)kU;Y|r&|wdL|3Q{o&g+xb+y<-q>~KKV72F1IYVPPx;gbi6K!v&-t-GFb39 z9_7XGz>5mgpZiobYpA@gke`PmQU2XJtlDQ3aE&4C3b^iH+!uooR^H1GTL2vigmtl) zh5HYpcZlE{G>hkAdh~y~z@etn#c|B2KI|!Vh=YrCF8>TBr&uAvVw4Cj0)!_Rc!r9P zsAtnTd=>y2=l@8NpU3@75?@MhEXT35AxdS-G?Zglh!CSJG5Ou(pfJDYlGUB~zcY3* z&##mCy&eAS4fbQ4k5=*(Fbww~ehY+^d?&CeVBf6ZykDva&gVhYPIz3LV-xnAuNY47 zil!*dmyb*7;yGx?37e{wdY(%po0rF$6Em+oaSysmT~LX?5m9`TNu#Nj+9&O;HK z26lv}X8py4kXE{!hV#Ak(B^IRx}?^g4jn5a8>~5`bFdERYKwrF( zovSHac;loYzf*Y!ZZ1BC$XxurXQ$%@u4(UKizEl{hcxCgZQ*7dQv1gY5pfG5+FSZI z#ODr}Zf9hJRl?;QU}AL}QifFa%nS>=zybw+g9UDh_Ya_d0ilCnXvMeVqeEJA@v|Xm z)1jd=C92Yn9+LJBK^wBoVc=*C1IM*tNNlVeIB+w>1~84@C5m5s3qLjoPtq$6l$qjb zD2Cz@uBdvZxD)c}sv^gMWYoMd#(uA{KyAoXWet7x zx@To^Vag z*oCJI6WbucT>P&bqt3_gl@NDF1z$1Qkv{>42JEU@S6Bt%5!_c7N9zG6hV_6Ff+Wt| z&gPlhnfQ}mAS;eBKS%yY(&l@zNtI4Q;tni7b7UAiy$=0-0bbkEk>3R`f|$HJL5LnXYpiTPjmhXv`PQO;>T!@@M`MxAhYVnnW(ZXoP`45Y9mLO z5;sHiI5>A~_k!>tL5@-tOsc z|9`%|H#t-M*UH0=>8mfU{O!asUsA3;$`w;-lcBV%dwpUC>Rw>oYnJ<1VJ`QL$8z7q zFR(MJ_E`8+OW+Z&XyFf2rzx*s?qgra4B?9v9@3Xu0*~S>=c_KU4$5`x5WYT*e05|R zP%_n8YkwDO8Iq;JGUSws+VBb3>Db5dVCvJ{_UHqTx(`SI{MJAM;4uRUfX59a0Dfm6 z0q}%@1i+I95&%ybNC2ojd^Xd5uA+%j>cHL*#&oG+;=;Ba;hA0MJN40zjtB(>~sC3W@4MyoERv z;_nPXA^s7|f6@>hnMhek05G|L1OSZ$BmiW}LfFT@oI;|y5N{(6g?NWSD8#$5e2<3k z$VAFQ0)WW{Bmih6AORp#7Q#OM?GzHlXmjLB?}MWNAB5mTrh+-C{7C>XUO)msDVc#y zK5_~Pr1;oC0^mOe5&)kVNC13lAOY~1fds(k1`+_v3?u-)FpvO9v_?gj02pQ<0gyD1 z07w}~0Mr>s0Mr{u0Hh5h05S#=01XBb0F4F`08IuG0L=yx04)X*0IdcR0K*L=07e){ z0E{${0LU6h0JIrM0JIxO0CX5g0E{w_0LU3g0CXBi0CX8h0CXEj0E{+}02pH+0Wj7; z0$`kh1i*L$34jR(5&#noBmh=0kN{ZGKmuST0||hY4I}`13?u+18At%EVjuyKH;@2W z)j$HE*FXZG&p-m8-#`LjvVjD^Y6cQMn&wIylOujT$4dZAHIM+9W*`AD-9Q3heFF)A z4GbgzHZ+g`*vLQvV1|JNfC|U~$0gmwDI}0$Qv(Tr%?u;}HaCy}_?m$Pz!nA)09zVJ z0BmI-0kE}!1i&^15&+v8NC0eSAOWzwfds$~1`+@}8b|=_WFP^svw;M_E(Q_+yBbIU z>}DVVaHN3*z)=Pg07n~002B-)0FE(`065k_0-$Ih0WfGFfrk)gw_r+vh=q=j04Nzq z0Gwzb0q_k234oIfBmhn}kO26mfds&}3?u+fF^~W_)j$H^Gy@5MZyQJeoNgciaE5^d zz?lXT0B0FU0DQ+l0$`DW1i)eg34pT=Bmll^AOY|_0||id8%O~Bz(4}v90Lh}a}6W_ z&NGkzINv}5-~s~)fC~*I0G1d?09<4s0dTQ_1i%jsBmjP7AOUcRfds&%1`+_58At$J zZXf}0g@FXXl?D<3R~bkETx}o$aE*Zkz>f_i0IoHV0JzRT0^oWB34os%NC4bmAOY}G z0||hi8At%!XdnUba{~#0Ul>RL{L(-I;3fkJfSU~@0B$jm0Jzma0^l|S34q%TBmnL( zkO26Vfds&v1`+^w8At%!Z6E<~kAVchy#^8h_Zdh4{MtYQ;C=%MfCmgD03I}u0C>ni z0^nf-34lioBmjP6AOY~Gfds&B4I}^_Gmrpy+&}{0cLovwPZ&r5JZT^S@RWfBz|#g2 z0M8gm06c3T0q~rG1iz0RCto0q`dS34k{ZBmn+wAOY|f0||h?8b|>A%|HU+EdvRF zzZ*yZ{KG&3;GYH(0RJ+O0C?L#0^l7334nJEBmmwskO26%fds(&1`+@t7)StoXdnUb zk%0uj#|9Dr|1prjEaR3|%rc%YFDQMAc$^A<7J|=1uq*^vCC6njtYRff!yq{~`2;aK zC6)l7y?_J&Jqbtv(5HX|0KE%H0DNH}0lFlPY?0G2^O0$@c0 z2>=#NDI@??Ko-m;?QseTv_NvDI@??9+txeTiq!nP=EAO z*MGTwu_h9u{!>D*7K2=A?GUUJf^`{$W|&GDnqe9wn_&%x%w7V39t9)-=vzPnfVl`r z05CrR2>|9SAOXNK2uJ{|XCMKklrK!m|8#rfOY~B0Q4Xr0U%%WVW%5Ag#=P;VjuyqseuH*W(E=fn;S>~ ze9b@tU<(5YfGrIq0Jbua0NC0<0$>{h34m=4BmlNEkO0`;KmuR~0||f~4I}_|GLQh+ z*+2qd7Xt}^T@54vb~BIw*xf(^U=ITcfIST)0A?CU0L(Iw0GMqc0kD^W1i;<~5&-)c zNC50>AOWzSfds%D0||ir4I}^#FpvN^&_DvUBj+X#9+CTz8DY^UD~ z1`+_L8%V_EJc}IhXEj3P=Dj2LTBH z<|7~hpxoFn&i2PnA%PUv8b|>A%s>L*Mgs|epBqR3{K7y2;Fksx05=&(0NiXK0dR|f z1i-BZ5&*XuNC4b!AOUcPfds&>3?u;VG>`ze%RmC)ZUYH`dkiE1?lq7AxX(ZW;MWEc z0QVb606btI0q~%K1i(WE5&#>Fh_)d0L(Cu0O-m_J|qCT4I}{YWOnF5 z5&&ZiBmh=2kN{ZOKmu24djM*#)Dp4RD`bB(m}FxKq*%p30w8Z70kEop1cr-oc;*H> zVJ|u26*3Ql)odVv6nMHkR8j(94Fd^)H4P*HrWi;7tYshpu(p8&z&ZvJ0P7k^0N~94 zp&SwbQw<~lrWr^89BCi{aFl@rz|jU000jdHfMX0K0FE_~04N$r01OyN0L(Lx0GMwe z0q|o334m)2Bmk~6kN~*eKmy<=1`+@_7)Sv8)Ib8@X9f}gHyTI){MoG0KYVl z0JzCO0^nu?34mJ+BmizTkN~*NKmy=)0||gT3?u-4Wgr1?r-1~(T?P^WcN<6m++!dC zaIb*`zVkN|ktKmy|Sz!L@%08bi706b+N0r0ee1i&)}5&+K{NB}%%AOY~afds(s4I}_w zFpvOv(Le&=B?Ae7mklHUUNMjWc-24xV5xxwz-tB)0IwTJ0Q|u~0^kh;34lKuNC5oF zKmy=R0||gX8%O~B#Xth!uLcsQMdysXV-)}1nNj*1;*-T!ao=L;EhdEtk)}Tq0E*zD zz$xB#3JIim$3Oz$T>}Y#_Y5Qe{%s&JySiXl(E1PKk?wt`lK}X@Kmy=H0||hS3?u+P zHjn_2bJobYeBu-mNb#wG1i)to5&)kYNB}G|kO26?Kms7q7PYJdz%T;|fTV#0K*~S@ zpw2)7px!_NAZ;K4kTH+|XfTifXf%)jXfluhXf}`lXfcogXf==kz{{>eKav0#VITo8 z(m(|&s?S3)c6Vbgwx|i^dGq$u6;*%35l~#_@ zO=QS)5-?oBKmuSz0|@}Skck9|(G@gz{ZKBUN>;bvRJW+P(p6f&(rzr9K989J34jd^Bmg!tkN}urAOWzkfds%N1`+_9 z8b| zkO0`zKmuTruPEHsb+ zC>clqoM<2c@C^eAfRhX)08TcL0QjbX1i-fpBmhn^kN`N+ z7-_y|BME@-8%O~Bz(4}v90Lh}a}6W_&NGkzP;M-Vv%SD6B#`1l0||g71`+@l8At$J zY#;&fLjwtb9~nphTw)*raH)X=z-0y!0GAs`09;`p0dS>(1i)1W5&%~lNB~@8AOY}W z0||g@4I}`rGmrqd-arE2Ck7H8`NoxQAV<7HZUlp$+CaknBP>tf78xm|k-_aYl5j4$ z(jAe3LK+zS$_5g#!JUzTLK+y{Wdn&FqCIf*qSx`@PU-H*N+GQb?y;3boXx$FfkGM> z+-C!c*x=WZfkGM>+;0O3H0YxS5&*w7kceGA7P(YNmj;j9Kq5ByU1Xq;1_n>qKmu7l zX&?dcl!1g@;?bqZr9!$ic*X`2HprF!6d5R_fx(+LkU*AyHjn`Li-82dUkxMx{$?QI zOgl?&kt1FqGd1|T4J2%kEBzxfP)GxVf7(F82A!pUMFt9KVDPpLBy51^WFiBFG%$GA z1`;*>^u5SRA*~GlZ7Ye{QSXkIGv1F371Ge)0~<>Cz=YZUhmnOsS{Qs}3yGQnejHgT zq?N&cY$bth@ri*%+%TU;9u(4p!Dlv*fQQcwBw`QCA`c4b!QcxUNGvE10ep6^=gDz? zu|O%&9=eM{IxrZ<2m%QdA!#51kTQ^PnYv1KkxPa2U{G%Z2^)+qHAMyrX<*Q70|^^+ zmf9i%g)}f|w}C`#&=DCZq=CUG8%Wq7SIR{O3Ta@_X#)wgLYILAK(~QJ>~eJEQXyR$ zjIn`4Y%n%5P)GxVaW;^!!MM`+$Uq?t3?|q>!UmnCiIIUq8W^l#1Bnx(-qWQ6NKa>Z zSG%mVV&p*~Js7NH4-(EYS6VqTP)GxV9vev5ptCe7GEhhZgH>!GQL}I6BP)fpGFa7C z63zyfydndIG%)D1fyC_PMw`_mLxnUnSi^=AaZYPS1`26lFvSKE%jdLKWT=pa25Z|; z!Z~%8)`<)h(!gL{8%WgTgmu^TBSVEWG}yp~5^+u&Mg|ILV6c%5B;1k0Or)o~q9bh@ zc~D3X2AkP~1op4Z4J2v`kJaq2MV=JWlff1?lz^u#4J2xM&{mNfg>+-EwXG!JW*Y+u zH%hLwZR9~AJs50f0||K8-aw+JO4uGdM4lAVlfjNQlz^w53?vqmhkefcdY&9p9`<*R zJSwC|gI(-EBCgD?k%2-Q80=;PiP&IfWT21+2D5A+5gW{o3>4D9U@sd;)bydQiaxY= z4U{UT2a>B(S@4JF`de*=k{K6F6jMj_o89B3;ExH-r` zqPjpQ9kOxh;K-9gdNMe~h7#~}sDXrAt2+$c<<`3AveIFZONDf4FxMU=;PP+-iR!}P z3R3Ba$df{PGC0zP67Y1CfkeFRkB&Sjqz8k74J2ZNVgTeRgL1OlDd+YZjLxnUn_<;>2z9Q>$A`c4b!Qfnbkg$gdBg5|W zWV&4a^CAxl>A~Q9dyt5?*aeY+LK+xcXakAZU`b@4kOl@9*+9Z&jQ03k#rSw}53>DJQ;4&LZEN^&uWT=pa23OcnqQ($o(Up;* zLK+%eWkZSSQ76iku8s^8(!k&v8%SXA`muooz_kVvcG*?BE^?`mE)A}?fkbTZlgL0J z4GeCufrO7PVIE%kMP#LrRtCScm4vg&m2Qd*6w<)pW*bPv2Dd~83Ta?)s|_S#gWDnl zg)}g@-3Ah|!5xu-LK+zS$_5g#!JUzTLK+y{WdjNC1w-tqcSjx+(u2W0_8<{wd2eK( zkOl_#*+3#T_;qBUkOl_#+dv{Vcpx%RNCSfhZ6FaFJQNuyq=CW1HjqFceZ)Wl;5P;m zvCBszmkR09;I}rAut8_(vB*Fn4GbQ)fdsOA%0L3(X#)v>XAC3&o;8pFc+Nlq;CTZH zfZrQP0K8xz0q~-M1i(uM5&$n7NC3QIAOY~Ifds%(0||gVI--RW34lEfBmia_NVrAE zm1dD6ULjl5V73h;Y>+GM6&Wa`fx+H3knp;6xPyA1$VefL4ED8=1j@0Wfds%D0||ir z4I}^#FpzLb$CVBwN4!F2YH*MZBw~YuBLjsrFgU~p5;n+{4vh>H(!k&_8%R{Q#oWk9 zA&m?Uw~@p~(a~bm(WN6I3x%{WIMNmpsOnJ$5&%aVNVw!(r9$LVAzd0AV*`omk{=rx zDWs7>(MA%;cECUaV4i^lzTa;38(1BEm&_>K)E zVuMAIfkGM>EVh9}Y;bmDppXUz-?f26Z1BCvKp_nbzHb8w)DqwG3hTHM0OuG;#4gW` zTq>kXgY#@40T1UJNB~@5AOUcpfkd3g5^}^VWF7_=*+2p*E;f(=_@RLW06t6>Dkc%< zaS1u%6*3QlOKl*56qgxD09XkN|kdKmy=l0||gf3?u-4V;}+WsDT8) zZw({>9y5>tc-%k&;CBWR08bc506b|R0q~T81i;e<5&+K_NB}%*AOY~4fds(w1`+_j zH;@2$!9W7wMFRbc*Q^h;8g<&fTac!0IwNH0K9G>0q_R{34k{YBmn+s zAmPJ(Q8%0Xjd4ixC#R7Bc+)@v;LipU0Dm!%0Qjqc1c01#?{_Y5IfVpL{M|qT;2#DO z0RJ?Q0Qi@I1i;${5&-WQNC3QRAOY~6fds(64I}{GH;@4Mz(4}vLjwtbj|?OLJ~og5 z_>X}Ez$XS00G}F20DNX30r0tj1i&%_34kvQBmfelu#LGHBmjmPNB|@aBmhzd5&(4u z5&-oE5&&rf34n}&1VDp<1VE#K1VEF41VFQa1VD>{1VF2S1i)|u34jp>5&$C&BmlAo z5&&%m5&-Q65&#_r5&)wNBmi;-5&)eB5&&HW5&+!>5&)wOBml-3NC1pAkN_BGAOSGm zKmuTbfds%r0||f?3?u+nG?4INeq3oKa>OfS4>MTV1`-}}!u?AM+ORM zV6cV_B#`Br1`+^M3?u;7GLQgR+du+f9Rmq~bqyo{)-#X*m}(#aFwH;$V7h?>!1@Lf zaa}hcN4!GT)nG##NFc>V1`@G{8IcEt^kA^D4J6=U69Wl=O${XMva_^Vr{w1BEm& z7_fmv%@!_ShM#d+XVo^!nYz%3hBw<6dOvw)2Rj$@wPuL@}Q6&48CmxiP+%u$Uq?t49>8DL`_+-@17YM zDx{&oSvHh#PTi&NLfbT{Q6w-mg_v}Ez zn|g?$@B5Jlh4f(X1ACCDX)SEob0R~9G&DHZh7wzCB3T!w?r4FNi!S zqz8iw?Lop@ELU0*87QQI!9_NZhz%}|3>4D9;Dc~(b4Gpfbp~UoP zN63|a92qF2fx)#lknorpU5dXhvQkJZgX?W25ohz0$Uq?t3~sQ2gty)hJ?y8E2Zi)t z@H2amh_k#gGEhhZgP+?#A~yI%WT21+2EVj{L~L+VWT21+1~=P4A~v`sGEhhZgIjGN zfid_t0||iJ4J2ZhcSJ4~(xt(#Y#?ES&eENcfkGM>++_m^WO=uN1i(E85&-uaNH~vi zrTfScuaJ2d{MrT*HprFkj|>#jz~BKJNce<3T-bduGEzt*gNJM+u~F35aWV7Z$U-44 z3?8wC1WNuJ0||gf4I}`5YakI<pP)GxV z7i=IA8@w19D5QbGOE!=|pefB6j&|A z%RmC)Z378_cMK!|-ZhW_c+Wrr;NJ!k0Ph<}0DNE|0q~)L1i(iI5&$0?NC5oDKmyWBmmYlkN}usAOWzJfds(X1`+`47)SuDYajuzo`D3wR09csX$BGi(+wm5 z);Ev<*uX#nU_%25fQ<|!0A?6S0Bmd^0kDaI1i+>S5&)YSNC0eZAOY|-0||gF3?u-y zG>`z;%0L2OYXb>@Z44v;wl$Cd*v>!#V0!}zfE^4Z0CqHx0NBYu0$^tY34mP;Bmj0b zkO0`tKmuTQ0||gV3?u;dG>`z8X&?bG%RmBPwt)n|UIr2XdmBgq>|-DSu&;pxza~M;S-}9Bm*GALNVVh%Y!^0^k?}34mh_BmiW}LEJtDoI(OA<{3x;%r}q#IL<%< z;CKTGfUg@!0GwbT0kFV80$|WU0$`zm1VG6^0^mdg34m`HNC2E{bE-;V) zxX?fXV2ObQz(ocU02dob0Q}HE0^mmm5&)MNNB~@FAOUchfds(i1`+^Q7)StIX&?b` zm4O7n)dms(*BD3u{MbMO;93I-fa?q-0IoNX0QiZ41i%dj5&%CnkO26Zfds&f1`+^2 zH;@4Mg@FXXFAXFBZZePnxYbe0^m0W z5&(}HNC5oSKmy<~0||h~4I}`5XCMLagngjDZBe zvj!3X&lyMnJZ~TY@OuLZfENrT0A4hZ0C>qj0^nr>34m7&BmiDDkN{96If%QquQ`PT zQoL>;fkVO{0BQ~iL~JUB^k(pejU{0G$K{QQXsnRN27j`#1dQKY-k6BS3TbTcXB$hv z_%F*F6VX^9jSb$mu>?}QV;}+Wu7L!=dj=8!|2B{Sc;7$*-~$5*fDa8M06sF10QlHI z0^mOe5&)kVNC13lAOY~1fds(k1`+_nI?*m{4+(&zfdoLxKmwr7KmwrNKms6bAOVmu zkN{{fkN{{jkN{{hkN{{lkN{{gkN{{kkN_BNAOSGKKmuT-fdoL-Kmwr6KmwrMKmwq{ zKmuTtfdoL#KmwrCKmwr4KmwrKKmuU2fds%90||h!1`+_{3?u-?8%O|5FpvP4XdnTw zf`J6UiUtw@D;Y=ttZX0w&|@G0Fv&myU=;%ifV_bOz^Vok0KEnh0DT4$0R09M0FwdT34k>XBmkxuNC2#5AOWzpfds%h1`+`48b|=FXCMJE)j$GZnt=qs zbOQ;1^$jEdHZYI?*w8=%U?T$wfEfl702>=f0Bm9)0kElo1i)qn5&)YUNC14zKmuS3 z0||gF4I}`zGLQh++CTze8v_Y|Z4D#*d z34mP}wza zu%Cehz#Ib!fc*_501hya065S<0^lG634ntQBmfREkN`N;Kmy<}0||h+1`+^=8%O{g zVITo;q=5v$Q3etKM;k~06bvK)jxmq`IMzS{plBcgFkm17Fwa1u{F>l#e68Yq#3hT8 z$1xd_6X}R90iXyT;+^7nr;tF3uNz1JoM0dUu)sh9V9-DUV4;BoK*>M?;6wunfd9wc zn?T1=Ty4Xxo|*1hB-yQzXC!%%u#spqBNTMYfNcUc#)Q}`ZCVBrMr{lP z2w+Scc4Hu{2_%FiD+x(}>zh zs#{gJZY^E6=8OOk2Y@vJAPxX$27ovKoD~4#0C08yhy%dq0ze!9&Itf<05~@Q!~x*E z01yX&&j)}w0GuBH;s9_#0Eh#?g#jQA0BZw48~`o~0C50V7Xab_aB%>L1HcyoKpX(p z2Y@&Ld@%sT0pOAV5C?!u13(-AE(-v00JuB=!~x)n01yX&D+53r0ImuEaRAs50O9~} zbpVJ1z{UU&2Y_n=KpX(B4FGWfxGn(10pLpkAPxZ62Y@&L+z&5t z0N)^h_c#6bxBU0F{r7kHJ{8*$c$f3)-PWH~j^gHq-eND#a`E@1_Q9L~^r6Lumi3sR z|D8MGF?OPTps07P0fom*e5d52cWHVEi&J1tn}~FozMIf2#bdURGg=z#xtazZm`B1{ zg6u}JX4x?8d4Qipgog3pL(6D|PA!Y*NGGWsZfM#N)4}cw^RF_G&gP-b9hx!p{6t(* z&bm+qYaeLRS7#cuto<%ROWi6f=V;_qm{CLu%(>t!g}-_xZy+IA4N;+n<_yrZZcdaM z3VzM??WMc3plt1bBVxh+5B~NbS#nT4u}w?5hXjH4TTD70baEKSZr*`Jc|sLeX0$#Rtg1gB{AHKk|Ihc8_m zoL!$7OCzjEZcUl$J&2%0V4yiu{hs(J3jGtcOk6aa25>iG^gQ(fWYg%|N7ZuQN7HQs zyJS?kx(oSKsa1Kbl$-(CXr+n^@+m8&&~?jaKBH&czXla=v&nS(U-(-#(zBN#X&t%7 zs!qh|9a2f3n>cW^pBb7t6b}V?_krz77t$!?jgsG)Rkbt3GJK8;Lvs)|!mvrYW%__mWxt6OtTYOkMi!q&yuM3Enp-lP z3mY1=iO!|e2UfaoyFxx!nqZmIY*x;%mmH$yteg*{Iz~Rc0F8P}gpC{%l5}5Dw_ifEj{cl- zOx)a1N*1Az@=2teR2m5N*yuN+=(>4-d3VbeC9Sh@Z7DiFd)u5>LLK0%K=!fnQL6G{ zP}J@6O;%I9r@xHavv)P&no3DRg< zt1)4FL);U0NNDRoy9#4eYj*W_QPWV*W{a){yVX~x(P93X)QqN#y&ZDIn3pLV871Q* z*>u@3)%a)h72L#%hLyT~8pOZdE*qNBnoo|*GKRK51oA1v=|D%ZQoy#!8}6Q@wG3xp zj(3MMie=dSek9FGay+$JhACQRJ2jr_cx^wR+$`UU71}l|Pkx66Z7Bi#(|6DFFCGjq z8U|l2ji)i@C&ns?Kg0rhz5_Rh@ls;}(~Y*?_TG-(iMPyHSa zfhDhejoxOic{5JK{Hb}vZZBEqF{nfcbIoTJ?|JYesWd9y^G#-7qP1iwmh;VN-zRa# z74qXN*P?O@d8=|Z-e%ddnltNbI5x^3wTuk@ueVZ*tQ=m+MGK}JvuUGcLT4$oF@~ly zR$8G=5t=NwFkvf`SwB6Ezw~TOm(x}@V~v9|Q(VwwSy0%Pg_$5npLr{{Y}sOs2Q=Oq zuV!=eJ^_er$iB1)?7rH7HY_KSY{sB<`kE8n(jpy891Z;_A&My}e+QZqqL-5Lx4#3^ zOTiVYW(298LUu$i_VPEeInUIzxmxQ%T8i?|dFJncoC?`Vsv(XOylkSJGsx|tN%`io*pyM0U;_B&1 zR%M7Ps>U|`*ZTA#Hdm=N9RM>jzAL@aEH23Tgcu<&gPxNzAE>o1(?oCOQRZDy=I?5l zTPKqC8z?Z!Sjd);9lL?CUL|I%pFZAq1pyl|HOcy-htwZJl}i5`8Z*5GN`gVpPH3zT zQW5TzR3nVSJt~a71Yz>3jpuW~6v4qYy^?>`&p)9Ga@?qlSEv~ZYI)PxxgS4@ppJzT z>IiE2Sl9b0JyB&Yi7JyyR7r2Yhq_gDl+YGKN1a9;h1S+IX?c4msPJsE4#=hIfJURq z%qP5W!4oa*K*qp-0gG=|VvNg=XQqo^!3EpCDW!R$ool$lprjqo>GjY^@+JiB*=dk02{ zq2FL!T*EcV&>XrrI-?;t{;UpU)n*8`#AJby^kjaM@~Hb0$wk>zadEj>H!gY#YQkeJ zm9|e|MAGOQHJ zm`??TtN~cg7~spKVa$9WffVBf%wU~2|7-snTr(xbwQ0p#C7&)}r8dv!8e=rMPKR8_ z0pU6V)cVUp%j7c_+UDK_(iPs_gN|=lsj5AnZOLvfV325VP>QU575)shC($e@6UPwr zFzvIHT^XDc0}Z`#d0GVRAYG|@@zK6Zy%ryx>qbB730m%hr3Djg6nY35ds zlGu$tHYG@e0*9k7_$wOHPGO!!q=rN0Oma@(G(~(c?|tI)jXjedWzhHe&{jgUxu2N z`1vH3T)vFk? z1Z2IHo1lq(p%GB{X@X)_tSL%is@a09D+Y=B!tRSrV%}2D=VU2wrIYjagRf4R8mie$ z)of{LHa#QFp<79*c+rDN?XRfws>o8Lkrs6<3aXTC)3JDVKd6)twJn}~9_uJqI;GH9 zTBd5KxX@ha*Gzgr6Dme3DZL<{G%_8F3JX+CS;_Sq=`X_1rV9LR@Uwmbe>?oF8v6Zp zHq)DViA=Cmjx*1yOb1WcRjRC!CNoOM2fSFRfEmj`Gg(+D2tV|t4a-y90yq+-Oi;H1p2N_oSkdr9BKQ8EX~F34yRx0w8Ra00_&DDHunV z+6-RA0qz zzlm`uSJ+tlZmaXxhyS;J#kO>Y#hd)J6~>j3%G)C++XBVDnKa{N}%thu8DaA`Se5C%LDmL&%C#?&X>uL z2GKPs4Rg0j$Z| zvD|_+V_G*7YE`IXIri_~H&oXv$PlbFY~W_5ft$q%+#G9^8{=<6yA$cJu9G)a-SQm) znuXkz3s8P^IIAGBtG37Pu^MgE_{&h%cr27&e>7$&xrv3+tCX#zO#Wh_^!g(;FP;P8#7$(rYPjSJaVFoqm>IV=T^Y(O0LbfCAQ&3A&`ZM?x zm*L#Vgku~WU?y_{n85-%dwPwCW1m@M9EJF#-==1D9dgCyGnItjwqS*zeJUU;xnhBR znmBwCY4TcE3@qf!|_D)x9p?HOr>D=RMU>8AaC++JZ-SNA|mB;JpU2l4w0B*?N$ku!{&RPe~>YbP{kKRLqX#bMCR=vE7vI zU2bC)WE;!h(;25VP0}p2kCoD{!I!i%kzR}D3zUW)>9JfQ46(iGusE9C%tD}2G&@a~ zUNEHeh$$@?qihK&8|gBtlvATh0bSH&R4I=f`-%&9PoZFZj>7W?Jo}*%p2JhQ0#%cU zM{JWGeUKq?l{irPb0H&D9{BKP#|63yRT)D?v=myY)+apae<$GglBRMI>ar%w4=8O-f>8B&ACS&3y+t}ddM-xQ z5xbrO>Ol+CL-d)a*lVTO_X8c#0XM!KY3uL=I%47uhPDu&P|iX>E@Y`03Wvr9hR1DF9U^@vOfzM^)4582PUlbAy;fQ5ANp`=hH6)L#6aPE8PnZ+zNK`Y;4 zXE@MmR1|*VzK`_NZL6`c3x|o(RPl6oSnkd~5##gesMLH@A>Uk@Z#B7>0kWD!P!YX3 z%A^irP69bq#P6}1v4Uu}no)%1Grwy!sf`_ooPmj)73`!kbl!ZdAdNYSxx zvB>9F*7(9MYsaLjsjL&+{7FG&S%rKHD$7!p)e_W9OO#0+R9{&wV7bL=@hi)US5{>` zcnLmbNqx;leU(ybS~!B4qPMg)})wr%o_w{(DesMD~rV>|qUCFxg+1Reis`NrN^kK7HM zo6?y@m=&t+XMX8j+y?^LjOMrE#k0>vYUzv`jdFUSkj~WaDrb$@uB*W%$v&pqbxBzU z_b-h-H=1f&CJw0ONQ{CbuoY1R%M>e#<$M;r`)qNOdHw~$m6~eQaK%vBSFPa+=VDT& zgDi7T3mZLqPFcEO(+Sfw?HRQ1%ex){7ydot%wM!ApEhN_0ygl`E#R3>j@5!%W}EE% zpj=qDgSlHvE7O@VI0^TqYdFb}li6W<8P-oGRzDHo*G~Y%s^fm$P;2>wntS%E&mmkL za4ce5-;ej_I1jCU8S*D9$AQj7^(&#LB~iUK^rWyzUfPRqU0(&%*|~Tr7RSo75WZzg z5c0Kn2t6tUpIWN7$AjomK{*6{Jsw1l3c^=!vb7i=1If|iCHS^UZWb@W$Isiuk*MB* z_Yzf}r1m<>a}LVWoUGmnynLiCGMB@YeHdCWp*tR4ixy;4-A(0GX5I3>RNCOIf2!uzv>G!=9mk;3+xtPZ$X^!c4X~X-~q4eQ2N#HS2waXU9*|Gx*01&t_PX#y~Ff&9U4Cw2=I*VuF(cpjU~IGbe7 z+|ZotE9l+M8Q>+eu(&W`jMMGOoO|T-Oz26QGg=H2ds5~?dkrY@ZY=4AM)`Q8OXQh% zkMMv|@I7189(`0x+=~XI3?G8xoEMfEU#L}aQP$F|lv#jZu^wY4O=ir9nRMt;yS*yY z2h?6A_fkKP^trae;#Y6cq@Q>c&A?6Z4BV8^z)c}-(Fz_r4BzY#d{g}SrmXW#As*LY z-L^#Zx?X zHu_9X@tN%Knd}_D6)xMxQU3)igNd8lO|PQj6_l)?z*Sp*(Jh>JfXML0fbC({Jmb9zRSL z$EwGAZd5(iqj4UuLB@4`2F>$fJjUzs!}wHvrbR1yRP<5b=@_#<>(Pi;UE2k`o=^Q@ zp9$?VbUoCZY|P;^G&bf8dn3A_;hcpqv&ueMy%v9b=XG!nosA%LMD793z>dHLqKn!R zTJ|yj8G{==-d&-P>h#!aScWF2nv_p%JuoQxTeD5(6D(o;hmgAKEaWP+K z*TBbONypRVIR*J7(Ud6^GBTgc#6L;ox|)M;@}-Y%B@KQ7|DZIYFXYJ>Q=D{lj-S

VE%+7PO%8iIS339%CU2W+o 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 Zu)={A4yP>hD6LgZkH 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%0AmUT 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

-u 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

B@ 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%0A8WaMc8#C3#< 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þw7v$QyD!@XdE<-q44ku&AP{b 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

o3aLDujc98y*YV2IwH0fIjmCPe>X# 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 z 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

  • oob6!oU3={2SUnlT&9IknMA6Es?W$-3{*W2$P&=7bkfNB=*(=|eR zn`s6RZ}~TbkNuVWxmIPW7Xi4C=RRaG5N_q?K diff --git a/bin/OpenMetaverseTypes.dll b/bin/OpenMetaverseTypes.dll index 454f1dfba30dedce5c40bda7d389161eb3dd51a2..39b8f75c70b16eb9e10a592da1a47785e806ffd9 100755 GIT binary patch literal 110592 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%0AXqw1!yZ3-VFD99Gr}tNZJ}GIR^f30oL%QIR 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 From 4f3198da22bb845a882a6b2d71d1b7414da31d8d Mon Sep 17 00:00:00 2001 From: Drake Arconis Date: Fri, 14 Aug 2015 18:13:41 -0400 Subject: [PATCH 4/4] Only send the requested ObjectPropertiesFamily in the RequestObjectPropertiesFamily reply and not the actual ObjectProperties packet Signed-off-by: Melanie Thielker --- OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index c8e5881143..e7dd9d3e93 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -4467,7 +4467,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { uint priority = 0; // time based ordering only lock (m_entityProps.SyncRoot) - m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,requestFlags,true,true)); + m_entityProps.Enqueue(priority, new ObjectPropertyUpdate(entity,requestFlags,true,false)); } private void ResendPropertyUpdate(ObjectPropertyUpdate update)