diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 50 |
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 |