From e96327ec36a24b8bc3c6acd4a3ddc8522acc30f4 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Fri, 10 Feb 2012 19:39:18 +1000 Subject: Shift things around so that now sim objects include their UUID in the name. --- .../~run.lsl | 192 +++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 LuaSL/Test sim/objects/onefang%27s%20test%20bed.5cb927d5-1304-4f1a-9947-308251ef2df0/~run.lsl (limited to 'LuaSL/Test sim/objects/onefang%27s%20test%20bed.5cb927d5-1304-4f1a-9947-308251ef2df0/~run.lsl') diff --git a/LuaSL/Test sim/objects/onefang%27s%20test%20bed.5cb927d5-1304-4f1a-9947-308251ef2df0/~run.lsl b/LuaSL/Test sim/objects/onefang%27s%20test%20bed.5cb927d5-1304-4f1a-9947-308251ef2df0/~run.lsl new file mode 100644 index 0000000..c2c9943 --- /dev/null +++ b/LuaSL/Test sim/objects/onefang%27s%20test%20bed.5cb927d5-1304-4f1a-9947-308251ef2df0/~run.lsl @@ -0,0 +1,192 @@ +//MLPV2 Version 2.3 - Learjeff Innis, from +//MLP MULTI-LOVE-POSE V1.2 - Copyright (c) 2006, by Miffy Fluffy (BSD License) +//To donate, go to my profile (Search - People - Miffy Fluffy) and use the "Pay..." button, thanks! +//You can also find the link to the latest version here. +// OpenSim port by Jez Ember +// Meta 7 fixes by onefang Rejected + +integer MAX_AVS = 6; +integer ResetOnOwnerChange = FALSE; + +// DESCRIPTION OF THE SCRIPTS +// +// ~run: +// Default: sets other scripts to not running. +// When the object is touched it will start all scrips. +// +// ~memory: +// Here the positions are stored permanently. Information is still kept when the script is +// not running or when everything is placed in inventory. The information will be lost only +// when the ~memory script is reset. +// A backup can be made on the .POSITIONS notecard, when the memory is empty, it will start +// reading the .POSITIONS notecard automatically. +// +// ~menu: +// 1.loading: reads the .MENUITEMS notecard and builds the menu. +// When it reads a "POSE": - the animations are stored in ~pose +// - their matching positions are looked up in ~memory and stored +// in ~pos. +// 2.ready: +// When the object is touched: - shows the main menu +// - listens for menu selections. +// +// When a submenu is selected: - shows the submenu +// - when balls are defined for this submenu it will rez +// balls (if not already there) and set their colors. +// +// When a pose is selected: - ~pose will send the animations to ~pose1 and ~pose2, +// they will set the animations to the avatars +// - ~pos wil send the matching positions to each ball. +// +// When a position is saved: - ~pose will ask the balls for their position +// - the positions are saved in ~memory ("permanent") +// - the positions are updated in ~pos +// +// When "STOP" is selected: - will hide the balls +// - will stop the pose +// When "STOP" is selected again (or if no pose is started yet): +// - will remove the balls (derez/die) +// +// ~pos: +// - loads the positions from ~memory and stores them (until shutdown/restart) +// - sends positions for the selected pose to the balls +// +// ~pose: +// - loads the animations from the .MENUITEMS notecard and stores them (until shutdown/restart) +// - sends animations for the selected pose to ~pose1 and ~pose2 +// - when saving a position: will ask balls for their position and sends it to ~pos and ~memory +// (~pos would be a more logical place to handle this, but ~pose has more free memory). +// +// ~poser, ~poser 1, ~poser 2, ~poser 3 (one for each ball): +// - will ask permission to animate the avatar on ball +// - will set the animations to avatar +// +// ~ball +// - when balls are defined for a submenu (in .MENUITEMS), ~menu will rez copies of ~ball +// - each will receive a unique communication channel from ~menu +// - the color for each ball is set by ~menu +// - the position of each ball is set by ~pos +// - when an avatar selects to sit on a ball, the avatar info is sent to the appropriate; they +// will ask permission and set the animation directly to the avatar (not via the ball) +// - balls will commit suicide when they don't hear a "LIVE" message each minute (from ~menu). +// +// have fun! + +//Note: if you make a revised version, please mention something like this: +//"MLP - alternative version by ... .... - Revision 1 (based on MLP V1.2 by Miffy Fluffy) + +key Owner; + +list Scripts = [ + "~menucfg" + , "~pos" + , "~pose" + , "~poser" + , "~poser 1" + , "~poser 2" + , "~poser 3" + , "~poser 4" + , "~poser 5" + ]; + +list OptionalScripts = [ + "~props" + , "~sequencer" + ]; + +setRunning(integer st) { + integer ix; + list scripts = Scripts; + string script; + + for (ix = 0; ix < 100; ++ix) { + integer jx; + + // try to stop any remaining scripts in the list + for (jx = llGetListLength(scripts) - 1; jx >= 0; --jx) { + script = llList2String(scripts, jx); + if (llGetInventoryType(script) == INVENTORY_SCRIPT) { + llSetScriptState(script, st); + scripts = llDeleteSubList(scripts, jx, jx); + --jx; + } + } + + // got them all yet? + if (llGetListLength(scripts) == 0) { + // Yes -- handle key ones + llSetScriptState("~memory", st); + llSetScriptState("~menu", st); + if (st) { + llResetOtherScript("~memory"); + llResetOtherScript("~menu"); + } + + // start/stop optional scripts if present + for (jx = llGetListLength(OptionalScripts) - 1; jx >= 0; --jx) { + script = llList2String(OptionalScripts, jx); + if (llGetInventoryType(script) == INVENTORY_SCRIPT) { + llSetScriptState(script, st); + } + } + return; + } + + llSleep(0.1); + } + + llOwnerSay("missing scripts: " + llList2CSV(scripts)); +} + +setBalls(string cmd) { + integer ch = channel(); + integer ix; + + for (ix = 0; ix < MAX_AVS; ++ix) { + llSay(ch + ix, cmd); //msg to balls + } +} + +integer channel() { + return (integer)("0x"+llGetSubString((string)llGetKey(),-4,-1)); +} + +default { + + state_entry() { + setBalls("DIE"); + Owner = llGetOwner(); + setRunning(FALSE); + llOwnerSay("OFF (touch to switch on)"); + } + + touch_start(integer i) { + if (llDetectedKey(0) == llGetOwner()) state run; + } + + // Waits for another script to send a link message. + link_message(integer sender_num, integer num, string str, key id) { + if (str == "PRIMTOUCH" && id == llGetOwner()) { + state run; + } + } + + changed(integer change) { + if (change & CHANGED_OWNER && Owner != llGetOwner()) { + llResetScript(); + } + } +} + +state run { + state_entry() { + setRunning(TRUE); + } + changed(integer change) { + if (ResetOnOwnerChange + && (change & CHANGED_OWNER) + && Owner != llGetOwner()) { + llResetScript(); + } + } +} -- cgit v1.1