Untitled
unknown
lsl
2 years ago
6.8 kB
24
Indexable
integer dialog_channel; integer listen_handle; list messages; string notecard_name = "ingestion_strings"; integer current_line = 0; integer deleteFlag = FALSE; key notecard_query_id; integer current_step = 0; integer number_of_steps = 0; string finish_message; string halt_message; integer message_mode = 0; // 0 for reading ingestion lines, 1 for reading finish and halt messages string holdingAnim = "drink_hold"; string drinkingAnim = "drink_ingest"; float drinkingAnimDuration = 7.0; // Set this to the duration of your drinking animation default { state_entry() { dialog_channel = (integer)("0x" + llGetSubString((string)llGetKey(), -7, -1)); notecard_query_id = llGetNotecardLine(notecard_name, current_line); } dataserver(key query_id, string data) { if(query_id == notecard_query_id) { if(data != EOF) { string trimmed_data = llStringTrim(data, STRING_TRIM); // Trim white spaces at the beginning and end of the line if(trimmed_data == "") { // This line is empty, so ignore it } else if(llGetSubString(trimmed_data, 0, 0) == "#") { // This line is a comment, so ignore it } else if(trimmed_data == "===") { message_mode = 1; // switch to reading finish and halt messages } else { if(message_mode == 0) { messages += trimmed_data; // append the line to the messages list number_of_steps++; // increase the number of steps } else if(message_mode == 1) { finish_message = trimmed_data; message_mode = 2; } else if(message_mode == 2) { halt_message = trimmed_data; } } current_line++; notecard_query_id = llGetNotecardLine(notecard_name, current_line); // get the next line } else { llOwnerSay("Finished reading notecard. Number of steps is: " + (string)number_of_steps); } } } attach(key id) { if(id) { llRequestPermissions(id, PERMISSION_ATTACH | PERMISSION_TRIGGER_ANIMATION); // Request permissions llStartAnimation(holdingAnim); // Start the holding animation llListen(dialog_channel, "", id, ""); llInstantMessage(id, (string)llList2String(messages, current_step)); llDialog(id, "Would you like to continue drinking? " + (string)(current_step+1) + "/" + (string)number_of_steps, ["Continue", "Stop"], dialog_channel); } else { llListenRemove(dialog_channel); llStopAnimation(holdingAnim); // Stop the holding animation if (deleteFlag) // If the delete flag is set, remove the object { llDie(); } } } touch_start(integer num_detected) { key id = llDetectedKey(0); if (id == llGetOwner() && llGetAttached()) // if the toucher is the owner and the object is attached { // close any existing dialog box llListenRemove(listen_handle); // Create a random channel to communicate on dialog_channel = (integer)llFrand(-9999.0) - 10000; listen_handle = llListen(dialog_channel, "", NULL_KEY, ""); if(current_step == number_of_steps - 1) { llDialog(id, llList2String(messages, current_step) + "\nThis is the last sip of your milkshake journey. Ready to finish? (Step " + (string)(current_step + 1) + "/" + (string)number_of_steps + ")", ["Finish"], dialog_channel); } else { llDialog(id, llList2String(messages, current_step) + "\nDo you wish to continue? (Step " + (string)(current_step + 1) + "/" + (string)number_of_steps + ")", ["Continue", "Stop"], dialog_channel); } } } listen(integer channel, string name, key id, string message) { if(message == "Continue" || message == "Finish") { current_step++; if(current_step < number_of_steps) { llInstantMessage(id, (string)llList2String(messages, current_step)); llStopAnimation(holdingAnim); // Stop the holding animation llStartAnimation(drinkingAnim); // Start the drinking animation llSleep(drinkingAnimDuration); // Wait for the animation to complete llStopAnimation(drinkingAnim); // Stop the drinking animation llStartAnimation(holdingAnim); // Restart the holding animation // For the last dialog box, change the option to "Finish" if(current_step == number_of_steps - 1) { llDialog(id, "This is the last sip of your milkshake journey. Ready to finish? " + (string)(current_step+1) + "/" + (string)number_of_steps, ["Finish"], dialog_channel); } else { llDialog(id, "Would you like to continue drinking? " + (string)(current_step+1) + "/" + (string)number_of_steps, ["Continue", "Stop"], dialog_channel); } } else { llInstantMessage(id, finish_message); current_step = 0; dialog_channel = 0; // Close the dialog llDetachFromAvatar(); // Detach the object } } else if(message == "Stop") { llStopAnimation(holdingAnim); // Stop the holding animation llInstantMessage(id, halt_message); current_step = 0; dialog_channel = 0; // Close the dialog llDetachFromAvatar(); // Detach the object } } run_time_permissions(integer permissions) { if (!(permissions & PERMISSION_ATTACH)) { llOwnerSay("This script requires attach permissions to function properly."); } } on_rez(integer start_param) { if (deleteFlag) // If the delete flag is set, remove the object { llDie(); } } }
Editor is loading...