Good for reminding you about sandbox returns etc. Ideally worn as a single prim HUD attachment.
// V3 // string alarm = "5e1d5f52-e7ae-0194-a412-93a96f39ff6f"; // Name of the sound in the object inventory. // Or the UUID of any sound. float volume = 0.5; vector passive = <0.0,0.0,1.0>; // Color for prim when timer is off. vector active = <0.0,1.0,0.0>; // Color for prim when timer is running. vector alarmed = <1.0,0.0,0.0>; // Color for prim when alarm is sounding. float time; // Used to store the timer length. integer on; // Used to store if the timer is running. default { on_rez(integer param) { llResetScript(); } state_entry() { llStopSound(); llSetColor(passive, ALL_SIDES); llSetObjectName("Alarm"); } touch_end(integer nd) { if(on) llResetScript(); else { if((time = (((float)llGetObjectDesc()) * 60)) < 1.0) // Time established from the prim description. { llOwnerSay("The time is not set.\nPlease write the time into the object description and try again"); return; } llSetColor(active, ALL_SIDES); llOwnerSay("/me is set to sound in " + ((string)llRound((time / 60))) + " minutes."); llSetTimerEvent(time); on = TRUE; llPreloadSound(alarm); } } timer() { llSetTimerEvent(0.0); llLoopSound(alarm, volume); llSetColor(alarmed, ALL_SIDES); } }