public DateTime llCreateLink(string target, int parent)
{
if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID))
return DateTime.Now;
UUID invItemID = InventorySelf();
UUID targetID;
if (!UUID.TryParse(target, out targetID))
return DateTime.Now;
TaskInventoryItem item;
lock (m_host.TaskInventory)
{
item = m_host.TaskInventory[invItemID];
}
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
&& !m_automaticLinkPermission)
{
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
return DateTime.Now;
}
IClientAPI client = null;
IScenePresence sp = World.GetScenePresence(item.PermsGranter);
if (sp != null)
client = sp.ControllingClient;
ISceneChildEntity targetPart = World.GetSceneObjectPart(targetID);
if (targetPart.ParentEntity.RootChild.AttachmentPoint != 0)
return DateTime.Now;
// Fail silently if attached
ISceneEntity parentPrim = null;
ISceneEntity childPrim = null;
if (parent != 0)
{
parentPrim = m_host.ParentEntity;
childPrim = targetPart.ParentEntity;
}
else
{
parentPrim = targetPart.ParentEntity;
childPrim = m_host.ParentEntity;
}
// byte uf = childPrim.RootPart.UpdateFlag;
parentPrim.LinkToGroup(childPrim);
// if (uf != (Byte)0)
// parent.RootPart.UpdateFlag = uf;
parentPrim.TriggerScriptChangedEvent(Changed.LINK);
parentPrim.RootChild.CreateSelected = true;
parentPrim.ScheduleGroupUpdate(PrimUpdateFlags.ForcedFullUpdate);
if (client != null)
parentPrim.GetProperties(client);
return PScriptSleep(1000);
}