Merge branch 'master' of /home/opensim/var/repo/opensim
commit
3750f329d1
|
@ -225,7 +225,7 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
int tc = 0;
|
int tc = 0;
|
||||||
double[,] hm = whichScene.Heightmap.GetDoubles();
|
double[,] hm = whichScene.Heightmap.GetDoubles();
|
||||||
tc = Environment.TickCount;
|
tc = Environment.TickCount;
|
||||||
m_log.Info("[MAPTILE]: Generating Maptile Step 2: Object Volume Profile");
|
m_log.Debug("[MAPTILE]: Generating Maptile Step 2: Object Volume Profile");
|
||||||
EntityBase[] objs = whichScene.GetEntities();
|
EntityBase[] objs = whichScene.GetEntities();
|
||||||
Dictionary<uint, DrawStruct> z_sort = new Dictionary<uint, DrawStruct>();
|
Dictionary<uint, DrawStruct> z_sort = new Dictionary<uint, DrawStruct>();
|
||||||
//SortedList<float, RectangleDrawStruct> z_sort = new SortedList<float, RectangleDrawStruct>();
|
//SortedList<float, RectangleDrawStruct> z_sort = new SortedList<float, RectangleDrawStruct>();
|
||||||
|
@ -541,7 +541,7 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
g.Dispose();
|
g.Dispose();
|
||||||
} // lock entities objs
|
} // lock entities objs
|
||||||
|
|
||||||
m_log.Info("[MAPTILE]: Generating Maptile Step 2: Done in " + (Environment.TickCount - tc) + " ms");
|
m_log.Debug("[MAPTILE]: Generating Maptile Step 2: Done in " + (Environment.TickCount - tc) + " ms");
|
||||||
return mapbmp;
|
return mapbmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
public void TerrainToBitmap(Bitmap mapbmp)
|
public void TerrainToBitmap(Bitmap mapbmp)
|
||||||
{
|
{
|
||||||
int tc = Environment.TickCount;
|
int tc = Environment.TickCount;
|
||||||
m_log.Info("[MAPTILE]: Generating Maptile Step 1: Terrain");
|
m_log.Debug("[MAPTILE]: Generating Maptile Step 1: Terrain");
|
||||||
|
|
||||||
double[,] hm = m_scene.Heightmap.GetDoubles();
|
double[,] hm = m_scene.Heightmap.GetDoubles();
|
||||||
bool ShadowDebugContinue = true;
|
bool ShadowDebugContinue = true;
|
||||||
|
@ -238,7 +238,7 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_log.Info("[MAPTILE]: Generating Maptile Step 1: Done in " + (Environment.TickCount - tc) + " ms");
|
m_log.Debug("[MAPTILE]: Generating Maptile Step 1: Done in " + (Environment.TickCount - tc) + " ms");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -278,7 +278,7 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
public void TerrainToBitmap(Bitmap mapbmp)
|
public void TerrainToBitmap(Bitmap mapbmp)
|
||||||
{
|
{
|
||||||
int tc = Environment.TickCount;
|
int tc = Environment.TickCount;
|
||||||
m_log.Info("[MAPTILE]: Generating Maptile Step 1: Terrain");
|
m_log.Debug("[MAPTILE]: Generating Maptile Step 1: Terrain");
|
||||||
|
|
||||||
// These textures should be in the AssetCache anyway, as every client conneting to this
|
// These textures should be in the AssetCache anyway, as every client conneting to this
|
||||||
// region needs them. Except on start, when the map is recreated (before anyone connected),
|
// region needs them. Except on start, when the map is recreated (before anyone connected),
|
||||||
|
@ -412,7 +412,7 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_log.Info("[MAPTILE]: Generating Maptile Step 1: Done in " + (Environment.TickCount - tc) + " ms");
|
m_log.Debug("[MAPTILE]: Generating Maptile Step 1: Done in " + (Environment.TickCount - tc) + " ms");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,11 +88,11 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
|
||||||
if (renderers.Count > 0)
|
if (renderers.Count > 0)
|
||||||
{
|
{
|
||||||
m_primMesher = RenderingLoader.LoadRenderer(renderers[0]);
|
m_primMesher = RenderingLoader.LoadRenderer(renderers[0]);
|
||||||
m_log.Info("[MAPTILE]: Loaded prim mesher " + m_primMesher.ToString());
|
m_log.Debug("[MAPTILE]: Loaded prim mesher " + m_primMesher.ToString());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[MAPTILE]: No prim mesher loaded, prim rendering will be disabled");
|
m_log.Debug("[MAPTILE]: No prim mesher loaded, prim rendering will be disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
m_scene.RegisterModuleInterface<IMapImageGenerator>(this);
|
m_scene.RegisterModuleInterface<IMapImageGenerator>(this);
|
||||||
|
|
|
@ -58,6 +58,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Friends
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private IFriendsModule m_friendsModule;
|
private IFriendsModule m_friendsModule;
|
||||||
private IUserManagement m_userManagementModule;
|
private IUserManagement m_userManagementModule;
|
||||||
|
private IPresenceService m_presenceService;
|
||||||
|
|
||||||
// private IAvatarFactoryModule m_avatarFactory;
|
// private IAvatarFactoryModule m_avatarFactory;
|
||||||
|
|
||||||
|
@ -99,8 +100,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.Friends
|
||||||
|
|
||||||
m_friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
m_friendsModule = m_scene.RequestModuleInterface<IFriendsModule>();
|
||||||
m_userManagementModule = m_scene.RequestModuleInterface<IUserManagement>();
|
m_userManagementModule = m_scene.RequestModuleInterface<IUserManagement>();
|
||||||
|
m_presenceService = m_scene.RequestModuleInterface<IPresenceService>();
|
||||||
|
|
||||||
if (m_friendsModule != null && m_userManagementModule != null)
|
if (m_friendsModule != null && m_userManagementModule != null && m_presenceService != null)
|
||||||
{
|
{
|
||||||
m_scene.AddCommand(
|
m_scene.AddCommand(
|
||||||
"Friends", this, "friends show",
|
"Friends", this, "friends show",
|
||||||
|
@ -162,7 +164,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Friends
|
||||||
|
|
||||||
MainConsole.Instance.OutputFormat("Friends for {0} {1} {2}:", firstName, lastName, userId);
|
MainConsole.Instance.OutputFormat("Friends for {0} {1} {2}:", firstName, lastName, userId);
|
||||||
|
|
||||||
MainConsole.Instance.OutputFormat("UUID, Name, MyFlags, TheirFlags");
|
MainConsole.Instance.OutputFormat(
|
||||||
|
"{0,-36} {1,-36} {2,-7} {3,7} {4,10}", "UUID", "Name", "Status", "MyFlags", "TheirFlags");
|
||||||
|
|
||||||
foreach (FriendInfo friend in friends)
|
foreach (FriendInfo friend in friends)
|
||||||
{
|
{
|
||||||
|
@ -175,14 +178,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.Friends
|
||||||
|
|
||||||
UUID friendId;
|
UUID friendId;
|
||||||
string friendName;
|
string friendName;
|
||||||
|
string onlineText;
|
||||||
|
|
||||||
if (UUID.TryParse(friend.Friend, out friendId))
|
if (UUID.TryParse(friend.Friend, out friendId))
|
||||||
friendName = m_userManagementModule.GetUserName(friendId);
|
friendName = m_userManagementModule.GetUserName(friendId);
|
||||||
else
|
else
|
||||||
friendName = friend.Friend;
|
friendName = friend.Friend;
|
||||||
|
|
||||||
|
OpenSim.Services.Interfaces.PresenceInfo[] pi = m_presenceService.GetAgents(new string[] { friend.Friend });
|
||||||
|
if (pi.Length > 0)
|
||||||
|
onlineText = "online";
|
||||||
|
else
|
||||||
|
onlineText = "offline";
|
||||||
|
|
||||||
MainConsole.Instance.OutputFormat(
|
MainConsole.Instance.OutputFormat(
|
||||||
"{0} {1} {2} {3}", friend.Friend, friendName, friend.MyFlags, friend.TheirFlags);
|
"{0,-36} {1,-36} {2,-7} {3,-7} {4,-10}",
|
||||||
|
friend.Friend, friendName, onlineText, friend.MyFlags, friend.TheirFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,42 +29,43 @@ using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using log4net;
|
||||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Shared.Api
|
namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
public class ApiManager
|
public class ApiManager
|
||||||
{
|
{
|
||||||
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Dictionary<string,Type> m_Apis = new Dictionary<string,Type>();
|
private Dictionary<string,Type> m_Apis = new Dictionary<string,Type>();
|
||||||
|
|
||||||
public string[] GetApis()
|
public string[] GetApis()
|
||||||
{
|
{
|
||||||
if (m_Apis.Count > 0)
|
if (m_Apis.Count <= 0)
|
||||||
{
|
{
|
||||||
List<string> l = new List<string>(m_Apis.Keys);
|
Assembly a = Assembly.GetExecutingAssembly();
|
||||||
return l.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
Assembly a = Assembly.GetExecutingAssembly();
|
Type[] types = a.GetExportedTypes();
|
||||||
|
|
||||||
Type[] types = a.GetExportedTypes();
|
foreach (Type t in types)
|
||||||
|
|
||||||
foreach (Type t in types)
|
|
||||||
{
|
|
||||||
string name = t.ToString();
|
|
||||||
int idx = name.LastIndexOf('.');
|
|
||||||
if (idx != -1)
|
|
||||||
name = name.Substring(idx+1);
|
|
||||||
|
|
||||||
if (name.EndsWith("_Api"))
|
|
||||||
{
|
{
|
||||||
name = name.Substring(0, name.Length - 4);
|
string name = t.ToString();
|
||||||
m_Apis[name] = t;
|
int idx = name.LastIndexOf('.');
|
||||||
|
if (idx != -1)
|
||||||
|
name = name.Substring(idx+1);
|
||||||
|
|
||||||
|
if (name.EndsWith("_Api"))
|
||||||
|
{
|
||||||
|
name = name.Substring(0, name.Length - 4);
|
||||||
|
m_Apis[name] = t;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<string> ret = new List<string>(m_Apis.Keys);
|
// m_log.DebugFormat("[API MANAGER]: Found {0} apis", m_Apis.Keys.Count);
|
||||||
return ret.ToArray();
|
|
||||||
|
return new List<string>(m_Apis.Keys).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IScriptApi CreateApi(string api)
|
public IScriptApi CreateApi(string api)
|
||||||
|
@ -76,4 +77,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -85,7 +85,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
protected IScriptEngine m_ScriptEngine;
|
protected IScriptEngine m_ScriptEngine;
|
||||||
protected SceneObjectPart m_host;
|
protected SceneObjectPart m_host;
|
||||||
protected uint m_localID;
|
protected uint m_localID;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The UUID of the item that hosts this script
|
||||||
|
/// </summary>
|
||||||
protected UUID m_itemID;
|
protected UUID m_itemID;
|
||||||
|
|
||||||
protected bool throwErrorOnNotImplemented = true;
|
protected bool throwErrorOnNotImplemented = true;
|
||||||
protected AsyncCommandManager AsyncCommands = null;
|
protected AsyncCommandManager AsyncCommands = null;
|
||||||
protected float m_ScriptDelayFactor = 1.0f;
|
protected float m_ScriptDelayFactor = 1.0f;
|
||||||
|
@ -267,23 +272,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UUID InventorySelf()
|
/// <summary>
|
||||||
|
/// Get the inventory item that hosts ourselves.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// FIXME: It would be far easier to pass in TaskInventoryItem rather than just m_itemID so that we don't need
|
||||||
|
/// to keep looking ourselves up.
|
||||||
|
/// </remarks>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected TaskInventoryItem GetSelfInventoryItem()
|
||||||
{
|
{
|
||||||
UUID invItemID = new UUID();
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
lock (m_host.TaskInventory)
|
||||||
{
|
return m_host.TaskInventory[m_itemID];
|
||||||
foreach (KeyValuePair<UUID, TaskInventoryItem> inv in m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
if (inv.Value.Type == 10 && inv.Value.ItemID == m_itemID)
|
|
||||||
{
|
|
||||||
invItemID = inv.Key;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return invItemID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected UUID InventoryKey(string name, int type)
|
protected UUID InventoryKey(string name, int type)
|
||||||
|
@ -2701,18 +2701,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public LSL_Integer llGiveMoney(string destination, int amount)
|
public LSL_Integer llGiveMoney(string destination, int amount)
|
||||||
{
|
{
|
||||||
UUID invItemID=InventorySelf();
|
|
||||||
if (invItemID == UUID.Zero)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
TaskInventoryItem item = m_host.TaskInventory[invItemID];
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
item = m_host.TaskInventory[invItemID];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.PermsGranter == UUID.Zero)
|
if (item.PermsGranter == UUID.Zero)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2955,15 +2946,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public void llTakeControls(int controls, int accept, int pass_on)
|
public void llTakeControls(int controls, int accept, int pass_on)
|
||||||
{
|
{
|
||||||
TaskInventoryItem item;
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
item = m_host.TaskInventory[InventorySelf()];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.PermsGranter != UUID.Zero)
|
if (item.PermsGranter != UUID.Zero)
|
||||||
{
|
{
|
||||||
|
@ -2983,18 +2966,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public void llReleaseControls()
|
public void llReleaseControls()
|
||||||
{
|
{
|
||||||
TaskInventoryItem item;
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
item = m_host.TaskInventory[InventorySelf()];
|
|
||||||
}
|
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
if (item.PermsGranter != UUID.Zero)
|
if (item.PermsGranter != UUID.Zero)
|
||||||
{
|
{
|
||||||
ScenePresence presence = World.GetScenePresence(item.PermsGranter);
|
ScenePresence presence = World.GetScenePresence(item.PermsGranter);
|
||||||
|
@ -3019,64 +2994,33 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_UrlModule.ReleaseURL(url);
|
m_UrlModule.ReleaseURL(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llAttachToAvatar(int attachment)
|
/// <summary>
|
||||||
|
/// Attach the object containing this script to the avatar that owns it.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name='attachment'>The attachment point (e.g. ATTACH_CHEST)</param>
|
||||||
|
/// <returns>true if the attach suceeded, false if it did not</returns>
|
||||||
|
public bool AttachToAvatar(int attachmentPoint)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
SceneObjectGroup grp = m_host.ParentGroup;
|
||||||
|
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
|
||||||
|
|
||||||
// if (m_host.ParentGroup.RootPart.AttachmentPoint == 0)
|
IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
|
||||||
// return;
|
|
||||||
|
|
||||||
TaskInventoryItem item;
|
if (attachmentsModule != null)
|
||||||
|
return attachmentsModule.AttachObject(presence, grp, (uint)attachmentPoint, false);
|
||||||
lock (m_host.TaskInventory)
|
else
|
||||||
{
|
return false;
|
||||||
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
item = m_host.TaskInventory[InventorySelf()];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.PermsGranter != m_host.OwnerID)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
|
||||||
{
|
|
||||||
SceneObjectGroup grp = m_host.ParentGroup;
|
|
||||||
|
|
||||||
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
|
|
||||||
|
|
||||||
IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
|
|
||||||
if (attachmentsModule != null)
|
|
||||||
attachmentsModule.AttachObject(presence, grp, (uint)attachment, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llDetachFromAvatar()
|
/// <summary>
|
||||||
|
/// Detach the object containing this script from the avatar it is attached to.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Nothing happens if the object is not attached.
|
||||||
|
/// </remarks>
|
||||||
|
public void DetachFromAvatar()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
Util.FireAndForget(DetachWrapper, m_host);
|
||||||
|
|
||||||
if (m_host.ParentGroup.AttachmentPoint == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
TaskInventoryItem item;
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
item = m_host.TaskInventory[InventorySelf()];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.PermsGranter != m_host.OwnerID)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
|
||||||
{
|
|
||||||
IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
|
|
||||||
if (attachmentsModule != null)
|
|
||||||
Util.FireAndForget(DetachWrapper, m_host);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DetachWrapper(object o)
|
private void DetachWrapper(object o)
|
||||||
|
@ -3092,6 +3036,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
attachmentsModule.DetachSingleAttachmentToInv(presence, itemID);
|
attachmentsModule.DetachSingleAttachmentToInv(presence, itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void llAttachToAvatar(int attachmentPoint)
|
||||||
|
{
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
// if (m_host.ParentGroup.RootPart.AttachmentPoint == 0)
|
||||||
|
// return;
|
||||||
|
|
||||||
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
|
if (item.PermsGranter != m_host.OwnerID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
||||||
|
AttachToAvatar(attachmentPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void llDetachFromAvatar()
|
||||||
|
{
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
if (m_host.ParentGroup.AttachmentPoint == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
|
if (item.PermsGranter != m_host.OwnerID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
||||||
|
DetachFromAvatar();
|
||||||
|
}
|
||||||
|
|
||||||
public void llTakeCamera(string avatar)
|
public void llTakeCamera(string avatar)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
@ -3317,19 +3293,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
UUID invItemID = InventorySelf();
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
if (invItemID == UUID.Zero)
|
|
||||||
return;
|
|
||||||
|
|
||||||
TaskInventoryItem item;
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
item = m_host.TaskInventory[InventorySelf()];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.PermsGranter == UUID.Zero)
|
if (item.PermsGranter == UUID.Zero)
|
||||||
return;
|
return;
|
||||||
|
@ -3354,19 +3318,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
UUID invItemID=InventorySelf();
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
if (invItemID == UUID.Zero)
|
|
||||||
return;
|
|
||||||
|
|
||||||
TaskInventoryItem item;
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
if (!m_host.TaskInventory.ContainsKey(InventorySelf()))
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
item = m_host.TaskInventory[InventorySelf()];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.PermsGranter == UUID.Zero)
|
if (item.PermsGranter == UUID.Zero)
|
||||||
return;
|
return;
|
||||||
|
@ -3421,22 +3373,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public void llRequestPermissions(string agent, int perm)
|
public void llRequestPermissions(string agent, int perm)
|
||||||
{
|
{
|
||||||
UUID agentID = new UUID();
|
UUID agentID;
|
||||||
|
|
||||||
if (!UUID.TryParse(agent, out agentID))
|
if (!UUID.TryParse(agent, out agentID))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
UUID invItemID = InventorySelf();
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
if (invItemID == UUID.Zero)
|
|
||||||
return; // Not in a prim? How??
|
|
||||||
|
|
||||||
TaskInventoryItem item;
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
item = m_host.TaskInventory[invItemID];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (agentID == UUID.Zero || perm == 0) // Releasing permissions
|
if (agentID == UUID.Zero || perm == 0) // Releasing permissions
|
||||||
{
|
{
|
||||||
|
@ -3470,8 +3412,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
lock (m_host.TaskInventory)
|
lock (m_host.TaskInventory)
|
||||||
{
|
{
|
||||||
m_host.TaskInventory[invItemID].PermsGranter = agentID;
|
m_host.TaskInventory[m_itemID].PermsGranter = agentID;
|
||||||
m_host.TaskInventory[invItemID].PermsMask = perm;
|
m_host.TaskInventory[m_itemID].PermsMask = perm;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||||
|
@ -3494,8 +3436,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
lock (m_host.TaskInventory)
|
lock (m_host.TaskInventory)
|
||||||
{
|
{
|
||||||
m_host.TaskInventory[invItemID].PermsGranter = agentID;
|
m_host.TaskInventory[m_itemID].PermsGranter = agentID;
|
||||||
m_host.TaskInventory[invItemID].PermsMask = perm;
|
m_host.TaskInventory[m_itemID].PermsMask = perm;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||||
|
@ -3519,8 +3461,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
lock (m_host.TaskInventory)
|
lock (m_host.TaskInventory)
|
||||||
{
|
{
|
||||||
m_host.TaskInventory[invItemID].PermsGranter = agentID;
|
m_host.TaskInventory[m_itemID].PermsGranter = agentID;
|
||||||
m_host.TaskInventory[invItemID].PermsMask = 0;
|
m_host.TaskInventory[m_itemID].PermsMask = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
presence.ControllingClient.OnScriptAnswer += handleScriptAnswer;
|
presence.ControllingClient.OnScriptAnswer += handleScriptAnswer;
|
||||||
|
@ -3528,7 +3470,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
|
|
||||||
presence.ControllingClient.SendScriptQuestion(
|
presence.ControllingClient.SendScriptQuestion(
|
||||||
m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, invItemID, perm);
|
m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, m_itemID, perm);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -3545,20 +3487,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (taskID != m_host.UUID)
|
if (taskID != m_host.UUID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
UUID invItemID = InventorySelf();
|
client.OnScriptAnswer -= handleScriptAnswer;
|
||||||
|
m_waitingForScriptAnswer = false;
|
||||||
if (invItemID == UUID.Zero)
|
|
||||||
return;
|
|
||||||
|
|
||||||
client.OnScriptAnswer-=handleScriptAnswer;
|
|
||||||
m_waitingForScriptAnswer=false;
|
|
||||||
|
|
||||||
if ((answer & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0)
|
if ((answer & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0)
|
||||||
llReleaseControls();
|
llReleaseControls();
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
lock (m_host.TaskInventory)
|
||||||
{
|
{
|
||||||
m_host.TaskInventory[invItemID].PermsMask = answer;
|
m_host.TaskInventory[m_itemID].PermsMask = answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||||
|
@ -3571,39 +3508,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
return GetSelfInventoryItem().PermsGranter.ToString();
|
||||||
{
|
|
||||||
foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
|
|
||||||
{
|
|
||||||
if (item.Type == 10 && item.ItemID == m_itemID)
|
|
||||||
{
|
|
||||||
return item.PermsGranter.ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return UUID.Zero.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llGetPermissions()
|
public LSL_Integer llGetPermissions()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
int perms = GetSelfInventoryItem().PermsMask;
|
||||||
{
|
|
||||||
foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
|
|
||||||
{
|
|
||||||
if (item.Type == 10 && item.ItemID == m_itemID)
|
|
||||||
{
|
|
||||||
int perms = item.PermsMask;
|
|
||||||
if (m_automaticLinkPermission)
|
|
||||||
perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
|
||||||
return perms;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
if (m_automaticLinkPermission)
|
||||||
|
perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||||
|
|
||||||
|
return perms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llGetLinkNumber()
|
public LSL_Integer llGetLinkNumber()
|
||||||
|
@ -3631,17 +3548,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llCreateLink(string target, int parent)
|
public void llCreateLink(string target, int parent)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
|
||||||
UUID targetID;
|
UUID targetID;
|
||||||
|
|
||||||
if (!UUID.TryParse(target, out targetID))
|
if (!UUID.TryParse(target, out targetID))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TaskInventoryItem item;
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
item = m_host.TaskInventory[invItemID];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||||
&& !m_automaticLinkPermission)
|
&& !m_automaticLinkPermission)
|
||||||
|
@ -3692,16 +3605,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public void llBreakLink(int linknum)
|
public void llBreakLink(int linknum)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
if ((GetSelfInventoryItem().PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||||
|
&& !m_automaticLinkPermission)
|
||||||
{
|
{
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
||||||
&& !m_automaticLinkPermission)
|
return;
|
||||||
{
|
|
||||||
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (linknum < ScriptBaseClass.LINK_THIS)
|
if (linknum < ScriptBaseClass.LINK_THIS)
|
||||||
|
@ -4578,23 +4487,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public LSL_String llGetScriptName()
|
public LSL_String llGetScriptName()
|
||||||
{
|
{
|
||||||
string result = String.Empty;
|
|
||||||
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
{
|
|
||||||
foreach (TaskInventoryItem item in m_host.TaskInventory.Values)
|
|
||||||
{
|
|
||||||
if (item.Type == 10 && item.ItemID == m_itemID)
|
|
||||||
{
|
|
||||||
result = item.Name != null ? item.Name : String.Empty;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return item.Name != null ? item.Name : String.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llGetLinkNumberOfSides(int link)
|
public LSL_Integer llGetLinkNumberOfSides(int link)
|
||||||
|
@ -9695,21 +9592,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public LSL_Vector llGetCameraPos()
|
public LSL_Vector llGetCameraPos()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
|
||||||
|
|
||||||
if (invItemID == UUID.Zero)
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
return new LSL_Vector();
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
if (item.PermsGranter == UUID.Zero)
|
||||||
|
return new LSL_Vector();
|
||||||
|
|
||||||
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
||||||
{
|
{
|
||||||
if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero)
|
ShoutError("No permissions to track the camera");
|
||||||
return new LSL_Vector();
|
return new LSL_Vector();
|
||||||
|
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
|
||||||
{
|
|
||||||
ShoutError("No permissions to track the camera");
|
|
||||||
return new LSL_Vector();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
|
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
|
||||||
|
@ -9724,20 +9616,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public LSL_Rotation llGetCameraRot()
|
public LSL_Rotation llGetCameraRot()
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID invItemID = InventorySelf();
|
|
||||||
if (invItemID == UUID.Zero)
|
|
||||||
return new LSL_Rotation();
|
|
||||||
|
|
||||||
lock (m_host.TaskInventory)
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
|
if (item.PermsGranter == UUID.Zero)
|
||||||
|
return new LSL_Rotation();
|
||||||
|
|
||||||
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
||||||
{
|
{
|
||||||
if (m_host.TaskInventory[invItemID].PermsGranter == UUID.Zero)
|
ShoutError("No permissions to track the camera");
|
||||||
return new LSL_Rotation();
|
return new LSL_Rotation();
|
||||||
|
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
|
||||||
{
|
|
||||||
ShoutError("No permissions to track the camera");
|
|
||||||
return new LSL_Rotation();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
|
ScenePresence presence = World.GetScenePresence(m_host.OwnerID);
|
||||||
|
@ -9911,23 +9799,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
// our key in the object we are in
|
|
||||||
UUID invItemID = InventorySelf();
|
|
||||||
if (invItemID == UUID.Zero) return;
|
|
||||||
|
|
||||||
// the object we are in
|
// the object we are in
|
||||||
UUID objectID = m_host.ParentUUID;
|
UUID objectID = m_host.ParentUUID;
|
||||||
if (objectID == UUID.Zero) return;
|
if (objectID == UUID.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
UUID agentID;
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
|
||||||
// we need the permission first, to know which avatar we want to set the camera for
|
|
||||||
agentID = m_host.TaskInventory[invItemID].PermsGranter;
|
|
||||||
|
|
||||||
if (agentID == UUID.Zero) return;
|
// we need the permission first, to know which avatar we want to set the camera for
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) return;
|
UUID agentID = item.PermsGranter;
|
||||||
}
|
|
||||||
|
if (agentID == UUID.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
ScenePresence presence = World.GetScenePresence(agentID);
|
ScenePresence presence = World.GetScenePresence(agentID);
|
||||||
|
|
||||||
|
@ -9967,27 +9853,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
// our key in the object we are in
|
|
||||||
UUID invItemID=InventorySelf();
|
|
||||||
if (invItemID == UUID.Zero) return;
|
|
||||||
|
|
||||||
// the object we are in
|
// the object we are in
|
||||||
UUID objectID = m_host.ParentUUID;
|
UUID objectID = m_host.ParentUUID;
|
||||||
if (objectID == UUID.Zero) return;
|
if (objectID == UUID.Zero)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TaskInventoryItem item = GetSelfInventoryItem();
|
||||||
|
|
||||||
// we need the permission first, to know which avatar we want to clear the camera for
|
// we need the permission first, to know which avatar we want to clear the camera for
|
||||||
UUID agentID;
|
UUID agentID = item.PermsGranter;
|
||||||
lock (m_host.TaskInventory)
|
|
||||||
{
|
if (agentID == UUID.Zero)
|
||||||
agentID = m_host.TaskInventory[invItemID].PermsGranter;
|
return;
|
||||||
if (agentID == UUID.Zero) return;
|
|
||||||
if ((m_host.TaskInventory[invItemID].PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0) return;
|
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0)
|
||||||
}
|
return;
|
||||||
|
|
||||||
ScenePresence presence = World.GetScenePresence(agentID);
|
ScenePresence presence = World.GetScenePresence(agentID);
|
||||||
|
|
||||||
// we are not interested in child-agents
|
// we are not interested in child-agents
|
||||||
if (presence.IsChildAgent) return;
|
if (presence.IsChildAgent)
|
||||||
|
return;
|
||||||
|
|
||||||
presence.ControllingClient.SendClearFollowCamProperties(objectID);
|
presence.ControllingClient.SendClearFollowCamProperties(objectID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,6 +209,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
throw new Exception("OSSL Runtime Error: " + msg);
|
throw new Exception("OSSL Runtime Error: " + msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initialize the LSL interface.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// FIXME: This is an abomination. We should be able to set this up earlier but currently we have no
|
||||||
|
/// guarantee the interface is present on Initialize(). There needs to be another post initialize call from
|
||||||
|
/// ScriptInstance.
|
||||||
|
/// </remarks>
|
||||||
private void InitLSL()
|
private void InitLSL()
|
||||||
{
|
{
|
||||||
if (m_LSL_Api != null)
|
if (m_LSL_Api != null)
|
||||||
|
@ -3093,5 +3101,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
estate.setEstateTerrainTextureHeights(corner, (float)low, (float)high);
|
estate.setEstateTerrainTextureHeights(corner, (float)low, (float)high);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void osForceAttachToAvatar(int attachmentPoint)
|
||||||
|
{
|
||||||
|
CheckThreatLevel(ThreatLevel.High, "osForceAttachToAvatar");
|
||||||
|
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
InitLSL();
|
||||||
|
((LSL_Api)m_LSL_Api).AttachToAvatar(attachmentPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void osForceDetachFromAvatar()
|
||||||
|
{
|
||||||
|
CheckThreatLevel(ThreatLevel.High, "osForceDetachFromAvatar");
|
||||||
|
|
||||||
|
m_host.AddScriptLPS(1);
|
||||||
|
|
||||||
|
InitLSL();
|
||||||
|
((LSL_Api)m_LSL_Api).DetachFromAvatar();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -98,6 +98,20 @@ 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
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Attach the object containing this script to the avatar that owns it without checking for PERMISSION_ATTACH
|
||||||
|
/// </summary>
|
||||||
|
/// <param name='attachment'>The attachment point. For example, ATTACH_CHEST</param>
|
||||||
|
void osForceAttachToAvatar(int attachment);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Detach the object containing this script from the avatar it is attached to without checking for PERMISSION_ATTACH
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>Nothing happens if the object is not attached.</remarks>
|
||||||
|
void osForceDetachFromAvatar();
|
||||||
|
|
||||||
//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);
|
||||||
|
|
|
@ -289,8 +289,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||||
m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
|
m_OSSL_Functions.osAvatarStopAnimation(avatar, animation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Avatar functions
|
||||||
|
|
||||||
//Texture Draw functions
|
public void osForceAttachToAvatar(int attachmentPoint)
|
||||||
|
{
|
||||||
|
m_OSSL_Functions.osForceAttachToAvatar(attachmentPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void osForceDetachFromAvatar()
|
||||||
|
{
|
||||||
|
m_OSSL_Functions.osForceDetachFromAvatar();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Texture Draw functions
|
||||||
|
|
||||||
public string osMovePen(string drawList, int x, int y)
|
public string osMovePen(string drawList, int x, int y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -964,7 +964,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
public IScriptApi GetApi(string name)
|
public IScriptApi GetApi(string name)
|
||||||
{
|
{
|
||||||
if (m_Apis.ContainsKey(name))
|
if (m_Apis.ContainsKey(name))
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat("[SCRIPT INSTANCE]: Found api {0} in {1}@{2}", name, ScriptName, PrimName);
|
||||||
|
|
||||||
return m_Apis[name];
|
return m_Apis[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[SCRIPT INSTANCE]: Did not find api {0} in {1}@{2}", name, ScriptName, PrimName);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue