Jump to content

Void Singer

Resident
  • Posts

    7,967
  • Joined

  • Last visited

Everything posted by Void Singer

  1. unfortunately somone was bad, or may not have realized.... I have a strict policy dealing with SL... I'll deal with standalone inworld solutions only. for me, that's the novelty that keeps it from being like work (and keeps my bosses appeased while doing it on their time :smileywink: ) if you have a specific question, someone may be willing to answer it, however if it's more indepth to the point you'll need to contract with someone (which seems to be the case) you'll really want the link to the employment forum above (though my thanks to whoever thought of me) ETA: I hadn't checked my message yet this morning either, so sorry for not getting back to you.
  2. notepad++ just a simple highlighter, with a few options, but highly configurable
  3. this is not theforum you are looking for, you want this one
  4. hey, you were the one that brought up RZ... and not only did I read the jira, I commented... AGAINST it =)
  5. two problems.... voting is dead (you must "watch" and be spammed) RZ modified it's policy to require consent for viewing alts, you'll need a dog to kick (I hear that quickpro is da ebil)
  6. oooo wait... I just realized.... I can haz MACRO Smileys........ MUAHAHAHAHAHAHA **Only uploaded images may be used in postings** what?!?! bastardssssssssssssssssss.............................
  7. and still no bloody eyeroll >_<
  8. holy hell, the first time support suggest that I download and install THAT crap I'm going to go ballistic.
  9. it would appear that the action link menu is broken, and you can't mark posts here read without viewing every single one ETA: I had seen that, but it looks to be a global setting and if I do that just to clear one section I'll be wiping them all.... all the forums have the same "message options" link menu at the top that allow you to bulk change read status for that section... just seems like they disabled it in answerss... thought mayber there was an alternate control I missed
  10. Ceera Murakami wrote: Well, I'm still around. Slowly finding where they moved things like the Scripting Library and the LSL Wiki... they didn't do anything with the LSL_Portal..... I'd have to kill them otherwise. ps... what? no one missed me? (yeah ok, I'm a large and slow moving target, I get it)
  11. ooo I like it.... I guess there's more than one way to skin this cat =)
  12. there is only one way that I know of to reliably force script execution on first owner (after creator).... that is to have the item sold as "buy original" while it's inworld. a simple way to achieve this is to set up a touch rezzor, that rezzes your item to be sold, which should probably be set to temp_on_rez, or scripted to die if not bought. when it's recieves the changed event with changed owner it can stop being temp_on_rez or the countdown till death can be halted.... and the first owner registered.
  13. since we're being literal..... shift+g (reference mode, with the currently selectid prim as the ruler) ctrl+z (undo, great for undoing moves of shift dragged items to resore position) ctrl+y (redo) ctrl+alt+D (debug menu, needs to be open in V2 for some shorcut keys to work) ctrl+alt+shft+T (send prim texture information to chat history. if a single side is selected it gives you the side number, which is useful for scripts) show develop menu (located in debug meno on v2, needs to be open for the previous trick to work) use the alignment textures listed here to help you texture your prims more accurately, and learn to use planar mapping mode. learn to use reference mode in build.... it'll double your building speed almost instantly strongly consider using a TPV client to build with, as they have better tools, like Align Prims, Align Planar Textures, and higer displayed precision to numbers, and some let you inmport/export your own creations to your HD, and automatically select different default properties for type, textures, embeded contents, etc.
  14. well you say the vendor is meant to be square.... can you use the +z face to it's display? if so, you can use slice to make the vendor thinner, while still maintining a gap on the corner resize handles.... you can also make it thinner to reduce the available downsize range, or make it the same visual width as before, but allow it to be sized even smaller than it used to be able.... (of course you are always welcome to use my resizer package in the library too, which lets you place any limits you like on the size, and is user removeable)
  15. PeterCanessa Oh wrote: Paladin Pinion wrote: I'm mostly just delighted that Kelly posted at all. QFT! I'd even go for "I'm mostly just delighted that Kelly" (exists, didn't get fired, posts, etc.) :smileyvery-happy: lol, seconded PS welcome to the content fora Kelly, were we actually like Lindens... (most days =X)
  16. Qie Niangao wrote: Is there some reason why some badges have rounded corners and others are square? And why some have a heavy black box surrounding the whole badge? (Is that part of the badge, or some attribute of the post?) badges are using some css magic for the rounding, and yes the heavy black box is part of it, it's actually a background image.... for some reason, the default badge backgrounds (3 of them) aren't being shrunk to fit, like you can with custom images. for users of firebug you can restore the default badge style (that you can't normally select after you choose a theme) by right clicking beside the toyko them, 'inspect element', open that element to see the hidden input inside it, and changing the value to "tb_none", then hitting save on the page....
  17. on top of Dilberts suggestion you may also want to check your network connection. inworld you can check your ping time by pressing ctrl+shft+1 (you may need the debug and delevop menus open in V2 [ctrl+alt+D to open debug menu, and develop can be opened from the debug menu]) ping should be below 100, but shouldn't hurt is it's below 200. you should also check your network connections (speedtest.net, to a local and california server) and also make sure you are not using wireless (for some reason the stream is very sensitive to wireles inerference) ETA: just a follow up... so it was you network bandwidth setting in the client? how odd... although that would lead me to Think Drazen was on the right track (PS, Dilberts right, ALWAYS use separate caches, LL changes things between versions and it can bork other viewers settings)
  18. and for those who haven't figured it out already, you can upload a 1x1 transparent image for your avatar, which will NOT push your name down the screen, and will shorten the height of your badge.... you can also select what information to include in your badge (topic = the number of threads you started, solutions = correct answers, blogs doesn't apply to reident I don't think, nor ideas) which will also affect the height of the badge.... if you want a static picture that can't change, pad the bottom with white ETA: width is only 146px in thread view, 169 in settings view. you'll lose 23px off the right side, so pad that with extra view in case it DOES display somewhere
  19. adding an update.... you can make your life easier by going to My Settings --> Macros and entering the following.... Macro 1 title: Script Paste Macro 1: <pre><span style="white-space: pre;">Replace</span></pre> then when you are in a post there will be a Macros combo box on the right of the editor tool bar, and when you select "Script Paste" it will paste a textbox with the word replace into the window, and if you double click the word and paste over top of it, the span style will remain ... unfortunately does NOT work for pastes from the LSL_Portal, as those replace both the pre tag and the the span tag, but works great from plaintext sources like the inworld editor.
  20. Forum copy of the file: To Open the v7-D Zen Resizer Menu, click on your product, hold for 2 seconds then release.If you recieve a Message in chat that the dialog Timed out, repeat the above step to continueClick on a dialog button to use the function listed- "Save" will save the current size as default- "-Script" will remove the "v7-D Zen Resizer" script from your object permanently- "Recall" will reset the objects size to the last saved size- "Done" will cancel the dialog- All other dialog buttons will modify the size of your object by the listed amount to a minimum of 0.00% and a maximum of 100.00%v7-D Zen Resizer©2010 (CC-BY) [ http://creativecommons.org/licenses/by/3.0 ]Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]
  21. Forum Copy of the file: // this is a comment, comments are good. anything begining with "//" will be ignored. so will blank lines.txt0 = (v7-D Zen Resizer) Reading Notecard...txt1 = (v7-D Zen Resizer) Notecard Read Failed; Retrying...txt2 = (v7-D Zen Resizer) Ready.txt3 = (v7-D Zen Resizer) Set Info Missing; Resize Aborted.txt4 = (v7-D Zen Resizer) Resizing...txt5 = (v7-D Zen Resizer) Resize Done.txt6 = (v7-D Zen Resizer) Current Size Saved.txt7 = (v7-D Zen Resizer) Dialog Timed Out.txt8 = v7-D (v7-D Zen Resizer) v1.3\n\nCurrent Size:btn00 = +0.02%btn01 = -0.02%btn02 = Donebtn03 = +0.2%btn04 = -0.2%btn05 = Recallbtn06 = +2%btn07 = -2%btn08 = Savebtn09 = +20%btn10 = -20%btn11 = -Scriptset = <0.0,0.0,0.0>EOF//-- Notecard must have the same name as the script plus ".cfg" added to the end (no quotes)//-- You may have multiple notecards, each in a different language. to specify the//-- language add the language code to the end of that. example: ".ja" for japanese//-- Examples: "v7-D Zen Resizer.cfg.ja", or "v7-D Zen Resizer.cfg"//-- the first would be used if the user had japanese as their SL client language//-- the second would be used if no language could be found (or was not shared with object by the client)//-- See [ http://wiki.secondlife.com/wiki/LlGetAgentLanguage ], for more details.//-- text section explanation, replace with translated text, any missing line will use script defaults//-- you may inlcude line breaks by using "\n" in these texts//txt0 = <tell user we're reading the notecard> (this line should always be first in translations, and should ALWAYS be present)//txt1 = <tell user we're going to reset reading the notecard because it timed out> (should always be the second line in translations)//txt2 = <tell user: info missing, cannot resize>//txt3 = <tell user: done reading notecard, ready to work>//txt4 = <tell user: resizing the set> (in case the visual change isn't noticable)//txt5 = <tell user: done resizing the set>//txt6 = <tell user: saved current size>//txt7 = <tell user: dialog timed out> (user took to long to make a choice, needs to reopen dialog to continue)//txt8 = <Special: dialog box text to show user, the current percentage will be added to the end>//-- button section explanation, replace with translated text, any missing line will use script defaults//-- percentages must be from 0.01 to 100.00 (thoundands of whole percent)//btn00 = <+/- percentage> (blank to disable)//btn01 = <+/- percentage> (blank to disable)//btn02 = <Closes Dialog>//btn03 = <+/- percentage> (blank to disable)//btn04 = <+/- percentage> (blank to disable)//btn05 = <Reset to Saved Percentage>//btn06 = <+/- percentage> (blank to disable)//btn07 = <+/- percentage> (blank to disable)//btn08 = <Save Current Percentage> (blank to disable)//btn09 = <+/- percentage> (blank to disable)//btn10 = <+/- percentage> (blank to disable)//btn11 = <Remove Script> (blank to disable)//-- Set value explanation: code from the prep script (remove this line to default to script or description field values)//set = <0.0,0.0,0.0>//-- "EOF" (no quotes) is a super comment, nothing after it will be read
  22. Forum copy of the file: /*//( v7-D Zen Resizer (lite) v1.4 )//*//*//-- Notes: Do Not Move/Rotate Object While It Is Resizing, it WILL break [LSL Limitation] (attached to moving av is safe) - a bad idea for physics objects, or objects with active move/rotation scripts, or object being edited (this limitation will be removed in the MONO Version I just haven't rewritten it yet) The gNfoSet Global, and uAdjSiz function can easily be reused in custom scripts//*//*//-- Menu Variables --//*/ //-- timeout for dialog listens and notecard readsfloat gFltTmt = 45.0; //-- Default Dialog Buttonslist gLstBtn = ["+0.02%", "-0.02%", "Done", "+0.2%", "-0.2%", "Recall", "+2%", "-2%", "Save", "+20%", "-20%", "-Script"]; //-- Default User Textlist gLstTxt = ["(v7-D Zen Resizer) Reading Notecard...", "(v7-D Zen Resizer) Notecard Read Failed; Retrying...", "(v7-D Zen Resizer) Ready.", "(v7-D Zen Resizer) Set Info Missing; Resize Aborted.", "(v7-D Zen Resizer) Resizing...", "(v7-D Zen Resizer) Resize Done.", "(v7-D Zen Resizer) Current Size Saved.", "(v7-D Zen Resizer) Dialog Timed Out.", "v7-D Zen Resizer v1.3\n\nCurrent Size:"];/*//-- The Centerpiece Global, stores the --//*/rotation gNfoSet = <0.0, 0.0, 0.0, 0.0>;/*//-- do not modify these variables. --//*/ //-- key of the user given the resize dialog (also used to store the notecard request id)key gKeyMnu; //-- channel the dialog will use (calculated per user) (also used to store the current notecard line)integer gIntChn; //-- stores the calculated name of the notecard (including translation if available)string gStrNCL; //-- Adjust Set SizeuAdjSiz( float vFltNew ){ //-- clamp vFltNew to valid percentage [0.0, 1.0] vFltNew = (vFltNew * (vFltNew > 0.0) - 1.0) * (vFltNew < 1.0) + 1.0; //-- only run if previous percent greater or less than next percentage? (0 means the same) if ((vFltNew < gNfoSet.z) - (vFltNew > gNfoSet.z)){ //-- get the current root size for comparison vector vSizOld = llGetScale(); //-- save the new percentage to gNfoSet, and reuse gFltNew to save the relative change percentage vFltNew = (gNfoSet.x + gNfoSet.y * (gNfoSet.z = vFltNew)) / vSizOld.x; //-- intialize a temp list for holding child prims size/offset list vLstTmp; //-- get the number of prims for our loop + 1 (make loops cleaner later) //-- llGetObjectPrimCount doesn't count seated avs, but returns 0 for attachments //-- llGetNumberOfPrims works on attachments, but counts seated avs when detached //-- !!llGetAttached returns TRUE(1) if attached, or FALSE(0) if not, to cancel #ofPrims if unattached. integer vIntCnt = ~-(llGetObjectPrimCount( llGetKey() ) + llGetNumberOfPrims() * !!llGetAttached()); //-- set the root prim separately since it's position will not change llSetLinkPrimitiveParamsFast( LINK_THIS, [PRIM_SIZE, vSizOld * vFltNew] ); while (~-(--vIntCnt)){ vLstTmp = llGetLinkPrimitiveParams( vIntCnt, [PRIM_SIZE, PRIM_POSITION] ); llSetLinkPrimitiveParamsFast( vIntCnt, [PRIM_SIZE, llList2Vector( vLstTmp, 0 ) * vFltNew, PRIM_POS_LOCAL, llList2Vector( vLstTmp, 1 ) * vFltNew] ); } }} //-- MenuuDialog(){ //-- Format the Current Size Percentage to thousandths of percent string vStrPct = (string)llRound( gNfoSet.z * 10000.0 ); if (llStringLength( vStrPct ) < 3){ vStrPct = llGetSubString( "00" + vStrPct, -3 , -1 ); } //-- Pop the dialog llDialog( gKeyMnu, llList2String( gLstTxt, 8 ) + llInsertString( vStrPct, llStringLength( vStrPct ) - 2, "." ) + "%", gLstBtn, gIntChn ); //-- set a timeout to capture dialog cancelation and close the listen llSetTimerEvent( gFltTmt );}uChkNfo(){ //-- are we missing linkset information? if (0.0 == gNfoSet.y){ //-- set it from the description if it's available string vStrTmp = llGetObjectDesc(); integer vIdxTmp = llSubStringIndex( vStrTmp, "set=" ); if (~vIdxTmp){ gNfoSet = (rotation)llGetSubString( vStrTmp, vIdxTmp + 4, 0xFFFFFFFF ); } } //-- if we have a valid info set, make sure to set an accurate current percentage. if (gNfoSet.y){ vector vSizTmp = llGetScale(); gNfoSet.z = (vSizTmp.x - gNfoSet.x) / gNfoSet.y; }}default{ state_entry(){ //-- Check for language specific notecard if (~llGetInventoryType( gStrNCL = llGetScriptName() + ".cfg." + llGetAgentLanguage( llGetOwner() ) )){ //-- check for default notecard }else if (~llGetInventoryType( gStrNCL = llGetScriptName() + ".cfg")){ }else{ //-- no notecard available gStrNCL = ""; } //-- if there is a notecard, start reading it if (gStrNCL){ //-- pre-use the av global to verify notecard reads gKeyMnu = llGetNotecardLine( gStrNCL, gIntChn ); //-- set a timeout for notecard reads llSetTimerEvent( gFltTmt ); }else{ //-- make sure we have good information for the set uChkNfo(); //-- fast timeout to avoid dumping changed events llSetTimerEvent( 0.01 ); } } dataserver( key vKeyQry, string vStrDta ){ //-- make sure this event was triggered by our script if (gKeyMnu == vKeyQry){ //-- are we done reading the notecard? if (EOF == vStrDta || "EOF" == vStrDta){ //-- make sure we have good information for the set uChkNfo(); //-- clear key to signal that the notecard reads are done gKeyMnu = ""; //-- fast timeout to avoid dumping changed events llSetTimerEvent( 0.01 ); }else{ //-- we have not reached the end of the notecard //-- Strip comments and extra spaces, and see if there's anything left for us if (vStrDta = llStringTrim( llList2String( llParseStringKeepNulls( vStrDta, ["//"], [] ), 0 ), STRING_TRIM ) ){ //-- check if we have variable data to parse integer vIdxTyp = llListFindList( ["set", "btn", "txt"], (list)llToLower( llGetSubString( vStrDta, 0, 2 ) ) ); if (~vIdxTyp){ //-- remove header and extra spaces integer vIdxVar = (integer)llGetSubString( vStrDta, 3, ~-llSubStringIndex( vStrDta, "=" ) ); vStrDta = llStringTrim( llDeleteSubString( vStrDta, 0, llSubStringIndex( vStrDta, "=" ) ), STRING_TRIM ); if (2 & vIdxTyp){ //-- text //-- replace default text with notecard text (line breaks corrected) gLstTxt = llListReplaceList( gLstTxt, (list)llDumpList2String( llParseStringKeepNulls( vStrDta, ["\\n"], [] ), "\n" ), vIdxVar, vIdxVar ); if (!vIdxVar){ //-- if we get the "reading notecard" translation, tell user immediately. (that's why that line goes first and is always included) llOwnerSay( llList2String( gLstTxt, 0 ) ); } }else if (1 & vIdxTyp){ //-- buttons //-- replace default buton label with notecard button label gLstBtn = llListReplaceList( gLstBtn, (list)vStrDta, vIdxVar, vIdxVar ); }else{ //-- set info //-- replace default set info with notecard set info (this overrides the description field info) gNfoSet = (rotation)vStrDta; } } } //-- call the next line of the notecard gKeyMnu = llGetNotecardLine( gStrNCL, ++gIntChn ); //-- reset the notecard timeout llSetTimerEvent( gFltTmt ); } } } timer(){ //-- are we still trying to read a notecard? if (gKeyMnu){ llOwnerSay( llList2String( gLstTxt, 1 ) ); gKeyMnu = llGetNotecardLine( gStrNCL, gIntChn = 0 ); }else{ //-- we are done with this state //-- tell the user we're ready llOwnerSay( llList2String( gLstTxt, 2 ) ); //-- go to the ready state state sRdy; } } //-- if we change users, reset the script to detect language changed( integer vBitChg ){ if (CHANGED_OWNER & vBitChg){ llResetScript(); } }}state sRdy{ state_entry(){ //-- clear timers set by other states llSetTimerEvent( 0.0 ); } //-- oh look, outside script triggering =P link_message( integer vIntSrc, integer vIntAmt, string vStrCmd, key vKeyAvt ){ //-- link messages to us must have string = script name if (llGetScriptName() == vStrCmd){ if (vKeyAvt){ //-- if a key was sent open the dialog for that av gKeyMnu = vKeyAvt; state sRun; }else{ //-- much cooler, lets you build your own menu method, and trigger //-- the resize by sending an integer in hundredths of percent //-- -1 resets to default, <-1 saves the current percentage as default if (vIntAmt >> 31){ // neg value, it's a command vIntAmt += 4; //-- reset range to positive, makes parse easier if (vIntAmt > 0xFFFFFFFF){ //-- discard original values under -3 if (2 & vIntAmt){//-- CMD = recall if (gNfoSet.y){ //-- check for prep values uAdjSiz( gNfoSet.s ); }else{ //-- set failure flag vIntAmt = 0xFFFFFFFF; } }else if (1 & vIntAmt){ //-- CMD = Save gNfoSet.s = gNfoSet.z; }else{ //-- CMD = remove script llRemoveInventory( llGetScriptName() ); llMessageLinked( vIntSrc, 1, llGetScriptName() + "_", "" ); } } }else{ //-- positive value, CMD = set custom percentage if (gNfoSet.y){ //-- check for prep values uAdjSiz( vIntAmt / 10000.0 ); }else{ //-- set Failure Flag vIntAmt = 0xFFFFFFFF; } } llMessageLinked( vIntSrc, !(vIntAmt >> 31), llGetScriptName() + "_", "" ); } } } //-- or lame old hold for 2sec trigger for the owner touch_start( integer vIntNul ){ llResetTime(); } touch_end( integer vIntNul ){ //-- test to see if touch lasted longer than 1 second if ((integer)llGetTime()){ //-- was it the owner? if ((gKeyMnu = llGetOwner()) == llDetectedKey( 0 )){ //-- send em to the dialog state state sRun; } } } //-- if owner changes, jump back to default to retry language detection changed( integer vBitChg ){ if (CHANGED_OWNER & vBitChg){ state default; } }} //-- this state is a pointless exercise in a generic menuing //-- system. you could replace it with just about any menu stylestate sRun{ state_entry(){ //-- set up a semi-unique channel based on the av we're serving gIntChn = (integer)("0xF" + llGetSubString( gKeyMnu, 0, 6 )); //-- open a listen on that channel to that av llListen( gIntChn, "", gKeyMnu, "" ); //-- send them a dialg uDialog(); } listen( integer vIntNul, string vStrNul, key vKeyNul, string vStrCmd ){ //-- which dialog button was pressed integer vIdxCmd = llListFindList( gLstBtn, (list)vStrCmd ); //-- do we have a valid command if (~vIdxCmd){ //-- only process non-blank buttons if (vStrCmd){ //-- is it in the right hand column if (vIdxCmd % 3 == 2){ //-- get smaller indexes so we can parse faster vIdxCmd /= 3; if (2 & vIdxCmd){ if (1 & vIdxCmd){ //-- original index = 11: remove script llRemoveInventory( llGetScriptName() ); //-- inventory removal may fire slow, avoid triggering a new dialog return; }else{ //-- original index = 8: save default gNfoSet.s = gNfoSet.z; //-- tell the user llOwnerSay( llList2String( gLstTxt, 6 ) ); } }else if (1 & vIdxCmd){ //-- original index = 5: restore default size if (gNfoSet.y){ //-- make sure we have valid information //-- tell user we started resizing llOwnerSay( llList2String( gLstTxt, 4 ) ); uAdjSiz( gNfoSet.s ); //-- tell user we're done resizing llOwnerSay( llList2String( gLstTxt, 5 ) ); }else{ //-- prep variable missing, abort llOwnerSay( llList2String( gLstTxt, 3 ) ); } }else{ //-- original index = 2: exit menu state sRdy; } //-- must be a resize amount, apply it if we have good prep }else if (gNfoSet.y){ //-- tell user we started resizing llOwnerSay( llList2String( gLstTxt, 4 ) ); uAdjSiz( (float)vStrCmd / 100.0 + gNfoSet.z ); //-- tell user we're done resizing llOwnerSay( llList2String( gLstTxt, 5 ) ); }else{ //-- prep variable missing, abort llOwnerSay( llList2String( gLstTxt, 3 ) ); } } //-- retrigger the dialog uDialog(); } } timer(){ //-- tell the user they took too long to respond llOwnerSay( llList2String( gLstTxt, 7 ) ); //-- go back to waiting state sRdy; } //-- if owner changes, jump back to default to retry language detection changed( integer vBitChg ){ if (CHANGED_OWNER & vBitChg){ state default; } }}/*//-- License Text --//*//*// Free to copy, use, modify, distribute, or sell, with attribution. //*//*// ©2010 (CC-BY) [ http://creativecommons.org/licenses/by/3.0 ] //*//*// Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ] //*//*// All usages must contain a plain text copy of the previous 2 lines. //*//*//-- --//*/
  23. Forum copy of the file: :: This is a comment, comments are good. anything starting with "::" and after is a comment:: this notecard must be named the same as the script with ".cfg" (no quotes) added to the end:: values may be translated, please include the "//" in txt0 for safety, line breaks wil be inserted for every instance of "\n" (no quotes)txt0 = // You may paste the following line into your notecard:txt1 = Resize the object (in edit, via a corner grab) to the DEFAULT size you want, then press "OK"\n\n(This size will automatically be restored when done)txt2 = Resize the object (in edit, via a corner grab) to the SMALLEST size you want available, then press "OK"\n\n(This size must be SMALLER than the DEFAULT)txt3 = Resize the object (in edit, via a corner grab) to the LARGEST size you want available, then press "OK"\n\n(this size must be LARGER than the DEFAULT)txt4 = Done!\n\nThe set variable is saved to the object's description field, and has been sent to your chat history window. You may remove this script now.
  24. Forum copy of file: /*//( v7-D Zen Resizer (lite) Prep v1.4 )//*///-- these variable may be translated here or in an optional notecardlist gLstTxt = ["// You may paste the following line into your notecard:", "Resize the object (in edit, via a corner grab) to the DEFAULT size you want, then press \"OK\"\n\n(This size will automatically be restored when done)", "Resize the object (in edit, via a corner grab) to the SMALLEST size you want available, then press \"OK\"\n\n(This size must be SMALLER than the DEFAULT)", "Resize the object (in edit, via a corner grab) to the LARGEST size you want available, then press \"OK\"\n\n(this size must be LARGER than the DEFAULT)", "Done!\n\nThe Object Stats are saved to the objects description field, and have been sent to your chat window (you may include it in your notecard)"];list gLstVal;integer gIntCnt;rotation gNfoSet = <0.0, 0.0, 0.0, 0.0>;key gKeyChk;string gStrNCL; //-- Adjust Set SizeuAdjSiz( float vFltNew ){ //-- clamp vFltNew to valid percentage [0.0, 1.0] vFltNew = (vFltNew * (vFltNew > 0.0) - 1.0) * (vFltNew < 1.0) + 1.0; //-- only run if previous percent greater or less than next percentage? (0 means the same) if ((vFltNew < gNfoSet.z) - (vFltNew > gNfoSet.z)){ //-- get the current root size for comparison vector vSizOld = llGetScale(); //-- save the new percentage to gNfoSet, and reuse gFltNew to save the relative change percentage vFltNew = (gNfoSet.x + gNfoSet.y * (gNfoSet.z = vFltNew)) / vSizOld.x; //-- intialize a temp list for holding child prims size/offset list vLstTmp; //-- get the number of prims for our loop + 1 (make loops cleaner later) //-- llGetObjectPrimCount doesn't count seated avs, but returns 0 for attachments //-- llGetNumberOfPrims works on attachments, but counts seated avs when detached //-- !!llGetAttached returns TRUE(1) if attached, or FALSE(0) if not, to cancel #ofPrims if unattached. integer vIntCnt = ~-(llGetObjectPrimCount( llGetKey() ) + llGetNumberOfPrims() * !!llGetAttached()); //-- set the root prim separately since it's position will not change llSetLinkPrimitiveParamsFast( LINK_THIS, [PRIM_SIZE, vSizOld * vFltNew] ); while (~-(--vIntCnt)){ vLstTmp = llGetLinkPrimitiveParams( vIntCnt, [PRIM_SIZE, PRIM_POSITION] ); llSetLinkPrimitiveParamsFast( vIntCnt, [PRIM_SIZE, llList2Vector( vLstTmp, 0 ) * vFltNew, PRIM_POS_LOCAL, llList2Vector( vLstTmp, 1 ) * vFltNew] ); } }}default{ state_entry(){ gStrNCL = llGetScriptName() + ".cfg"; if (~llGetInventoryType( gStrNCL )){ gKeyChk = llGetNotecardLine( gStrNCL, gIntCnt ); }else{ state sRdy; } } dataserver( key vKeyQry, string vStrDta ){ if (gKeyChk == vKeyQry){ if (EOF == vStrDta){ state sRdy; }else{ if (vStrDta = llStringTrim( llList2String( llParseString2List( vStrDta, ["::"], [] ), 0 ), STRING_TRIM )){ if (!llSubStringIndex( llToLower( vStrDta ), "txt" )){ integer vIdxTxt = (integer)llGetSubString( vStrDta, 3, 0xFFFFFFFF ); vStrDta = (string)llList2List( llParseStringKeepNulls( vStrDta, ["="], [] ), 1, 0xFFFFFFFF ); gLstTxt = llListReplaceList( gLstTxt, (list)llDumpList2String( llParseStringKeepNulls( vStrDta, ["\\n"], [] ), "\n" ), vIdxTxt, vIdxTxt ); } } gKeyChk = llGetNotecardLine( gStrNCL, ++gIntCnt ); } } }}state sRdy{ state_entry(){ gIntCnt = -4; } touch_end( integer vIntNul ){ if (llGetOwner() == llDetectedKey( 0 )){ state sRun; } } changed( integer vBitChg ){ if (CHANGED_INVENTORY & vBitChg){ if (~llGetInventoryType( gStrNCL )){ llResetScript(); } } }}state sRun{ state_entry(){ integer vIntChn = (integer)("0xF" + llGetSubString( llGetOwner(), 0, 6 )); llListen( vIntChn, "", llGetOwner(), "OK"); llDialog( llGetOwner(), llList2String( gLstTxt, gIntCnt ), [], vIntChn ); } listen( integer vIntChn, string vStrNul, key vKeyOwn, string vStrNull ){ vector vSizTst = llGetScale(); gLstVal += (list)vSizTst.x; if (~(++gIntCnt)){ llDialog( vKeyOwn, llList2String( gLstTxt, gIntCnt ), [], vIntChn ); }else{ //-- calculate the info needed for the set. gNfoSet.x = llList2Float( gLstVal, 1 ); gNfoSet.y = llList2Float( gLstVal, 2 ) - gNfoSet.x; gNfoSet.z = 1.0; gNfoSet.s = (llList2Float( gLstVal, 0 ) - gNfoSet.x) / gNfoSet.y; gLstVal = []; //-- clear the values list in case the user wants to do this again. //-- LSL has some weird rounding of rotations, but it's ignored if you diredctly print the elements llSetObjectDesc( "set=<" + (string)gNfoSet.x + "," + (string)gNfoSet.y + "," + (string)gNfoSet.s + "," + (string)gNfoSet.s + ">" ); //-- avoid rounding errors in chat and pull the "set" variable from the description we just installed llOwnerSay( "\n" + llList2String( gLstTxt, 0) + "\n" + llGetObjectDesc() ); uAdjSiz( gNfoSet.s ); llDialog( llGetOwner(), llList2String( gLstTxt, -1 ), [], vIntChn ); state sRdy; } }}/*//-- License Text --//*//*// Free to copy, use, modify, distribute, or sell, with attribution. //*//*// ©2010 (CC-BY) [ http://creativecommons.org/licenses/by/3.0 ] //*//*// Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ] //*//*// All usages must contain a plain text copy of the previous 2 lines. //*//*//-- --//*/
  25. EDIT: corrected a bug, and updated the core script to work faster and cleaner (new functions allowed prevention of problems for physics/moving objects) Contents: v7-D Zen Resizer (lite) Prepv7-D Zen Resizer (lite) Prep.cfgv7-D Zen Resizer (lite)v7-D Zen Resizer (lite).cfgv7-D Zen Resizer (lite): User ManualFeatures: Drag and Drop Design (minimal to no editing at all)Clear Simple InstructionsMultiple configurations possibleOpen source scripts let you modify directly in the script if desiredMulti Language SupportAllows end users to set and restore their own default (in the range you allow)Allows end user to remove the resize scriptAllows you to disable the the above user functions NOT fully compatible with scripted objects that change the size/position of individual prims.WARNING: Do not attempt to edit size/ link position while resize is runningEnd User Features: Single LSO script, triggers after a two second touch/hold to avoid triggering when other touch scripts are present (and to override v2x dialogs)Auto-language detection on ownership change (where reported, creator configurable to include any language code, default language set by creator)Equivalent size adjustments (+10% then -10% results in the same starting size)Size percentage reported on dialog in easy to understand 0.00 to 100.00 percentage format (representing size limits)Preset Limits avoid broken objects (even on max resize). no guessing if a change will exceed min size or max link distance, because it won't.Removable from no mod objectsUser Settable Save and RestoreAuto-remenu (saves time editing) with "Done" cancel button.Owner feedback on dialog commands provided.Quick Start Instructions: Make a copy of your object for safety.Drop the "v7-D Zen Resizer (lite) Prep" script into your object, click it and follow the dialog instructions.Remove the previous script and drop the "v7-D Zen Resizer (lite)" script and "v7-D Zen Resizer (lite): User Manual" into your object.You're done. Detailed Instructions: These instructions, scripts and associated materials are being made freely available on an as-is basis. No warranties, implied or otherwise, are offered with it's use. Users assume sole liability for it's use in their items. If you find an issue not covered here AFTER following the included instructions, please feel free to report it and I'll attempt to address it. [Step 1] REQUIRED: Make a Copy of your object before Starting for safety![Step 2] Drop the "v7-D Zen Resizer Prep" script into the root prim of your objectOPTIONAL: Drop a translated "v7-D Zen Resizer Prep.cfg" notecard into the root prim of your object[Step 3] Click your object, and follow the instructions in the dialogsNOTE: This step changes the size of your object; It will be reset to it's default size at the end of this stepNOTE: This step automatically sets the object description to "set=< rotation >" (it will also be printed to your chat history). You can add other information to the description without interfering with it, or if you prefer, you can remove it and add it to the notecard in [Step 5].[Step 4] Remove the "v7-D Zen Resizer Prep" script from your object (and any "v7-D Zen Resizer Prep.cfg" notecard)[Step 5](5a) Drop the "v7-D Zen Resizer (lite).cfg" notecard into the root prim of your object(5b) Edit the "v7-D Zen Resizer (lite).cfg" card you dropped into your object for any custom changes- NOTE: Steps (5a) and (5b) are REQUIRED if you removed the object description text above, and/or want to make changes to the default menus or text; otherwise it is OPTIONAL.(5c) OPTIONAL: Translate the "v7-D Zen Resizer (lite).cfg" notecard into another language, and save as a new notecard, adding ".xx" (no quotes) to the end of its name (where "xx" is the language code, see the default "v7-D Zen Resizer.cfg" notecard for details)[Step 6] Drop the "v7-D Zen Resizer (lite)" script into the root prim of your object[Step 7] OPTIONAL (but strongly suggested): Perform the following tests to confirm that Zen Resizer has been installed correctly:(7a) make a copy of your current object (to avoid having to reset it)(7b) Click on the Object, holding the mouse button down for two seconds to activate the menu(7c) (via the dialog) Increase the objects size to 100.00%(7d) (via the dialog) Save the current size(7e) (via the dialog) Decrease the objects size to 0.00%(7f) (via the dialog) Restore the saved size(7g) if any test fails (and it shouldn't) go back to [Step 1] and use a smaller maximum size.[Step 8] OPTIONAL: Drop the "v7-D Zen Resizer (lite): User Manual" notecard into the root prim of your objectNOTE: If you made changes to the"v7-D Zen Resizer (lite).cfg" notecard, you will want to edit this notecard to reflect any command changes as wellNOTE: If you included translations for the menus, you may want to include translations of this notecard as wellNOTE: Optionally, You may, instead, copy the instructions to your own notecard included with the object.[Step 9] REQUIRED: Include a Plain Text (readable by the User) copy of the following three lines somewhere in or with your objectv7-D Zen Resizer (C) 2010 (CC-BY) [ http://creativecommons.org/licenses/by/3.0 ] Void Singer [ https://wiki.secondlife.com/wiki/User:Void_Singer ]NOTE: There is a default copy of the above license text in the "v7-D Zen Resizer: User Manual" notecard for your convenience.Advanced Tips: Any Changes made in the default notecard can be directly edited into the script instead (all necessary variables are at the top)Dialog can be triggered via link message so that you can tie the dialog into your own script with the following callllMessageLinked( LINK_ROOT, 0, "v7-D Zen Resizer (lite)", llGetOwner() );+ You can replace "llGetOwner()" with the key of any avatar you want to receive the dialogYou can directly access the resize function via Link message from your own script with the following commandsllMessageLinked( LINK_ROOT, llRound( percentage * 10000 ), "v7-D Zen Resizer (lite)", "" ); //-- change object size+ Replace "percentage" with a float in the range of 0.0 to 1.0llMessageLinked( LINK_ROOT, -1, "v7-D Zen Resizer (lite)", "" ); //-- Reset the object to the last saved size llMessageLinked( LINK_ROOT, -2, "v7-D Zen Resizer (lite)", "" ); //-- Saves the current Size llMessageLinked( LINK_ROOT, -3, "v7-D Zen Resizer (lite)", "" ); //-- Removes the resize scriptAll direct access commands will report back with:llMessageLinked( source_link_number, 1, "v7-D ZenResizer (lite)_", "" ); //-- Command Succeeded llMessageLinked( source_link_number, 0, "v7-D ZenResizer (lite)_", "" ); //-- Command Failed+ source_link_number = the link number of the script that sent the original commandThe script name can be changed, notecards and link commands MUST be changed to matchThis package is free; If you paid for it, you got screwed, probably by a copyright violator."set = " is set by notecard if present, by script if not, and by description field only if the other two are not present.
×
×
  • Create New...