Merge branch 'master' of /home/opensim/var/repo/opensim
commit
f61447cd8d
|
@ -29,7 +29,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
public class VersionInfo
|
public class VersionInfo
|
||||||
{
|
{
|
||||||
private const string VERSION_NUMBER = "0.7.4";
|
private const string VERSION_NUMBER = "0.7.5";
|
||||||
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
||||||
|
|
||||||
public enum Flavour
|
public enum Flavour
|
||||||
|
|
|
@ -3419,6 +3419,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
List<SceneObjectGroup> attachments = new List<SceneObjectGroup>();
|
List<SceneObjectGroup> attachments = new List<SceneObjectGroup>();
|
||||||
|
|
||||||
|
if (attachmentPoint >= 0)
|
||||||
|
{
|
||||||
lock (m_attachments)
|
lock (m_attachments)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectGroup so in m_attachments)
|
foreach (SceneObjectGroup so in m_attachments)
|
||||||
|
@ -3427,6 +3429,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
attachments.Add(so);
|
attachments.Add(so);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return attachments;
|
return attachments;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1673,6 +1673,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MessageObject(objUUID, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MessageObject(UUID objUUID, string message)
|
||||||
|
{
|
||||||
object[] resobj = new object[] { new LSL_Types.LSLString(m_host.UUID.ToString()), new LSL_Types.LSLString(message) };
|
object[] resobj = new object[] { new LSL_Types.LSLString(m_host.UUID.ToString()), new LSL_Types.LSLString(message) };
|
||||||
|
|
||||||
SceneObjectPart sceneOP = World.GetSceneObjectPart(objUUID);
|
SceneObjectPart sceneOP = World.GetSceneObjectPart(objUUID);
|
||||||
|
@ -3224,6 +3229,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Attachment commands
|
||||||
|
|
||||||
public void osForceAttachToAvatar(int attachmentPoint)
|
public void osForceAttachToAvatar(int attachmentPoint)
|
||||||
{
|
{
|
||||||
CheckThreatLevel(ThreatLevel.High, "osForceAttachToAvatar");
|
CheckThreatLevel(ThreatLevel.High, "osForceAttachToAvatar");
|
||||||
|
@ -3313,6 +3320,175 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
((LSL_Api)m_LSL_Api).DetachFromAvatar();
|
((LSL_Api)m_LSL_Api).DetachFromAvatar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_List osGetNumberOfAttachments(LSL_Key avatar, LSL_List attachmentPoints)
|
||||||
|
{
|
||||||
|
CheckThreatLevel(ThreatLevel.Moderate, "osGetNumberOfAttachments");
|
||||||
|
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
UUID targetUUID;
|
||||||
|
ScenePresence target;
|
||||||
|
LSL_List resp = new LSL_List();
|
||||||
|
|
||||||
|
if (attachmentPoints.Length >= 1 && UUID.TryParse(avatar.ToString(), out targetUUID) && World.TryGetScenePresence(targetUUID, out target))
|
||||||
|
{
|
||||||
|
foreach (object point in attachmentPoints.Data)
|
||||||
|
{
|
||||||
|
LSL_Integer ipoint = new LSL_Integer(
|
||||||
|
(point is LSL_Integer || point is int || point is uint) ?
|
||||||
|
(int)point :
|
||||||
|
0
|
||||||
|
);
|
||||||
|
resp.Add(ipoint);
|
||||||
|
if (ipoint == 0)
|
||||||
|
{
|
||||||
|
// indicates zero attachments
|
||||||
|
resp.Add(new LSL_Integer(0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// gets the number of attachments on the attachment point
|
||||||
|
resp.Add(new LSL_Integer(target.GetAttachments((uint)ipoint).Count));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void osMessageAttachments(LSL_Key avatar, string message, LSL_List attachmentPoints, int options)
|
||||||
|
{
|
||||||
|
CheckThreatLevel(ThreatLevel.Moderate, "osMessageAttachments");
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
UUID targetUUID;
|
||||||
|
ScenePresence target;
|
||||||
|
|
||||||
|
if (attachmentPoints.Length >= 1 && UUID.TryParse(avatar.ToString(), out targetUUID) && World.TryGetScenePresence(targetUUID, out target))
|
||||||
|
{
|
||||||
|
List<int> aps = new List<int>();
|
||||||
|
foreach (object point in attachmentPoints.Data)
|
||||||
|
{
|
||||||
|
int ipoint;
|
||||||
|
if (int.TryParse(point.ToString(), out ipoint))
|
||||||
|
{
|
||||||
|
aps.Add(ipoint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SceneObjectGroup> attachments = new List<SceneObjectGroup>();
|
||||||
|
|
||||||
|
bool msgAll = aps.Contains(ScriptBaseClass.OS_ATTACH_MSG_ALL);
|
||||||
|
bool invertPoints = (options & ScriptBaseClass.OS_ATTACH_MSG_INVERT_POINTS) != 0;
|
||||||
|
|
||||||
|
if (msgAll && invertPoints)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (msgAll || invertPoints)
|
||||||
|
{
|
||||||
|
attachments = target.GetAttachments();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (int point in aps)
|
||||||
|
{
|
||||||
|
if (point > 0)
|
||||||
|
{
|
||||||
|
attachments.AddRange(target.GetAttachments((uint)point));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we have no attachments at this point, exit now
|
||||||
|
if (attachments.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SceneObjectGroup> ignoreThese = new List<SceneObjectGroup>();
|
||||||
|
|
||||||
|
if (invertPoints)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectGroup attachment in attachments)
|
||||||
|
{
|
||||||
|
if (aps.Contains((int)attachment.AttachmentPoint))
|
||||||
|
{
|
||||||
|
ignoreThese.Add(attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup attachment in ignoreThese)
|
||||||
|
{
|
||||||
|
attachments.Remove(attachment);
|
||||||
|
}
|
||||||
|
ignoreThese.Clear();
|
||||||
|
|
||||||
|
// if inverting removed all attachments to check, exit now
|
||||||
|
if (attachments.Count < 1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((options & ScriptBaseClass.OS_ATTACH_MSG_OBJECT_CREATOR) != 0)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectGroup attachment in attachments)
|
||||||
|
{
|
||||||
|
if (attachment.RootPart.CreatorID != m_host.CreatorID)
|
||||||
|
{
|
||||||
|
ignoreThese.Add(attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup attachment in ignoreThese)
|
||||||
|
{
|
||||||
|
attachments.Remove(attachment);
|
||||||
|
}
|
||||||
|
ignoreThese.Clear();
|
||||||
|
|
||||||
|
// if filtering by same object creator removed all
|
||||||
|
// attachments to check, exit now
|
||||||
|
if (attachments.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((options & ScriptBaseClass.OS_ATTACH_MSG_SCRIPT_CREATOR) != 0)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectGroup attachment in attachments)
|
||||||
|
{
|
||||||
|
if (attachment.RootPart.CreatorID != m_item.CreatorID)
|
||||||
|
{
|
||||||
|
ignoreThese.Add(attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup attachment in ignoreThese)
|
||||||
|
{
|
||||||
|
attachments.Remove(attachment);
|
||||||
|
}
|
||||||
|
ignoreThese.Clear();
|
||||||
|
|
||||||
|
// if filtering by object creator must match originating
|
||||||
|
// script creator removed all attachments to check,
|
||||||
|
// exit now
|
||||||
|
if (attachments.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup attachment in attachments)
|
||||||
|
{
|
||||||
|
MessageObject(attachment.RootPart.UUID, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if thing is a UUID.
|
/// Checks if thing is a UUID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -157,7 +157,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
void osAvatarPlayAnimation(string avatar, string animation);
|
void osAvatarPlayAnimation(string avatar, string animation);
|
||||||
void osAvatarStopAnimation(string avatar, string animation);
|
void osAvatarStopAnimation(string avatar, string animation);
|
||||||
|
|
||||||
// Attachment commands
|
#region Attachment commands
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Attach the object containing this script to the avatar that owns it without asking for PERMISSION_ATTACH
|
/// Attach the object containing this script to the avatar that owns it without asking for PERMISSION_ATTACH
|
||||||
|
@ -192,6 +192,29 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||||
/// <remarks>Nothing happens if the object is not attached.</remarks>
|
/// <remarks>Nothing happens if the object is not attached.</remarks>
|
||||||
void osForceDetachFromAvatar();
|
void osForceDetachFromAvatar();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a strided list of the specified attachment points and the number of attachments on those points.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="avatar">avatar UUID</param>
|
||||||
|
/// <param name="attachmentPoints">list of ATTACH_* constants</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
LSL_List osGetNumberOfAttachments(LSL_Key avatar, LSL_List attachmentPoints);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends a specified message to the specified avatar's attachments on
|
||||||
|
/// the specified attachment points.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Behaves as osMessageObject(), without the sending script needing to know the attachment keys in advance.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="avatar">avatar UUID</param>
|
||||||
|
/// <param name="message">message string</param>
|
||||||
|
/// <param name="attachmentPoints">list of ATTACH_* constants, or -1 for all attachments. If -1 is specified and OS_ATTACH_MSG_INVERT_POINTS is present in flags, no action is taken.</param>
|
||||||
|
/// <param name="flags">flags further constraining the attachments to deliver the message to.</param>
|
||||||
|
void osMessageAttachments(LSL_Key avatar, string message, LSL_List attachmentPoints, int flags);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
//texture draw functions
|
//texture draw functions
|
||||||
string osMovePen(string drawList, int x, int y);
|
string osMovePen(string drawList, int x, int y);
|
||||||
string osDrawLine(string drawList, int startX, int startY, int endX, int endY);
|
string osDrawLine(string drawList, int startX, int startY, int endX, int endY);
|
||||||
|
|
|
@ -237,6 +237,58 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
public const int ATTACH_HUD_BOTTOM = 37;
|
public const int ATTACH_HUD_BOTTOM = 37;
|
||||||
public const int ATTACH_HUD_BOTTOM_RIGHT = 38;
|
public const int ATTACH_HUD_BOTTOM_RIGHT = 38;
|
||||||
|
|
||||||
|
#region osMessageAttachments constants
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Instructs osMessageAttachements to send the message to attachments
|
||||||
|
/// on every point.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// One might expect this to be named OS_ATTACH_ALL, but then one might
|
||||||
|
/// also expect functions designed to attach or detach or get
|
||||||
|
/// attachments to work with it too. Attaching a no-copy item to
|
||||||
|
/// many attachments could be dangerous.
|
||||||
|
/// when combined with OS_ATTACH_MSG_INVERT_POINTS, will prevent the
|
||||||
|
/// message from being sent.
|
||||||
|
/// if combined with OS_ATTACH_MSG_OBJECT_CREATOR or
|
||||||
|
/// OS_ATTACH_MSG_SCRIPT_CREATOR, could result in no message being
|
||||||
|
/// sent- this is expected behaviour.
|
||||||
|
/// </remarks>
|
||||||
|
public const int OS_ATTACH_MSG_ALL = -65535;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Instructs osMessageAttachements to invert how the attachment points
|
||||||
|
/// list should be treated (e.g. go from inclusive operation to
|
||||||
|
/// exclusive operation).
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This might be used if you want to deliver a message to one set of
|
||||||
|
/// attachments and a different message to everything else. With
|
||||||
|
/// this flag, you only need to build one explicit list for both calls.
|
||||||
|
/// </remarks>
|
||||||
|
public const int OS_ATTACH_MSG_INVERT_POINTS = 1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Instructs osMessageAttachments to only send the message to
|
||||||
|
/// attachments with a CreatorID that matches the host object CreatorID
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This would be used if distributed in an object vendor/updater server.
|
||||||
|
/// </remarks>
|
||||||
|
public const int OS_ATTACH_MSG_OBJECT_CREATOR = 2;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Instructs osMessageAttachments to only send the message to
|
||||||
|
/// attachments with a CreatorID that matches the sending script CreatorID
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This might be used if the script is distributed independently of a
|
||||||
|
/// containing object.
|
||||||
|
/// </remarks>
|
||||||
|
public const int OS_ATTACH_MSG_SCRIPT_CREATOR = 4;
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
public const int LAND_LEVEL = 0;
|
public const int LAND_LEVEL = 0;
|
||||||
public const int LAND_RAISE = 1;
|
public const int LAND_RAISE = 1;
|
||||||
public const int LAND_LOWER = 2;
|
public const int LAND_LOWER = 2;
|
||||||
|
|
|
@ -289,7 +289,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
|
m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Avatar functions
|
#region Attachment commands
|
||||||
|
|
||||||
public void osForceAttachToAvatar(int attachmentPoint)
|
public void osForceAttachToAvatar(int attachmentPoint)
|
||||||
{
|
{
|
||||||
|
@ -311,6 +311,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
m_OSSL_Functions.osForceDetachFromAvatar();
|
m_OSSL_Functions.osForceDetachFromAvatar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LSL_List osGetNumberOfAttachments(LSL_Key avatar, LSL_List attachmentPoints)
|
||||||
|
{
|
||||||
|
return m_OSSL_Functions.osGetNumberOfAttachments(avatar, attachmentPoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void osMessageAttachments(LSL_Key avatar, string message, LSL_List attachmentPoints, int flags)
|
||||||
|
{
|
||||||
|
m_OSSL_Functions.osMessageAttachments(avatar, message, attachmentPoints, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
// Texture Draw functions
|
// Texture Draw functions
|
||||||
|
|
||||||
public string osMovePen(string drawList, int x, int y)
|
public string osMovePen(string drawList, int x, int y)
|
||||||
|
|
Loading…
Reference in New Issue