X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=huffware%2Fhuffotronic_tools_n_testers%2Flogic_system_main_v1.8.txt;fp=huffware%2Fhuffotronic_tools_n_testers%2Flogic_system_main_v1.8.txt;h=aa0c30cd688f9e7db0cf456c0be4270d3ac93700;hb=0d8edb6dc63fa915c775b005830084935f75174c;hp=0000000000000000000000000000000000000000;hpb=29190d88923f6281801872a80811faf6c2d7943e;p=feisty_meow.git diff --git a/huffware/huffotronic_tools_n_testers/logic_system_main_v1.8.txt b/huffware/huffotronic_tools_n_testers/logic_system_main_v1.8.txt new file mode 100755 index 00000000..aa0c30cd --- /dev/null +++ b/huffware/huffotronic_tools_n_testers/logic_system_main_v1.8.txt @@ -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); + } +}