Difference between revisions of "User:DoteDote Edison"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 7: Line 7:
====Example Scripts for the Examples page once it's formatted:====
====Example Scripts for the Examples page once it's formatted:====
=====Toggle On/Off via State=====
=====Toggle On/Off via State=====
An example script showing how [[state]] changes can be a useful method to switch between two script modes, in this case, On or Off.  When the script first runs, it begins in the '''default''' state and the [[state_entry]] event is executed.  When a user interacts with the object by touch, the script switches to the '''on''' state.  The '''on''' state executes its state_entry event, then waits for a user touch to trigger a state change back to the '''default''' state.
An example script showing how a [[state]] change can be used to switch between two script modes, in this case, On or Off.  When the script first runs, it begins in the '''default''' state and the [[state_entry]] event is executed.  When a user interacts with the object by touch, the script switches to the '''on''' state.  The '''on''' state executes its state_entry event, then waits for a user's touch to trigger a state change back to the '''default''' state.
   
   
<pre><lsl>
<pre><lsl>

Revision as of 18:44, 31 January 2007


Not a Wiki pro, so using this page to figure out how to format properly.

Example Scripts for the Examples page once it's formatted:

Toggle On/Off via State

An example script showing how a state change can be used to switch between two script modes, in this case, On or Off. When the script first runs, it begins in the default state and the state_entry event is executed. When a user interacts with the object by touch, the script switches to the on state. The on state executes its state_entry event, then waits for a user's touch to trigger a state change back to the default state.

<lsl>
// Toggle On-Off via State

default {
    state_entry() {
		// run this code when entering the default state
		// displays red "OFF" as floating text above the prim
		llSetText("OFF", <1,0,0>, 1.0);
	}
    touch_start(integer num_detected) {
		// when touched, switch to state named 'on'
		state on;
	}
}

state on {
	state_entry() {
		// run this code when entering state 'on'
		// displays green "ON" as floating text above the prim
		llSetText("ON", <0,1,0>, 1.0);
	}
	touch_start(integer num_detected) {
		// when touched, switch to the default state
		state default;
	}
}
</lsl>

Email-to-IM Script for the Script Library

<lsl>
// Email-to-IM
// DoteDote Edison

///////// constants /////////
// how often to check for new email when owner is online (seconds)
float fast = 60.0;
// how often to check owner online status when owner is offline (seconds)
float slow = 300.0; 

////////// globals //////////
key request;
key owner;
integer owner_online;

default {
	state_entry() {
		owner = llGetOwner();
		string address = (string)owner + "@lsl.secondlife.com";
		llSetText("Email Server\nOnline", <0.25, 1.0, 0.25>, 1.0);
		llOwnerSay("Now online.  The Email-to-IM address for " + llKey2Name(owner) + " is:\n" + address);
		llSetTimerEvent(fast);
	}
	on_rez(integer start_param) {
		llResetScript();
	}
	touch_start(integer num_detect) {
		if (llDetectedKey(0) == owner) state off;
	}
	email(string time, string sender, string subject, string body, integer num_remain) {
		llInstantMessage(owner, "Email Received from: " + sender + " -- " + time);
		llInstantMessage(owner, body);
		if (num_remain > 0) llGetNextEmail("", "");
	}
	dataserver(key query, string data) {
		if (query == request) {
			request = "";
			if (data == "1") {
				owner_online = TRUE;
				llSetTimerEvent(fast);
			}
			else {
				owner_online = FALSE;
				llSetTimerEvent(slow);
			}
		}
	}
	timer() {
		request = llRequestAgentData(owner, DATA_ONLINE);
		if (owner_online) llGetNextEmail("", "");
	}
	state_exit() {
		llSetTimerEvent(0.0);
		llSetText("Email Server\nOffline", <1.0, 0.25, 0.25>, 1.0);
	}
}

state off {
	touch_start(integer num_detect) {
		if (llDetectedKey(0) == owner) state default;
	}
	on_rez(integer start_param) {
		llResetScript();
	}
}
</lsl>