Promptly complain any time the SL GUI restricts copying differently than you wish.
// Remember the last perms described.
integer everyonePerms;
integer nextPerms;
integer troubles;
fetchPerms()
{
everyonePerms = llGetObjectPermMask(MASK_EVERYONE);
nextPerms = llGetObjectPermMask(MASK_NEXT);
}
// Describe the perms.
permsShouldBe()
{
integer wasTroubles = troubles;
troubles = 0;
if (!(everyonePerms & PERM_COPY))
{
llOwnerSay("No = Allow anyone to copy " + llGetObjectName());
troubles += 1;
}
if (!(nextPerms & PERM_MODIFY))
{
llOwnerSay("No = Next owner can modify " + llGetObjectName());
troubles += 1;
}
if (!(nextPerms & PERM_COPY))
{
llOwnerSay("No = Next owner can copy " + llGetObjectName());
troubles += 1;
}
if (!(nextPerms & PERM_TRANSFER))
{
llOwnerSay("No = Next owner can resell/ give away " + llGetObjectName());
troubles += 1;
}
if (wasTroubles && !troubles)
{
llOwnerSay("Open / Yes Mod/ Yes Copy/ Yes Transfer");
}
if (wasTroubles || troubles)
{
llOwnerSay("");
}
}
// Describe the perms when rezzed or reset, and when the perms change.
default
{
on_rez(integer start_param)
{
llResetScript();
}
state_entry()
{
fetchPerms();
permsShouldBe();
llSetTimerEvent(1.0); // 1.0 = once per second
}
timer()
{
integer wasEveryonePerms = everyonePerms;
integer wasNextPerms = nextPerms;
fetchPerms();
if (everyonePerms != wasEveryonePerms)
{
permsShouldBe();
}
else if (nextPerms != wasNextPerms)
{
permsShouldBe();
}
}
}