var ms = null; var memberTeamObj = function(){ return {id:0,level:0,awoken:0,plus:[0,0,0],latent:[]}; } var memberAssistObj = function(){ return {id:0,level:0,awoken:0,plus:[0,0,0]}; } var teamObj = function(){ return [ [ new memberTeamObj(), new memberTeamObj(), new memberTeamObj(), new memberTeamObj(), new memberTeamObj(), new memberTeamObj(), ], [ new memberAssistObj(), new memberAssistObj(), new memberAssistObj(), new memberAssistObj(), new memberAssistObj(), new memberAssistObj(), ], ]; } var formation = { title:"", detail:"", team:[ new teamObj(),//队伍A new teamObj(),//队伍B ] }; window.onload = function() { GM_xmlhttpRequest({ method: "GET", url:"monsters-info/mon.json", onload: function(response) { ms = JSON.parse(response.response); initialize();//初始化 try { var idataQer = getQueryString("data"); if (idataQer) { var idata = JSON.parse(idataQer); formation = idata; refreshAll(formation); } }catch(e) { console.log("初始数据解码出错",e); } //test(); //测试代码 }, onerror: function(response) { console.error("怪物数据获取错误",response); } }); } //创建新的分享地址 function creatNewUrl(){ if (!!(window.history && history.pushState)) { // 支持History API history.replaceState(null, null, '?data=' + encodeURIComponent(JSON.stringify(formation))); } } //获取URL参数 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURIComponent(r[2]); return null; } //初始化 function initialize() { var monstersList = document.querySelector("#monsters-list"); ms.forEach(function(m){ var opt = monstersList.appendChild(document.createElement("option")); opt.value = m.id; opt.label = m.id + " | " + m.name["ja"] + " | " + m.name["en"] + " | " + m.name["ko"]; }); //标题和介绍文本框 var txtTitle = document.querySelector(".title-box .title"); var txtDetail = document.querySelector(".detail-box .detail"); txtTitle.onchange = function(){ formation.title = this.value; creatNewUrl(); } txtTitle.oninput = txtTitle.onchange; txtDetail.onchange = function(){ formation.detail = this.value; creatNewUrl(); } txtDetail.oninput = txtDetail.onchange; //队伍框 var formationBox = document.querySelector(".formation-box"); formationBox.formationBox = formation; //编辑框 var editBox = document.querySelector(".edit-box"); editBox.latent = []; //储存潜在觉醒 editBox.assist = false; //储存是否为辅助宠物 editBox.monsterBox = null; editBox.latentBox = null; editBox.memberIdx = []; //储存队伍数组下标 editBox.show = function(){ editBox.classList.remove("display-none"); formationBox.classList.add("blur-bg"); } editBox.hide = function(){ editBox.classList.add("display-none"); formationBox.classList.remove("blur-bg"); } var settingBox = editBox.querySelector(".setting-box") //id搜索 var monstersSearch = editBox.querySelector(".edit-box .m-id"); monstersSearch.onchange = function(){ if (/^\d+$/.test(this.value)) { editBoxChangeMonId(parseInt(this.value)); } } monstersSearch.oninput = monstersSearch.onchange; //觉醒 var monEditAwokens = Array.prototype.slice.call(settingBox.querySelectorAll(".m-awoken-ul>.awoken-icon")); monEditAwokens.forEach(function(akDom,idx,domArr){ akDom.onclick = function(){ if (idx>0 && idx>=domArr.filter(function(d){return !d.classList.contains("display-none")}).length-1) domArr[0].innerHTML = "★"; else domArr[0].innerHTML = idx; for(var ai=1;ai= 12 && usedHoleN<=4) editBox.latent.push(lIdx); else if (lIdx < 12 && usedHoleN<=5) editBox.latent.push(lIdx); refreshLatent(editBox.latent); } }) var btnCancel = editBox.querySelector(".button-cancel"); var btnDone = editBox.querySelector(".button-done"); var btnNull = editBox.querySelector(".button-null"); var btnDelay = editBox.querySelector(".button-delay"); btnCancel.onclick = function(){ btnDone.classList.remove("cant-assist"); btnDone.disabled = false; editBox.memberIdx = []; editBox.hide(); } btnDone.onclick = function(){ if (parseInt(monEditLv.value) == 0) { btnNull.onclick(); return; } var mD = formation.team[editBox.memberIdx[0]][editBox.memberIdx[1]][editBox.memberIdx[2]] = editBox.assist?new memberAssistObj():new memberTeamObj(); mD.id = parseInt(monstersSearch.value); mD.level = parseInt(monEditLv.value); mD.awoken = monEditAwokens.filter(function(akDom){ return !akDom.classList.contains("unselected-awoken") && !akDom.classList.contains("display-none") }).length - 1; mD.plus[0] = parseInt(monEditAddHp.value); mD.plus[1] = parseInt(monEditAddAtk.value); mD.plus[2] = parseInt(monEditAddRcv.value); if (!editBox.assist) { mD.latent = editBox.latent.concat(); } changeid(mD,editBox.monsterBox,editBox.latentBox); creatNewUrl(); editBox.hide(); } btnNull.onclick = function(){ var mD = formation.team[editBox.memberIdx[0]][editBox.memberIdx[1]][editBox.memberIdx[2]] = {id:0}; changeid(mD,editBox.monsterBox,editBox.latentBox); creatNewUrl(); editBox.hide(); } btnDelay.onclick = function(){ //应对威吓 var mD = formation.team[editBox.memberIdx[0]][editBox.memberIdx[1]][editBox.memberIdx[2]] = {id:-1}; changeid(mD,editBox.monsterBox,editBox.latentBox); creatNewUrl(); editBox.hide(); } } function usedHole(latent) //计算用了多少潜觉格子 { return latent.reduce(function(previous,current){ return previous + (current>= 12?2:1); },0); } function changeid(mon,monDom,latentDom) { var md = ms[mon.id]; //怪物固定数据 if (mon.id<0) //如果是延迟 { monDom.parentNode.classList.add("delay"); monDom.parentNode.classList.remove("null"); return; }else if (mon.id==0) //如果是空 { monDom.parentNode.classList.add("null"); monDom.parentNode.classList.remove("delay"); return; }else (mon.id>-1) //如果提供了id { monDom.parentNode.classList.remove("null"); monDom.parentNode.classList.remove("delay"); monDom.className = "monster"; monDom.classList.add("pet-cards-" + Math.ceil(mon.id/100)); //添加图片编号 var idxInPage = (mon.id-1) % 100; //获取当前页面的总序号 monDom.classList.add("pet-cards-index-x-" + idxInPage % 10); //添加X方向序号 monDom.classList.add("pet-cards-index-y-" + parseInt(idxInPage / 10)); //添加Y方向序号 monDom.querySelector(".property").className = "property property-" + md.ppt[0]; //主属性 monDom.querySelector(".subproperty").className = "subproperty subproperty-" + md.ppt[1]; //副属性 monDom.title = "No." + mon.id + " " + md.name["ja"]; monDom.href = "http://pad.skyozora.com/pets/" + mon.id; } if (mon.level>0) //如果提供了等级 { var levelDom = monDom.querySelector(".level"); levelDom.innerHTML = mon.level; if (mon.level == 99 || (mon.level >= md.maxLevel && md.maxLevel <=99)) { levelDom.classList.add("max"); }else { levelDom.classList.remove("max"); } if (md.maxLevel>99 && mon.level>=99) levelDom.classList.add("_110"); else levelDom.classList.remove("_110"); } if (mon.awoken>-1) //如果提供了觉醒 { var awokenIcon = monDom.querySelector(".awoken-count"); if (mon.awoken == 0 || md.awoken.length < 1) //没觉醒 { awokenIcon.classList.add("display-none"); awokenIcon.innerHTML = ""; }else { awokenIcon.classList.remove("display-none"); if (mon.awoken < md.awoken.length) //觉醒没满直接写数字 { awokenIcon.innerHTML = mon.awoken; awokenIcon.classList.remove("allowable-assist"); }else //满觉醒打星星 { awokenIcon.innerHTML = "★"; if (md.assist) awokenIcon.classList.add("allowable-assist"); else awokenIcon.classList.remove("allowable-assist"); } } } if (mon.plus) //如果提供了加值 { monDom.querySelector(".plus .hp").innerHTML = mon.plus[0]; monDom.querySelector(".plus .atk").innerHTML = mon.plus[1]; monDom.querySelector(".plus .rcv").innerHTML = mon.plus[2]; if (mon.plus[0]+mon.plus[1]+mon.plus[2] >= 297) { monDom.querySelector(".plus").classList.add("has297"); }else { monDom.querySelector(".plus").classList.remove("has297"); } } if (latentDom && mon.latent) //如果提供了潜觉 { var latent = mon.latent.sort(function(a,b){return b-a;}); if (latent.length < 1) latentDom.classList.add("display-none"); else latentDom.classList.remove("display-none"); var latentDoms = Array.prototype.slice.call(latentDom.querySelectorAll("li")); var usedHoleN = usedHole(latent); for (var ai=0;ai<6;ai++) { if (latent[ai]) { latentDoms[ai].className = "latent-icon latent-icon-" + latent[ai]; } else if(ai<(6-usedHoleN+latent.length)) { latentDoms[ai].className = "latent-icon"; } else { latentDoms[ai].className = "display-none"; } } } } //点击怪物头像,出现编辑框 function editMon(AorB,isAssist,tempIdx) { //数据 var mD = formation.team[AorB][isAssist][tempIdx]; //对应的Dom var formationBox = AorB?document.querySelector(".formation-box .formation-B-box"):document.querySelector(".formation-box .formation-A-box"); var teamBox = isAssist?formationBox.querySelector(".formation-assist"):formationBox.querySelector(".formation-team"); var memberBox = teamBox.querySelector(".member-" + (tempIdx+1)); var editBox = document.querySelector(".edit-box"); var monsterBox = memberBox.querySelector(".monster"); editBox.show(); editBox.assist = isAssist; editBox.monsterBox = monsterBox; editBox.memberIdx = [AorB,isAssist,tempIdx]; //储存队伍数组下标 editBox.assist = isAssist; if (!isAssist) { var latentBox = formationBox.querySelector(".formation-latents .latents-"+(tempIdx+1)+" .latent-ul"); editBox.latentBox = latentBox; } var monstersSearch = editBox.querySelector(".search-box .m-id"); monstersSearch.value = mD.id; monstersSearch.onchange(); var settingBox = editBox.querySelector(".setting-box"); var monEditAwokens = settingBox.querySelectorAll(".m-awoken-ul .awoken-icon"); if (mD.awoken>0) monEditAwokens[mD.awoken].onclick(); var monEditLv = settingBox.querySelector(".m-level"); monEditLv.value = mD.level || 1; var monEditAddHp = settingBox.querySelector(".m-plus-hp"); var monEditAddAtk = settingBox.querySelector(".m-plus-atk"); var monEditAddRcv = settingBox.querySelector(".m-plus-rcv"); if (mD.plus) { monEditAddHp.value = mD.plus[0]; monEditAddAtk.value = mD.plus[1]; monEditAddRcv.value = mD.plus[2]; } var btnDelay = editBox.querySelector(".button-delay"); if (!isAssist) { editBox.latent = mD.latent || []; editBox.refreshLatent(editBox.latent); btnDelay.classList.add("display-none"); settingBox.querySelector(".row-mon-latent").classList.remove("display-none"); editBox.querySelector(".edit-box-title").classList.remove("edit-box-title-assist"); }else { btnDelay.classList.remove("display-none"); settingBox.querySelector(".row-mon-latent").classList.add("display-none"); editBox.querySelector(".edit-box-title").classList.add("edit-box-title-assist"); } } function editBoxChangeMonId(id) { var md = ms[id]; //怪物固定数据 if (!md){ id = 0; md = ms[0] } var editBox = document.querySelector(".edit-box"); var monInfoBox = editBox.querySelector(".monsterinfo-box"); var me = monInfoBox.querySelector(".monster"); changeid({id:id,},me); //改变图像 var mId = monInfoBox.querySelector(".monster-id"); mId.innerHTML = id; var mRare = monInfoBox.querySelector(".monster-rare"); mRare.className = "monster-rare rare-" + md.rare; var mName = monInfoBox.querySelector(".monster-name"); mName.innerHTML = md.name["ja"]; var mType = monInfoBox.querySelectorAll(".monster-type li"); for (var ti=0;ti99?99:md.maxLevel; var monLatentAllowUl = settingBox.querySelector(".m-latent-allowable-ul"); //该宠Type允许的杀 var allowLatent = uniq(md.type.reduce(function (previous, t, index, array) { return previous.concat(type_allowable_latent[t]); },[])); for(var li=17;li<=24;li++) { var latentDom = monLatentAllowUl.querySelector(".latent-icon-" + li); if (allowLatent.indexOf(li)>=0) { if(latentDom.classList.contains("unselected-latent")) latentDom.classList.remove("unselected-latent"); }else { if(!latentDom.classList.contains("unselected-latent")) latentDom.classList.add("unselected-latent"); } } if (editBox.assist) { var btnDone = editBox.querySelector(".button-done"); if (!md.assist) { btnDone.classList.add("cant-assist"); btnDone.disabled = true; }else { btnDone.classList.remove("cant-assist"); btnDone.disabled = false; } } editBox.latent.length = 0; editBox.refreshLatent(editBox.latent); } function refreshAll(fmt){ document.querySelector(".title-box .title").value = fmt.title || ""; document.querySelector(".detail-box .detail").value = fmt.detail || ""; var formationA = document.querySelector(".formation-box .formation-A-box"); var formationB = document.querySelector(".formation-box .formation-B-box"); var fATeam = formationA.querySelectorAll(".formation-team .monster"); var fALatents = formationA.querySelectorAll(".formation-latents .latent-ul"); var fAAssist = formationA.querySelectorAll(".formation-assist .monster"); var fBTeam = formationB.querySelectorAll(".formation-team .monster"); var fBLatents = formationB.querySelectorAll(".formation-latents .latent-ul"); var fBAssist = formationB.querySelectorAll(".formation-assist .monster"); for (var ti=0;ti<5;ti++) { changeid(fmt.team[0][0][ti],fATeam[ti],fALatents[ti]); changeid(fmt.team[0][1][ti],fAAssist[ti]); changeid(fmt.team[1][0][ti],fBTeam[ti],fBLatents[ti]); changeid(fmt.team[1][1][ti],fBAssist[ti]); } } function test() { var m1 = document.querySelector(".formation-A-box .formation-team .member-1 .monster"); var a1 = document.querySelector(".formation-A-box .formation-latents .latents-1 .latent-ul"); var m = formation.team[0][0][0]; m.id=5209; m.level=36; m.awoken=5; m.plus[0]=98; m.plus[1]=96; m.plus[2]=95; m.latent=[11,11,16,11,11]; changeid(m,m1,a1); //editBoxChangeMonId(3264); }