• All submissions to this site are governed by Second Life Project Contribution Agreement. By submitting patches and other information using this site, you acknowledge that you have read, understood, and agreed to those terms.
Issue Details (XML | Word | Printable)

Key: SVC-224
Type: New Feature New Feature
Status: Open Open
Priority: Critical Critical
Assignee: Unassigned
Reporter: Emma Nowhere
Votes: 242
Watchers: 51
Operations

If you were logged in you would be able to see more operations.
2. Second Life Service - SVC

Need a llGetLinkPrimitiveParams function

Created: 23/May/07 09:34 AM   Updated: Thursday 05:43 PM
Return to search
Issue 4746 of 4962 issue(s)
Component/s: Scripts
Affects Version/s: None
Fix Version/s: None

File Attachments: 1. Text File FixSmallPrims.txt (3 kB)

Image Attachments:

1. X and Y leaving sim 20090506a.jpg
(841 kB)
Issue Links:
Duplicate
 
Relates


 Description  « Hide
Need a version of llGetPrimitiveParams designed to work in link sets as a counterpart to llSetLinkPrimitiveParams.

Currently, modifying linksets programmatically requires either laborious manually copying scripts into each item in the links or convoluted programmatic giving of scripts using either llRemoteLoadScriptPin or llGiveInventory, neither of which should be necessary when the purpose of putting these scripts in is solely for the purpose of performing the types of actions that could easily be accomplished with a llGetLinkPrimitiveParams function. Less lag would also result.



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Dahlia Trimble added a comment - 20/Jun/07 01:17 PM
This would be great! It would also be really nice if it could be called from any script in any other prim in the linkset. This would allow child prims to associate themselves to other child prims rather than the root, which would be very useful for robotics.

Lyndyn Tzara added a comment - 26/Jun/07 06:10 PM
Actully, I disagree with this one. If this function is added, a simple script would be able to reproduce any object that can be modified, though minus scripts, animated textures, text, contents, etc., like a mild copybot. It is one thing for it to take alot of time and effort to be able to make a reproduction of an object that you can modify, but another when you only need to drop a script in and wait.

Emma Nowhere added a comment - 27/Jun/07 06:22 PM
Actually, Lyndyn, this shouldn't let you do anything you can't already do, I'm just looking for a way to simplify the amount of code required. If something is mod, you can already create a script that copies itself into each prim in a linkset and then does what it needs to, it's just much messier code. I've attached an example script that could be reduced significantly in code size with this function.

Emma Nowhere added a comment - 27/Jun/07 06:24 PM
Example of the type of LSL script that could be vastly simplified with the addition of this function.

McCabe Maxsted added a comment - 11/Jul/07 07:14 AM
Linking this to the LSL meta-issue, even though I agree with Lyndyn: it opens too many easy doors for abuse.

WarKirby Magojiro added a comment - 07/Aug/07 12:59 PM
NO. It DOESN'T

This will not allow ANYTHING that can't already be done. It will simply make things cleaner, simpler, and less of a strain on the sim frim hundreds of scripts.

There is NO potential for abuse. I can already create a script that copies itself to every prim, then can simply set scripts to running in selection. This would do nothing more than taking 5 seconds work out of the equation, which makes no difference in that regard.

Lyndyn and McCabe are wrong.


Hiroaki Rhino added a comment - 07/Aug/07 01:02 PM
While abusers will still be able to do what they want by using the current llGiveInventory functions, I think this will reduce the lag and increase the convenience of linked object manipulations through only from a main prim, as a SIM owner who cares about lag, I wish to see this happen.
It will reduce the lag for all the scripters, even the abuse script will cause less lag with the same available weak point for us.

This function will be one of the savior function for most of us!


BETLOG Hax added a comment - 05/Nov/07 04:23 PM
IMO It should be fairly self evident that any Set function needs a complimentary Get function, and vice versa.

I don't consider myself an expert, but i can see that adding this function would offer little or no more opportunity for abuse than already exists.

When users expect a function to have a logical twin (get <-> set) it should therefore exist. .. if for no other reason than to stop us using numerous and excessive function calls to achieve what we need to do.

That said, considering the load my llSetPrimitiveParams and llSetLinkPrimitiveParams experiments have put on the server/sim, perhaps this is the reason for the apparent null, but possibly just delayed LL response on this function set.... Because having a nice single function to get info, would logically result in more scripts that set info.. thereby exacerbating a sim load issue they are trying to resolve. ...maybe?


Darien Caldwell added a comment - 07/Nov/07 01:02 PM
As a scripter, I can see why people want this. As a content creator and builder, I can also see why people don't want this. Weighing the pros and cons, I have to side with the Nope, don't do it side. As the proponents are fond of saying, it doesn't let you do anything that can't already be done. So putting time and effort into it isn't needed, to offset the miniscule to none lag it hypothetically may cause to not have it. I'm pretty sure LL didn't add it for a reason, and the status quo should remain until such a time as content creators are given better tools to protect their creations, IMHO.

pavig lok added a comment - 07/Nov/07 03:11 PM
I've got a solution to this argument

I don't agree with Darien at all on this issue. The holes in SL which allow content duplication are all over the place. I give away an item that allows it to be done trivially in several places inworld (don't ask) because the ability to manipulate prims and copy across pre-existing alignment info s an extremely powerful builders tool and can save days of work on complex projects. It's a scientific fact that DRM can never be complete - ask any cryptographer not hired by the RIAA. There will always be holes. The best protection you have for your work is to actually declare copyright and license - which costs nothing, and gives you a stick to wave (albeit impotently) if anyone tries to duplicate your work. But one that is legally binding, unlike the implied rights of linden DRM.

However - the workarounds for getting prim info - regardless of the lag induced, are hideously complex and brittle. About the only thing they're useful for is copying existing objects as they require the assistance of the avatar. This means that any legitimate use get functions for prim state, be it for pupeteering, building tools, alignment of parts on avatars, furniture customization or a heap of other things - well they're all too hard.

There is one surefire way to ensure that Dariens argument isn't an issue is this. The only legitimate reason to llGetPrimitiveParams is if you have modification rights on an object so you can then set them. There's two tiers here:

Full no mod: All calls to the function should return a null list or failure of some kind.

Implied no mod - this is when you can set textures but can't move prims or rename. Calls to get texture should pass - calls to get prim state should fail. If you don't have the texture in inventory the key does you no good anyway.

This way the function can only be used to get information about an object you are allowed to manipulate. One can argue that it still leaves those who offer mod rights on objects more open to abuse - but if you're doing that you're already open to abuse to anyone unscrupulous enough to go looking for a dupe script.


Emma Nowhere added a comment - 07/Nov/07 06:06 PM
Well, I respect Darien's opinion as a content creator, and I'm actually generally supportive of SL's DRM features, but I do think that if this function respects existing permissions , or even some of Pavig's suggestions, it wont actually enable the type of content cloning people are scared of.

TigroSpottystripes Katsu added a comment - 08/Nov/07 06:53 AM
afaik you can apply a texture usign its key even if you don't have the file itself.....

pavig lok added a comment - 08/Nov/07 10:04 PM
Tigerspottystripes - aha thanks for the words up - so with combination of the client menu copying tex faces is trivial already. Using existing scripting tricks similarly trivial.

So this addition really presents an opportunity to simplify code a lot and do these things directly without resorting to metaprogramming or spawning master/slave scripts for the purposes of getting anything done. The current system only allows for one-off processes like copying objects and can't really be integrated well into products that do anything much more useful than that.

I'm both a content designer and scripter too so am aware of the possibility of folks copying stuff. It makes no sense though to restrict the elegant evolution of LSL because of the possibility of enabling copying when the threat is already there. Anyone clever enough to code a copier is already clever enough to develop their own product. If they aren't the script kiddles already have access to things that do this. Hobbling the language due to fear of it's misuse on issues like this does a dis-service to scripters.

Availability of llGetLinkPrimitiveParams would enable Emma Nowhere's fix small prims script above to be rewritten in about ten lines of code, and that without needing the av to hold it's hand or spawn possibly hundreds of subscripts and rely on the messaging overhead this creates in order to do a simple task.


Ordinal Malaprop added a comment - 09/Nov/07 12:32 AM
I certainly support this. If one is releasing prim-based modifiable objects, one should already be aware that anyone who wants to copy them by script can, and there are scripts in the wild to let them. They only have to do it once, and any inconvenience is worth their while. (For that matter, even with no-mod objects, people are still known to sit down for ages noting the parameters of individual sub-prims in an object so that they can copy it. If they will go to those lengths, they would certainly be prepared to run a copying script that takes a couple of minutes to prepare at most.)

On the other hand, the current system prevents scripts that need rapid or frequent updating of the information being practical. One project I abandoned some time ago was a vehicle which calculated its moment of inertia so that it could properly calculate its energy usage during turns, treating prims as point masses - this function would have been precisely what I wanted, given that there were frequent changes of structure. And that's a fairly simple example - I'm sure that polling the scripting community could come up with far more esoteric applications.


Eata Kitty added a comment - 19/Nov/07 09:13 AM
I might have the most real experience with doing this currently by hand, I sell a product which can change it's prims to give several dozen different configurations, allowing around 300 prims over the prim limit which would be impossible if using hidden parts that are shown/hidden via alpha. There is no good reason why there shouldn't be a function for this.

WarKirby Magojiro added a comment - 22/Nov/07 11:08 PM
Another example of a use for this.

When building objects with many prims, often is the case that some will be too small, preventing the object from being scaled down.

This would allow writing a convenience script that could find and fix minimum size prims in the object, allowing it to be scaled farther.


Gaius Goodliffe added a comment - 01/Dec/07 05:34 AM
Ugh, I ran into this problem the other day (voting up).

As others have noted, there are a lot of things you could do with this function that is just infeasible without it, getting the same data via link message is just too slow for many purposes, plus requires a bunch of state saving/resuming if you need it in the middle of a complex set of operations, or a lot more memory to cache all this data. Thus, the lack of the function either makes things impossible or causes scripts to use way more resources than they ought to need for a simple operation.

On the flipside, not having the function does absolutely nothing at all whatsoever to protect content. One of the things passing data via link message or chat is not too slow for is cloning scripts, those exist today and work perfectly fine without this function.

I can see the performance difference in my estate tools when I have an object with one script rather than an object with a script in every prim – it's that dramatic. In general, one of the reasons why user experience is as bad as it is in SL is poor sim performance, and lack of tools like this, forcing authors to resort to complex and costly alternatives, is a major reason for that. It's particularly sad when the reason for not having this tool available is, in fact, completely spurious.


Creem Pye added a comment - 04/Dec/07 07:18 AM
"afaik you can apply a texture usign its key even if you don't have the file itself....."
The existing functions for getting texture keys ( llGetTexture() etc) have a security feature, that NULL_KEY is returned instead of the actual texture key, if you don't have full permissions on the object.

That said, I'm one of the supporters of this function - it would be very convenient, without compromising permissions security at all.


TigroSpottystripes Katsu added a comment - 04/Dec/07 07:29 AM
Creem, the technique of aquiring the key of textures you don't have direct access to, is not dependant on lsl, once you have the key llSetTexture will accept it as if it was the key of a texture you do have access

Creem Pye added a comment - 04/Dec/07 09:19 AM
TigroSpottystripes,

Yes, I'm well aware of how llSetTexture works. My point was that you can already get the texture key using llGetTexture or llGetPrimitiveParams, but that both of these functions return NULL_KEY if you don't have the appropriate permissions. I would expect llGetPrimitiveParams to be consistent with this model, so adding this function shouldn't cause any (additional?) security issues.


BETLOG Hax added a comment - 04/Dec/07 11:20 AM
Creem Pye
What Tigro is saying, without mentioning the actual method, is that there are OTHER means of getting a texture UUID from ANY object, irrespective of object or texrture permissions. The method is extremely trivial, uses options in the regular SL client.

Our point is that: the taking of UUIDs is currently a moot point in the context of this discussion. It can be done. It is trivial.

The aquisition of texture UUIDs is currently NOT impaired nor assisted by the addition of the function being requested in this jira #.


anthony reisman added a comment - 06/Dec/07 07:08 AM
Yes, I vote up on this one as the workaround requires you to have script in every link and a link message system setup to get the parameters. These extra scripts do not need to exist and take up resources that could be used for something else.

I can think of many valid uses for this, and the system resource benefits far outweigh the content security concerns as they can be performed without this function.


Chaz Longstaff added a comment - 08/Dec/07 09:17 PM
>> Yes, I vote up on this one as the workaround requires you to have script in every link and a link message system setup to get the parameters. These extra scripts do not need to exist and take up resources that could be used for something else.

>> I can think of many valid uses for this, and the system resource benefits far outweigh the content security concerns as they can be performed without this function.

>> anthony reisman

What he said. So I vote yes. There are many houses out there with 80 to 100 idle scripts in them, which still have an impact on server resources, just to tint the windows and walls. This command would enable scripters to not have to take up those resources, and help to reduce lag further, helping to ensure a good impression of Second Life for those coming into it for the first time, and therefore the success of the whole undertaking.

For the tin foil hat people who are worried about it being used as a tool to reproduce objects, get a grip. Any person with a reasonable command of fine motor skills can eyeball something on the screen and reproduce it from scratch, anyway. And, if lag in SL gets to the point where it drives away 999 out of every 1,000 people that try it, ain't going to be anyone around to steal your stuff anyway.


darling brody added a comment - 13/Apr/08 01:38 AM
Lets weight up the pros and cons....

Pros : Makes scripting so much simpeler, faster, and less laggy when you want to read the appearance of an object.

Cons : None! (See Below)

With this new function it will not be nessisary to give out your products with MOD permissions.

Lets use hair as an example of an object currently provided with MOD permission for proper fitting, resulting in people stealing it with the existing laggy scripted methods.

With this function your hair will come with a simple HUD that can change the size, colour, even texture of your hair. It will save and restore different styles, all while your hair is set for NO MOD permissions, thus blocking all the current scripted methods for stealing it that relies on the hair being MOD.

Selling new hair styles can be like real life too. Go to the hair shop, sit in a chair and the shop loads a new parametor notecard into your existing hair, instantly adding a the new style to your HUD. How much fun would that be!!! You could even try before you buy with the hair style deleting itself when you leave the shop without buying it.

Adding this function will not let us do anything we can not already do the long way, but it will make it possible to stop people doing stuff we dont want them to do.

Darling


Jacek Antonelli added a comment - 14/May/08 02:06 PM
I sure could have used this function for my giant octopus. I had to write a script to distribute another script to all 100+ prims of the sculpture, then take it back into my inventory, rez it again, set all the 100+ scripts to running, then use a third script to send linkmessages to the 100+ scripts to get the prim parameters.

That entire complicated system could have been replaced with one simple script, if we had llGetLinkPrimitiveParams.

Regarding content theft concerns: doesn't an object already have to have modify permissions for you to drop a new script in it? Unless I'm wrong, the only objects you could "steal" using llGetLinkPrimitiveParams are objects that you already have modify permission for, in which case you can already see the prim parameters yourself, or put any scripts you want in the child prims.

Weighing the pros and cons here is like weighing a hippo against a field mouse.


Fenrir Reitveld added a comment - 10/Jun/08 03:16 AM - edited
Got my vote. I'm in the same boat as Jacek. I recently re-wrote my animation system to use llSetLinkPrimitiveParams() to cut down script load, but without a corresponding llGetLinkPrimitiveParams() I still need scripts in all of my sub-prims in order to easily read their orientations. My hack for now is to have the child prim recorder scripts self-delete once I am done sampling all the various animation frames.

One lil sneaky way around this is to use llGetObjectDetails() on child prims, but I consider that to be a crude solution and it only works if you are interested in the prim's orientation. It still doesn't address all the other parameters I might want to read.


Arawn Spitteler added a comment - 28/Jun/08 02:24 PM
I hope that llGetLinkPrimitiveParams(integer, list) would return PRIM_POSITION in local, rather than the global co-ordinates, that so complicate the arithmetic of llGetObjectDetails(key, list)
I've a better sitting arrangement, than those variable conference tables, but my efforts to adjust people's butts have been tossing me out of world.
Anyone notice, we can now sit facing inwards, on a one prim round table? Still, we should be able to calculate the relative position, and turn people inwards, if the content creator wants to, not all sitting is to be done by SitTarget

Contagious Republic added a comment - 20/Jul/08 12:33 AM
Let's see how object stealing works with this function:

-Thief puts an invisible, wandering cube 1 meter below the ground in every sandbox, and all mod-permitted items used in every spontaneous team effort ever gets copied at every hour... NOT! The thief is stopped because he doesn't have the permission to alter the link state of even "full perm" items with a script - he lacks PERMISSION_CHANGE_LINKS. So he can't have his evil cube link to everything to steal the data automatically (or even in person)!

So there is no thief-type downside to llGetLinkPrimitiveParams! And it is less laggy than having to stick a script in every prim!

P.S.: If you want to see the current 1 drag and drop, 2 clicks per prim as a thief deterrent, perhaps we should add 3600 clicks to the login screen for everybody so that thieves lose an hour per login... that's the logic keeping the 1 drag and drop, 2 clicks in.


Brandon Shinobu added a comment - 27/Aug/08 02:44 PM
I think this function would be good, for one simple reason: with the ability to get a linked prims properties, the content creator himself could put in the script to allow modifying of his content, and he could make the object itself no-mod, thus allowing the user to modify the content without being able to modify it through the build system, and thus copy.

I think those who are against it might be looking at it a little too one-sided. Scripters copying the objects for "fair use" or "personal use" or more devious and illegal purposes, would not be the only ones using it. The content creators could also use it, do combat the very thing they would fear others using it for.


Haravikk Mistral added a comment - 27/Aug/08 03:36 PM
Brandon, while yours is an inventive thought I'm not sure it will really help here, as it's fairly trivial to get an object's parameters using a modified viewer, no scripts, no modify permission needed. If someone wanted to they could run a bot across the entire Second Life grid and reproduce EVERYTHING on their own private grid somewhere. But what it would lack would be interactivity (scripts) and people. Keeping someone from copying the appearance of content unfortunately is not something that's likely to be solved.

The main advantage therefore is still in being able to change linked-prims using llSetLinkPrimitiveParams /without/ having to store details of the prims you're editing in your script. For example, if all I want to do is change the hollow setting of a prim, I shouldn't need to know and have on-hand details of what shape it is, taper etc., should just be able to fetch the data, slot in the new value and be done with it. It becomes more useful in even more complicated scenarios where you have a script using llSetLinkPrimitiveParams to change multiple aspects of a linked-prim, and don't want to have to track them all.

I'm also not seeing any security issues, if someone can drop a script into an object with llGetLinkPrimitiveParams() inside it, then they can already do this with a script containing llGetPrimitiveParams().


Brandon Shinobu added a comment - 27/Aug/08 05:21 PM
I understand what you're saying Haravikk, and I know the advantages. I'm a promoter of having a function like this after all. I was just trying to answer some of the fears that people had concerning the function. I think we're all aware of copybots and so forth. I figure, though, that there was still another side to the issue that needed to be looked at. The content creators here were concerned about scripters, not bots, and I was merely showing that the new function would not exclusively benefit those trying to copy content, but also those creating it. Not everyone has the know-how or ability to run a bot that will copy content, and I think to content creators, scripts are a more immediate/accessible threat. My aim was to show that even there, it was no real reason to refuse this function, since the function itself could be used to stop what they feared from happening.

What I would really like to propose is a function such as llSetLinkListPrimitiveParams() with a list of link numbers to change, instead of having to use single links, or LINK_SET, or LINK_ALL_OTHERS, etc. That way you could change a few specific prims simultaneously, instead of having to do one after the other, or using separate scripts to make sure both fire at once.


Creem Pye added a comment - 27/Aug/08 06:02 PM
>> What I would really like to propose is a function such as llSetLinkListPrimitiveParams() with a list of link numbers to change, instead of having to use single links, or LINK_SET, or LINK_ALL_OTHERS, etc. That way you could change a few specific prims simultaneously, instead of having to do one after the other, or using separate scripts to make sure both fire at once.

Or we could have the built-in 200ms delay removed, so that calling a series of llSetLinkPrimitiveParams() functions would cause every link to transform within a single sim frame. The built-in delays of certain script functions are silly and generate unnecessary overhead, since people avoid them by adding extra scripts to their objects.


BETLOG Hax added a comment - 27/Aug/08 10:11 PM - edited
Use of a function such as llSetRemoteScriptAccessPin(); and its inherent limitations (owner only etc) would go a long way to making llGetLinkPrimitiveParams less scary.
...And list entry of link targets as per Creem Pye: YES, totally yes. [is that jira'd yet?]

PS: re:
>>"if all I want to do is change the hollow setting of a prim, I shouldn't need to know and have on-hand details of what shape it is, taper etc., should just be able to fetch the data"
Perhaps if llSetLinkPrimitiveParams were able to be fed some kind of information that implied the existing parameter be used, it would go half way towards what we want here.
eg:
llSetLinkPrimitiveParams([PRIM_TYPE_SPHERE, 3, AS_IS, AS_IS, 60.0, AS_IS, AS_IS]);
llSetLinkPrimitiveParams([PRIM_TYPE_SPHERE, 3, NO_CHANGE, NO_CHANGE, 60.0, NO_CHANGE, NO_CHANGE]);


Brandon Shinobu added a comment - 28/Aug/08 02:19 AM
No it isn't jira'd yet, but I think I'll do that, since I'm up at this hour anyway.

Haravikk Mistral added a comment - 28/Aug/08 04:28 AM
Brandon I think what you're proposing is the same as what I posted in SVC-2105 a little while ago, where you can specify a list of specific prims to edit, rather than doing all or one?

BETLOG, the ability to specify a constant like that certainly would be interesting, however it would have to specify a value that can't possible ever be used by an integer value. I suspect this may be possible as I'm unaware of any integer value that doesn't use a very specific range of values, so some big negative number would probably suffice. Values which are not integers can simply check if the value is an integer and if it's the constant. This would certainly be useful in the case where you don't want to change parts of an item, as it removes the need to fetch data first.


Argent Stonecutter added a comment - 28/Aug/08 04:36 AM
Betlog: I don't understand your comment about llSetRemoteScriptAccessPIN. llGetLinkPrimitiveParams would already be owner-only because linksets are all the same owner.

BETLOG Hax added a comment - 28/Aug/08 06:24 AM
Argent; it was just a brainfart.
It might be useful to only permit link info retrieval if it has a PIN set and that PIN is supplied as part of the info request call.

Personally , i can't see any real security issue with this kind of function in the first place, but I suggested the above as a way to possibly mitigate any such concerns for those who may have them.


Brandon Shinobu added a comment - 28/Aug/08 12:49 PM
Heh, Haravikk, yes, exactly that. In fact, I even used the same function name. I set one up last night, but it's apparently disappeared. Just as well, as I would have had to mark it as a duplicate anyway.

Zaphod Zepp added a comment - 19/Jan/09 06:13 PM - edited
Some above have said this doesn't add anything that can't already be done (which as an argument for not supporting is a bit like saying we shouldn't support multiplication because it can be done by adding in a loop), but that's not really true. If the root prim needs to know anything other than position/rotation of some its children, there is NO way of doing this synchronously currently - you have to modify the prim's scripts and send messages to them for them to send their info back asynchronously (AFAICT). So it's not just an important function from the POV of script readability and maintainability, it literally would be the only way of doing synchronous prim property querying. And why should querying the position/rotation of your children be

pos = llList2Vector(llGetObjectDetails(llGetLinkKey(link), (list)OBJECT_POS) , 0) - llGetRootPosition()) / llGetRootRotation();
rot = llList2Vector(llGetObjectDetails(llGetLinkKey(link), (list)OBJECT_ROT) , 0)) / llGetRootRotation();

but setting it be

llSetLinkPrimitiveParams(link, [PRIM_POSITION, pos, PRIM_ROTATION, rot]);

?

And yes, it would make writing CopyBots fractionally easier - but honestly once somebody's determined to use scripts to copy objects you're not likely to be able to stop them. If we really needed a solution to this, the server could do occasional scans for illegal copies of objects (i.e. as soon as it detected another object with the same prims with all the same properties, it generates some sort of alert or automatically deletes the object - but of course that's pretty easy to circumvent by deliberately ensuring your copy is slightly different in a way that's undetectable by the human eye). However to be honest I'm not sure why designers are too worried about this - how many people actually rely on the fact that if, e.g., somebody wants to make a forest with 100 of your custom trees they have to buy 100 copies of your model? And if you're really determined that nobody should be able to copy your model, you're just going to have to mark is as non-modifiable. Actually personally I would never buy something that was modifiable but not copyable, because I'm not prepared to modify something I don't have a backup of.


Brandon Shinobu added a comment - 20/Jan/09 01:48 AM
Zaphod, please be aware that every time you edit your comment, it resends your entire post to those watching the issue.

Argent Stonecutter added a comment - 20/Jan/09 06:02 AM
This wouldn't make copying an object easier - you can distribute copy scripts through an object in a couple of other ways - and preventing people who are creating no-copy objects from using this call in their own scripts doesn't seem like a useful thing to do.

Brandon Shinobu added a comment - 12/May/09 04:56 PM
I agree Argent. As I said before, I think some content creators are seeing this terribly one-sided. They see it as a threat, rather than a tool they themselves could use in their products.

Stephen Psaltery added a comment - 12/May/09 05:31 PM
And it isn't a threat - at ALL. I could make a script here and now that can copy any modifiable no copy/no trans object. Such scripts ALREADY EXIST in the public domain and are available on the official script wiki library.

If I were a thief, the 15 minutes (or less) to setup such a script to copy a work would be negligible next to the potential profit from the stolen item.

HOWEVER the amount of inconvenience to legitimate customers because I can't provide certain service in my products is HUGE. For instance... this function would allow me to make resizers with ONE SCRIPT. Currently resizers need AT BEST one script in EVERY prim. Think of the lag reduction! Right now resizers are in most attachable objects these days.

That example alone should sell this idea. Not to mention the hundreds of other examples of where this function could improve products. I am a content creator, and I see nothing but benefit from this. The "potential risk" is just in the minds of people who don't understand the issue. People can easily copy anything modifiable RIGHT NOW. Don't like it? Vote for JIRAs that allow for scale changing permissions only or mark it no mod. Sure, it's a pain to your customers, but it is necessary - I do this myself. This product doesn't affect that issue either way. The only thing not implementing this issue does it allow for the propagation of laggy scripts and prevent valuable new products. That's the ONLY thing. I invite anyone to challenge this assertion who is willing to actually debate the issue rather than just throw out "YOU AREN'T RIGHT BECAUSE I SAY SO!"


Brandon Shinobu added a comment - 12/May/09 05:38 PM - edited
@ Stephen Psaltery

Personally I agree with your point. You might want to look at SVC-2885 though, a JIRA I created a while back (and have updated a few times since) to allow the resizing and getting the scale of an entire linkset. That at least would allow us some functionality, without compromising prim property information (as easily compromised as it is already, as you pointed out).

Edit:

This is (as you all already know) already supported in the GUI using the drag boxes, but there is no equivalent for LSL. Furthermore, it would allow us to resize objects without needing to worry about which prim was biggest, or which was smallest, or have to resize it one prim at a time.


Sebastean Steamweaver added a comment - 13/May/09 05:38 PM
I have opened a new JIRA, SVC-4252, with a possible solution to the llGetLinkPrimitiveParams debate. I'm not assuming everyone will like it, but it is a compromise that would give scripters the functionality they need, and content creators against llGetLinkPrimitiveParams the security they desire.

Xugu Madison added a comment - 13/May/09 05:53 PM
There is no security reduction from this function!

Right now, I can write a script that call llGetPrimitiveParams() and passes them out to an external script which reconfigures a prim based on those values. It's fairly straight forward to write a script injector that can put a script into every prim in a link set, You have to take that link set into inventory, drop it, and then use "Set Scripts to Running in Selection" to actually start the scripts, but it works.

This function does not make things any less secure. It merely means that for scripts which need to deal with values on other prims in the link set (for example, I have a re-colouring HUD that wants to use the color of the prim that was clicked), instead of one script per prim we can use one per linkset.


Sebastean Steamweaver added a comment - 13/May/09 05:56 PM - edited
I wasn't saying that there was Xugu I simply said, "the security they desire." Go ahead and check out the issue I linked this to. I think you'll find a few attractive aspects of it to what your HUD does, such as changing only specific parameters without affecting the rest of the property.

Sebastean Steamweaver added a comment - 13/May/09 06:24 PM
Food for thought Xugu: It's true that SVC-4252 can't do everything that llGetLinkPrimtiveParams could, but it can do things that llGetLinkPP could not do. If someday we did get a llGetLinkPrimitiveParams function, we could actually use the two in conjunction with one another because of their separate benefits, and in the meantime, it would allow us to do many things we cannot currently do without llGetLinkPrimitiveParams.

Gigs Taggart added a comment - 13/May/09 10:47 PM
"The security they desire" can't exist.

Every client out there already knows all the primative parameters for every prim it sees, and can very easily do whatever it likes with them.


Sebastean Steamweaver added a comment - 14/May/09 02:26 AM
Subtlety my friend, subtlety

We both know that, but the people concerned about llGetLinkPrimitiveParams are not concerned about clients, or copybots, they're concerned about those who don't have the resources or knowledge to use one, but do use scripts.

That being said, I proposed SVC-4252 because I felt that it was a good solution, which has its own benefits in addition to allowing us to do things that a llGetLinkPrimitiveParams function would not. Even if the "security they desire" doesn't exist, it's still what they desire. "PRIM_RELATIVE_*" flags answer both sides, and as I pointed out, can be used in conjunction with one another when/if we eventually do get a llGetLinkPrimitiveParams function.

Am I saying that the "paranoia" is justified? No, not really. But for both sides of this issue, it has some attractive features. I never posted it to start an argument about whether or not there was a security issue Please don't think that I am arguing that point. My only goal was to offer another point of view that would be attractive to both sides.

I would be happy for a llGetLinkPrimitiveParams function, but until that point, I think that the "PRIM_RELATIVE*" flags are a good alternative, and are definitely better than nothing, especially since it would have its own unique set of benefits


darling brody added a comment - 14/May/09 06:33 AM
Copybot is easier to get and use than llGetLinkPrimitiveParams ever will be. Blocking llGetLinkPrimitiveParams that is useful and harder to use, while ignoring copybot which is easy to use is a non-argument. The people who are stealing products for resale are using copybot. Copybot is not detectable by the lindens, unlike llGetLinkPrimitiveParams.

*******

We are entering into a a time where linden labs is going to limit the number of scripts, memory, and cpu that can be used on a parcel, and/or attached to an avatar.

Now is the time to have llGetLinkPrimitiveParams so that unnessisary scripts can be removed.


Sebastean Steamweaver added a comment - 14/May/09 06:45 AM - edited
I do agree that ultimately it's a non-issue. As I said, I would like to see a llGetLinkPrimitiveParams function, and I especially agree with your reason: the lindens will be putting in script limits. I'm of the strong belief that a large part of the reason the script limits are even necessary at this point is due to the fact that as scripters we do not have efficient and simple ways of carrying out simple functions, forcing us to use many scripts, and script-heavy processes.

Again, I'll reiterate, I'm not arguing the security, Brody I was simply pointing out that those against the llGetLinkPrimitiveParams, for whatever reasons they have, wrong or right, have no reason to fear the proposal I made in SVC-4252. Now, before you say, "they don't have a reason to fear anyway", allow me to say again that I know that, and you know that, and I agree the security is a non-issue. We know that, but it's still taking other people a bit to get used to the idea.

So in the meantime, I'm proposing a set of llSetPP flags that can give us some of that functionality, and more that llGetLinkPrimitiveParams could not, such as setting specific parameters without changing the rest of the property (setting the color but not changing the alpha, or vice versa, for example) in one function call, and eliminating many times where the position/rotation need to be stored in order to do relative calculations for positioning of entire objects.

Not only that, but it would also allow us to perform many functions without needing to get the properties of the other prim, which is handy in itself as it would save you 0.2 of script time, crucial in many scripts. It would allow you to achieve in one function call what would otherwise need to be done in two function calls, with the llGetLinkPrimitiveParams.

Just to Clarify What I proposed in SVC-4252 is separate from this, but it does give some of the same functionality. I'm not against llGetLinkPrimitiveParams myself, I am for it, and I think both the new constants and this function could be used very creatively alongside one another, since they both have different benefits, and I will be the first to say that there are things we could do with llGetLinkPP that we could not with my proposal, but both would be good to have.

Do we have an understanding now?


Xugu Madison added a comment - 14/May/09 07:06 AM
SVC-4252 doesn't solve the specific case I'm trying to deal with, so I'm fairly much not paying it any direct attention. I'll leave that to others.

Can I query the belief this method is being held back by content creators? LL are extremely slow to add LSL functionality, I'm not sure this isn't simply a case they haven't got around to it. There's some serious no-brainer stuff like https://jira.secondlife.com/browse/SVC-635 (which is a case of FIX YOUR MIME TYPE SUPPORT, LINDEN LABS) that isn't getting done, I think LSL is considered extremely low priority for functionality addons unfortunately.

As to giving content creators an illusion of security; I think this is actively dangerous, as it masks the actual risks without in any way reducing them. SL content protections are little more than a license agreement, in what they actually stop a determined user doing to anything the client sees, and should be treated as such.


Sierra Janus added a comment - 14/May/09 07:11 AM
Unfortunately there is probably more uninformed vocal content creators who will bitch to Linden Labs about the lack of meaningless and bypassable security measures than there are informed scripters and informed content creators combined, I think the security measures listed in the proposal were just there is make it palatable to those content creators so they can dwell in their false sense of security and still vote for the proposal. Their false sense of security can't be any worse than it is now.
All I can say is any function than can do what this proposal does will still be better than having no function at all.

Sebastean Steamweaver added a comment - 14/May/09 07:16 AM
@Xugu

My aim is not to provide them with a false sense of security. My aim is to get through a set of constant flags that would greatly enhance our scripting ability, even if llGetLinkPP did come – neither could entirely replace the other. I do not believe it's necessarily "dangerous" as you say, since the people using these constant flags would be scripters, those who understood the "security issue." If you read the post I made just before your latest one, I think you'll see the benefits my proposal has to stand on its own feet

I really would encourage you to read through the proposal. It may not address the specific case you're trying to solve right now, but I'm certain that case is not the only case you've faced in your scripting career. My proposal in SVC-4252 has many, many applications that I'm sure you would find useful at some point, perhaps even something you could have used in the past.


Sebastean Steamweaver added a comment - 14/May/09 07:19 AM - edited
@Sierra

Yeah, you're pretty much right on. I just want to gain as wide a voting base as possible, especially since it does answer so many needs we have right now, with the script limits coming in.


darling brody added a comment - 14/May/09 08:30 AM
Agreed. There are many functions sitting in the to-do list that would significantly lower memory and cpu usage by products.

Somthing as simple as llSetLinkText or a llSetLinkPP that can set text would remove the need for scripts in child prims of anything with buttons!

Being able to read the shape, color, alpha, texture, size, position, etc of a prim in a set so that it can be altered in the desired fashion without the need to insert scripts in all the prims that will eat up memory and lagging the region.

Setting the name and description of prims in a linked set without needing to have a script in the object is also missing.

...and dont get me started on passing parametors by reference instead of value. Especialy when they are passed into a LL function call. Why on earth do we need to pass them by value into a LL function call? Are we trying to eat memory?

....hmm... 1:30am... and I am ranting... best sign off now.


Argent Stonecutter added a comment - 15/May/09 04:47 AM
Nobody who still thinks llGetLinkPrimitiveParams() is a security issue merits any serious consideration. They're in the same category as people who buy "copybot protectors" and think they're doing anything but spamming their own customers.

Kagehi Kohn added a comment - 17/May/09 05:32 PM
I think this is important. Linden wants us to use less scripts all the time, but, this is just one example of a case where its not "practical" to get certain types of information about what one prim in a set is doing/set to, without adding more scripts. At least one example I had a while back as "attempting" to match the "real" size of a cylinder to the "contents" it would logically contain, if it had water in it. Using "llGetMass" doesn't really work, and using the scripted objects scale isn't much better, since the change in size of the cylinder is "not" the same as the entire build, or even the one that is scripted. You can get other cases too, where its simply easier to get the "existing" data, than it is to track all of it, or hand all of it off via message linking, listens, and other tricks.

So, here is my suggestion. Lets "break" the ability of this to work as a drop in. I.e., you can't drop someone "else's" script into your object and have it work, nor can you drop yours into a build you own, but where only "one" prim in the set is modify allowed. If you create the build, and then you drop in your "own" script, with this function, it will work as intended, with "all" prims in the set that you yourself created. The only thing this is likely to effect is script that someone else makes for you, since their script would be "different creator". Mind, there may be other ways to pass the data along to other scripts, which doesn't limit misuse entirely, but... there has got to be some way you can get something like this to allow "something".

Ironically, if we llGetScale and llSetScale worked on the entire link set, and we had llSetLinkScale, this would be less necessary. But...

Oh, and another alternative, failing all else, if Linden *really* wanted to limit misuse, would be to make a special set of "Builder" functions. I.e., something like, "llBuilderGetLinkSize(integer link_number)", which would **only** function if you are both the owner "and" creator of the object. Many things these functions are used for involve trying to get something to work as intended in the first place. Once you have to completely, the functions become redundant, or when needed, and be simply stored as predetermined values. But, often we may need to know what the "exact" place a prim is, in relation to the overall build, and having a "single" script do this, instead of like 40 of the, in 40 prims...

However, while this later cases is useful when building, there are legitimate times you need to be able to get at this data, and one thing causing "massive" increases in script use comes directly from people having to find 50 different work arounds for something that could use 2-3 commands, if they "existed". And, that includes being able to do something like "llGetLinkPrimitiveParams", then changing that size, then using "llSetLinkPrimitiveParams", to set the new one, without having to take up data space "in" the script, to track what every single thing in the build is doing at any given moment.


TigroSpottystripes Katsu added a comment - 17/May/09 05:50 PM
as far as I know, it is not possible to have only one of the prims in a linkset be modifiable (thought I was once given a corrupted object that would turn no-mod if unlinked or if any parameter other than position, rotation and scale was changed), and having somthing only work while the owner and creator is the same person would be useless for things that are meant to be owned by people other than the creator (like commercial products)

as it has already been stated over and over again, it is already easy to copy primwork, adding difficulties to this functions is kinda like the "Adult Only" age verification thing, it gives a false sense of security, gets in the way of people using things normally, and doesn't provide any additional security that didn't exist before


Argent Stonecutter added a comment - 19/May/09 08:39 AM
@Kagehi: first of all you're assuming Lindens aren't doing this because they want to limit misuse, rather than they can't be arsed.

So, here is my suggestion. Lets "break" the ability of this to work as a drop in. I.e., you can't drop someone "else's" script into your object and have it work

Not only no, but hell no.

That would break so much existing content. All the people using Cubey's plane script. All the people scripting megaprims, everyone sticking my HUD scripts in their own prims because they don't like mine, all the people using Franimation Overrider, ZHAO, etcetera...

No. Hell no.

And Tigro is correct, you can't have a linkset with just one mod prim.


Kagehi Kohn added a comment - 19/May/09 12:31 PM
I didn't mean break "all" scripts, just not let this one new function work in cases where owner != creator. In other words, 100% of all other existing functions would still work right, including Cubey's plane script, etc., just not ones you didn't make. And, yes, I didn't think about mega prims, but... seriously, that isn't something most sane people use in anything other than a "static" build anyway, and most of the functions you would use via llGet/SetPrimitiveParams would cause such a prim to reset to its non-megaprim maximum size, such as well, PRIM_SIZE, and a few others, I think. It wouldn't but that huge of an issue. Though, you are right, its the one case where it really "would" be a problem.

Anyway, just an idea. There has to be some reason, and the most common one I tend to hear from "detractors", seems to be "security and non-copyability". This would hose any pretense at protecting content, without "some sort" of restriction.


TigroSpottystripes Katsu added a comment - 19/May/09 12:40 PM - edited
there already are restrictions, new scripts can't read from no-mod prims and people can't manually copy the paramters of no-mod prims either, and the other restriction, someone must manage to figure out how to get and how to use somthing with CopyBot functionality in order to copy no-mod no-copy prims

there is no need to cripple this any further


TigroSpottystripes Katsu added a comment - 19/May/09 12:45 PM
btw, can the parameters of a no-copy +mod prim be read with plain old llGetPrimitiveParams ?

Stephen Psaltery added a comment - 19/May/09 02:25 PM
Some parameters work. I believe the texture fetching parameters will not.

Kagehi, the case where owner = creator is the one case where we DON'T need this function. (Or at least me personally)

I would want to use this function in resizers in products I release where owner never equals creator.


Kagehi Kohn added a comment - 19/May/09 09:00 PM
Well, that is a point Stephen, but, logically, one need not know the "exact" size to scale something in such cases. Frankly, while I can see the point of letting a prim use llGetScale and llSetScale on itself returning/using "exact dimensions", this is either completely redundant, or misleading. I.e., don't use "size" one place and "scale" somewhere else, even if they are interchangeable terms in 3D. Better thing would have been something like llGetLinkPercentScale and llSetLinkPercentScale, or some such. You could increase or decrease, within the limits allowed, the size, but without "knowing" the actual dimensions. Sure, you could come close to guessing them, by scaling something by X% until it stops getting bigger, then figure what it "should be" based on that, but it wouldn't be a terribly reliable way to get an exact set of numbers for a build, not the least being that, since you can't "see" the exact numbers, the result will be purely subjective to if you "notice" that it stopped getting bigger or smaller, or not.

Now.. From your statement, I have to say that, yes, a big part of the problem is the "all or nothing" mentality of permissions. There are a few jira around, one suggesting "option for resize only", and another involving an extension of permission flags, since each one would logically only take up a single bit (and the integers they store those flags in can't "possibly" be using all 32 bits yet, such that you could set "precisely" which permissions you want to allow and which ones you do not. This would solve some of the problems right there. Though, not this one.


But, ok, dealing with your specific problem. How about this compromise, the function would *not work* unless: (owner == creator || (script == no_modify && object == no_modify))

In other words, they can't hook into your script to "read" the information themselves in any way, nor put in their own, which uses the function to steal the information. However, something prebuilt by you, since neither the object, nor script is accessible to the new owner, could use the function. While building and testing it, it will work, since you have full perms anyway. Otherwise, the guy getting the final product has to have a no-mod object, with a no-mod script, or it stops working. That way, the only way they could "steal" data on the sizes from the object is if you "designed" your own script to give them the information in the first place. Otherwise, your script can get it, and use it, but they can't jack into the script, add their own, or otherwise gain the same information about the build.

Mind, I do find the idea that you can't have "some" parts of a build modifiable and others not, annoying, by itself. Had a door design that you could set the angle and direction it opened, only by "moving" the parts, then "setting" them. I since modified it so you can "nudge" it, by touching one side or the other, to the right angle. I did that to make it less annoying to set it, not because I was aware of the restriction. Now... Am am real glad I thought of the solution, since anyone buying a build with it would have come back and asked, "Why can't I set the door?"


Brandon Shinobu added a comment - 19/May/09 09:07 PM
@Kagehi

Honestly, if you want to resize something, I made a JIRA for set of functions that would get and set the scale of the entire linkset, SVC-2885 which would be far more practical than setting it prim by prim anyway. llGetLinkPercentScale isn't really going to help people a lot, especially if the lindens enable megaprims on estate parcels as Andrew Linden has said they would.

I'd rather see a regular llGetLinkPrimitiveParams in use, along with llGetObjectScale and llSetObjectScale to take care of resizing.


Kagehi Kohn added a comment - 19/May/09 11:03 PM
Well, not really Brandon. There may be times where you want to resize "some" of the prims, but not all of them. A good example is something like a belt, or strap, for guns, swords, etc. Where you may want to keep the blade, gun, holster, tools on a belt, or other things "the same size", but you need to be able to size the part that they hand from. Mind, in such cases you still have a serious problem, since drag-resizing lets you adjust only "one side", where as all the scripted functions assume you want to set size "based on center of prim".

Yeah, adding mega-prims would make it a bigger complication, but, frankly, that just brings up the same issues with respect to who gets to "see" the data. In that case, it would still be useful to make functions that return such information to a script, so they can work only if someone other than the creator can't "take advantage" of them by getting information they shouldn't. I.e., the object "must" be no-mod, and the script too.

Other than that issue, it really doesn't matter "how" you get the information, but yes, the ability to scale the entire object would be nice, as would to scale the individual ones, and for a script, when in the "right" conditions, to get and use both.


Argent Stonecutter added a comment - 20/May/09 06:01 AM - edited
Kagehi: there is no need to limit this at all, beyond the limits already in the system. You can already get ALL the same capability as this function using existing calls... it just takes a LOT more CPU time and memory... and limiting this function would just leave people using these more CPU and memory intensive workarounds in place.

darling brody added a comment - 20/May/09 07:50 AM
I agree with Argent.

There is no need for any security on this at all. The effect can be simulated using one script per prim already. This JIRA is about doing it with ONE script, thus saving lots of memory and CPU time.

If you send your products out with no-mod permisisons then they cant use this method or any other in-wordl to copy stuff.
If you send your stuff out with MOD permissions people can already copy them. Even if it is manualy reading the numbered in the edit box.
If they use a copybot or one of the openGL hacks they can copy your stuff no mater what you do.

I know memory and cpu dosnt sound like it is important, but we are about to have a major change to all content in SL, a change that may render lots of things useless. All because LL needs to lower memory and cpu usage. It has never been more important to add functions that permit creaters to lower their scritps memory and cpu requirments.


Stephen Psaltery added a comment - 20/May/09 08:03 AM
Kagehi, exact dimensions are ABSOLUTELY required. I'm not talking about scaling ten meter prims here, most of my prims are UNDER a tenth of a meter. small errors add up quickly. If someone resized their product often enough it would eventually be totally out of proportion and they would come to me saying the product was broken. This would be even worse if I gave the resizer to anyone else to use. Exactness is DEFINITELY required. This function should NOT have limitations. Your workarounds are unneccessarily convoluted. Sure it might delude some into thinking they are secure, but the fact is that it most definitely does not.

We've already established that prims can be copied trivially RIGHT NOW. Nothing this function does or does not do will change that. Add to that many of the changes you are proposing involve sweeping changes to the permissions system that I severely doubt the lindens will ever implement. If we add a lot of complexity to a request they are increasingly LESS likely to implement it.


Stephen Psaltery added a comment - 20/May/09 08:08 AM
Darling, you sum up the issue nicely. The fallacy is this issue should never be about content protection. This function will neither facilitate more than is currently possible nor stop bad behavior.

This issue is about what new things we'll be able to do. Please don't mistake my argument- I am INCREDIBLY in favor of content protection, but as a scripter of many years I intimately know the ins and outs of LSL. So, please believe me when I say this implementation will only add the ability to create new more efficient content.


Kagehi Kohn added a comment - 20/May/09 01:48 PM - edited
No Argent, if you could use existing functions to get this, without the costly work arounds, which includes large numbers of extra scripts, we wouldn't be asking for a function that does more than that. The problem is, anything that does, also *exceeds* the existing limitations, pretty much by definition. Mind, in the case of something no-mod, you can't drop in a new script, however, you can edit notecards, or even scripts if they are not no-mod, so you do need an added restriction, if you don't want someone to get at the data, which they can't get any other way. You can't have prims you can edit in a linkset, along with those that are non-editable, but, you can have scripts you can. If you can't edit the object, you can't currently get the data, with a function like this, you don't need to be able to edit the object itself, just the "contents", which you may be able to (unless I am in error on this too, but I don't think I am). So, to claim, as you can Stephen both do, that it doesn't add a higher risk, is simply wrong.

TigroSpottystripes Katsu added a comment - 20/May/09 04:23 PM
if you can edit scripts, would it be possible to make the script copy itself to other prims in the no-mod object?

anyway, if each prim got at least one script in it, you then would be able to get al the info too, and if the scripts communicate the prim parameters between themselves and the root, you would only need to edit one script


Stephen Psaltery added a comment - 20/May/09 06:36 PM
Tigro, that's exactly the way we do it now. That's my point. A 100 prim object requires 100 scripts at the minimum to operate (as a resizer, or anything that needs to modify/read every prim). With this function it would be ONE script.

TigroSpottystripes Katsu added a comment - 20/May/09 06:53 PM - edited
I was talking about the situation where a no-mod object has a +mod script in it and that script is modified to clone itself and report the data of all the prims in the object

edit: or opposite to what some one i don't feel like checking the name said, you can't save scripts inside a no-mod object?


Faust Vollmar added a comment - 20/May/09 07:09 PM
Modify Scripts in a No Modify Object can't be Opened, atleast in Viewer 1.23 RC2
I don't know if a previous or edited client can forcibly open it and attempt to modify it.

TigroSpottystripes Katsu added a comment - 20/May/09 07:21 PM
that makes sense, I guess we can put that together with the other imaginary dangers of this proposal

Brandon Shinobu added a comment - 20/May/09 07:30 PM - edited
@Faust

I don't believe so. Since scripts are server-side and not clientside, the client wouldn't be able to access scripts it didn't have permission to. It might be able to open a script window, but no information would be downloaded or uploaded.

P.S.

I can confirm, you can't even open scripts that are in no-mod objects. You can take scripts out of no-mod objects, but that doesn't help you any if you're trying to copy the object.


Kagehi Kohn added a comment - 20/May/09 09:59 PM
Ok. Wasn't sure about that. About half the annoyance of trying to build/test/debug things is you can't "make" your own build/scripts behave as though you don't own them, so anything you want to consistently restrict, and make sure "is", you have to have some second party check for you. Its.. annoying, not the least due to the fact that you can do something that "seems" to work when you try it, but turns out to not work at all, if someone else has a copy, unless you are "very clear" on how the behavior is going to change. Drives me nuts.

But, given that fact, obviously there is *absolutely* no reason at all for not giving us the functionality to do these things. The only thing we could get from it is stuff we already "can" see anyway. Still, there are times when more permission granularity would be nice. Like, if I made a door, I wouldn't mind the new owner being able to rotate the "one prim" in the set, that needs to be adjusted, if they want to change which direction it opens. Yeah, I made semi-nice work around, but... its damn stupid to have to. Same might be true if its using "size" to open/close a door, so I want that prim to be sizable in "that" direction only. And, that is without even mentioning annoyances like being unable to make a "forcefield", or anything similar, in, say a ship, you intend to have move, due to the whole thing going phantom, if you needed "one" prim to have that feature (or other similar situations). Some of the limits we have make no sense to me at all.

But, that is a side issue. In this specific case, we are forced to either have a idiot number of scripts, or use what ever memory we have in the one script we are using, to track every single one of those prims. And, that is not quite as bad as 100 scripts, but gets damn close.


TigroSpottystripes Katsu added a comment - 20/May/09 10:16 PM - edited
about having a single prim in a link set be phantom while the rest is solid (and even phys), I'm not sure if it still works, but if it does, what you have to do is make the two things separately, then the thing you want phantom, you make flexy (so it gotta be a prim type that can be made flexy) while leaving the rest solid (or phys), then link the flexy to the rest of the stuff (and not the other way around, the flexy can't be root), perhaps before linking, set the flexy parameters to make that prim the stiffest possible so it will not move much. After linked, there is the risk that changing the phantom, phys or flexy flags of any of the prims in the link set will either make everything phantom or unflexify and solidify the phantom prim, you gotta test, and probably shouldn't try your luck too much later. I invented this technique to make a single linkset pool with water you can go thru but walls that are solid quite some time ago, or perhaps I'm confusing it and I first discovered how to give a long flexy body to this phys snake I created quite some time ago and then just adapted the idea to non-phys use, dunno

and for the adjusthing the door thing, an idea I came up with for a product I ended up never making, have your product rez a full perm prim for the owner to adjust, and have that prim report it's data to the no-mod object thru hidden channels, this way you give the user full access to the prim editing tools without having to make your actual product +mod


Kagehi Kohn added a comment - 21/May/09 01:47 AM - edited
My solution was simpler than that for the door. I just turn on a test for adjustment mode. So, the owner can click "set door" on the menu, then if they click on one side it "shifts" the door that direction by 5 degrees, or the otherwise, it shifts it the other direction, by the same amount. Default is "open out, and by 90 degrees", but this way they can set the final positions to anything they want. The only drawback is that you can't set it "off its hing", or such, doing it that way. But, then.. Kind of wish they had physics that let you define pivots, and springiness, so you could make physical plants, like you see in other games, that "react" to you walking through them, or a door that would shove out of the way, then swing back, when you walk through.

Its ironic that, in a system intended to offer "build anything" realism isn't a criteria. lol

Hmm. Just thinking.. Wind is one of those things.. Wind changed direction, the entire sim experiences it at once. If you wanted to, you could script "some" things to apply "force" based on the wind, but "delay" it, so that the "effect" happens based on how far from the edge of the sim the wind is coming from the object is. More realistic, but.. you have to plug in more script to do it. Not sure of the overhead of the sim reported it based on position by default, instead. Oh well..


BETLOG Hax added a comment - 21/May/09 02:56 AM - edited
@Kagehi Kohn - try scripted flex and collision_start( )

No offence to anyone, but can we stay on topic?
These topics are at constant peril of being filled with so much barely relevant comment and almost-advertising that I'm hardly surprised the lindens can't/don't process them effectively.

Also:
Existing function: llSetRemoteScriptAccessPin(); - to pre-prepare prims for scripted insertion of scripts AND/OR retrieval of parameters
Existing function: llRemoteLoadScriptPin() - to actually DO the script push AND/OR parameter retrieval.... with:
Requested function: llGetLinkPrimitiveParameters(integer link, integer PIN, list params); with function delay 0.0 seconds

Image attached: linkmessages/sim being badly effected by unknowingly overscripted avatars.


Argent Stonecutter added a comment - 21/May/09 05:48 AM
@Kagehi: "No Argent, if you could use existing functions to get this, without the costly work arounds, which includes large numbers of extra scripts, we wouldn't be asking for a function that does more than that."

People who are ripping content have no reason to care if the workarounds are costly because they are not the ones paying the cost. Therefore there is no reason to limit it in any way. None. Zip. Zero. You are doing nothing but muddying the waters. You are not moving this proposal forward by drumming up more complex and more limited alternatives in this JIRA. If you are having any effect, it is to delay implementation by creating the appearance that there is a reason to oppose it as it stands.


darling brody added a comment - 21/May/09 08:38 AM - edited

*********************************************************

FINAL SAY

No one, and I mean NO ONE uses LSL scripts to steal content. It is all done using a modified viewer program running on their own home computer.

Anyone here talking about this function as if it is a pirating tool is a fool and should stop participating in the jira until they understand the issues. No offence, just the painfull truth

This function has the potencial to significantly lower lag and improve performance for everyone. Noone wants to be stuck with a skirt or hair that prevents them from attaching their flight assist due to the upcomming script limits per avatar. So get with the program people. Do some research before opening your cake hole!

This tantrum was brought to you by too much caffein combined with too many silly people.

*********************************************************


Kagehi Kohn added a comment - 21/May/09 01:12 PM
Not silly, just not aware. I don't spend a lot of time trying to take apart other people's builds, and you can't test certain things on your own, so, I didn't know what the actual limits where. I swear I was able to 'edit linked parts' on one, or something one time, but, apparently I am incorrect. As I stated in my last post, there is no reason at all not to have this, given my mistaken assumptions. That others insisted on continuing to correct me "after" I admitted this...

So, yes. Lets get rid of the unnecessary lag not having it causes. Sorry for the off topics though. Just a few things that bug me, and the solutions are, like in the case of the topic of discussion, less than optimal "in the current design", and also add lag you don't need. Seriously, scripting 200 bushes to flex when you walk through them? Even if it works, its a stupid solution, no offense. The point of the entire post was "something we need that can prevent lag", not, "More ways to add it." lol


Arawn Spitteler added a comment - 11/Aug/09 12:24 PM
Linking to the low hanging upgrades meta issue.
Note: It would be nice, if this function could return the agent target, of linked agents, rather than the llDetectedPos of the Avatar, as there's a distinction inconvenient for fine work.

EddyFragment Robonaught added a comment - 27/Oct/09 12:05 AM
Why is this not assigned or even commented on at all by a Linden?

Servian Serevi added a comment - 30/Oct/09 08:22 AM
This function would vastly reduce the amount of coding required for manupulation and functionality of linked sets.

Are there any Lindens out there who can Champion this feature? Why isn't this already done?!!!


BlackLotus Swansong added a comment - 31/Oct/09 08:22 PM
llBeginRant(ExtreamVolume) { Exactly how many votes does it take *while* at high priority for anything to even be said about this by a linden? The fact that it is high priority and not assigned to any one for resolution says to me that we shall never see *any* progress on the workings of this. That and the fact that this request has now been open for over 2 years! As of late I have seen SL go in reverse of its original design. Instead of advancing and moving forward in its abilities, all I see are more restriction on current functions and abilities of its *paying* community! }

llEndRant();
llUnSit;
llDie;


EddyFragment Robonaught added a comment - 01/Nov/09 12:45 AM
Anyone who knows me will understand that I am not laughing at BlackLotus. I am of course in full agreement with BlackLotus.I just had to say....

LMFAO!!

llEndRant();
llUnSit();
llDie();

You rock!!

The shame is that it is funny because it is EXACTLY how I feel. I slump every time I come here. LL is bad for my posture.

TY BlackLotus. Really laughed.


Sauce Sorrowman added a comment - 09/Nov/09 01:16 PM
Definitely need this. It should not take so much effort to simply get the position of link primitives.

Revolution Perenti added a comment - 14/Nov/09 06:45 PM
this issue would solve an big issue with performance some products of mine i had to use llGetLinkPrimitiveParams in almost 100 prims and some of my wiki scripts using upto 20 or so
we really need this llGetLinkPrimitiveParams so we can do same task in 1 script of the root prim

Rev