Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

implementing function to allow scripts to self-replicate as if the ow…

…ner duplicated them, using the same script delay as llRezObject()
  • Loading branch information...
commit 2ad9d656b3a1a0c519c9599d7680f98eba7e82b8 1 parent a3cbda0
@SignpostMarv SignpostMarv authored justincc committed
View
50 OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -3344,5 +3344,55 @@ public LSL_Key osGetRezzingObject()
return new LSL_Key(m_host.ParentGroup.FromPartID.ToString());
}
+
+ public void osRezDuplicate(LSL_Vector offset, LSL_Rotation rot)
+ {
+ CheckThreatLevel(ThreatLevel.High, "osRezDuplicate");
+ m_host.AddScriptLPS(1);
+
+ Vector3 v = new Vector3((float)offset.x, (float)offset.y, (float)offset.z);
+ Quaternion r = new Quaternion(
+ (float)rot.x,
+ (float)rot.y,
+ (float)rot.z,
+ (float)rot.s
+ );
+
+ Vector3 destination = m_host.ParentGroup.AbsolutePosition + v;
+
+ if (!World.Permissions.CanRezObject(
+ m_host.ParentGroup.PrimCount,
+ m_host.OwnerID,
+ destination
+ ))
+ {
+ OSSLShoutError("Cannot duplicate object to destination, owner cannot rez objects at destination parcel.");
+
+ ScriptSleep(100);
+ }
+ else
+ {
+ SceneObjectGroup duplicate = World.SceneGraph.DuplicateObject(
+ m_host.ParentGroup.LocalId,
+ v,
+ m_host.ParentGroup.RootPart.GetEffectiveObjectFlags(),
+ m_host.OwnerID,
+ m_host.GroupID,
+ r
+ );
+
+ m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams(
+ "object_rez", new Object[] {
+ new LSL_String(
+ duplicate.RootPart.UUID.ToString()) },
+ new DetectParams[0]));
+
+ ScriptSleep(100);
+ m_ScriptEngine.PostObjectEvent(duplicate.LocalId, new EventParams(
+ "on_rez", new Object[]{
+ new LSL_Integer(0)},
+ new DetectParams[0]));
+ }
+ }
}
}
View
7 OpenSim/Region/ScriptEngine/Shared/Api/Interface/IOSSL_Api.cs
@@ -306,5 +306,12 @@ public interface IOSSL_Api
/// </summary>
/// <returns>Rezzing object key or NULL_KEY if rezzed by agent or otherwise unknown.</returns>
LSL_Key osGetRezzingObject();
+
+ /// <summary>
+ /// Duplicates an object as if the owner duplicated it.
+ /// </summary>
+ /// <param name="offset"></param>
+ /// <param name="rot"></param>
+ void osRezDuplicate(vector offset, rotation rot);
}
}
View
5 OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs
@@ -955,5 +955,10 @@ public LSL_Key osGetRezzingObject()
{
return m_OSSL_Functions.osGetRezzingObject();
}
+
+ public void osRezDuplicate(vector offset, rotation rot)
+ {
+ m_OSSL_Functions.osRezDuplicate(offset, rot);
+ }
}
}
Please sign in to comment.
Something went wrong with that request. Please try again.