// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Pocket rock-paper-scissors // Not compiled or tested in-world // Setup: Put in a prim; owner-touch opens three choice buttons. The dialog listener closes after a choice or 20 seconds. // Stop / restore: Disable or remove. It changes no persistent visual settings. // Notes: For play only. The listener is restricted to the current owner and uses a random negative channel; it does not handle wagers or store identity history. // License: see LICENSE in this distribution. // Original Incoprea example. MIT. Not compiled or tested in-world. list choices = ["Rock", "Paper", "Scissors"]; integer channel; integer handle; close() { if (handle) llListenRemove(handle); handle = 0; llSetTimerEvent(0.0); } default { touch_start(integer count) { if (llDetectedKey(0) != llGetOwner()) return; close(); channel = -1000 - (integer)llFrand(1000000.0); handle = llListen(channel, "", llGetOwner(), ""); llDialog(llGetOwner(), "Choose your move", choices, channel); llSetTimerEvent(20.0); } listen(integer received, string name, key id, string message) { if (received != channel || id != llGetOwner()) return; integer player = llListFindList(choices, [message]); if (player < 0) return; close(); integer computer = (integer)llFrand(3.0); string result = "Draw"; if (player != computer) { if ((player - computer + 3) % 3 == 1) result = "You win"; else result = "Computer wins"; } llOwnerSay("You: " + message + "; computer: " + llList2String(choices, computer) + ". " + result + "."); } timer() { close(); } changed(integer change) { if (change & CHANGED_OWNER) llResetScript(); } }