fixed names back to .txt, since we cannot get second inventory to
[feisty_meow.git] / huffware / huffotronic_tools_n_testers_v6.1 / logic_system_main_v1.8.txt
diff --git a/huffware/huffotronic_tools_n_testers_v6.1/logic_system_main_v1.8.txt b/huffware/huffotronic_tools_n_testers_v6.1/logic_system_main_v1.8.txt
new file mode 100755 (executable)
index 0000000..aa0c30c
--- /dev/null
@@ -0,0 +1,561 @@
+
+// logic system master script
+// copyright john jamison, imagilearning?
+// created by xyz
+// modified by fred huffhines / chris koeritz.
+//
+//
+
+// defaults...
+vector TEXT_COLOR = <0.6, 0.84, 0.8>;  // label color.
+float RADARTIME = 10.0;  // how frequently radar fires.
+float RANGE = 50.0;  // range of the sensor sweeps.
+integer MAX_AVATAR_AWOLS = 5;
+    // number of times the avatar is allowed to be missed by sensor.
+    // we have seen some unreliability of sensors, so a single miss is not a definite problem.
+list RESET = ["Restart", "CANCEL"];  // used in a menu someplace?
+string Choicetimer = "2";  // how long they get to make their choice?
+
+// global variables...
+integer current_awols;
+key user = NULL_KEY;
+key lquery = NULL_KEY;
+list dialog;
+string CHOICE1;
+string CHOICE2;
+string CHOICE3;
+string CHOICE4;
+string CHOICE5;
+string CHOICE6;
+string CHOICE7;
+string CHOICE8;
+string CHOICE1TEXT;
+string CHOICE2TEXT;
+string CHOICE3TEXT;
+string CHOICE4TEXT;
+string CHOICE5TEXT;
+string CHOICE6TEXT;
+string CHOICE7TEXT;
+string CHOICE8TEXT;
+integer CHOICE1POINTS;
+integer CHOICE2POINTS;
+integer CHOICE3POINTS;
+integer CHOICE4POINTS;
+integer CHOICE5POINTS;
+integer CHOICE6POINTS;
+integer CHOICE7POINTS;
+integer CHOICE8POINTS;
+integer TotalScore;
+string DIALOG = " ";
+string CurrentNoteCard;
+string resettext = " ";
+list CHOICE;
+integer line = 0;
+integer eof = 0;
+integer CHANNEL;
+
+initialize()
+{
+    CHOICE = [ CHOICE1TEXT, CHOICE2TEXT, CHOICE3TEXT, CHOICE4TEXT ];
+    llSetText("[System Ready]", TEXT_COLOR, 1);
+    eof = 0;
+}
+
+// leave the current setup and completely restart the script.
+reboot(string reason)
+{
+llSay(0, "restarting now because " + reason);
+    llResetScript();
+}
+
+// starts looking for our registered user.
+start_sensor_sweeps()
+{
+    llSensorRemove();  // clear any existing sensor.
+//llSay(0, "sweeping for " + user + " aka " + llKey2Name(user));
+    llSensorRepeat("", user, AGENT, RANGE, 2 * PI, RADARTIME);  // look for our customer.
+}
+
+// what this did before made no sense...
+// but now it serves to reset the device if the avatar wandered off.
+handle_sensor(integer numDetected)
+{
+    integer proceed = FALSE;
+    integer i;
+    for (i = 0; i < numDetected; i++) {
+        if (llDetectedKey(i) == user) proceed = TRUE;
+    }
+    if (proceed) return;  // keep running like we were.
+    else reboot("we no longer saw our user here.");  // reboot, since we don't see our user.
+}
+
+// processes commands coming from other scripts or other parts of the object.
+handle_link_message(string str, key id)
+{
+    if (str == "user") {
+        user = id;
+        llSetText ("System in use by " + llKey2Name (id), TEXT_COLOR, 1);
+        CurrentNoteCard = llGetObjectDesc();
+        CHANNEL = llRound (llFrand (-394304));
+        llListen (CHANNEL, "", NULL_KEY, "");
+        start_sensor_sweeps();
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+}
+
+// handles notecard data as it is read.
+process_incoming_data(key query_id, string data)
+{
+    list split_data = llParseString2List (data, [":"], []);
+    string cmd = llToLower(llList2String(split_data, 0));
+
+//hmmm: terribly repetitive code here.  clean up, shorten.
+    if (cmd == "choicetimer") {
+        Choicetimer = llList2String (split_data, 1);
+    }
+    if (cmd == "chat") {
+        llSay(0, llList2String (split_data, 1));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "whisper") {
+        llWhisper(0, llList2String (split_data, 1));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "givenotecard") {
+        llGiveInventory (user, llList2String (split_data, 1));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "channelsay") {
+        llSay((integer) llList2String (split_data, 1), llList2String (split_data, 2));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "channelshout") {
+        llShout ((integer) llList2String (split_data, 1),
+                 llList2String (split_data, 2));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "channelwhisper") {
+        llSay((integer) llList2String (split_data, 1), llList2String (split_data, 2));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "resettext") {
+        resettext = llList2String (split_data, 1);
+
+    }
+    if (cmd == "end") {
+///        CurrentNoteCard = llGetObjectDesc();
+///        line = 0;
+        reboot("notecard said to end processing.");
+    }
+
+    if (cmd == "giveobject") {
+        llGiveInventory (user, llList2String (split_data, 1));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+///TALK TO VB AS THIS NEXT PART NEEDS A MEDIA RELAY FOR IT TO WORK
+    if (cmd == "videourl") {
+        if (llList2String (split_data, 3) != "") {
+            llParcelMediaCommandList ([PARCEL_MEDIA_COMMAND_URL,
+               llList2String (split_data, 1) + ":" +
+               llList2String (split_data, 2) + ":" +
+               llList2String (split_data, 3) +
+               llList2String (split_data, 4)]);
+            line++;
+            lquery = llGetNotecardLine (CurrentNoteCard, line);
+        }
+        else {
+            llParcelMediaCommandList ([PARCEL_MEDIA_COMMAND_URL,
+                llList2String (split_data, 1) + ":" +
+               llList2String (split_data, 2)]);
+            line++;
+            lquery = llGetNotecardLine (CurrentNoteCard, line);
+        }
+        //llSay(-840,llList2String(dat,1));
+        //llSay(-848,llList2String(dat,1));
+    }
+    if (cmd == "mediatexture") {
+        llParcelMediaCommandList ([PARCEL_MEDIA_COMMAND_TEXTURE,
+                                   (key) llList2String (split_data, 1)]);
+        //llSay(-849,llList2String(dat,1));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "sleep") {
+        llSleep (llList2Float (split_data, 1));
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "audiourl") {
+llSay(0, "got to audio url");
+        if (llList2String (split_data, 3) != "") {
+            llSetParcelMusicURL (llList2String (split_data, 1) + ":" +
+                llList2String (split_data, 2) + ":" +
+                llList2String (split_data, 3) + llList2String (split_data, 4));
+            line++;
+            lquery = llGetNotecardLine (CurrentNoteCard, line);
+        }
+
+        else {
+            llSetParcelMusicURL (llList2String (split_data, 1) + ":" +
+                llList2String (split_data, 2));
+            line++;
+            lquery = llGetNotecardLine (CurrentNoteCard, line);
+        }
+        //llSay(-840,llList2String(dat,1));
+    }
+    //THIS IS OPTION A//
+    if (cmd == "weburl") {
+        llLoadURL (user, llList2String (split_data, 1),
+                   llList2String (split_data, 2) + llList2String (split_data,
+                                                            3) +
+                   llList2String (split_data, 4));
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+
+
+    if (cmd == "dialog") {
+        DIALOG = llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice1") {
+        CHOICE1TEXT = llList2String (split_data, 1);
+        CHOICE1 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+
+    }
+    if (cmd == "choice2") {
+        CHOICE2TEXT = llList2String (split_data, 1);
+        CHOICE2 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice3") {
+        CHOICE3TEXT = llList2String (split_data, 1);
+        CHOICE3 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice4") {
+        CHOICE4TEXT = llList2String (split_data, 1);
+        CHOICE4 = llList2String (split_data, 2);
+
+        dialog = dialog +[llList2String (split_data, 1)];
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice5") {
+        CHOICE5TEXT = llList2String (split_data, 1);
+        CHOICE5 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+
+    }
+    if (cmd == "choice6") {
+        CHOICE6TEXT = llList2String (split_data, 1);
+        CHOICE6 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+
+    }
+
+    if (cmd == "choice7") {
+        CHOICE7TEXT = llList2String (split_data, 1);
+        CHOICE7 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+
+    }
+
+    if (cmd == "choice8") {
+        CHOICE8TEXT = llList2String (split_data, 1);
+        CHOICE8 = llList2String (split_data, 2);
+        dialog = dialog +[llList2String (split_data, 1)];
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+
+    }
+
+    if (cmd == "choice1points") {
+        CHOICE1POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+
+    }
+
+    if (cmd == "choice2points") {
+        CHOICE2POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice3points") {
+        CHOICE3POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice4points") {
+        CHOICE4POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice5points") {
+        CHOICE5POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice6points") {
+        CHOICE6POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice7points") {
+        CHOICE7POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "choice8points") {
+        CHOICE8POINTS = (integer) llList2String (split_data, 1);
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "email") {
+        llEmail (llList2String (split_data, 1),
+                 llKey2Name (user) + " Scored " + (string) TotalScore +
+                 " On " + llGetObjectDesc (),
+                 llKey2Name (user) + " Scored " + (string) TotalScore +
+                 " On " + llGetObjectDesc () + "Score As Of " +
+                 CurrentNoteCard);
+
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (cmd == "imuser") {
+        llInstantMessage (user, llList2String (split_data, 1));
+    }
+
+    if (cmd == "im") {
+        llInstantMessage (llList2String (split_data, 1), llList2String (split_data, 2));
+    }
+    if (cmd == "deadusertime") {
+        RADARTIME = (integer) llList2String (split_data, 1);
+    }
+
+    if (cmd == "deadrange") {
+        RANGE = (integer) llList2String (split_data, 1);
+        start_sensor_sweeps();
+    }
+
+    if (cmd == "finalscore") {
+        llSay (0,
+               "You Scored " + (string) TotalScore + "/" +
+               llList2String (split_data, 1));
+    }
+    if (cmd == "playsounduuid") {
+        llPreloadSound (llList2String (split_data, 1));
+        llPlaySound (llList2String (split_data, 1),
+                     (integer) llList2String (split_data, 2));
+    }
+
+    if (cmd == "debug") {
+        llSay (2147483647,
+               "System Debug Info follows " + "/n " +
+               (string) "key user = " + (string) user +
+               (string) " key lquery = " + (string) lquery +
+               (string) " integer DEADTIME = " + (string) RADARTIME +
+               "string CHOICE1 = " + CHOICE1 + "string CHOICE2 = " +
+               CHOICE2 + "string CHOICE3 = " + CHOICE3 +
+               "string CHOICE4 = " + CHOICE4 + "string CHOICE1TEXT = " +
+               CHOICE1TEXT + "string CHOICE2TEXT = " + CHOICE2TEXT +
+               "string CHOICE3TEXT= " + CHOICE3TEXT +
+               "string CHOICE4TEXT= " + CHOICE4TEXT +
+               "integer CHOICE1POINTS" + (string) CHOICE1POINTS +
+               "integer CHOICE2POINTS" + (string) CHOICE2POINTS +
+               "integer CHOICE3POINTS" + (string) CHOICE3POINTS +
+               "integer CHOICE4POINTS" + (string) CHOICE4POINTS +
+               "integer Choicetimer = " + (string) Choicetimer +
+               "integer TotalScore =" + (string) TotalScore +
+               "string DIOALOGE = " + DIALOG +
+               "string CurrentNoteCard = " + CurrentNoteCard +
+               "string resettext = " + resettext +
+               "list RESET = [Restart,CANCEL]" + "list CHOICE = " +
+               (string) CHOICE + "integer line = " + (string) line);
+
+    }
+
+    if (data == EOF) {
+        if (eof != 2 | eof == 1) {
+            eof = 2;
+            llSetTimerEvent ((float) Choicetimer);
+        }
+    } else {
+        line++;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+}
+
+// process what the device hears spoken nearby.
+hear_voices(integer channel, string name, key id, string message)
+{
+//hmmm: bunkum.  do this as a list.
+    if (message == CHOICE1TEXT) {
+        CurrentNoteCard = CHOICE1;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE1POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE2TEXT) {
+        CurrentNoteCard = CHOICE2;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE2POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE3TEXT) {
+        CurrentNoteCard = CHOICE3;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE3POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE4TEXT) {
+        CurrentNoteCard = CHOICE4;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE4POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE5TEXT) {
+        CurrentNoteCard = CHOICE5;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE5POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE6TEXT) {
+        CurrentNoteCard = CHOICE6;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE6POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE7TEXT) {
+        CurrentNoteCard = CHOICE7;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE7POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == CHOICE8TEXT) {
+        CurrentNoteCard = CHOICE8;
+        dialog =[];
+        eof = 0;
+        line = 0;
+        TotalScore = TotalScore + CHOICE8POINTS;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+    if (message == "Restart") {
+        eof = 0;
+        line = 0;
+        lquery = llGetNotecardLine (CurrentNoteCard, line);
+    }
+}
+
+//////////////
+
+// ensure stops running if kept in updater object.
+default
+{
+    state_entry() { if (llSubStringIndex(llGetObjectName(),  "huffotronic") < 0) state real_default; }
+    on_rez(integer parm) { state rerun; }
+}
+state rerun { state_entry() { state default; } }
+
+// main state engine.
+state real_default
+{
+    state_entry () {
+        initialize();
+    }
+
+    on_rez (integer i) {
+        reboot("object just rezzed.");
+    }
+
+    no_sensor () {
+        current_awols++;
+//llSay(0, "sensor missed avatar.");
+        if (current_awols > MAX_AVATAR_AWOLS) {
+            reboot("avatar was missed by sensor sweep too many times.");
+        }
+    }
+
+    sensor (integer numDetected) {
+        current_awols = 0;
+//llSay(0, "sensor saw avatar.");
+        handle_sensor(numDetected);
+    }
+
+    link_message (integer sender_num, integer num, string str, key id) {
+        handle_link_message(str, id);
+    }
+
+    touch_start (integer total_number) {
+        integer i;
+        for (i = 0; i < total_number; i++) {
+            if (llDetectedKey(i) == user) {
+                llDialog (user, resettext, RESET, CHANNEL);
+                return;
+            }
+        }
+    }
+
+    listen (integer channel, string name, key id, string message) {
+        hear_voices(channel, name, id, message);
+    }
+
+    dataserver (key query_id, string data) {
+        process_incoming_data(query_id, data);
+    }
+
+    collision_start(integer total_number)
+    {
+        if (user == NULL_KEY) {
+//llSay(0, "sending startup link message.");
+            handle_link_message("user", llDetectedKey(0));
+        }
+    }
+
+    timer () {
+        llDialog (user, DIALOG, dialog, CHANNEL);
+        llSetTimerEvent (0);
+    }
+}