From 46eeb91bd3641990ad28153cfe8c5b53e1e1e596 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, 20 Jan 2020 18:53:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=91pad-rikuu=E6=94=B9=E8=BF=9B=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- languages/zh-dev.js | 527 ++++++++++++++++++++++++++++++++++++------ script.js | 18 +- style.css | 12 +- universal_function.js | 14 ++ 4 files changed, 486 insertions(+), 85 deletions(-) diff --git a/languages/zh-dev.js b/languages/zh-dev.js index 10149ed4..b884e150 100644 --- a/languages/zh-dev.js +++ b/languages/zh-dev.js @@ -33,6 +33,22 @@ function parseSkillDescription(skill) function typeN(i){return typeName[i || 0] || ("未知类型" + i);} //返回觉醒名 function awokenN(i){return awokenName[(i || 0)-1] || ("未知觉醒" + i);} + //返回怪物名 + function cardN(id){ + let card = Cards[id || 0]; + if (!card) + { + return "没有该宠物 " + id; + }else + { + const monOuterDom = document.createElement("span"); + monOuterDom.className = "detail-mon"; + const monDom = createCardA(id); + monOuterDom.appendChild(monDom); + changeid({id:id},monDom); + return monOuterDom.outerHTML; + } + } //从二进制的数字中获得布尔值数组 function getBooleanFromBinary(num,reverse=true) { /*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。 @@ -41,6 +57,10 @@ function parseSkillDescription(skill) if (reverse) arr.reverse(); return arr; } + //返回flag里值为true的数组,如[1,4,7] + function flags(num){ + return Array.from(new Array(33)).map((a,i)=>{return i;}).filter(i => num & (1 << i)); + } //从二进制的数字中获得有哪些内容 function getNamesFromBinary(num,dataArr) { /*num是输入的数字,2的N次方在2进制下表示1后面跟着N个0。 @@ -56,8 +76,82 @@ function parseSkillDescription(skill) } const nb = getNamesFromBinary; //化简名称 + function getAttrTypeString(attrsArray,typesArray) + { + let outArr = []; + if (attrsArray.length) + { + outArr.push(attrsArray.map(attrN).join("、") + "属性"); + } + if (typesArray.length) + { + outArr.push(typesArray.map(typeN).join("、") + "类型"); + } + return outArr.join("和"); + } + function stats(value, statTypes) + { + return [ + statTypes.indexOf(1) >= 0 ? value : 100, //攻击 + statTypes.indexOf(2) >= 0 ? value : 100 //回复 + ]; + } + const mulName = ["HP","攻击力","回复力"]; + //获取固定的三维成长的名称 + function getFixedHpAtkRcvString(values) + { + let mulArr = null; + if (Array.isArray(values)) { + mulArr = [ + 1, + values[0] / 100, + values[1] / 100, + ]; + } else + { + mulArr = [ + (values.hp || 100) / 100, + (values.atk || 100) / 100, + (values.rcv || 100) / 100 + ]; + } + const hasMul = mulArr.filter(m=>{return m != 1;}); //不是1的数值 + let str = ""; + if (hasMul) + { + const hasDiff = hasMul.filter(m=>{return m != hasMul[0];}).length > 0; //存在不一样的值 + if (hasDiff) + { + str += mulArr.map((m,i)=>{ + return m!=1?`${mulName[i]}×${m}倍`:null; + }).filter(s=>{return s!=null;}).join(","); + }else + { + let hasMulName = mulName.filter((n,i)=>{return mulArr[i] != 1;}); + if (hasMulName.length>=3) + { + str+=hasMulName.slice(0,hasMulName.length-1).join("、") + "和" + hasMulName[hasMulName.length-1]; + }else + { + str+=hasMulName.join("和"); + } + str += `×${hasMul[0]}倍`; + } + }else + { + str += "没有变化"; + } + return str; + } + const mul = getFixedHpAtkRcvString; + function getScaleAtkRcvString(ATK,RCV) + { + //{base,min,max,bonus} + //if (tyof(HP) == "number") + } + let str = null; - let strArr = null; + let strArr = null,fullColor = null,atSameTime = null,hasDiffOrbs = null; switch(type) { case 0: @@ -169,8 +263,8 @@ function parseSkillDescription(skill) if (sk[1]!=100) str+=`未知的 参数1 ${sk[1]}`; break; case 39: - strArr = [sk[1],sk[2]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击"; else if(s==2) return "回复";}) - str = `HP ${sk[0]==100?"全满":`${sk[0]}%以下`}时所有宠物的${strArr.join("和")}${sk[3]/100}倍`; + strArr = [sk[1],sk[2]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `HP ${sk[0]==100?"全满":`${sk[0]}%以下`}时所有宠物的${strArr.join("和")}×${sk[3]/100}倍`; break; case 40: str = `${sk.slice(0,sk.length-1).map(t=>{return attrN(t);}).join("、")}属性宠物的攻击力×${sk[sk.length-1]/100}倍`; @@ -185,10 +279,10 @@ function parseSkillDescription(skill) str = `HP ${sk[0]==100 ?"全满":`${sk[0]}%以上`}时${sk[1]<100?`有${sk[1]}的几率使`:""}受到的伤害减少${sk[2]}`; break; case 44: - strArr = [sk[1],sk[2]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击"; else if(s==2) return "回复";}) - str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时所有宠物的${strArr.join("和")}${sk[3]/100}倍`; + strArr = [sk[1],sk[2]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时所有宠物的${strArr.join("和")}×${sk[3]/100}倍`; break; - case 45: + case 45: case 111: str = `${sk.slice(0,sk.length-1).map(t=>{return attrN(t);}).join("、")}属性宠物的 HP 和攻击力×${sk[sk.length-1]/100}倍`; break; case 46:case 48: @@ -225,8 +319,8 @@ function parseSkillDescription(skill) str = `${sk[0]}回合内,受到伤害时进行受到伤害${sk[1]/100+"倍的"+attrN(sk[2])}属性反击`; break; case 61: - let fullColor = nb(sk[0], attrsName); - let atSameTime = fullColor.length == sk[1]; + fullColor = nb(sk[0], attrsName); + atSameTime = fullColor.length == sk[1]; if (sk[0] == 31) //31-11111 { //单纯5色 str = ''; @@ -275,15 +369,24 @@ function parseSkillDescription(skill) } str = "全画面的宝珠变成" + strArr.map((o)=>{return attrN(o);}).join("、"); break; + case 73: + str = `${attrN(sk[0])}属性和${typeN(sk[1])}类型宠物的 HP 和攻击力×${sk[2]/100}倍`; + break; case 75: str = `${attrN(sk[0])}属性和${typeN(sk[1])}类型宠物的攻击力和回复力×${sk[2]/100}倍`; break; case 76: - atrArr = []; - if (sk[0]) {strArr.push(nb(sk[0],attrsName).join("、") + "属性");} - if (sk[1]) {strArr.push(nb(sk[1],typeName).join("、") + "类型");} - if (strArr.length) str += strArr.join("和") + "宠物的"; - str += `全属性${sk[2]/100}倍`; + strArr = []; + if (sk[0] & 31 == 31) + { + strArr.push("所有"); + }else + { + if (sk[0]) {strArr.push(nb(sk[0],attrsName).join("、") + "属性");} + if (sk[1]) {strArr.push(nb(sk[1],typeName).join("、") + "类型");} + } + str += strArr.join("和") + "宠物的"; + str += ` HP 、攻击力和回复力${sk[2]/100}倍`; break; case 84: str = `HP ${(sk[3]?(`减少${sk[3]}%`):"变为1")},对敌方1体造成自身攻击力×${sk[1]/100}${sk[1]!=sk[2]?`~${+sk[2]/100}`:""}倍的${attrN(sk[0])}属性伤害`; @@ -317,33 +420,42 @@ function parseSkillDescription(skill) if (sk[0]) str += `未知 参数0 ${sk[0]}`; break; case 94: - strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击"; else if(s==2) return "回复";}) - str = `HP ${sk[0]==100?"全满":`${sk[0]}%以下`}时${attrN(sk[1])}属性宠物的${strArr.join("和")}${sk[4]/100}倍`; + strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `HP ${sk[0]==100?"全满":`${sk[0]}%以下`}时${attrN(sk[1])}属性宠物的${strArr.join("和")}×${sk[4]/100}倍`; break; case 95: - strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击"; else if(s==2) return "回复";}) - str = `HP ${sk[0]==100?"全满":`${sk[0]}%以下`}时${typeN(sk[1])}类型宠物的${strArr.join("和")}${sk[4]/100}倍`; + strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `HP ${sk[0]==100?"全满":`${sk[0]}%以下`}时${typeN(sk[1])}类型宠物的${strArr.join("和")}×${sk[4]/100}倍`; break; case 96: - strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击"; else if(s==2) return "回复";}) - str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时${attrN(sk[1])}属性宠物的${strArr.join("和")}${sk[4]/100}倍`; + strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时${attrN(sk[1])}属性宠物的${strArr.join("和")}×${sk[4]/100}倍`; break; case 97: - strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击"; else if(s==2) return "回复";}) - str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时${typeN(sk[1])}类型宠物的${strArr.join("和")}${sk[4]/100}倍`; + strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时${typeN(sk[1])}类型宠物的${strArr.join("和")}×${sk[4]/100}倍`; break; case 98: str = `${sk[0]}连击时,所有宠物的攻击力${sk[1]/100}倍,每多1连击+${sk[2]/100}倍,最大${sk[3]}连击时${(sk[1]+sk[2]*(sk[3]-sk[0]))/100}倍`; break; + case 100: + strArr = [sk[0],sk[1]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `使用技能时,所有宠物的${strArr.join("和")}×${sk[2]/100}倍`; + break; + case 103: + strArr = [sk[1],sk[2]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `${sk[0]}连击或以上时所有宠物的${strArr.join("和")}×${sk[3]/100}倍`; + break; + case 104: + strArr = [sk[2],sk[3]].filter(s=>{return s>0;}).map(s=>{if(s==1) return "攻击力"; else if(s==2) return "回复力";}); + str = `${sk[0]}连击以上时时${nb(sk[1],attrsName).join("、")}属性宠物的${strArr.join("和")}×${sk[4]/100}倍`; + break; case 108: str = `HP 变为${sk[0]}%,${typeN(sk[1])}类型宠物的攻击力×${sk[2]/100}倍`; break; case 110: str = `根据余下 HP 对敌方${sk[0]?"1":"全"}体造成${attrN(sk[1])}属性伤害(100% HP 时为自身攻击力×${sk[2]/100}倍,1 HP 时为自身攻击力×${sk[3]/100}倍)`; break; - case 111: - str = `${sk.slice(0,sk.length-1).map(t=>{return attrN(t);}).join("、")}属性宠物的 HP 和攻击力×${sk[sk.length-1]/100}倍`; - break; case 115: str = `对敌方1体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害,并回复伤害${sk[2]}%的 HP `; break; @@ -390,69 +502,213 @@ function parseSkillDescription(skill) case 121: str = ``; strArr =[]; - if (sk[0]) {strArr.push(nb(sk[0],attrsName).join("、") + "属性");} - if (sk[1]) {strArr.push(nb(sk[1],typeName).join("、") + "类型");} - if (strArr.length) str += strArr.join("和") + "宠物的"; + if (sk[0] & 31 == 31) + { + strArr.push("所有"); + }else + { + if (sk[0]) {strArr.push(nb(sk[0],attrsName).join("、") + "属性");} + if (sk[1]) {strArr.push(nb(sk[1],typeName).join("、") + "类型");} + } + str += strArr.join("和") + "宠物的"; + strArr =[]; + if (sk[2]) {strArr.push(`HP×${sk[2]/100}倍`);} + if (sk[3]) {strArr.push(`攻击力×${sk[3]/100}倍`);} + if (sk[4]) {strArr.push(`回复力×${sk[4]/100}倍`);} + str += strArr.join("、"); + break; + case 122: + str = `HP ${sk[0]}%以下时`; + strArr =[]; + if (sk[1] & 31 != 31) + { + if (sk[1]) {strArr.push(nb(sk[1],attrsName).join("、") + "属性");} + if (sk[2]) {strArr.push(nb(sk[2],typeName).join("、") + "类型");} + }else + { + strArr.push("所有"); + } + str += strArr.join("和") + "宠物的"; + strArr =[]; + if (sk[3]) {strArr.push(`攻击力×${sk[3]/100}倍`);} + if (sk[4]) {strArr.push(`回复力×${sk[4]/100}倍`);} + str += strArr.join("、"); + break; + case 123: + str = `HP ${sk[0]}%以上时`; + strArr =[]; + if (sk[1] & 31 != 31) + { + if (sk[1]) {strArr.push(nb(sk[1],attrsName).join("、") + "属性");} + if (sk[2]) {strArr.push(nb(sk[2],typeName).join("、") + "类型");} + }else + { + strArr.push("所有"); + } + str += strArr.join("和") + "宠物的"; strArr =[]; - if (sk[2]) {strArr.push(`HP ${sk[2]/100}倍`);} - if (sk[3]) {strArr.push(`攻击力 ${sk[3]/100}倍`);} - if (sk[4]) {strArr.push(`回复力 ${sk[4]/100}倍`);} + if (sk[3]) {strArr.push(`攻击力×${sk[3]/100}倍`);} + if (sk[4]) {strArr.push(`回复力×${sk[4]/100}倍`);} str += strArr.join("、"); break; case 124: strArr = sk.slice(0,5).filter(c=>{return c>0;}); //最多5串珠 - let hasDiffOrbs = strArr.filter(s=>{return s!= strArr[0]}).length > 0; //是否存在不同色的珠子 + hasDiffOrbs = strArr.filter(s=>{return s!= strArr[0];}).length > 0; //是否存在不同色的珠子 if (sk[5] < strArr.length) //有阶梯的 { if (hasDiffOrbs) {//「光光火/光火火」組合的3COMBO時,所有寵物的攻擊力3.5倍;「光光火火」組合的4COMBO或以上時,所有寵物的攻擊力6倍 - str = `${strArr.map(a=>{return nb(a, attrsName);}).join("、")}中${sk[5]}串同时攻击时,所有宠物的攻击力${sk[6]/100}倍,每多1串+${sk[7]/100}倍,最大${strArr.length}串时${(sk[6]+sk[7]*(strArr.length-sk[5]))/100}倍`; + str = `${strArr.map(a=>{return nb(a, attrsName);}).join("、")}中${sk[5]}串同时攻击时,所有宠物的攻击力×${sk[6]/100}倍,每多1串+${sk[7]/100}倍,最大${strArr.length}串时×${(sk[6]+sk[7]*(strArr.length-sk[5]))/100}倍`; }else {//木寶珠有2COMBO時,所有寵物的攻擊力3倍,每多1COMBO+4倍,最大5COMBO時15倍 - str = `${nb(strArr[0], attrsName).join("、")}宝珠有${strArr.length}串时,所有宠物的攻击力${sk[6]/100}倍,每多1串+${sk[7]/100}倍,最大${strArr.length}串时${(sk[6]+sk[7]*(strArr.length-sk[5]))/100}倍`; + str = `${nb(strArr[0], attrsName).join("、")}宝珠有${strArr.length}串时,所有宠物的攻击力×${sk[6]/100}倍,每多1串+${sk[7]/100}倍,最大${strArr.length}串时×${(sk[6]+sk[7]*(strArr.length-sk[5]))/100}倍`; } }else { if (hasDiffOrbs) {//火光同時攻擊時,所有寵物的攻擊力2倍 - str = `${strArr.map(a=>{return nb(a, attrsName);}).join("、")}同时攻击时,所有宠物的攻击力${sk[6]/100}倍`; + str = `${strArr.map(a=>{return nb(a, attrsName);}).join("、")}同时攻击时,所有宠物的攻击力×${sk[6]/100}倍`; }else {//光寶珠有2COMBO或以上時,所有寵物的攻擊力3倍 - str = `${nb(strArr[0], attrsName).join("、")}宝珠有${strArr.length}串或以上时,所有宠物的攻击力${sk[6]/100}倍`; + str = `${nb(strArr[0], attrsName).join("、")}宝珠有${strArr.length}串或以上时,所有宠物的攻击力×${sk[6]/100}倍`; } } break; + case 125: //隊伍中同時存在 時,所有寵物的攻擊力3.5倍 + strArr = sk.slice(0,5).filter(s=>{return 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("、"); + 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;ai{return s>0;}); //储存会增加的 + let hasDiffScale = hasArr.filter(s=>{return s!=hasArr[0];}).length > 0; //判断是否有重复的 + strArr = []; + if (hasDiffScale) //如果大家的值不一样,则不合并 + { + if (sk[2]) {strArr.push(` HP ×${sk[2]/100}倍`);} + if (sk[3]) {strArr.push(`攻击力×${sk[3]/100}倍`);} + if (sk[4]) {strArr.push(`回复力×${sk[4]/100}倍`);} + str += strArr.join("、"); + }else //如果大家的值一样,则合并 + { + if (sk[2]) {strArr.push(` HP `);} + if (sk[3]) {strArr.push(`攻击力`);} + if (sk[4]) {strArr.push(`回复力`);} + if (strArr.length) + { + if (strArr.length <= 2) + { + str += strArr.join("和") + `×${hasArr[0]/100}倍`; + }else + { + str += strArr.slice(0,strArr.length-1).join("、") + `和${strArr[strArr.length-1]}×${hasArr[0]/100}倍`; + } + } + } + if (sk[5]) { + if (strArr.length)str += ","; + str += `受到的${nb(sk[5],attrsName).join("、")}属性伤害减少${sk[6]}%`; + } + break; + case 130: + str = `HP ${sk[0]}%以下时`; + strArr =[]; + if (sk[1] & 31 == 31) + { + strArr.push("所有"); + }else + { + if (sk[1]) {strArr.push(nb(sk[1],attrsName).join("、") + "属性");} + if (sk[2]) {strArr.push(nb(sk[2],typeName).join("、") + "类型");} + } + str += strArr.join("和") + "宠物的"; + strArr =[]; + if (sk[3]) {strArr.push(`攻击力×${sk[3]/100}倍`);} + if (sk[4]) {strArr.push(`回复力×${sk[4]/100}倍`);} + str += strArr.join("、"); + if (sk[5]) { + if (strArr.length)str += ","; + str += `受到的${nb(sk[5],attrsName).join("、")}属性伤害减少${sk[6]}%`; + } + break; + case 131: + str = `HP ${sk[0]}%以上时`; + strArr =[]; + if (sk[1] & 31 == 31) + { + strArr.push("所有"); + }else + { + if (sk[1]) {strArr.push(nb(sk[1],attrsName).join("、") + "属性");} + if (sk[2]) {strArr.push(nb(sk[2],typeName).join("、") + "类型");} + } + str += strArr.join("和") + "宠物的"; + strArr =[]; + if (sk[3]) {strArr.push(`攻击力×${sk[3]/100}倍`);} + if (sk[4]) {strArr.push(`回复力×${sk[4]/100}倍`);} + str += strArr.join("、"); + if (sk[5]) { + if (strArr.length)str += ","; + str += `受到的${nb(sk[5],attrsName).join("、")}属性伤害减少${sk[6]}%`; + } break; case 132: str = `${sk[0]}回合内,宝珠移动时间${sk[1]?`增加${sk[1]/10}秒`:""}${sk[2]?`变为${sk[2]/100}倍`:""}`; break; + case 133: + str = `使用技能时,`; + strArr =[]; + if (sk[0] & 31 == 31) + { + strArr.push("所有"); + }else + { + if (sk[0]) {strArr.push(nb(sk[0],attrsName).join("、") + "属性");} + if (sk[1]) {strArr.push(nb(sk[1],typeName).join("、") + "类型");} + } + str += strArr.join("和") + "宠物的"; + strArr =[]; + if (sk[2]) {strArr.push(`攻击力×${sk[2]/100}倍`);} + if (sk[3]) {strArr.push(`回复力×${sk[3]/100}倍`);} + str += strArr.join("、"); + break; case 138: //多内容队长技能,按顺序组合发动如下队长技能: str = `