diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 775dc91048..d6b90e1097 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs @@ -41,6 +41,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC private Dictionary m_avatars = new Dictionary(); + private Dictionary m_appearanceCache = new Dictionary(); + + private AvatarAppearance GetAppearance(UUID target, Scene scene) + { + if (m_appearanceCache.ContainsKey(target)) + return m_appearanceCache[target]; + + return scene.CommsManager.AvatarService.GetUserAppearance(target); + } + public UUID CreateNPC(string firstname, string lastname,Vector3 position, Scene scene, UUID cloneAppearanceFrom) { NPCAvatar npcAvatar = new NPCAvatar(firstname, lastname, position, scene); @@ -52,7 +62,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC ScenePresence sp; if(scene.TryGetAvatar(npcAvatar.AgentId, out sp)) { - AvatarAppearance x = scene.CommsManager.AvatarService.GetUserAppearance(cloneAppearanceFrom); + AvatarAppearance x = GetAppearance(cloneAppearanceFrom, scene); List wearbyte = new List(); for (int i = 0; i < x.VisualParams.Length; i++)