diff options
author | SignpostMarv | 2012-10-26 11:22:00 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-01-03 00:18:33 +0000 |
commit | aa78df4a79e4e357f8424a0163525c3254b2c146 (patch) | |
tree | 5adea9dade9f1c1e823948af38fbe5d004363620 | |
parent | Improving documentation of AttachToAvatar and GetLine methods in LSL_Api.cs b... (diff) | |
download | opensim-SC_OLD-aa78df4a79e4e357f8424a0163525c3254b2c146.zip opensim-SC_OLD-aa78df4a79e4e357f8424a0163525c3254b2c146.tar.gz opensim-SC_OLD-aa78df4a79e4e357f8424a0163525c3254b2c146.tar.bz2 opensim-SC_OLD-aa78df4a79e4e357f8424a0163525c3254b2c146.tar.xz |
Scipt modules get the OpenMetaverse types, so lists passed as arguments to script module functions which then later call LSL_Types.list.GetVector3Item() or LSL_Types.list.GetQuaternionItem() methods would then trigger an InvalidCastException, which is now avoided.
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index fcb98a5..44fdd1a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -631,19 +631,44 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
631 | 631 | ||
632 | public LSL_Types.Vector3 GetVector3Item(int itemIndex) | 632 | public LSL_Types.Vector3 GetVector3Item(int itemIndex) |
633 | { | 633 | { |
634 | if(m_data[itemIndex] is LSL_Types.Vector3) | 634 | if (m_data[itemIndex] is LSL_Types.Vector3) |
635 | { | ||
635 | return (LSL_Types.Vector3)m_data[itemIndex]; | 636 | return (LSL_Types.Vector3)m_data[itemIndex]; |
637 | } | ||
638 | else if(m_data[itemIndex] is OpenMetaverse.Vector3) | ||
639 | { | ||
640 | return new LSL_Types.Vector3( | ||
641 | (OpenMetaverse.Vector3)m_data[itemIndex]); | ||
642 | } | ||
636 | else | 643 | else |
644 | { | ||
637 | throw new InvalidCastException(string.Format( | 645 | throw new InvalidCastException(string.Format( |
638 | "{0} expected but {1} given", | 646 | "{0} expected but {1} given", |
639 | typeof(LSL_Types.Vector3).Name, | 647 | typeof(LSL_Types.Vector3).Name, |
640 | m_data[itemIndex] != null ? | 648 | m_data[itemIndex] != null ? |
641 | m_data[itemIndex].GetType().Name : "null")); | 649 | m_data[itemIndex].GetType().Name : "null")); |
650 | } | ||
642 | } | 651 | } |
643 | 652 | ||
644 | public LSL_Types.Quaternion GetQuaternionItem(int itemIndex) | 653 | public LSL_Types.Quaternion GetQuaternionItem(int itemIndex) |
645 | { | 654 | { |
646 | return (LSL_Types.Quaternion)m_data[itemIndex]; | 655 | if (m_data[itemIndex] is LSL_Types.Quaternion) |
656 | { | ||
657 | return (LSL_Types.Quaternion)m_data[itemIndex]; | ||
658 | } | ||
659 | else if(m_data[itemIndex] is OpenMetaverse.Quaternion) | ||
660 | { | ||
661 | return new LSL_Types.Quaternion( | ||
662 | (OpenMetaverse.Quaternion)m_data[itemIndex]); | ||
663 | } | ||
664 | else | ||
665 | { | ||
666 | throw new InvalidCastException(string.Format( | ||
667 | "{0} expected but {1} given", | ||
668 | typeof(LSL_Types.Quaternion).Name, | ||
669 | m_data[itemIndex] != null ? | ||
670 | m_data[itemIndex].GetType().Name : "null")); | ||
671 | } | ||
647 | } | 672 | } |
648 | 673 | ||
649 | public LSL_Types.key GetKeyItem(int itemIndex) | 674 | public LSL_Types.key GetKeyItem(int itemIndex) |