// // Ver. 1.3.1 // integer cmd_channel = 856; integer lap_channel = 870; integer car_channel = 868; integer listen_hdl = 0; integer redtime; integer counting = 0; string owner_id = ""; string detect_id = ""; string car_type = "none"; integer timeup = 0; float timest; integer primid; integer minutes_o; integer minutes_d; integer seconds_o; integer seconds_d; integer toggle_on = FALSE; num_color(string color) { llMessageLinked(primid+5, -1, color, ""); llMessageLinked(primid+4, -1, color, ""); llMessageLinked(primid+3, -1, color, ""); llMessageLinked(primid+2, -1, color, ""); llMessageLinked(primid+1, -1, color, ""); } num_display(integer time) { integer sec = time%60; integer min = time/60; integer sec_o = sec%10; integer sec_d = sec/10; integer min_o = min%10; integer min_d = min/10; llMessageLinked(primid+5, sec_o, "", ""); seconds_o = sec_o; if (sec_d!=seconds_d) { llMessageLinked(primid+4, sec_d, "", ""); seconds_d = sec_d; } if (min_o!=minutes_o) { llMessageLinked(primid+3, min_o, "", ""); minutes_o = min_o; } if (min_d!=minutes_d) { llMessageLinked(primid+2, min_d, "", ""); minutes_d = min_d; } } init_lsl() { minutes_o = -1; minutes_d = -1; seconds_o = -1; seconds_d = -1; timeup = 0; //primid = llGetLinkNumber(); primid = 1; num_color("1.0 1.0 1.0"); num_display(0); llSetTimerEvent(0); counting = 0; owner_id = (string)llGetOwner(); if (listen_hdl!=0) llListenRemove(listen_hdl); listen_hdl = llListen(cmd_channel, "", NULL_KEY, ""); //llSay(0, "in init_lsl"); } default { state_entry() { if (llGetAttached()) { llResetScript(); } init_lsl(); //llSay(0, "in state_entry"); } on_rez(integer param) { llResetScript(); init_lsl(); //llSay(0, "in on_rez"); } changed(integer What) { //地域が再起動された場合 if (What & CHANGED_REGION_START) { llResetScript(); init_lsl(); } } attach(key id) { if (id==llGetOwner()) { llResetScript(); init_lsl(); } } timer() { float time; if (toggle_on) { time = llGetTime() - timest; } else { time = timeup - llGetTime() + timest; if (time<0) { llSetTimerEvent(0); counting = 0; return; } if ((integer)time<=redtime) num_color("1.0, 0.1, 0.1"); } num_display((integer)time); //llSay(0, "in timer: " + (string)time); } listen(integer ch, string name, key id, string msg) { list items = llParseString2List(msg,[" "],[]); string cmd = llList2String(items,0); string uid = llList2String(items,1); //llSay(0, cmd + " " + uid + ":" + (string)owner_id); // if (uid==detect_id) { if (cmd=="START" && counting==0) { timeup = llList2Integer(items,2); redtime = llList2Integer(items,3); num_color("0.1 1.0 0.1"); num_display(timeup); timest = llGetTime(); llSetTimerEvent(1); counting = 1; } // else if (cmd=="STOP") { llSetTimerEvent(0); num_color("1.0 1.0 1.0"); counting = 0; } // else if (cmd=="DETECT") { if ((!toggle_on) && counting==0) { num_color("0.1 1.0 0.1"); num_display(0); timest = llGetTime(); llSetTimerEvent(1); counting = 1; toggle_on = TRUE; } // else if (toggle_on) { llSetTimerEvent(0); // float time = llGetTime() - timest; num_color("1.0 1.0 1.0"); num_display((integer)time); llShout(lap_channel, "LAPTIME " + (string)time + " " + car_type + " " + owner_id); //llSay(0, (string)time); llShout(car_channel, "STOP " + detect_id); // counting = 0; toggle_on = FALSE; } } } // else if (uid==owner_id) { if (cmd=="SETUP") { detect_id = llList2String(items,2); car_type = llList2String(items,3); llSetTimerEvent(0); num_color("1.0 1.0 1.0"); num_display(0); counting = 0; toggle_on = FALSE; //llSay(0, detect_id); } // else if (cmd=="RESET") { detect_id = ""; llSetTimerEvent(0); num_color("1.0 1.0 1.0"); num_display(0); counting = 0; toggle_on = FALSE; } } } }