aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs96
1 files changed, 92 insertions, 4 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 76183ae..367a5f7 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -34,6 +34,7 @@ using System.Threading;
34using Axiom.Math; 34using Axiom.Math;
35using libsecondlife; 35using libsecondlife;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Framework.Communications;
37using OpenSim.Region.Environment.Interfaces; 38using OpenSim.Region.Environment.Interfaces;
38using OpenSim.Region.Environment.Scenes; 39using OpenSim.Region.Environment.Scenes;
39using OpenSim.Region.ScriptEngine.Common; 40using OpenSim.Region.ScriptEngine.Common;
@@ -898,12 +899,44 @@ namespace OpenSim.Region.ScriptEngine.Common
898 899
899 public void llSound() 900 public void llSound()
900 { 901 {
902 // This function has been deprecated
903 // see http://www.lslwiki.net/lslwiki/wakka.php?wakka=llSound
901 NotImplemented("llSound"); 904 NotImplemented("llSound");
902 } 905 }
903 906
904 public void llPlaySound(string sound, double volume) 907 public void llPlaySound(string sound, double volume)
905 { 908 {
906 NotImplemented("llPlaySound"); 909 if (volume > 1)
910 volume = 1;
911 if (volume < 0)
912 volume = 0;
913
914 LLUUID ownerID = m_host.OwnerID;
915 LLUUID objectID = m_host.UUID;
916 LLUUID soundID = LLUUID.Zero;
917 byte flags = 0;
918
919 if (!LLUUID.TryParse(sound, out soundID))
920 {
921 //Trys to fetch sound id from prim's inventory.
922 //Prim's inventory doesn't support non script items yet
923 SceneObjectPart op = World.GetSceneObjectPart(objectID);
924 foreach (KeyValuePair<LLUUID, TaskInventoryItem> item in op.TaskInventory)
925 {
926 if (item.Value.Name == sound)
927 {
928 soundID = item.Value.ItemID;
929 break;
930 }
931 }
932 }
933
934 List<ScenePresence> avatarts = World.GetAvatars();
935 foreach (ScenePresence p in avatarts)
936 {
937 // TODO: some filtering by distance of avatar
938 p.ControllingClient.SendPlayAttachedSound(soundID, objectID, ownerID, (float)volume, flags);
939 }
907 } 940 }
908 941
909 public void llLoopSound(string sound, double volume) 942 public void llLoopSound(string sound, double volume)
@@ -928,7 +961,38 @@ namespace OpenSim.Region.ScriptEngine.Common
928 961
929 public void llTriggerSound(string sound, double volume) 962 public void llTriggerSound(string sound, double volume)
930 { 963 {
931 NotImplemented("llTriggerSound"); 964 if (volume > 1)
965 volume = 1;
966 if (volume < 0)
967 volume = 0;
968
969 LLUUID ownerID = m_host.OwnerID;
970 LLUUID objectID = m_host.UUID;
971 LLUUID parentID = this.m_host.GetRootPartUUID();
972 LLUUID soundID = LLUUID.Zero;
973 LLVector3 position = this.m_host.AbsolutePosition; // region local
974 ulong regionHandle = World.RegionInfo.RegionHandle;
975
976 if (!LLUUID.TryParse(sound, out soundID))
977 {
978 // search sound file from inventory
979 SceneObjectPart op = World.GetSceneObjectPart(objectID);
980 foreach (KeyValuePair<LLUUID, TaskInventoryItem> item in op.TaskInventory)
981 {
982 if (item.Value.Name == sound)
983 {
984 soundID = item.Value.ItemID;
985 break;
986 }
987 }
988 }
989
990 List<ScenePresence> avatarts = World.GetAvatars();
991 foreach (ScenePresence p in avatarts)
992 {
993 // TODO: some filtering by distance of avatar
994 p.ControllingClient.SendTriggeredSound(soundID, ownerID, objectID, parentID, regionHandle, position, (float)volume);
995 }
932 } 996 }
933 997
934 public void llStopSound() 998 public void llStopSound()
@@ -938,7 +1002,31 @@ namespace OpenSim.Region.ScriptEngine.Common
938 1002
939 public void llPreloadSound(string sound) 1003 public void llPreloadSound(string sound)
940 { 1004 {
941 NotImplemented("llPreloadSound"); 1005 LLUUID ownerID = m_host.OwnerID;
1006 LLUUID objectID = m_host.UUID;
1007 LLUUID soundID = LLUUID.Zero;
1008
1009 if (!LLUUID.TryParse(sound, out soundID))
1010 {
1011 //Trys to fetch sound id from prim's inventory.
1012 //Prim's inventory doesn't support non script items yet
1013 SceneObjectPart op = World.GetSceneObjectPart(objectID);
1014 foreach (KeyValuePair<LLUUID, TaskInventoryItem> item in op.TaskInventory)
1015 {
1016 if (item.Value.Name == sound)
1017 {
1018 soundID = item.Value.ItemID;
1019 break;
1020 }
1021 }
1022 }
1023
1024 List<ScenePresence> avatarts = World.GetAvatars();
1025 foreach (ScenePresence p in avatarts)
1026 {
1027 // TODO: some filtering by distance of avatar
1028 p.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
1029 }
942 } 1030 }
943 1031
944 public string llGetSubString(string src, int start, int end) 1032 public string llGetSubString(string src, int start, int end)
@@ -3241,4 +3329,4 @@ namespace OpenSim.Region.ScriptEngine.Common
3241 throw new Exception("LSL Runtime Error: " + msg); 3329 throw new Exception("LSL Runtime Error: " + msg);
3242 } 3330 }
3243 } 3331 }
3244} \ No newline at end of file 3332}