In this column five years ago, in April
2014, I wrote "The Unworkable Workaround" about a bug,
already very old at the time, affecting Linden grasses and
groundcovers, and my unsuccessful attempt to find a workaround. After
all this time, just last month I happened to buy some land where I
really needed a workaround to this same bug -- with similarly
unsatisfying results. I wrote the details in "I hate group
abilities" on the LSL Scripting forum:
//quoted section
Back in 2012, the
five Linden Library "groundcover" plants all took to
transmogrifying themselves into one ("Grass - tall 1") when
the sim restarts. This is pretty annoying because those 1 LI plants,
limited as they are, have the very special property of matching the
(dynamic) terrain however complex its shape, so there are
applications for which there's no practical substitute.
So the problem is
how to uproot the contaminated instances and replant them whenever
the sim restarts. We can know the plants' UUIDs from the replanting
script's object_rez() event, and the uprooting script can
llReturnObjectsByID() each of the contaminated ones. Why separate
scripts? Well, llReturnObjectByID() only really works when owned by
the landowner (so the uprooting script needs to be owned by the
landowner), and objects owned by the landowner cannot be returned* so
the plants need to be owned by somebody other than the landowner (so
the planting script needs to be owned by that non-landowner). And
that non-landowner must have the ability to rez Linden plants on the
land.
Does anybody see a
problem?
[Note: This is as
far as I got in 2014. It seemed impractical to have the scripts owned
by these two different accounts with different group roles. But turns
out there's one more twist beyond "impractical"...]
The non-landowner
may have the group Ability to rez Linden plants on group-owned land
-- indeed, the group may even grant that Ability to the Everybody
role -- but the sim doesn't recognize that scripts owned by that
agent set to that group have that Ability unless that agent is
present on the sim. So our planter scripts will try unsuccessfully
for days to rez a Linden plant until the script owner teleports to
the region when it will successfully plant as many as it wants.
Usually we get
around this "need to see the agent to know her script's group
Abilities" by deeding the scripted object to group, but a nasty
Catch-22 in this case: if the object is deeded to the landowning
group, objects it rezzes can't be returned by script.
__________
*except by a
script in the object itself, and Linden plants can't be scripted.
//end of quoted
section
This "working" workaround,
then, involves my "sower" alt visiting the restarted sim
after my "reaper" script has removed the contaminated
plants. It's kind of amazing to watch: as soon as he's teleported
into the sim, his sowing script starts rezzing out the Linden
groundcovers it was prevented from doing until the sim could confirm
by his mere presence that his abilities include rezzing of Linden
plants.
Reporter Qie Niangao
190406
No comments:
Post a Comment