diff --git a/Endless Loop Mover/Endless Loop Mover/Object/walker.lsl b/Endless Loop Mover/Endless Loop Mover/Object/walker.lsl index 3862ea45..e1cd7465 100644 --- a/Endless Loop Mover/Endless Loop Mover/Object/walker.lsl +++ b/Endless Loop Mover/Endless Loop Mover/Object/walker.lsl @@ -4,6 +4,7 @@ // :AUTHOR:Ferd Frederix // :KEYWORDS: // :CREATED:2015-08-05 09:54:56 +// :EDITED:2017-03-11 11:22:29 // :ID:1084 // :NUM:1816 // :REV:2 diff --git a/MOAP Top 2000 Radio Stations Player/Top_Radio_Stations_Player/Object/Top_Radio_Stations_Player_1.lsl b/MOAP Top 2000 Radio Stations Player/Top_Radio_Stations_Player/Object/Top_Radio_Stations_Player_1.lsl index 2ef6f944..b7876639 100644 --- a/MOAP Top 2000 Radio Stations Player/Top_Radio_Stations_Player/Object/Top_Radio_Stations_Player_1.lsl +++ b/MOAP Top 2000 Radio Stations Player/Top_Radio_Stations_Player/Object/Top_Radio_Stations_Player_1.lsl @@ -4,7 +4,7 @@ // :AUTHOR:Ferd Frederix // :KEYWORDS: // :CREATED:2012-09-04 15:30:52.010 -// :EDITED:2016-11-09 08:46:38 +// :EDITED:2017-03-11 11:22:31 // :ID:902 // :NUM:1278 // :REV:1.1 diff --git a/Top2000_Radio_Stations_Player/Top_Radio_Stations_Player/Object/Remote parcel script.lsl b/Top2000_Radio_Stations_Player/Top_Radio_Stations_Player/Object/Remote parcel script.lsl index be573cb0..5547796c 100644 --- a/Top2000_Radio_Stations_Player/Top_Radio_Stations_Player/Object/Remote parcel script.lsl +++ b/Top2000_Radio_Stations_Player/Top_Radio_Stations_Player/Object/Remote parcel script.lsl @@ -4,7 +4,7 @@ // :AUTHOR:Ferd Frederix // :KEYWORDS: // :CREATED:2013-12-14 13:33:32 -// :EDITED:2016-11-09 08:46:47 +// :EDITED:2017-03-11 11:22:37 // :ID:902 // :NUM:1558 // :REV:1.2 diff --git a/Walk-On-the-moon/Walk-On-the-moon/Moon/Moon Home.lsl b/Walk-On-the-moon/Walk-On-the-moon/Moon/Moon Home.lsl index 1597fdef..1335d8e4 100644 --- a/Walk-On-the-moon/Walk-On-the-moon/Moon/Moon Home.lsl +++ b/Walk-On-the-moon/Walk-On-the-moon/Moon/Moon Home.lsl @@ -1,3 +1,324 @@ +// :SHOW: +// :CATEGORY:World +// :NAME:Walk-On-the-moon +// :AUTHOR:Ferd Frederix +// :KEYWORDS: +// :CREATED:2013-11-19 16:49:18 +// :EDITED:2017-03-11 11:22:42 +// :ID:1003 +// :NUM:1911 +// :REV:2 +// :WORLD:Second Life, OPensim +// :DESCRIPTION: +// Sphere script for XS pets to walk on a planet or moon +// Optionall put this script in a sphere and put the Poseball script in a pose ball. +// XS pets using ther same secret key and channels can then walk and live on this little moon. + + +// Version 2 + +// original script by Xundra Snowpaw +// mods by Ferd Frederix +// revisions: +// 10-3-2011 Mod by Ferd to listen to HOME_CHANNEL, not -237918, the original src has no other reference to that channel. +// 11-16-2011 Use latest globals from GLobal Constants +// +// New BSD License: http://www.opensource.org/licenses/bsd-license.php +// Copyright (c) 2010, Xundra Snowpaw +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +//* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +//* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +//////////////////////////////////////////////////////////////////// + + + +/////////////////////////////////////////////// +// COPY FROM GLOBAL CONSTANTS FILE LOCATED IN Debug Folder +// INCLUDE THESE IN ALL SCRIPTS // +// XS_pet constants and names + +///// GLOBAL CONSTANTS extracted from original source ////// +// +// if you change any of these constants, change it everywhere and in a list in XS_Debug so it can print them +// +// 0.24 is the original Pet Quail +// 0.25 is the modified Pet Quail +// 0.26 is the Robot code, which is generic + +float VERSION = 0.28; +integer ENCRYPT = FALSE; +key YOUR_UUID = ""; // if you add a UUID for your avatar here, you can change it later + // and other alts or feruiends can edit and make these pets + // If you leave it blank, only the creator can work on them +string Animal = "Troubot"; // was 'Quail', must be the name of your animal +string Egg = "Nut and Bolt"; // was 'XS Egg', must be the name of your egg +string Crate = "Transport UFO"; // was XS-Cryocrate +string HomeObject = "Home Flag"; // was "XS Home Object +string sound = "robot_sound"; +string SECRET_PASSWORD = "top secret robot"; // must use one unique to any animal +integer SECRET_NUMBER = 99999; // any number thats a secret + +integer MaxAge = 7; // can get prggers in 7 days +integer UNITS_OF_FOOD = 168; // food bowl food +float secs_to_grow = 86400; // grow daily = 86400 + +// global listeners + +integer FOOD_CHANNEL = -999191; +integer ANIMAL_CHANNEL = -999192; +integer EGG_CHANNEL = -999193; +integer HOME_CHANNEL = -999194; +integer BOX_CHANNEL = -999195; +integer ACC_CHANNEL = -999196; +integer UPDATE_CHANNEL = -999197; +integer API_CHANNEL = -999198; + +// global prim animation linkmessages on channel 1 +// these are the prim animations played for each type of possible animation + +string ANI_STAND = "stand"; // default standing animation +string ANI_WALKL = "left"; // triggers Left foot and righrt arm walk animation +string ANI_WALKR = "right"; // triggers Right foot and left arm walk animation +string ANI_SLEEP = "sleep"; // Sleeping +string ANI_WAVE = "wave"; // Calling for sex, needs help with food, etc. + + + +// global link messages to control the animal +integer LINK_AGE_START = 800; // when quail is rezzed and secret_number, is sent by brain to breeder, eater and informatic get booted up +integer LINK_FOOD_CONSUME = 900; // from movement to brain when close to food, brain then consumes a random amount up to 10000 +integer LINK_FOODMINUS = 901; // xs_brain receives FOOD_CONSUME, decrement hunger (eat) +integer LINK_HUNGRY = 903; // sent by eater (string)hunger_amount, checks each hour +integer LINK_HAMOUNT = 904; // hunger_amount = (integer)str,m updates the hunger amount in scripts +integer LINK_SET_HOME = 910; // loc ^ dist +integer LINK_MOVER = 911; // tell mover to rest for str seconds +integer LINK_FOODIE_CLR = 920; // clear all food_bowl_keys and contents +integer LINK_FOODIE = 921; // send FOOD_LOCATION coordinates to movement +integer LINK_COLOR1 = 930; // colour1 +integer LINK_COLOR2 = 931; // colour2 +integer LINK_SEX = 932; // sex +integer LINK_SHINE = 933; // shine +integer LINK_GLOW = 934; // glow +integer LINK_GEN = 935; // generation +integer LINK_RESET_SIZE = 936; // reset size to 1 +integer LINK_MAGE = 940; // xs_brain sends, xs_ager consumes, adds str to age, if older than 7 days, will grow the animal +integer LINK_DAYTIME = 941; // xs_ager consumes, starts a timer of 86,400 seconds in xs_ager +integer LINK_GET_AGE = 942; // get age from xs_ager and sent it on channel 943 +integer LINK_PUT_AGE = 943; // print age from xs_ager +integer LINK_PACKAGE = 950; // look for a cryo_crate +integer LINK_SEEK_FEMALE = 960; // MALE_BREED_CALL +integer LINK_MALE_BREED_CALL = 961; // triggered by LINK_SEEK_FEMALE +integer LINK_SIGNAL_ELIGIBLE = 962; // sent by female when hears LINK_MALE_BREED_CALL +integer LINK_FEMALE_ELIGIBLE = 963; // sent when it hears in chat FEMALE_ELIGIBLE +integer LINK_CALL_MALE = 964; // if LINK_FEMALE_ELIGIBLE && looking_for_female +integer LINK_MALE_ON_THE_WAY = 965; // triggered by LINK_CALL_MALE +integer LINK_FEMALE_LOCATION = 966; // female location, sends coordinates of a female +integer LINK_RQST_BREED = 967; // sent when close enough to male/female +integer LINK_CALL_MALE_INFO = 968; // sent by xs_breeding, this line of code was in error in v.24 of xs_breeding see line 557 and 636 of xs_brain which make calls and also xs_breeding which receives LINK_MALE_INFO. +integer LINK_MALE_INFO = 969; +integer LINK_LAY_EGG = 970; // llRezObject("XS Egg" +integer LINK_BREED_FAIL = 971; // key = father, failed, timed out +integer LINK_PREGNANT = 972; // chick is preggers +integer LINK_SOUND_ON= 973; // sound is on +integer LINK_SOUND_OFF= 974; // sound is off +integer LINK_SLEEPING = 990; // close eyes +integer LINK_UNSLEEPING = 991; // open eyes +integer LINK_SOUND = 1001; // plays a sound if enabled +integer LINK_SPECIAL = 1010; // xs_special, is str = "Normal", removes script +integer LINK_PREGNANCY_TIME = 5000; // in seconds as str +integer LINK_SLEEP = 7999; // disable sleep by parameter +integer LINK_TIMER = 8000; // scan for food bowl about every 1800 seconds +integer LINK_DIE = 9999; // death + + +///////// end global Link constants //////// + + +///////////// END OF COPIED CODE //////////// + + +/////// DON'T CHANGE THE FOLLOWING! (Unless you know what you are doing!) + +integer XTEA_DELTA = 0x9E3779B9; // (sqrt(5) - 1) * 2^31 +integer xtea_num_rounds = 6; +list xtea_key = [0, 0, 0, 0]; + +integer hex2int(string hex) { + if(llGetSubString(hex,0,1) == "0x") + return (integer)hex; + if(llGetSubString(hex,0,0) == "x") + return (integer)("0"+hex); + return(integer)("0x"+hex); +} + + +// Convers any string to a 32 char MD5 string and then to a list of +// 4 * 32 bit integers = 128 bit Key. MD5 ensures always a specific +// 128 bit key is generated for any string passed. +list xtea_key_from_string( string str ) +{ + str = llMD5String(str,0); // Use Nonce = 0 + return [ hex2int(llGetSubString( str, 0, 7)), + hex2int(llGetSubString( str, 8, 15)), + hex2int(llGetSubString( str, 16, 23)), + hex2int(llGetSubString( str, 24, 31))]; +} + +// Encipher two integers and return the result as a 12-byte string +// containing two base64-encoded integers. +string xtea_encipher( integer v0, integer v1 ) +{ + integer num_rounds = xtea_num_rounds; + integer sum = 0; + do { + // LSL does not have unsigned integers, so when shifting right we + // have to mask out sign-extension bits. + v0 += (((v1 << 4) ^ ((v1 >> 5) & 0x07FFFFFF)) + v1) ^ (sum + llList2Integer(xtea_key, sum & 3)); + sum += XTEA_DELTA; + v1 += (((v0 << 4) ^ ((v0 >> 5) & 0x07FFFFFF)) + v0) ^ (sum + llList2Integer(xtea_key, (sum >> 11) & 3)); + + } while( num_rounds = ~-num_rounds ); + //return only first 6 chars to remove "=="'s and compact encrypted text. + return llGetSubString(llIntegerToBase64(v0),0,5) + + llGetSubString(llIntegerToBase64(v1),0,5); +} + +// Decipher two base64-encoded integers and return the FIRST 30 BITS of +// each as one 10-byte base64-encoded string. +string xtea_decipher( integer v0, integer v1 ) +{ + integer num_rounds = xtea_num_rounds; + integer sum = XTEA_DELTA*xtea_num_rounds; + do { + // LSL does not have unsigned integers, so when shifting right we + // have to mask out sign-extension bits. + v1 -= (((v0 << 4) ^ ((v0 >> 5) & 0x07FFFFFF)) + v0) ^ (sum + llList2Integer(xtea_key, (sum>>11) & 3)); + sum -= XTEA_DELTA; + v0 -= (((v1 << 4) ^ ((v1 >> 5) & 0x07FFFFFF)) + v1) ^ (sum + llList2Integer(xtea_key, sum & 3)); + } while ( num_rounds = ~-num_rounds ); + + return llGetSubString(llIntegerToBase64(v0), 0, 4) + + llGetSubString(llIntegerToBase64(v1), 0, 4); +} + +// Encrypt a full string using XTEA. +string xtea_encrypt_string( string str ) +{ + if (! ENCRYPT) + return str; + // encode string + str = llStringToBase64(str); + // remove trailing =s so we can do our own 0 padding + integer i = llSubStringIndex( str, "=" ); + if ( i != -1 ) + str = llDeleteSubString( str, i, -1 ); + + // we don't want to process padding, so get length before adding it + integer len = llStringLength(str); + + // zero pad + str += "AAAAAAAAAA="; + + string result; + i = 0; + + do { + // encipher 30 (5*6) bits at a time. + result += xtea_encipher(llBase64ToInteger(llGetSubString(str, i, i + 4) + "A="), llBase64ToInteger(llGetSubString(str, i+5, i + 9) + "A=")); + i+=10; + } while ( i < len ); + + return result; +} + +// Decrypt a full string using XTEA +string xtea_decrypt_string( string str ) { + if (! ENCRYPT) + return str; + integer len = llStringLength(str); + integer i=0; + string result; + //llOwnerSay(str); + do { + integer v0; + integer v1; + + v0 = llBase64ToInteger(llGetSubString(str, i, i + 5) + "=="); + i+= 6; + v1 = llBase64ToInteger(llGetSubString(str, i, i + 5) + "=="); + i+= 6; + + result += xtea_decipher(v0, v1); + } while ( i < len ); + + // Replace multiple trailing zeroes with a single one + + i = llStringLength(result) - 1; + while ( llGetSubString(result, i - 1, i) == "AA" ){ + result = llDeleteSubString(result, i, i); + i--; + } + i = llStringLength(result) - 1; + // while (llGetSubString(result, i, i + 1) == "A" ) { + // i--; + // } + result = llGetSubString(result, 0, i+1); + i = llStringLength(result); + integer mod = i%4; //Depending on encoded length diffrent appends are needed + if(mod == 1) result += "A=="; + else if(mod == 2 ) result += "=="; + else if(mod == 3) result += "="; + + return llBase64ToString(result); +} + +string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +//tunables +integer world = TRUE; + +default +{ + state_entry() + { + xtea_key = xtea_key_from_string(SECRET_PASSWORD); + llListen(HOME_CHANNEL, "", "", "XSPET_PING_HOME"); // listen for a pet to say XSPET_PING_HOME - Mod by Ferd to listen to HOME_CHANNEL, not -237918 + + } + + touch_start(integer total_number) + { + if (llDetectedKey(0) == llGetOwner()) { + vector size = llGetScale(); + vector pos = llGetPos(); + if (!world) + pos.z = pos.z - size.z / 2; + + llRegionSay(ANIMAL_CHANNEL, xtea_encrypt_string("XSPET^HOME_LOCATION^" + (string)pos + "^" + llGetObjectDesc())); + } + llOwnerSay("Setting Home Location"); + } + + listen(integer channel, string name, key id, string msg) + { + vector size = llGetScale(); + vector pos = llGetPos(); + if (!world) + pos.z = pos.z - size.z / 2; + + llRegionSay(ANIMAL_CHANNEL, xtea_encrypt_string("XSPET^HOME_LOCATION^" + (string)pos + "^" + llGetObjectDesc())); + } +} + + + + +// :CODE: // :CATEGORY:World // :NAME:Walk-On-the-moon // :AUTHOR:Ferd Frederix diff --git a/Walk-On-the-moon/Walk-On-the-moon/Moon/Slow rotation.lsl b/Walk-On-the-moon/Walk-On-the-moon/Moon/Slow rotation.lsl index 8ed2e548..4f9432e7 100644 --- a/Walk-On-the-moon/Walk-On-the-moon/Moon/Slow rotation.lsl +++ b/Walk-On-the-moon/Walk-On-the-moon/Moon/Slow rotation.lsl @@ -1,8 +1,12 @@ +// :SHOW: // :CATEGORY:World -// :NAME:Walk-On-the-moon rotate +// :NAME:Walk-On-the-moon // :AUTHOR:Ferd Frederix +// :KEYWORDS: // :CREATED:2013-11-19 16:49:18 +// :EDITED:2017-03-11 11:22:42 // :ID:1003 +// :NUM:1912 // :REV:2 // :WORLD:Second Life, Opensim // :DESCRIPTION: diff --git a/Walk-On-the-moon/Walk-On-the-moon/Moon/moon script.lsl b/Walk-On-the-moon/Walk-On-the-moon/Moon/moon script.lsl index 9abb042b..a4171c2d 100644 --- a/Walk-On-the-moon/Walk-On-the-moon/Moon/moon script.lsl +++ b/Walk-On-the-moon/Walk-On-the-moon/Moon/moon script.lsl @@ -1,7 +1,10 @@ +// :SHOW: // :CATEGORY:Sphere World -// :NAME:Walk-On-The-Moon +// :NAME:Walk-On-the-moon // :AUTHOR:Ferd Frederix +// :KEYWORDS: // :CREATED:2013-11-19 16:49:29 +// :EDITED:2017-03-11 11:22:42 // :ID:1003 // :NUM:1543 // :REV:2 diff --git a/Walk-On-the-moon/Walk-On-the-moon/Poseball/poseball script.lsl b/Walk-On-the-moon/Walk-On-the-moon/Poseball/poseball script.lsl index 00846b62..9d353c76 100644 --- a/Walk-On-the-moon/Walk-On-the-moon/Poseball/poseball script.lsl +++ b/Walk-On-the-moon/Walk-On-the-moon/Poseball/poseball script.lsl @@ -1,7 +1,10 @@ +// :SHOW: // :CATEGORY:Sphere World -// :NAME:Walk-On-The-Moon +// :NAME:Walk-On-the-moon // :AUTHOR:Ferd Frederix +// :KEYWORDS: // :CREATED:2013-11-19 16:49:29 +// :EDITED:2017-03-11 11:22:42 // :ID:1003 // :NUM:1544 // :REV:2