aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
diff options
context:
space:
mode:
authorSean Dague2008-05-28 21:43:41 +0000
committerSean Dague2008-05-28 21:43:41 +0000
commitb0be8075cd318bdd4ff1265f4491e3f7bcce9e2e (patch)
treef143e40f551a9ac776b8f85b9b20c9c63f41d82f /OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
parentupdate the nhibernate inventory item base definition (diff)
downloadopensim-SC-b0be8075cd318bdd4ff1265f4491e3f7bcce9e2e.zip
opensim-SC-b0be8075cd318bdd4ff1265f4491e3f7bcce9e2e.tar.gz
opensim-SC-b0be8075cd318bdd4ff1265f4491e3f7bcce9e2e.tar.bz2
opensim-SC-b0be8075cd318bdd4ff1265f4491e3f7bcce9e2e.tar.xz
From: Kurt Taylor <krtaylor@us.ibm.com>
Attached is an initial implementation of llGetNotecardLine and llGetNumberOfNotecardLines. I decided to go ahead an send these out for comment while I continue to work on the second part of the proper implementation. These functions work and return the values requested, as initially defined in the code, but should be properly implemented to return the requested information via a dataserver event. This event will be added and these functions fixed and included in a second patch shortly.
Diffstat (limited to '')
-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)