add script constant OS_APIVERSION, we should inc this on any change on any api. a few changes to os npc and avatar animation functions
parent
1e76e14cce
commit
87acd20d95
|
@ -1128,15 +1128,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adam's super super custom animation functions
|
// Adam's super super custom animation functions
|
||||||
public void osAvatarPlayAnimation(string avatar, string animation)
|
public void osAvatarPlayAnimation(LSL_Key avatar, string animation)
|
||||||
{
|
{
|
||||||
CheckThreatLevel(ThreatLevel.VeryHigh, "osAvatarPlayAnimation");
|
CheckThreatLevel(ThreatLevel.VeryHigh, "osAvatarPlayAnimation");
|
||||||
|
|
||||||
AvatarPlayAnimation(avatar, animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AvatarPlayAnimation(string avatar, string animation)
|
|
||||||
{
|
|
||||||
UUID avatarID;
|
UUID avatarID;
|
||||||
if(!UUID.TryParse(avatar, out avatarID))
|
if(!UUID.TryParse(avatar, out avatarID))
|
||||||
return;
|
return;
|
||||||
|
@ -1166,28 +1161,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
target.Animator.AddAnimation(animID, m_host.UUID);
|
target.Animator.AddAnimation(animID, m_host.UUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void osAvatarStopAnimation(string avatar, string animation)
|
public void osAvatarStopAnimation(LSL_Key avatar, string animation)
|
||||||
{
|
{
|
||||||
CheckThreatLevel(ThreatLevel.VeryHigh, "osAvatarStopAnimation");
|
CheckThreatLevel(ThreatLevel.VeryHigh, "osAvatarStopAnimation");
|
||||||
|
|
||||||
AvatarStopAnimation(avatar, animation);
|
UUID avatarID;
|
||||||
}
|
if(!UUID.TryParse(avatar, out avatarID))
|
||||||
|
return;
|
||||||
|
|
||||||
private void AvatarStopAnimation(string avatar, string animation)
|
ScenePresence target = World.GetScenePresence(avatarID);
|
||||||
{
|
if (target == null)
|
||||||
UUID avatarID = (UUID)avatar;
|
return;
|
||||||
|
|
||||||
// FIXME: What we really want to do here is factor out the similar code in llStopAnimation() to a common
|
|
||||||
// method (though see that doesn't do the is animation check, which is probably a bug) and have both
|
|
||||||
// these functions call that common code. However, this does mean navigating the brain-dead requirement
|
|
||||||
// of calling InitLSL()
|
|
||||||
if (World.Entities.ContainsKey(avatarID) && World.Entities[avatarID] is ScenePresence)
|
|
||||||
{
|
|
||||||
ScenePresence target = (ScenePresence)World.Entities[avatarID];
|
|
||||||
if (target != null)
|
|
||||||
{
|
|
||||||
UUID animID;
|
UUID animID;
|
||||||
|
|
||||||
if (!UUID.TryParse(animation, out animID))
|
if (!UUID.TryParse(animation, out animID))
|
||||||
{
|
{
|
||||||
TaskInventoryItem item = m_host.Inventory.GetInventoryItem(animation);
|
TaskInventoryItem item = m_host.Inventory.GetInventoryItem(animation);
|
||||||
|
@ -1197,14 +1183,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
animID = UUID.Zero;
|
animID = UUID.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (animID == UUID.Zero)
|
if (animID == UUID.Zero)
|
||||||
target.Animator.RemoveAnimation(animation);
|
target.Animator.RemoveAnimation(animation);
|
||||||
else
|
else
|
||||||
target.Animator.RemoveAnimation(animID, true);
|
target.Animator.RemoveAnimation(animID, true);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Texture draw functions
|
//Texture draw functions
|
||||||
|
|
||||||
|
@ -3340,27 +3323,74 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
CheckThreatLevel(ThreatLevel.High, "osNpcPlayAnimation");
|
CheckThreatLevel(ThreatLevel.High, "osNpcPlayAnimation");
|
||||||
|
|
||||||
INPCModule module = World.RequestModuleInterface<INPCModule>();
|
INPCModule module = World.RequestModuleInterface<INPCModule>();
|
||||||
if (module != null)
|
if (module == null)
|
||||||
{
|
return;
|
||||||
UUID npcID = new UUID(npc.m_string);
|
|
||||||
|
|
||||||
if (module.CheckPermissions(npcID, m_host.OwnerID))
|
UUID npcID;
|
||||||
AvatarPlayAnimation(npcID.ToString(), animation);
|
if(!UUID.TryParse(npc.m_string, out npcID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ScenePresence target = World.GetScenePresence(npcID);
|
||||||
|
if (target == null || !target.IsNPC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!module.CheckPermissions(npcID, m_host.OwnerID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
UUID animID = UUID.Zero;
|
||||||
|
m_host.TaskInventory.LockItemsForRead(true);
|
||||||
|
foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory)
|
||||||
|
{
|
||||||
|
if (inv.Value.Type == (int)AssetType.Animation)
|
||||||
|
{
|
||||||
|
if (inv.Value.Name == animation)
|
||||||
|
{
|
||||||
|
animID = inv.Value.AssetID;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
m_host.TaskInventory.LockItemsForRead(false);
|
||||||
|
|
||||||
|
if (animID == UUID.Zero)
|
||||||
|
target.Animator.AddAnimation(animation, m_host.UUID);
|
||||||
|
else
|
||||||
|
target.Animator.AddAnimation(animID, m_host.UUID);
|
||||||
|
}
|
||||||
|
|
||||||
public void osNpcStopAnimation(LSL_Key npc, string animation)
|
public void osNpcStopAnimation(LSL_Key npc, string animation)
|
||||||
{
|
{
|
||||||
CheckThreatLevel(ThreatLevel.High, "osNpcStopAnimation");
|
CheckThreatLevel(ThreatLevel.High, "osNpcStopAnimation");
|
||||||
|
|
||||||
INPCModule module = World.RequestModuleInterface<INPCModule>();
|
INPCModule module = World.RequestModuleInterface<INPCModule>();
|
||||||
if (module != null)
|
if (module == null)
|
||||||
{
|
return;
|
||||||
UUID npcID = new UUID(npc.m_string);
|
|
||||||
|
|
||||||
if (module.CheckPermissions(npcID, m_host.OwnerID))
|
UUID npcID;
|
||||||
AvatarStopAnimation(npcID.ToString(), animation);
|
if (!UUID.TryParse(npc.m_string, out npcID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ScenePresence target = World.GetScenePresence(npcID);
|
||||||
|
if (target == null || !target.IsNPC)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!module.CheckPermissions(npcID, m_host.OwnerID))
|
||||||
|
return;
|
||||||
|
|
||||||
|
UUID animID;
|
||||||
|
if (!UUID.TryParse(animation, out animID))
|
||||||
|
{
|
||||||
|
TaskInventoryItem item = m_host.Inventory.GetInventoryItem(animation);
|
||||||
|
if (item != null && item.Type == (int)AssetType.Animation)
|
||||||
|
animID = item.AssetID;
|
||||||
|
else
|
||||||
|
animID = UUID.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (animID == UUID.Zero)
|
||||||
|
target.Animator.RemoveAnimation(animation);
|
||||||
|
else
|
||||||
|
target.Animator.RemoveAnimation(animID, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void osNpcWhisper(LSL_Key npc, int channel, string message)
|
public void osNpcWhisper(LSL_Key npc, int channel, string message)
|
||||||
|
|
|
@ -158,8 +158,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void osTeleportOwner(LSL_Types.Vector3 position, LSL_Types.Vector3 lookat);
|
void osTeleportOwner(LSL_Types.Vector3 position, LSL_Types.Vector3 lookat);
|
||||||
|
|
||||||
// Animation commands
|
// Animation commands
|
||||||
void osAvatarPlayAnimation(string avatar, string animation);
|
void osAvatarPlayAnimation(LSL_Key avatarId, string animation);
|
||||||
void osAvatarStopAnimation(string avatar, string animation);
|
void osAvatarStopAnimation(LSL_Key avatarId, string animation);
|
||||||
|
|
||||||
#region Attachment commands
|
#region Attachment commands
|
||||||
|
|
||||||
|
|
|
@ -29,13 +29,14 @@ using System;
|
||||||
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
|
using vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
|
||||||
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
|
using rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
|
||||||
using LSLInteger = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
using LSLInteger = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
||||||
using LSLString = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
{
|
{
|
||||||
public partial class ScriptBaseClass
|
public partial class ScriptBaseClass
|
||||||
{
|
{
|
||||||
// SCRIPTS CONSTANTS
|
// SCRIPTS CONSTANTS
|
||||||
|
public static readonly LSLInteger OS_APIVERSION = 1;
|
||||||
|
|
||||||
public static readonly LSLInteger TRUE = 1;
|
public static readonly LSLInteger TRUE = 1;
|
||||||
public static readonly LSLInteger FALSE = 0;
|
public static readonly LSLInteger FALSE = 0;
|
||||||
|
|
||||||
|
|
|
@ -289,12 +289,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
|
|
||||||
// Animation Functions
|
// Animation Functions
|
||||||
|
|
||||||
public void osAvatarPlayAnimation(string avatar, string animation)
|
public void osAvatarPlayAnimation(LSL_Key avatar, string animation)
|
||||||
{
|
{
|
||||||
m_OSSL_Functions.osAvatarPlayAnimation(avatar, animation);
|
m_OSSL_Functions.osAvatarPlayAnimation(avatar, animation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void osAvatarStopAnimation(string avatar, string animation)
|
public void osAvatarStopAnimation(LSL_Key avatar, string animation)
|
||||||
{
|
{
|
||||||
m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
|
m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
0acc12d6-3dc9-9574-7bd6-d298c045f046
|
a56cd39c-7cce-5185-6e57-d5284505356d
|
||||||
<llsd><map><key>llsd-lsl-syntax-version</key><integer>2</integer>
|
<llsd><map><key>llsd-lsl-syntax-version</key><integer>2</integer>
|
||||||
<key>controls</key>
|
<key>controls</key>
|
||||||
<map>
|
<map>
|
||||||
|
@ -1511,6 +1511,10 @@
|
||||||
<key>value</key><string>3</string>
|
<key>value</key><string>3</string>
|
||||||
<key>tooltip</key><string>not supported</string>
|
<key>tooltip</key><string>not supported</string>
|
||||||
</map>
|
</map>
|
||||||
|
<key>OS_APIVERSION</key><map>
|
||||||
|
<key>type</key><string>integer</string>
|
||||||
|
<key>value</key><string>1</string>
|
||||||
|
</map>
|
||||||
<key>OS_ATTACH_MSG_ALL</key><map>
|
<key>OS_ATTACH_MSG_ALL</key><map>
|
||||||
<key>type</key><string>integer</string>
|
<key>type</key><string>integer</string>
|
||||||
<key>value</key><string>-65535</string>
|
<key>value</key><string>-65535</string>
|
||||||
|
@ -6120,14 +6124,14 @@
|
||||||
<key>osAvatarPlayAnimation</key>
|
<key>osAvatarPlayAnimation</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>avatar</key><map><key>type</key><string>string</string></map></map>
|
<map><key>avatarId</key><map><key>type</key><string>key</string></map></map>
|
||||||
<map><key>animation</key><map><key>type</key><string>string</string></map></map>
|
<map><key>animation</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>osAvatarStopAnimation</key>
|
<key>osAvatarStopAnimation</key>
|
||||||
<map>
|
<map>
|
||||||
<key>arguments</key><array>
|
<key>arguments</key><array>
|
||||||
<map><key>avatar</key><map><key>type</key><string>string</string></map></map>
|
<map><key>avatarId</key><map><key>type</key><string>key</string></map></map>
|
||||||
<map><key>animation</key><map><key>type</key><string>string</string></map></map>
|
<map><key>animation</key><map><key>type</key><string>string</string></map></map>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
|
|
Loading…
Reference in New Issue