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.
This commit is contained in:
Sei Lisa 2017-08-19 16:14:01 +02:00 committed by Sei-Lisa
parent e77bddec30
commit 90bd72e1ff
3 changed files with 11 additions and 18 deletions

View file

@ -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);

View file

@ -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);
}

View file

@ -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()