diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 22 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 158 |
2 files changed, 98 insertions, 82 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 3a229c2..76c79da 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2812,7 +2812,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2812 | public void llCollisionFilter(string name, string id, int accept) | 2812 | public void llCollisionFilter(string name, string id, int accept) |
2813 | { | 2813 | { |
2814 | m_host.AddScriptLPS(1); | 2814 | m_host.AddScriptLPS(1); |
2815 | NotImplemented("llCollisionFilter"); | 2815 | m_host.CollisionFilter.Clear(); |
2816 | if (id != null) | ||
2817 | { | ||
2818 | m_host.CollisionFilter.Add(accept,id); | ||
2819 | } | ||
2820 | else | ||
2821 | { | ||
2822 | m_host.CollisionFilter.Add(accept,name); | ||
2823 | } | ||
2816 | } | 2824 | } |
2817 | 2825 | ||
2818 | public void llTakeControls(int controls, int accept, int pass_on) | 2826 | public void llTakeControls(int controls, int accept, int pass_on) |
@@ -3910,6 +3918,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3910 | Util.Clip((float)color.z, 0.0f, 1.0f)); | 3918 | Util.Clip((float)color.z, 0.0f, 1.0f)); |
3911 | m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); | 3919 | m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f)); |
3912 | m_host.ParentGroup.HasGroupChanged = true; | 3920 | m_host.ParentGroup.HasGroupChanged = true; |
3921 | m_host.ParentGroup.ScheduleGroupForFullUpdate(); | ||
3913 | } | 3922 | } |
3914 | 3923 | ||
3915 | public LSL_Float llWater(LSL_Vector offset) | 3924 | public LSL_Float llWater(LSL_Vector offset) |
@@ -4333,7 +4342,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4333 | public void llPassCollisions(int pass) | 4342 | public void llPassCollisions(int pass) |
4334 | { | 4343 | { |
4335 | m_host.AddScriptLPS(1); | 4344 | m_host.AddScriptLPS(1); |
4336 | NotImplemented("llPassCollisions"); | 4345 | if (pass == 0) |
4346 | { | ||
4347 | m_host.ParentGroup.PassCollision = false; | ||
4348 | } | ||
4349 | else | ||
4350 | { | ||
4351 | m_host.ParentGroup.PassCollision = true; | ||
4352 | } | ||
4337 | } | 4353 | } |
4338 | 4354 | ||
4339 | public LSL_String llGetScriptName() | 4355 | public LSL_String llGetScriptName() |
@@ -7541,7 +7557,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7541 | // makes it more difficult to determine a child prim's actual inworld position). | 7557 | // makes it more difficult to determine a child prim's actual inworld position). |
7542 | if (part.ParentID != 0) | 7558 | if (part.ParentID != 0) |
7543 | v = ((v - llGetRootPosition()) * llGetRootRotation()) + llGetRootPosition(); | 7559 | v = ((v - llGetRootPosition()) * llGetRootRotation()) + llGetRootPosition(); |
7544 | res.Add( v ); | 7560 | res.Add(v); |
7545 | break; | 7561 | break; |
7546 | 7562 | ||
7547 | case (int)ScriptBaseClass.PRIM_SIZE: | 7563 | case (int)ScriptBaseClass.PRIM_SIZE: |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index b6fc0a4..a5be251 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1952,7 +1952,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1952 | 1952 | ||
1953 | return key.ToString(); | 1953 | return key.ToString(); |
1954 | } | 1954 | } |
1955 | 1955 | ||
1956 | /// <summary> | 1956 | /// <summary> |
1957 | /// Return information regarding various simulator statistics (sim fps, physics fps, time | 1957 | /// Return information regarding various simulator statistics (sim fps, physics fps, time |
1958 | /// dilation, total number of prims, total number of active scripts, script lps, various | 1958 | /// dilation, total number of prims, total number of active scripts, script lps, various |
@@ -1960,19 +1960,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1960 | /// client's Statistics Bar (Ctrl-Shift-1) | 1960 | /// client's Statistics Bar (Ctrl-Shift-1) |
1961 | /// </summary> | 1961 | /// </summary> |
1962 | /// <returns>List of floats</returns> | 1962 | /// <returns>List of floats</returns> |
1963 | public LSL_List osGetRegionStats() | 1963 | public LSL_List osGetRegionStats() |
1964 | { | 1964 | { |
1965 | CheckThreatLevel(ThreatLevel.Moderate, "osGetRegionStats"); | 1965 | CheckThreatLevel(ThreatLevel.Moderate, "osGetRegionStats"); |
1966 | m_host.AddScriptLPS(1); | 1966 | m_host.AddScriptLPS(1); |
1967 | LSL_List ret = new LSL_List(); | 1967 | LSL_List ret = new LSL_List(); |
1968 | float[] stats = World.SimulatorStats; | 1968 | float[] stats = World.SimulatorStats; |
1969 | 1969 | ||
1970 | for (int i = 0; i < 21; i++) | 1970 | for (int i = 0; i < 21; i++) |
1971 | { | 1971 | { |
1972 | ret.Add(new LSL_Float( stats[i] )); | 1972 | ret.Add(new LSL_Float(stats[i])); |
1973 | } | 1973 | } |
1974 | return ret; | 1974 | return ret; |
1975 | } | 1975 | } |
1976 | 1976 | ||
1977 | public int osGetSimulatorMemory() | 1977 | public int osGetSimulatorMemory() |
1978 | { | 1978 | { |
@@ -1988,81 +1988,81 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1988 | return (int)pws; | 1988 | return (int)pws; |
1989 | } | 1989 | } |
1990 | public void osSetSpeed(string UUID, float SpeedModifier) | 1990 | public void osSetSpeed(string UUID, float SpeedModifier) |
1991 | { | 1991 | { |
1992 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); | 1992 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); |
1993 | m_host.AddScriptLPS(1); | 1993 | m_host.AddScriptLPS(1); |
1994 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); | 1994 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); |
1995 | avatar.SpeedModifier = SpeedModifier; | 1995 | avatar.SpeedModifier = SpeedModifier; |
1996 | } | 1996 | } |
1997 | public void osKickAvatar(string FirstName,string SurName,string alert) | 1997 | public void osKickAvatar(string FirstName,string SurName,string alert) |
1998 | { | 1998 | { |
1999 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); | 1999 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); |
2000 | if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) | 2000 | if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) |
2001 | { | 2001 | { |
2002 | foreach (ScenePresence presence in World.GetAvatars()) | 2002 | foreach (ScenePresence presence in World.GetAvatars()) |
2003 | { | 2003 | { |
2004 | if ((presence.Firstname == FirstName) && | 2004 | if ((presence.Firstname == FirstName) && |
2005 | presence.Lastname == SurName) | 2005 | presence.Lastname == SurName) |
2006 | { | 2006 | { |
2007 | // kick client... | 2007 | // kick client... |
2008 | if (alert != null) | 2008 | if (alert != null) |
2009 | presence.ControllingClient.Kick(alert); | 2009 | presence.ControllingClient.Kick(alert); |
2010 | 2010 | ||
2011 | // ...and close on our side | 2011 | // ...and close on our side |
2012 | presence.Scene.IncomingCloseAgent(presence.UUID); | 2012 | presence.Scene.IncomingCloseAgent(presence.UUID); |
2013 | } | 2013 | } |
2014 | } | 2014 | } |
2015 | } | 2015 | } |
2016 | } | 2016 | } |
2017 | public void osCauseDamage(string avatar, double damage) | 2017 | public void osCauseDamage(string avatar, double damage) |
2018 | { | 2018 | { |
2019 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); | 2019 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); |
2020 | m_host.AddScriptLPS(1); | 2020 | m_host.AddScriptLPS(1); |
2021 | 2021 | ||
2022 | UUID avatarId = new UUID(avatar); | 2022 | UUID avatarId = new UUID(avatar); |
2023 | Vector3 pos = m_host.GetWorldPosition(); | 2023 | Vector3 pos = m_host.GetWorldPosition(); |
2024 | 2024 | ||
2025 | ScenePresence presence = World.GetScenePresence(avatarId); | 2025 | ScenePresence presence = World.GetScenePresence(avatarId); |
2026 | if (presence != null) | 2026 | if (presence != null) |
2027 | { | 2027 | { |
2028 | LandData land = World.GetLandData((float)pos.X, (float)pos.Y); | 2028 | LandData land = World.GetLandData((float)pos.X, (float)pos.Y); |
2029 | if ((land.Flags & (uint)ParcelFlags.AllowDamage) == (uint)ParcelFlags.AllowDamage) | 2029 | if ((land.Flags & (uint)ParcelFlags.AllowDamage) == (uint)ParcelFlags.AllowDamage) |
2030 | { | 2030 | { |
2031 | float health = presence.Health; | 2031 | float health = presence.Health; |
2032 | health -= (float)damage; | 2032 | health -= (float)damage; |
2033 | presence.setHealthWithUpdate(health); | 2033 | presence.setHealthWithUpdate(health); |
2034 | if (health <= 0) | 2034 | if (health <= 0) |
2035 | { | 2035 | { |
2036 | float healthliveagain = 100; | 2036 | float healthliveagain = 100; |
2037 | presence.ControllingClient.SendAgentAlertMessage("You died!", true); | 2037 | presence.ControllingClient.SendAgentAlertMessage("You died!", true); |
2038 | presence.setHealthWithUpdate(healthliveagain); | 2038 | presence.setHealthWithUpdate(healthliveagain); |
2039 | presence.Scene.TeleportClientHome(presence.UUID, presence.ControllingClient); | 2039 | presence.Scene.TeleportClientHome(presence.UUID, presence.ControllingClient); |
2040 | } | 2040 | } |
2041 | } | 2041 | } |
2042 | } | 2042 | } |
2043 | } | 2043 | } |
2044 | public void osCauseHealing(string avatar, double healing) | 2044 | public void osCauseHealing(string avatar, double healing) |
2045 | { | 2045 | { |
2046 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); | 2046 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); |
2047 | m_host.AddScriptLPS(1); | 2047 | m_host.AddScriptLPS(1); |
2048 | 2048 | ||
2049 | UUID avatarId = new UUID(avatar); | 2049 | UUID avatarId = new UUID(avatar); |
2050 | ScenePresence presence = World.GetScenePresence(avatarId); | 2050 | ScenePresence presence = World.GetScenePresence(avatarId); |
2051 | Vector3 pos = m_host.GetWorldPosition(); | 2051 | Vector3 pos = m_host.GetWorldPosition(); |
2052 | bool result = World.ScriptDanger(m_host.LocalId, new Vector3((float)pos.X, (float)pos.Y, (float)pos.Z)); | 2052 | bool result = World.ScriptDanger(m_host.LocalId, new Vector3((float)pos.X, (float)pos.Y, (float)pos.Z)); |
2053 | if (result) | 2053 | if (result) |
2054 | { | 2054 | { |
2055 | if (presence != null) | 2055 | if (presence != null) |
2056 | { | 2056 | { |
2057 | float health = presence.Health; | 2057 | float health = presence.Health; |
2058 | health += (float)healing; | 2058 | health += (float)healing; |
2059 | if (health >= 100) | 2059 | if (health >= 100) |
2060 | { | 2060 | { |
2061 | health = 100; | 2061 | health = 100; |
2062 | } | 2062 | } |
2063 | presence.setHealthWithUpdate(health); | 2063 | presence.setHealthWithUpdate(health); |
2064 | } | 2064 | } |
2065 | } | 2065 | } |
2066 | } | 2066 | } |
2067 | } | 2067 | } |
2068 | } | 2068 | } |