diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
4 files changed, 75 insertions, 39 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index d5562f2..ee2a94c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2110,14 +2110,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2110 | public LSL_Integer llRotTarget(LSL_Rotation rot, double error) | 2110 | public LSL_Integer llRotTarget(LSL_Rotation rot, double error) |
2111 | { | 2111 | { |
2112 | m_host.AddScriptLPS(1); | 2112 | m_host.AddScriptLPS(1); |
2113 | NotImplemented("llRotTarget"); | 2113 | return m_host.registerRotTargetWaypoint(new Quaternion((float)rot.x, (float)rot.y, (float)rot.z, (float)rot.s), (float)error); |
2114 | return 0; | ||
2115 | } | 2114 | } |
2116 | 2115 | ||
2117 | public void llRotTargetRemove(int number) | 2116 | public void llRotTargetRemove(int number) |
2118 | { | 2117 | { |
2119 | m_host.AddScriptLPS(1); | 2118 | m_host.AddScriptLPS(1); |
2120 | NotImplemented("llRotTargetRemove"); | 2119 | m_host.unregisterRotTargetWaypoint(number); |
2121 | } | 2120 | } |
2122 | 2121 | ||
2123 | public void llMoveToTarget(LSL_Vector target, double tau) | 2122 | public void llMoveToTarget(LSL_Vector target, double tau) |
@@ -7286,23 +7285,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7286 | public LSL_Integer llGetNumberOfPrims() | 7285 | public LSL_Integer llGetNumberOfPrims() |
7287 | { | 7286 | { |
7288 | m_host.AddScriptLPS(1); | 7287 | m_host.AddScriptLPS(1); |
7289 | ScenePresence[] presences = World.GetScenePresences(); | ||
7290 | if (presences.Length == 0) | ||
7291 | return 0; | ||
7292 | |||
7293 | int avatarCount = 0; | 7288 | int avatarCount = 0; |
7294 | for (int i = 0; i < presences.Length; i++) | 7289 | World.ForEachScenePresence(delegate(ScenePresence presence) |
7295 | { | 7290 | { |
7296 | ScenePresence presence = presences[i]; | 7291 | if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID)) |
7297 | |||
7298 | if (!presence.IsChildAgent && presence.ParentID != 0) | ||
7299 | { | ||
7300 | if (m_host.ParentGroup.HasChildPrim(presence.ParentID)) | ||
7301 | { | ||
7302 | avatarCount++; | 7292 | avatarCount++; |
7303 | } | 7293 | }); |
7304 | } | ||
7305 | } | ||
7306 | 7294 | ||
7307 | return m_host.ParentGroup.PrimCount + avatarCount; | 7295 | return m_host.ParentGroup.PrimCount + avatarCount; |
7308 | } | 7296 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 0ed7f51..7462ba0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -1981,6 +1981,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1981 | 1981 | ||
1982 | return (int)pws; | 1982 | return (int)pws; |
1983 | } | 1983 | } |
1984 | |||
1984 | public void osSetSpeed(string UUID, float SpeedModifier) | 1985 | public void osSetSpeed(string UUID, float SpeedModifier) |
1985 | { | 1986 | { |
1986 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); | 1987 | CheckThreatLevel(ThreatLevel.Moderate, "osSetSpeed"); |
@@ -1988,6 +1989,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1988 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); | 1989 | ScenePresence avatar = World.GetScenePresence(new UUID(UUID)); |
1989 | avatar.SpeedModifier = SpeedModifier; | 1990 | avatar.SpeedModifier = SpeedModifier; |
1990 | } | 1991 | } |
1992 | |||
1991 | public void osKickAvatar(string FirstName,string SurName,string alert) | 1993 | public void osKickAvatar(string FirstName,string SurName,string alert) |
1992 | { | 1994 | { |
1993 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); | 1995 | CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); |
@@ -2008,6 +2010,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2008 | } | 2010 | } |
2009 | } | 2011 | } |
2010 | } | 2012 | } |
2013 | |||
2011 | public void osCauseDamage(string avatar, double damage) | 2014 | public void osCauseDamage(string avatar, double damage) |
2012 | { | 2015 | { |
2013 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); | 2016 | CheckThreatLevel(ThreatLevel.High, "osCauseDamage"); |
@@ -2035,6 +2038,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2035 | } | 2038 | } |
2036 | } | 2039 | } |
2037 | } | 2040 | } |
2041 | |||
2038 | public void osCauseHealing(string avatar, double healing) | 2042 | public void osCauseHealing(string avatar, double healing) |
2039 | { | 2043 | { |
2040 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); | 2044 | CheckThreatLevel(ThreatLevel.High, "osCauseHealing"); |
@@ -2059,4 +2063,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2059 | } | 2063 | } |
2060 | } | 2064 | } |
2061 | } | 2065 | } |
2062 | } | 2066 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs index 7f67599..9615315 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs | |||
@@ -62,6 +62,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
62 | land_collision_end = 4096, | 62 | land_collision_end = 4096, |
63 | land_collision_start = 8192, | 63 | land_collision_start = 8192, |
64 | at_target = 16384, | 64 | at_target = 16384, |
65 | at_rot_target = 16777216, | ||
65 | listen = 32768, | 66 | listen = 32768, |
66 | money = 65536, | 67 | money = 65536, |
67 | moving_end = 131072, | 68 | moving_end = 131072, |
@@ -203,7 +204,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
203 | } | 204 | } |
204 | 205 | ||
205 | m_eventFlagsMap.Add("attach", scriptEvents.attach); | 206 | m_eventFlagsMap.Add("attach", scriptEvents.attach); |
206 | // m_eventFlagsMap.Add("at_rot_target",(long)scriptEvents.at_rot_target); | 207 | m_eventFlagsMap.Add("at_rot_target", scriptEvents.at_rot_target); |
207 | m_eventFlagsMap.Add("at_target", scriptEvents.at_target); | 208 | m_eventFlagsMap.Add("at_target", scriptEvents.at_target); |
208 | // m_eventFlagsMap.Add("changed",(long)scriptEvents.changed); | 209 | // m_eventFlagsMap.Add("changed",(long)scriptEvents.changed); |
209 | m_eventFlagsMap.Add("collision", scriptEvents.collision); | 210 | m_eventFlagsMap.Add("collision", scriptEvents.collision); |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs index 8195f33..16309ef 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs | |||
@@ -59,10 +59,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
59 | myScriptEngine.World.EventManager.OnScriptChangedEvent += changed; | 59 | myScriptEngine.World.EventManager.OnScriptChangedEvent += changed; |
60 | myScriptEngine.World.EventManager.OnScriptAtTargetEvent += at_target; | 60 | myScriptEngine.World.EventManager.OnScriptAtTargetEvent += at_target; |
61 | myScriptEngine.World.EventManager.OnScriptNotAtTargetEvent += not_at_target; | 61 | myScriptEngine.World.EventManager.OnScriptNotAtTargetEvent += not_at_target; |
62 | myScriptEngine.World.EventManager.OnScriptAtRotTargetEvent += at_rot_target; | ||
63 | myScriptEngine.World.EventManager.OnScriptNotAtRotTargetEvent += not_at_rot_target; | ||
62 | myScriptEngine.World.EventManager.OnScriptControlEvent += control; | 64 | myScriptEngine.World.EventManager.OnScriptControlEvent += control; |
63 | myScriptEngine.World.EventManager.OnScriptColliderStart += collision_start; | 65 | myScriptEngine.World.EventManager.OnScriptColliderStart += collision_start; |
64 | myScriptEngine.World.EventManager.OnScriptColliding += collision; | 66 | myScriptEngine.World.EventManager.OnScriptColliding += collision; |
65 | myScriptEngine.World.EventManager.OnScriptCollidingEnd += collision_end; | 67 | myScriptEngine.World.EventManager.OnScriptCollidingEnd += collision_end; |
68 | myScriptEngine.World.EventManager.OnScriptLandColliderStart += land_collision_start; | ||
69 | myScriptEngine.World.EventManager.OnScriptLandColliding += land_collision; | ||
70 | myScriptEngine.World.EventManager.OnScriptLandColliderEnd += land_collision_end; | ||
66 | IMoneyModule money=myScriptEngine.World.RequestModuleInterface<IMoneyModule>(); | 71 | IMoneyModule money=myScriptEngine.World.RequestModuleInterface<IMoneyModule>(); |
67 | if (money != null) | 72 | if (money != null) |
68 | { | 73 | { |
@@ -285,29 +290,63 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
285 | det.ToArray())); | 290 | det.ToArray())); |
286 | } | 291 | } |
287 | 292 | ||
288 | public void land_collision_start(uint localID, UUID itemID) | 293 | public void land_collision_start(uint localID, ColliderArgs col) |
289 | { | 294 | { |
290 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 295 | List<DetectParams> det = new List<DetectParams>(); |
291 | "land_collision_start", | 296 | |
292 | new object[0], | 297 | foreach (DetectedObject detobj in col.Colliders) |
293 | new DetectParams[0])); | 298 | { |
299 | DetectParams d = new DetectParams(); | ||
300 | d.Position = new LSL_Types.Vector3(detobj.posVector.X, | ||
301 | detobj.posVector.Y, | ||
302 | detobj.posVector.Z); | ||
303 | d.Populate(myScriptEngine.World); | ||
304 | det.Add(d); | ||
305 | myScriptEngine.PostObjectEvent(localID, new EventParams( | ||
306 | "land_collision_start", | ||
307 | new Object[] { new LSL_Types.Vector3(d.Position) }, | ||
308 | det.ToArray())); | ||
309 | } | ||
310 | |||
294 | } | 311 | } |
295 | 312 | ||
296 | public void land_collision(uint localID, UUID itemID) | 313 | public void land_collision(uint localID, ColliderArgs col) |
297 | { | 314 | { |
298 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 315 | List<DetectParams> det = new List<DetectParams>(); |
299 | "land_collision", | 316 | |
300 | new object[0], | 317 | foreach (DetectedObject detobj in col.Colliders) |
301 | new DetectParams[0])); | 318 | { |
319 | DetectParams d = new DetectParams(); | ||
320 | d.Position = new LSL_Types.Vector3(detobj.posVector.X, | ||
321 | detobj.posVector.Y, | ||
322 | detobj.posVector.Z); | ||
323 | d.Populate(myScriptEngine.World); | ||
324 | det.Add(d); | ||
325 | myScriptEngine.PostObjectEvent(localID, new EventParams( | ||
326 | "land_collision", | ||
327 | new Object[] { new LSL_Types.Vector3(d.Position) }, | ||
328 | det.ToArray())); | ||
329 | } | ||
302 | } | 330 | } |
303 | 331 | ||
304 | public void land_collision_end(uint localID, UUID itemID) | 332 | public void land_collision_end(uint localID, ColliderArgs col) |
305 | { | 333 | { |
306 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 334 | List<DetectParams> det = new List<DetectParams>(); |
307 | "land_collision_end", | 335 | |
308 | new object[0], | 336 | foreach (DetectedObject detobj in col.Colliders) |
309 | new DetectParams[0])); | 337 | { |
310 | } | 338 | DetectParams d = new DetectParams(); |
339 | d.Position = new LSL_Types.Vector3(detobj.posVector.X, | ||
340 | detobj.posVector.Y, | ||
341 | detobj.posVector.Z); | ||
342 | d.Populate(myScriptEngine.World); | ||
343 | det.Add(d); | ||
344 | myScriptEngine.PostObjectEvent(localID, new EventParams( | ||
345 | "land_collision_end", | ||
346 | new Object[] { new LSL_Types.Vector3(d.Position) }, | ||
347 | det.ToArray())); | ||
348 | } | ||
349 | } | ||
311 | 350 | ||
312 | // timer: not handled here | 351 | // timer: not handled here |
313 | // listen: not handled here | 352 | // listen: not handled here |
@@ -353,14 +392,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
353 | new DetectParams[0])); | 392 | new DetectParams[0])); |
354 | } | 393 | } |
355 | 394 | ||
356 | public void at_rot_target(uint localID, UUID itemID) | 395 | public void at_rot_target(uint localID, uint handle, Quaternion targetrot, |
396 | Quaternion atrot) | ||
357 | { | 397 | { |
358 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 398 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
359 | "at_rot_target",new object[0], | 399 | "at_rot_target", new object[] { |
400 | new LSL_Types.LSLInteger(handle), | ||
401 | new LSL_Types.Quaternion(targetrot.X,targetrot.Y,targetrot.Z,targetrot.W), | ||
402 | new LSL_Types.Quaternion(atrot.X,atrot.Y,atrot.Z,atrot.W) }, | ||
360 | new DetectParams[0])); | 403 | new DetectParams[0])); |
361 | } | 404 | } |
362 | 405 | ||
363 | public void not_at_rot_target(uint localID, UUID itemID) | 406 | public void not_at_rot_target(uint localID) |
364 | { | 407 | { |
365 | myScriptEngine.PostObjectEvent(localID, new EventParams( | 408 | myScriptEngine.PostObjectEvent(localID, new EventParams( |
366 | "not_at_rot_target",new object[0], | 409 | "not_at_rot_target",new object[0], |