public void llStartAnimation(string anim)
{
if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return;
UUID invItemID = InventorySelf();
if (invItemID == UUID.Zero)
return;
TaskInventoryItem item;
lock (m_host.TaskInventory)
{
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
return;
item = m_host.TaskInventory[InventorySelf()];
}
if (item.PermsGranter == UUID.Zero)
return;
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
{
IScenePresence presence = World.GetScenePresence(item.PermsGranter);
if (presence != null)
{
// Do NOT try to parse UUID, animations cannot be triggered by ID
UUID animID = InventoryKey(anim, (int)AssetType.Animation);
if (animID == UUID.Zero)
{
if (UUID.TryParse(anim, out animID))
presence.Animator.AddAnimation(animID, m_host.UUID);
else
{
bool RetVal = presence.Animator.AddAnimation(anim, m_host.UUID);
if (!RetVal)
{
IChatModule chatModule = World.RequestModuleInterface<IChatModule>();
if (chatModule != null)
chatModule.SimChat("Could not find animation '" + anim + "'.",
ChatTypeEnum.DebugChannel, 2147483647, m_host.AbsolutePosition,
m_host.Name, m_host.UUID, false, World);
}
}
}
else
presence.Animator.AddAnimation(animID, m_host.UUID);
}
}
}