diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 77 |
2 files changed, 94 insertions, 2 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 6102504..d242506 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2752,7 +2752,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2752 | public void llCollisionFilter(string name, string id, int accept) | 2752 | public void llCollisionFilter(string name, string id, int accept) |
2753 | { | 2753 | { |
2754 | m_host.AddScriptLPS(1); | 2754 | m_host.AddScriptLPS(1); |
2755 | NotImplemented("llCollisionFilter"); | 2755 | m_host.CollisionFilter.Clear(); |
2756 | if(id != null) | ||
2757 | { | ||
2758 | m_host.CollisionFilter.Add(accept,id); | ||
2759 | } | ||
2760 | else | ||
2761 | { | ||
2762 | m_host.CollisionFilter.Add(accept,name); | ||
2763 | } | ||
2756 | } | 2764 | } |
2757 | 2765 | ||
2758 | public void llTakeControls(int controls, int accept, int pass_on) | 2766 | public void llTakeControls(int controls, int accept, int pass_on) |
@@ -4232,7 +4240,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4232 | public void llPassCollisions(int pass) | 4240 | public void llPassCollisions(int pass) |
4233 | { | 4241 | { |
4234 | m_host.AddScriptLPS(1); | 4242 | m_host.AddScriptLPS(1); |
4235 | NotImplemented("llPassCollisions"); | 4243 | if(pass == 0) |
4244 | { | ||
4245 | m_host.ParentGroup.PassCollision = false; | ||
4246 | } | ||
4247 | else | ||
4248 | { | ||
4249 | m_host.ParentGroup.PassCollision = true; | ||
4250 | } | ||
4236 | } | 4251 | } |
4237 | 4252 | ||
4238 | public LSL_String llGetScriptName() | 4253 | public LSL_String llGetScriptName() |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 9c7604b..5abe4b1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1983,5 +1983,82 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1983 | 1983 | ||
1984 | return (int)pws; | 1984 | return (int)pws; |
1985 | } | 1985 | } |
1986 | public void osSetSpeed(string UUID, float SpeedModifier) | ||
1987 | { | ||
1988 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); | ||
1989 | m_host.AddScriptLPS(1); | ||
1990 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); | ||
1991 | avatar.SpeedModifier = SpeedModifier; | ||
1992 | } | ||
1993 | public void osKickAvatar(string FirstName,string SurName,string alert) | ||
1994 | { | ||
1995 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); | ||
1996 | if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) | ||
1997 | { | ||
1998 | foreach (ScenePresence presence in World.GetAvatars()) | ||
1999 | { | ||
2000 | if ((presence.Firstname == FirstName) && | ||
2001 | presence.Lastname == SurName) | ||
2002 | { | ||
2003 | // kick client... | ||
2004 | if (alert != null) | ||
2005 | presence.ControllingClient.Kick(alert); | ||
2006 | |||
2007 | // ...and close on our side | ||
2008 | presence.Scene.IncomingCloseAgent(presence.UUID); | ||
2009 | } | ||
2010 | } | ||
2011 | } | ||
2012 | } | ||
2013 | public void osCauseDamage(string avatar, double damage) | ||
2014 | { | ||
2015 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); | ||
2016 | m_host.AddScriptLPS(1); | ||
2017 | |||
2018 | UUID avatarId = new UUID(avatar); | ||
2019 | Vector3 pos = m_host.GetWorldPosition(); | ||
2020 | |||
2021 | ScenePresence presence = World.GetScenePresence(avatarId); | ||
2022 | if (presence != null) | ||
2023 | { | ||
2024 | LandData land = World.GetLandData((float)pos.X, (float)pos.Y); | ||
2025 | if ((land.Flags & (uint)ParcelFlags.AllowDamage) == (uint)ParcelFlags.AllowDamage) | ||
2026 | { | ||
2027 | float health = presence.Health; | ||
2028 | health -= (float)damage; | ||
2029 | presence.setHealthWithUpdate(health); | ||
2030 | if (health <= 0) | ||
2031 | { | ||
2032 | float healthliveagain = 100; | ||
2033 | presence.ControllingClient.SendAgentAlertMessage("You died!", true); | ||
2034 | presence.setHealthWithUpdate(healthliveagain); | ||
2035 | presence.Scene.TeleportClientHome(presence.UUID, presence.ControllingClient); | ||
2036 | } | ||
2037 | } | ||
2038 | } | ||
2039 | } | ||
2040 | public void osCauseHealing(string avatar, double healing) | ||
2041 | { | ||
2042 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); | ||
2043 | m_host.AddScriptLPS(1); | ||
2044 | |||
2045 | UUID avatarId = new UUID(avatar); | ||
2046 | ScenePresence presence = World.GetScenePresence(avatarId); | ||
2047 | Vector3 pos = m_host.GetWorldPosition(); | ||
2048 | bool result = World.ScriptDanger(m_host.LocalId, new Vector3((float)pos.X, (float)pos.Y, (float)pos.Z)); | ||
2049 | if (result) | ||
2050 | { | ||
2051 | if (presence != null) | ||
2052 | { | ||
2053 | float health = presence.Health; | ||
2054 | health += (float)healing; | ||
2055 | if (health >= 100) | ||
2056 | { | ||
2057 | health = 100; | ||
2058 | } | ||
2059 | presence.setHealthWithUpdate(health); | ||
2060 | } | ||
2061 | } | ||
2062 | } | ||
1986 | } | 2063 | } |
1987 | } | 2064 | } |