User:Daemonika Nightfire/Scripts/*DS* Resize Script: Difference between revisions
m <lsl> tag to <source> |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
==*DS* Resize | ==*DS* Resize Example v3.0.00== | ||
Single resize script for a complete linkset with save and restore option. | Single resize script for a complete linkset with save and restore option. | ||
<source lang="lsl2"> | <source lang="lsl2"> | ||
/ | // | ||
// ╔═════════════════════════════════════−−−→ | |||
// ║ *DS* Resize Example by Daemonika Nightfire (daemonika.nightfire) | |||
// ╚══════════════════════−−−→ | |||
// | |||
// Resize Script for rezzed Objects and Attachments. | |||
// Single-script for a complete linkset with save and restore option. | |||
// | |||
// Featueres: | |||
// • By the first run or reset of this script, it will ask you to save all parameters. | |||
// The parameters will be stored in the descriptionfield of each prim, that needs no script-memory :) | |||
// • You can save, resize and restore individual prims or the complette linkset. | |||
// | |||
// Important: | |||
// • Undersize is possible, but take care. | |||
// if you are small your object and several prims already have minimum dimensions, they are not further reduced, but they are moved proportionally. | |||
// • Sculpted Prims are no problem, but take care. | |||
// Sculpties with moved Bounding Box perhaps moving optical not correct | |||
// That is not true, they are moving correctly, but when the visible Sculptie is not the center of the Bounding Box, it will be looking wrong. | |||
// | |||
// Terms of use: | |||
// You can use, edit and sell this script inside your creations with the following permissions in Second Life: | |||
// • MOD Yes • COPY Yes • TRANSFER Yes | |||
// | |||
// Yes that means fullperm. Other settings, are against the following licenses. | |||
// The permission of your Object (prim), remain unaffected by these terms | |||
// | |||
// https://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script | |||
// http://wiki.secondlife.com/wiki/Project:Terms_of_Service | |||
// http://creativecommons.org/licenses/by-sa/3.0/ | |||
// | |||
// violation of this Terms are against the Second Life TOS at §7 Content Licenses and Intellectual Property Rights. | |||
// http://secondlife.com/corporate/tos.php | |||
// | |||
key owner; | key owner; | ||
integer | integer New = 1; | ||
integer LinkSet = | integer LinkSet = 1; | ||
integer Prim; | integer Prim; | ||
integer Links; | |||
list Percent = ["-1%","-5%","-10%","+1%","+5%","+10%"]; | |||
list Ratio = [0.99,0.95,0.90,1.01,1.05,1.10]; | |||
integer Channel; | integer Channel; | ||
Line 57: | Line 51: | ||
{ | { | ||
llListenRemove(Listener); | llListenRemove(Listener); | ||
Channel = (integer)(llFrand( | Channel = (integer)(llFrand(1) * -DEBUG_CHANNEL); | ||
Listener = llListen(Channel, "", owner, ""); | Listener = llListen(Channel, "", owner, ""); | ||
llSetTimerEvent(60); | llSetTimerEvent(60); | ||
Line 65: | Line 59: | ||
{ | { | ||
Chan(); | Chan(); | ||
if( | if(New) | ||
{ | { | ||
llDialog(owner, "\nYour first run or reset of this script.\nDo you whish to save current parameters?", | llDialog(owner, "\nYour first run or reset of this script.\nDo you whish to save current parameters?", | ||
Line 81: | Line 75: | ||
Chan(); | Chan(); | ||
llDialog(owner, "\n+ - = resize\nSave = record all parameters\nRestore = restore saved parameters", | llDialog(owner, "\n+ - = resize\nSave = record all parameters\nRestore = restore saved parameters", | ||
["Save","Restore","Done" | ["Save","Restore","Done"] + Percent, Channel); | ||
} | } | ||
Line 89: | Line 83: | ||
{ | { | ||
owner = llGetOwner(); | owner = llGetOwner(); | ||
llOwnerSay("/me " + llGetScriptName() + " Free Memory: " + (string)llGetFreeMemory() + " bytes."); | |||
} | } | ||
Line 97: | Line 91: | ||
if(llDetectedKey(0) == owner) | if(llDetectedKey(0) == owner) | ||
{ | { | ||
Links = llGetNumberOfPrims(); | |||
Prim = llDetectedLinkNumber(0); | |||
menu1(); | |||
} | } | ||
} | } | ||
Line 120: | Line 100: | ||
{ | { | ||
float shift = 0; | float shift = 0; | ||
if(msg == "Done" || msg == "Later") | |||
{ | { | ||
llListenRemove(Listener); | llListenRemove(Listener); | ||
llSetTimerEvent(0); | llSetTimerEvent(0); | ||
} | } | ||
else if( | |||
else if(~llListFindList(["This","All"], [msg])) | |||
{ | { | ||
integer i = llListFindList(["This","All"], [msg]); | |||
if(i != -1) | |||
{ | |||
LinkSet = i; | |||
menu2(); | |||
} | |||
} | } | ||
else if(msg | |||
else if(~llListFindList(Percent, [msg])) | |||
{ | { | ||
integer i = llListFindList(Percent, [msg]); | |||
if(i != -1) | |||
{ | |||
shift = llList2Float(Ratio, i); | |||
} | |||
} | } | ||
Line 169: | Line 130: | ||
{ | { | ||
llOwnerSay("Please wait..."); | llOwnerSay("Please wait..."); | ||
integer i = 0; | |||
do | |||
{ | { | ||
list params = llGetLinkPrimitiveParams(i, [PRIM_SIZE , PRIM_POS_LOCAL]); | |||
vector size = llList2Vector(params, 0); | |||
position | vector position = llList2Vector(params, 1); | ||
llSetLinkPrimitiveParamsFast( | if(i > 1) | ||
{ | |||
llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size + "#" + (string)position]); | |||
} | |||
else | |||
{ | { | ||
llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size]); | |||
} | } | ||
} | } | ||
llOwnerSay("All parameters | while(++i <= Links); | ||
New = 0; | |||
llOwnerSay("All parameters have been stored."); | |||
menu1(); | |||
} | } | ||
Line 205: | Line 156: | ||
else if(msg == "Restore") | else if(msg == "Restore") | ||
{ | { | ||
if(! | if(!New) | ||
{ | { | ||
llOwnerSay("Please wait..."); | llOwnerSay("Please wait..."); | ||
if(!LinkSet) | if(!LinkSet) | ||
{ | { | ||
list params = llGetLinkPrimitiveParams(Prim, [PRIM_DESC]); | |||
list parsed = llParseString2List(llList2CSV( | list parsed = llParseString2List(llList2CSV(params), ["#"], []); | ||
string vect = llList2String(parsed, 0); | string vect = llList2String(parsed, 0); | ||
size = (vector)vect; | vector size = (vector)vect; | ||
llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); | llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); | ||
Line 219: | Line 170: | ||
else | else | ||
{ | { | ||
integer i = 0; | |||
do | |||
{ | { | ||
list params = llGetLinkPrimitiveParams(i, [PRIM_DESC]); | |||
list parsed = llParseString2List(llList2CSV( | list parsed = llParseString2List(llList2CSV(params), ["#"], []); | ||
string vect = llList2String(parsed, 0); | string vect = llList2String(parsed, 0); | ||
size = (vector)vect; | vector size = (vector)vect; | ||
string posi = llList2String(parsed, 1); | string posi = llList2String(parsed, 1); | ||
position = (vector)posi; | vector position = (vector)posi; | ||
if(i > 1) | if(i > 1) | ||
{ | { | ||
llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, | llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POS_LOCAL, position]); | ||
} | } | ||
else | else | ||
Line 237: | Line 189: | ||
} | } | ||
} | } | ||
while(++i <= Links); | |||
} | } | ||
llOwnerSay("All stored parameters restored."); | llOwnerSay("All stored parameters have been restored."); | ||
menu2(); | menu2(); | ||
} | } | ||
else if( | else if(New) | ||
{ | { | ||
llOwnerSay("Please first save all paremeters to use this."); | llOwnerSay("Please first save all paremeters to use this."); | ||
Line 250: | Line 203: | ||
if(shift != 0) | if(shift != 0) | ||
{ | { | ||
if(!LinkSet) | if(!LinkSet) | ||
{ | { | ||
list params = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE]); | |||
size = llList2Vector( | vector size = llList2Vector(params, 0) * shift; | ||
llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); | llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); | ||
Line 260: | Line 212: | ||
else | else | ||
{ | { | ||
integer i = 0; | |||
do | |||
{ | { | ||
list params = llGetLinkPrimitiveParams(i, [PRIM_SIZE, PRIM_POS_LOCAL]); | |||
size = llList2Vector( | vector size = llList2Vector(params, 0) * shift; | ||
position = llList2Vector( | vector position = llList2Vector(params, 1) * shift; | ||
if(i > 1) | if(i > 1) | ||
{ | { | ||
llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, | llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POS_LOCAL, position]); | ||
} | } | ||
else | else | ||
Line 276: | Line 228: | ||
} | } | ||
} | } | ||
while(++i <= Links); | |||
} | } | ||
menu2(); | menu2(); | ||
} | } | ||
Line 291: | Line 243: | ||
on_rez(integer Dae) | on_rez(integer Dae) | ||
{ | { | ||
if( | if(New) | ||
{ | { | ||
llResetScript(); | llResetScript(); |
Latest revision as of 12:30, 17 March 2023
*DS* Resize Example v3.0.00
Single resize script for a complete linkset with save and restore option. <source lang="lsl2"> // // ╔═════════════════════════════════════−−−→ // ║ *DS* Resize Example by Daemonika Nightfire (daemonika.nightfire) // ╚══════════════════════−−−→ // // Resize Script for rezzed Objects and Attachments. // Single-script for a complete linkset with save and restore option. // // Featueres: // • By the first run or reset of this script, it will ask you to save all parameters. // The parameters will be stored in the descriptionfield of each prim, that needs no script-memory :) // • You can save, resize and restore individual prims or the complette linkset. // // Important: // • Undersize is possible, but take care. // if you are small your object and several prims already have minimum dimensions, they are not further reduced, but they are moved proportionally. // • Sculpted Prims are no problem, but take care. // Sculpties with moved Bounding Box perhaps moving optical not correct // That is not true, they are moving correctly, but when the visible Sculptie is not the center of the Bounding Box, it will be looking wrong. // // Terms of use: // You can use, edit and sell this script inside your creations with the following permissions in Second Life: // • MOD Yes • COPY Yes • TRANSFER Yes // // Yes that means fullperm. Other settings, are against the following licenses. // The permission of your Object (prim), remain unaffected by these terms // // https://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script // http://wiki.secondlife.com/wiki/Project:Terms_of_Service // http://creativecommons.org/licenses/by-sa/3.0/ // // violation of this Terms are against the Second Life TOS at §7 Content Licenses and Intellectual Property Rights. // http://secondlife.com/corporate/tos.php //
key owner; integer New = 1;
integer LinkSet = 1; integer Prim; integer Links; list Percent = ["-1%","-5%","-10%","+1%","+5%","+10%"]; list Ratio = [0.99,0.95,0.90,1.01,1.05,1.10];
integer Channel; integer Listener; Chan() {
llListenRemove(Listener); Channel = (integer)(llFrand(1) * -DEBUG_CHANNEL); Listener = llListen(Channel, "", owner, ""); llSetTimerEvent(60);
}
menu1() {
Chan(); if(New) { llDialog(owner, "\nYour first run or reset of this script.\nDo you whish to save current parameters?", ["Save","Later"], Channel); } else { llDialog(owner, "\nselect an option\nThis = touched Prim\nAll = complete Object", ["This","All","Done"], Channel); }
}
menu2() {
Chan(); llDialog(owner, "\n+ - = resize\nSave = record all parameters\nRestore = restore saved parameters", ["Save","Restore","Done"] + Percent, Channel);
}
default {
state_entry() { owner = llGetOwner(); llOwnerSay("/me " + llGetScriptName() + " Free Memory: " + (string)llGetFreeMemory() + " bytes."); } touch_start(integer total_number) { owner = llGetOwner(); if(llDetectedKey(0) == owner) { Links = llGetNumberOfPrims(); Prim = llDetectedLinkNumber(0); menu1(); } } listen(integer channel, string name, key id, string msg) { float shift = 0; if(msg == "Done" || msg == "Later") { llListenRemove(Listener); llSetTimerEvent(0); } else if(~llListFindList(["This","All"], [msg])) { integer i = llListFindList(["This","All"], [msg]); if(i != -1) { LinkSet = i; menu2(); } } else if(~llListFindList(Percent, [msg])) { integer i = llListFindList(Percent, [msg]); if(i != -1) { shift = llList2Float(Ratio, i); } } // Record else if(msg == "Save") { llOwnerSay("Please wait..."); integer i = 0; do { list params = llGetLinkPrimitiveParams(i, [PRIM_SIZE , PRIM_POS_LOCAL]); vector size = llList2Vector(params, 0); vector position = llList2Vector(params, 1); if(i > 1) { llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size + "#" + (string)position]); } else { llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size]); } } while(++i <= Links); New = 0; llOwnerSay("All parameters have been stored."); menu1(); } // Restore else if(msg == "Restore") { if(!New) { llOwnerSay("Please wait..."); if(!LinkSet) { list params = llGetLinkPrimitiveParams(Prim, [PRIM_DESC]); list parsed = llParseString2List(llList2CSV(params), ["#"], []); string vect = llList2String(parsed, 0); vector size = (vector)vect; llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); } else { integer i = 0; do { list params = llGetLinkPrimitiveParams(i, [PRIM_DESC]); list parsed = llParseString2List(llList2CSV(params), ["#"], []); string vect = llList2String(parsed, 0); vector size = (vector)vect; string posi = llList2String(parsed, 1); vector position = (vector)posi; if(i > 1) { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POS_LOCAL, position]); } else { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); } } while(++i <= Links); } llOwnerSay("All stored parameters have been restored."); menu2(); } else if(New) { llOwnerSay("Please first save all paremeters to use this."); } } // Resize if(shift != 0) { if(!LinkSet) { list params = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE]); vector size = llList2Vector(params, 0) * shift; llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); } else { integer i = 0; do { list params = llGetLinkPrimitiveParams(i, [PRIM_SIZE, PRIM_POS_LOCAL]); vector size = llList2Vector(params, 0) * shift; vector position = llList2Vector(params, 1) * shift; if(i > 1) { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POS_LOCAL, position]); } else { llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); } } while(++i <= Links); } menu2(); } } timer() { llSetTimerEvent(0); llListenRemove(Listener); llOwnerSay("Listener timeout, please touch again to use the menu."); } on_rez(integer Dae) { if(New) { llResetScript(); } }
} </source>