aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs61
1 files changed, 61 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 1e8b51b..119c2ac 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -2895,6 +2895,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2895 } 2895 }
2896 }); 2896 });
2897 } 2897 }
2898
2899 public LSL_Float osGetHealth(string avatar)
2900 {
2901 CheckThreatLevel(ThreatLevel.None, "osGetHealth");
2902 m_host.AddScriptLPS(1);
2903
2904 LSL_Float health = new LSL_Float(-1);
2905 ScenePresence presence = World.GetScenePresence(new UUID(avatar));
2906 if (presence != null) health = presence.Health;
2907 return health;
2908 }
2898 2909
2899 public void osCauseDamage(string avatar, double damage) 2910 public void osCauseDamage(string avatar, double damage)
2900 { 2911 {
@@ -3333,5 +3344,55 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3333 3344
3334 return new LSL_Key(m_host.ParentGroup.FromPartID.ToString()); 3345 return new LSL_Key(m_host.ParentGroup.FromPartID.ToString());
3335 } 3346 }
3347
3348 public void osRezDuplicate(LSL_Vector offset, LSL_Rotation rot)
3349 {
3350 CheckThreatLevel(ThreatLevel.High, "osRezDuplicate");
3351 m_host.AddScriptLPS(1);
3352
3353 Vector3 v = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
3354 Quaternion r = new Quaternion(
3355 (float)rot.x,
3356 (float)rot.y,
3357 (float)rot.z,
3358 (float)rot.s
3359 );
3360
3361 Vector3 destination = m_host.ParentGroup.AbsolutePosition + v;
3362
3363 if (!World.Permissions.CanRezObject(
3364 m_host.ParentGroup.PrimCount,
3365 m_host.OwnerID,
3366 destination
3367 ))
3368 {
3369 OSSLShoutError("Cannot duplicate object to destination, owner cannot rez objects at destination parcel.");
3370
3371 ScriptSleep(100);
3372 }
3373 else
3374 {
3375 SceneObjectGroup duplicate = World.SceneGraph.DuplicateObject(
3376 m_host.ParentGroup.LocalId,
3377 v,
3378 m_host.ParentGroup.RootPart.GetEffectiveObjectFlags(),
3379 m_host.OwnerID,
3380 m_host.GroupID,
3381 r
3382 );
3383
3384 m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams(
3385 "object_rez", new Object[] {
3386 new LSL_String(
3387 duplicate.RootPart.UUID.ToString()) },
3388 new DetectParams[0]));
3389
3390 ScriptSleep(100);
3391 m_ScriptEngine.PostObjectEvent(duplicate.LocalId, new EventParams(
3392 "on_rez", new Object[]{
3393 new LSL_Integer(0)},
3394 new DetectParams[0]));
3395 }
3396 }
3336 } 3397 }
3337} \ No newline at end of file 3398} \ No newline at end of file