From 90bd72e1ff67723f11212a2746fb22fb1c792725 Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Sat, 19 Aug 2017 16:14:01 +0200 Subject: [PATCH] Further fixes for OpenSim. In OpenSim, llGetLinkNumber() returns 0 for single prims with a sitting avatar. On top of that, in older versions llGetLinkKey returns NULL_KEY for link number 0, and in newer ones it does so for link number 1. The present changes try to make sure that under either situation, the code behaves correctly for the core scripts. --- AVsitter2/[AV]adjuster.lsl | 10 ++++------ AVsitter2/[AV]sitA.lsl | 15 +++++---------- AVsitter2/prepare-for-oss.py | 4 ++-- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/AVsitter2/[AV]adjuster.lsl b/AVsitter2/[AV]adjuster.lsl index f50cd1e..07044ec 100644 --- a/AVsitter2/[AV]adjuster.lsl +++ b/AVsitter2/[AV]adjuster.lsl @@ -262,9 +262,8 @@ integer get_number_of_scripts() string convert_to_world_positions(integer num) { - list details = llGetObjectDetails(llGetLinkKey(llGetLinkNumber()), [OBJECT_POS, OBJECT_ROT]); - rotation target_rot = llEuler2Rot(llList2Vector(ROT_LIST, num) * DEG_TO_RAD) * llList2Rot(details, 1); - vector target_pos = llList2Vector(POS_LIST, num) * llList2Rot(details, 1) + llList2Vector(details, 0); + rotation target_rot = llEuler2Rot(llList2Vector(ROT_LIST, num) * DEG_TO_RAD) * llGetRot(); + vector target_pos = llList2Vector(POS_LIST, num) * llGetRot() + llGetPos(); return (string)target_pos + "|" + (string)target_rot; } @@ -881,10 +880,9 @@ default } else if (llList2String(data, 0) == "MOVED") { - list myprim = llGetObjectDetails(llGetLinkKey(llGetLinkNumber()), [OBJECT_POS, OBJECT_ROT]); - rotation f = llList2Rot(myprim, 1); + rotation f = llGetRot(); vector target_rot = llRot2Euler((rotation)llList2String(data, 3) / f) * RAD_TO_DEG; - vector target_pos = ((vector)llList2String(data, 2) - llList2Vector(myprim, 0)) / f; + vector target_pos = ((vector)llList2String(data, 2) - llGetPos()) / f; if ((string)target_pos != (string)llList2Vector(POS_LIST, num) || (string)target_rot != (string)llList2Vector(ROT_LIST, num)) { POS_LIST = llListReplaceList(POS_LIST, [target_pos], num, num); diff --git a/AVsitter2/[AV]sitA.lsl b/AVsitter2/[AV]sitA.lsl index 5a3bc0a..f71b498 100644 --- a/AVsitter2/[AV]sitA.lsl +++ b/AVsitter2/[AV]sitA.lsl @@ -167,8 +167,7 @@ wipe_sit_targets() integer i; for (i = 0; i <= llGetNumberOfPrims(); i++) { - string desc = llList2String(llGetObjectDetails(llGetLinkKey(i), [OBJECT_DESC]), 0); - if (desc != "-1") + if ((string)llGetLinkPrimitiveParams(i, [PRIM_DESC]) != "-1") { llLinkSitTarget(i, ZERO_VECTOR, ZERO_ROTATION); } @@ -207,15 +206,11 @@ sittargets() SITTERS_SITTARGETS += 1000; ASSIGNED_SITTARGETS += FALSE; } - for (i = 1; i <= prims; i++) + for (i = 1; i <= prims; i++) // FIXME: will this work for single prim in OpenSim? { integer next = llListFindList(SITTERS_SITTARGETS, [1000]); - string desc = llList2String(llGetObjectDetails(llGetLinkKey(i), [OBJECT_DESC]), 0); - integer index = llSubStringIndex(desc, "#"); - if (index) - { - desc = llGetSubString(desc, index + 1, -1); - } + string desc = (string)llGetLinkPrimitiveParams(i, [PRIM_DESC]); + desc = llGetSubString(desc, llSubStringIndex(desc, "#") + 1, -1); if (desc != "-1") { list data = llParseStringKeepNulls(desc, ["-"], []); @@ -303,7 +298,7 @@ set_sittarget() { target = 0; } - if (llList2String(llGetObjectDetails(llGetLinkKey(target), [OBJECT_DESC]), 0) != "-1") + if ((string)llGetLinkPrimitiveParams(target, [PRIM_DESC]) != "-1") { llLinkSitTarget(target, target_pos - <0.,0.,0.4> + llRot2Up(target_rot) * 0.05, target_rot); } diff --git a/AVsitter2/prepare-for-oss.py b/AVsitter2/prepare-for-oss.py index 4944396..976a324 100644 --- a/AVsitter2/prepare-for-oss.py +++ b/AVsitter2/prepare-for-oss.py @@ -11,8 +11,8 @@ def main(argc, argv): prterr(u'Need exactly 1 argument (input filename)') return 1 - # Regex that replaces a line by its OSS version when one's specified. - os_re = re.compile(r'^( *)(.*?) // OSS::(.*)$', re.MULTILINE) + # Regex that replaces a line with its OSS version when one's specified. + os_re = re.compile(r'^( *)(.*?)// OSS::(.*)$', re.MULTILINE) f = open(argv[1], "r"); s = f.read()