diff options
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | 28 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs | 4 |
2 files changed, 26 insertions, 6 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index b1066b5..90c4636 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -2130,20 +2130,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2130 | public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, LSL_Key cloneFrom) | 2130 | public LSL_Key osNpcCreate(string firstname, string lastname, LSL_Vector position, LSL_Key cloneFrom) |
2131 | { | 2131 | { |
2132 | CheckThreatLevel(ThreatLevel.High, "osNpcCreate"); | 2132 | CheckThreatLevel(ThreatLevel.High, "osNpcCreate"); |
2133 | //QueueUserWorkItem | ||
2134 | 2133 | ||
2135 | INPCModule module = World.RequestModuleInterface<INPCModule>(); | 2134 | INPCModule module = World.RequestModuleInterface<INPCModule>(); |
2136 | if (module != null) | 2135 | if (module != null) |
2137 | { | 2136 | { |
2138 | ScenePresence clonePresence = World.GetScenePresence(new UUID(cloneFrom.m_string)); | 2137 | AvatarAppearance appearance = null; |
2139 | if (clonePresence == null) | 2138 | |
2139 | UUID cloneId; | ||
2140 | if (UUID.TryParse(cloneFrom, out cloneId)) | ||
2141 | { | ||
2142 | ScenePresence clonePresence = World.GetScenePresence(new UUID(cloneFrom.m_string)); | ||
2143 | if (clonePresence != null) | ||
2144 | appearance = clonePresence.Appearance; | ||
2145 | } | ||
2146 | |||
2147 | if (appearance == null) | ||
2148 | { | ||
2149 | string appearanceSerialized = LoadNotecard(cloneFrom.m_string); | ||
2150 | |||
2151 | if (appearanceSerialized != null) | ||
2152 | { | ||
2153 | OSDMap appearanceOsd = (OSDMap)OSDParser.DeserializeLLSDXml(appearanceSerialized); | ||
2154 | appearance = new AvatarAppearance(); | ||
2155 | appearance.Unpack(appearanceOsd); | ||
2156 | } | ||
2157 | } | ||
2158 | |||
2159 | if (appearance == null) | ||
2140 | return new LSL_Key(UUID.Zero.ToString()); | 2160 | return new LSL_Key(UUID.Zero.ToString()); |
2141 | 2161 | ||
2142 | UUID x = module.CreateNPC(firstname, | 2162 | UUID x = module.CreateNPC(firstname, |
2143 | lastname, | 2163 | lastname, |
2144 | new Vector3((float) position.x, (float) position.y, (float) position.z), | 2164 | new Vector3((float) position.x, (float) position.y, (float) position.z), |
2145 | World, | 2165 | World, |
2146 | clonePresence.Appearance); | 2166 | appearance); |
2147 | 2167 | ||
2148 | return new LSL_Key(x.ToString()); | 2168 | return new LSL_Key(x.ToString()); |
2149 | } | 2169 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs index 85cf507..7573dff 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Tests/OSSL_ApiAppearanceTest.cs | |||
@@ -78,11 +78,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests | |||
78 | /// <summary> | 78 | /// <summary> |
79 | /// Test creation of an NPC where the appearance data comes from a notecard | 79 | /// Test creation of an NPC where the appearance data comes from a notecard |
80 | /// </summary> | 80 | /// </summary> |
81 | //[Test] | 81 | [Test] |
82 | public void TestOsNpcCreateFromNotecard() | 82 | public void TestOsNpcCreateFromNotecard() |
83 | { | 83 | { |
84 | TestHelpers.InMethod(); | 84 | TestHelpers.InMethod(); |
85 | log4net.Config.XmlConfigurator.Configure(); | 85 | // log4net.Config.XmlConfigurator.Configure(); |
86 | 86 | ||
87 | // Store an avatar with a different height from default in a notecard. | 87 | // Store an avatar with a different height from default in a notecard. |
88 | UUID userId = TestHelpers.ParseTail(0x1); | 88 | UUID userId = TestHelpers.ParseTail(0x1); |