From ccd907ab3c5dc4cfe86cb0cec4d5bf725e85fdb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Mon, 12 Oct 2020 20:59:16 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BF=BB=E8=AF=91=E7=9A=84=E5=A4=A7=E9=87=8F?= =?UTF-8?q?=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/zh-CN.js | 159 ++++++++++++++++++++++++++++------- languages/zh.css | 6 ++ multi.html | 1 + script-universal_function.js | 5 +- script.js | 99 +++++++++++++++++----- solo.html | 1 + triple.html | 1 + 7 files changed, 221 insertions(+), 51 deletions(-) diff --git a/languages/zh-CN.js b/languages/zh-CN.js index 58fb75eb..469a0246 100644 --- a/languages/zh-CN.js +++ b/languages/zh-CN.js @@ -35,7 +35,44 @@ function fastShowSkill(event) console.log(Skills[skillId]); } } +//技能介绍里的头像的切换 +function changeToIdInSkillDetail(event) +{ + const settingBox = editBox.querySelector(".setting-box"); + const monstersID = settingBox.querySelector(".row-mon-id .m-id"); + const mid = this.getAttribute("data-cardid"); + monstersID.value = mid; + monstersID.onchange(); + return false; //取消链接的默认操作 +} + +//技能介绍里的头像的切换 +function createBoard(boardData, orbType = 0) +{ + boardData.splice(3,0,boardData[2]); //将第2行复制插入为第3行 + const table = document.createElement("table"); + table.className = "board fixed-shape-orb"; + boardData.forEach((flag,ri) => { + const row = table.insertRow(); + if (ri == 3) + row.classList.add("board-row4"); + boolArr = new Array(6).fill(null).map((a,i)=> (1<{ + const cell = row.insertCell(); + if (has) cell.className = `has-orb orb-${orbType}`; + if (ci == 4) + cell.classList.add("board-cell5"); + }); + }); + table.onclick = function(){ + this.classList.toggle("board-76"); + }; + return table; +} +//insertAdjacentHTML 可以只增加部分 HTML //高级技能解释 function parseSkillDescription(skill) { @@ -600,20 +637,33 @@ function parseSkillDescription(skill) } break; case 125: //隊伍中同時存在 時,所有寵物的攻擊力3.5倍 - strArr = sk.slice(0,5).filter(s=>s>0); - str = `队伍中${strArr.length>1?"同时":""}存在`; - str += strArr.map(cardN).join(""); - str += "时所有宠物的"; - strArr =[]; - if (sk[5]) {strArr.push(`HP×${sk[5]/100}倍`);} - if (sk[6]) {strArr.push(`攻击力×${sk[6]/100}倍`);} - if (sk[7]) {strArr.push(`回复力×${sk[7]/100}倍`);} - str += strArr.join("、"); + let needMons = sk.slice(0,5).filter(s=>s>0); + fragment.appendChild(document.createTextNode(`队伍中${needMons.length>1?"同时":""}存在`)); + needMons.forEach(mid=>{ + let cardDom = cardN(mid); + cardDom.monDom.onclick = changeToIdInSkillDetail; + fragment.appendChild(cardDom); + }); + fragment.appendChild(document.createTextNode(`时,所有宠物的${getFixedHpAtkRcvString({hp:sk[5],atk:sk[6],rcv:sk[7]})}`)); + return fragment; break; case 126: str = `${sk[1]}${sk[1] != sk[2]?`~${sk[2]}`:""}回合内${nb(sk[0], attrsName).join("、")}宝珠的掉落率提高${sk[3]}%`; break; case 127: //生成竖列 + strArr = []; + for (let ai=0;ais>0); + fragment.appendChild(document.createTextNode(`${sk[0]?`${sk[0]}回合内,`:""}根据队伍内觉醒技能`)); + awokenArr.forEach((aid,idx,arr)=>{ + const icon = fragment.appendChild(document.createElement("icon")); + icon.className ="awoken-icon"; + icon.setAttribute("data-awoken-icon",aid); + icon.title = awokenN(aid); + if (idx < arr.length-1) icon.insertAdjacentText('afterend', "、");; + }); + fragment.appendChild(document.createTextNode(`的数目`)); + if (sk[4]==1) + fragment.appendChild(document.createTextNode(`回复 HP ,每个觉醒回复自身回复力的${sk[5]/100}倍`)); + else if (sk[4]==2) + fragment.appendChild(document.createTextNode(`提升所有属性的攻击力,每个觉醒可以提升${sk[5]-100}%`)); + else if (sk[4]==3) + fragment.appendChild(document.createTextNode(`减少受到的伤害,每个觉醒可以减少${sk[5]}%`)); + else + fragment.appendChild(document.createTextNode(`宝石姬技能,未知buff类型 参数[4]:${sk[4]}`)); + return fragment; str = `${sk[0]?`${sk[0]}回合内,`:""}根据队伍内觉醒技能 ${strArr.filter(s=>s>0).map(s=>awokenN(s)).join("、")} 的数目`; if (sk[4]==1) str += `回复 HP ,每个觉醒回复自身回复力的${sk[5]/100}倍`; @@ -1033,21 +1101,34 @@ function parseSkillDescription(skill) str = `${sk[0]}回合内敌人的${strArr.join("、")}无效化`; break; case 175: //隊員編成均為「マガジン」合作活動角色時,所有寵物的攻擊力8倍 - str = `队员组成全是`; - strArr = sk.slice(0,3).filter(s=>s>0); //最多3种id - str += strArr.map(s=>{ - return `${s}`; - }).join("、"); - str += `合作角色时,所有宠物的${getFixedHpAtkRcvString({hp:sk[3],atk:sk[4],rcv:sk[5]})}`; + let needCollabs = sk.slice(0,3).filter(s=>s>0); //最多3种id + fragment.appendChild(document.createTextNode(`队员组成全是`)); + + //搜索并显示合作 + function searchCollab(event) { + const collabId = parseInt(this.getAttribute('data-collabId'), 10); + showSearch(Cards.filter(card => card.collabId == collabId)); + } + + needCollabs.forEach((cid,idx,arr)=>{ + const lnk = fragment.appendChild(document.createElement("a")); + lnk.className ="detail-search monster-collabId"; + lnk.setAttribute("data-collabId",cid); + lnk.onclick = searchCollab; + lnk.textContent = cid; + if (idx < arr.length-1) lnk.insertAdjacentText('afterend', "、");; + }); + fragment.appendChild(document.createTextNode(`合作角色时,所有宠物的${getFixedHpAtkRcvString({hp:sk[3],atk:sk[4],rcv:sk[5]})}`)); + return fragment; break; case 176: //●◉○◍◯ - var table = [sk[0],sk[1],sk[2],sk[3],sk[4]]; - str = `以如下形状生成${attrN(sk[5])}宝珠
`; - str += table.map(r=>{ - const line = new Array(6).fill(null).map((a,i)=> (1<"); + //var data = [sk[0],sk[1],sk[2],sk[3],sk[4]].map(flag=>new Array(6).fill(null).map((a,i)=> (1<card.evoMaterials.includes(3826))); + }; + }else if (sk[0] === 2) + { + lnk.textContent = "转生或超转生"; + lnk.onclick = function(){ + showSearch(Cards.filter(card=>isReincarnated(card))); + }; + }else + lnk.textContent = "未知新类型"; + + fragment.appendChild(document.createTextNode(`时,所有宠物的${getFixedHpAtkRcvString({hp:sk[1],atk:sk[2],rcv:sk[3]})}`)); + return fragment; break; case 205: str = `${sk[1]}回合内,${getOrbsAttrString(sk[0])}宝珠会以锁定形式掉落`; @@ -3235,7 +3334,7 @@ function parseBigNumber(number) return subskills.some(subskill=>subskill.type == searchType); } })}, - {name:"变身后",function:cards=>cards.filter(card=>card.henshinTo)}, + {name:"变身后",function:cards=>cards.filter(card=>card.henshinFrom)}, {name:"变身前后队长技保持不变",function:cards=>cards.filter(card=>{ const searchType = 202; const skill = Skills[card.activeSkillId]; diff --git a/languages/zh.css b/languages/zh.css index bce1a915..88695b8d 100644 --- a/languages/zh.css +++ b/languages/zh.css @@ -235,6 +235,12 @@ .control-box .btn-swap-ABC-team::before{ content: "🔄轮换ABC队"; } +.control-box .btn-swap-henshin::before{ + content: "🐱➡️🐯最终变身"; +} +.control-box .btn-swap-henshin.henshin-back::before{ + content: "🐱↩️🐯变身前"; +} .control-box .show-mon-id-lbl::after{ content:"🆔显示怪物ID"; } diff --git a/multi.html b/multi.html index ab2520d9..8bf66b55 100644 --- a/multi.html +++ b/multi.html @@ -42,6 +42,7 @@ var formation = new Formation(teamsCount,5); +
diff --git a/script-universal_function.js b/script-universal_function.js index d22a28ef..1818a38c 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -452,15 +452,16 @@ function cardN(id){ monOuterDom.className = "detail-mon"; const monDom = createCardA(id); monOuterDom.appendChild(monDom); + monOuterDom.monDom = monDom; changeid({id:id},monDom); - return monOuterDom.outerHTML; + return monOuterDom; } //将怪物的文字介绍解析为HTML function descriptionToHTML(str) { str = str.replace(/\n/ig,"
"); //换行 str = str.replace(/\^([a-fA-F0-9]+?)\^([^\^]+?)\^p/igm,'$2'); //文字颜色 - str = str.replace(/\%\{m([0-9]{1,4})\}/g,function (str, p1, offset, s){return cardN(parseInt(p1,10));}); //怪物头像 + str = str.replace(/\%\{m([0-9]{1,4})\}/g,function (str, p1, offset, s){return cardN(parseInt(p1,10)).outerHTML;}); //怪物头像 return str; } //默认的技能解释的显示行为 diff --git a/script.js b/script.js index b9b18000..16b3fad6 100644 --- a/script.js +++ b/script.js @@ -297,20 +297,83 @@ function toggleDomClassName(checkBox, className, checkedAdd = true, dom = docume } } //清除数据 -function clearData() { +function clearData() +{ const locationURL = new URL(location); locationURL.searchParams.delete('d'); //删除数据 locationURL.searchParams.delete('l'); //删除语言 location = locationURL.toString(); } //轮换ABC队伍 -function swapABCteam() { +function swapABCteam() +{ if (formation.teams.length > 1) { formation.teams.push(formation.teams.splice(0, 1)[0]); //将队伍1移动到最后 creatNewUrl(); refreshAll(formation); } } +function swapHenshin(self) +{ + const backClassName = "henshin-back"; + const back = self.classList.contains(backClassName); + let shouldChange = formation.teams.some(team=> + team[0].some(member=>{ + const mid = member.id; + const card = Cards[mid]; + return card.henshinFrom || card.henshinTo; + }) + ); + //获得最终变身 + function finalHenshin(card) + { + if (card.henshinTo) + { //是变身的则返回 + if (card.evoRootId === card.henshinTo) + { //应对无限循环变身的问题 + return card; + } + return finalHenshin(Cards[card.henshinTo]); + } + return card; + } + if (shouldChange) + { + if (back) + { //回到变身前 + formation.teams.forEach(team=>{ + team[0].forEach(member=>{ + const mid = member.id; + const card = Cards[mid]; + if (card.henshinFrom && member.level <= 99) + { //要变身后的才进行操作 + const _card = Cards[card.evoRootId]; + member.id = card.evoRootId; + member.awoken = _card.awakenings.length; + } + }); + }); + self.classList.remove(backClassName); + }else + { //跑到变身后 + formation.teams.forEach(team=>{ + team[0].forEach(member=>{ + const mid = member.id; + const card = Cards[mid]; + if (card.henshinTo) + { //要变身前的才进行操作 + const _card = finalHenshin(card); + member.id = _card.id; + member.awoken = _card.awakenings.length; + } + }); + }); + self.classList.add(backClassName); + } + creatNewUrl(); + refreshAll(formation); + } +} //在单人和多人之间转移数据 function turnPage(toPage, e = null) { let pagename = null; @@ -540,10 +603,11 @@ function loadData(force = false) const linkRes = new RegExp("link:(\\d+)", "ig").exec(m.specialAttribute); if (linkRes) { //每个有链接的符卡,把它们被链接的符卡的进化根修改到链接前的 - const _m = Cards[parseInt(linkRes[1], 10)]; + const toId = parseInt(linkRes[1], 10); + const _m = Cards[toId]; _m.evoRootId = m.evoRootId; - m.henshinFrom = true; - _m.henshinTo = true; + m.henshinTo = toId; + _m.henshinFrom = m.id; } }); monstersList.appendChild(fragment); @@ -837,26 +901,28 @@ function initialize() { mSeriesId.onclick = function() { //搜索系列 const seriesId = parseInt(this.getAttribute('data-seriesId'), 10); if (seriesId > 0) { - showSearch(Cards.filter(card => { return card.seriesId == seriesId; })); + showSearch(Cards.filter(card => card.seriesId == seriesId)); } }; const mCollabId = smonsterinfoBox.querySelector(".monster-collabId"); mCollabId.onclick = function() { //搜索合作 const collabId = parseInt(this.getAttribute('data-collabId'), 10); if (collabId > 0); { - searchColla(collabId); + showSearch(Cards.filter(card => card.collabId == collabId)); } }; const mAltName = smonsterinfoBox.querySelector(".monster-altName"); mAltName.onclick = function() { //搜索合作 const altName = this.getAttribute('data-altName'); - const splitAltName = altName.split("|"); - if (altName.length > 0); { - showSearch(Cards.filter(card => { - return splitAltName.some(alt => { - return alt.length > 0 && (card.altName.includes(alt) || card.name.includes(alt)); - }); - })); + if (altName.length > 0) + { + const splitAltName = altName.split("|"); + showSearch(Cards.filter(card => + splitAltName.some(alt => + alt.length > 0 && + (card.altName.includes(alt) || card.name.includes(alt)) + ) + )); } }; //创建一个新的怪物头像 @@ -2164,11 +2230,6 @@ function editBoxChangeMonId(id) { editBox.reCalculateExp(); editBox.reCalculateAbility(); } -//搜索并显示合作 -function searchColla(collabId) { - if (typeof(collabId) == "string") collabId = parseInt(collabId, 10); - showSearch(Cards.filter(card => { return card.collabId == collabId; })); -} //刷新整个队伍 function refreshAll(formationData) { let fragment = document.createDocumentFragment(); //创建节点用的临时空间 diff --git a/solo.html b/solo.html index d352d268..aedbf484 100644 --- a/solo.html +++ b/solo.html @@ -41,6 +41,7 @@ var formation = new Formation(teamsCount,6); +
diff --git a/triple.html b/triple.html index 0cdd60c0..58e82359 100644 --- a/triple.html +++ b/triple.html @@ -55,6 +55,7 @@ var formation = new Formation(teamsCount,6); +