您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Stores some known character classes and adds then to Game interface.
当前为
// ==UserScript== // @name Nexus Clash Display Known Classes // @namespace http://userscripts.org/users/125692 // @description Stores some known character classes and adds then to Game interface. // @include http://nexusclash.com/modules.php?name=Game* // @include http://www.nexusclash.com/modules.php?name=Game* // @exclude http://nexusclash.com/modules.php?name=Game&op=disconnect // @exclude http://www.nexusclash.com/modules.php?name=Game&op=disconnect // @version 1.4 // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // ==/UserScript== var characterlinks; var characterlink; var charid; var charclass; var charpagemaxtier; var currentsetting; var attacksetting; if(window.location.href.match(/name=Game&op=faction&do=roster$/)){ characterlinks = document.evaluate( "//a[starts-with(@href,'modules.php?name=Game&op=character&id=')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); //alert("running"); if (characterlinks.snapshotLength>0){ //alert(characterlinks.snapshotLength); for(i=0;characterlink=characterlinks.snapshotItem(i);i++){ charid=characterlink.href.match(/\d+$/); //charid='#'+charid+"#";//non fixed length number needs to be made unique. charclass=characterlink.parentNode.nextElementSibling.nextElementSibling.textContent; //alert(charid+":"+charclass); GM_setValue(''+charid,charclass); } } } else if(window.location.href.match(/name=Game&op=character&id=/)){ //we are at a character page. Might as well take the id and the highest class. //as the class line has the undelimited class plus previous classes we instead look for the class headings and take from there //<a href="wiki/index.php/Eternal Soldier"> //<b>Eternal Soldier</b> //</a> characterlinks = document.evaluate( "//a[starts-with(@href,'wiki/index.php/')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); if (characterlinks.snapshotLength>0){ charid=window.location.href.match(/\d+$/); if (!isNaN(charid)){ //class we want is the last in the list charpagemaxtier=characterlinks.snapshotLength-1;//2 here equals t3 while(characterlinks.snapshotItem(charpagemaxtier).href.match(/wiki\/index.php\/$/)&&charpagemaxtier>0){ charpagemaxtier-=1; } charclass=characterlinks.snapshotItem(charpagemaxtier).firstElementChild.textContent;// text of the <b> child node if (charclass!=""){ GM_setValue(''+charid,charclass); } } } //while we are on the character page we ought to set a button and store away the settings. //either we have character class as text inline or we set as title text. var anewdiv=document.createElement('div'); var anewp=document.createElement('p'); var anewform=document.createElement('form'); var radbut1=document.createElement('input'); var radbut1text=document.createTextNode("As inline text"); var radbut2=document.createElement('input'); var radbut2text=document.createTextNode("As mouse over text"); var brtag=document.createElement('br'); var checkbox1=document.createElement('input'); var checkbox1text=document.createTextNode("List known classes in attack dropdown"); anewp.textContent="Set the display type for Nexus Clash Display Known Classes"; radbut1.name="classlistsetting"; radbut1.value="inline"; radbut1.type='radio'; radbut2.name="classlistsetting"; radbut2.value="titletext"; radbut2.type='radio'; checkbox1.name="attackdropdownsetting"; checkbox1.value='showclass4attack'; checkbox1.type='checkbox'; anewdiv.style="background-color:lightgrey"; //anewdiv.style="display:inline-block"; anewform.insertBefore(checkbox1,anewform.lastElementChild);//this ends up last anewform.insertBefore(radbut2,anewform.lastElementChild);//then this before anewform.insertBefore(radbut1,anewform.lastElementChild);//then this ends up on top. anewform.insertBefore(brtag,anewform.lastElementChild); anewform.insertBefore(radbut1text,radbut1.nextElementSibling); anewform.insertBefore(radbut2text,radbut2.nextElementSibling); anewform.insertBefore(checkbox1text,checkbox1.nextElementSibling); anewdiv.insertBefore(anewform,anewdiv.firstElementChild); anewdiv.insertBefore(anewp,anewdiv.firstElementChild); // anewdiv.appendChild(checkbox1);//,anewdiv.lastElementChild); //get setting for whether to show class info in attack dropdown. attacksetting=GM_getValue('attacksetting',false); if (attacksetting){ checkbox1.checked=true; } else { checkbox1.checked=false; } //get the current description pane setting (or set it up if not already set) currentsetting=GM_getValue('textsetting',''); if (currentsetting=='titletext'){ radbut2.checked=true; } else if (currentsetting==""){ GM_setValue('textsetting','inline'); currentsetting='inline'; radbut1.checked=true; } else { radbut1.checked=true; } //this event for the sett whether show class in attack dropdown var setattack=function(e) { var ebutton=e.target; GM_setValue('attacksetting',ebutton.checked); } //this the event for toggling the display type in description pane var setevent=function(e) { var ebutton=e.target; GM_setValue('textsetting',ebutton.value); } //value="Visit User Profile" characterlinks = document.evaluate( //"//input[starts-with(@value,'Visit User Profile')]", "//body", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); if (characterlinks.snapshotLength>0){ characterlinks.snapshotItem(0).insertBefore(anewdiv,characterlinks.snapshotItem(0).lastElementChild); radbut1.addEventListener("click",setevent,true); radbut2.addEventListener("click",setevent,true); checkbox1.addEventListener("change",setattack,false); } } else{//if not on roster page storing the class value maybe we are on the game page and we ought to add the class names. //we want this link type and we want to grab the id number. gm_getvalue the class and then add it and a comma after the name. //<a href="javascript:SelectItem('target_id','996')" class="faction">a playful otter </a> characterlinks = document.evaluate( "//a[starts-with(@href,'javascript:SelectItem')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); //alert("running"); if (characterlinks.snapshotLength>0){ //get setting currentsetting=GM_getValue('textsetting',''); if (currentsetting==""){ GM_setValue('textsetting','inline'); currentsetting='inline'; } //alert(characterlinks.snapshotLength); for(i=0;characterlink=characterlinks.snapshotItem(i);i++){ charid=characterlink.href.match(/\d+/); //charid='#'+charid+"#";//non fixed length number needs to be made unique. charclass = GM_getValue(""+charid,""); if(charclass!=""){ if(currentsetting=='inline'){ GM_addStyle("A.classlevel{color:#666666;}"); //charclass=charclass[0].match(/[AEIOU]/)?", an "+charclass:", a "+charclass; // and a or an characterlink.nextElementSibling.textContent=charclass+"-"+characterlink.nextElementSibling.textContent; characterlink.nextElementSibling.className='classlevel'; } else{ characterlink.nextElementSibling.title=charclass; } } } } //now look to see if we have set to show in the attack dropdown and if so the list known classes there. attacksetting=GM_getValue('attacksetting',false); if(attacksetting){ //<select id="combat_target_id" name="target_id"> //<option value="996">a playful otter</option> //</select> characterlinks = document.evaluate( "//select[@id='combat_target_id']/option", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); if (characterlinks.snapshotLength>0){ for(i=0;characterlink=characterlinks.snapshotItem(i);i++){ charid=characterlink.value; charclass = GM_getValue(""+charid,""); if(charclass!=""){ characterlink.textContent+=" - "+charclass; } } } } }