Merge branch 'master' of /home/opensim/var/repo/opensim
commit
668912be6f
|
@ -480,6 +480,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public delegate void SceneObjectPartUpdated(SceneObjectPart sop);
|
||||
public event SceneObjectPartUpdated OnSceneObjectPartUpdated;
|
||||
|
||||
public delegate void ScenePresenceUpdated(ScenePresence sp);
|
||||
public event ScenePresenceUpdated OnScenePresenceUpdated;
|
||||
|
||||
public delegate void RegionUp(GridRegion region);
|
||||
public event RegionUp OnRegionUp;
|
||||
|
||||
|
@ -2343,6 +2346,27 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
public void TriggerScenePresenceUpdated(ScenePresence sp)
|
||||
{
|
||||
ScenePresenceUpdated handler = OnScenePresenceUpdated;
|
||||
if (handler != null)
|
||||
{
|
||||
foreach (ScenePresenceUpdated d in handler.GetInvocationList())
|
||||
{
|
||||
try
|
||||
{
|
||||
d(sp);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat(
|
||||
"[EVENT MANAGER]: Delegate for TriggerScenePresenceUpdated failed - continuing. {0} {1}",
|
||||
e.Message, e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void TriggerOnParcelPropertiesUpdateRequest(LandUpdateArgs args,
|
||||
int local_id, IClientAPI remote_client)
|
||||
{
|
||||
|
|
|
@ -92,8 +92,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
protected internal Dictionary<uint, SceneObjectGroup> SceneObjectGroupsByLocalPartID = new Dictionary<uint, SceneObjectGroup>();
|
||||
|
||||
/// <summary>
|
||||
/// Lock to prevent object group update, linking and delinking operations from running concurrently.
|
||||
/// Lock to prevent object group update, linking, delinking and duplication operations from running concurrently.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// These operations rely on the parts composition of the object. If allowed to run concurrently then race
|
||||
/// conditions can occur.
|
||||
/// </remarks>
|
||||
private Object m_updateLock = new Object();
|
||||
|
||||
#endregion
|
||||
|
@ -1844,96 +1848,106 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <param name="AgentID"></param>
|
||||
/// <param name="GroupID"></param>
|
||||
/// <param name="rot"></param>
|
||||
public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot)
|
||||
/// <returns>null if duplication fails, otherwise the duplicated object</returns>
|
||||
public SceneObjectGroup DuplicateObject(
|
||||
uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}",
|
||||
// originalPrimID, offset, AgentID);
|
||||
|
||||
SceneObjectGroup original = GetGroupByPrim(originalPrimID);
|
||||
if (original != null)
|
||||
Monitor.Enter(m_updateLock);
|
||||
|
||||
try
|
||||
{
|
||||
if (m_parentScene.Permissions.CanDuplicateObject(
|
||||
original.PrimCount, original.UUID, AgentID, original.AbsolutePosition))
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}",
|
||||
// originalPrimID, offset, AgentID);
|
||||
|
||||
SceneObjectGroup original = GetGroupByPrim(originalPrimID);
|
||||
if (original == null)
|
||||
{
|
||||
SceneObjectGroup copy = original.Copy(true);
|
||||
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
||||
m_log.WarnFormat(
|
||||
"[SCENEGRAPH]: Attempt to duplicate nonexistant prim id {0} by {1}", originalPrimID, AgentID);
|
||||
|
||||
if (original.OwnerID != AgentID)
|
||||
{
|
||||
copy.SetOwnerId(AgentID);
|
||||
copy.SetRootPartOwner(copy.RootPart, AgentID, GroupID);
|
||||
|
||||
SceneObjectPart[] partList = copy.Parts;
|
||||
|
||||
if (m_parentScene.Permissions.PropagatePermissions())
|
||||
{
|
||||
foreach (SceneObjectPart child in partList)
|
||||
{
|
||||
child.Inventory.ChangeInventoryOwner(AgentID);
|
||||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||
child.ApplyNextOwnerPermissions();
|
||||
}
|
||||
}
|
||||
|
||||
copy.RootPart.ObjectSaleType = 0;
|
||||
copy.RootPart.SalePrice = 10;
|
||||
}
|
||||
|
||||
// FIXME: This section needs to be refactored so that it just calls AddSceneObject()
|
||||
Entities.Add(copy);
|
||||
|
||||
lock (SceneObjectGroupsByFullID)
|
||||
SceneObjectGroupsByFullID[copy.UUID] = copy;
|
||||
|
||||
SceneObjectPart[] children = copy.Parts;
|
||||
|
||||
lock (SceneObjectGroupsByFullPartID)
|
||||
{
|
||||
SceneObjectGroupsByFullPartID[copy.UUID] = copy;
|
||||
foreach (SceneObjectPart part in children)
|
||||
SceneObjectGroupsByFullPartID[part.UUID] = copy;
|
||||
}
|
||||
|
||||
lock (SceneObjectGroupsByLocalPartID)
|
||||
{
|
||||
SceneObjectGroupsByLocalPartID[copy.LocalId] = copy;
|
||||
foreach (SceneObjectPart part in children)
|
||||
SceneObjectGroupsByLocalPartID[part.LocalId] = copy;
|
||||
}
|
||||
// PROBABLE END OF FIXME
|
||||
|
||||
// Since we copy from a source group that is in selected
|
||||
// state, but the copy is shown deselected in the viewer,
|
||||
// We need to clear the selection flag here, else that
|
||||
// prim never gets persisted at all. The client doesn't
|
||||
// think it's selected, so it will never send a deselect...
|
||||
copy.IsSelected = false;
|
||||
|
||||
m_numPrim += copy.Parts.Length;
|
||||
|
||||
if (rot != Quaternion.Identity)
|
||||
{
|
||||
copy.UpdateGroupRotationR(rot);
|
||||
}
|
||||
|
||||
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1);
|
||||
copy.HasGroupChanged = true;
|
||||
copy.ScheduleGroupForFullUpdate();
|
||||
copy.ResumeScripts();
|
||||
|
||||
// required for physics to update it's position
|
||||
copy.AbsolutePosition = copy.AbsolutePosition;
|
||||
|
||||
return copy;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!m_parentScene.Permissions.CanDuplicateObject(
|
||||
original.PrimCount, original.UUID, AgentID, original.AbsolutePosition))
|
||||
return null;
|
||||
|
||||
SceneObjectGroup copy = original.Copy(true);
|
||||
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
||||
|
||||
if (original.OwnerID != AgentID)
|
||||
{
|
||||
copy.SetOwnerId(AgentID);
|
||||
copy.SetRootPartOwner(copy.RootPart, AgentID, GroupID);
|
||||
|
||||
SceneObjectPart[] partList = copy.Parts;
|
||||
|
||||
if (m_parentScene.Permissions.PropagatePermissions())
|
||||
{
|
||||
foreach (SceneObjectPart child in partList)
|
||||
{
|
||||
child.Inventory.ChangeInventoryOwner(AgentID);
|
||||
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||
child.ApplyNextOwnerPermissions();
|
||||
}
|
||||
}
|
||||
|
||||
copy.RootPart.ObjectSaleType = 0;
|
||||
copy.RootPart.SalePrice = 10;
|
||||
}
|
||||
|
||||
// FIXME: This section needs to be refactored so that it just calls AddSceneObject()
|
||||
Entities.Add(copy);
|
||||
|
||||
lock (SceneObjectGroupsByFullID)
|
||||
SceneObjectGroupsByFullID[copy.UUID] = copy;
|
||||
|
||||
SceneObjectPart[] children = copy.Parts;
|
||||
|
||||
lock (SceneObjectGroupsByFullPartID)
|
||||
{
|
||||
SceneObjectGroupsByFullPartID[copy.UUID] = copy;
|
||||
foreach (SceneObjectPart part in children)
|
||||
SceneObjectGroupsByFullPartID[part.UUID] = copy;
|
||||
}
|
||||
|
||||
lock (SceneObjectGroupsByLocalPartID)
|
||||
{
|
||||
SceneObjectGroupsByLocalPartID[copy.LocalId] = copy;
|
||||
foreach (SceneObjectPart part in children)
|
||||
SceneObjectGroupsByLocalPartID[part.LocalId] = copy;
|
||||
}
|
||||
// PROBABLE END OF FIXME
|
||||
|
||||
// Since we copy from a source group that is in selected
|
||||
// state, but the copy is shown deselected in the viewer,
|
||||
// We need to clear the selection flag here, else that
|
||||
// prim never gets persisted at all. The client doesn't
|
||||
// think it's selected, so it will never send a deselect...
|
||||
copy.IsSelected = false;
|
||||
|
||||
m_numPrim += copy.Parts.Length;
|
||||
|
||||
if (rot != Quaternion.Identity)
|
||||
{
|
||||
copy.UpdateGroupRotationR(rot);
|
||||
}
|
||||
|
||||
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1);
|
||||
copy.HasGroupChanged = true;
|
||||
copy.ScheduleGroupForFullUpdate();
|
||||
copy.ResumeScripts();
|
||||
|
||||
// required for physics to update it's position
|
||||
copy.AbsolutePosition = copy.AbsolutePosition;
|
||||
|
||||
return copy;
|
||||
}
|
||||
else
|
||||
finally
|
||||
{
|
||||
m_log.WarnFormat("[SCENE]: Attempted to duplicate nonexistant prim id {0}", GroupID);
|
||||
Monitor.Exit(m_updateLock);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -3321,10 +3321,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void SetVehicleFlags(int param, bool remove)
|
||||
{
|
||||
if (PhysActor != null)
|
||||
{
|
||||
PhysActor.VehicleFlags(param, remove);
|
||||
}
|
||||
PhysicsActor pa = PhysActor;
|
||||
|
||||
if (pa != null)
|
||||
pa.VehicleFlags(param, remove);
|
||||
}
|
||||
|
||||
public void SetGroup(UUID groupID, IClientAPI client)
|
||||
|
@ -3356,10 +3356,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void SetPhysicsAxisRotation()
|
||||
{
|
||||
if (PhysActor != null)
|
||||
PhysicsActor pa = PhysActor;
|
||||
|
||||
if (pa != null)
|
||||
{
|
||||
PhysActor.LockAngularMotion(RotationAxis);
|
||||
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor);
|
||||
pa.LockAngularMotion(RotationAxis);
|
||||
ParentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(pa);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,6 +76,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
// {
|
||||
// m_log.Debug("[SCENE PRESENCE] Destructor called");
|
||||
// }
|
||||
private void TriggerScenePresenceUpdated()
|
||||
{
|
||||
if (m_scene != null)
|
||||
m_scene.EventManager.TriggerScenePresenceUpdated(this);
|
||||
}
|
||||
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -489,6 +494,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
//m_log.DebugFormat(
|
||||
// "[ENTITY BASE]: In {0} set AbsolutePosition of {1} to {2}",
|
||||
// Scene.RegionInfo.RegionName, Name, m_pos);
|
||||
TriggerScenePresenceUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -508,6 +514,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return;
|
||||
|
||||
m_pos = value;
|
||||
TriggerScenePresenceUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -996,6 +1003,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public void TeleportWithMomentum(Vector3 pos, Vector3? v)
|
||||
{
|
||||
if (ParentID != (uint)0)
|
||||
StandUp();
|
||||
bool isFlying = Flying;
|
||||
Vector3 vel = Velocity;
|
||||
RemoveFromPhysicalScene();
|
||||
|
@ -1523,6 +1532,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
|
||||
m_scene.EventManager.TriggerOnClientMovement(this);
|
||||
TriggerScenePresenceUpdated();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -2419,6 +2429,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
m_scene.ForEachClient(SendTerseUpdateToClient);
|
||||
}
|
||||
TriggerScenePresenceUpdated();
|
||||
}
|
||||
|
||||
public void SendCoarseLocations(List<Vector3> coarseLocations, List<UUID> avatarUUIDs)
|
||||
|
@ -3195,6 +3206,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
Velocity = force;
|
||||
|
||||
m_forceToApply = null;
|
||||
TriggerScenePresenceUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,17 +27,22 @@
|
|||
|
||||
using System;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Interfaces
|
||||
{
|
||||
public interface IScriptApi
|
||||
{
|
||||
//
|
||||
// Each API has an identifier, which is used to load the
|
||||
// proper runtime assembly at load time.
|
||||
//
|
||||
void Initialize(IScriptEngine engine, SceneObjectPart part, uint localID, UUID item);
|
||||
/// <summary>
|
||||
/// Initialize the API
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Each API has an identifier, which is used to load the
|
||||
/// proper runtime assembly at load time.
|
||||
/// <param name='engine'>/param>
|
||||
/// <param name='part'></param>
|
||||
/// <param name='item'></param>
|
||||
void Initialize(IScriptEngine engine, SceneObjectPart part, TaskInventoryItem item);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -84,12 +84,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
protected IScriptEngine m_ScriptEngine;
|
||||
protected SceneObjectPart m_host;
|
||||
protected uint m_localID;
|
||||
|
||||
/// <summary>
|
||||
/// The UUID of the item that hosts this script
|
||||
/// The item that hosts this script
|
||||
/// </summary>
|
||||
protected UUID m_itemID;
|
||||
protected TaskInventoryItem m_item;
|
||||
|
||||
protected bool throwErrorOnNotImplemented = true;
|
||||
protected AsyncCommandManager AsyncCommands = null;
|
||||
|
@ -108,12 +107,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache =
|
||||
new Dictionary<UUID, UserInfoCacheEntry>();
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_host = host;
|
||||
m_localID = localID;
|
||||
m_itemID = itemID;
|
||||
m_item = item;
|
||||
|
||||
m_ScriptDelayFactor =
|
||||
m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f);
|
||||
|
@ -163,7 +161,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
public void state(string newState)
|
||||
{
|
||||
m_ScriptEngine.SetState(m_itemID, newState);
|
||||
m_ScriptEngine.SetState(m_item.ItemID, newState);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -173,7 +171,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public void llResetScript()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
m_ScriptEngine.ApiResetScript(m_itemID);
|
||||
m_ScriptEngine.ApiResetScript(m_item.ItemID);
|
||||
}
|
||||
|
||||
public void llResetOtherScript(string name)
|
||||
|
@ -272,20 +270,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
}
|
||||
|
||||
/// <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()
|
||||
{
|
||||
lock (m_host.TaskInventory)
|
||||
return m_host.TaskInventory[m_itemID];
|
||||
}
|
||||
|
||||
protected UUID InventoryKey(string name, int type)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
@ -857,7 +841,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
UUID.TryParse(ID, out keyID);
|
||||
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
||||
if (wComm != null)
|
||||
return wComm.Listen(m_localID, m_itemID, m_host.UUID, channelID, name, keyID, msg);
|
||||
return wComm.Listen(m_host.LocalId, m_item.ItemID, m_host.UUID, channelID, name, keyID, msg);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
@ -867,7 +851,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
||||
if (wComm != null)
|
||||
wComm.ListenControl(m_itemID, number, active);
|
||||
wComm.ListenControl(m_item.ItemID, number, active);
|
||||
}
|
||||
|
||||
public void llListenRemove(int number)
|
||||
|
@ -875,7 +859,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
||||
if (wComm != null)
|
||||
wComm.ListenRemove(m_itemID, number);
|
||||
wComm.ListenRemove(m_item.ItemID, number);
|
||||
}
|
||||
|
||||
public void llSensor(string name, string id, int type, double range, double arc)
|
||||
|
@ -884,7 +868,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
UUID keyID = UUID.Zero;
|
||||
UUID.TryParse(id, out keyID);
|
||||
|
||||
AsyncCommands.SensorRepeatPlugin.SenseOnce(m_localID, m_itemID, name, keyID, type, range, arc, m_host);
|
||||
AsyncCommands.SensorRepeatPlugin.SenseOnce(m_host.LocalId, m_item.ItemID, name, keyID, type, range, arc, m_host);
|
||||
}
|
||||
|
||||
public void llSensorRepeat(string name, string id, int type, double range, double arc, double rate)
|
||||
|
@ -893,13 +877,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
UUID keyID = UUID.Zero;
|
||||
UUID.TryParse(id, out keyID);
|
||||
|
||||
AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_localID, m_itemID, name, keyID, type, range, arc, rate, m_host);
|
||||
AsyncCommands.SensorRepeatPlugin.SetSenseRepeatEvent(m_host.LocalId, m_item.ItemID, name, keyID, type, range, arc, rate, m_host);
|
||||
}
|
||||
|
||||
public void llSensorRemove()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_localID, m_itemID);
|
||||
AsyncCommands.SensorRepeatPlugin.UnSetSenseRepeaterEvents(m_host.LocalId, m_item.ItemID);
|
||||
}
|
||||
|
||||
public string resolveName(UUID objecUUID)
|
||||
|
@ -940,7 +924,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_String llDetectedName(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return String.Empty;
|
||||
return detectedParams.Name;
|
||||
|
@ -949,7 +933,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_String llDetectedKey(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return String.Empty;
|
||||
return detectedParams.Key.ToString();
|
||||
|
@ -958,7 +942,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_String llDetectedOwner(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return String.Empty;
|
||||
return detectedParams.Owner.ToString();
|
||||
|
@ -967,7 +951,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Integer llDetectedType(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return 0;
|
||||
return new LSL_Integer(detectedParams.Type);
|
||||
|
@ -976,7 +960,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedPos(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector();
|
||||
return detectedParams.Position;
|
||||
|
@ -985,7 +969,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedVel(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector();
|
||||
return detectedParams.Velocity;
|
||||
|
@ -994,7 +978,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedGrab(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams parms = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (parms == null)
|
||||
return new LSL_Vector(0, 0, 0);
|
||||
|
||||
|
@ -1004,7 +988,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Rotation llDetectedRot(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Rotation();
|
||||
return detectedParams.Rotation;
|
||||
|
@ -1013,7 +997,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Integer llDetectedGroup(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Integer(0);
|
||||
if (m_host.GroupID == detectedParams.Group)
|
||||
|
@ -1024,7 +1008,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Integer llDetectedLinkNumber(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||
DetectParams parms = m_ScriptEngine.GetDetectParams(m_item.ItemID, number);
|
||||
if (parms == null)
|
||||
return new LSL_Integer(0);
|
||||
|
||||
|
@ -1037,7 +1021,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedTouchBinormal(int index)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, index);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector();
|
||||
return detectedParams.TouchBinormal;
|
||||
|
@ -1049,7 +1033,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Integer llDetectedTouchFace(int index)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, index);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Integer(-1);
|
||||
return new LSL_Integer(detectedParams.TouchFace);
|
||||
|
@ -1061,7 +1045,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedTouchNormal(int index)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, index);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector();
|
||||
return detectedParams.TouchNormal;
|
||||
|
@ -1073,7 +1057,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedTouchPos(int index)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, index);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector();
|
||||
return detectedParams.TouchPos;
|
||||
|
@ -1085,7 +1069,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedTouchST(int index)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, index);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector(-1.0, -1.0, 0.0);
|
||||
return detectedParams.TouchST;
|
||||
|
@ -1097,7 +1081,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Vector llDetectedTouchUV(int index)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, index);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, index);
|
||||
if (detectedParams == null)
|
||||
return new LSL_Vector(-1.0, -1.0, 0.0);
|
||||
return detectedParams.TouchUV;
|
||||
|
@ -2702,12 +2686,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter == UUID.Zero)
|
||||
if (m_item.PermsGranter == UUID.Zero)
|
||||
return 0;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0)
|
||||
{
|
||||
LSLError("No permissions to give money");
|
||||
return 0;
|
||||
|
@ -2890,7 +2872,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
sec = m_MinTimerInterval;
|
||||
m_host.AddScriptLPS(1);
|
||||
// Setting timer repeat
|
||||
AsyncCommands.TimerPlugin.SetTimerEvent(m_localID, m_itemID, sec);
|
||||
AsyncCommands.TimerPlugin.SetTimerEvent(m_host.LocalId, m_item.ItemID, sec);
|
||||
}
|
||||
|
||||
public virtual void llSleep(double sec)
|
||||
|
@ -2945,17 +2927,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
public void llTakeControls(int controls, int accept, int pass_on)
|
||||
{
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter != UUID.Zero)
|
||||
if (m_item.PermsGranter != UUID.Zero)
|
||||
{
|
||||
ScenePresence presence = World.GetScenePresence(item.PermsGranter);
|
||||
ScenePresence presence = World.GetScenePresence(m_item.PermsGranter);
|
||||
|
||||
if (presence != null)
|
||||
{
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
|
||||
{
|
||||
presence.RegisterControlEventsToScript(controls, accept, pass_on, m_localID, m_itemID);
|
||||
presence.RegisterControlEventsToScript(controls, accept, pass_on, m_host.LocalId, m_item.ItemID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2967,20 +2947,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter != UUID.Zero)
|
||||
if (m_item.PermsGranter != UUID.Zero)
|
||||
{
|
||||
ScenePresence presence = World.GetScenePresence(item.PermsGranter);
|
||||
ScenePresence presence = World.GetScenePresence(m_item.PermsGranter);
|
||||
|
||||
if (presence != null)
|
||||
{
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
|
||||
{
|
||||
// Unregister controls from Presence
|
||||
presence.UnRegisterControlEventsToScript(m_localID, m_itemID);
|
||||
presence.UnRegisterControlEventsToScript(m_host.LocalId, m_item.ItemID);
|
||||
// Remove Take Control permission.
|
||||
item.PermsMask &= ~ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
|
||||
m_item.PermsMask &= ~ScriptBaseClass.PERMISSION_TAKE_CONTROLS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3042,12 +3020,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
// if (m_host.ParentGroup.RootPart.AttachmentPoint == 0)
|
||||
// return;
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter != m_host.OwnerID)
|
||||
if (m_item.PermsGranter != m_host.OwnerID)
|
||||
return;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
||||
AttachToAvatar(attachmentPoint);
|
||||
}
|
||||
|
||||
|
@ -3058,12 +3034,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (m_host.ParentGroup.AttachmentPoint == 0)
|
||||
return;
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter != m_host.OwnerID)
|
||||
if (m_item.PermsGranter != m_host.OwnerID)
|
||||
return;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0)
|
||||
DetachFromAvatar();
|
||||
}
|
||||
|
||||
|
@ -3245,7 +3219,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
try
|
||||
{
|
||||
m_ScriptEngine.SetMinEventDelay(m_itemID, delay);
|
||||
m_ScriptEngine.SetMinEventDelay(m_item.ItemID, delay);
|
||||
}
|
||||
catch (NotImplementedException)
|
||||
{
|
||||
|
@ -3298,14 +3272,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter == UUID.Zero)
|
||||
if (m_item.PermsGranter == UUID.Zero)
|
||||
return;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
|
||||
{
|
||||
ScenePresence presence = World.GetScenePresence(item.PermsGranter);
|
||||
ScenePresence presence = World.GetScenePresence(m_item.PermsGranter);
|
||||
|
||||
if (presence != null)
|
||||
{
|
||||
|
@ -3323,21 +3295,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter == UUID.Zero)
|
||||
if (m_item.PermsGranter == UUID.Zero)
|
||||
return;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION) != 0)
|
||||
{
|
||||
UUID animID = new UUID();
|
||||
|
||||
if (!UUID.TryParse(anim, out animID))
|
||||
{
|
||||
animID=InventoryKey(anim);
|
||||
animID = InventoryKey(anim);
|
||||
}
|
||||
|
||||
ScenePresence presence = World.GetScenePresence(item.PermsGranter);
|
||||
ScenePresence presence = World.GetScenePresence(m_item.PermsGranter);
|
||||
|
||||
if (presence != null)
|
||||
{
|
||||
|
@ -3373,7 +3343,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public LSL_Integer llGetStartParameter()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
return m_ScriptEngine.GetStartParameter(m_itemID);
|
||||
return m_ScriptEngine.GetStartParameter(m_item.ItemID);
|
||||
}
|
||||
|
||||
public void llRequestPermissions(string agent, int perm)
|
||||
|
@ -3383,16 +3353,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (!UUID.TryParse(agent, out agentID))
|
||||
return;
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (agentID == UUID.Zero || perm == 0) // Releasing permissions
|
||||
{
|
||||
llReleaseControls();
|
||||
|
||||
item.PermsGranter = UUID.Zero;
|
||||
item.PermsMask = 0;
|
||||
m_item.PermsGranter = UUID.Zero;
|
||||
m_item.PermsMask = 0;
|
||||
|
||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||
m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
|
||||
"run_time_permissions", new Object[] {
|
||||
new LSL_Integer(0) },
|
||||
new DetectParams[0]));
|
||||
|
@ -3400,7 +3368,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
return;
|
||||
}
|
||||
|
||||
if (item.PermsGranter != agentID || (perm & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0)
|
||||
if (m_item.PermsGranter != agentID || (perm & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) == 0)
|
||||
llReleaseControls();
|
||||
|
||||
m_host.AddScriptLPS(1);
|
||||
|
@ -3417,11 +3385,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
lock (m_host.TaskInventory)
|
||||
{
|
||||
m_host.TaskInventory[m_itemID].PermsGranter = agentID;
|
||||
m_host.TaskInventory[m_itemID].PermsMask = perm;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsMask = perm;
|
||||
}
|
||||
|
||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||
m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
|
||||
"run_time_permissions", new Object[] {
|
||||
new LSL_Integer(perm) },
|
||||
new DetectParams[0]));
|
||||
|
@ -3441,11 +3409,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
lock (m_host.TaskInventory)
|
||||
{
|
||||
m_host.TaskInventory[m_itemID].PermsGranter = agentID;
|
||||
m_host.TaskInventory[m_itemID].PermsMask = perm;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsMask = perm;
|
||||
}
|
||||
|
||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||
m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
|
||||
"run_time_permissions", new Object[] {
|
||||
new LSL_Integer(perm) },
|
||||
new DetectParams[0]));
|
||||
|
@ -3466,8 +3434,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
lock (m_host.TaskInventory)
|
||||
{
|
||||
m_host.TaskInventory[m_itemID].PermsGranter = agentID;
|
||||
m_host.TaskInventory[m_itemID].PermsMask = 0;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsGranter = agentID;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsMask = 0;
|
||||
}
|
||||
|
||||
presence.ControllingClient.OnScriptAnswer += handleScriptAnswer;
|
||||
|
@ -3475,13 +3443,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
|
||||
presence.ControllingClient.SendScriptQuestion(
|
||||
m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, m_itemID, perm);
|
||||
m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, m_item.ItemID, perm);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Requested agent is not in range, refuse perms
|
||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||
m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
|
||||
"run_time_permissions", new Object[] {
|
||||
new LSL_Integer(0) },
|
||||
new DetectParams[0]));
|
||||
|
@ -3500,10 +3468,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
lock (m_host.TaskInventory)
|
||||
{
|
||||
m_host.TaskInventory[m_itemID].PermsMask = answer;
|
||||
m_host.TaskInventory[m_item.ItemID].PermsMask = answer;
|
||||
}
|
||||
|
||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams(
|
||||
m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams(
|
||||
"run_time_permissions", new Object[] {
|
||||
new LSL_Integer(answer) },
|
||||
new DetectParams[0]));
|
||||
|
@ -3513,14 +3481,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
return GetSelfInventoryItem().PermsGranter.ToString();
|
||||
return m_item.PermsGranter.ToString();
|
||||
}
|
||||
|
||||
public LSL_Integer llGetPermissions()
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
int perms = GetSelfInventoryItem().PermsMask;
|
||||
int perms = m_item.PermsMask;
|
||||
|
||||
if (m_automaticLinkPermission)
|
||||
perms |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||
|
@ -3558,9 +3526,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (!UUID.TryParse(target, out targetID))
|
||||
return;
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||
&& !m_automaticLinkPermission)
|
||||
{
|
||||
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
||||
|
@ -3568,7 +3534,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
|
||||
IClientAPI client = null;
|
||||
ScenePresence sp = World.GetScenePresence(item.PermsGranter);
|
||||
ScenePresence sp = World.GetScenePresence(m_item.PermsGranter);
|
||||
if (sp != null)
|
||||
client = sp.ControllingClient;
|
||||
|
||||
|
@ -3615,7 +3581,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
if ((GetSelfInventoryItem().PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0
|
||||
&& !m_automaticLinkPermission)
|
||||
{
|
||||
ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!");
|
||||
|
@ -3986,7 +3952,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
if (item.Name == name)
|
||||
{
|
||||
if (item.ItemID == m_itemID)
|
||||
if (item.ItemID == m_item.ItemID)
|
||||
throw new ScriptDeleteException();
|
||||
else
|
||||
m_host.Inventory.RemoveInventoryItem(item.ItemID);
|
||||
|
@ -4121,8 +4087,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
UUID rq = UUID.Random();
|
||||
|
||||
UUID tid = AsyncCommands.
|
||||
DataserverPlugin.RegisterRequest(m_localID,
|
||||
m_itemID, rq.ToString());
|
||||
DataserverPlugin.RegisterRequest(m_host.LocalId,
|
||||
m_item.ItemID, rq.ToString());
|
||||
|
||||
AsyncCommands.
|
||||
DataserverPlugin.DataserverReply(rq.ToString(), reply);
|
||||
|
@ -4142,8 +4108,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (item.Type == 3 && item.Name == name)
|
||||
{
|
||||
UUID tid = AsyncCommands.
|
||||
DataserverPlugin.RegisterRequest(m_localID,
|
||||
m_itemID, item.AssetID.ToString());
|
||||
DataserverPlugin.RegisterRequest(m_host.LocalId,
|
||||
m_item.ItemID, item.AssetID.ToString());
|
||||
|
||||
Vector3 region = new Vector3(
|
||||
World.RegionInfo.RegionLocX * Constants.RegionSize,
|
||||
|
@ -4498,9 +4464,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
return item.Name != null ? item.Name : String.Empty;
|
||||
return m_item.Name != null ? m_item.Name : String.Empty;
|
||||
}
|
||||
|
||||
public LSL_Integer llGetLinkNumberOfSides(int link)
|
||||
|
@ -5565,6 +5529,91 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
return "en-us";
|
||||
}
|
||||
/// <summary>
|
||||
/// http://wiki.secondlife.com/wiki/LlGetAgentList
|
||||
/// The list of options is currently not used in SL
|
||||
/// scope is one of:-
|
||||
/// AGENT_LIST_REGION - all in the region
|
||||
/// AGENT_LIST_PARCEL - all in the same parcel as the scripted object
|
||||
/// AGENT_LIST_PARCEL_OWNER - all in any parcel owned by the owner of the
|
||||
/// current parcel.
|
||||
/// </summary>
|
||||
public LSL_List llGetAgentList(LSL_Integer scope, LSL_List options)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
// the constants are 1, 2 and 4 so bits are being set, but you
|
||||
// get an error "INVALID_SCOPE" if it is anything but 1, 2 and 4
|
||||
bool regionWide = scope == ScriptBaseClass.AGENT_LIST_REGION;
|
||||
bool parcelOwned = scope == ScriptBaseClass.AGENT_LIST_PARCEL_OWNER;
|
||||
bool parcel = scope == ScriptBaseClass.AGENT_LIST_PARCEL;
|
||||
|
||||
LSL_List result = new LSL_List();
|
||||
|
||||
if (!regionWide && !parcelOwned && !parcel)
|
||||
{
|
||||
result.Add("INVALID_SCOPE");
|
||||
return result;
|
||||
}
|
||||
|
||||
ILandObject land;
|
||||
Vector3 pos;
|
||||
UUID id = UUID.Zero;
|
||||
if (parcel || parcelOwned)
|
||||
{
|
||||
pos = m_host.ParentGroup.RootPart.GetWorldPosition();
|
||||
land = World.LandChannel.GetLandObject(pos.X, pos.Y);
|
||||
if (land == null)
|
||||
{
|
||||
id = UUID.Zero;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (parcelOwned)
|
||||
{
|
||||
id = land.LandData.OwnerID;
|
||||
}
|
||||
else
|
||||
{
|
||||
id = land.LandData.GlobalID;
|
||||
}
|
||||
}
|
||||
}
|
||||
List<UUID> presenceIds = new List<UUID>();
|
||||
|
||||
World.ForEachRootScenePresence(
|
||||
delegate (ScenePresence ssp)
|
||||
{
|
||||
// Gods are not listed in SL
|
||||
if (!ssp.IsDeleted && ssp.GodLevel == 0.0 && !ssp.IsChildAgent)
|
||||
{
|
||||
if (!regionWide)
|
||||
{
|
||||
pos = ssp.AbsolutePosition;
|
||||
land = World.LandChannel.GetLandObject(pos.X, pos.Y);
|
||||
if (land != null)
|
||||
{
|
||||
if (parcelOwned && land.LandData.OwnerID == id ||
|
||||
parcel && land.LandData.GlobalID == id)
|
||||
{
|
||||
result.Add(ssp.UUID.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(ssp.UUID.ToString());
|
||||
}
|
||||
}
|
||||
// Maximum of 100 results
|
||||
if (result.Length > 99)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
);
|
||||
return result;
|
||||
}
|
||||
|
||||
public void llAdjustSoundVolume(double volume)
|
||||
{
|
||||
|
@ -6598,14 +6647,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
|
||||
if (xmlrpcMod.IsEnabled())
|
||||
{
|
||||
UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, UUID.Zero);
|
||||
UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_host.LocalId, m_item.ItemID, UUID.Zero);
|
||||
IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface<IXmlRpcRouter>();
|
||||
if (xmlRpcRouter != null)
|
||||
{
|
||||
string ExternalHostName = m_ScriptEngine.World.RegionInfo.ExternalHostName;
|
||||
|
||||
xmlRpcRouter.RegisterNewReceiver(m_ScriptEngine.ScriptModule, channelID, m_host.UUID,
|
||||
m_itemID, String.Format("http://{0}:{1}/", ExternalHostName,
|
||||
m_item.ItemID, String.Format("http://{0}:{1}/", ExternalHostName,
|
||||
xmlrpcMod.Port.ToString()));
|
||||
}
|
||||
object[] resobj = new object[]
|
||||
|
@ -6617,7 +6666,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
new LSL_Integer(0),
|
||||
new LSL_String(String.Empty)
|
||||
};
|
||||
m_ScriptEngine.PostScriptEvent(m_itemID, new EventParams("remote_data", resobj,
|
||||
m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams("remote_data", resobj,
|
||||
new DetectParams[0]));
|
||||
}
|
||||
ScriptSleep(1000);
|
||||
|
@ -6628,7 +6677,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
|
||||
ScriptSleep(3000);
|
||||
return (xmlrpcMod.SendRemoteData(m_localID, m_itemID, channel, dest, idata, sdata)).ToString();
|
||||
return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString();
|
||||
}
|
||||
|
||||
public void llRemoteDataReply(string channel, string message_id, string sdata, int idata)
|
||||
|
@ -9049,13 +9098,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
if (m_UrlModule != null)
|
||||
return m_UrlModule.RequestSecureURL(m_ScriptEngine.ScriptModule, m_host, m_itemID).ToString();
|
||||
return m_UrlModule.RequestSecureURL(m_ScriptEngine.ScriptModule, m_host, m_item.ItemID).ToString();
|
||||
return UUID.Zero.ToString();
|
||||
}
|
||||
|
||||
public LSL_String llRequestSimulatorData(string simulator, int data)
|
||||
{
|
||||
IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_itemID, "OSSL");
|
||||
IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "OSSL");
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -9117,7 +9166,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
UUID rq = UUID.Random();
|
||||
|
||||
UUID tid = AsyncCommands.
|
||||
DataserverPlugin.RegisterRequest(m_localID, m_itemID, rq.ToString());
|
||||
DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString());
|
||||
|
||||
AsyncCommands.
|
||||
DataserverPlugin.DataserverReply(rq.ToString(), reply);
|
||||
|
@ -9136,7 +9185,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
|
||||
if (m_UrlModule != null)
|
||||
return m_UrlModule.RequestURL(m_ScriptEngine.ScriptModule, m_host, m_itemID).ToString();
|
||||
return m_UrlModule.RequestURL(m_ScriptEngine.ScriptModule, m_host, m_item.ItemID).ToString();
|
||||
return UUID.Zero.ToString();
|
||||
}
|
||||
|
||||
|
@ -9602,12 +9651,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter == UUID.Zero)
|
||||
if (m_item.PermsGranter == UUID.Zero)
|
||||
return new LSL_Vector();
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
||||
{
|
||||
ShoutError("No permissions to track the camera");
|
||||
return new LSL_Vector();
|
||||
|
@ -9626,12 +9673,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
if (item.PermsGranter == UUID.Zero)
|
||||
if (m_item.PermsGranter == UUID.Zero)
|
||||
return new LSL_Rotation();
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_TRACK_CAMERA) == 0)
|
||||
{
|
||||
ShoutError("No permissions to track the camera");
|
||||
return new LSL_Rotation();
|
||||
|
@ -9696,7 +9741,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public void llMapDestination(string simname, LSL_Vector pos, LSL_Vector lookAt)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_itemID, 0);
|
||||
DetectParams detectedParams = m_ScriptEngine.GetDetectParams(m_item.ItemID, 0);
|
||||
if (detectedParams == null) return; // only works on the first detected avatar
|
||||
|
||||
ScenePresence avatar = World.GetScenePresence(detectedParams.Key);
|
||||
|
@ -9813,15 +9858,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (objectID == UUID.Zero)
|
||||
return;
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
// we need the permission first, to know which avatar we want to set the camera for
|
||||
UUID agentID = item.PermsGranter;
|
||||
UUID agentID = m_item.PermsGranter;
|
||||
|
||||
if (agentID == UUID.Zero)
|
||||
return;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0)
|
||||
return;
|
||||
|
||||
ScenePresence presence = World.GetScenePresence(agentID);
|
||||
|
@ -9867,15 +9910,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (objectID == UUID.Zero)
|
||||
return;
|
||||
|
||||
TaskInventoryItem item = GetSelfInventoryItem();
|
||||
|
||||
// we need the permission first, to know which avatar we want to clear the camera for
|
||||
UUID agentID = item.PermsGranter;
|
||||
UUID agentID = m_item.PermsGranter;
|
||||
|
||||
if (agentID == UUID.Zero)
|
||||
return;
|
||||
|
||||
if ((item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0)
|
||||
if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CONTROL_CAMERA) == 0)
|
||||
return;
|
||||
|
||||
ScenePresence presence = World.GetScenePresence(agentID);
|
||||
|
@ -10024,8 +10065,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
}
|
||||
|
||||
UUID reqID = httpScriptMod.
|
||||
StartHttpRequest(m_localID, m_itemID, url, param, httpHeaders, body);
|
||||
UUID reqID
|
||||
= httpScriptMod.StartHttpRequest(m_host.LocalId, m_item.ItemID, url, param, httpHeaders, body);
|
||||
|
||||
if (reqID != UUID.Zero)
|
||||
return reqID.ToString();
|
||||
|
@ -10455,7 +10496,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
|
||||
// was: UUID tid = tid = AsyncCommands.
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_localID, m_itemID, assetID.ToString());
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, assetID.ToString());
|
||||
|
||||
if (NotecardCache.IsCached(assetID))
|
||||
{
|
||||
|
@ -10517,7 +10558,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
|
||||
// was: UUID tid = tid = AsyncCommands.
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_localID, m_itemID, assetID.ToString());
|
||||
UUID tid = AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, assetID.ToString());
|
||||
|
||||
if (NotecardCache.IsCached(assetID))
|
||||
{
|
||||
|
@ -10575,7 +10616,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public void print(string str)
|
||||
{
|
||||
// yes, this is a real LSL function. See: http://wiki.secondlife.com/wiki/Print
|
||||
IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_itemID, "OSSL");
|
||||
IOSSL_Api ossl = (IOSSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "OSSL");
|
||||
if (ossl != null)
|
||||
{
|
||||
ossl.CheckThreatLevel(ThreatLevel.High, "print");
|
||||
|
@ -10603,7 +10644,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
UUID rq = UUID.Random();
|
||||
|
||||
AsyncCommands.DataserverPlugin.RegisterRequest(m_localID, m_itemID, rq.ToString());
|
||||
AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString());
|
||||
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(rq.ToString(), Name2Username(llKey2Name(id)));
|
||||
|
||||
|
@ -10619,7 +10660,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
UUID rq = UUID.Random();
|
||||
|
||||
AsyncCommands.DataserverPlugin.RegisterRequest(m_localID, m_itemID, rq.ToString());
|
||||
AsyncCommands.DataserverPlugin.RegisterRequest(m_host.LocalId, m_item.ItemID, rq.ToString());
|
||||
|
||||
AsyncCommands.DataserverPlugin.DataserverReply(rq.ToString(), llKey2Name(id));
|
||||
|
||||
|
|
|
@ -58,17 +58,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
internal IScriptEngine m_ScriptEngine;
|
||||
internal SceneObjectPart m_host;
|
||||
internal uint m_localID;
|
||||
internal UUID m_itemID;
|
||||
internal bool m_LSFunctionsEnabled = false;
|
||||
internal IScriptModuleComms m_comms = null;
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_host = host;
|
||||
m_localID = localID;
|
||||
m_itemID = itemID;
|
||||
|
||||
if (m_ScriptEngine.Config.GetBoolean("AllowLightShareFunctions", false))
|
||||
m_LSFunctionsEnabled = true;
|
||||
|
|
|
@ -57,17 +57,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
internal IScriptEngine m_ScriptEngine;
|
||||
internal SceneObjectPart m_host;
|
||||
internal uint m_localID;
|
||||
internal UUID m_itemID;
|
||||
internal TaskInventoryItem m_item;
|
||||
internal bool m_MODFunctionsEnabled = false;
|
||||
internal IScriptModuleComms m_comms = null;
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_host = host;
|
||||
m_localID = localID;
|
||||
m_itemID = itemID;
|
||||
m_item = item;
|
||||
|
||||
if (m_ScriptEngine.Config.GetBoolean("AllowMODFunctions", false))
|
||||
m_MODFunctionsEnabled = true;
|
||||
|
@ -252,7 +250,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
// non-null but don't trust it completely
|
||||
try
|
||||
{
|
||||
object result = m_comms.InvokeOperation(m_host.UUID, m_itemID, fname, convertedParms);
|
||||
object result = m_comms.InvokeOperation(m_host.UUID, m_item.ItemID, fname, convertedParms);
|
||||
if (result != null)
|
||||
return result;
|
||||
|
||||
|
@ -279,7 +277,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
UUID req = UUID.Random();
|
||||
|
||||
m_comms.RaiseEvent(m_itemID, req.ToString(), module, command, k);
|
||||
m_comms.RaiseEvent(m_item.ItemID, req.ToString(), module, command, k);
|
||||
|
||||
return req.ToString();
|
||||
}
|
||||
|
|
|
@ -133,20 +133,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
internal IScriptEngine m_ScriptEngine;
|
||||
internal ILSL_Api m_LSL_Api = null; // get a reference to the LSL API so we can call methods housed there
|
||||
internal SceneObjectPart m_host;
|
||||
internal uint m_localID;
|
||||
internal UUID m_itemID;
|
||||
internal TaskInventoryItem m_item;
|
||||
internal bool m_OSFunctionsEnabled = false;
|
||||
internal ThreatLevel m_MaxThreatLevel = ThreatLevel.VeryLow;
|
||||
internal float m_ScriptDelayFactor = 1.0f;
|
||||
internal float m_ScriptDistanceFactor = 1.0f;
|
||||
internal Dictionary<string, FunctionPerms > m_FunctionPerms = new Dictionary<string, FunctionPerms >();
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, uint localID, UUID itemID)
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_host = host;
|
||||
m_localID = localID;
|
||||
m_itemID = itemID;
|
||||
m_item = item;
|
||||
|
||||
if (m_ScriptEngine.Config.GetBoolean("AllowOSFunctions", false))
|
||||
m_OSFunctionsEnabled = true;
|
||||
|
@ -224,7 +222,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
if (m_LSL_Api != null)
|
||||
return;
|
||||
|
||||
m_LSL_Api = (ILSL_Api)m_ScriptEngine.GetApi(m_itemID, "LSL");
|
||||
m_LSL_Api = (ILSL_Api)m_ScriptEngine.GetApi(m_item.ItemID, "LSL");
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -343,22 +341,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
return;
|
||||
}
|
||||
|
||||
TaskInventoryItem ti = m_host.Inventory.GetInventoryItem(m_itemID);
|
||||
if (ti == null)
|
||||
{
|
||||
OSSLError(
|
||||
String.Format("{0} permission error. Can't find script in prim inventory.",
|
||||
function));
|
||||
}
|
||||
|
||||
UUID ownerID = ti.OwnerID;
|
||||
UUID ownerID = m_item.OwnerID;
|
||||
|
||||
//OSSL only may be used if object is in the same group as the parcel
|
||||
if (m_FunctionPerms[function].AllowedOwnerClasses.Contains("PARCEL_GROUP_MEMBER"))
|
||||
{
|
||||
ILandObject land = World.LandChannel.GetLandObject(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y);
|
||||
|
||||
if (land.LandData.GroupID == ti.GroupID && land.LandData.GroupID != UUID.Zero)
|
||||
if (land.LandData.GroupID == m_item.GroupID && land.LandData.GroupID != UUID.Zero)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -394,13 +384,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
}
|
||||
}
|
||||
|
||||
if (!m_FunctionPerms[function].AllowedCreators.Contains(ti.CreatorID))
|
||||
if (!m_FunctionPerms[function].AllowedCreators.Contains(m_item.CreatorID))
|
||||
OSSLError(
|
||||
String.Format("{0} permission denied. Script creator is not in the list of users allowed to execute this function and prim owner also has no permission.",
|
||||
function));
|
||||
if (ti.CreatorID != ownerID)
|
||||
|
||||
if (m_item.CreatorID != ownerID)
|
||||
{
|
||||
if ((ti.CurrentPermissions & (uint)PermissionMask.Modify) != 0)
|
||||
if ((m_item.CurrentPermissions & (uint)PermissionMask.Modify) != 0)
|
||||
OSSLError(
|
||||
String.Format("{0} permission denied. Script permissions error.",
|
||||
function));
|
||||
|
@ -1183,7 +1174,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
CheckThreatLevel(ThreatLevel.High, "osSetStateEvents");
|
||||
m_host.AddScriptLPS(1);
|
||||
|
||||
m_host.SetScriptEvents(m_itemID, events);
|
||||
m_host.SetScriptEvents(m_item.ItemID, events);
|
||||
}
|
||||
|
||||
public void osSetRegionWaterHeight(double height)
|
||||
|
|
|
@ -109,6 +109,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
|||
LSL_Vector llGetAccel();
|
||||
LSL_Integer llGetAgentInfo(string id);
|
||||
LSL_String llGetAgentLanguage(string id);
|
||||
LSL_List llGetAgentList(LSL_Integer scope, LSL_List options);
|
||||
LSL_Vector llGetAgentSize(string id);
|
||||
LSL_Float llGetAlpha(int face);
|
||||
LSL_Float llGetAndResetTime();
|
||||
|
|
|
@ -501,6 +501,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
public const int OBJECT_STREAMING_COST = 15;
|
||||
public const int OBJECT_PHYSICS_COST = 16;
|
||||
|
||||
// for llGetAgentList
|
||||
public const int AGENT_LIST_PARCEL = 1;
|
||||
public const int AGENT_LIST_PARCEL_OWNER = 2;
|
||||
public const int AGENT_LIST_REGION = 4;
|
||||
|
||||
// Can not be public const?
|
||||
public static readonly vector ZERO_VECTOR = new vector(0.0, 0.0, 0.0);
|
||||
public static readonly rotation ZERO_ROTATION = new rotation(0.0, 0.0, 0.0, 1.0);
|
||||
|
|
|
@ -389,6 +389,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
|||
return m_LSL_Functions.llGetAgentLanguage(id);
|
||||
}
|
||||
|
||||
public LSL_List llGetAgentList(LSL_Integer scope, LSL_List options)
|
||||
{
|
||||
return m_LSL_Functions.llGetAgentList(scope, options);
|
||||
}
|
||||
|
||||
public LSL_Vector llGetAgentSize(string id)
|
||||
{
|
||||
return m_LSL_Functions.llGetAgentSize(id);
|
||||
|
|
|
@ -232,7 +232,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
foreach (string api in am.GetApis())
|
||||
{
|
||||
m_Apis[api] = am.CreateApi(api);
|
||||
m_Apis[api].Initialize(engine, part, LocalID, itemID);
|
||||
m_Apis[api].Initialize(engine, part, ScriptTask);
|
||||
}
|
||||
|
||||
try
|
||||
|
|
|
@ -91,7 +91,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
TaskInventoryHelpers.AddSceneObject(m_scene, so1.RootPart, inventoryItemName, itemId, userId);
|
||||
|
||||
LSL_Api api = new LSL_Api();
|
||||
api.Initialize(m_engine, so1.RootPart, so1.RootPart.LocalId, so1.RootPart.UUID);
|
||||
api.Initialize(m_engine, so1.RootPart, null);
|
||||
|
||||
// Create a second object
|
||||
SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, userId, "so2", 0x100);
|
||||
|
@ -124,7 +124,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10);
|
||||
m_scene.AddSceneObject(so1);
|
||||
LSL_Api api = new LSL_Api();
|
||||
api.Initialize(m_engine, so1.RootPart, so1.RootPart.LocalId, so1.RootPart.UUID);
|
||||
api.Initialize(m_engine, so1.RootPart, null);
|
||||
|
||||
// Create an object embedded inside the first
|
||||
UUID itemId = TestHelpers.ParseTail(0x20);
|
||||
|
@ -134,7 +134,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, user2Id, "so2", 0x100);
|
||||
m_scene.AddSceneObject(so2);
|
||||
LSL_Api api2 = new LSL_Api();
|
||||
api2.Initialize(m_engine, so2.RootPart, so2.RootPart.LocalId, so2.RootPart.UUID);
|
||||
api2.Initialize(m_engine, so2.RootPart, null);
|
||||
|
||||
// *** Firstly, we test where llAllowInventoryDrop() has not been called. ***
|
||||
api.llGiveInventory(so2.UUID.ToString(), inventoryItemName);
|
||||
|
|
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSimulator Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using NUnit.Framework;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.Assets;
|
||||
using OpenMetaverse.StructuredData;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
|
||||
using OpenSim.Region.OptionalModules.World.NPC;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests for linking functions in LSL
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This relates to LSL. Actual linking functionality should be tested in the main
|
||||
/// OpenSim.Region.Framework.Scenes.Tests.SceneObjectLinkingTests.
|
||||
/// </remarks>
|
||||
[TestFixture]
|
||||
public class LSL_ApiLinkingTests
|
||||
{
|
||||
protected Scene m_scene;
|
||||
protected XEngine.XEngine m_engine;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
IConfigSource initConfigSource = new IniConfigSource();
|
||||
IConfig config = initConfigSource.AddConfig("XEngine");
|
||||
config.Set("Enabled", "true");
|
||||
|
||||
m_scene = new SceneHelpers().SetupScene();
|
||||
SceneHelpers.SetupSceneModules(m_scene, initConfigSource);
|
||||
|
||||
m_engine = new XEngine.XEngine();
|
||||
m_engine.Initialise(initConfigSource);
|
||||
m_engine.AddRegion(m_scene);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestllCreateLink()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
UUID ownerId = TestHelpers.ParseTail(0x1);
|
||||
|
||||
SceneObjectGroup grp1 = SceneHelpers.CreateSceneObject(2, ownerId, "grp1-", 0x10);
|
||||
grp1.AbsolutePosition = new Vector3(10, 10, 10);
|
||||
m_scene.AddSceneObject(grp1);
|
||||
|
||||
// FIXME: This should really be a script item (with accompanying script)
|
||||
TaskInventoryItem grp1Item
|
||||
= TaskInventoryHelpers.AddNotecard(m_scene, grp1.RootPart);
|
||||
grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||
|
||||
SceneObjectGroup grp2 = SceneHelpers.CreateSceneObject(2, ownerId, "grp2-", 0x20);
|
||||
grp2.AbsolutePosition = new Vector3(20, 20, 20);
|
||||
|
||||
// <180,0,0>
|
||||
grp2.UpdateGroupRotationR(Quaternion.CreateFromEulers(180 * Utils.DEG_TO_RAD, 0, 0));
|
||||
|
||||
m_scene.AddSceneObject(grp2);
|
||||
|
||||
LSL_Api apiGrp1 = new LSL_Api();
|
||||
apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
|
||||
|
||||
apiGrp1.llCreateLink(grp2.UUID.ToString(), ScriptBaseClass.TRUE);
|
||||
|
||||
Assert.That(grp1.Parts.Length, Is.EqualTo(4));
|
||||
Assert.That(grp2.IsDeleted, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestllBreakLink()
|
||||
{
|
||||
TestHelpers.InMethod();
|
||||
|
||||
UUID ownerId = TestHelpers.ParseTail(0x1);
|
||||
|
||||
SceneObjectGroup grp1 = SceneHelpers.CreateSceneObject(2, ownerId, "grp1-", 0x10);
|
||||
grp1.AbsolutePosition = new Vector3(10, 10, 10);
|
||||
m_scene.AddSceneObject(grp1);
|
||||
|
||||
// FIXME: This should really be a script item (with accompanying script)
|
||||
TaskInventoryItem grp1Item
|
||||
= TaskInventoryHelpers.AddNotecard(m_scene, grp1.RootPart);
|
||||
grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||
|
||||
LSL_Api apiGrp1 = new LSL_Api();
|
||||
apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
|
||||
|
||||
apiGrp1.llBreakLink(2);
|
||||
|
||||
Assert.That(grp1.Parts.Length, Is.EqualTo(1));
|
||||
|
||||
SceneObjectGroup grp2 = m_scene.GetSceneObjectGroup("grp1-Part1");
|
||||
Assert.That(grp2, Is.Not.Null);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -66,8 +66,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
engine.AddRegion(scene);
|
||||
|
||||
m_lslApi = new LSL_Api();
|
||||
m_lslApi.Initialize(engine, part, part.LocalId, part.UUID);
|
||||
|
||||
m_lslApi.Initialize(engine, part, null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
|
@ -95,7 +95,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, part.LocalId, part.UUID);
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
@ -130,7 +130,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, part.LocalId, part.UUID);
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
@ -161,7 +161,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, part.LocalId, part.UUID);
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
|
||||
|
@ -202,7 +202,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, part.LocalId, part.UUID);
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
|
||||
|
|
|
@ -104,10 +104,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(otherSo);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, part.LocalId, part.UUID);
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
|
||||
OSSL_Api otherOsslApi = new OSSL_Api();
|
||||
otherOsslApi.Initialize(m_engine, otherPart, otherPart.LocalId, otherPart.UUID);
|
||||
otherOsslApi.Initialize(m_engine, otherPart, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
@ -151,7 +151,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, part.LocalId, part.UUID);
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
|
Loading…
Reference in New Issue