diff --git a/Boat and Car Rezzer/Boat and Car Rezzer.sol b/Boat and Car Rezzer/Boat and Car Rezzer.sol new file mode 100644 index 00000000..282a87e9 --- /dev/null +++ b/Boat and Car Rezzer/Boat and Car Rezzer.sol @@ -0,0 +1,3 @@ + + + diff --git a/Boat and Car Rezzer/Boat and Car Rezzer/Boat and Car Rezzer.prj b/Boat and Car Rezzer/Boat and Car Rezzer/Boat and Car Rezzer.prj new file mode 100644 index 00000000..8897563b --- /dev/null +++ b/Boat and Car Rezzer/Boat and Car Rezzer/Boat and Car Rezzer.prj @@ -0,0 +1,6 @@ + + + + + diff --git a/Boat and Car Rezzer/Boat and Car Rezzer/Object/Rezzer script.lsl b/Boat and Car Rezzer/Boat and Car Rezzer/Object/Rezzer script.lsl new file mode 100644 index 00000000..f3b463bc --- /dev/null +++ b/Boat and Car Rezzer/Boat and Car Rezzer/Object/Rezzer script.lsl @@ -0,0 +1,26 @@ +//:AUTHOR: Ferd Frederix + +// Used to rez boats, cars, and airplanes when the prior rezzed vehicle is moved out of range +// First add a llDie() to the rezzed objects 'unsit' section. HWen your visitor unsits, the vehicle will poof. +// Put the script in a prim and add the vehicle. +// Edit the prim and object at the same time, when the object appears. Move them together where you want them. +// Then make the box with this script invisible. + + +float scantime = 10; // keep this slow +float scandistance =1; // keep this small + +default +{ + state_entry() { + llSensorRepeat(llGetInventoryName(INVENTORY_OBJECT,0),"",SCRIPTED|ACTIVE|PASSIVE,scandistance,PI,scantime); + } + no_sensor() { + llRezObject(llGetInventoryName(INVENTORY_OBJECT,0),llGetPos(),<0,0,0>,llGetRot(),0); + } + changed(integer what){ + if (what & CHANGED_INVENTORY) { + llResetScript(); + } + } +} \ No newline at end of file diff --git a/GIF Rat Race/GIF Rat Race/Object/Script.lsl b/GIF Rat Race/GIF Rat Race/Object/Script.lsl new file mode 100644 index 00000000..dbcc78f7 --- /dev/null +++ b/GIF Rat Race/GIF Rat Race/Object/Script.lsl @@ -0,0 +1,72 @@ +// :NAME:Rat Race +// :World: Opensim, Second Life +// :LICENSE: CC_BY-NC-SA +// :Author: Ferd Frederix +//: Category: GIF +//: Rev: 1.0 + + +//:CODE: +// put this script and multiple llTextAnimation-type textures (gifs) into a prim. +// The gifs need to be named with the number of X, Y frames, and the speed separated by a semicolon. +// Example: +// name;X;Y;FPS, where X and Y are integers,a FPS is a float +// animated butterfly;5;2;15 will be a 5 X 2 array played at 15 fps +// moving2;10;1;6.5 is a 10 X 1 playes at 6.5 fps +// +// Link as many of these prims as you want into an array. Now touch the prim to see the GIFS. + +integer i = 0; +integer max; + +Bump(integer i) +{ + string name = llGetInventoryName(INVENTORY_TEXTURE,i); + + + list my_list = llParseString2List(name,["-"],[""]); + integer X = llList2Integer(my_list,1); + integer Y = llList2Integer(my_list,2); + float speed = llList2Float(my_list,3); + + + llSetTextureAnim( ANIM_ON | LOOP, 1,X,Y,0,0,speed); + + llSetTexture(name,1); + +} +default +{ + state_entry() + { + max = llGetInventoryNumber(INVENTORY_TEXTURE); + llOwnerSay("Loaded " + (string) max); + Bump(0); + } + + touch_start(integer total_number) + { + llMessageLinked(LINK_ALL_OTHERS, i, llDetectedName(0), llDetectedKey(0)); + Bump(i); + i++; + if (i >= max) + i = 0; + } + + changed(integer what) + { + if (what & CHANGED_INVENTORY) + llResetScript(); + } + + link_message(integer source, integer num, string str, key id) + { + //llOwnerSay((string) num); + Bump(num); + llSleep(1.0); + } + + + + +} diff --git a/Hypergrid_Events_Sign/Hpergrid_Events_Sign/Hpergrid_Events_Sign.prj b/Hypergrid_Events_Sign/Hpergrid_Events_Sign/Hpergrid_Events_Sign.prj new file mode 100644 index 00000000..836f8379 --- /dev/null +++ b/Hypergrid_Events_Sign/Hpergrid_Events_Sign/Hpergrid_Events_Sign.prj @@ -0,0 +1,6 @@ + + + + + diff --git a/Hypergrid_Events_Sign/Hpergrid_Events_Sign/SignPrim/Script.lsl b/Hypergrid_Events_Sign/Hpergrid_Events_Sign/SignPrim/Script.lsl new file mode 100644 index 00000000..2e7f9158 --- /dev/null +++ b/Hypergrid_Events_Sign/Hpergrid_Events_Sign/SignPrim/Script.lsl @@ -0,0 +1,244 @@ +// +// HYPEvents in-world teleporter board script +// +// Author: Tom Frost +// +// GPLv3 +// + + +// configuration: + +float refreshTime = 1800; + +// internal, do not touch: +integer lineHeight = 30; +integer startY = 90; + +integer texWidth = 512; +integer texHeight = 512; +key httpRequest; + +list events; + +integer channel; + +integer listenHandle; +integer listening = 0; + +list avatarDestinations = []; + +// +// manipulate global avatarDestinations list +// +// insert or overwrite destination for agent with dest +// +tfSetAvatarDest(key agent, string dest) +{ + list newList = []; + integer idx; + integer len = llGetListLength(avatarDestinations)/2; + integer set = FALSE; + + for(idx=0;idx0;in=llGetSubString(in,0,-2)) { + + vector extents = osGetDrawStringSize("vector",in,fontname,fontsize); + + if(extents.x<=width) { + if(trimmed) { + return in + ".."; + } else { + return in; + } + } + + trimmed = TRUE; + } + + return ""; +} + +refreshTexture() +{ + string commandList = ""; + + integer fontSize=50; + + commandList = osMovePen(commandList, 20, 5); + commandList = osDrawImage(commandList, 400, 70, "http://linkwater.org/dyntex/hypevents_logo.png"); + + commandList = osSetPenSize(commandList, 1); + commandList = osDrawLine(commandList, 0, 80, 512, 80); + + integer numEvents = llGetListLength(events)/3; + + integer i; + + integer y = startY; + + commandList = osSetFontName(commandList, "Arial"); + commandList = osSetFontSize(commandList, 20); + + for(i=0;i, <1.0,1.0,0.0> ); + } + } + } + } + + touch_end(integer num) + { + integer i; + for(i=0;i=startY) { + integer touchIndex; + + touchIndex = (integer)((touchY - startY) / lineHeight); + + tfGoToEvent(avatar, touchIndex); + } + } + } + + timer() + { + // timeout listener + if(listening!=0) { + if( (listening + 300) < (integer)llGetTime() ) { + llListenRemove(listenHandle); + avatarDestinations=[]; + listening = 0; + } + } + // refresh texture + doRequest(); + } +} \ No newline at end of file diff --git a/Hypergrid_Events_Sign/Hypergrid_Events_Sign.sol b/Hypergrid_Events_Sign/Hypergrid_Events_Sign.sol new file mode 100644 index 00000000..28ccc963 --- /dev/null +++ b/Hypergrid_Events_Sign/Hypergrid_Events_Sign.sol @@ -0,0 +1,3 @@ + + + diff --git a/Hyperica Hypergate/Hyperica Hypergate/Gate/Hyperica_Teleport.lsl b/Hyperica Hypergate/Hyperica Hypergate/Gate/Hyperica_Teleport.lsl new file mode 100644 index 00000000..52a9b9df --- /dev/null +++ b/Hyperica Hypergate/Hyperica Hypergate/Gate/Hyperica_Teleport.lsl @@ -0,0 +1,108 @@ +string URL ="http://www.hyperica.com/lookup/?cat="; + +//Cat (category) numbers: +//0: WELCOME +//3: EDUCATION +//8: RETAIL +//10: VENUES + +//Sort codes: 1=popularity 2=latest additions + + +string SimAddress; //the hypergrid address +string SimName; //the destination region name +string SimSnapshotURL; //URL of the photo -- this script doesn't use it, but you can use +string GridName; //name of the destination's grid +string SimLocation; //Upper, middle or lower + +key httpkey;//This stores the key for the HTTP request we send. +string body_retrieved; // this will hold what is returned from http request + +vector LandingPoint = <128.0, 128.0, 22.0>; +vector LookAt = <1.0,1.0,1.0>; + +list LastFewAgents; + +LoadDestination () +{ + list Description = llParseString2List(llGetObjectDesc(),[","," "],[]); + + string Category = llList2String(Description,0); + + integer CatNum = 0; + + if (llToUpper(Category)=="EDUCATION") CatNum=3; + if (llToUpper(Category)=="RETAIL") CatNum=8; + if (llToUpper(Category)=="VENUES") CatNum=10; + + + URL = URL+(string) CatNum+"®ion="+llList2String(Description,1)+"&sort=1"; + + llSay(0, URL); + + httpkey=llHTTPRequest(URL, [] ,""); + + llSetText("No destination set.",<1,1,1>,1); + +} + + +PerformTeleport( key WhomToTeleport ) +{ + integer CurrentTime = llGetUnixTime(); + integer AgentIndex = llListFindList( LastFewAgents, [ WhomToTeleport ] ); // Is the agent we're teleporting already in the list? + if (AgentIndex != -1) // If yes, check to make sure it's been > 5 seconds + { + integer PreviousTime = llList2Integer( LastFewAgents, AgentIndex+1 ); // Get the last time they were teleported + if (PreviousTime >= (CurrentTime - 30)) return; // Less than five seconds ago? Exit without teleporting + LastFewAgents = llDeleteSubList( LastFewAgents, AgentIndex, AgentIndex+1); // Delete the agent from the list + } + LastFewAgents += [ WhomToTeleport, CurrentTime ]; // Add the agent and current time to the list + llMapDestination(SimAddress, LandingPoint, LookAt); + + //IF OS scripts are enabled, you can use this: + //osTeleportAgent( WhomToTeleport, SimAddress, LandingPoint, LookAt ); + +} + + +default +{ + state_entry() + { + + LoadDestination(); + + } + + http_response(key id, integer status, list meta, string body) + + { + body_retrieved = body; + + SimName = llGetSubString(body_retrieved, llSubStringIndex(body,"")+18, llSubStringIndex(body, "")-1); + + GridName = llGetSubString(body_retrieved, llSubStringIndex(body,"")+16, llSubStringIndex(body, "")-1); + + SimLocation = llGetSubString(body_retrieved, llSubStringIndex(body,"")+15, llSubStringIndex(body, "")-1); + + SimAddress = llGetSubString(body_retrieved, llSubStringIndex(body,"")+12, llSubStringIndex(body, "")-1); + + llSetText("Hypergate to\n"+ SimName +"\non\n"+GridName,<1,1,1>,1); + + string CommandList = ""; + + CommandList = osMovePen( CommandList, 25, 75 ); + CommandList += "FontSize 16;"; + CommandList = osDrawText( CommandList, SimName +" on "+GridName ); + osSetDynamicTextureDataBlendFace( "", "vector", CommandList, "width:256,height:256", FALSE, 2, 0, 255, 3 ); + + } + + touch_start(integer number) + { LoadDestination(); } + + collision(integer number) + { PerformTeleport( llDetectedKey( 0 )); } + +} \ No newline at end of file diff --git a/Hyperica Hypergate/Hyperica Hypergate/Gate/Hyperica_events.lsl b/Hyperica Hypergate/Hyperica Hypergate/Gate/Hyperica_events.lsl new file mode 100644 index 00000000..2e7f9158 --- /dev/null +++ b/Hyperica Hypergate/Hyperica Hypergate/Gate/Hyperica_events.lsl @@ -0,0 +1,244 @@ +// +// HYPEvents in-world teleporter board script +// +// Author: Tom Frost +// +// GPLv3 +// + + +// configuration: + +float refreshTime = 1800; + +// internal, do not touch: +integer lineHeight = 30; +integer startY = 90; + +integer texWidth = 512; +integer texHeight = 512; +key httpRequest; + +list events; + +integer channel; + +integer listenHandle; +integer listening = 0; + +list avatarDestinations = []; + +// +// manipulate global avatarDestinations list +// +// insert or overwrite destination for agent with dest +// +tfSetAvatarDest(key agent, string dest) +{ + list newList = []; + integer idx; + integer len = llGetListLength(avatarDestinations)/2; + integer set = FALSE; + + for(idx=0;idx0;in=llGetSubString(in,0,-2)) { + + vector extents = osGetDrawStringSize("vector",in,fontname,fontsize); + + if(extents.x<=width) { + if(trimmed) { + return in + ".."; + } else { + return in; + } + } + + trimmed = TRUE; + } + + return ""; +} + +refreshTexture() +{ + string commandList = ""; + + integer fontSize=50; + + commandList = osMovePen(commandList, 20, 5); + commandList = osDrawImage(commandList, 400, 70, "http://linkwater.org/dyntex/hypevents_logo.png"); + + commandList = osSetPenSize(commandList, 1); + commandList = osDrawLine(commandList, 0, 80, 512, 80); + + integer numEvents = llGetListLength(events)/3; + + integer i; + + integer y = startY; + + commandList = osSetFontName(commandList, "Arial"); + commandList = osSetFontSize(commandList, 20); + + for(i=0;i, <1.0,1.0,0.0> ); + } + } + } + } + + touch_end(integer num) + { + integer i; + for(i=0;i=startY) { + integer touchIndex; + + touchIndex = (integer)((touchY - startY) / lineHeight); + + tfGoToEvent(avatar, touchIndex); + } + } + } + + timer() + { + // timeout listener + if(listening!=0) { + if( (listening + 300) < (integer)llGetTime() ) { + llListenRemove(listenHandle); + avatarDestinations=[]; + listening = 0; + } + } + // refresh texture + doRequest(); + } +} \ No newline at end of file diff --git a/NotecardGiver/NotecardGiver.sol b/NotecardGiver/NotecardGiver.sol index c7198c2c..6daa3de6 100644 --- a/NotecardGiver/NotecardGiver.sol +++ b/NotecardGiver/NotecardGiver.sol @@ -1,3 +1,3 @@ - + diff --git a/NotecardGiver/NotecardGiver/NotecardGiver.prj b/NotecardGiver/NotecardGiver/NotecardGiver.prj index 513a16ec..369dae96 100644 --- a/NotecardGiver/NotecardGiver/NotecardGiver.prj +++ b/NotecardGiver/NotecardGiver/NotecardGiver.prj @@ -1,6 +1,6 @@ - - - diff --git a/NotecardGiver/NotecardGiver/Object/NotecardGiver_1.lsl b/NotecardGiver/NotecardGiver/Object/NotecardGiver_1.lsl index edca95c6..8e034cfb 100644 --- a/NotecardGiver/NotecardGiver/Object/NotecardGiver_1.lsl +++ b/NotecardGiver/NotecardGiver/Object/NotecardGiver_1.lsl @@ -1,12 +1,11 @@ // :CATEGORY:Inventory Giver -// :NAME:NotecardGiver +// :NAME:NotecardGiver with web link // :AUTHOR:Encog Dod // :CREATED:2010-01-10 05:20:56.000 -// :EDITED:2013-09-18 15:38:58 // :ID:565 // :NUM:769 -// :REV:1.0 -// :WORLD:Second Life +// :REV:2.0 +// :WORLD:Second Life, Opensim // :DESCRIPTION: // NotecardGiver // :CODE: @@ -23,40 +22,53 @@ // For more information about this book visit the following web site: // // http://www.heatonresearch.com/articles/series/22/ +// Mod to give out a web link added by Ferd +// Tuneable things you need to set +integer giveNotecard = TRUE; +integer giveWebSite = TRUE; +string Message = "Visit the Outworldz Website"; +string WebLink = "http://www.outworldz.com"; +float Distance = 20; string notecard = "Welcome Notecard"; -integer freq = 1; -integer maxList = 100; -list given; + + +integer freq = 5; // how often it scans, Keep this slow. +integer maxList = 100; // saves the last 100 people to avoid spamming +list given; // the list of people default { - state_entry() - { - llSensorRepeat("", "",AGENT, 20, PI, freq); - llSetText("", <1.0, 1.0, 1.0>, 1.0); - } - - sensor(integer num_detected) - { - integer i; - key detected; - - for(i=0;i= maxList) - { - given = llDeleteSubList(given,0,10); - } - } - } - } + state_entry() + { + llSensorRepeat("", "",AGENT, Distance, PI, freq); + } + + sensor(integer num_detected) + { + integer i; + key detected; + + for(i=0;i= maxList) + { + given = llDeleteSubList(given,0,0); + } + } + } + } } diff --git a/Resize_Script/Resize_Script/Object/Resize_Script_1.lsl b/Resize_Script/Resize_Script/Object/Resize_Script_1.lsl index 169cf296..000d0cc8 100644 --- a/Resize_Script/Resize_Script/Object/Resize_Script_1.lsl +++ b/Resize_Script/Resize_Script/Object/Resize_Script_1.lsl @@ -1,298 +1,302 @@ -// :CATEGORY:Resizer -// :NAME:Resize_Script -// :AUTHOR:Daemonika Nightfire -// :CREATED:2013-06-24 14:24:19.460 -// :EDITED:2013-09-18 15:39:01 -// :ID:699 -// :NUM:954 -// :REV:1.0 -// :WORLD:Second Life -// :DESCRIPTION: -// *DS* Resize Script (m/c/t) 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. -// • Deleting this script from the object is not required because its only one. -// -// Standby-Time ~ 0.004 ms -// Working-Time with 200 moving Prims ~ 4.000 up to 16.000 ms -// after finalizing Standby-Time ~ 0.004 ms again -// -// Note: -// • You have to stand on a posestand, if you want to edit attached attachments. -// This is necessary because otherwise the linkset is misadjusted, if you move your avatar during the process. -// -// 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 -// :CODE: - - -key owner; -integer new = TRUE; - -integer LinkSet = TRUE; -integer Prim; - -integer Channel; -integer Listener; -Chan() -{ - llListenRemove(Listener); - Channel = (integer)(llFrand(999999.0) * -1); - 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","-1%","-5%","-10%","+1%","+5%","+10%"], Channel); -} - -default -{ - state_entry() - { - owner = llGetOwner(); - llWhisper(0,"/me " + llGetScriptName() + " Free Memory: " + (string)llGetFreeMemory() + " bytes."); - } - - touch_start(integer total_number) - { - owner = llGetOwner(); - if(llDetectedKey(0) == owner) - { - if(llGetAttached() != 0) - { - if(llGetAgentInfo(owner) & AGENT_SITTING) - { - Prim = llDetectedLinkNumber(0); - menu1(); - } - else - { - llOwnerSay("Please use a posing stand for resizing!"); - } - } - else - { - Prim = llDetectedLinkNumber(0); - menu1(); - } - } - } - - listen(integer channel, string name, key id, string msg) - { - float shift = 0; - vector position; - vector size; - list link; - integer i; - - if(msg == "This") - { - LinkSet = FALSE; - menu2(); - } - else if(msg == "All") - { - LinkSet = TRUE; - menu2(); - } - else if(msg == "Done" || msg == "Later") - { - llListenRemove(Listener); - llSetTimerEvent(0); - } - else if(msg == "-1%") - { - shift = 0.99; - } - else if(msg == "-5%") - { - shift = 0.95; - } - else if(msg == "-10%") - { - shift = 0.9; - } - else if(msg == "+1%") - { - shift = 1.01; - } - else if(msg == "+5%") - { - shift = 1.05; - } - else if(msg == "+10%") - { - shift = 1.1; - } - - // Record - else if(msg == "Save") - { - llOwnerSay("Please wait..."); - if(!LinkSet) - { - link = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE , PRIM_POSITION]); - position = llList2Vector(link, 1); - position = (position - llGetRootPosition()) / llGetRootRotation(); - size = llList2Vector(link, 0); - - llSetLinkPrimitiveParamsFast(Prim,[PRIM_DESC,(string)size + "#" + (string)position]); - } - else - { - for(i = 0; i <= llGetNumberOfPrims(); i++) - { - link = llGetLinkPrimitiveParams(i, [PRIM_SIZE , PRIM_POSITION]); - size = llList2Vector(link, 0); - position = llList2Vector(link, 1); - position = (position - llGetRootPosition()) / llGetRootRotation(); - - if(i > 1) - { - llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size + "#" + (string)position]); - } - else - { - llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size]); - } - } - new = FALSE; - } - llOwnerSay("All parameters are stored"); - menu2(); - } - - // Restore - else if(msg == "Restore") - { - if(!new) - { - llOwnerSay("Please wait..."); - if(!LinkSet) - { - link = llGetLinkPrimitiveParams(Prim, [PRIM_DESC]); - list parsed = llParseString2List(llList2CSV(link), ["#"], []); - string vect = llList2String(parsed, 0); - size = (vector)vect; - - llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); - } - else - { - for(i = 0; i <= llGetNumberOfPrims(); i++) - { - link = llGetLinkPrimitiveParams(i, [PRIM_DESC]); - list parsed = llParseString2List(llList2CSV(link), ["#"], []); - string vect = llList2String(parsed, 0); - size = (vector)vect; - string posi = llList2String(parsed, 1); - position = (vector)posi; - - if(i > 1) - { - llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POSITION, position]); - } - else - { - llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); - } - } - } - llOwnerSay("All stored parameters restored."); - menu2(); - } - else if(new) - { - llOwnerSay("Please first save all paremeters to use this."); - } - } - - // Resize - if(shift != 0) - { - llOwnerSay("Please wait..."); - if(!LinkSet) - { - link = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE]); - size = llList2Vector(link, 0) * shift; - - llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); - } - else - { - for(i = 0; i <= llGetNumberOfPrims(); i++) - { - link = llGetLinkPrimitiveParams(i, [PRIM_SIZE, PRIM_POSITION]); - size = llList2Vector(link, 0) * shift; - position = llList2Vector(link, 1); - position = (position - llGetRootPosition()) / llGetRootRotation() * shift; - - if(i > 1) - { - llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POSITION, position]); - } - else - { - llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); - } - } - } - llOwnerSay("Finish."); - menu2(); - } - } - - timer() - { - llSetTimerEvent(0); - llListenRemove(Listener); - llOwnerSay("Listener timeout, please touch again to use the menu."); - } - - on_rez(integer Dae) - { - if(new) - { - llResetScript(); - } - } -} +// :CATEGORY:Resizer +// :NAME:Resize_Script +// :AUTHOR:Daemonika Nightfire +// :CREATED:2013-06-24 14:24:19.460 +// :EDITED:2013-09-18 15:39:01 +// :ID:699 +// :NUM:954 +// :REV:1.0 +// :WORLD:Second Life +// :DESCRIPTION: +// *DS* Resize Script (m/c/t) by Daemonika Nightfire (daemonika.nightfire)// +// Resize Script for rezzed Objects and Attachments. +// Single-script for a complete linkset with save and restore option. +// +// Features: +// • 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. +// • Deleting this script from the object is not required because its only one. +// +// Standby-Time ~ 0.004 ms +// Working-Time with 200 moving Prims ~ 4.000 up to 16.000 ms +// after finalizing Standby-Time ~ 0.004 ms again +// +// Note: +// • You have to stand on a posestand, if you want to edit attached attachments. +// This is necessary because otherwise the linkset is misadjusted, if you move your avatar during the process. +// +// 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 +// :CODE: + + +key owner; +integer new = TRUE; + +integer LinkSet = TRUE; +integer Prim; + +integer Channel; +integer Listener; +Chan() +{ + llListenRemove(Listener); + Channel = (integer)(llFrand(999999.0) * -1); + Listener = llListen(Channel, "", owner, ""); + llSetTimerEvent(60); +} + +menu1() +{ + Chan(); + if(new) + { + llDialog(owner, "\nYour first run or reset of this script.\nDo you wish 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","-1%","-5%","-10%","+1%","+5%","+10%"], Channel); +} + +default +{ + state_entry() + { + owner = llGetOwner(); + llWhisper(0,"/me " + llGetScriptName() + " Free Memory: " + (string)llGetFreeMemory() + " bytes."); + } + + touch_start(integer total_number) + { + owner = llGetOwner(); + if(llDetectedKey(0) == owner) + { + if(llGetAttached() != 0) + { + if(llGetAgentInfo(owner) & AGENT_SITTING) + { + Prim = llDetectedLinkNumber(0); + menu1(); + } + else + { + llOwnerSay("Please use a posing stand for resizing!"); + } + } + else + { + Prim = llDetectedLinkNumber(0); + menu1(); + } + } + } + + listen(integer channel, string name, key id, string msg) + { + float shift = 0; + vector position; + vector size; + list link; + integer i; + + if(msg == "This") + { + LinkSet = FALSE; + menu2(); + } + else if(msg == "All") + { + LinkSet = TRUE; + menu2(); + } + else if(msg == "Done" || msg == "Later") + { + llListenRemove(Listener); + llSetTimerEvent(0); + } + else if(msg == "-1%") + { + shift = 0.99; + } + else if(msg == "-5%") + { + shift = 0.95; + } + else if(msg == "-10%") + { + shift = 0.9; + } + else if(msg == "+1%") + { + shift = 1.01; + } + else if(msg == "+5%") + { + shift = 1.05; + } + else if(msg == "+10%") + { + shift = 1.1; + } + + // Record + else if(msg == "Save") + { + llOwnerSay("Please wait..."); + if(!LinkSet) + { + link = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE , PRIM_POSITION]); + position = llList2Vector(link, 1); + position = (position - llGetRootPosition()) / llGetRootRotation(); + size = llList2Vector(link, 0); + + llSetLinkPrimitiveParamsFast(Prim,[PRIM_DESC,(string)size + "#" + (string)position]); + } + else + { + for(i = 0; i <= llGetNumberOfPrims(); i++) + { + link = llGetLinkPrimitiveParams(i, [PRIM_SIZE , PRIM_POSITION]); + size = llList2Vector(link, 0); + position = llList2Vector(link, 1); + position = (position - llGetRootPosition()) / llGetRootRotation(); + + if(i > 1) + { + llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size + "#" + (string)position]); + } + else + { + llSetLinkPrimitiveParamsFast(i,[PRIM_DESC,(string)size]); + } + } + new = FALSE; + } + llOwnerSay("All parameters are stored"); + menu2(); + } + + // Restore + else if(msg == "Restore") + { + if(!new) + { + llOwnerSay("Please wait..."); + if(!LinkSet) + { + link = llGetLinkPrimitiveParams(Prim, [PRIM_DESC]); + list parsed = llParseString2List(llList2CSV(link), ["#"], []); + string vect = llList2String(parsed, 0); + size = (vector)vect; + + llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); + } + else + { + for(i = 0; i <= llGetNumberOfPrims(); i++) + { + link = llGetLinkPrimitiveParams(i, [PRIM_DESC]); + list parsed = llParseString2List(llList2CSV(link), ["#"], []); + string vect = llList2String(parsed, 0); + size = (vector)vect; + string posi = llList2String(parsed, 1); + position = (vector)posi; + + if(i > 1) + { + llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POSITION, position]); + } + else + { + llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); + } + } + } + llOwnerSay("All stored parameters restored."); + menu2(); + } + else if(new) + { + llOwnerSay("Please first save all paremeters to use this."); + } + } + + // Resize + if(shift != 0) + { + llOwnerSay("Please wait..."); + if(!LinkSet) + { + link = llGetLinkPrimitiveParams(Prim, [PRIM_SIZE]); + size = llList2Vector(link, 0) * shift; + + llSetLinkPrimitiveParamsFast(Prim, [PRIM_SIZE, size]); + } + else + { + for(i = 0; i <= llGetNumberOfPrims(); i++) + { + link = llGetLinkPrimitiveParams(i, [PRIM_SIZE, PRIM_POSITION]); + size = llList2Vector(link, 0) * shift; + position = llList2Vector(link, 1); + position = (position - llGetRootPosition()) / llGetRootRotation() * shift; + + if(i > 1) + { + llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size, PRIM_POSITION, position]); + } + else + { + llSetLinkPrimitiveParamsFast(i, [PRIM_SIZE, size]); + } + } + } + llOwnerSay("Finish."); + menu2(); + } + } + + timer() + { + llSetTimerEvent(0); + llListenRemove(Listener); + llOwnerSay("Listener timeout, please touch again to use the menu."); + } + + on_rez(integer Dae) + { + if(new) + { + llResetScript(); + } + } +} diff --git a/SignChanger/SignChanger.sol b/SignChanger/SignChanger.sol new file mode 100644 index 00000000..acf15a07 --- /dev/null +++ b/SignChanger/SignChanger.sol @@ -0,0 +1,3 @@ + + + diff --git a/SignChanger/SignChanger/Object/Script.lsl b/SignChanger/SignChanger/Object/Script.lsl new file mode 100644 index 00000000..9963a751 --- /dev/null +++ b/SignChanger/SignChanger/Object/Script.lsl @@ -0,0 +1,41 @@ +integer count ; +integer current = 0; + +SetLinkTextureFast( string texture, integer face) +{ + llSetLinkPrimitiveParamsFast(LINK_ROOT, [PRIM_TEXTURE, face, texture,<1,1,0>,<0,0,0>,0 + ]); +} + +// PRIM_TEXTURE, integer face, string texture, vector repeats, vector offsets, float rotation_in_radians + +default +{ + state_entry() + { + count = llGetInventoryNumber(INVENTORY_TEXTURE); + llSetTimerEvent(5); + } + + on_rez(integer p) { + llResetScript(); + } + timer() { + + string texturename = llGetInventoryName(INVENTORY_TEXTURE,current); + SetLinkTextureFast(texturename,1); // do side one + current++; + if (current >= count) + current = 0; + texturename = llGetInventoryName(INVENTORY_TEXTURE,current); + SetLinkTextureFast(texturename,2); // do side two to cache it + + } + + // if necessary, uncomment this, then touch a face to get the number for use with SetLinkTexture + // touch_start(integer n) { + // integer face = llDetectedTouchFace(0); + // llSay(0,(string) face); + //} + +} \ No newline at end of file diff --git a/SignChanger/SignChanger/SignChanger.prj b/SignChanger/SignChanger/SignChanger.prj new file mode 100644 index 00000000..3fcd5704 --- /dev/null +++ b/SignChanger/SignChanger/SignChanger.prj @@ -0,0 +1,6 @@ + + + + +