diff options
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index 64dc2e2..7bfe27b 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs | |||
@@ -93,7 +93,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
93 | private const int AGENT = 1; | 93 | private const int AGENT = 1; |
94 | private const int AGENT_BY_USERNAME = 0x10; | 94 | private const int AGENT_BY_USERNAME = 0x10; |
95 | private const int NPC = 0x20; | 95 | private const int NPC = 0x20; |
96 | private const int OS_NPC = 0x01000000; | ||
97 | private const int ACTIVE = 2; | 96 | private const int ACTIVE = 2; |
98 | private const int PASSIVE = 4; | 97 | private const int PASSIVE = 4; |
99 | private const int SCRIPTED = 8; | 98 | private const int SCRIPTED = 8; |
@@ -240,7 +239,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
240 | List<SensedEntity> sensedEntities = new List<SensedEntity>(); | 239 | List<SensedEntity> sensedEntities = new List<SensedEntity>(); |
241 | 240 | ||
242 | // Is the sensor type is AGENT and not SCRIPTED then include agents | 241 | // Is the sensor type is AGENT and not SCRIPTED then include agents |
243 | if ((ts.type & (AGENT | AGENT_BY_USERNAME | NPC | OS_NPC)) != 0 && (ts.type & SCRIPTED) == 0) | 242 | if ((ts.type & (AGENT | AGENT_BY_USERNAME | NPC)) != 0 && (ts.type & SCRIPTED) == 0) |
244 | { | 243 | { |
245 | sensedEntities.AddRange(doAgentSensor(ts)); | 244 | sensedEntities.AddRange(doAgentSensor(ts)); |
246 | } | 245 | } |
@@ -339,7 +338,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
339 | float dy; | 338 | float dy; |
340 | float dz; | 339 | float dz; |
341 | 340 | ||
342 | Quaternion q = SensePoint.GetWorldRotation(); | 341 | // Quaternion q = SensePoint.RotationOffset; |
342 | Quaternion q = SensePoint.GetWorldRotation(); // non-attached prim Sensor *always* uses World rotation! | ||
343 | if (SensePoint.ParentGroup.IsAttachment) | 343 | if (SensePoint.ParentGroup.IsAttachment) |
344 | { | 344 | { |
345 | // In attachments, rotate the sensor cone with the | 345 | // In attachments, rotate the sensor cone with the |
@@ -358,7 +358,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
358 | if (avatar == null) | 358 | if (avatar == null) |
359 | return sensedEntities; | 359 | return sensedEntities; |
360 | 360 | ||
361 | q = avatar.GetWorldRotation() * q; | 361 | fromRegionPos = avatar.AbsolutePosition; |
362 | q = avatar.Rotation; | ||
362 | } | 363 | } |
363 | 364 | ||
364 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q); | 365 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q); |
@@ -402,7 +403,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
402 | objtype = 0; | 403 | objtype = 0; |
403 | 404 | ||
404 | part = ((SceneObjectGroup)ent).RootPart; | 405 | part = ((SceneObjectGroup)ent).RootPart; |
405 | if (part.ParentGroup.AttachmentPoint != 0) // Attached so ignore | 406 | if (part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.Tree && |
407 | part.ParentGroup.RootPart.Shape.PCode != (byte)PCode.NewTree && | ||
408 | part.ParentGroup.AttachmentPoint != 0) // Attached so ignore | ||
406 | continue; | 409 | continue; |
407 | 410 | ||
408 | if (part.Inventory.ContainsScripts()) | 411 | if (part.Inventory.ContainsScripts()) |
@@ -489,8 +492,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
489 | // Don't proceed if the avatar for this attachment has since been removed from the scene. | 492 | // Don't proceed if the avatar for this attachment has since been removed from the scene. |
490 | if (avatar == null) | 493 | if (avatar == null) |
491 | return sensedEntities; | 494 | return sensedEntities; |
492 | 495 | fromRegionPos = avatar.AbsolutePosition; | |
493 | q = avatar.GetWorldRotation() * q; | 496 | q = avatar.Rotation; |
494 | } | 497 | } |
495 | 498 | ||
496 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q); | 499 | LSL_Types.Quaternion r = new LSL_Types.Quaternion(q); |
@@ -506,7 +509,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
506 | // "[SENSOR REPEAT]: Inspecting scene presence {0}, type {1} on sensor sweep for {2}, type {3}", | 509 | // "[SENSOR REPEAT]: Inspecting scene presence {0}, type {1} on sensor sweep for {2}, type {3}", |
507 | // presence.Name, presence.PresenceType, ts.name, ts.type); | 510 | // presence.Name, presence.PresenceType, ts.name, ts.type); |
508 | 511 | ||
509 | if ((ts.type & NPC) == 0 && (ts.type & OS_NPC) == 0 && presence.PresenceType == PresenceType.Npc) | 512 | if ((ts.type & NPC) == 0 && presence.PresenceType == PresenceType.Npc) |
510 | { | 513 | { |
511 | INPC npcData = m_npcModule.GetNPC(presence.UUID, presence.Scene); | 514 | INPC npcData = m_npcModule.GetNPC(presence.UUID, presence.Scene); |
512 | if (npcData == null || !npcData.SenseAsAgent) | 515 | if (npcData == null || !npcData.SenseAsAgent) |
@@ -546,7 +549,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
546 | return; | 549 | return; |
547 | 550 | ||
548 | toRegionPos = presence.AbsolutePosition; | 551 | toRegionPos = presence.AbsolutePosition; |
549 | dis = Math.Abs(Util.GetDistanceTo(toRegionPos, fromRegionPos)); | 552 | dis = Util.GetDistanceTo(toRegionPos, fromRegionPos); |
553 | if (presence.IsSatOnObject && presence.ParentPart != null && | ||
554 | presence.ParentPart.ParentGroup != null && | ||
555 | presence.ParentPart.ParentGroup.RootPart != null) | ||
556 | { | ||
557 | Vector3 rpos = presence.ParentPart.ParentGroup.RootPart.AbsolutePosition; | ||
558 | double dis2 = Util.GetDistanceTo(rpos, fromRegionPos); | ||
559 | if (dis > dis2) | ||
560 | dis = dis2; | ||
561 | } | ||
550 | 562 | ||
551 | // Disabled for now since all osNpc* methods check for appropriate ownership permission. | 563 | // Disabled for now since all osNpc* methods check for appropriate ownership permission. |
552 | // Perhaps could be re-enabled as an NPC setting at some point since being able to make NPCs not | 564 | // Perhaps could be re-enabled as an NPC setting at some point since being able to make NPCs not |
@@ -706,4 +718,4 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins | |||
706 | return retList; | 718 | return retList; |
707 | } | 719 | } |
708 | } | 720 | } |
709 | } \ No newline at end of file | 721 | } |