diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 47 |
1 files changed, 19 insertions, 28 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 8b8ac20..cf188aa 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -481,14 +481,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
481 | // "[ATTACHMENTS MODULE]: Attaching object {0} {1} to {2} point {3} from ground (silent = {4})", | 481 | // "[ATTACHMENTS MODULE]: Attaching object {0} {1} to {2} point {3} from ground (silent = {4})", |
482 | // group.Name, group.LocalId, sp.Name, attachmentPt, silent); | 482 | // group.Name, group.LocalId, sp.Name, attachmentPt, silent); |
483 | 483 | ||
484 | if (sp.GetAttachments().Contains(group)) | ||
485 | { | ||
486 | // m_log.WarnFormat( | ||
487 | // "[ATTACHMENTS MODULE]: Ignoring request to attach {0} {1} to {2} on {3} since it's already attached", | ||
488 | // group.Name, group.LocalId, sp.Name, AttachmentPt); | ||
489 | |||
490 | return false; | ||
491 | } | ||
492 | 484 | ||
493 | if (group.GetSittingAvatarsCount() != 0) | 485 | if (group.GetSittingAvatarsCount() != 0) |
494 | { | 486 | { |
@@ -500,6 +492,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
500 | return false; | 492 | return false; |
501 | } | 493 | } |
502 | 494 | ||
495 | List<SceneObjectGroup> attachments = sp.GetAttachments(attachmentPt); | ||
496 | if (attachments.Contains(group)) | ||
497 | { | ||
498 | // if (DebugLevel > 0) | ||
499 | // m_log.WarnFormat( | ||
500 | // "[ATTACHMENTS MODULE]: Ignoring request to attach {0} {1} to {2} on {3} since it's already attached", | ||
501 | // group.Name, group.LocalId, sp.Name, attachmentPt); | ||
502 | |||
503 | return false; | ||
504 | } | ||
505 | |||
503 | Vector3 attachPos = group.AbsolutePosition; | 506 | Vector3 attachPos = group.AbsolutePosition; |
504 | 507 | ||
505 | // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should | 508 | // TODO: this short circuits multiple attachments functionality in LL viewer 2.1+ and should |
@@ -533,7 +536,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
533 | { | 536 | { |
534 | attachmentPt = (uint)group.RootPart.Shape.LastAttachPoint; | 537 | attachmentPt = (uint)group.RootPart.Shape.LastAttachPoint; |
535 | attachPos = group.RootPart.AttachedPos; | 538 | attachPos = group.RootPart.AttachedPos; |
536 | group.HasGroupChanged = true; | ||
537 | } | 539 | } |
538 | 540 | ||
539 | // if we still didn't find a suitable attachment point....... | 541 | // if we still didn't find a suitable attachment point....... |
@@ -544,18 +546,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
544 | attachPos = Vector3.Zero; | 546 | attachPos = Vector3.Zero; |
545 | } | 547 | } |
546 | 548 | ||
547 | List<SceneObjectGroup> attachments = sp.GetAttachments(attachmentPt); | ||
548 | |||
549 | if (attachments.Contains(group)) | ||
550 | { | ||
551 | if (DebugLevel > 0) | ||
552 | m_log.WarnFormat( | ||
553 | "[ATTACHMENTS MODULE]: Ignoring request to attach {0} {1} to {2} on {3} since it's already attached", | ||
554 | group.Name, group.LocalId, sp.Name, attachmentPt); | ||
555 | |||
556 | return false; | ||
557 | } | ||
558 | |||
559 | // If we already have 5, remove the oldest until only 4 are left. Skip over temp ones | 549 | // If we already have 5, remove the oldest until only 4 are left. Skip over temp ones |
560 | while (attachments.Count >= 5) | 550 | while (attachments.Count >= 5) |
561 | { | 551 | { |
@@ -579,7 +569,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
579 | lock (sp.AttachmentsSyncLock) | 569 | lock (sp.AttachmentsSyncLock) |
580 | { | 570 | { |
581 | group.AttachmentPoint = attachmentPt; | 571 | group.AttachmentPoint = attachmentPt; |
582 | group.AbsolutePosition = attachPos; | 572 | group.RootPart.AttachedPos = attachPos; |
583 | 573 | ||
584 | if (addToInventory && sp.PresenceType != PresenceType.Npc) | 574 | if (addToInventory && sp.PresenceType != PresenceType.Npc) |
585 | UpdateUserInventoryWithAttachment(sp, group, attachmentPt, append); | 575 | UpdateUserInventoryWithAttachment(sp, group, attachmentPt, append); |
@@ -956,7 +946,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
956 | m_scene.DeleteFromStorage(so.UUID); | 946 | m_scene.DeleteFromStorage(so.UUID); |
957 | m_scene.EventManager.TriggerParcelPrimCountTainted(); | 947 | m_scene.EventManager.TriggerParcelPrimCountTainted(); |
958 | 948 | ||
959 | so.AttachedAvatar = sp.UUID; | ||
960 | 949 | ||
961 | foreach (SceneObjectPart part in so.Parts) | 950 | foreach (SceneObjectPart part in so.Parts) |
962 | { | 951 | { |
@@ -969,11 +958,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
969 | } | 958 | } |
970 | } | 959 | } |
971 | 960 | ||
972 | so.AbsolutePosition = attachOffset; | ||
973 | so.RootPart.AttachedPos = attachOffset; | ||
974 | so.IsAttachment = true; | ||
975 | so.RootPart.SetParentLocalId(sp.LocalId); | 961 | so.RootPart.SetParentLocalId(sp.LocalId); |
962 | so.AttachedAvatar = sp.UUID; | ||
976 | so.AttachmentPoint = attachmentpoint; | 963 | so.AttachmentPoint = attachmentpoint; |
964 | so.RootPart.AttachedPos = attachOffset; | ||
965 | so.AbsolutePosition = attachOffset; | ||
966 | so.IsAttachment = true; | ||
977 | 967 | ||
978 | sp.AddAttachment(so); | 968 | sp.AddAttachment(so); |
979 | 969 | ||
@@ -1322,7 +1312,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
1322 | if (part == null) | 1312 | if (part == null) |
1323 | return; | 1313 | return; |
1324 | 1314 | ||
1325 | if (!m_scene.Permissions.CanTakeObject(part.UUID, remoteClient.AgentId)) | 1315 | SceneObjectGroup group = part.ParentGroup; |
1316 | |||
1317 | if (!m_scene.Permissions.CanTakeObject(group, sp)) | ||
1326 | { | 1318 | { |
1327 | remoteClient.SendAgentAlertMessage( | 1319 | remoteClient.SendAgentAlertMessage( |
1328 | "You don't have sufficient permissions to attach this object", false); | 1320 | "You don't have sufficient permissions to attach this object", false); |
@@ -1334,7 +1326,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
1334 | AttachmentPt &= 0x7f; | 1326 | AttachmentPt &= 0x7f; |
1335 | 1327 | ||
1336 | // Calls attach with a Zero position | 1328 | // Calls attach with a Zero position |
1337 | SceneObjectGroup group = part.ParentGroup; | ||
1338 | if (AttachObject(sp, group , AttachmentPt, false, true, append)) | 1329 | if (AttachObject(sp, group , AttachmentPt, false, true, append)) |
1339 | { | 1330 | { |
1340 | if (DebugLevel > 0) | 1331 | if (DebugLevel > 0) |