diff options
author | Justin Clark-Casey (justincc) | 2011-09-03 01:11:16 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-09-03 01:11:16 +0100 |
commit | 5c1fa968ab954bec9860023dffc8f68baf3c0620 (patch) | |
tree | f5be7264076e9e2815cd05f6a7ba8bac2831330a /OpenSim/Framework | |
parent | Comment out Scene.CleanDroppedAttachments() and calls. (diff) | |
download | opensim-SC_OLD-5c1fa968ab954bec9860023dffc8f68baf3c0620.zip opensim-SC_OLD-5c1fa968ab954bec9860023dffc8f68baf3c0620.tar.gz opensim-SC_OLD-5c1fa968ab954bec9860023dffc8f68baf3c0620.tar.bz2 opensim-SC_OLD-5c1fa968ab954bec9860023dffc8f68baf3c0620.tar.xz |
Stop NPCs losing attachments when the source avatar takes them off.
This was happening because we were using the source avatar's item IDs in the clone appearance.
Switch to using the asset IDs of attachments instead for NPCs.
The InventoryAccessModule and AttachmentModule had to be changed to allow rezzing of an object without an associated inventory item.
Hopefully goes some way towards resolving http://opensimulator.org/mantis/view.php?id=5653
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/AvatarAppearance.cs | 15 | ||||
-rw-r--r-- | OpenSim/Framework/AvatarAttachment.cs | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs index 7c6295d..aed9087 100644 --- a/OpenSim/Framework/AvatarAppearance.cs +++ b/OpenSim/Framework/AvatarAppearance.cs | |||
@@ -433,6 +433,10 @@ namespace OpenSim.Framework | |||
433 | if (attachpoint == 0) | 433 | if (attachpoint == 0) |
434 | return false; | 434 | return false; |
435 | 435 | ||
436 | // m_log.DebugFormat( | ||
437 | // "[AVATAR APPEARANCE]: Setting attachment at {0} with item ID {1}, asset ID {2}", | ||
438 | // attachpoint, item, asset); | ||
439 | |||
436 | if (item == UUID.Zero) | 440 | if (item == UUID.Zero) |
437 | { | 441 | { |
438 | if (m_attachments.ContainsKey(attachpoint)) | 442 | if (m_attachments.ContainsKey(attachpoint)) |
@@ -459,7 +463,7 @@ namespace OpenSim.Framework | |||
459 | } | 463 | } |
460 | else | 464 | else |
461 | { | 465 | { |
462 | ReplaceAttachment(new AvatarAttachment(attachpoint,item,asset)); | 466 | ReplaceAttachment(new AvatarAttachment(attachpoint,item, asset)); |
463 | } | 467 | } |
464 | return true; | 468 | return true; |
465 | } | 469 | } |
@@ -608,7 +612,14 @@ namespace OpenSim.Framework | |||
608 | { | 612 | { |
609 | OSDArray attachs = (OSDArray)(data["attachments"]); | 613 | OSDArray attachs = (OSDArray)(data["attachments"]); |
610 | for (int i = 0; i < attachs.Count; i++) | 614 | for (int i = 0; i < attachs.Count; i++) |
611 | AppendAttachment(new AvatarAttachment((OSDMap)attachs[i])); | 615 | { |
616 | AvatarAttachment att = new AvatarAttachment((OSDMap)attachs[i]); | ||
617 | AppendAttachment(att); | ||
618 | |||
619 | // m_log.DebugFormat( | ||
620 | // "[AVATAR APPEARANCE]: Unpacked attachment itemID {0}, assetID {1}, point {2}", | ||
621 | // att.ItemID, att.AssetID, att.AttachPoint); | ||
622 | } | ||
612 | } | 623 | } |
613 | } | 624 | } |
614 | catch (Exception e) | 625 | catch (Exception e) |
diff --git a/OpenSim/Framework/AvatarAttachment.cs b/OpenSim/Framework/AvatarAttachment.cs index c68d78d..07dd385 100644 --- a/OpenSim/Framework/AvatarAttachment.cs +++ b/OpenSim/Framework/AvatarAttachment.cs | |||
@@ -66,11 +66,11 @@ namespace OpenSim.Framework | |||
66 | return attachdata; | 66 | return attachdata; |
67 | } | 67 | } |
68 | 68 | ||
69 | |||
70 | public void Unpack(OSDMap args) | 69 | public void Unpack(OSDMap args) |
71 | { | 70 | { |
72 | if (args["point"] != null) | 71 | if (args["point"] != null) |
73 | AttachPoint = args["point"].AsInteger(); | 72 | AttachPoint = args["point"].AsInteger(); |
73 | |||
74 | ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero; | 74 | ItemID = (args["item"] != null) ? args["item"].AsUUID() : UUID.Zero; |
75 | AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero; | 75 | AssetID = (args["asset"] != null) ? args["asset"].AsUUID() : UUID.Zero; |
76 | } | 76 | } |