aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/World
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/World')
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs25
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs23
2 files changed, 41 insertions, 7 deletions
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
index 3cdd06d..64f82c9 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs
@@ -59,14 +59,21 @@ namespace OpenSim.Region.OptionalModules.World.NPC
59 if (m_appearanceCache.ContainsKey(target)) 59 if (m_appearanceCache.ContainsKey(target))
60 return m_appearanceCache[target]; 60 return m_appearanceCache[target];
61 61
62 AvatarAppearance appearance = scene.AvatarService.GetAppearance(target); 62 ScenePresence originalPresence = scene.GetScenePresence(target);
63 if (appearance != null) 63
64 if (originalPresence != null)
64 { 65 {
65 m_appearanceCache.Add(target, appearance); 66 AvatarAppearance originalAppearance = originalPresence.Appearance;
66 return appearance; 67 m_appearanceCache.Add(target, originalAppearance);
68 return originalAppearance;
67 } 69 }
70 else
71 {
72 m_log.DebugFormat(
73 "[NPC MODULE]: Avatar {0} is not in the scene for us to grab baked textures from them. Using defaults.", target);
68 74
69 return new AvatarAppearance(); 75 return new AvatarAppearance();
76 }
70 } 77 }
71 78
72 public UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom) 79 public UUID CreateNPC(string firstname, string lastname, Vector3 position, Scene scene, UUID cloneAppearanceFrom)
@@ -86,8 +93,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC
86 93
87 AvatarAppearance originalAppearance = GetAppearance(cloneAppearanceFrom, scene); 94 AvatarAppearance originalAppearance = GetAppearance(cloneAppearanceFrom, scene);
88 AvatarAppearance npcAppearance = new AvatarAppearance(originalAppearance, true); 95 AvatarAppearance npcAppearance = new AvatarAppearance(originalAppearance, true);
96 npcAppearance.Owner = acd.AgentID;
89 acd.Appearance = npcAppearance; 97 acd.Appearance = npcAppearance;
90 98
99// for (int i = 0; i < acd.Appearance.Texture.FaceTextures.Length; i++)
100// {
101// m_log.DebugFormat(
102// "[NPC MODULE]: NPC avatar {0} has texture id {1} : {2}",
103// acd.AgentID, i, acd.Appearance.Texture.FaceTextures[i]);
104// }
105
91 scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd); 106 scene.AuthenticateHandler.AddNewCircuit(npcAvatar.CircuitCode, acd);
92 scene.AddNewClient(npcAvatar); 107 scene.AddNewClient(npcAvatar);
93 108
diff --git a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
index 899e721..bc151ed 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs
@@ -27,11 +27,13 @@
27 27
28using System; 28using System;
29using System.Reflection; 29using System.Reflection;
30using log4net;
30using Nini.Config; 31using Nini.Config;
31using NUnit.Framework; 32using NUnit.Framework;
32using OpenMetaverse; 33using OpenMetaverse;
33using OpenSim.Framework; 34using OpenSim.Framework;
34using OpenSim.Framework.Communications; 35using OpenSim.Framework.Communications;
36using OpenSim.Region.CoreModules.Avatar.AvatarFactory;
35using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar; 37using OpenSim.Region.CoreModules.ServiceConnectorsOut.Avatar;
36using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes; 39using OpenSim.Region.Framework.Scenes;
@@ -58,14 +60,31 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
58 config.Configs["AvatarService"].Set("LocalServiceModule", "OpenSim.Services.AvatarService.dll:AvatarService"); 60 config.Configs["AvatarService"].Set("LocalServiceModule", "OpenSim.Services.AvatarService.dll:AvatarService");
59 config.Configs["AvatarService"].Set("StorageProvider", "OpenSim.Data.Null.dll"); 61 config.Configs["AvatarService"].Set("StorageProvider", "OpenSim.Data.Null.dll");
60 62
63 AvatarFactoryModule afm = new AvatarFactoryModule();
61 TestScene scene = SceneSetupHelpers.SetupScene(); 64 TestScene scene = SceneSetupHelpers.SetupScene();
62 SceneSetupHelpers.SetupSceneModules(scene, config, new NPCModule(), new LocalAvatarServicesConnector()); 65 SceneSetupHelpers.SetupSceneModules(scene, config, afm, new NPCModule(), new LocalAvatarServicesConnector());
66 TestClient originalClient = SceneSetupHelpers.AddClient(scene, TestHelper.ParseTail(0x1));
67// ScenePresence originalAvatar = scene.GetScenePresence(originalClient.AgentId);
68
69 // 8 is the index of the first baked texture in AvatarAppearance
70 UUID originalFace8TextureId = TestHelper.ParseTail(0x10);
71 Primitive.TextureEntry originalTe = new Primitive.TextureEntry(UUID.Zero);
72 Primitive.TextureEntryFace originalTef = originalTe.CreateFace(8);
73 originalTef.TextureID = originalFace8TextureId;
74
75 // We also need to add the texture to the asset service, otherwise the AvatarFactoryModule will tell
76 // ScenePresence.SendInitialData() to reset our entire appearance.
77 scene.AssetService.Store(AssetHelpers.CreateAsset(originalFace8TextureId));
78
79 afm.SetAppearance(originalClient, originalTe, null);
63 80
64 INPCModule npcModule = scene.RequestModuleInterface<INPCModule>(); 81 INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
65 UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), scene, UUID.Zero); 82 UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), scene, originalClient.AgentId);
66 83
67 ScenePresence npc = scene.GetScenePresence(npcId); 84 ScenePresence npc = scene.GetScenePresence(npcId);
85
68 Assert.That(npc, Is.Not.Null); 86 Assert.That(npc, Is.Not.Null);
87 Assert.That(npc.Appearance.Texture.FaceTextures[8].TextureID, Is.EqualTo(originalFace8TextureId));
69 } 88 }
70 } 89 }
71} \ No newline at end of file 90} \ No newline at end of file