aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs89
1 files changed, 84 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index e91e73c..4e25ff8 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -3821,8 +3821,75 @@ namespace OpenSim.Region.ScriptEngine.Common
3821 public string llGetNotecardLine(string name, int line) 3821 public string llGetNotecardLine(string name, int line)
3822 { 3822 {
3823 m_host.AddScriptLPS(1); 3823 m_host.AddScriptLPS(1);
3824 NotImplemented("llGetNotecardLine"); 3824
3825 return String.Empty; 3825 // TODO: this script function should actually return
3826 // the requested notecard line via the dataserver event
3827 // once it is implemented - krtaylor
3828
3829 String[] notecardLines = GetNotecardLines(name);
3830 if (!String.IsNullOrEmpty(notecardLines[0]))
3831 {
3832 return notecardLines[line];
3833 }
3834 else
3835 {
3836 return String.Empty;
3837 }
3838 }
3839
3840 private String[] GetNotecardLines(string name)
3841 {
3842 bool found = false;
3843 int notecardIndex = 0;
3844 String[] notecardLines = { "0" };
3845 notecardLines[0] = String.Empty;
3846
3847 foreach (KeyValuePair<LLUUID, TaskInventoryItem> inv in m_host.TaskInventory)
3848 {
3849 if ((inv.Value.Name == name) && (inv.Value.InvType == (int)InventoryType.Notecard))
3850 {
3851 // OK, it has the right name and it is a notecard
3852 // so get the asset that contains the notecard raw data
3853 // and convert it into a string
3854 AssetBase notecardAsset = World.AssetCache.GetAsset(inv.Value.AssetID, false);
3855 String dataString = System.Text.Encoding.ASCII.GetString(notecardAsset.Data);
3856
3857 if (!String.IsNullOrEmpty(dataString))
3858 {
3859 // good, we have the notecard data as a string
3860 // now parse the text lines using the Linden Text delimiters
3861 notecardIndex = dataString.IndexOf("}\n");
3862 if (notecardIndex > 0)
3863 {
3864 notecardIndex = notecardIndex + 2; //get past delimiter
3865 notecardIndex = dataString.IndexOf("\n", notecardIndex);
3866 if (notecardIndex > 0)
3867 {
3868 // Finally got to the first line of the notecard
3869 // now find the end of the notecard text delimited by }<LF>
3870 // parse the lines, delimited by <LF>
3871 char[] delimChar = { '\n' };
3872 int notecardEof = dataString.IndexOf("}\n", notecardIndex);
3873 if (notecardEof > 0)
3874 {
3875 int notecardLength = notecardEof - notecardIndex - 1;
3876 notecardIndex = dataString.IndexOf("\n", notecardIndex);
3877 notecardIndex++; // get past delimiter
3878
3879 // create new string to parse that only consists of the actual lines in the asset
3880 Char[] notecardCharArray = dataString.ToCharArray(notecardIndex, notecardLength);
3881 String notecardString = new String(notecardCharArray);
3882
3883 // split the lines of the notecard into separate strings
3884 notecardLines = notecardString.Split(delimChar);
3885 return notecardLines;
3886 }
3887 }
3888 }
3889 }
3890 }
3891 }
3892 return notecardLines;
3826 } 3893 }
3827 3894
3828 public LSL_Types.Vector3 llGetAgentSize(string id) 3895 public LSL_Types.Vector3 llGetAgentSize(string id)
@@ -4769,11 +4836,23 @@ namespace OpenSim.Region.ScriptEngine.Common
4769 return m_host.ParentGroup.PrimCount; 4836 return m_host.ParentGroup.PrimCount;
4770 } 4837 }
4771 4838
4772 public string llGetNumberOfNotecardLines(string name) 4839 public int llGetNumberOfNotecardLines(string name)
4773 { 4840 {
4774 m_host.AddScriptLPS(1); 4841 m_host.AddScriptLPS(1);
4775 NotImplemented("llGetNumberOfNotecardLines"); 4842
4776 return String.Empty; 4843 // TODO: this script function should actually return
4844 // the number of lines via the dataserver event
4845 // once it is implemented - krtaylor
4846
4847 String[] notecardLines = GetNotecardLines(name);
4848 if (!String.IsNullOrEmpty(notecardLines[0]))
4849 {
4850 return notecardLines.Length;
4851 }
4852 else
4853 {
4854 return 0;
4855 }
4777 } 4856 }
4778 4857
4779 public LSL_Types.list llGetBoundingBox(string obj) 4858 public LSL_Types.list llGetBoundingBox(string obj)