Thank you, salahazar, for a patch that corrects the behavior of
llDetectedLink(). Also a small refactor to remove an interface member from IScriptEngine.0.6.0-stable
parent
6e3367d68c
commit
5525a3ecb4
|
@ -83,8 +83,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public event OnShutdownDelegate OnShutdown;
|
public event OnShutdownDelegate OnShutdown;
|
||||||
|
|
||||||
public delegate void ObjectGrabDelegate(uint localID, LLVector3 offsetPos, IClientAPI remoteClient);
|
public delegate void ObjectGrabDelegate(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient);
|
||||||
public delegate void ObjectDeGrabDelegate(uint localID, IClientAPI remoteClient);
|
public delegate void ObjectDeGrabDelegate(uint localID, uint originalID, IClientAPI remoteClient);
|
||||||
public delegate void ScriptResetDelegate(uint localID, LLUUID itemID);
|
public delegate void ScriptResetDelegate(uint localID, LLUUID itemID);
|
||||||
|
|
||||||
public delegate void OnPermissionErrorDelegate(LLUUID user, string reason);
|
public delegate void OnPermissionErrorDelegate(LLUUID user, string reason);
|
||||||
|
@ -492,21 +492,21 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerShutdown();
|
handlerShutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
|
public void TriggerObjectGrab(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
handlerObjectGrab = OnObjectGrab;
|
handlerObjectGrab = OnObjectGrab;
|
||||||
if (handlerObjectGrab != null)
|
if (handlerObjectGrab != null)
|
||||||
{
|
{
|
||||||
handlerObjectGrab(localID, offsetPos, remoteClient);
|
handlerObjectGrab(localID, originalID, offsetPos, remoteClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void TriggerObjectDeGrab(uint localID, IClientAPI remoteClient)
|
public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
handlerObjectDeGrab = OnObjectDeGrab;
|
handlerObjectDeGrab = OnObjectDeGrab;
|
||||||
if (handlerObjectDeGrab != null)
|
if (handlerObjectDeGrab != null)
|
||||||
{
|
{
|
||||||
handlerObjectDeGrab(localID, remoteClient);
|
handlerObjectDeGrab(localID, originalID, remoteClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -243,9 +243,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// If the touched prim handles touches, deliver it
|
// If the touched prim handles touches, deliver it
|
||||||
// If not, deliver to root prim
|
// If not, deliver to root prim
|
||||||
if ((part.ScriptEvents & scriptEvents.touch_start) != 0)
|
if ((part.ScriptEvents & scriptEvents.touch_start) != 0)
|
||||||
EventManager.TriggerObjectGrab(part.LocalId, part.OffsetPosition, remoteClient);
|
EventManager.TriggerObjectGrab(part.LocalId, 0, part.OffsetPosition, remoteClient);
|
||||||
else
|
else
|
||||||
EventManager.TriggerObjectGrab(obj.RootPart.LocalId, part.OffsetPosition, remoteClient);
|
EventManager.TriggerObjectGrab(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -274,9 +274,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// If the touched prim handles touches, deliver it
|
// If the touched prim handles touches, deliver it
|
||||||
// If not, deliver to root prim
|
// If not, deliver to root prim
|
||||||
if ((part.ScriptEvents & scriptEvents.touch_end) != 0)
|
if ((part.ScriptEvents & scriptEvents.touch_end) != 0)
|
||||||
EventManager.TriggerObjectDeGrab(part.LocalId, remoteClient);
|
EventManager.TriggerObjectDeGrab(part.LocalId, 0, remoteClient);
|
||||||
else
|
else
|
||||||
EventManager.TriggerObjectDeGrab(obj.RootPart.LocalId, remoteClient);
|
EventManager.TriggerObjectDeGrab(obj.RootPart.LocalId, part.LocalId, remoteClient);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,7 +117,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_entry", EventQueueManager.llDetectNull, new object[] { });
|
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_entry", EventQueueManager.llDetectNull, new object[] { });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_start(uint localID, LLVector3 offsetPos, IClientAPI remoteClient)
|
public void touch_start(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
||||||
|
@ -152,7 +152,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_start", detstruct, new object[] { new LSL_Types.LSLInteger(1) });
|
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_start", detstruct, new object[] { new LSL_Types.LSLInteger(1) });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_end(uint localID, IClientAPI remoteClient)
|
public void touch_end(uint localID, uint originalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
||||||
|
@ -220,12 +220,12 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_exit", EventQueueManager.llDetectNull, new object[] { });
|
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_exit", EventQueueManager.llDetectNull, new object[] { });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch(uint localID, LLUUID itemID)
|
public void touch(uint localID, uint originalID, LLUUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch", EventQueueManager.llDetectNull);
|
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch", EventQueueManager.llDetectNull);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_end(uint localID, LLUUID itemID)
|
public void touch_end(uint localID, uint originalID, LLUUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch_end", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(1) });
|
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch_end", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(1) });
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,12 +38,12 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
{
|
{
|
||||||
public interface RemoteEvents
|
public interface RemoteEvents
|
||||||
{
|
{
|
||||||
void touch_start(uint localID, LLVector3 offsetPos, IClientAPI remoteClient);
|
void touch_start(uint localID, uint originalID, LLVector3 offsetPos, IClientAPI remoteClient);
|
||||||
void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez);
|
void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez);
|
||||||
void OnRemoveScript(uint localID, LLUUID itemID);
|
void OnRemoveScript(uint localID, LLUUID itemID);
|
||||||
void state_exit(uint localID);
|
void state_exit(uint localID);
|
||||||
void touch(uint localID, LLUUID itemID);
|
void touch(uint localID, uint originalID, LLUUID itemID);
|
||||||
void touch_end(uint localID, LLUUID itemID);
|
void touch_end(uint localID, uint originalID, LLUUID itemID);
|
||||||
void collision_start(uint localID, ColliderArgs col);
|
void collision_start(uint localID, ColliderArgs col);
|
||||||
void collision(uint localID, ColliderArgs col);
|
void collision(uint localID, ColliderArgs col);
|
||||||
void collision_end(uint localID, ColliderArgs col);
|
void collision_end(uint localID, ColliderArgs col);
|
||||||
|
|
|
@ -48,7 +48,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
||||||
Object AsyncCommands { get; }
|
Object AsyncCommands { get; }
|
||||||
ILog Log { get; }
|
ILog Log { get; }
|
||||||
string ScriptEngineName { get; }
|
string ScriptEngineName { get; }
|
||||||
int MaxScriptQueue { get; }
|
|
||||||
|
|
||||||
bool PostScriptEvent(LLUUID itemID, EventParams parms);
|
bool PostScriptEvent(LLUUID itemID, EventParams parms);
|
||||||
bool PostObjectEvent(uint localID, EventParams parms);
|
bool PostObjectEvent(uint localID, EventParams parms);
|
||||||
|
|
|
@ -72,6 +72,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
private int m_StartParam = 0;
|
private int m_StartParam = 0;
|
||||||
private string m_CurrentEvent = String.Empty;
|
private string m_CurrentEvent = String.Empty;
|
||||||
private bool m_InSelfDelete = false;
|
private bool m_InSelfDelete = false;
|
||||||
|
private int m_MaxScriptQueue;
|
||||||
|
|
||||||
private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>();
|
private Dictionary<string,IScriptApi> m_Apis = new Dictionary<string,IScriptApi>();
|
||||||
|
|
||||||
|
@ -153,7 +154,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
public ScriptInstance(IScriptEngine engine, uint localID,
|
public ScriptInstance(IScriptEngine engine, uint localID,
|
||||||
LLUUID objectID, LLUUID itemID, LLUUID assetID, string assembly,
|
LLUUID objectID, LLUUID itemID, LLUUID assetID, string assembly,
|
||||||
AppDomain dom, string primName, string scriptName,
|
AppDomain dom, string primName, string scriptName,
|
||||||
int startParam, bool postOnRez, StateSource stateSource)
|
int startParam, bool postOnRez, StateSource stateSource,
|
||||||
|
int maxScriptQueue)
|
||||||
{
|
{
|
||||||
m_Engine = engine;
|
m_Engine = engine;
|
||||||
|
|
||||||
|
@ -165,6 +167,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
m_ScriptName = scriptName;
|
m_ScriptName = scriptName;
|
||||||
m_Assembly = assembly;
|
m_Assembly = assembly;
|
||||||
m_StartParam = startParam;
|
m_StartParam = startParam;
|
||||||
|
m_MaxScriptQueue = maxScriptQueue;
|
||||||
|
|
||||||
ApiManager am = new ApiManager();
|
ApiManager am = new ApiManager();
|
||||||
|
|
||||||
|
@ -411,7 +414,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
|
|
||||||
lock (m_EventQueue)
|
lock (m_EventQueue)
|
||||||
{
|
{
|
||||||
if (m_EventQueue.Count >= m_Engine.MaxScriptQueue)
|
if (m_EventQueue.Count >= m_MaxScriptQueue)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_EventQueue.Enqueue(data);
|
m_EventQueue.Enqueue(data);
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_start(uint localID, LLVector3 offsetPos,
|
public void touch_start(uint localID, uint originalID, LLVector3 offsetPos,
|
||||||
IClientAPI remoteClient)
|
IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
|
@ -89,19 +89,27 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
det[0].Populate(myScriptEngine.World);
|
det[0].Populate(myScriptEngine.World);
|
||||||
|
|
||||||
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(
|
|
||||||
localID);
|
|
||||||
if (part == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
det[0].LinkNum = part.LinkNum;
|
if (originalID == 0)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
|
||||||
|
if (part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
det[0].LinkNum = part.LinkNum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
|
||||||
|
det[0].LinkNum = originalPart.LinkNum;
|
||||||
|
}
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
"touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
|
"touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
det));
|
det));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch(uint localID, LLVector3 offsetPos,
|
public void touch(uint localID, uint originalID, LLVector3 offsetPos,
|
||||||
IClientAPI remoteClient)
|
IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
|
@ -113,19 +121,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
offsetPos.Y,
|
offsetPos.Y,
|
||||||
offsetPos.Z);
|
offsetPos.Z);
|
||||||
|
|
||||||
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(
|
if (originalID == 0)
|
||||||
localID);
|
{
|
||||||
if (part == null)
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
|
||||||
return;
|
if (part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
det[0].LinkNum = part.LinkNum;
|
det[0].LinkNum = part.LinkNum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
|
||||||
|
det[0].LinkNum = originalPart.LinkNum;
|
||||||
|
}
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
"touch", new Object[] { new LSL_Types.LSLInteger(1) },
|
"touch", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
det));
|
det));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_end(uint localID, IClientAPI remoteClient)
|
public void touch_end(uint localID, uint originalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
DetectParams[] det = new DetectParams[1];
|
DetectParams[] det = new DetectParams[1];
|
||||||
|
@ -133,12 +148,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
det[0].Populate(myScriptEngine.World);
|
det[0].Populate(myScriptEngine.World);
|
||||||
|
|
||||||
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(
|
if (originalID == 0)
|
||||||
localID);
|
{
|
||||||
if (part == null)
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
|
||||||
return;
|
if (part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
det[0].LinkNum = part.LinkNum;
|
det[0].LinkNum = part.LinkNum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
|
||||||
|
det[0].LinkNum = originalPart.LinkNum;
|
||||||
|
}
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
"touch_end", new Object[] { new LSL_Types.LSLInteger(1) },
|
"touch_end", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
|
|
|
@ -319,14 +319,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
get { return false; }
|
get { return false; }
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// XEngine functions
|
|
||||||
//
|
|
||||||
public int MaxScriptQueue
|
|
||||||
{
|
|
||||||
get { return m_MaxScriptQueue; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez)
|
public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez)
|
||||||
{
|
{
|
||||||
Object[] parms = new Object[]
|
Object[] parms = new Object[]
|
||||||
|
@ -508,7 +500,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
m_AppDomains[appDomain],
|
m_AppDomains[appDomain],
|
||||||
part.ParentGroup.RootPart.Name,
|
part.ParentGroup.RootPart.Name,
|
||||||
item.Name, startParam, postOnRez,
|
item.Name, startParam, postOnRez,
|
||||||
StateSource.NewRez);
|
StateSource.NewRez, m_MaxScriptQueue);
|
||||||
|
|
||||||
m_log.DebugFormat("[XEngine] Loaded script {0}.{1}",
|
m_log.DebugFormat("[XEngine] Loaded script {0}.{1}",
|
||||||
part.ParentGroup.RootPart.Name, item.Name);
|
part.ParentGroup.RootPart.Name, item.Name);
|
||||||
|
|
Loading…
Reference in New Issue