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:
parent
e77bddec30
commit
90bd72e1ff
3 changed files with 11 additions and 18 deletions
|
@ -262,9 +262,8 @@ integer get_number_of_scripts()
|
||||||
|
|
||||||
string convert_to_world_positions(integer num)
|
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) * llGetRot();
|
||||||
rotation target_rot = llEuler2Rot(llList2Vector(ROT_LIST, num) * DEG_TO_RAD) * llList2Rot(details, 1);
|
vector target_pos = llList2Vector(POS_LIST, num) * llGetRot() + llGetPos();
|
||||||
vector target_pos = llList2Vector(POS_LIST, num) * llList2Rot(details, 1) + llList2Vector(details, 0);
|
|
||||||
return (string)target_pos + "|" + (string)target_rot;
|
return (string)target_pos + "|" + (string)target_rot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -881,10 +880,9 @@ default
|
||||||
}
|
}
|
||||||
else if (llList2String(data, 0) == "MOVED")
|
else if (llList2String(data, 0) == "MOVED")
|
||||||
{
|
{
|
||||||
list myprim = llGetObjectDetails(llGetLinkKey(llGetLinkNumber()), [OBJECT_POS, OBJECT_ROT]);
|
rotation f = llGetRot();
|
||||||
rotation f = llList2Rot(myprim, 1);
|
|
||||||
vector target_rot = llRot2Euler((rotation)llList2String(data, 3) / f) * RAD_TO_DEG;
|
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))
|
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);
|
POS_LIST = llListReplaceList(POS_LIST, [target_pos], num, num);
|
||||||
|
|
|
@ -167,8 +167,7 @@ wipe_sit_targets()
|
||||||
integer i;
|
integer i;
|
||||||
for (i = 0; i <= llGetNumberOfPrims(); i++)
|
for (i = 0; i <= llGetNumberOfPrims(); i++)
|
||||||
{
|
{
|
||||||
string desc = llList2String(llGetObjectDetails(llGetLinkKey(i), [OBJECT_DESC]), 0);
|
if ((string)llGetLinkPrimitiveParams(i, [PRIM_DESC]) != "-1")
|
||||||
if (desc != "-1")
|
|
||||||
{
|
{
|
||||||
llLinkSitTarget(i, ZERO_VECTOR, ZERO_ROTATION);
|
llLinkSitTarget(i, ZERO_VECTOR, ZERO_ROTATION);
|
||||||
}
|
}
|
||||||
|
@ -207,15 +206,11 @@ sittargets()
|
||||||
SITTERS_SITTARGETS += 1000;
|
SITTERS_SITTARGETS += 1000;
|
||||||
ASSIGNED_SITTARGETS += FALSE;
|
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]);
|
integer next = llListFindList(SITTERS_SITTARGETS, [1000]);
|
||||||
string desc = llList2String(llGetObjectDetails(llGetLinkKey(i), [OBJECT_DESC]), 0);
|
string desc = (string)llGetLinkPrimitiveParams(i, [PRIM_DESC]);
|
||||||
integer index = llSubStringIndex(desc, "#");
|
desc = llGetSubString(desc, llSubStringIndex(desc, "#") + 1, -1);
|
||||||
if (index)
|
|
||||||
{
|
|
||||||
desc = llGetSubString(desc, index + 1, -1);
|
|
||||||
}
|
|
||||||
if (desc != "-1")
|
if (desc != "-1")
|
||||||
{
|
{
|
||||||
list data = llParseStringKeepNulls(desc, ["-"], []);
|
list data = llParseStringKeepNulls(desc, ["-"], []);
|
||||||
|
@ -303,7 +298,7 @@ set_sittarget()
|
||||||
{
|
{
|
||||||
target = 0;
|
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);
|
llLinkSitTarget(target, target_pos - <0.,0.,0.4> + llRot2Up(target_rot) * 0.05, target_rot);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ def main(argc, argv):
|
||||||
prterr(u'Need exactly 1 argument (input filename)')
|
prterr(u'Need exactly 1 argument (input filename)')
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
# Regex that replaces a line by its OSS version when one's specified.
|
# Regex that replaces a line with its OSS version when one's specified.
|
||||||
os_re = re.compile(r'^( *)(.*?)// OSS::(.*)$', re.MULTILINE)
|
os_re = re.compile(r'^( *)(.*?)// OSS::(.*)$', re.MULTILINE)
|
||||||
|
|
||||||
f = open(argv[1], "r");
|
f = open(argv[1], "r");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue