diff options
3 files changed, 56 insertions, 37 deletions
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs index f0e446f..670794d 100644 --- a/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs +++ b/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs | |||
@@ -178,6 +178,51 @@ namespace OpenSim.Region.CoreModules.World.Sound | |||
178 | }); | 178 | }); |
179 | } | 179 | } |
180 | 180 | ||
181 | public virtual void StopSound(UUID objectID) | ||
182 | { | ||
183 | SceneObjectPart m_host; | ||
184 | if (!m_scene.TryGetSceneObjectPart(objectID, out m_host)) | ||
185 | return; | ||
186 | |||
187 | m_host.AdjustSoundGain(0); | ||
188 | // Xantor 20080528: Clear prim data of sound instead | ||
189 | if (m_host.ParentGroup.LoopSoundSlavePrims.Contains(m_host)) | ||
190 | { | ||
191 | if (m_host.ParentGroup.LoopSoundMasterPrim == m_host) | ||
192 | { | ||
193 | foreach (SceneObjectPart part in m_host.ParentGroup.LoopSoundSlavePrims) | ||
194 | { | ||
195 | part.Sound = UUID.Zero; | ||
196 | part.SoundGain = 0; | ||
197 | part.SoundFlags = 0; | ||
198 | part.SoundRadius = 0; | ||
199 | part.ScheduleFullUpdate(); | ||
200 | part.SendFullUpdateToAllClients(); | ||
201 | } | ||
202 | m_host.ParentGroup.LoopSoundMasterPrim = null; | ||
203 | m_host.ParentGroup.LoopSoundSlavePrims.Clear(); | ||
204 | } | ||
205 | else | ||
206 | { | ||
207 | m_host.Sound = UUID.Zero; | ||
208 | m_host.SoundGain = 0; | ||
209 | m_host.SoundFlags = 0; | ||
210 | m_host.SoundRadius = 0; | ||
211 | m_host.ScheduleFullUpdate(); | ||
212 | m_host.SendFullUpdateToAllClients(); | ||
213 | } | ||
214 | } | ||
215 | else | ||
216 | { | ||
217 | m_host.Sound = UUID.Zero; | ||
218 | m_host.SoundGain = 0; | ||
219 | m_host.SoundFlags = 0; | ||
220 | m_host.SoundRadius = 0; | ||
221 | m_host.ScheduleFullUpdate(); | ||
222 | m_host.SendFullUpdateToAllClients(); | ||
223 | } | ||
224 | } | ||
225 | |||
181 | #endregion | 226 | #endregion |
182 | } | 227 | } |
183 | } | 228 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs index 6930d78..45219ed 100644 --- a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs +++ b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs | |||
@@ -68,5 +68,11 @@ namespace OpenSim.Region.Framework.Interfaces | |||
68 | void TriggerSound( | 68 | void TriggerSound( |
69 | UUID soundId, UUID ownerID, UUID objectID, UUID parentID, | 69 | UUID soundId, UUID ownerID, UUID objectID, UUID parentID, |
70 | double gain, Vector3 position, UInt64 handle, float radius); | 70 | double gain, Vector3 position, UInt64 handle, float radius); |
71 | |||
72 | /// <summary> | ||
73 | /// Stop sounds eminating from an object. | ||
74 | /// </summary> | ||
75 | /// <param name="objectID">Sound source ID</param> | ||
76 | void StopSound(UUID objectID); | ||
71 | } | 77 | } |
72 | } \ No newline at end of file | 78 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 7fa01c1..25be3ff 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -107,6 +107,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
107 | protected IUrlModule m_UrlModule = null; | 107 | protected IUrlModule m_UrlModule = null; |
108 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>(); | 108 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>(); |
109 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. | 109 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. |
110 | protected ISoundModule m_SoundModule = null; | ||
110 | 111 | ||
111 | public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item) | 112 | public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item) |
112 | { | 113 | { |
@@ -119,6 +120,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
119 | m_TransferModule = | 120 | m_TransferModule = |
120 | m_ScriptEngine.World.RequestModuleInterface<IMessageTransferModule>(); | 121 | m_ScriptEngine.World.RequestModuleInterface<IMessageTransferModule>(); |
121 | m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>(); | 122 | m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>(); |
123 | m_SoundModule = m_ScriptEngine.World.RequestModuleInterface<ISoundModule>(); | ||
122 | 124 | ||
123 | AsyncCommands = new AsyncCommandManager(ScriptEngine); | 125 | AsyncCommands = new AsyncCommandManager(ScriptEngine); |
124 | } | 126 | } |
@@ -2451,43 +2453,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2451 | public void llStopSound() | 2453 | public void llStopSound() |
2452 | { | 2454 | { |
2453 | m_host.AddScriptLPS(1); | 2455 | m_host.AddScriptLPS(1); |
2454 | m_host.AdjustSoundGain(0); | 2456 | |
2455 | // Xantor 20080528: Clear prim data of sound instead | 2457 | if (m_SoundModule != null) |
2456 | if (m_host.ParentGroup.LoopSoundSlavePrims.Contains(m_host)) | 2458 | m_SoundModule.StopSound(m_host.UUID); |
2457 | { | ||
2458 | if (m_host.ParentGroup.LoopSoundMasterPrim == m_host) | ||
2459 | { | ||
2460 | foreach (SceneObjectPart part in m_host.ParentGroup.LoopSoundSlavePrims) | ||
2461 | { | ||
2462 | part.Sound = UUID.Zero; | ||
2463 | part.SoundGain = 0; | ||
2464 | part.SoundFlags = 0; | ||
2465 | part.SoundRadius = 0; | ||
2466 | part.ScheduleFullUpdate(); | ||
2467 | part.SendFullUpdateToAllClients(); | ||
2468 | } | ||
2469 | m_host.ParentGroup.LoopSoundMasterPrim = null; | ||
2470 | m_host.ParentGroup.LoopSoundSlavePrims.Clear(); | ||
2471 | } | ||
2472 | else | ||
2473 | { | ||
2474 | m_host.Sound = UUID.Zero; | ||
2475 | m_host.SoundGain = 0; | ||
2476 | m_host.SoundFlags = 0; | ||
2477 | m_host.SoundRadius = 0; | ||
2478 | m_host.ScheduleFullUpdate(); | ||
2479 | m_host.SendFullUpdateToAllClients(); | ||
2480 | } | ||
2481 | } | ||
2482 | else | ||
2483 | { | ||
2484 | m_host.Sound = UUID.Zero; | ||
2485 | m_host.SoundGain = 0; | ||
2486 | m_host.SoundFlags = 0; | ||
2487 | m_host.SoundRadius = 0; | ||
2488 | m_host.ScheduleFullUpdate(); | ||
2489 | m_host.SendFullUpdateToAllClients(); | ||
2490 | } | ||
2491 | } | 2459 | } |
2492 | 2460 | ||
2493 | public void llPreloadSound(string sound) | 2461 | public void llPreloadSound(string sound) |