Jump to content


  • Posts

  • Joined

  • Last visited


0 Neutral
  1. Since I started using SL, I understand that the viewer checks for these updates automatically and prompts for you to update at random times. Lately, I haven't been prompted and I was a few versions down from the latest before I recently downloaded the update online. I was wondering if there was a way to update the viewer manually from within the application and also if there is a logic to how the viewer automatically checks for these updates. Most applications will check upon launch. it can be a bit bothersome to have to update 20 minutes after the launch in the middle of something important.
  2. Thanks!! Upon first use, it was able to rez everything correctly as long as the objects were in the correct distance to the emitter object. After a couple times, the emitter started to rez the scene exactly the way it was showing before my first post (rotated 90 degrees). I'll keep at it and post a solution if I come across one.
  3. Greetings, up until now I thought that a "rezzer disc" was a common object for rezzing scenes but it seems it's not at all that popular. I'm using a disc to rez about 5 scenes. You'll click on the disc, it gives you a dialog menu with the 5 scenes, you'll choose one and click on the "new scene crate" to display it. The most important thing here is that when I display it, the scene, which includes about 10 or so objects displays in very different positions from when I placed it into the disc (rotating 90 degrees usually). The "rezzer disc" script can be viewed here: http://pastebin.com/T1V8pD8Q I followed the notecard that comes with it step by step and though the scene rezzes, it's not correctly placed: Follow these steps for creating a new scene: 1. Create a scene within 20 meters of simulation rezzer system or new scene crate. 2. Select New Scene from the simulation rezzer system to rez a new scene crate. 3. For each linked set of prims place the Scene-component-rezzing script in the primary prim. 4. From the New Scene crate menu select Record. 5. Take the recorded scene into your inventory. 6. Right click on the New Scene crate to Edit and then click on the Contents tab. 7. Place the recorded scene objects from your inventory into the content tab of the New Scene crate. 8. Rename the New Scene crate to label your scene. 9. Take your new labeled scene crate into your inventory. 10. Right click on the simulation rezzer system and select edit and then open the Contents tab. 10. Place your newly labeled scene crate into the simulation rezzer system (under the Contents tab). Not sure if anyone is familiar with it, but I thought I might ask for help anyway since this is my first time using a rezzing system this complex. I'll be working on a fix but thanks for any advice you provide!
  4. Thanks for your reply Amethyst. The screenshot below (if viewable) shows where I'm able to set the permissions for multiple objects. This works ONLY on items/scripts inside the contents folder of each object. Whenever I do random checks after applying the full permissions, there are always objects that have unticked permissions either for "Anyone" or "Next Owner." Only 13 objects needed to be set to full permission, but if there were a lot more (say 100, 200), as of now I'd still be trying to click on every object to set full permission to.
  5. Greetings, I looked at how to do bulk-setting permissions, but this only applies to objects in the contents of every object selected http://community.secondlife.com/t5/English-Knowledge-Base/Object-permissions/ta-p/700129. Is there any way to bulk-set the permissions for the general tab as well?
  6. :matte-motes-big-grin: Sorry for not fully explaining. Any channels at "-3000" in the script are for either listening or talking to other objects in my scenarios. There are a lot of messages going back and forth which makes it pretty confusing. I have a fix for when the questions would appear out of order upon restarting the quiz. I place llResetScript(); in after the init() function whenever the quiz is finished (either by quitting, or running out of lines). That'll reset the script entirely and there won't be leftover questions that appear. I also have a fix for the dialog box disappearance after clicking "no". I placed the following code within the conditional statement when (the message == "no" // Av has touched the panel and does NOT want to quit). else if(message == "NO") // Av has touched the panel and does NOT want to quit { if (checkAnswer == "D") {llDialog(gAvKey,gQuestion,["Done"],CHAN);} if (checkAnswer == "N") {llDialog(gAvKey,gQuestion,["Next"],CHAN);} if (checkAnswer == "A") {llDialog(gAvKey,gQuestion,["Awesome"],CHAN);} } checkAnswer is a string which sets its value equal to a letter representing the answer key name for the current question: 'D' for Done, 'N' for Next, etc... If the current question you're on has a "Done" answer for instance, when you click "no" after attempting to quit the quiz, it'll display that question again correctly (with a "Done" answer) because the script knows the answer key for that question. Hopefully that makes since
  7. I really want to try out the suggestions above but it seems I have another issue or issues to work out. The first would be that whenever I quit the quiz on a particular question, when I restart it, the quiz pops up the last question I was on in addition to the first question of the quiz. The second is that when I attempt to quit the quiz and select "no" from the question "Do you want to QUIT now?", the dialog boxes disappear completely when I confident it's supposed to return to the last question. The code I've been working with is below. I've modified it a bit and now it's not much of a quiz but its very helpful for the medical scenarios that I need to create. I've compared it to the original quiz and I cannot find too many differences in the basic structure. I haven't made many if any critical changes to it. //A Dialog-driven quiz, using text from a notecard -- Rolig Loon -- October 2009// Free for public use -- please don't do something crass like selling my script.// Modify if you must, but please keep these header lines intact. Be nice.//// Notecard format:// A line beginning with a "Q" is part of a question// A line beginning with an "A" is a string of comma-delimited zeros (wrong) and a one (right) to identify the answer// A line beginning with a "#" is a comment// Blank lines are ignored//// Dialog boxes are limited to 512 characters, so make each question (including choices) short enough to fit.// There is no limit to the number of questions in a quiz, and you may have up to 12 answer choices per question//// =============== sample notecard ===========//# Lines starting with Q appear verbatim in a dialog box//# You may have as many Q lines as you want per question, but only one A line//# Interpreted data begins immediately after the lead character in a line//QWhat is the capital of Minnesota?//Q1. St. Paul//Q2. Minneapolis//Q3. Iowa City//Q4. Boston//A1,0,0,0//QHow many fingers are on my right hand?//Q1. One//Q2. Two//Q3. Three//Q4. Four//Q5. Five//A0,0,0,0,1// ================= end of sample =================//// Instructor types "results" in channel 24 to get a report of all student scoresstring gCard; //Notecard nameinteger gLine; //Current line being readkey gQID; //Dataserver keyinteger gtouch; //Activates/deactivates touch_start event list gAvList = []; //Cumulative list of people who have taken this quizstring gAv; //Name of the current quiz-takerkey gAvKey; //Key of the current quiz-takerinteger CHAN; //Channel for dialog communicationinteger Handle; //Listen handle for dialog//integer gScore; //This quiz-taker's scorestring gQuestion; //Text for the current questionlist gAnswers; //Answer key for the current questionlist gAllScores = []; //Cumulative list of scores for quiz-takersinteger Timespan = 30; // [highlight]This is the maximum time alloted for the quiz, in minutes. Change here if needed.[/highlight] integer countQues = 0; // Counts the current questioninteger t = 0; // Rotation for Red Medical Symbol integer IsNameOnList(list namelist, string name) //Verifies whether av has already taken the quiz{ integer i; integer len = llGetListLength(namelist); for (i=0; i<=len-1;++i) if(llList2String(namelist,i) == "adadfhh") { return TRUE; } return FALSE;}init() //Resets parameters for the next quiz-taker{ llSetTimerEvent(0); gtouch = 0; gAv = ""; gAvKey = NULL_KEY; gLine = 0; // gAllScores += gScore; // gScore = 0; gAvList = []; llListenControl(Handle,FALSE); countQues = 0; llSay(-3000, "stopped"); // Simulation isn't in progress, send the message out t = 0; // Begin Rotation // Rotate the symbol and set the hovering text llTargetOmega(<4.0,0.0,0.0>*llGetRot(),0.1,0.01); llSetText("Click to begin the simulation.", <1.0, 1.0, 1.0>, 2.0); //Loop Rotation until t=1 do { llSetPrimitiveParams( [ PRIM_GLOW, ALL_SIDES, .3 ] );} while(t = 0);}list order_buttons(list buttons){return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4)+ llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);}default{ state_entry() { gCard = llGetInventoryName(INVENTORY_NOTECARD,0); gAvList = []; CHAN = (integer)(llFrand(100000000))* (-1); Handle = llListen(CHAN,"","",""); llListen(24,"",llGetOwner(),""); init(); } touch_start(integer total_number) { if (gtouch == 0) // Starting quiz with a new person { t = 1; // Stop Rotation by setting t = 1 llSetPrimitiveParams( [ PRIM_GLOW, ALL_SIDES, .0 ] ); llSetText("Simulation in Progress", <1.0, 0.0, 0.0>, 1.0); if(IsNameOnList(gAvList,llDetectedName(0))) { llInstantMessage(llDetectedKey(0),"Sorry, "+ llDetectedName(0) + ". You have already taken the quiz. You cannot take it twice."); return; } else { gAvList += llDetectedName(0); // Add av to the list of people who have attempted this quiz } gAv = llDetectedName(0); gAvKey = llDetectedKey(0); llInstantMessage(gAvKey,"Hello " +gAv+ "! Welcome to the Smart Alarm Simulation - Scenario #3 (Lead partially dislodged)!\n\n"); // llInstantMessage(gAvKey, "You will have "+(string)Timespan+" minutes to finish this Simulation. Respond to choices as they appear in dialog boxes on the top right corner of your screen."); llInstantMessage(gAvKey,"Click the symbol again if you want to stop the simulation before it is finished.\n"); llSetTimerEvent(Timespan*60); } if (gAv != llDetectedName(0)) //Only accept touches from this av until the quiz is finished { llInstantMessage(llDetectedKey(0),"Someone else is experiencing the simulation now. Please wait."); return; } if (gtouch >=1) // This is the emergency stop. Av wants to stop taking the quiz before the last question { llListenControl(Handle,TRUE); llDialog(gAvKey,"Do you want to QUIT now?", ["YES", "NO"],CHAN); return; } // An av should only reach this point if it is the first touch gQID = llGetNotecardLine(gCard,gLine); //Read the first line of the notecard ++gtouch; } changed(integer change) { if(change & CHANGED_INVENTORY) { llResetScript(); } }timer(){ llInstantMessage(gAvKey,"Your time is up. Thank you for trying Smart Alarm Scenario #3.");// Your score is " + (string)gScore); llSay(-3000, "DONE"); // llEmail(gMailAddr, gAv+" Simulation Score", "Simulation Score is "+ (string)gScore); init(); //Restart the quiz for the next person}dataserver(key query_id, string data){ if(query_id == gQID) //If the data request came from this script { if(data != EOF) //If there is still data to be read from the notecard { if(llGetSubString(data,0,0) == "#"||llGetSubString(data,0,0) == "") //Ignore comment lines and blank lines { ++gLine; gQID = llGetNotecardLine(gCard,gLine); } else if (llGetSubString(data,0,0) == "Q") //Read the question and all answer choices { gQuestion += llGetSubString(data,1,-1) + "\n"; //Format each "Q" line as a new line in the dialog box ++gLine; gQID = llGetNotecardLine(gCard,gLine); } else if (llGetSubString(data,0,0) == "A") //Read the answer key { gAnswers = llParseString2List(llGetSubString(data,1,-1),[","],[]); integer len = llGetListLength(gAnswers); integer i; list buttons = []; for (i=1;i<=len;++i) //Create a numbered button for each choice { buttons += [(string)i]; } llListenControl(Handle,TRUE); llDialog(gAvKey,gQuestion,["Done"],CHAN); //Display the question in a dialog box } else if (llGetSubString(data,0,0) == "N") //Read the answer key { gAnswers = llParseString2List(llGetSubString(data,1,-1),[","],[]); integer len = llGetListLength(gAnswers); integer i; list buttons = []; for (i=1;i<=len;++i) //Create a numbered button for each choice { buttons += [(string)i]; } llListenControl(Handle,TRUE); llDialog(gAvKey,gQuestion,["Next"],CHAN); //Display the question in a dialog box } else if (llGetSubString(data,0,0) == "B") //Read the answer key { gAnswers = llParseString2List(llGetSubString(data,1,-1),[","],[]); integer len = llGetListLength(gAnswers); integer i; list buttons = []; for (i=1;i<=len;++i) //Create a numbered button for each choice { buttons += [(string)i]; } llListenControl(Handle,TRUE); llDialog(gAvKey,gQuestion,["Yes", "No"],CHAN); //Display the question in a dialog box } else if (llGetSubString(data,0,0) == "C") //Read the answer key { gAnswers = llParseString2List(llGetSubString(data,1,-1),[","],[]); integer len = llGetListLength(gAnswers); integer i; list buttons = []; for (i=1;i<=len;++i) //Create a numbered button for each choice { buttons += [(string)i]; } llListenControl(Handle,TRUE); llDialog(gAvKey,gQuestion,["Awesome!"],CHAN); //Display the question in a dialog box } } else // If there are no more lines on the notecard { llInstantMessage(gAvKey,"You have finished Smart Alarm Scenario #3!");// Your score is "+(string)gScore); llSay(-3000, "DONE"); init(); //Restart the quiz for the next person } }}listen (integer channel, string name, key id, string message){ if (channel == 24) //Teacher said something on channel 24 { if (llToLower(message) == "results") //and the message was "results" { integer len = llGetListLength(gAvList); integer i; for (i=0;i<=len-1;++i) { llOwnerSay(llList2String(gAvList,i) + ".... Score = " + llList2String(gAllScores,i+1)); } } } else if (message == "YES") // Av has touched the panel and wants to quit { llInstantMessage(gAvKey,"Thank you for trying out Smart Alarm Scenario #3!" ); llSay(-3000, "DONE"); init(); } else if(message == "NO") // Av has touched the panel and does NOT want to quit { return; } else // A question has been displayed in a dialog box { integer pos = llListFindList(gAnswers,["1"]); //Search the answer key. The correct answer is pos+1 if((message == "Next") || (message == "Yes") || (message == "Done"))//(string)(pos+1)) { ++countQues; // llPlaySound("correct",1.0); // llInstantMessage(gAvKey,"Correct! Your score is now "+ (string)gScore+ ". Next ..."); } if(countQues == 4) { llSay(-3000, "appear"); // For Handset } if(countQues == 3) { llSay(-3000, "occuring"); } if(countQues == 1) { llSay(-3000, "show"); // For Wristband } else if (message == "No") { // llPlaySound("WrongAnswer",1.0); llInstantMessage(gAvKey,"Incorrect, please re-start Smart Alarm Scenario #3." ); llSay(-3000, "DONE"); init(); } /*else if (pos == -1) //The teacher screwed up and didn't code a correct answer { // llInstantMessage(gAvKey,"Ooops! There is no right answer to this question. Let's move on...."); }*/ gQuestion = ""; //Erase the current question gAnswers = []; //And its answer key ++gLine; gQID = llGetNotecardLine(gCard,gLine); // Get the next question }}}
  8. Greetings, this question may be one for "Rolig Loon" the developer of the 'Quiz from Notecard' script but if anyone could provide any advice, I'd greatly appreciate it! The script can be found here: http://wiki.secondlife.com/wiki/User:Rolig_Loon/Quiz_From_Notecard I'm looking to create a delay (20 seconds) after a particular question is answered, so that the next question within the notecard doesn't popup until after the delay.
  9. Would there be a way to declare/initialize global variables across multiple scripts? It would make things so much easier for me!
  10. Thanks everyone for your input. I'm looking into llRegionSayTo which may be better to use but unfortunately I'm not exactly sure how to use it (still a newbie at Linden Language). Every example I see online doesn't fully explain how to use it (even the wiki). What I need to make happen all goes within a listening event. So if a message is heard from a prim, then loop play a sound until the user clicks a notecard dialog option. I've tried using another listening event within the existing listening event but it seems that is not possible. LlMessageLinked would do the job well, but the primary object I need to link rotates around the x-axis; linking it to another object throws the rotation off.
  11. Greetings, would anyone know a simple way to pass integer variables between scripts? Say I'd like to pass (integer t = 0) from script1 to script5, so that script5 has an integer named "t" which is equal to 0.
  12. Thanks for the info Kwakkelde. You're completely right. Sketchup has been a pain lately for this reason. I usually use it only to grab models out of the 3d warehouse which most have ended up looking like the bloated image above in SL. 3ds is the way to go.
  13. Thanks for your replies. I'm used Google Sketchup to create the mesh and then exported it to a COLLADA (.dae) file. I've read elsewhere that using the "Triangulate All Faces" export option in Sketchup would help but not for me. I even imported this into 3DS Max and tried to join all meshes as Arton suggested and havent had any luck. I'll keep trying
  14. Greetings, my models have appeared very extruded when being uploaded to SL. Below is a before and after (in SL) screenshot of one model. Also, if I upload the model when very large, I can't scale it down in SL though I can scale it up. Any help? Thanks!
  • Create New...