aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs9
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs25
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/Tests/NPCModuleTests.cs23
4 files changed, 52 insertions, 9 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 20dff0c..e3e3452 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -151,6 +151,10 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
151 if (face == null) 151 if (face == null)
152 continue; 152 continue;
153 153
154// m_log.DebugFormat(
155// "[AVFACTORY]: Looking for texture {0}, id {1} for {2} {3}",
156// face.TextureID, idx, client.Name, client.AgentId);
157
154 // if the texture is one of the "defaults" then skip it 158 // if the texture is one of the "defaults" then skip it
155 // this should probably be more intelligent (skirt texture doesnt matter 159 // this should probably be more intelligent (skirt texture doesnt matter
156 // if the avatar isnt wearing a skirt) but if any of the main baked 160 // if the avatar isnt wearing a skirt) but if any of the main baked
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 83b761c..1e121d9 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2647,7 +2647,8 @@ namespace OpenSim.Region.Framework.Scenes
2647 /// <param name="avatar"></param> 2647 /// <param name="avatar"></param>
2648 public void SendAppearanceToAgent(ScenePresence avatar) 2648 public void SendAppearanceToAgent(ScenePresence avatar)
2649 { 2649 {
2650// m_log.WarnFormat("[SP] Send appearance from {0} to {1}",m_uuid,avatar.ControllingClient.AgentId); 2650// m_log.DebugFormat(
2651// "[SCENE PRESENCE] Send appearance from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID);
2651 2652
2652 avatar.ControllingClient.SendAppearance( 2653 avatar.ControllingClient.SendAppearance(
2653 m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes()); 2654 m_appearance.Owner, m_appearance.VisualParams, m_appearance.Texture.GetBytes());
@@ -2659,7 +2660,11 @@ namespace OpenSim.Region.Framework.Scenes
2659 public AvatarAppearance Appearance 2660 public AvatarAppearance Appearance
2660 { 2661 {
2661 get { return m_appearance; } 2662 get { return m_appearance; }
2662 set { m_appearance = value; } 2663 set
2664 {
2665 m_appearance = value;
2666// m_log.DebugFormat("[SCENE PRESENCE]: Set appearance for {0} to {1}", Name, value);
2667 }
2663 } 2668 }
2664 2669
2665 #endregion 2670 #endregion
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