llDerezObject() and DEREZ_TO_INVENTORY fails to save changes made to root description.
tracked
Lucia Nightfire
Scripted rez an object.
Change its description.
Have the rezzer reclaim the object via llDerezObject() and DEREZ_TO_INVENTORY.
Have the rezzer rerez the object.
Description is as before the change and reclaim.
During the time when DEREZ_TO_INVENTORY was on aditi only, root name was also affected, but that was fixed before release.
Inventory acquire time and inventory description of reclaimed objects does not update in rezzer inventory, but inventory key, name and perms do.
Can we get both of these fixed? Thanks.
Log In
Maestro Linden
updated the status to
tracked
Maestro Linden
I can reproduce this in SLS 2026-06-25.28189172152, using the 2 scripts below (first is for the rezzing object, the 2nd is for the object it rezzes). When llDerezObject is called with DEREZ_TO_INVENTORY, it replaces the original item the object was rezzed from, even if the object name changes. It seems that llDerezObject does
not
update the item description in task inventory, and that the task inventory description takes precedent when rezzing the object. The object properties (object name, script state, floating text, etc.) are otherwise preserved on re-rez - as expected.// llDerezObject test script
list derez_modes = [
DEREZ_TO_INVENTORY, "DEREZ_TO_INVENTORY"
];
integer mode;
default
{
touch_start(integer total_number)
{
mode = (mode + 2) % llGetListLength(derez_modes);
string item = llGetInventoryName(INVENTORY_OBJECT, 0);
integer start_param = 1;
llSay(0, "Rezzing '" + item + "' with start param " + (string)start_param);
key object = llRezObjectWithParams(item, [REZ_PARAM, start_param,
REZ_POS, <0,0,1>, TRUE, TRUE]);
if(object == "")
{
llOwnerSay("Error: Rezzing failed.");
return;
}
llSay(0, "Object " + (string)object + " rezzed. Will derez it in mode "
+ llList2String(derez_modes, mode + 1));
llSleep(5);
integer result = llDerezObject(object, llList2Integer(derez_modes, mode));
llSay(0, "llDerezObject() returned success = " + (string)result);
}
}
// child object script
integer c; // some sort of counter
default
{
on_rez(integer i)
{
string desc = llGetObjectDesc();
llSay(0, (string)llGetKey() + " rezzed at "
+ llGetTimestamp() + " with parameter " + (string)i
+ ". touch counter is " + (string)c + ", description is " + desc);
}
touch_start(integer total_number)
{
c++;
llSetObjectDesc((string)c);
llSay(0, llGetTimestamp() + " Updated object desc to " + llGetObjectDesc());
llSetObjectName("child " + (string)c);
llSay(0, llGetTimestamp() + " Updated object name to " + llGetObjectName());
llSetText(llGetObjectName() + "\nTouched " + (string)c
+ " times total", <1,1,1>, 1);
}
}