aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorCharles Krinke2008-03-01 00:59:23 +0000
committerCharles Krinke2008-03-01 00:59:23 +0000
commit56697133d406fd7dea90e0cf4088dac611df2e6a (patch)
treee66a865be85be41be78ea8cf3d64b6b775ca66e6
parentFrom: Mike Pitman <pitman@us.ibm.com> (diff)
downloadopensim-SC_OLD-56697133d406fd7dea90e0cf4088dac611df2e6a.zip
opensim-SC_OLD-56697133d406fd7dea90e0cf4088dac611df2e6a.tar.gz
opensim-SC_OLD-56697133d406fd7dea90e0cf4088dac611df2e6a.tar.bz2
opensim-SC_OLD-56697133d406fd7dea90e0cf4088dac611df2e6a.tar.xz
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.
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs89
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs33
2 files changed, 101 insertions, 21 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 7b59d73..78d3a3f 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -40,6 +40,7 @@ using OpenSim.Region.Environment.Interfaces;
40using OpenSim.Region.Environment.Scenes; 40using OpenSim.Region.Environment.Scenes;
41using OpenSim.Region.ScriptEngine.Common; 41using OpenSim.Region.ScriptEngine.Common;
42using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase; 42using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
43using OpenSim.Region.Environment;
43//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL; 44//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL;
44 45
45namespace OpenSim.Region.ScriptEngine.Common 46namespace OpenSim.Region.ScriptEngine.Common
@@ -402,23 +403,43 @@ namespace OpenSim.Region.ScriptEngine.Common
402 // NotImplemented("llSensorRemove"); 403 // NotImplemented("llSensorRemove");
403 } 404 }
404 405
406 public string resolveName(LLUUID objecUUID)
407 {
408 // try avatar username surname
409 UserProfileData profile = World.CommsManager.UserService.GetUserProfile(objecUUID);
410 if (profile != null)
411 {
412 string avatarname = profile.username + " " + profile.surname;
413 return avatarname;
414 }
415 // try an scene object
416 SceneObjectPart SOP = World.GetSceneObjectPart(objecUUID);
417 if (SOP != null)
418 {
419 string objectname = SOP.Name;
420 return objectname;
421 }
422
423 EntityBase SensedObject = null;
424 lock (World.Entities)
425 {
426 World.Entities.TryGetValue(objecUUID, out SensedObject);
427 }
428
429 if (SensedObject == null)
430 return String.Empty;
431 return SensedObject.Name;
432
433 }
434
405 public string llDetectedName(int number) 435 public string llDetectedName(int number)
406 { 436 {
407 m_host.AddScriptLPS(1); 437 m_host.AddScriptLPS(1);
408 LSL_Types.list SenseList = m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.GetSensorList(m_localID, m_itemID); 438 LSL_Types.list SenseList = m_ScriptEngine.m_ASYNCLSLCommandManager.m_SensorRepeat.GetSensorList(m_localID, m_itemID);
409 if ((number>0)&&(number <= SenseList.Length)) 439 if ((number>=0)&&(number <= SenseList.Length))
410 { 440 {
411 LLUUID SensedUUID = (LLUUID)SenseList.Data[number]; 441 LLUUID SensedUUID = (LLUUID)SenseList.Data[number];
412 //ScenePresence SensedObject = World.GetScenePresence(SensedUUID); 442 return resolveName(SensedUUID);
413 EntityBase SensedObject=null;
414 lock (World.Entities)
415 {
416 World.Entities.TryGetValue(SensedUUID, out SensedObject);
417 }
418
419 if (SensedObject == null)
420 return String.Empty;
421 return SensedObject.Name;
422 } 443 }
423 else 444 else
424 return String.Empty; 445 return String.Empty;
@@ -464,6 +485,7 @@ namespace OpenSim.Region.ScriptEngine.Common
464 485
465 public string llDetectedOwner(int number) 486 public string llDetectedOwner(int number)
466 { 487 {
488 // returns UUID of owner of object detected
467 m_host.AddScriptLPS(1); 489 m_host.AddScriptLPS(1);
468 EntityBase SensedObject = entityDetectedKey(number); 490 EntityBase SensedObject = entityDetectedKey(number);
469 if (SensedObject ==null) 491 if (SensedObject ==null)
@@ -1413,16 +1435,47 @@ namespace OpenSim.Region.ScriptEngine.Common
1413 public void llInstantMessage(string user, string message) 1435 public void llInstantMessage(string user, string message)
1414 { 1436 {
1415 m_host.AddScriptLPS(1); 1437 m_host.AddScriptLPS(1);
1416 NotImplemented("llInstantMessage");
1417 1438
1418 // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. 1439 // We may be able to use ClientView.SendInstantMessage here, but we need a client instance.
1419 // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, 1440 // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent,
1420 // but I don't think we have a list of scenes available from here. 1441 // but I don't think we have a list of scenes available from here.
1421 // (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.) 1442 // (We also don't want to duplicate the code in OnInstantMessage if we can avoid it.)
1443
1444 // user is a UUID
1422 1445
1423 // TODO: figure out values for client, fromSession, and imSessionID 1446 // TODO: figure out values for client, fromSession, and imSessionID
1424 // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); 1447 // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch());
1425 } 1448 LLUUID friendTransactionID = LLUUID.Random();
1449
1450 //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID);
1451
1452 GridInstantMessage msg = new GridInstantMessage();
1453 msg.fromAgentID = new System.Guid(m_host.UUID.ToString()); // fromAgentID.UUID;
1454 msg.fromAgentSession = new System.Guid(friendTransactionID.ToString());// fromAgentSession.UUID;
1455 msg.toAgentID = new System.Guid(user); // toAgentID.UUID;
1456 msg.imSessionID = new System.Guid(friendTransactionID.ToString()); // This is the item we're mucking with here
1457 Console.WriteLine("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message);
1458 Console.WriteLine("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString());
1459 msg.timestamp = (uint)Util.UnixTimeSinceEpoch();// timestamp;
1460 //if (client != null)
1461 //{
1462 msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName;
1463 //}
1464 //else
1465 //{
1466 // msg.fromAgentName = "(hippos)";// Added for posterity. This means that we can't figure out who sent it
1467 //}
1468 msg.message = message;
1469 msg.dialog = (byte)19; // messgage from script ??? // dialog;
1470 msg.fromGroup = false;// fromGroup;
1471 msg.offline = (byte)0; //offline;
1472 msg.ParentEstateID = 0; //ParentEstateID;
1473 msg.Position = new sLLVector3();// new sLLVector3(m_host.AbsolutePosition);
1474 msg.RegionID = World.RegionInfo.RegionID.UUID;//RegionID.UUID;
1475 msg.binaryBucket = new byte[0];// binaryBucket;
1476 World.TriggerGridInstantMessage(msg, InstantMessageReceiver.IMModule);
1477 // NotImplemented("llInstantMessage");
1478 }
1426 1479
1427 public void llEmail(string address, string subject, string message) 1480 public void llEmail(string address, string subject, string message)
1428 { 1481 {
@@ -3733,13 +3786,15 @@ namespace OpenSim.Region.ScriptEngine.Common
3733 3786
3734 public void llOwnerSay(string msg) 3787 public void llOwnerSay(string msg)
3735 { 3788 {
3736 m_host.AddScriptLPS(1); 3789 //m_host.AddScriptLPS(1); // since we reuse llInstantMessage
3737 //temp fix so that lsl wiki examples aren't annoying to use to test other functions 3790 //temp fix so that lsl wiki examples aren't annoying to use to test other functions
3738 //should be similar to : llInstantMessage(llGetOwner(),msg) 3791 //should be similar to : llInstantMessage(llGetOwner(),msg)
3739 // llGetOwner ==> m_host.ObjectOwner.ToString() 3792 // llGetOwner ==> m_host.ObjectOwner.ToString()
3740 World.SimChat(Helpers.StringToField(msg), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID); 3793 llInstantMessage(m_host.ObjectOwner.ToString(),msg);
3741 IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); 3794
3742 wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, 0, m_host.Name, msg); 3795 //World.SimChat(Helpers.StringToField(msg), ChatTypeEnum.Say, 0, m_host.AbsolutePosition, m_host.Name, m_host.UUID);
3796 //IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
3797 //wComm.DeliverMessage(m_host.UUID.ToString(), ChatTypeEnum.Say, 0, m_host.Name, msg);
3743 } 3798 }
3744 3799
3745 public void llRequestSimulatorData(string simulator, int data) 3800 public void llRequestSimulatorData(string simulator, int data)
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs
index edf3fde..bff85af 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/SensorRepeat.cs
@@ -236,7 +236,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin
236 236
237 // Right type too, what about the other params , key and name ? 237 // Right type too, what about the other params , key and name ?
238 bool keep = true; 238 bool keep = true;
239 if (ts.arc != Math.PI) 239 if (ts.arc < Math.PI)
240 { 240 {
241 // not omni-directional. Can you see it ? 241 // not omni-directional. Can you see it ?
242 // vec forward_dir = llRot2Fwd(llGetRot()) 242 // vec forward_dir = llRot2Fwd(llGetRot())
@@ -261,15 +261,40 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugin
261 if (ang_obj > ts.arc) keep = false; 261 if (ang_obj > ts.arc) keep = false;
262 } 262 }
263 263
264 if (keep && (ts.name.Length > 0) && (ts.name != ent.Name)) 264
265 if (keep && (ts.keyID != null) && (ts.keyID != LLUUID.Zero) && (ts.keyID != ent.UUID))
265 { 266 {
266 keep = false; 267 keep = false;
267 } 268 }
268 269
269 if (keep && (ts.keyID != null) && (ts.keyID != LLUUID.Zero) && (ts.keyID != ent.UUID)) 270 if (keep&& (ts.name.Length > 0))
270 { 271 {
271 keep = false; 272 string avatarname=null;
273 string objectname=null;
274 string entname =ent.Name;
275
276 // try avatar username surname
277 UserProfileData profile = m_CmdManager.m_ScriptEngine.World.CommsManager.UserService.GetUserProfile(ent.UUID);
278 if (profile != null)
279 {
280 avatarname = profile.username + " " + profile.surname;
281 }
282 // try an scene object
283 SceneObjectPart SOP = m_CmdManager.m_ScriptEngine.World.GetSceneObjectPart(ent.UUID);
284 if (SOP != null)
285 {
286 objectname = SOP.Name;
287 }
288
289
290 if ((ts.name != entname) && (ts.name != avatarname) && (ts.name != objectname))
291 {
292 keep = false;
293 }
294
295
272 } 296 }
297
273 if (keep == true) SensedObjects.Add(ent.UUID); 298 if (keep == true) SensedObjects.Add(ent.UUID);
274 } 299 }
275 } 300 }