Thank you very much, Kinoc for:
* Impelements llInstantMessage * Reimplements llOwnerSay as llInstantMessage(llGetOWner(),msg). * Try's to better identify the "True Name" of objects in llDetectedName by checking for avatar name, scene Object Part name and entity name. * Uses similar logic in the llSensor and llSensorRepeat functions.0.6.0-stable
parent
c009e2e095
commit
56697133d4
|
@ -40,6 +40,7 @@ using OpenSim.Region.Environment.Interfaces;
|
|||
using OpenSim.Region.Environment.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Common;
|
||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||
using OpenSim.Region.Environment;
|
||||
//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Common
|
||||
|
@ -402,23 +403,43 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
// NotImplemented("llSensorRemove");
|
||||
}
|
||||
|
||||
public string llDetectedName(int number)
|
||||
public string resolveName(LLUUID objecUUID)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
LSL_Types.list SenseList = m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.GetSensorList(m_localID, m_itemID);
|
||||
if ((number>0)&&(number <= SenseList.Length))
|
||||
// try avatar username surname
|
||||
UserProfileData profile = World.CommsManager.UserService.GetUserProfile(objecUUID);
|
||||
if (profile != null)
|
||||
{
|
||||
LLUUID SensedUUID = (LLUUID)SenseList.Data[number];
|
||||
//ScenePresence SensedObject = World.GetScenePresence(SensedUUID);
|
||||
string avatarname = profile.username + " " + profile.surname;
|
||||
return avatarname;
|
||||
}
|
||||
// try an scene object
|
||||
SceneObjectPart SOP = World.GetSceneObjectPart(objecUUID);
|
||||
if (SOP != null)
|
||||
{
|
||||
string objectname = SOP.Name;
|
||||
return objectname;
|
||||
}
|
||||
|
||||
EntityBase SensedObject = null;
|
||||
lock (World.Entities)
|
||||
{
|
||||
World.Entities.TryGetValue(SensedUUID, out SensedObject);
|
||||
World.Entities.TryGetValue(objecUUID, out SensedObject);
|
||||
}
|
||||
|
||||
if (SensedObject == null)
|
||||
return String.Empty;
|
||||
return SensedObject.Name;
|
||||
|
||||
}
|
||||
|
||||
public string llDetectedName(int number)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
LSL_Types.list SenseList = m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.GetSensorList(m_localID, m_itemID);
|
||||
if ((number>=0)&&(number <= SenseList.Length))
|
||||
{
|
||||
LLUUID SensedUUID = (LLUUID)SenseList.Data[number];
|
||||
return resolveName(SensedUUID);
|
||||
}
|
||||
else
|
||||
return String.Empty;
|
||||
|
@ -464,6 +485,7 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
|
||||
public string llDetectedOwner(int number)
|
||||
{
|
||||
// returns UUID of owner of object detected
|
||||
m_host.AddScriptLPS(1);
|
||||
EntityBase SensedObject = entityDetectedKey(number);
|
||||
if (SensedObject ==null)
|
||||
|
@ -1413,15 +1435,46 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
public void llInstantMessage(string user, string message)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
NotImplemented("llInstantMessage");
|
||||
|
||||
// We may be able to use ClientView.SendInstantMessage here, but we need a client instance.
|
||||
// InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent,
|
||||
// but I don't think we have a list of scenes available from here.
|
||||
// (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.)
|
||||
|
||||
// user is a UUID
|
||||
|
||||
// TODO: figure out values for client, fromSession, and imSessionID
|
||||
// client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch());
|
||||
LLUUID friendTransactionID = LLUUID.Random();
|
||||
|
||||
//m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
|
||||
|
||||
GridInstantMessage msg = new GridInstantMessage();
|
||||
msg.fromAgentID = new System.Guid(m_host.UUID.ToString()); // fromAgentID.UUID;
|
||||
msg.fromAgentSession = new System.Guid(friendTransactionID.ToString());// fromAgentSession.UUID;
|
||||
msg.toAgentID = new System.Guid(user); // toAgentID.UUID;
|
||||
msg.imSessionID = new System.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]: Filling Session: " + msg.imSessionID.ToString());
|
||||
msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp;
|
||||
//if (client != null)
|
||||
//{
|
||||
msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// msg.fromAgentName = "(hippos)";// Added for posterity. This means that we can't figure out who sent it
|
||||
//}
|
||||
msg.message = message;
|
||||
msg.dialog = (byte)19; // messgage from script ??? // dialog;
|
||||
msg.fromGroup = false;// fromGroup;
|
||||
msg.offline = (byte)0; //offline;
|
||||
msg.ParentEstateID = 0; //ParentEstateID;
|
||||
msg.Position = new sLLVector3();// new sLLVector3(m_host.AbsolutePosition);
|
||||
msg.RegionID = World.RegionInfo.RegionID.UUID;//RegionID.UUID;
|
||||
msg.binaryBucket = new byte[0];// binaryBucket;
|
||||
World.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
|
||||
// NotImplemented("llInstantMessage");
|
||||
}
|
||||
|
||||
public void llEmail(string address, string subject, string message)
|
||||
|
@ -3733,13 +3786,15 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
|
||||
public void llOwnerSay(string msg)
|
||||
{
|
||||
m_host.AddScriptLPS(1);
|
||||
//m_host.AddScriptLPS(1); // since we reuse llInstantMessage
|
||||
//temp fix so that lsl wiki examples aren't annoying to use to test other functions
|
||||
//should be similar to : llInstantMessage(llGetOwner(),msg)
|
||||
// llGetOwner ==> m_host.ObjectOwner.ToString()
|
||||
World.SimChat(Helpers.StringToField(msg), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
|
||||
IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
||||
wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, 0, m_host.Name, msg);
|
||||
llInstantMessage(m_host.ObjectOwner.ToString(),msg);
|
||||
|
||||
//World.SimChat(Helpers.StringToField(msg), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
|
||||
//IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
||||
//wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, 0, m_host.Name, msg);
|
||||
}
|
||||
|
||||
public void llRequestSimulatorData(string simulator, int data)
|
||||
|
|
|
@ -236,7 +236,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin
|
|||
|
||||
// Right type too, what about the other params , key and name ?
|
||||
bool keep = true;
|
||||
if (ts.arc != Math.PI)
|
||||
if (ts.arc < Math.PI)
|
||||
{
|
||||
// not omni-directional. Can you see it ?
|
||||
// vec forward_dir = llRot2Fwd(llGetRot())
|
||||
|
@ -261,15 +261,40 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin
|
|||
if (ang_obj > ts.arc) keep = false;
|
||||
}
|
||||
|
||||
if (keep && (ts.name.Length > 0) && (ts.name != ent.Name))
|
||||
{
|
||||
keep = false;
|
||||
}
|
||||
|
||||
if (keep && (ts.keyID != null) && (ts.keyID != LLUUID.Zero) && (ts.keyID != ent.UUID))
|
||||
{
|
||||
keep = false;
|
||||
}
|
||||
|
||||
if (keep&& (ts.name.Length > 0))
|
||||
{
|
||||
string avatarname=null;
|
||||
string objectname=null;
|
||||
string entname =ent.Name;
|
||||
|
||||
// try avatar username surname
|
||||
UserProfileData profile = m_CmdManager.m_ScriptEngine.World.CommsManager.UserService.GetUserProfile(ent.UUID);
|
||||
if (profile != null)
|
||||
{
|
||||
avatarname = profile.username + " " + profile.surname;
|
||||
}
|
||||
// try an scene object
|
||||
SceneObjectPart SOP = m_CmdManager.m_ScriptEngine.World.GetSceneObjectPart(ent.UUID);
|
||||
if (SOP != null)
|
||||
{
|
||||
objectname = SOP.Name;
|
||||
}
|
||||
|
||||
|
||||
if ((ts.name != entname) && (ts.name != avatarname) && (ts.name != objectname))
|
||||
{
|
||||
keep = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (keep == true) SensedObjects.Add(ent.UUID);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue