diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index 9d7b44b..5d72af8 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -301,10 +301,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
301 | 301 | ||
302 | // If we're an NPC then skip all the item checks and manipulations since we don't have an | 302 | // If we're an NPC then skip all the item checks and manipulations since we don't have an |
303 | // inventory right now. | 303 | // inventory right now. |
304 | if (sp.PresenceType == PresenceType.Npc) | 304 | RezSingleAttachmentFromInventoryInternal(sp, sp.PresenceType == PresenceType.Npc ? UUID.Zero : attach.ItemID, attach.AssetID, p | (uint)0x80, null); |
305 | RezSingleAttachmentFromInventoryInternal(sp, UUID.Zero, attach.AssetID, p, null, true); | ||
306 | else | ||
307 | RezSingleAttachmentFromInventory(sp, attach.ItemID, p | (uint)0x80, d); | ||
308 | } | 305 | } |
309 | catch (Exception e) | 306 | catch (Exception e) |
310 | { | 307 | { |
@@ -519,26 +516,21 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
519 | "[ATTACHMENTS MODULE]: RezSingleAttachmentFromInventory to point {0} from item {1} for {2} in {3}", | 516 | "[ATTACHMENTS MODULE]: RezSingleAttachmentFromInventory to point {0} from item {1} for {2} in {3}", |
520 | (AttachmentPoint)AttachmentPt, itemID, sp.Name, m_scene.Name); | 517 | (AttachmentPoint)AttachmentPt, itemID, sp.Name, m_scene.Name); |
521 | 518 | ||
522 | bool append = (AttachmentPt & 0x80) != 0; | 519 | // We check the attachments in the avatar appearance here rather than the objects attached to the |
523 | AttachmentPt &= 0x7f; | 520 | // ScenePresence itself so that we can ignore calls by viewer 2/3 to attach objects on startup. We are |
524 | 521 | // already doing this in ScenePresence.MakeRootAgent(). Simulator-side attaching needs to be done | |
525 | // Viewer 2/3 sometimes asks to re-wear items that are already worn (and show up in it's inventory as such). | 522 | // because pre-outfit folder viewers (most version 1 viewers) require it. |
526 | // This often happens during login - not sure the exact reason. | ||
527 | // For now, we will ignore the request. Unfortunately, this means that we need to dig through all the | ||
528 | // ScenePresence attachments. We can't use the data in AvatarAppearance because that's present at login | ||
529 | // before anything has actually been attached. | ||
530 | bool alreadyOn = false; | 523 | bool alreadyOn = false; |
531 | List<SceneObjectGroup> existingAttachments = sp.GetAttachments(); | 524 | List<AvatarAttachment> existingAttachments = sp.Appearance.GetAttachments(); |
532 | foreach (SceneObjectGroup so in existingAttachments) | 525 | foreach (AvatarAttachment existingAttachment in existingAttachments) |
533 | { | 526 | { |
534 | if (so.FromItemID == itemID) | 527 | if (existingAttachment.ItemID == itemID) |
535 | { | 528 | { |
536 | alreadyOn = true; | 529 | alreadyOn = true; |
537 | break; | 530 | break; |
538 | } | 531 | } |
539 | } | 532 | } |
540 | 533 | ||
541 | // if (sp.Appearance.GetAttachmentForItem(itemID) != null) | ||
542 | if (alreadyOn) | 534 | if (alreadyOn) |
543 | { | 535 | { |
544 | if (DebugLevel > 0) | 536 | if (DebugLevel > 0) |
@@ -549,7 +541,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
549 | return null; | 541 | return null; |
550 | } | 542 | } |
551 | 543 | ||
552 | return RezSingleAttachmentFromInventoryInternal(sp, itemID, UUID.Zero, AttachmentPt, doc, append); | 544 | return RezSingleAttachmentFromInventoryInternal(sp, itemID, UUID.Zero, AttachmentPt, doc); |
553 | } | 545 | } |
554 | 546 | ||
555 | public void RezMultipleAttachmentsFromInventory(IScenePresence sp, List<KeyValuePair<UUID, uint>> rezlist) | 547 | public void RezMultipleAttachmentsFromInventory(IScenePresence sp, List<KeyValuePair<UUID, uint>> rezlist) |
@@ -558,7 +550,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
558 | return; | 550 | return; |
559 | 551 | ||
560 | if (DebugLevel > 0) | 552 | if (DebugLevel > 0) |
561 | m_log.DebugFormat("[ATTACHMENTS MODULE]: Rezzing multiple attachments from inventory for {0}", sp.Name); | 553 | m_log.DebugFormat( |
554 | "[ATTACHMENTS MODULE]: Rezzing {0} attachments from inventory for {1} in {2}", | ||
555 | rezlist.Count, sp.Name, m_scene.Name); | ||
562 | 556 | ||
563 | foreach (KeyValuePair<UUID, uint> rez in rezlist) | 557 | foreach (KeyValuePair<UUID, uint> rez in rezlist) |
564 | { | 558 | { |
@@ -957,11 +951,14 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
957 | } | 951 | } |
958 | 952 | ||
959 | protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal( | 953 | protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal( |
960 | IScenePresence sp, UUID itemID, UUID assetID, uint attachmentPt, XmlDocument doc, bool append) | 954 | IScenePresence sp, UUID itemID, UUID assetID, uint attachmentPt, XmlDocument doc) |
961 | { | 955 | { |
962 | if (m_invAccessModule == null) | 956 | if (m_invAccessModule == null) |
963 | return null; | 957 | return null; |
964 | 958 | ||
959 | bool append = (attachmentPt & 0x80) != 0; | ||
960 | attachmentPt &= 0x7f; | ||
961 | |||
965 | SceneObjectGroup objatt; | 962 | SceneObjectGroup objatt; |
966 | 963 | ||
967 | if (itemID != UUID.Zero) | 964 | if (itemID != UUID.Zero) |