implementing function to allow scripts to self-replicate as if the owner duplicated them, using the same script delay as llRezObject()
parent
a3cbda0d74
commit
2ad9d656b3
|
@ -3344,5 +3344,55 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
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]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -306,5 +306,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
|||
/// </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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -955,5 +955,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
{
|
||||
return m_OSSL_Functions.osGetRezzingObject();
|
||||
}
|
||||
|
||||
public void osRezDuplicate(vector offset, rotation rot)
|
||||
{
|
||||
m_OSSL_Functions.osRezDuplicate(offset, rot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue