As You Sow, So Shall You Reap

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

No comments:

Post a Comment


Park Plaza Hotel

Park Plaza Hotel
Please visit our Sponsor!

Luxury Living in Bay City

Park Plaza residents enjoy beautiful views, fine dining, and a roof top patio with hot tub; all this near route 66, and within walking distance to Hairy Hippo Fun Land and aquarium. Rates start at 55L a week for studios, and 185L a week for full size apartments. Free furnishings available. Contact Roc Plutonium for more information!