Mantis#1437. Patch one of four. Thank you kindly, Melanie for:
Corrects the XEngine's script startup semantics. Completes llRequestAgentData Implements llDetectedLink Fixes a few minor issues0.6.0-stable
parent
e2d87b04e3
commit
e3c14e9b24
|
@ -322,6 +322,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
|
||||||
int idx;
|
int idx;
|
||||||
for (idx = 0; idx < SensedObjects.Length; idx++)
|
for (idx = 0; idx < SensedObjects.Length; idx++)
|
||||||
{
|
{
|
||||||
|
detect[idx] = new XDetectParams();
|
||||||
detect[idx].Key=(LLUUID)(SensedObjects.Data[idx]);
|
detect[idx].Key=(LLUUID)(SensedObjects.Data[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,8 +59,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins
|
||||||
|
|
||||||
public void SetTimerEvent(uint m_localID, LLUUID m_itemID, double sec)
|
public void SetTimerEvent(uint m_localID, LLUUID m_itemID, double sec)
|
||||||
{
|
{
|
||||||
Console.WriteLine("SetTimerEvent");
|
|
||||||
|
|
||||||
// Always remove first, in case this is a re-set
|
// Always remove first, in case this is a re-set
|
||||||
UnSetTimerEvents(m_localID, m_itemID);
|
UnSetTimerEvents(m_localID, m_itemID);
|
||||||
if (sec == 0) // Disabling timer
|
if (sec == 0) // Disabling timer
|
||||||
|
|
|
@ -79,8 +79,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
XDetectParams[] det = new XDetectParams[1];
|
XDetectParams[] det = new XDetectParams[1];
|
||||||
|
det[0] = new XDetectParams();
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
|
|
||||||
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(
|
||||||
|
localID);
|
||||||
|
if(part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
det[0].LinkNum = 0;
|
||||||
|
if(part.ParentGroup.Children.Count > 0)
|
||||||
|
det[0].LinkNum = part.LinkNum + 1;
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
||||||
"touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
|
"touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
det));
|
det));
|
||||||
|
@ -91,11 +101,21 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
XDetectParams[] det = new XDetectParams[1];
|
XDetectParams[] det = new XDetectParams[1];
|
||||||
|
det[0] = new XDetectParams();
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X,
|
det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X,
|
||||||
offsetPos.Y,
|
offsetPos.Y,
|
||||||
offsetPos.Z);
|
offsetPos.Z);
|
||||||
|
|
||||||
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(
|
||||||
|
localID);
|
||||||
|
if(part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
det[0].LinkNum = 0;
|
||||||
|
if(part.ParentGroup.Children.Count > 0)
|
||||||
|
det[0].LinkNum = part.LinkNum + 1;
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
||||||
"touch", new Object[] { new LSL_Types.LSLInteger(1) },
|
"touch", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
det));
|
det));
|
||||||
|
@ -105,8 +125,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
XDetectParams[] det = new XDetectParams[1];
|
XDetectParams[] det = new XDetectParams[1];
|
||||||
|
det[0] = new XDetectParams();
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
|
|
||||||
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(
|
||||||
|
localID);
|
||||||
|
if(part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
det[0].LinkNum = 0;
|
||||||
|
if(part.ParentGroup.Children.Count > 0)
|
||||||
|
det[0].LinkNum = part.LinkNum + 1;
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
||||||
"touch_end", new Object[] { new LSL_Types.LSLInteger(1) },
|
"touch_end", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
det));
|
det));
|
||||||
|
@ -137,6 +167,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
XDetectParams[] det = new XDetectParams[1];
|
XDetectParams[] det = new XDetectParams[1];
|
||||||
|
det[0] = new XDetectParams();
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
||||||
|
@ -150,6 +181,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
XDetectParams[] det = new XDetectParams[1];
|
XDetectParams[] det = new XDetectParams[1];
|
||||||
|
det[0] = new XDetectParams();
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
||||||
|
@ -162,6 +194,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
XDetectParams[] det = new XDetectParams[1];
|
XDetectParams[] det = new XDetectParams[1];
|
||||||
|
det[0] = new XDetectParams();
|
||||||
det[0].Key = remoteClient.AgentId;
|
det[0].Key = remoteClient.AgentId;
|
||||||
|
|
||||||
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
myScriptEngine.PostObjectEvent(localID, new XEventParams(
|
||||||
|
|
|
@ -524,7 +524,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number);
|
LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number);
|
||||||
if (sensedUUID != null)
|
if (sensedUUID != LLUUID.Zero)
|
||||||
return resolveName(sensedUUID);
|
return resolveName(sensedUUID);
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
}
|
}
|
||||||
|
@ -537,7 +537,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
public EntityBase entityDetectedKey(int number)
|
public EntityBase entityDetectedKey(int number)
|
||||||
{
|
{
|
||||||
LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number);
|
LLUUID sensedUUID = m_ScriptEngine.GetDetectID(m_itemID, number);
|
||||||
if (sensedUUID != null)
|
if (sensedUUID != LLUUID.Zero)
|
||||||
{
|
{
|
||||||
EntityBase SensedObject = null;
|
EntityBase SensedObject = null;
|
||||||
lock (World.Entities)
|
lock (World.Entities)
|
||||||
|
@ -636,6 +636,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
|
if(parms == null)
|
||||||
|
return new LSL_Types.Vector3(0, 0, 0);
|
||||||
|
|
||||||
return parms.OffsetPos;
|
return parms.OffsetPos;
|
||||||
}
|
}
|
||||||
|
@ -660,8 +662,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
public LSL_Types.LSLInteger llDetectedLinkNumber(int number)
|
public LSL_Types.LSLInteger llDetectedLinkNumber(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
NotImplemented("llDetectedLinkNumber");
|
XDetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
return 0;
|
if(parms == null)
|
||||||
|
return new LSL_Types.LSLInteger(0);
|
||||||
|
|
||||||
|
return new LSL_Types.LSLInteger(parms.LinkNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llDie()
|
public void llDie()
|
||||||
|
@ -1920,8 +1925,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
msg.fromAgentSession = new Guid(friendTransactionID.ToString());// fromAgentSession.UUID;
|
msg.fromAgentSession = new Guid(friendTransactionID.ToString());// fromAgentSession.UUID;
|
||||||
msg.toAgentID = new Guid(user); // toAgentID.UUID;
|
msg.toAgentID = new Guid(user); // toAgentID.UUID;
|
||||||
msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here
|
msg.imSessionID = new Guid(friendTransactionID.ToString()); // This is the item we're mucking with here
|
||||||
Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message);
|
// Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message);
|
||||||
Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString());
|
// Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString());
|
||||||
msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp;
|
msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp;
|
||||||
//if (client != null)
|
//if (client != null)
|
||||||
//{
|
//{
|
||||||
|
@ -2513,15 +2518,21 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
UserProfileData userProfile =
|
UserProfileData userProfile =
|
||||||
World.CommsManager.UserService.GetUserProfile(id);
|
World.CommsManager.UserService.GetUserProfile(id);
|
||||||
|
|
||||||
|
UserAgentData userAgent =
|
||||||
|
World.CommsManager.UserService.GetAgentByUUID(id);
|
||||||
|
|
||||||
|
if(userProfile == null || userAgent == null)
|
||||||
|
return LLUUID.Zero.ToString();
|
||||||
|
|
||||||
string reply = String.Empty;
|
string reply = String.Empty;
|
||||||
|
|
||||||
switch (data)
|
switch (data)
|
||||||
{
|
{
|
||||||
case 1: // DATA_ONLINE (0|1)
|
case 1: // DATA_ONLINE (0|1)
|
||||||
// TODO: implement fetching of this information
|
// TODO: implement fetching of this information
|
||||||
// if (userProfile.CurrentAgent.AgentOnline)
|
if (userProfile.CurrentAgent.AgentOnline)
|
||||||
// reply = "1";
|
reply = "1";
|
||||||
// else
|
else
|
||||||
reply = "0";
|
reply = "0";
|
||||||
break;
|
break;
|
||||||
case 2: // DATA_NAME (First Last)
|
case 2: // DATA_NAME (First Last)
|
||||||
|
@ -2672,8 +2683,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
case (int)BuiltIn_Commands_BaseClass.LINK_SET:
|
case (int)BuiltIn_Commands_BaseClass.LINK_SET:
|
||||||
|
|
||||||
Console.WriteLine("LINK_SET");
|
|
||||||
|
|
||||||
foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts())
|
foreach (SceneObjectPart partInst in m_host.ParentGroup.GetParts())
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -6280,7 +6289,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
System.Text.ASCIIEncoding enc =
|
System.Text.ASCIIEncoding enc =
|
||||||
new System.Text.ASCIIEncoding();
|
new System.Text.ASCIIEncoding();
|
||||||
string data = enc.GetString(a.Data);
|
string data = enc.GetString(a.Data);
|
||||||
Console.WriteLine(data);
|
//Console.WriteLine(data);
|
||||||
NotecardCache.Cache(id, data);
|
NotecardCache.Cache(id, data);
|
||||||
m_ScriptEngine.m_ASYNCLSLCommandManager.
|
m_ScriptEngine.m_ASYNCLSLCommandManager.
|
||||||
m_Dataserver.DataserverReply(id.ToString(),
|
m_Dataserver.DataserverReply(id.ToString(),
|
||||||
|
@ -6316,7 +6325,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
System.Text.ASCIIEncoding enc =
|
System.Text.ASCIIEncoding enc =
|
||||||
new System.Text.ASCIIEncoding();
|
new System.Text.ASCIIEncoding();
|
||||||
string data = enc.GetString(a.Data);
|
string data = enc.GetString(a.Data);
|
||||||
Console.WriteLine(data);
|
//Console.WriteLine(data);
|
||||||
NotecardCache.Cache(id, data);
|
NotecardCache.Cache(id, data);
|
||||||
m_ScriptEngine.m_ASYNCLSLCommandManager.
|
m_ScriptEngine.m_ASYNCLSLCommandManager.
|
||||||
m_Dataserver.DataserverReply(id.ToString(),
|
m_Dataserver.DataserverReply(id.ToString(),
|
||||||
|
|
|
@ -81,10 +81,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine.Script
|
||||||
|
|
||||||
public Dictionary<string, object> GetVars()
|
public Dictionary<string, object> GetVars()
|
||||||
{
|
{
|
||||||
m_Fields.Clear();
|
|
||||||
|
|
||||||
Dictionary<string, object> vars = new Dictionary<string, object>();
|
Dictionary<string, object> vars = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
if(m_Fields == null)
|
||||||
|
return vars;
|
||||||
|
|
||||||
|
m_Fields.Clear();
|
||||||
|
|
||||||
Type t = GetType();
|
Type t = GetType();
|
||||||
|
|
||||||
FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic |
|
FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic |
|
||||||
|
|
|
@ -280,9 +280,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
//
|
//
|
||||||
public void OnRezScript(uint localID, LLUUID itemID, string script)
|
public void OnRezScript(uint localID, LLUUID itemID, string script)
|
||||||
{
|
{
|
||||||
m_ThreadPool.QueueWorkItem(new WorkItemCallback(
|
// m_ThreadPool.QueueWorkItem(new WorkItemCallback(
|
||||||
this.DoOnRezScript), new Object[]
|
// this.DoOnRezScript), new Object[]
|
||||||
{ localID, itemID, script});
|
// { localID, itemID, script});
|
||||||
|
DoOnRezScript(new Object[] { localID, itemID, script});
|
||||||
}
|
}
|
||||||
|
|
||||||
private object DoOnRezScript(object parm)
|
private object DoOnRezScript(object parm)
|
||||||
|
@ -346,15 +347,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
// Create the object record
|
// Create the object record
|
||||||
|
|
||||||
if (!m_PrimObjects.ContainsKey(localID))
|
|
||||||
m_PrimObjects[localID] = new List<LLUUID>();
|
|
||||||
|
|
||||||
if (!m_PrimObjects[localID].Contains(itemID))
|
|
||||||
m_PrimObjects[localID].Add(itemID);
|
|
||||||
|
|
||||||
if (!m_Assemblies.ContainsKey(assetID))
|
|
||||||
m_Assemblies[assetID] = assembly;
|
|
||||||
|
|
||||||
if ((!m_Scripts.ContainsKey(itemID)) ||
|
if ((!m_Scripts.ContainsKey(itemID)) ||
|
||||||
(m_Scripts[itemID].AssetID != assetID))
|
(m_Scripts[itemID].AssetID != assetID))
|
||||||
{
|
{
|
||||||
|
@ -402,6 +394,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
m_Scripts[itemID] = instance;
|
m_Scripts[itemID] = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!m_PrimObjects.ContainsKey(localID))
|
||||||
|
m_PrimObjects[localID] = new List<LLUUID>();
|
||||||
|
|
||||||
|
if(!m_PrimObjects[localID].Contains(itemID))
|
||||||
|
m_PrimObjects[localID].Add(itemID);
|
||||||
|
|
||||||
|
if(!m_Assemblies.ContainsKey(assetID))
|
||||||
|
m_Assemblies[assetID] = assembly;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -653,7 +654,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
XScriptInstance instance = GetInstance(itemID);
|
XScriptInstance instance = GetInstance(itemID);
|
||||||
if (instance != null)
|
if (instance != null)
|
||||||
return instance.GetDetectParams(idx);
|
return instance.GetDetectParams(idx);
|
||||||
return new XDetectParams();
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LLUUID GetDetectID(LLUUID itemID, int idx)
|
public LLUUID GetDetectID(LLUUID itemID, int idx)
|
||||||
|
@ -665,10 +666,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct XDetectParams
|
public class XDetectParams
|
||||||
{
|
{
|
||||||
public LLUUID Key;
|
public LLUUID Key;
|
||||||
public LSL_Types.Vector3 OffsetPos;
|
public LSL_Types.Vector3 OffsetPos;
|
||||||
|
public int LinkNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class XEventParams
|
public class XEventParams
|
||||||
|
@ -886,6 +888,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
if (m_CurrentResult == null)
|
if (m_CurrentResult == null)
|
||||||
m_CurrentResult = m_Engine.QueueEventHandler(this);
|
m_CurrentResult = m_Engine.QueueEventHandler(this);
|
||||||
|
else
|
||||||
|
m_Engine.Log.Error("[XEngine] Tried to start a script that was already queued");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -923,12 +927,22 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
lock (m_EventQueue)
|
lock (m_EventQueue)
|
||||||
{
|
{
|
||||||
if (m_CurrentResult != null)
|
result = m_CurrentResult;
|
||||||
m_CurrentResult.Abort();
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(result == null)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(SmartThreadPool.WaitAll(new IWorkItemResult[] {result}, new TimeSpan((long)10000000), false))
|
||||||
|
{
|
||||||
|
lock(m_EventQueue)
|
||||||
|
{
|
||||||
|
m_CurrentResult = null;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Engine.Log.Error("[XEngine] Failed to reliably stop script");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1109,7 +1123,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
public XDetectParams GetDetectParams(int idx)
|
public XDetectParams GetDetectParams(int idx)
|
||||||
{
|
{
|
||||||
if (idx < 0 || idx >= m_DetectParams.Length)
|
if (idx < 0 || idx >= m_DetectParams.Length)
|
||||||
return new XDetectParams();
|
return null;
|
||||||
|
|
||||||
return m_DetectParams[idx];
|
return m_DetectParams[idx];
|
||||||
}
|
}
|
||||||
|
@ -1307,7 +1321,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
LLUUID.TryParse(det.InnerText,
|
LLUUID.TryParse(det.InnerText,
|
||||||
out uuid);
|
out uuid);
|
||||||
|
|
||||||
XDetectParams d;
|
XDetectParams d = new XDetectParams();
|
||||||
d.Key = uuid;
|
d.Key = uuid;
|
||||||
d.OffsetPos = v;
|
d.OffsetPos = v;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue