您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tracks (and solves?) the various puzzles in gameinformer dungeons
// ==UserScript== // @name Plater's GameInformer Dungeon // @namespace http://kol.coldfront.net/thekolwiki/index.php/User:Plater // @description Tracks (and solves?) the various puzzles in gameinformer dungeons // @include http://*kingdomofloathing.com/choice.php* // @version 2 // @grant GM_getValue // @grant GM_setValue // ==/UserScript== //The reason it looks so "drawn out" is because this section used to be in a much bigger script ~Plater var prekeyname="GameInformerDungeon_"; var ShowChoiceLabel=false; var SECTION_NAME=0; var SECTION_MAZE=1; var SECTION_CHOICE=2; /** * ReplaceAll by Fagner Brack (MIT Licensed) * Replaces all occurrences of a substring in a string */ if(!String.prototype.replaceAll) { String.prototype.replaceAll = function( token, newToken, ignoreCase ) { var _token; var str = this + ""; var i = -1; if ( typeof token === "string" ) { if ( ignoreCase ) { _token = token.toLowerCase(); while( (i = str.toLowerCase().indexOf(token, i >= 0 ? i + newToken.length : 0) ) !== -1) { str = str.substring( 0, i ) + newToken + str.substring( i + token.length ); } } else { return this.split( token ).join( newToken ); } } return str; }; } if(!String.prototype.trim) { String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g,''); }; } if(!String.prototype.trim) { String.prototype.endsWith = function(suffix) { return this.indexOf(suffix, this.length - suffix.length) !== -1; }; } //alert((GM_info.scriptMetaStr)); //Switch on which page we're looking at (for safety sake?) switch(document.location.pathname) { case "/choice.php": //for choice also do a thing that ID's it var aryObj=document.getElementsByName('whichchoice'); var ChoiceNumber=(aryObj.length>0)?aryObj[0].value:-1; if(ShowChoiceLabel==true)//Insert label { var myNode=document.createTextNode(("ChoiceAdventure="+((ChoiceNumber>-1)?ChoiceNumber:"???"))); var chNode=document.body.childNodes[0]; document.body.insertBefore(myNode,chNode); } ProcessChoice(ChoiceNumber); break; default: } function ProcessChoice(ChoiceNumber) { if(ChoiceNumber==-1) {} /*****************************************************/ /*****************************************************/ else if (ChoiceNumber==570) //reading the gameinformer magazine { DoWalkthroughFromAdventureChoice(ChoiceNumber); } else if (ChoiceNumber==659 || ChoiceNumber==660 || ChoiceNumber==661 || ChoiceNumber==662 || ChoiceNumber==663)//these are the 3-way choice { DoWalkthroughFromAdventureChoice(ChoiceNumber); } else if (ChoiceNumber==665)//the maze { DoWalkthroughFromAdventureChoice(ChoiceNumber); } /*****************************************************/ /*****************************************************/ } function ExtractString(s, StartDelim, EndDelim) {// You should check for errors in real-world code, omitted for brevity var retval = ""; var startIndex = s.indexOf(StartDelim); var EndIndex=-1; if (startIndex != -1) { startIndex = startIndex + StartDelim.length; EndIndex = s.indexOf(EndDelim, startIndex); if (EndIndex != -1) { retval=s.substring(startIndex, EndIndex); } } return retval; } function DoMaze(strDirections) {//You will start out facing A. You should go B, C, D, E, F and then, assuming var turndirections=""; var StartDirection=ExtractString(strDirections,"You will start out facing","."); var CurDirectionsList=ExtractString(strDirections,"You should go","and"); var splits=CurDirectionsList.split(","); var CD=StartDirection; for(var i=0;i<splits.length;i++) { if(splits[i].trim()!="") { turndirections+=((i+1))+") "+ProduceTurn(CD,splits[i])+"<br/>"; CD=splits[i]; } } turndirections=turndirections.trim(); if (turndirections.endsWith(" THEN"))turndirections=turndirections.substring(0,turndirections.length-5); return turndirections; } function ProduceTurn(strCurrentDirection,strNextDirection) { var MazeDirections={north:0,east:1,south:2,west:3}; var retval="Don't know. Facing "+strCurrentDirection+", turn towards the "+strNextDirection; var CD=MazeDirections[strCurrentDirection.trim()]; var ND=MazeDirections[strNextDirection.trim()]; /* 0 3 1 2 */ //Facing North if(CD==0 && ND ==0) { retval="go forward"; } else if(CD==0 && ND ==1) { retval="go right"; } else if(CD==0 && ND ==2) { } else if(CD==0 && ND ==3) { retval="go left"; } //Facing East if(CD==1 && ND ==0) { retval="go left"; } else if(CD==1 && ND ==1) { retval="go forward"; } else if(CD==1 && ND ==2) { retval="go right"; } else if(CD==1 && ND ==3) { } //Facing South if(CD==2 && ND ==0) { } else if(CD==2 && ND ==1) { retval="go left"; } else if(CD==2 && ND ==2) { retval="go forward"; } else if(CD==2 && ND ==3) { retval="go right"; } //Facing West if(CD==3 && ND ==0) { retval="go right"; } else if(CD==3 && ND ==1) { } else if(CD==3 && ND ==2) { retval="go left"; } else if(CD==3 && ND ==3) { retval="go forward"; } return retval; } function DoWalkthroughFromAdventureChoice(ChoiceNumber) { //570 is the gameinformer walkthrough //660 is the "pick 1 of 3" in game dungeon //661 is the "pick 1 of 3" in game dungeon //662 is the "pick 1 of 3" in game dungeon //663 is the "pick 1 of 3" in game dungeon //659 is the "pick 1 of 3" in game dungeon //665 is the maze /* Challenges: (Done)At the end of the level, you'll encounter a terrifying sphinx, with a terrifying riddle! (Okay, the riddle isn't particularly terrifying I guess.) The answer is <answer and comment> At the end of the level, you'll find your progress is blocked by a huge lake. How are you going to get past it? <solution> (Done)At the end of the level, you'll face the first real challenge of the game: <description> Gorge. This is a platform-jumping sequence, and the last few platforms move, so watch out! The trick for clearing that first real tricky jump is to jump when <solution>. (Done)At the end of the level, you'll unfortunately encounter the dumbest puzzle ever: there's three locked doors, and one key. My advice to you is to choose the <solution> door. Just trust me on this. (Done)At the end of the level, you'll find an old study or library in the tunnels beneath <Dungeon Level>. It looks like a dead-end, but don't get confused -- you didn't miss anything! (Not yet at least!) Naturally, there's a secret passage here for you to find. <solution>! */ if (ChoiceNumber==570) { var walkthroughstr=document.body.innerHTML; var walkthroughSection=GetSectionFromWalkthroughHTML(walkthroughstr); var walkthroughname=GetNameFromWalkthroughHTML(walkthroughstr); //I could maybe only keep track of the required parts, but where is the fun in that? Blast that prefs.js file WIDE open bwahahaha. Sorry. SetWalthroughText(walkthroughstr); var wt=GetWalthroughText(); var wt1=""; var wt2=""; var wt3=""; wt1=GetASectionFromWalkthroughHTML(wt,SECTION_MAZE); wt2=GetASectionFromWalkthroughHTML(wt,SECTION_CHOICE); wt3=GetASectionFromWalkthroughHTML(wt,SECTION_NAME); //maybe consider making it a "collapsed" section? var wts=wt3+"<br/>\r\n"+wt2+"<br/>\r\n"+wt1+"<br/>\r\n"; CreateChoiceExpl([wts]); } else { var wt=GetWalthroughText(); var wt1=""; var wt2=""; var wt3=""; if (ChoiceNumber==659)//How Does a Floating Platform Even Work? { wt1=GetASectionFromWalkthroughHTML(wt,SECTION_CHOICE); wt1=wt1.replace("jump when the platform you're jumping to is moving away from you, and the one you're on is right at its maximum elevation","[Jump when the first platform is high and the second is moving away]"); wt1=wt1.replace("jump when the platform you're jumping toward is at the same height as the one you're on","[Jump when the first platform is at the same height as the second]"); wt1=wt1.replace("go when the platform you're jumping to is coming toward you, and the one you're on is starting to drop below it.","[Jump when the first platform is low and the second is approaching]"); //Look at the three pickable choices and try to highlight them if they exist var aryChoiceNames=GetChoiceNames(); for(var i=0;i<aryChoiceNames.length;i++) { wt1=wt1.replace(aryChoiceNames[i],"<b><font color=\"blue\">"+aryChoiceNames[i]+"</font></b>"); } if(wt1.indexOf(aryChoiceNames[0])!=-1){}//all set if(wt1.indexOf(aryChoiceNames[1])!=-1){wt2=wt1;wt1="";} if(wt1.indexOf(aryChoiceNames[2])!=-1){wt3=wt1;wt1="";} CreateChoiceExpl([wt1,wt2,wt3]); } else if (ChoiceNumber==660)//It's a Place Where Books Are Free { wt1=GetASectionFromWalkthroughHTML(wt,SECTION_CHOICE); wt1=wt1.replace("Naturally, it's behind the bookcase, so check the books thoroughly!","Naturally, it's behind the bookcase, so [Check the bookshelves] thoroughly!");//if it is the books: Naturally, it's behind the bookcase, so check the books thoroughly! wt1=wt1.replace("If you \"use\" the candlesticks","If you [Move the candlesticks]");//if its the candlesticks: Naturally, there's a secret passage here for you to find. If you "use" the candlesticks wt1=wt1.replace("Naturally, it's in the fireplace, as secret passages usually are. Check all the bricks carefully!","Naturally, it's in the fireplace, as secret passages usually are. [Search the fireplace] carefully!");//if its the fireplace: Naturally, it's in the fireplace, as secret passages usually are. Check all the bricks carefully! //Look at the three pickable choices and try to highlight them if they exist var aryChoiceNames=GetChoiceNames(); for(var i=0;i<aryChoiceNames.length;i++) { wt1=wt1.replace(aryChoiceNames[i],"<b><font color=\"blue\">"+aryChoiceNames[i]+"</font></b>"); } if(wt1.indexOf(aryChoiceNames[0])!=-1){}//all set if(wt1.indexOf(aryChoiceNames[1])!=-1){wt2=wt1;wt1="";} if(wt1.indexOf(aryChoiceNames[2])!=-1){wt3=wt1;wt1="";} CreateChoiceExpl([wt1,wt2,wt3]); } else if (ChoiceNumber==661)//Sphinx For the Memories { wt1=GetASectionFromWalkthroughHTML(wt,SECTION_CHOICE); wt1=wt1.replace("The answer is \"time\".","The answer is [\"Time?\"]."); wt1=wt1.replace("The answer is \"a mirror\".","The answer is [\"A mirror?\"]."); wt1=wt1.replace("The answer is \"hope\".","The answer is [\"Hope?\"]."); //Look at the three pickable choices and try to highlight them if they exist var aryChoiceNames=GetChoiceNames(); for(var i=0;i<aryChoiceNames.length;i++) { wt1=wt1.replace(aryChoiceNames[i],"<b><font color=\"blue\">"+aryChoiceNames[i]+"</font></b>"); } if(wt1.indexOf(aryChoiceNames[0])!=-1){}//all set if(wt1.indexOf(aryChoiceNames[1])!=-1){wt2=wt1;wt1="";} if(wt1.indexOf(aryChoiceNames[2])!=-1){wt3=wt1;wt1="";} CreateChoiceExpl([wt1,wt2,wt3]); } else if (ChoiceNumber==662 )//Think or Thwim { wt1=GetASectionFromWalkthroughHTML(wt,SECTION_CHOICE); wt1=wt1.replace("so just swim across!","so just [Swim across]!"); wt1=wt1.replace( new RegExp( 'throw your (.+) into the water', 'gi' ), "[Throw your $1 into the water]" ); wt1=wt1.replace("Fortunately, there's enough debris laying around that you can make a raft.","Fortunately, there's enough debris laying around that you can [Make a raft]."); //Look at the three pickable choices and try to highlight them if they exist var aryChoiceNames=GetChoiceNames(); for(var i=0;i<aryChoiceNames.length;i++) { wt1=wt1.replace(aryChoiceNames[i],"<b><font color=\"blue\">"+aryChoiceNames[i]+"</font></b>"); } if(wt1.indexOf(aryChoiceNames[0])!=-1){}//all set if(wt1.indexOf(aryChoiceNames[1])!=-1){wt2=wt1;wt1="";} if(wt1.indexOf(aryChoiceNames[2])!=-1){wt3=wt1;wt1="";} CreateChoiceExpl([wt1,wt2,wt3]); } else if (ChoiceNumber==663)//When You're a Stranger { wt1=GetASectionFromWalkthroughHTML(wt,SECTION_CHOICE); wt1=wt1.replace("My advice to you is to choose the second door.", "My advice to you is to [Unlock the second door]."); wt1=wt1.replace("My advice to you is to choose the first door.", "My advice to you is to [Unlock the first door]."); wt1=wt1.replace("My advice to you is to choose the third door.", "My advice to you is to [Unlock the third door]."); //Look at the three pickable choices and try to highlight them if they exist var aryChoiceNames=GetChoiceNames(); for(var i=0;i<aryChoiceNames.length;i++) { wt1=wt1.replace(aryChoiceNames[i],"<b><font color=\"blue\">"+aryChoiceNames[i]+"</font></b>"); } if(wt1.indexOf(aryChoiceNames[0])!=-1){}//all set if(wt1.indexOf(aryChoiceNames[1])!=-1){wt2=wt1;wt1="";} if(wt1.indexOf(aryChoiceNames[2])!=-1){wt3=wt1;wt1="";} CreateChoiceExpl([wt1,wt2,wt3]); } else if (ChoiceNumber==665)//A Gracious Maze { wt1=GetASectionFromWalkthroughHTML(wt,SECTION_MAZE);//walkthrough text wt3=DoMaze(wt1);//translated to directions CreateChoiceExpl([wt1,wt2,wt3]); } } } function GetASectionFromWalkthroughHTML(walkthroughHTML,WhichSECTION) { var retval=""; switch(WhichSECTION) { case 0://SECTION_NAME: //this wont work until it saves the whole thing! var startstr="\n</pre></center><p>"; var endstr="<p>A walkthru by "; var wt=walkthroughHTML;//SetWalthroughText(); var Try2=ReturnPiece(wt,startstr,endstr,false); var startidx=wt.indexOf(startstr); var endidx=wt.indexOf(endstr); if(startidx!=-1 && endidx!=-1) { startidx=startidx+startstr.length; retval=wt.substring(startidx,endidx)+""; retval=retval.replaceAll("<p>","",false);//retval=ReplaceAll(retval,"<p>",); retval=retval.replaceAll("/<p>","",false);//retval=ReplaceAll(retval,"</p>",""); retval=retval.replaceAll("<br>","",false);//retval=ReplaceAll(retval,"<br>",""); } else{retval="FAIL! Could not find string";} break; case 1://SECTION_MAZE: //always starts with "You will start out facing" //always ends with "assuming you haven't messed up somewhere, you'll be out of the maze" retval=ReturnPiece(walkthroughHTML,"You will start out facing","assuming you haven't messed up somewhere, you'll be out of the maze",true); break; case 2://SECTION_CHOICE: //always starts with "At the end of the level, you'll" or maybe just "At the end of the level" //always ends with "Now you're on your way" retval=ReturnPiece(walkthroughHTML,"At the end of the level","Now you're on your way",true); break; default: retval="FAIL: Don't understand ["+WhichSECTION+"]"; break; } return retval; } function ReturnPiece(largeString,startPiece,endPiece, IncludePieces) { var retval=""; var sidx=largeString.indexOf(startPiece); var eidx=largeString.indexOf(endPiece); if(sidx!=-1 && eidx!=-1) {//If i chose not to include the piece i can adjust the split points var startsplit=sidx; var endsplit=(eidx+endPiece.length); if(!IncludePieces) { startsplit=(sidx+startPiece.length); endsplit=eidx; } retval=largeString.substring(startsplit,endsplit); } else {retval="FAIL! "+sidx+" to "+eidx+"";} return retval; } function GetSectionFromWalkthroughHTML(walkthroughHTML) { var retval="(?)"; var startstr="<b>Section V: WALKTHRU</b>"; var endstr="<b>Section VI: FINAL BOSS:</b>"; var wt=walkthroughHTML;//SetWalthroughText(); var startidx=wt.indexOf(startstr); var endidx=wt.indexOf(endstr); if(startidx!=-1 && endidx!=-1) { startidx=startidx+startstr.length; retval=wt.substring(startidx,endidx)+""; //retval=retval.replace("At the end of the level","<b><font color=\"red\">At the end of the level</font></b>"); //retval=retval.replace("You will start out facing","<b><font color=\"red\">You will start out facing</font></b>"); } return retval; } function GetNameFromWalkthroughHTML(walkthroughHTML) { var retval="(?)"; var startstr="\n</pre></center><p>"; var endstr="<p>A walkthru by "; var wt=walkthroughHTML;//SetWalthroughText(); var startidx=wt.indexOf(startstr); var endidx=wt.indexOf(endstr); if(startidx!=-1 && endidx!=-1) { startidx=startidx+startstr.length; retval=wt.substring(startidx,endidx)+""; retval=retval.replaceAll("<p>","",false);//retval=ReplaceAll(retval,"<p>",""); retval=retval.replaceAll("</p>","",false);//retval=ReplaceAll(retval,"</p>",""); retval=retval.replaceAll("<br>","",false);//retval=ReplaceAll(retval,"<br>",""); } return retval; } function SetWalthroughText(val) { GM_setValue(prekeyname+"WalkThrough", val); } function GetWalthroughText() { return GM_getValue(prekeyname+"WalkThrough","(No data saved)"); } function GetChoiceNames() { var aryChoiceNames=new Array(); var i=1; var thechoice=document.getElementsByName("choiceform"+i)[0]; while(thechoice!=undefined) { //now i have the form, cycle through child elements for(var cidx=0;cidx<thechoice.elements.length;cidx++) { if(thechoice.elements[cidx]["type"]=="submit") { aryChoiceNames.push(thechoice.elements[cidx].value); } } i++; thechoice=document.getElementsByName("choiceform"+i)[0]; } return aryChoiceNames; } function CreateChoiceExplanation(t1,t2,t3,t4) { var choice1=document.getElementsByName("choiceform1"); var choice2=document.getElementsByName("choiceform2"); var choice3=document.getElementsByName("choiceform3"); var choice4=document.getElementsByName("choiceform4"); var text1=CreateTinyDivWithHTMLContents(t1); var text2=CreateTinyDivWithHTMLContents(t2); var text3=CreateTinyDivWithHTMLContents(t3); var text4=CreateTinyDivWithHTMLContents(t4); if(choice1.length>0&t1!=undefined)choice1[0].appendChild(text1); if(choice2.length>0&t2!=undefined)choice2[0].appendChild(text2); if(choice3.length>0&t3!=undefined)choice3[0].appendChild(text3); if(choice4.length>0&t4!=undefined)choice4[0].appendChild(text4); } function CreateChoiceExpl(textarray) { for(var i=1;i<=textarray.length;i++) { var t=textarray[i-1]; var thechoice=document.getElementsByName("choiceform"+i); var thetext=CreateTinyDivWithHTMLContents(t); if(thechoice.length>0&t!=undefined)thechoice[0].appendChild(thetext); } } function CreateTinyDivWithHTMLContents(htmlcontents) { var text1=document.createElement("div"); if(text1!=undefined) { text1.style.fontSize="8pt"; text1.innerHTML=(htmlcontents); } return text1; }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址