/////////////////////////////////////////////////////////////////////////// // Copyright (C) Wizardry and Steamworks 2014 - License: GNU GPLv3 // // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // // rights of fair usage, the disclaimer and warranty conditions. // /////////////////////////////////////////////////////////////////////////// float MAXIMUM_PRIMITIVE_SIZE = 64; float MINIMUM_PRIMITIVE_SIZE = .01; list menu = ["-.05", "-.10", "-.25", "+.05", "+.10", "+.25", "[✔] SECURE", "[ + ]", "[ - ]", "DELETE", "RENAME", "DESCRIBE" ]; float scale = 1; key id = NULL_KEY; default { state_entry() { if(id == NULL_KEY) return; integer channel = (integer)("0x8" + llGetSubString(llGetKey(), 0, 6)); llListen(channel, "", id, ""); llDialog(id, "\n Resize, Rename and Redescribe.\nCreated in 2014 by Wizardry and Steamworks\n 1 November 2014: Version: 1.1", menu, channel); } touch_start(integer num) { id = llDetectedKey(0); if(id != llGetOwner()) return; integer channel = (integer)("0x8" + llGetSubString(llGetKey(), 0, 6)); llListen(channel, "", id, ""); llDialog(id, "\n Resize, Rename and Redescribe.\nCreated in 2014 by Wizardry and Steamworks\n 1 November 2014: Version: 1.1", menu, channel); } listen(integer channel, string name, key id, string message) { if(message == "DELETE") { llRemoveInventory(llGetScriptName()); return; } if(message == "[✔] SECURE") { menu = llListReplaceList(menu, (list)"[✖︎] SECURE", 6, 6); jump remenu; } if(message == "[✖︎] SECURE") { menu = llListReplaceList(menu, (list)"[✔] SECURE", 6, 6); jump remenu; } if(message == "RENAME") state rename; if(message == "DESCRIBE") state describe; if(message == "[ + ]" || message == "[ - ]") { // Check primitive limitations before chaning the ratio. float mod = (float)(llGetSubString(message, 2, 2) + (string).01); integer i = 5; do { if(llFabs(llList2Float(menu, i)) + mod < MINIMUM_PRIMITIVE_SIZE || llFabs(llList2Float(menu, i)) + mod > MAXIMUM_PRIMITIVE_SIZE) jump remenu; } while(--i>-1); i = 5; do { string scaler = llGetSubString(llList2String(menu, i), 0, 0); string modify = llGetSubString((string)(llFabs(llList2Float(menu, i)) + mod), 0, 3); menu = llListReplaceList(menu, (list)(scaler + modify), i, i); } while(--i>-1); jump remenu; } if((float)message) { scale += (float)message; state resize; } @remenu; llDialog(id, "\n Resize, Rename and Redescribe.\nCreated in 2014 by Wizardry and Steamworks\n 1 November 2014: Version: 1.1", menu, channel); } on_rez(integer num) { llResetScript(); } } state resize { state_entry() { integer i; if(llList2String(menu, 6) == "[✔] SECURE") { i = llGetNumberOfPrims(); vector dim; do { if(i != 1) { dim = scale * llList2Vector(llGetLinkPrimitiveParams(i, [PRIM_SIZE]), 0); jump check; } dim = scale * llGetScale(); @check; // If the resize should be performed securely, any primitive that would // have a size smaller than .01 or 64 on all axes will deform the object. if(dim.x < MINIMUM_PRIMITIVE_SIZE || dim.y < MINIMUM_PRIMITIVE_SIZE || dim.z < MINIMUM_PRIMITIVE_SIZE || dim.x > MAXIMUM_PRIMITIVE_SIZE || dim.y > MAXIMUM_PRIMITIVE_SIZE || dim.z > MAXIMUM_PRIMITIVE_SIZE) jump bail; } while(--i>0); } i = llGetNumberOfPrims(); do { list data = llGetLinkPrimitiveParams(i, [PRIM_SIZE, PRIM_POS_LOCAL]); llSetLinkPrimitiveParamsFast(i, [ PRIM_SIZE, scale * llList2Vector(data, 0), PRIM_POSITION, scale * llList2Vector(data, 1) ] ); } while(--i>1); llSetScale(scale * llGetScale()); @bail; scale = 1; state default; } on_rez(integer num) { llResetScript(); } } state rename { state_entry() { integer channel = (integer)("0x8" + llGetSubString(llGetKey(), 0, 6)); llListen(channel, "", id, ""); llTextBox(id, "\n Resize, Rename and Redescribe.\nCreated in 2014 by Wizardry and Steamworks\n 1 November 2014: Version: 1.1\n\nPlease type a new name that will be given to all the linked primitives.", channel); } touch_start(integer num) { state default; } listen(integer channel, string name, key id, string message) { integer i = llGetNumberOfPrims(); do { llSetLinkPrimitiveParamsFast(i, [PRIM_NAME, message]); } while(--i>-1); state default; } on_rez(integer num) { llResetScript(); } } state describe { state_entry() { integer channel = (integer)("0x8" + llGetSubString(llGetKey(), 0, 6)); llListen(channel, "", id, ""); llTextBox(id, "\n Resize, Rename and Redescribe.\nCreated in 2014 by Wizardry and Steamworks\n 1 November 2014: Version: 1.1\n\nPlease type a new description that will be given to all the linked primitives.", channel); } touch_start(integer num) { state default; } listen(integer channel, string name, key id, string message) { integer i = llGetNumberOfPrims(); do { llSetLinkPrimitiveParamsFast(i, [PRIM_DESC, message]); } while(--i>-1); state default; } on_rez(integer num) { llResetScript(); } }