aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs104
1 files changed, 15 insertions, 89 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f4a812c..8be39a7 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -48,6 +48,7 @@ using OpenSim.Region.Framework.Interfaces;
48using OpenSim.Region.Framework.Scenes; 48using OpenSim.Region.Framework.Scenes;
49using OpenSim.Region.Framework.Scenes.Serialization; 49using OpenSim.Region.Framework.Scenes.Serialization;
50using OpenSim.Region.Framework.Scenes.Animation; 50using OpenSim.Region.Framework.Scenes.Animation;
51using OpenSim.Region.Framework.Scenes.Scripting;
51using OpenSim.Region.Physics.Manager; 52using OpenSim.Region.Physics.Manager;
52using OpenSim.Region.ScriptEngine.Shared; 53using OpenSim.Region.ScriptEngine.Shared;
53using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; 54using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
@@ -423,79 +424,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
423 } 424 }
424 } 425 }
425 426
426 protected UUID InventoryKey(string name, int type)
427 {
428 TaskInventoryItem item = m_host.Inventory.GetInventoryItem(name);
429
430 if (item != null && item.Type == type)
431 return item.AssetID;
432 else
433 return UUID.Zero;
434 }
435
436 /// <summary>
437 /// accepts a valid UUID, -or- a name of an inventory item.
438 /// Returns a valid UUID or UUID.Zero if key invalid and item not found
439 /// in prim inventory.
440 /// </summary>
441 /// <param name="k"></param>
442 /// <returns></returns>
443 protected UUID KeyOrName(string k)
444 {
445 UUID key;
446
447 // if we can parse the string as a key, use it.
448 // else try to locate the name in inventory of object. found returns key,
449 // not found returns UUID.Zero
450 if (!UUID.TryParse(k, out key))
451 {
452 TaskInventoryItem item = m_host.Inventory.GetInventoryItem(k);
453
454 if (item != null)
455 key = item.AssetID;
456 else
457 key = UUID.Zero;
458 }
459
460 return key;
461 }
462
463 /// <summary>
464 /// Return the UUID of the asset matching the specified key or name
465 /// and asset type.
466 /// </summary>
467 /// <param name="k"></param>
468 /// <param name="type"></param>
469 /// <returns></returns>
470 protected UUID KeyOrName(string k, AssetType type)
471 {
472 UUID key;
473
474 if (!UUID.TryParse(k, out key))
475 {
476 TaskInventoryItem item = m_host.Inventory.GetInventoryItem(k);
477 if (item != null && item.Type == (int)type)
478 key = item.AssetID;
479 }
480 else
481 {
482 lock (m_host.TaskInventory)
483 {
484 foreach (KeyValuePair<UUID, TaskInventoryItem> item in m_host.TaskInventory)
485 {
486 if (item.Value.Type == (int)type && item.Value.Name == k)
487 {
488 key = item.Value.ItemID;
489 break;
490 }
491 }
492 }
493 }
494
495
496 return key;
497 }
498
499 //These are the implementations of the various ll-functions used by the LSL scripts. 427 //These are the implementations of the various ll-functions used by the LSL scripts.
500 public LSL_Float llSin(double f) 428 public LSL_Float llSin(double f)
501 { 429 {
@@ -2035,7 +1963,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2035 1963
2036 UUID textureID = new UUID(); 1964 UUID textureID = new UUID();
2037 1965
2038 textureID = InventoryKey(texture, (int)AssetType.Texture); 1966 textureID = ScriptUtils.GetAssetIdFromItemName(m_host, texture, (int)AssetType.Texture);
2039 if (textureID == UUID.Zero) 1967 if (textureID == UUID.Zero)
2040 { 1968 {
2041 if (!UUID.TryParse(texture, out textureID)) 1969 if (!UUID.TryParse(texture, out textureID))
@@ -2751,7 +2679,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2751 if (m_SoundModule != null) 2679 if (m_SoundModule != null)
2752 { 2680 {
2753 m_SoundModule.SendSound(m_host.UUID, 2681 m_SoundModule.SendSound(m_host.UUID,
2754 KeyOrName(sound, AssetType.Sound), volume, false, 0, 2682 ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, false, 0,
2755 0, false, false); 2683 0, false, false);
2756 } 2684 }
2757 } 2685 }
@@ -2761,7 +2689,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2761 m_host.AddScriptLPS(1); 2689 m_host.AddScriptLPS(1);
2762 if (m_SoundModule != null) 2690 if (m_SoundModule != null)
2763 { 2691 {
2764 m_SoundModule.LoopSound(m_host.UUID, KeyOrName(sound), 2692 m_SoundModule.LoopSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound),
2765 volume, 20, false); 2693 volume, 20, false);
2766 } 2694 }
2767 } 2695 }
@@ -2771,7 +2699,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2771 m_host.AddScriptLPS(1); 2699 m_host.AddScriptLPS(1);
2772 if (m_SoundModule != null) 2700 if (m_SoundModule != null)
2773 { 2701 {
2774 m_SoundModule.LoopSound(m_host.UUID, KeyOrName(sound), 2702 m_SoundModule.LoopSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound),
2775 volume, 20, true); 2703 volume, 20, true);
2776 } 2704 }
2777 } 2705 }
@@ -2793,7 +2721,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2793 if (m_SoundModule != null) 2721 if (m_SoundModule != null)
2794 { 2722 {
2795 m_SoundModule.SendSound(m_host.UUID, 2723 m_SoundModule.SendSound(m_host.UUID,
2796 KeyOrName(sound, AssetType.Sound), volume, false, 0, 2724 ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, false, 0,
2797 0, true, false); 2725 0, true, false);
2798 } 2726 }
2799 } 2727 }
@@ -2805,7 +2733,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2805 if (m_SoundModule != null) 2733 if (m_SoundModule != null)
2806 { 2734 {
2807 m_SoundModule.SendSound(m_host.UUID, 2735 m_SoundModule.SendSound(m_host.UUID,
2808 KeyOrName(sound, AssetType.Sound), volume, true, 0, 0, 2736 ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume, true, 0, 0,
2809 false, false); 2737 false, false);
2810 } 2738 }
2811 } 2739 }
@@ -2822,7 +2750,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2822 { 2750 {
2823 m_host.AddScriptLPS(1); 2751 m_host.AddScriptLPS(1);
2824 if (m_SoundModule != null) 2752 if (m_SoundModule != null)
2825 m_SoundModule.PreloadSound(m_host.UUID, KeyOrName(sound), 0); 2753 m_SoundModule.PreloadSound(m_host.UUID, ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound), 0);
2826 ScriptSleep(1000); 2754 ScriptSleep(1000);
2827 } 2755 }
2828 2756
@@ -3699,7 +3627,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3699 if (presence != null) 3627 if (presence != null)
3700 { 3628 {
3701 // Do NOT try to parse UUID, animations cannot be triggered by ID 3629 // Do NOT try to parse UUID, animations cannot be triggered by ID
3702 UUID animID = InventoryKey(anim, (int)AssetType.Animation); 3630 UUID animID = ScriptUtils.GetAssetIdFromItemName(m_host, anim, (int)AssetType.Animation);
3703 if (animID == UUID.Zero) 3631 if (animID == UUID.Zero)
3704 presence.Animator.AddAnimation(anim, m_host.UUID); 3632 presence.Animator.AddAnimation(anim, m_host.UUID);
3705 else 3633 else
@@ -3721,7 +3649,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3721 3649
3722 if (presence != null) 3650 if (presence != null)
3723 { 3651 {
3724 UUID animID = KeyOrName(anim); 3652 UUID animID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, anim);
3725 3653
3726 if (animID == UUID.Zero) 3654 if (animID == UUID.Zero)
3727 presence.Animator.RemoveAnimation(anim); 3655 presence.Animator.RemoveAnimation(anim);
@@ -4717,7 +4645,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4717 4645
4718 private void DoLLTeleport(ScenePresence sp, string destination, Vector3 targetPos, Vector3 targetLookAt) 4646 private void DoLLTeleport(ScenePresence sp, string destination, Vector3 targetPos, Vector3 targetLookAt)
4719 { 4647 {
4720 UUID assetID = KeyOrName(destination); 4648 UUID assetID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, destination);
4721 4649
4722 // The destinaion is not an asset ID and also doesn't name a landmark. 4650 // The destinaion is not an asset ID and also doesn't name a landmark.
4723 // Use it as a sim name 4651 // Use it as a sim name
@@ -4791,7 +4719,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4791 return; 4719 return;
4792 } 4720 }
4793 // TODO: Parameter check logic required. 4721 // TODO: Parameter check logic required.
4794 m_host.CollisionSound = KeyOrName(impact_sound, AssetType.Sound); 4722 m_host.CollisionSound = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, impact_sound, AssetType.Sound);
4795 m_host.CollisionSoundVolume = (float)impact_volume; 4723 m_host.CollisionSoundVolume = (float)impact_volume;
4796 m_host.CollisionSoundType = 1; 4724 m_host.CollisionSoundType = 1;
4797 } 4725 }
@@ -6356,7 +6284,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6356 if (m_SoundModule != null) 6284 if (m_SoundModule != null)
6357 { 6285 {
6358 m_SoundModule.TriggerSoundLimited(m_host.UUID, 6286 m_SoundModule.TriggerSoundLimited(m_host.UUID,
6359 KeyOrName(sound, AssetType.Sound), volume, 6287 ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound), volume,
6360 bottom_south_west, top_north_east); 6288 bottom_south_west, top_north_east);
6361 } 6289 }
6362 } 6290 }
@@ -6827,7 +6755,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6827 break; 6755 break;
6828 6756
6829 case (int)ScriptBaseClass.PSYS_SRC_TEXTURE: 6757 case (int)ScriptBaseClass.PSYS_SRC_TEXTURE:
6830 prules.Texture = KeyOrName(rules.GetLSLStringItem(i + 1)); 6758 prules.Texture = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, rules.GetLSLStringItem(i + 1));
6831 break; 6759 break;
6832 6760
6833 case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE: 6761 case (int)ScriptBaseClass.PSYS_SRC_BURST_RATE:
@@ -7776,9 +7704,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7776 UUID sculptId; 7704 UUID sculptId;
7777 7705
7778 if (!UUID.TryParse(map, out sculptId)) 7706 if (!UUID.TryParse(map, out sculptId))
7779 { 7707 sculptId = ScriptUtils.GetAssetIdFromItemName(m_host, map, (int)AssetType.Texture);
7780 sculptId = InventoryKey(map, (int)AssetType.Texture);
7781 }
7782 7708
7783 if (sculptId == UUID.Zero) 7709 if (sculptId == UUID.Zero)
7784 return; 7710 return;