aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
diff options
context:
space:
mode:
authorSignpostMarv2012-08-10 15:58:29 +0100
committerJustin Clark-Casey (justincc)2012-08-24 00:21:42 +0100
commit2ad9d656b3a1a0c519c9599d7680f98eba7e82b8 (patch)
treea6879c3744123e27f66f5984ba2df634ba4448df /OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
parentRemoved land checking as suggested by SignpostMarv. (diff)
downloadopensim-SC_OLD-2ad9d656b3a1a0c519c9599d7680f98eba7e82b8.zip
opensim-SC_OLD-2ad9d656b3a1a0c519c9599d7680f98eba7e82b8.tar.gz
opensim-SC_OLD-2ad9d656b3a1a0c519c9599d7680f98eba7e82b8.tar.bz2
opensim-SC_OLD-2ad9d656b3a1a0c519c9599d7680f98eba7e82b8.tar.xz
implementing function to allow scripts to self-replicate as if the owner duplicated them, using the same script delay as llRezObject()
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs50
1 files changed, 50 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 5e7c2d9..119c2ac 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -3344,5 +3344,55 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3344 3344
3345 return new LSL_Key(m_host.ParentGroup.FromPartID.ToString()); 3345 return new LSL_Key(m_host.ParentGroup.FromPartID.ToString());
3346 } 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 }
3347 } 3397 }
3348} \ No newline at end of file 3398} \ No newline at end of file