From 6f389ba4cf54d7e964b98430f7a6601d3ec0c73b Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Tue, 18 Dec 2007 02:41:34 +0000 Subject: Many Thanks to Alondria for adding: The list type and a bunch of support functions to LSL Added/ReImplmented: llGetListLength(), llList2Integer(), osList2Double() (note rename), llList2Float(), llList2String(), llList2Key(), llList2Vector(), llList2Rot(), llList2List(), llDeleteSubList(), llGetListEntryType(), llList2CSV(), llCSV2List(), llListInsertList(), llDumpList2String(), Borked Still: llListSort(), llListRandomize(), llList2ListStrided(), llListFindList(), Changed: llHTTPRequest() (Made wrapper of LSL_Types.list->List) --- .../Common/LSL_BuiltIn_Commands_Interface.cs | 61 +++++------ OpenSim/Region/ScriptEngine/Common/LSL_Types.cs | 114 +++++++++++++++++++++ 2 files changed, 145 insertions(+), 30 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Common') diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs index 60e2a0e..34bac59 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs @@ -345,41 +345,41 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki: vector llGetCenterOfMass() LSL_Types.Vector3 llGetCenterOfMass(); //wiki: list llListSort(list src, integer stride, integer ascending) - List llListSort(List src, int stride, int ascending); + LSL_Types.list llListSort(LSL_Types.list src, int stride, int ascending); //integer llGetListLength(list src) - int llGetListLength(List src); + int llGetListLength(LSL_Types.list src); //wiki: integer llList2Integer(list src, integer index) - int llList2Integer(List src, int index); + int llList2Integer(LSL_Types.list src, int index); //wiki: double llList2double(list src, integer index) - double llList2double(List src, int index); + double osList2Double(LSL_Types.list src, int index); //wiki: string llList2String(list src, integer index) - string llList2String(List src, int index); + string llList2String(LSL_Types.list src, int index); //wiki: key llList2Key(list src, integer index) - string llList2Key(List src, int index); + string llList2Key(LSL_Types.list src, int index); //wiki: vector llList2Vector(list src, integer index) - LSL_Types.Vector3 llList2Vector(List src, int index); + LSL_Types.Vector3 llList2Vector(LSL_Types.list src, int index); //wiki rotation llList2Rot(list src, integer index) - LSL_Types.Quaternion llList2Rot(List src, int index); + LSL_Types.Quaternion llList2Rot(LSL_Types.list src, int index); //wiki: list llList2List(list src, integer start, integer end) - List llList2List(List src, int start, int end); + LSL_Types.list llList2List(LSL_Types.list src, int start, int end); //wiki: llDeleteSubList(list src, integer start, integer end) - List llDeleteSubList(List src, int start, int end); + LSL_Types.list llDeleteSubList(LSL_Types.list src, int start, int end); //wiki: integer llGetListEntryType( list src, integer index ) - int llGetListEntryType(List src, int index); + int llGetListEntryType(LSL_Types.list src, int index); //wiki: string llList2CSV( list src ) - string llList2CSV(List src); + string llList2CSV(LSL_Types.list src); //wiki: list llCSV2List( string src ) - List llCSV2List(string src); + LSL_Types.list llCSV2List(string src); //wiki: list llListRandomize( list src, integer stride ) - List llListRandomize(List src, int stride); + LSL_Types.list llListRandomize(LSL_Types.list src, int stride); //wiki: list llList2ListStrided( list src, integer start, integer end, integer stride ) - List llList2ListStrided(List src, int start, int end, int stride); + LSL_Types.list llList2ListStrided(LSL_Types.list src, int start, int end, int stride); //wiki: vector llGetRegionCorner( ) LSL_Types.Vector3 llGetRegionCorner(); //wiki: list llListInsertList( list dest, list src, integer start ) - List llListInsertList(List dest, List src, int start); + LSL_Types.list llListInsertList(LSL_Types.list dest, LSL_Types.list src, int start); //wiki: integer llListFindList( list src, list test ) - int llListFindList(List src, List test); + int llListFindList(LSL_Types.list src, LSL_Types.list test); //wiki: string llGetObjectName() string llGetObjectName(); //wiki: llSetObjectName(string name) @@ -466,11 +466,12 @@ namespace OpenSim.Region.ScriptEngine.Common void llSetCameraEyeOffset(LSL_Types.Vector3 offset); //wiki: llSeteCameraAtOffset(vector offset) void llSetCameraAtOffset(LSL_Types.Vector3 offset); - void llDumpList2String(); + // + string llDumpList2String(LSL_Types.list src, string seperator); //wiki: integer llScriptDanger(vector pos) void llScriptDanger(LSL_Types.Vector3 pos); //wiki: llDialog( key avatar, string message, list buttons, integer chat_channel ) - void llDialog(string avatar, string message, List buttons, int chat_channel); + void llDialog(string avatar, string message, LSL_Types.list buttons, int chat_channel); //wiki: llVolumeDetect(integer detect) void llVolumeDetect(int detect); //wiki: llResetOtherScript(string name) @@ -494,7 +495,7 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki: string llMD5String(string src, integer nonce) string llMD5String(string src, int nonce); //wiki: llSetPrimitiveParams( list rules ) - void llSetPrimitiveParams(List rules); + void llSetPrimitiveParams(LSL_Types.list rules); //wiki: string llStringToBase64(string str) string llStringToBase64(string str); //wiki: string llBase64ToString(string str) @@ -508,7 +509,7 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki: double llLog(double val) double llLog(double val); //wiki: list llGetAnimationList( key id ) - List llGetAnimationList(string id); + LSL_Types.list llGetAnimationList(string id); //wiki: llSetParcelMusicURL(string url) void llSetParcelMusicURL(string url); //wiki: vector llGetRootPosition() @@ -530,7 +531,7 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki: key llGetNumberOfNotecardLines(string name) string llGetNumberOfNotecardLines(string name); //wiki: list llGetBoundingBox( key object ) - List llGetBoundingBox(string obj); + LSL_Types.list llGetBoundingBox(string obj); //wiki: vector llGetGeometricCenter() LSL_Types.Vector3 llGetGeometricCenter(); void llGetPrimitiveParams(); @@ -545,7 +546,7 @@ namespace OpenSim.Region.ScriptEngine.Common //llSetLocalRot(rotation rot) void llSetLocalRot(LSL_Types.Quaternion rot); //wiki: list llParseStringKeepNulls( string src, list separators, list spacers ) - List llParseStringKeepNulls(string src, List seperators, List spacers); + LSL_Types.list llParseStringKeepNulls(string src, LSL_Types.list seperators, LSL_Types.list spacers); //wiki: llRezAtRoot(string inventory, vector position, vector velocity, rotation rot, integer param) void llRezAtRoot(string inventory, LSL_Types.Vector3 position, LSL_Types.Vector3 velocity, LSL_Types.Quaternion rot, int param); @@ -572,14 +573,14 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki: llLoadURL(key avatar_id, string message, string url) void llLoadURL(string avatar_id, string message, string url); //wiki: llParcelMediaCommandList( list commandList ) - void llParcelMediaCommandList(List commandList); + void llParcelMediaCommandList(LSL_Types.list commandList); void llParcelMediaQuery(); //wiki integer llModPow(integer a, integer b, integer c) int llModPow(int a, int b, int c); //wiki: integer llGetInventoryType(string name) int llGetInventoryType(string name); //wiki: llSetPayPrice( integer price, list quick_pay_buttons ) - void llSetPayPrice(int price, List quick_pay_buttons); + void llSetPayPrice(int price, LSL_Types.list quick_pay_buttons); //wiki: vector llGetCameraPos() LSL_Types.Vector3 llGetCameraPos(); //wiki rotation llGetCameraRot() @@ -601,11 +602,11 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki: llRemoveFromLandBanList(key avatar) void llRemoveFromLandBanList(string avatar); //wiki: llSetCameraParams( list rules ) - void llSetCameraParams(List rules); + void llSetCameraParams(LSL_Types.list rules); //wiki: llClearCameraParams() void llClearCameraParams(); //wiki: double llListStatistics( integer operation, list src ) - double llListStatistics(int operation, List src); + double llListStatistics(int operation, LSL_Types.list src); //wiki: integer llGetUnixTime() int llGetUnixTime(); //wiki: integer llGetParcelFlags(vector pos) @@ -614,7 +615,7 @@ namespace OpenSim.Region.ScriptEngine.Common int llGetRegionFlags(); //wiki: string llXorBase64StringsCorrect(string str1, string str2) string llXorBase64StringsCorrect(string str1, string str2); - string llHTTPRequest(string url, List parameters, string body); + string llHTTPRequest(string url, LSL_Types.list parameters, string body); //wiki: llResetLandBanList() void llResetLandBanList(); //wiki: llResetLandPassList() @@ -622,13 +623,13 @@ namespace OpenSim.Region.ScriptEngine.Common //wiki integer llGetParcelPrimCount(vector pos, integer category, integer sim_wide) int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide); //wiki: list llGetParcelPrimOwners( vector pos ) - List llGetParcelPrimOwners(LSL_Types.Vector3 pos); + LSL_Types.list llGetParcelPrimOwners(LSL_Types.Vector3 pos); //wiki: integer llGetObjectPrimCount(key object_id) int llGetObjectPrimCount(string object_id); //wiki: integer llGetParcelMaxPrims( vector pos, integer sim_wide ) int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide); //wiki list llGetParcelDetails(vector pos, list params) - List llGetParcelDetails(LSL_Types.Vector3 pos, List param); + LSL_Types.list llGetParcelDetails(LSL_Types.Vector3 pos, LSL_Types.list param); //OpenSim functions string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer); diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs index e0cf1e5..136b613 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_Types.cs @@ -252,5 +252,119 @@ namespace OpenSim.Region.ScriptEngine.Common return c; } } + + [Serializable] + public class list + { + private object[] m_data; + public list(params object[] args) + { + m_data = new object[args.Length]; + m_data = args; + } + public int Length + { + get { return m_data.Length; } + } + public object[] Data + { + get { return m_data; } + } + public static list operator +(list a, list b) + { + object[] tmp; + tmp = new object[a.Length + b.Length]; + a.Data.CopyTo(tmp, 0); + b.Data.CopyTo(tmp, a.Length); + return new list(tmp); + } + public list GetSublist(int start, int end) + { + Console.WriteLine("GetSublist(" + start.ToString() + "," + end.ToString() + ")"); + object[] ret; + // Take care of neg start or end's + if (start < 0) + { + start = m_data.Length + start; + } + if (end < 0) + { + end = m_data.Length + end; + } + + // Case start < end + + if (start <= end) + { + if (start >= m_data.Length) + { + return new list(); + } + if (end >= m_data.Length) + { + end = m_data.Length - 1; + } + ret = new object[end - start + 1]; + Array.Copy(m_data, start, ret, 0, end - start + 1); + return new list(ret); + } + else + { + if (start >= m_data.Length) + { + return this.GetSublist(0, end); + } + if (end >= m_data.Length) + { + return new list(); + } + // end < start + //ret = new object[m_data.Length - Math.Abs(end - start + 1)]; + //Array.Copy(m_data, 0, ret, m_data.Length - start, end + 1); + //Array.Copy(m_data, start, ret, 0, m_data.Length - start); + return this.GetSublist(0, end) + this.GetSublist(start, this.Data.Length - 1); + //return new list(ret); + } + } + + public string ToPrettyString() + { + string output; + if (m_data.Length == 0) + { + return "[]"; + } + output = "["; + foreach (object o in m_data) + { + if (o.GetType().ToString() == "System.String") + { + output = output + "\"" + o + "\", "; + } + else + { + output = output + o.ToString() + ", "; + } + } + output = output.Substring(0, output.Length - 2); + output = output + "]"; + return output; + } + public override string ToString() + { + string output; + output = ""; + if (m_data.Length == 0) + { + return ""; + } + foreach (object o in m_data) + { + output = output + o.ToString(); + } + return output; + } + } } + } -- cgit v1.1