public void botSetMap(string keyOfBot, LSL_List positions, LSL_List movementType, LSL_Integer flags) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.Moderate, "botSetMap", m_host, "bot", m_itemID)) { return; } List <Vector3> PositionsMap = new List <Vector3>(); for (int i = 0; i < positions.Length; i++) { LSL_Vector pos = positions.GetVector3Item(i); PositionsMap.Add(new Vector3((float)pos.x, (float)pos.y, (float)pos.z)); } List <TravelMode> TravelMap = new List <TravelMode>(); for (int i = 0; i < movementType.Length; i++) { LSL_Integer travel = movementType.GetLSLIntegerItem(i); TravelMap.Add((TravelMode)travel.value); } IBotManager manager = World.RequestModuleInterface <IBotManager>(); if (manager != null) { manager.SetBotMap(UUID.Parse(keyOfBot), PositionsMap, TravelMap, flags.value, m_host.OwnerID); } }
public LSL_List botGetBotsWithTag(string tag) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.Moderate, "botGetBotsWithTag", m_host, "bot", m_itemID)) { return(new LSL_List()); } IBotManager manager = World.RequestModuleInterface <IBotManager>(); List <UUID> bots = new List <UUID>(); if (manager != null) { bots = manager.GetBotsWithTag(tag); } LSL_List b = new LSL_List(); foreach (UUID bot in bots) { b.Add(bot.ToString()); } return(b); }
// Get a list of all the avatars/agents in the region public LSL_List osGetAgents() { // threat level is None as we could get this information with an // in-world script as well, just not as efficient if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "osGetAgents", m_host, "OSSL", m_itemID)) return new LSL_List(); LSL_List result = new LSL_List(); World.ForEachScenePresence(delegate(IScenePresence sp) { if (!sp.IsChildAgent) result.Add(new LSL_String(sp.Name)); }); return result; }
public void osSetLinkPrimitiveParams(LSL_Integer link, LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.Low, "osSetLinkPrimitiveParams", m_host, "OSSL", m_itemID)) return; InitLSL(); List<IEntity> parts = m_LSL_Api.GetLinkPartsAndEntities(link); foreach (IEntity part in parts) m_LSL_Api.SetPrimParams(part, rules, true); }
public LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "osGetPrimitiveParams", m_host, "OSSL", m_itemID)) return new LSL_List(); InitLSL(); return m_LSL_Api.GetLinkPrimitiveParamsEx(prim, rules); }
// Threat level is 'Low' because certain users could possibly be tricked into // dropping an unverified script into one of their own objects, which could // then gather the physical construction details of the object and transmit it // to an unscrupulous third party, thus permitting unauthorized duplication of // the object's form. // public LSL_List osGetLinkPrimitiveParams(int linknumber, LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "osGetLinkPrimitiveParams", m_host, "OSSL", m_itemID)) return new LSL_List(); InitLSL(); LSL_List retVal = new LSL_List(); //Assign requested part directly ISceneChildEntity part = m_host.ParentEntity.GetLinkNumPart(linknumber) as ISceneChildEntity; //Check to see if the requested part exists (NOT null) and if so, get it's rules if (part != null) retVal = m_LSL_Api.GetLinkPrimitiveParams(part, rules, true); //Will retun rules for specific part, or an empty list if part == null return retVal; }
public LSL_String osFormatString(string str, LSL_List strings) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.Low, "osFormatString", m_host, "OSSL", m_itemID)) return new LSL_String(); return String.Format(str, strings.Data); }
public double osList2Double(LSL_List src, int index) { // There is really no double type in OSSL. C# and other // have one, but the current implementation of LSL_Types.list // is not allowed to contain any. // This really should be removed. // if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "osList2Double", m_host, "OSSL", m_itemID)) return 0; if (index < 0) { index = src.Length + index; } if (index >= src.Length) { return 0.0; } return Convert.ToDouble(src.Data[index]); }
public LSL_Integer aaWindlightSetScene (int dayCycleIndex, LSL_List list) { IEnvironmentSettingsModule environmentSettings = World.RequestModuleInterface<IEnvironmentSettingsModule> (); if (environmentSettings == null) return ScriptBaseClass.WL_ERROR_NO_SCENE_SET; WindlightDayCycle cycle = environmentSettings.GetCurrentDayCycle (); if (cycle == null) return ScriptBaseClass.WL_ERROR_NO_SCENE_SET; if (!cycle.Cycle.IsStaticDayCycle) return ScriptBaseClass.WL_ERROR_SCENE_MUST_BE_STATIC; if (dayCycleIndex >= cycle.Cycle.DataSettings.Count) return ScriptBaseClass.WL_ERROR_BAD_SETTING; ConvertLSLToWindlight (ref cycle, dayCycleIndex, list); environmentSettings.SetDayCycle (cycle); environmentSettings.TriggerWindlightUpdate (1); return ScriptBaseClass.WL_OK; }
public LSL_List GetLinkPrimitiveParamsEx(LSL_Key prim, LSL_List rules) { ISceneChildEntity obj = World.GetSceneObjectPart(prim); if (obj == null) return new LSL_List(); if (obj.OwnerID == m_host.OwnerID) return new LSL_List(); return GetLinkPrimitiveParams(obj, rules, true); }
public LSL_Integer llSetPrimMediaParams(LSL_Integer face, LSL_List rules) { PScriptSleep(m_sleepMsOnSetPrimMediaParams); // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid // Assuming silently fail means sending back STATUS_OK. Ideally, need to check this. // Don't perform the media check directly if (face < 0 || face > m_host.GetNumberOfSides() - 1) return ScriptBaseClass.STATUS_OK; return SetPrimMediaParams(m_host, face, rules); }
public void llSetPrimitiveParams(LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return; SetPrimParams(m_host, rules, m_allowOpenSimParams); PScriptSleep(m_sleepMsOnSetPrimitiveParams); }
public void llSetPayPrice(int price, LSL_List quick_pay_buttons) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return; m_host.ParentEntity.RootChild.PayPrice[0] = price; if (quick_pay_buttons.Data.Length > 0) m_host.ParentEntity.RootChild.PayPrice[1] = (LSL_Integer)quick_pay_buttons.Data[0]; else m_host.ParentEntity.RootChild.PayPrice[1] = (LSL_Integer)(-2); if (quick_pay_buttons.Data.Length > 1) m_host.ParentEntity.RootChild.PayPrice[2] = (LSL_Integer)quick_pay_buttons.Data[1]; else m_host.ParentEntity.RootChild.PayPrice[2] = (LSL_Integer)(-2); if (quick_pay_buttons.Data.Length > 2) m_host.ParentEntity.RootChild.PayPrice[3] = (LSL_Integer)quick_pay_buttons.Data[2]; else m_host.ParentEntity.RootChild.PayPrice[3] = (LSL_Integer)(-2); if (quick_pay_buttons.Data.Length > 3) m_host.ParentEntity.RootChild.PayPrice[4] = (LSL_Integer)quick_pay_buttons.Data[3]; else m_host.ParentEntity.RootChild.PayPrice[4] = (LSL_Integer)(-2); }
public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) { List<ISceneChildEntity> parts = GetLinkParts(linknumber); foreach (ISceneChildEntity part in parts) SetPrimParams(part, rules, m_allowOpenSimParams); }
public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return; List<IEntity> parts = GetLinkPartsAndEntities(linknumber); foreach (IEntity part in parts) SetPrimParams(part, rules, m_allowOpenSimParams); PScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); }
public LSL_Integer llSetLinkMedia(LSL_Integer link, LSL_Integer face, LSL_List rules) { //PScriptSleep(m_sleepMsOnSetLinkMedia); // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid // Assuming silently fail means sending back STATUS_OK. Ideally, need to check this. // Don't perform the media check directly List<ISceneChildEntity> entities = GetLinkParts(link); if (entities.Count == 0 || face < 0 || face > entities[0].GetNumberOfSides() - 1) return ScriptBaseClass.STATUS_OK; foreach (ISceneChildEntity child in entities) SetPrimMediaParams(child, face, rules); return ScriptBaseClass.STATUS_OK; }
public LSL_List aaQueryDatabase (LSL_String key, LSL_String token) { if (!ScriptProtection.CheckThreatLevel (ThreatLevel.Moderate, "aaQueryDatabase", m_host, "AA", m_itemID)) return new LSL_List (); List<string> query = AssetConnector.FindLSLData (token.m_string, key.m_string); LSL_List list = new LSL_List (query.ToArray ()); return list; }
void ConvertWindlightDayCycle (WindlightDayCycle cycle, int preset, int rule, ref LSL_List list) { var skyDatas = cycle.Cycle.DataSettings.Values.ToList (); var skyData = skyDatas [preset]; switch (rule) { case ScriptBaseClass.WL_AMBIENT: list.Add (new LSL_Rotation (skyData.ambient.X, skyData.ambient.Y, skyData.ambient.Z, skyData.ambient.W)); break; case ScriptBaseClass.WL_SKY_BLUE_DENSITY: list.Add (new LSL_Rotation (skyData.blue_density.X, skyData.blue_density.Y, skyData.blue_density.Z, skyData.blue_density.W)); break; case ScriptBaseClass.WL_SKY_BLUR_HORIZON: list.Add (new LSL_Rotation (skyData.blue_horizon.X, skyData.blue_horizon.Y, skyData.blue_horizon.Z, skyData.blue_horizon.W)); break; case ScriptBaseClass.WL_CLOUD_COLOR: list.Add (new LSL_Rotation (skyData.cloud_color.X, skyData.cloud_color.Y, skyData.cloud_color.Z, skyData.cloud_color.W)); break; case ScriptBaseClass.WL_CLOUD_POS_DENSITY1: list.Add (new LSL_Rotation (skyData.cloud_pos_density1.X, skyData.cloud_pos_density1.Y, skyData.cloud_pos_density1.Z, skyData.cloud_pos_density1.W)); break; case ScriptBaseClass.WL_CLOUD_POS_DENSITY2: list.Add (new LSL_Rotation (skyData.cloud_pos_density2.X, skyData.cloud_pos_density2.Y, skyData.cloud_pos_density2.Z, skyData.cloud_pos_density2.W)); break; case ScriptBaseClass.WL_CLOUD_SCALE: list.Add (new LSL_Rotation (skyData.cloud_scale.X, skyData.cloud_scale.Y, skyData.cloud_scale.Z, skyData.cloud_scale.W)); break; case ScriptBaseClass.WL_CLOUD_SCROLL_X: list.Add (new LSL_Float (skyData.cloud_scroll_rate.X)); break; case ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK: list.Add (new LSL_Integer (skyData.enable_cloud_scroll.X)); break; case ScriptBaseClass.WL_CLOUD_SCROLL_Y: list.Add (new LSL_Float (skyData.cloud_scroll_rate.Y)); break; case ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK: list.Add (new LSL_Integer (skyData.enable_cloud_scroll.Y)); break; case ScriptBaseClass.WL_CLOUD_SHADOW: list.Add (new LSL_Rotation (skyData.cloud_shadow.X, skyData.cloud_shadow.Y, skyData.cloud_shadow.Z, skyData.cloud_shadow.W)); break; case ScriptBaseClass.WL_SKY_DENSITY_MULTIPLIER: list.Add (new LSL_Rotation (skyData.density_multiplier.X, skyData.density_multiplier.Y, skyData.density_multiplier.Z, skyData.density_multiplier.W)); break; case ScriptBaseClass.WL_SKY_DISTANCE_MULTIPLIER: list.Add (new LSL_Rotation (skyData.distance_multiplier.X, skyData.distance_multiplier.Y, skyData.distance_multiplier.Z, skyData.distance_multiplier.W)); break; case ScriptBaseClass.WL_SKY_GAMMA: list.Add (new LSL_Rotation (skyData.gamma.X, skyData.gamma.Y, skyData.gamma.Z, skyData.gamma.W)); break; case ScriptBaseClass.WL_SKY_GLOW: list.Add (new LSL_Rotation (skyData.glow.X, skyData.glow.Y, skyData.glow.Z, skyData.glow.W)); break; case ScriptBaseClass.WL_SKY_HAZE_DENSITY: list.Add (new LSL_Rotation (skyData.haze_density.X, skyData.haze_density.Y, skyData.haze_density.Z, skyData.haze_density.W)); break; case ScriptBaseClass.WL_SKY_HAZE_HORIZON: list.Add (new LSL_Rotation (skyData.haze_horizon.X, skyData.haze_horizon.Y, skyData.haze_horizon.Z, skyData.haze_horizon.W)); break; case ScriptBaseClass.WL_SKY_LIGHT_NORMALS: list.Add (new LSL_Rotation (skyData.lightnorm.X, skyData.lightnorm.Y, skyData.lightnorm.Z, skyData.lightnorm.W)); break; case ScriptBaseClass.WL_SKY_MAX_ALTITUDE: list.Add (new LSL_Rotation (skyData.max_y.X, skyData.max_y.Y, skyData.max_y.Z, skyData.max_y.W)); break; case ScriptBaseClass.WL_SKY_STAR_BRIGHTNESS: list.Add (new LSL_Float (skyData.star_brightness)); break; case ScriptBaseClass.WL_SKY_SUNLIGHT_COLOR: list.Add (new LSL_Rotation (skyData.sunlight_color.X, skyData.sunlight_color.Y, skyData.sunlight_color.Z, skyData.sunlight_color.W)); break; case ScriptBaseClass.WL_WATER_BLUR_MULTIPLIER: list.Add (new LSL_Float (cycle.Water.blurMultiplier)); break; case ScriptBaseClass.WL_WATER_FRESNEL_OFFSET: list.Add (new LSL_Float (cycle.Water.fresnelOffset)); break; case ScriptBaseClass.WL_WATER_FRESNEL_SCALE: list.Add (new LSL_Float (cycle.Water.fresnelScale)); break; case ScriptBaseClass.WL_WATER_NORMAL_MAP: list.Add (new LSL_String (cycle.Water.normalMap)); break; case ScriptBaseClass.WL_WATER_NORMAL_SCALE: list.Add (new LSL_Vector (cycle.Water.normScale.X, cycle.Water.normScale.Y, cycle.Water.normScale.Z)); break; case ScriptBaseClass.WL_WATER_SCALE_ABOVE: list.Add (new LSL_Float (cycle.Water.scaleAbove)); break; case ScriptBaseClass.WL_WATER_SCALE_BELOW: list.Add (new LSL_Float (cycle.Water.scaleBelow)); break; case ScriptBaseClass.WL_WATER_UNDERWATER_FOG_MODIFIER: list.Add (new LSL_Float (cycle.Water.underWaterFogMod)); break; case ScriptBaseClass.WL_WATER_FOG_COLOR: list.Add (new LSL_Rotation (cycle.Water.waterFogColor.X, cycle.Water.waterFogColor.Y, cycle.Water.waterFogColor.Z, cycle.Water.waterFogColor.W)); break; case ScriptBaseClass.WL_WATER_FOG_DENSITY: list.Add (new LSL_Float (cycle.Water.waterFogDensity)); break; case ScriptBaseClass.WL_WATER_BIG_WAVE_DIRECTION: list.Add (new LSL_Vector (cycle.Water.wave1Dir.X, cycle.Water.wave1Dir.Y, 0.0f)); break; case ScriptBaseClass.WL_WATER_LITTLE_WAVE_DIRECTION: list.Add (new LSL_Vector (cycle.Water.wave2Dir.X, cycle.Water.wave2Dir.Y, 0.0f)); break; } }
public void osSetParcelDetails(LSL_Vector pos, LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "osSetParcelDetails", m_host, "OSSL", m_itemID)) return; // Get a reference to the land data and make sure the owner of the script // can modify it IParcelManagementModule parcelManagement = World.RequestModuleInterface<IParcelManagementModule>(); if (parcelManagement != null) { ILandObject startLandObject = parcelManagement.GetLandObject((int) pos.x, (int) pos.y); if (startLandObject == null) { OSSLShoutError("There is no land at that location"); return; } if (!World.Permissions.CanEditParcel(m_host.OwnerID, startLandObject)) { OSSLShoutError("You do not have permission to modify the parcel"); return; } // Create a new land data object we can modify // Process the rules, not sure what the impact would be of changing owner or group for (int idx = 0; idx < rules.Length;) { int code = rules.GetLSLIntegerItem(idx++); string arg = rules.GetLSLStringItem(idx++); UUID uuid; switch (code) { case 0: startLandObject.LandData.Name = arg; break; case 1: startLandObject.LandData.Description = arg; break; case 2: if ( !ScriptProtection.CheckThreatLevel(ThreatLevel.VeryHigh, "osSetParcelDetails", m_host, "OSSL", m_itemID)) return; if (UUID.TryParse(arg, out uuid)) startLandObject.LandData.OwnerID = uuid; break; case 3: if ( !ScriptProtection.CheckThreatLevel(ThreatLevel.VeryHigh, "osSetParcelDetails", m_host, "OSSL", m_itemID)) return; if (UUID.TryParse(arg, out uuid)) startLandObject.LandData.GroupID = uuid; break; } } parcelManagement.UpdateLandObject(startLandObject); } }
public LSL_String aaSerializeXML (LSL_List keys, LSL_List values) { if (!ScriptProtection.CheckThreatLevel (ThreatLevel.Moderate, "aaSerializeXML", m_host, "AA", m_itemID)) return new LSL_String (); XmlDocument doc = new XmlDocument (); for (int i = 0; i < keys.Length; i++) { string key = keys.GetLSLStringItem (i); string value = values.GetLSLStringItem (i); XmlNode node = doc.CreateNode (XmlNodeType.Element, key, ""); node.InnerText = value; doc.AppendChild (node); } return new LSL_String (doc.OuterXml); }
// This needs ThreatLevel high. It is an excellent griefer tool, // In a loop, it can cause asset bloat and DOS levels of asset // writes. // public void osMakeNotecard(string notecardName, LSL_List contents) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "osMakeNotecard", m_host, "OSSL", m_itemID)) return; // Create new asset AssetBase asset = new AssetBase(UUID.Random(), notecardName, AssetType.Notecard, m_host.OwnerID) { Description = "Script Generated Notecard" }; string notecardData = String.Empty; for (int i = 0; i < contents.Length; i++) { notecardData += contents.GetLSLStringItem(i) + "\n"; } int textLength = notecardData.Length; notecardData = "Linden text version 2\n{\nLLEmbeddedItems version 1\n{\ncount 0\n}\nText length " + textLength.ToString(CultureInfo.InvariantCulture) + "\n" + notecardData + "}\n"; asset.Data = Util.UTF8.GetBytes(notecardData); asset.ID = World.AssetService.Store(asset); // Create Task Entry TaskInventoryItem taskItem = new TaskInventoryItem(); taskItem.ResetIDs(m_host.UUID); taskItem.ParentID = m_host.UUID; taskItem.CreationDate = (uint) Util.UnixTimeSinceEpoch(); taskItem.Name = asset.Name; taskItem.Description = asset.Description; taskItem.Type = (int) AssetType.Notecard; taskItem.InvType = (int) InventoryType.Notecard; taskItem.OwnerID = m_host.OwnerID; taskItem.CreatorID = m_host.OwnerID; taskItem.BasePermissions = (uint) PermissionMask.All; taskItem.CurrentPermissions = (uint) PermissionMask.All; taskItem.EveryonePermissions = 0; taskItem.NextPermissions = (uint) PermissionMask.All; taskItem.GroupID = m_host.GroupID; taskItem.GroupPermissions = 0; taskItem.Flags = 0; taskItem.SalePrice = 0; taskItem.SaleType = 0; taskItem.PermsGranter = UUID.Zero; taskItem.PermsMask = 0; taskItem.AssetID = asset.ID; m_host.Inventory.AddInventoryItem(taskItem, false); }
void ConvertLSLToWindlight (ref WindlightDayCycle cycle, int preset, LSL_List list) { var skyDatas = cycle.Cycle.DataSettings.Values.ToList (); var skyData = skyDatas [preset]; for (int i = 0; i < list.Data.Length; i += 2) { int key = list.GetLSLIntegerItem (i); switch (key) { case ScriptBaseClass.WL_AMBIENT: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.ambient = rot.ToVector4 (); break; } case ScriptBaseClass.WL_CLOUD_COLOR: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.cloud_color = rot.ToVector4 (); break; } case ScriptBaseClass.WL_CLOUD_POS_DENSITY1: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.cloud_pos_density1 = rot.ToVector4 (); break; } case ScriptBaseClass.WL_CLOUD_POS_DENSITY2: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.cloud_pos_density2 = rot.ToVector4 (); break; } case ScriptBaseClass.WL_CLOUD_SCALE: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.cloud_scale = rot.ToVector4 (); break; } case ScriptBaseClass.WL_CLOUD_SCROLL_X: { LSL_Integer integer = list.GetLSLIntegerItem (i + 1); skyData.cloud_scroll_rate.X = integer; break; } case ScriptBaseClass.WL_CLOUD_SCROLL_Y: { LSL_Integer integer = list.GetLSLIntegerItem (i + 1); skyData.cloud_scroll_rate.Y = integer; break; } case ScriptBaseClass.WL_CLOUD_SCROLL_X_LOCK: { LSL_Integer integer = list.GetLSLIntegerItem (i + 1); skyData.enable_cloud_scroll.X = integer; break; } case ScriptBaseClass.WL_CLOUD_SCROLL_Y_LOCK: { LSL_Integer integer = list.GetLSLIntegerItem (i + 1); skyData.enable_cloud_scroll.Y = integer; break; } case ScriptBaseClass.WL_CLOUD_SHADOW: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.cloud_shadow = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_BLUE_DENSITY: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.blue_density = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_BLUR_HORIZON: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.blue_horizon = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_DENSITY_MULTIPLIER: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.density_multiplier = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_DISTANCE_MULTIPLIER: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.distance_multiplier = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_GAMMA: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.gamma = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_GLOW: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.glow = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_HAZE_DENSITY: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.haze_density = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_HAZE_HORIZON: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.haze_horizon = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_LIGHT_NORMALS: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.lightnorm = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_MAX_ALTITUDE: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.max_y = rot.ToVector4 (); break; } case ScriptBaseClass.WL_SKY_STAR_BRIGHTNESS: { LSL_Float f = list.GetLSLFloatItem (i + 1); skyData.star_brightness = (float)f.value; break; } case ScriptBaseClass.WL_SKY_SUNLIGHT_COLOR: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); skyData.sunlight_color = rot.ToVector4 (); break; } case ScriptBaseClass.WL_WATER_BIG_WAVE_DIRECTION: { var rot = list.GetVector3Item (i + 1); cycle.Water.wave1Dir = new Vector2 ((float)rot.x.value, (float)rot.y.value); break; } case ScriptBaseClass.WL_WATER_BLUR_MULTIPLIER: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.blurMultiplier = (float)f.value; break; } case ScriptBaseClass.WL_WATER_FOG_COLOR: { LSL_Rotation rot = list.GetQuaternionItem (i + 1); cycle.Water.waterFogColor = rot.ToVector4 (); break; } case ScriptBaseClass.WL_WATER_FOG_DENSITY: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.waterFogDensity = (float)f.value; break; } case ScriptBaseClass.WL_WATER_FRESNEL_OFFSET: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.fresnelOffset = (float)f.value; break; } case ScriptBaseClass.WL_WATER_FRESNEL_SCALE: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.fresnelScale = (float)f.value; break; } case ScriptBaseClass.WL_WATER_LITTLE_WAVE_DIRECTION: { var rot = list.GetVector3Item (i + 1); cycle.Water.wave2Dir = new Vector2 ((float)rot.x.value, (float)rot.y.value); break; } case ScriptBaseClass.WL_WATER_NORMAL_MAP: { var f = list.GetLSLStringItem (i + 1); cycle.Water.normalMap = UUID.Parse (f.m_string); break; } case ScriptBaseClass.WL_WATER_NORMAL_SCALE: { LSL_Vector rot = list.GetVector3Item (i + 1); cycle.Water.normScale = rot.ToVector3 (); break; } case ScriptBaseClass.WL_WATER_SCALE_ABOVE: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.scaleAbove = (float)f.value; break; } case ScriptBaseClass.WL_WATER_SCALE_BELOW: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.scaleBelow = (float)f.value; break; } case ScriptBaseClass.WL_WATER_UNDERWATER_FOG_MODIFIER: { var f = list.GetLSLFloatItem (i + 1); cycle.Water.underWaterFogMod = (float)f.value; break; } } } }
public LSL_List osMatchString(string src, string pattern, int start) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "osMatchString", m_host, "OSSL", m_itemID)) return new LSL_List(); LSL_List result = new LSL_List(); // 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 (start < 0 || start >= src.Length) { return result; // empty list } // Find matches beginning at start position Regex matcher = new Regex(pattern); Match match = matcher.Match(src, start); while (match.Success) { foreach (Group g in match.Groups) { if (g.Success) { result.Add(new LSL_Integer(g.Value)); result.Add(new LSL_Integer(g.Index)); } } match = match.NextMatch(); } return result; }
public LSL_List aaDeserializeXMLValues (LSL_String xmlFile) { if (!ScriptProtection.CheckThreatLevel (ThreatLevel.Moderate, "aaDeserializeXMLValues", m_host, "AA", m_itemID)) return new LSL_List (); XmlDocument doc = new XmlDocument (); doc.LoadXml (xmlFile.m_string); XmlNodeList children = doc.ChildNodes; LSL_List values = new LSL_List (); foreach (XmlNode node in children) { values.Add (node.InnerText); } return values; }
/// <summary> /// Return information regarding various simulator statistics (sim fps, physics fps, time /// dilation, total number of prims, total number of active scripts, script lps, various /// timing data, packets in/out, etc. Basically much the information that's shown in the /// client's Statistics Bar (Ctrl-Shift-1) /// </summary> /// <returns>List of floats</returns> public LSL_List osGetRegionStats() { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.Moderate, "osGetRegionStats", m_host, "OSSL", m_itemID)) return new LSL_List(); LSL_List ret = new LSL_List(); IMonitorModule mod = World.RequestModuleInterface<IMonitorModule>(); if (mod != null) { float[] stats = mod.GetRegionStats(World); for (int i = 0; i < 21; i++) { ret.Add(new LSL_Float(stats[i])); } } return ret; }
public LSL_List aaGetTeamMembers (LSL_String team) { if (!ScriptProtection.CheckThreatLevel (ThreatLevel.Low, "aaGetTeamMembers", m_host, "AA", m_itemID)) return new LSL_List (); List<UUID> Members = new List<UUID> (); ICombatModule module = World.RequestModuleInterface<ICombatModule> (); if (module != null) { Members = module.GetTeammates (team); } LSL_List members = new LSL_List (); foreach (UUID member in Members) members.Add (new LSL_Key (member.ToString ())); return members; }
public void osSetPrimitiveParams(LSL_Key prim, LSL_List rules) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.High, "osSetPrimitiveParams", m_host, "OSSL", m_itemID)) return; InitLSL(); m_LSL_Api.SetPrimitiveParamsEx(prim, rules); }
public void aaSetEnv (LSL_String name, LSL_List value) { if (!ScriptProtection.CheckThreatLevel (ThreatLevel.VeryHigh, "aaSetEnv", m_host, "AA", m_itemID)) return; if (!World.Permissions.IsGod (m_host.OwnerID)) { LSLError ("You do not have god permissions."); return; } if (name == ScriptBaseClass.ENABLE_GRAVITY) { LSL_Integer enabled = value.GetLSLIntegerItem (0); float [] grav = m_host.ParentEntity.Scene.PhysicsScene.GetGravityForce (); m_host.ParentEntity.Scene.PhysicsScene.SetGravityForce (enabled == 1, grav [0], grav [1], grav [2]); } else if (name == ScriptBaseClass.GRAVITY_FORCE_X) { LSL_Float f = value.GetLSLFloatItem (0); float [] grav = m_host.ParentEntity.Scene.PhysicsScene.GetGravityForce (); m_host.ParentEntity.Scene.PhysicsScene.SetGravityForce (true, (float)f.value, grav [1], grav [2]); } else if (name == ScriptBaseClass.GRAVITY_FORCE_Y) { LSL_Float f = value.GetLSLFloatItem (0); float [] grav = m_host.ParentEntity.Scene.PhysicsScene.GetGravityForce (); m_host.ParentEntity.Scene.PhysicsScene.SetGravityForce (true, grav [0], (float)f.value, grav [2]); } else if (name == ScriptBaseClass.GRAVITY_FORCE_Z) { LSL_Float f = value.GetLSLFloatItem (0); float [] grav = m_host.ParentEntity.Scene.PhysicsScene.GetGravityForce (); m_host.ParentEntity.Scene.PhysicsScene.SetGravityForce (true, grav [0], grav [1], (float)f.value); } else if (name == ScriptBaseClass.ADD_GRAVITY_POINT) { LSL_Vector pos = value.GetVector3Item (0); LSL_Float gravForce = value.GetLSLFloatItem (1); LSL_Float radius = value.GetLSLFloatItem (2); LSL_Integer ident = value.GetLSLIntegerItem (3); m_host.ParentEntity.Scene.PhysicsScene.AddGravityPoint ( false, new Vector3 ((float)pos.x, (float)pos.y, (float)pos.z), 0, 0, 0, (float)gravForce.value, (float)radius.value, ident.value); } else if (name == ScriptBaseClass.ADD_GRAVITY_FORCE) { LSL_Vector pos = value.GetVector3Item (0); LSL_Float xForce = value.GetLSLFloatItem (1); LSL_Float yForce = value.GetLSLFloatItem (2); LSL_Float zForce = value.GetLSLFloatItem (3); LSL_Float radius = value.GetLSLFloatItem (4); LSL_Integer ident = value.GetLSLIntegerItem (5); m_host.ParentEntity.Scene.PhysicsScene.AddGravityPoint ( true, new Vector3 ((float)pos.x, (float)pos.y, (float)pos.z), (float)xForce, (float)yForce, (float)zForce, 0, (float)radius.value, ident.value); } else if (name == ScriptBaseClass.START_TIME_REVERSAL_SAVING) { IPhysicsStateModule physicsState = World.RequestModuleInterface<IPhysicsStateModule> (); if (physicsState != null) physicsState.StartSavingPhysicsTimeReversalStates (); } else if (name == ScriptBaseClass.STOP_TIME_REVERSAL_SAVING) { IPhysicsStateModule physicsState = World.RequestModuleInterface<IPhysicsStateModule> (); if (physicsState != null) physicsState.StopSavingPhysicsTimeReversalStates (); } else if (name == ScriptBaseClass.START_TIME_REVERSAL) { IPhysicsStateModule physicsState = World.RequestModuleInterface<IPhysicsStateModule> (); if (physicsState != null) physicsState.StartPhysicsTimeReversal (); } else if (name == ScriptBaseClass.STOP_TIME_REVERSAL) { IPhysicsStateModule physicsState = World.RequestModuleInterface<IPhysicsStateModule> (); if (physicsState != null) physicsState.StopPhysicsTimeReversal (); } }
/// <summary> /// Like osGetAgents but returns enough info for a radar /// </summary> /// <returns>Strided list of the UUID, position and name of each avatar in the region</returns> public LSL_List osGetAvatarList() { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "osGetAvatarList", m_host, "OSSL", m_itemID)) return new LSL_List(); LSL_List result = new LSL_List(); World.ForEachScenePresence(delegate(IScenePresence avatar) { if (avatar != null && avatar.UUID != m_host.OwnerID) { if (!avatar.IsChildAgent) { result.Add(new LSL_Key(avatar.UUID.ToString())); result.Add(new LSL_Vector(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y, avatar.AbsolutePosition.Z)); result.Add(new LSL_String(avatar.Name)); } } }); return result; }
public LSL_List aaWindlightGetScene (int dayCycleIndex, LSL_List rules) { IEnvironmentSettingsModule environmentSettings = World.RequestModuleInterface<IEnvironmentSettingsModule> (); if (environmentSettings == null) return new LSL_List (new object [] { ScriptBaseClass.WL_ERROR, ScriptBaseClass.WL_ERROR_NO_SCENE_SET }); WindlightDayCycle cycle = environmentSettings.GetCurrentDayCycle (); if (cycle == null) return new LSL_List (new object [] { ScriptBaseClass.WL_ERROR, ScriptBaseClass.WL_ERROR_NO_SCENE_SET }); if (cycle.Cycle.IsStaticDayCycle) return new LSL_List (new object [] {ScriptBaseClass.WL_ERROR, ScriptBaseClass.WL_ERROR_SCENE_MUST_NOT_BE_STATIC}); if (dayCycleIndex >= cycle.Cycle.DataSettings.Count) return new LSL_List (new object [] { ScriptBaseClass.WL_ERROR, ScriptBaseClass.WL_ERROR_NO_PRESET_FOUND }); LSL_List list = new LSL_List (); for (int i = 0; i < rules.Data.Length; i++) { int rule = rules.GetLSLIntegerItem (i); ConvertWindlightDayCycle (cycle, dayCycleIndex, rule, ref list); } return list; }
public string osDrawPolygon(string drawList, LSL_List x, LSL_List y) { if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "osDrawFilledPolygon", m_host, "OSSL", m_itemID)) return ""; if (x.Length != y.Length || x.Length < 3) { return new LSL_String(""); } drawList += "Polygon " + x.GetLSLStringItem(0) + "," + y.GetLSLStringItem(0); for (int i = 1; i < x.Length; i++) { drawList += "," + x.GetLSLStringItem(i) + "," + y.GetLSLStringItem(i); } drawList += "; "; return new LSL_String(drawList); }
public LSL_List aaWindlightGetDayCycle () { IEnvironmentSettingsModule environmentSettings = World.RequestModuleInterface<IEnvironmentSettingsModule> (); if (environmentSettings == null) return new LSL_List (new object [] { ScriptBaseClass.WL_ERROR, ScriptBaseClass.WL_ERROR_NO_SCENE_SET }); WindlightDayCycle cycle = environmentSettings.GetCurrentDayCycle (); if (cycle == null) return new LSL_List (new object [] { ScriptBaseClass.WL_ERROR, ScriptBaseClass.WL_ERROR_NO_SCENE_SET }); if (cycle.Cycle.IsStaticDayCycle) return new LSL_List (new object [] { 0, -1, cycle.Cycle.DataSettings ["-1"].preset_name }); LSL_List list = new LSL_List (); int i = 0; foreach (var key in cycle.Cycle.DataSettings) { list.Add (i++); list.Add (key.Key); list.Add (key.Value.preset_name); } return list; }