From 380962d3594b9a45625889975609ebf5dc4b3683 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 16 Sep 2012 16:45:57 -0700 Subject: HG2.0: Generalized the allowed HG appearances to be more than 1. --- .../EntityTransfer/HGEntityTransferModule.cs | 90 ++++++++++++++-------- 1 file changed, 59 insertions(+), 31 deletions(-) (limited to 'OpenSim/Region/CoreModules/Framework') diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index f3c5873..0b386d3 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -56,41 +56,54 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer protected bool m_RestrictAppearanceAbroad; protected string m_AccountName; - protected AvatarAppearance m_ExportedAppearance; + protected List m_ExportedAppearances; + protected List m_Attachs; - protected AvatarAppearance ExportedAppearance + protected List ExportedAppearance { get { - if (m_ExportedAppearance != null) - return m_ExportedAppearance; + if (m_ExportedAppearances != null) + return m_ExportedAppearances; - string[] parts = m_AccountName.Split(); - if (parts.Length != 2) - { - m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Wrong user account name format {0}. Specify 'First Last'", m_AccountName); - return null; - } - UserAccount account = Scene.UserAccountService.GetUserAccount(UUID.Zero, parts[0], parts[1]); - if (account == null) - { - m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unknown account {0}", m_AccountName); - return null; - } - m_ExportedAppearance = Scene.AvatarService.GetAppearance(account.PrincipalID); - if (m_ExportedAppearance != null) - m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Successfully retrieved appearance for {0}", m_AccountName); + m_ExportedAppearances = new List(); + m_Attachs = new List(); + + string[] names = m_AccountName.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - foreach (AvatarAttachment att in m_ExportedAppearance.GetAttachments()) + foreach (string name in names) { - InventoryItemBase item = new InventoryItemBase(att.ItemID, account.PrincipalID); - item = Scene.InventoryService.GetItem(item); - if (item != null) - m_ExportedAppearance.SetAttachment(att.AttachPoint, att.ItemID, item.AssetID); - else - m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to retrieve item {0} from inventory", att.ItemID); + string[] parts = name.Trim().Split(); + if (parts.Length != 2) + { + m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Wrong user account name format {0}. Specify 'First Last'", name); + return null; + } + UserAccount account = Scene.UserAccountService.GetUserAccount(UUID.Zero, parts[0], parts[1]); + if (account == null) + { + m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unknown account {0}", m_AccountName); + return null; + } + AvatarAppearance a = Scene.AvatarService.GetAppearance(account.PrincipalID); + if (a != null) + m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Successfully retrieved appearance for {0}", name); + + foreach (AvatarAttachment att in a.GetAttachments()) + { + InventoryItemBase item = new InventoryItemBase(att.ItemID, account.PrincipalID); + item = Scene.InventoryService.GetItem(item); + if (item != null) + a.SetAttachment(att.AttachPoint, att.ItemID, item.AssetID); + else + m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to retrieve item {0} from inventory {1}", att.ItemID, name); + } + + m_ExportedAppearances.Add(a); + m_Attachs.AddRange(a.GetAttachments()); } - return m_ExportedAppearance; + + return m_ExportedAppearances; } } @@ -270,13 +283,29 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer if (sp.Appearance.Wearables[i] == null) continue; - if (ExportedAppearance.Wearables[i] == null) + bool found = false; + foreach (AvatarAppearance a in ExportedAppearance) + if (a.Wearables[i] != null) + { + found = true; + break; + } + + if (!found) { m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Wearable not allowed to go outside {0}", i); return false; } - if (sp.Appearance.Wearables[i][j].AssetID != ExportedAppearance.Wearables[i][j].AssetID) + found = false; + foreach (AvatarAppearance a in ExportedAppearance) + if (sp.Appearance.Wearables[i][j].AssetID == a.Wearables[i][j].AssetID) + { + found = true; + break; + } + + if (!found) { m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: Wearable not allowed to go outside {0}", i); return false; @@ -285,11 +314,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer } // Check attachments - foreach (AvatarAttachment att in sp.Appearance.GetAttachments()) { bool found = false; - foreach (AvatarAttachment att2 in ExportedAppearance.GetAttachments()) + foreach (AvatarAttachment att2 in m_Attachs) { if (att2.AssetID == att.AssetID) { -- cgit v1.1