diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 5543f641c6..ec5643662c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -3258,7 +3258,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return src.Substring(0,end+1); } // Both indices are positive - return src.Substring(start, (end+1) - start); + return src.Substring(start, (end + 1) - start); } // Inverted substring (end < start) @@ -3295,11 +3295,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (start < src.Length) { - return src.Substring(0,end+1) + src.Substring(start); + return src.Substring(0, end + 1) + src.Substring(start); } else { - return src.Substring(0,end+1); + return src.Substring(0, end + 1); } } } @@ -3331,7 +3331,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (start <= end) { // If both bounds are outside of the existing - // string, then return unchanges. + // string, then return unchanged. if (end < 0 || start >= src.Length) { return src; @@ -3364,11 +3364,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { if (start < src.Length) { - return src.Remove(start).Remove(0,end+1); + return src.Remove(start).Remove(0, end + 1); } else { - return src.Remove(0,end+1); + return src.Remove(0, end + 1); } } else @@ -3391,10 +3391,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// which case it is end-relative. The index may exceed either /// string bound, with the result being a concatenation. /// - // this is actually wrong. acording to SL wiki, this function should not support negative indexes. + // this is actually wrong. according to SL wiki, this function should not support negative indexes. public LSL_String llInsertString(string dest, int index, string src) { - // Normalize indices (if negative). // After normalization they may still be // negative, but that is now relative to @@ -3429,7 +3428,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (index >= dest.Length) { - return dest+src; + return dest + src; } // The index is in bounds. @@ -3437,7 +3436,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // be assigned to the first character of the inserted string. // So unlike the other string operations, we do not add one // to get the correct string length. - return dest.Substring(0,index)+src+dest.Substring(index); + return dest.Substring(0, index) + src + dest.Substring(index); } @@ -11153,7 +11152,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public LSL_List llGetLinkPrimitiveParams(int linknumber, LSL_List rules) { - // acording to SL wiki this must indicate a single link number or link_root or link_this. + // according to SL wiki this must indicate a single link number or link_root or link_this. // keep other options as before List parts; @@ -18402,6 +18401,104 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return ScriptBaseClass.JSON_INVALID; } } + + public LSL_String llChar(LSL_Integer unicode) + { + if(unicode == 0) + return string.Empty; + try + { + return Char.ConvertFromUtf32(unicode); + } + catch { } + + return "\ufffd"; + } + + public LSL_Integer llOrd(LSL_String s, LSL_Integer index) + { + if (string.IsNullOrEmpty(s)) + return 0; + + if(index < 0) + index += s.Length; + + if (index < 0 || index >= s.Length) + return 0; + + char c = s.m_string[index]; + if(c >= 0xdc00 && c <= 0xdfff) + { + --index; + if (index < 0) + return 0; + + int a = c - 0xdc00; + c = s.m_string[index]; + if (c < 0xd800 || c > 0xdbff) + return 0; + c -= (char)(0xd800 - 0x40); + return a + (c << 10); + } + + if (c >= 0xd800) + { + if(c < 0xdc00) + { + ++index; + if (index >= s.Length) + return 0; + + c -= (char)(0xd800 - 0x40); + int a = (c << 10); + + c = s.m_string[index]; + if (c < 0xdc00 || c > 0xdfff) + return 0; + c -= (char)0xdc00; + return a + c; + } + else if(c < 0xe000) + return 0; + } + return (int)c; + } + + public LSL_Integer llHash(LSL_String s) + { + if (string.IsNullOrEmpty(s)) + return 0; + int hash = 0; + char c; + for(int i = 0; i < s.Length; ++i) + { + hash *= 65599; + // on modern intel/amd this is faster than the tradicional optimization: + // hash = (hash << 6) + (hash << 16) - hash; + c = s.m_string[i]; + if (c >= 0xd800) + { + if(c < 0xdc00) + { + ++i; + if(i >= s.Length) + return 0; + + c -= (char)(0xd800 - 0x40); + hash += (c << 10); + + c = s.m_string[i]; + if(c < 0xdc00 || c > 0xdfff) + return 0; + c -= (char)(0xdc00); + } + else if(c < 0xe000) + return 0; + } + hash += c; + } + return hash; + } } public class NotecardCache diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 8ea282cf73..8fbce4deb0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs @@ -479,5 +479,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces LSL_Rotation llGetRegionSunRotation(); LSL_Rotation llGetMoonRotation(); LSL_Rotation llGetRegionMoonRotation(); + + LSL_String llChar(LSL_Integer unicode); + LSL_Integer llOrd(LSL_String s, LSL_Integer index); + LSL_Integer llHash(LSL_String s); } } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 34de109656..b961447c8a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs @@ -35,7 +35,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public partial class ScriptBaseClass { // SCRIPTS CONSTANTS - public static readonly LSLInteger OS_APIVERSION = 18; + public static readonly LSLInteger OS_APIVERSION = 19; public static readonly LSLInteger TRUE = 1; public static readonly LSLInteger FALSE = 0; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index 3fcfd95a73..151daf1232 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs @@ -2182,5 +2182,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { return m_LSL_Functions.llGetRegionMoonRotation(); } + + public LSL_String llChar(LSL_Integer unicode) + { + return m_LSL_Functions.llChar(unicode); + } + + public LSL_Integer llOrd(LSL_String s, LSL_Integer index) + { + return m_LSL_Functions.llOrd(s, index); + } + + public LSL_Integer llHash(LSL_String s) + { + return m_LSL_Functions.llHash(s); + } } } diff --git a/bin/ScriptSyntax.xml b/bin/ScriptSyntax.xml index bd130952f9..a940600781 100644 --- a/bin/ScriptSyntax.xml +++ b/bin/ScriptSyntax.xml @@ -1,4 +1,4 @@ -727420c2-45b3-4627-8c6e-5c478e6a736e +1d4e1fad-92d3-eb1f-3f14-4a86e39192b0 llsd-lsl-syntax-version2 controls @@ -1371,6 +1371,50 @@ typeinteger value0x20 + NPCLOOKAT_CLEAR + typeinteger + value10 + + NPCLOOKAT_CONVERSATION + typeinteger + value6 + + NPCLOOKAT_FOCUS + typeinteger + value8 + + NPCLOOKAT_FREELOOK + typeinteger + value3 + + NPCLOOKAT_HOVER + typeinteger + value5 + + NPCLOOKAT_IDLE + typeinteger + value1 + + NPCLOOKAT_LISTEN + typeinteger + value2 + + NPCLOOKAT_MOUSELOOK + typeinteger + value9 + + NPCLOOKAT_NONE + typeinteger + value0 + + NPCLOOKAT_RESPOND + typeinteger + value4 + + NPCLOOKAT_SELECT + typeinteger + value7 + NULL_KEY typestring value00000000-0000-0000-0000-000000000000 @@ -1581,7 +1625,7 @@ OS_APIVERSION typeinteger - value16 + value19 OS_ATTACH_MSG_ALL typeinteger @@ -1911,27 +1955,27 @@ PERMISSION_ATTACH typeinteger - value32 + value0x20 PERMISSION_CHANGE_JOINTS typeinteger - value256 + value0x100 PERMISSION_CHANGE_LINKS typeinteger - value128 + value0x80 PERMISSION_CHANGE_PERMISSIONS typeinteger - value512 + value0x200 PERMISSION_CONTROL_CAMERA typeinteger - value2048 + value0x800 PERMISSION_DEBIT typeinteger - value2 + value0x02 PERMISSION_OVERRIDE_ANIMATIONS typeinteger @@ -1939,27 +1983,35 @@ PERMISSION_RELEASE_OWNERSHIP typeinteger - value64 + value0x40 PERMISSION_REMAP_CONTROLS typeinteger - value8 + value0x08 + + PERMISSION_RETURN_OBJECTS + typeinteger + value0x10000 + + PERMISSION_SILENT_ESTATE_MANAGEMENT + typeinteger + value0x4000 PERMISSION_TAKE_CONTROLS typeinteger - value4 + value0x04 PERMISSION_TELEPORT typeinteger - value4096 + value0x1000 PERMISSION_TRACK_CAMERA typeinteger - value1024 + value0x400 PERMISSION_TRIGGER_ANIMATION typeinteger - value16 + value0x010 PI typefloat @@ -2845,14 +2897,30 @@ typeinteger value4 + STATS_SCRIPT_EPS + typeinteger + value28 + STATS_SCRIPT_LPS typeinteger - value20 + value38 + + STATS_SCRIPT_NPCS + typeinteger + value47 + + STATS_SCRIPT_TIME + typeinteger + value37 STATS_SIM_FPS typeinteger value1 + STATS_SIM_SLEEP + typeinteger + value20 + STATS_TIME_DILATION typeinteger value0 @@ -3517,6 +3585,13 @@ ftypefloat + llChar + + returnstring + arguments + unicodetypeinteger + + llClearCameraParams arguments @@ -4614,6 +4689,13 @@ offsettypevector + llHash + + returninteger + arguments + stypestring + + llHTTPRequest returnkey @@ -5047,6 +5129,14 @@ arguments + llOrd + + returninteger + arguments + stypestring + indextypeinteger + + llOverMyLand returninteger @@ -6315,8 +6405,25 @@ returninteger arguments - ratyperotation - rbtyperotation + atypefloat + btypefloat + + + osApproxEquals + + returninteger + arguments + atypefloat + btypefloat + margintypefloat + + + osApproxEquals + + returninteger + arguments + vatypevector + vbtypevector margintypefloat @@ -6334,34 +6441,17 @@ arguments vatypevector vbtypevector + + + osApproxEquals + + returninteger + arguments + ratyperotation + rbtyperotation margintypefloat - osApproxEquals - - returninteger - arguments - vatypevector - vbtypevector - - - osApproxEquals - - returninteger - arguments - atypefloat - btypefloat - margintypefloat - - - osApproxEquals - - returninteger - arguments - atypefloat - btypefloat - - osAvatarName2Key returnstring @@ -6384,6 +6474,21 @@ animationtypestring + osAvatarType + + returninteger + arguments + sFirstNametypestring + sLastNametypestring + + + osAvatarType + + returninteger + arguments + avkeytypekey + + osCauseDamage arguments @@ -6490,6 +6595,8 @@ returnstring arguments drawListtypestring + startXtypeinteger + startYtypeinteger endXtypeinteger endYtypeinteger @@ -6499,8 +6606,6 @@ returnstring arguments drawListtypestring - startXtypeinteger - startYtypeinteger endXtypeinteger endYtypeinteger @@ -6639,13 +6744,13 @@ arguments avatartypestring + targettypestring osForceOtherSit arguments avatartypestring - targettypestring osFormatString @@ -7041,6 +7146,21 @@ alerttypestring + osLinkParticleSystem + + arguments + linknumbertypeinteger + rulestypelist + + + osListSortInPlace + + arguments + srctypelist + stridetypeinteger + ascendingtypeinteger + + osLoadedCreationDate returnstring @@ -7198,13 +7318,13 @@ osNpcLookAt + returninteger arguments - npctypekey + npckeytypekey typetypeinteger - targettypekey + objkeytypekey offsettypevector - tooltipMakes an NPC look at a target. Other effects besides looking are also supported. osNpcMoveTo @@ -7352,6 +7472,7 @@ returnkey arguments notecardtypestring + includeHudstypeinteger osOwnerSaveAppearance @@ -7359,7 +7480,6 @@ returnkey arguments notecardtypestring - includeHudstypeinteger osParcelJoin @@ -7383,6 +7503,12 @@ pos2typevector + osParticleSystem + + arguments + rulestypelist + + osPlaySound arguments @@ -7417,13 +7543,13 @@ osRegionNotice arguments + agentIDtypekey msgtypestring osRegionNotice arguments - agentIDtypekey msgtypestring @@ -7459,19 +7585,6 @@ daycycletypestring - osReplaceRegionEnvironment - - returninteger - arguments - transitiontypeinteger - daycycletypestring - daylentypefloat - dayoffsettypefloat - altitude1typefloat - altitude2typefloat - altitude3typefloat - - osReplaceString returnstring @@ -7620,7 +7733,7 @@ arguments masstypefloat radiustypefloat - lenghttypefloat + lengthtypefloat centerOfMasstypevector lslrottyperotation @@ -7738,6 +7851,7 @@ osSetProjectionParams arguments + linknumbertypeinteger projectiontypeinteger texturetypekey fovtypefloat @@ -7748,7 +7862,6 @@ osSetProjectionParams arguments - linknumbertypeinteger projectiontypeinteger texturetypekey fovtypefloat @@ -7985,7 +8098,8 @@ arguments agenttypestring - regionNametypestring + regionXtypeinteger + regionYtypeinteger positiontypevector lookattypevector @@ -7994,8 +8108,7 @@ arguments agenttypestring - regionXtypeinteger - regionYtypeinteger + regionNametypestring positiontypevector lookattypevector @@ -8020,8 +8133,7 @@ osTeleportOwner arguments - regionXtypeinteger - regionYtypeinteger + regionNametypestring positiontypevector lookattypevector @@ -8029,7 +8141,8 @@ osTeleportOwner arguments - regionNametypestring + regionXtypeinteger + regionYtypeinteger positiontypevector lookattypevector