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 @@
+
+
+