Browse Source

向pad-rikuu改进中

tags/v4.5
枫谷剑仙 6 years ago
parent
commit
46eeb91bd3
4 changed files with 486 additions and 85 deletions
  1. +454
    -73
      languages/zh-dev.js
  2. +9
    -9
      script.js
  3. +9
    -3
      style.css
  4. +14
    -0
      universal_function.js

+ 454
- 73
languages/zh-dev.js View File

@@ -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<ak.length;ai+=2)
for (let ai=0;ai<sk.length;ai+=2)
{
strArr.push(`${nb(ak[ai],ClumsN).join("、")}的宝珠变为${nb(ak[ai+1],attrsName).join("、")}`);
strArr.push(`${nb(sk[ai],ClumsN).join("、")}的宝珠变为${nb(sk[ai+1],attrsName).join("、")}`);
}
str = strArr.join(",");
break;
case 128: //生成横
strArr = [];
for (let ai=0;ai<ak.length;ai+=2)
for (let ai=0;ai<sk.length;ai+=2)
{
strArr.push(`${nb(ak[ai],RowsN).join("、")}的宝珠变为${nb(ak[ai+1],attrsName).join("、")}`);
strArr.push(`${nb(sk[ai],RowsN).join("、")}的宝珠变为${nb(sk[ai+1],attrsName).join("、")}`);
}
str = strArr.join(",");
break;
case 139:
case 129:
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("和") + "宠物的";
str += ` HP ${sk[2]==(sk[3]||100)?(sk[2]==100?"全满":`${sk[2]}%`):(sk[3]==0?`${sk[2]}%以上`:`${sk[2]}%~${sk[3]}%`)}时攻击力${sk[4]/100}倍`;
str += `,HP ${sk[5]==(sk[6]||sk[5])?(sk[5]==100?"全满":`${sk[6]}%`):(sk[6]<=1?`${sk[5]}%以下`:`${sk[5]}%~${sk[6]}%`)}时攻击力${sk[7]/100}倍`;
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("和") + "宠物的";
let hasArr = [sk[2],sk[3],sk[4]].filter(s=>{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 = `<ul class="leader-skill-ul">`;
str += sk.map(subSkill => {return `<li class="leader-skill-li">${parseSkillDescription(Skills[subSkill])}</li>`;}).join("");
@@ -461,18 +717,17 @@ function parseSkillDescription(skill)
case 139:
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("和") + "宠物";
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("、");
if (sk[5]) {
if (str.length)str += ",";
str += `受到的${nb(sk[5],attrsName).join("、")}属性伤害减少${sk[6]}%`;
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]==(sk[3]||100)?(sk[2]==100?"全满":`${sk[2]}%`):(sk[3]==0?`${sk[2]}%以上`:`${sk[2]}%~${sk[3]}%`)}时攻击力${sk[4]/100}倍`;
str += `,HP ${sk[5]==(sk[6]||sk[5])?(sk[5]==100?"全满":`${sk[6]}%`):(sk[6]<=1?`${sk[5]}%以下`:`${sk[5]}%~${sk[6]}%`)}时攻击力${sk[7]/100}倍`;
break;
case 140:
str = `${nb(sk[0],attrsName).join("、")}宝珠强化(每颗强化珠伤害/回复增加${sk[1]}%)`;
@@ -493,6 +748,18 @@ function parseSkillDescription(skill)
case 148:
str = `进入地下城时为队长的话,获得的经验${sk[0]/100}倍`;
break;
case 150: //相連消除5粒寶珠,而當中包含至少1粒強化寶珠時,該屬性的攻擊力1.5倍
str = `相连消除5粒宝珠,而当中包含至少1粒强化宝珠时,该属性的攻击力${sk[1]/100}倍`;
if (sk[0]) str += `未知的 参数0 ${sk[0]}`;
break;
case 151:
str = `以十字形式消除5个${attrN(5)}宝珠时`;
strArr = [];
if (sk[0]) strArr.push(`攻击力×${sk[0]/100}倍`);
if (sk[1]) strArr.push(`回复力×${sk[1]/100}倍`);
if (strArr.length) str += `,所有宠物的${strArr.join(",")}`;
if (sk[3]) str += `,受到的伤害减少${sk[3]}%`;
break;
case 152:
str = `将`;
if (sk[0] & 1023 == 1023) //parseInt("1111111111",2) == 1023
@@ -532,46 +799,134 @@ function parseSkillDescription(skill)
case 160:
str = `${sk[0]}回合内,结算时增加${sk[1]}COMBO`;
break;
case 164:
fullColor = sk.slice(0,4).filter(c=>{return c>0;}); //最多4串珠
hasDiffOrbs = fullColor.filter(s=>{return s!= fullColor[0];}).length > 0; //是否存在不同色的珠子
strArr = [];
if (sk[4] < fullColor.length) //有阶梯的
{
if (hasDiffOrbs)
{//「光光火/光火火」組合的3COMBO時,所有寵物的攻擊力3.5倍;「光光火火」組合的4COMBO或以上時,所有寵物的攻擊力6倍
str = `${fullColor.map(a=>{return nb(a, attrsName);}).join("、")}中${sk[4]}串同时攻击时,所有宠物的攻击力和回复力×${sk[5]/100}倍,每多1串+${sk[7]/100}倍,最大${fullColor.length}串时×${(sk[6]+sk[7]*(fullColor.length-sk[4]))/100}倍`;
}else
{//木寶珠有2COMBO時,所有寵物的攻擊力3倍,每多1COMBO+4倍,最大5COMBO時15倍
str = `${nb(fullColor[0], attrsName).join("、")}宝珠有${fullColor.length}串时,所有宠物的攻击力和回复力×${sk[6]/100}倍,每多1串+${sk[7]/100}倍,最大${fullColor.length}串时×${(sk[6]+sk[7]*(fullColor.length-sk[5]))/100}倍`;
}
if (sk[5]) strArr.push(`攻击力×${sk[5]/100}倍,每多1串+${sk[7]/100}倍,最大${fullColor.length}串时×${(sk[5]+sk[7]*(fullColor.length-sk[4]))/100}倍`);
if (sk[6]) strArr.push(`回复力×${sk[6]/100}倍,每多1串+${sk[7]/100}倍,最大${fullColor.length}串时×${(sk[6]+sk[7]*(fullColor.length-sk[4]))/100}倍`);
str += strArr.join("、");
}else
{
if (hasDiffOrbs)
{//木暗同時攻擊時,所有寵物的攻擊力和回復力2倍
str = `${fullColor.map(a=>{return nb(a, attrsName);}).join("、")}同时攻击时,所有宠物的`;
}else
{//光寶珠有2COMBO或以上時,所有寵物的攻擊力3倍
str = `${nb(fullColor[0], attrsName).join("、")}宝珠有${fullColor.length}串或以上时,所有宠物的`;
}
if (sk[5]) strArr.push(`攻击力×${sk[5]/100}倍`);
if (sk[6]) strArr.push(`回复力×${sk[6]/100}倍`);
str += strArr.join("、");
}
break;
case 165:
fullColor = nb(sk[0], attrsName);
atSameTime = fullColor.length == sk[1];
if (sk[0] == 31) //31-11111
{ //单纯5色
str = '';
}else if((sk[0] & 31) == 31)
{ //5色加其他色
str = `5色+${nb(sk[0] ^ 31, attrsName).join("、")}`;
if (!atSameTime) str+="中";
}else
{
str = `${fullColor.join("、")}`;
if (!atSameTime) str+="中";
}
if (!atSameTime) str+=`${sk[1]}种属性以上`;
else if(sk[0] == 31) str += `5色`;
str += `同时攻击时,所有宠物的`;
strArr = [];
if (sk[2]==sk[3] && sk[4] == sk[5])
{
strArr.push(`攻击力和回复力×${sk[2]/100}倍`);
if (sk[4]>0)
{
strArr.push(`每多1种属性+${sk[4]/100}倍`);
}
if (sk[6]>0)
{
strArr.push(`最大${sk[6]}种属性时×${((sk[6]-sk[1])*sk[4]+sk[2])/100}倍`);
}
}else
{
if (sk[2]>0)
{
strArr.push(`攻击力×${sk[2]/100}倍`);
if (sk[4]>0)
{
strArr.push(`每多1种属性+${sk[4]/100}倍`);
}
if (sk[6]>0)
{
strArr.push(`最大${sk[6]}种属性时×${((sk[6]-sk[1])*sk[4]+sk[2])/100}倍`);
}
}
if (sk[3]>0)
{
strArr.push(`回复力×${sk[3]/100}倍`);
if (sk[5]>0)
{
strArr.push(`每多1种属性+${sk[5]/100}倍`);
}
if (sk[6]>0)
{
strArr.push(`最大${sk[6]}种属性时×${((sk[6]-sk[1])*sk[5]+sk[3])/100}倍`);
}
}
}
str += strArr.join(",");
break;
case 167:
//"相連消除5個或以上的火寶珠或光寶珠時攻擊力和回復力4倍,每多1個+1倍,最大7個時6倍;"
str = `相连消除${sk[1]}个或以上${nb(sk[0],attrsName).join("或")}宝珠时,所有宠物的`;
strArr = [];
if (sk[2]==sk[3] && sk[4] == sk[5])
{
strArr.push(`攻击力和回复力${sk[2]/100}倍`);
strArr.push(`攻击力和回复力×${sk[2]/100}倍`);
if (sk[4]>0)
{
strArr.push(`每多1个+${sk[4]/100}倍`);
}
if (sk[6]>0)
{
strArr.push(`最大${sk[6]}个时${((sk[6]-sk[1])*sk[4]+sk[2])/100}倍`);
strArr.push(`最大${sk[6]}个时×${((sk[6]-sk[1])*sk[4]+sk[2])/100}倍`);
}
}else
{
if (sk[2]>0)
{
strArr.push(`攻击力${sk[2]/100}倍`);
strArr.push(`攻击力×${sk[2]/100}倍`);
if (sk[4]>0)
{
strArr.push(`每多1个+${sk[4]/100}倍`);
}
if (sk[6]>0)
{
strArr.push(`最大${sk[6]}个时${((sk[6]-sk[1])*sk[4]+sk[2])/100}倍`);
strArr.push(`最大${sk[6]}个时×${((sk[6]-sk[1])*sk[4]+sk[2])/100}倍`);
}
}
if (sk[3]>0)
{
strArr.push(`回复力${sk[3]/100}倍`);
strArr.push(`回复力×${sk[3]/100}倍`);
if (sk[5]>0)
{
strArr.push(`每多1个+${sk[5]/100}倍`);
}
if (sk[6]>0)
{
strArr.push(`最大${sk[6]}个时${((sk[6]-sk[1])*sk[5]+sk[3])/100}倍`);
strArr.push(`最大${sk[6]}个时×${((sk[6]-sk[1])*sk[5]+sk[3])/100}倍`);
}
}
}
@@ -582,6 +937,9 @@ function parseSkillDescription(skill)
str = `${sk[0]?`${sk[0]}回合内,`:""}根据队伍内觉醒技能${strArr.filter(s=>{return s>0;}).map(s=>{return awokenN(sk[1]);}).join("、")}的数目`;
str += `提升所有属性的攻击力,每个觉醒可以提升${sk[7]}%`;
break;
case 169: //5COMBO或以上時受到的傷害減少25%、攻擊力6倍;
str = `${sk[0]}连击或以上时,所有宠物的攻击力×${sk[1]/100}倍,受到的伤害减少${sk[2]}%`;
break;
case 172:
str = `解锁所有宝珠`;
break;
@@ -590,7 +948,9 @@ function parseSkillDescription(skill)
var table = [sk[0],sk[1],sk[2],sk[3],sk[4]];
str = `以如下形状生成${attrN(sk[5])}宝珠<br>`;
str += table.map(r=>{
return getBooleanFromBinary(r).map(b=>{return b?"●":"○";}).join("");
const orbs = flags(r);
const line = Array.from(new Array(6)).map((a,i)=>{return orbs.indexOf(i)>=0?"●":"○";});
return line.join("");
}).join("<br>");
break;
case 173:
@@ -609,9 +969,15 @@ function parseSkillDescription(skill)
case 185: //ドラゴンと悪魔タイプの攻撃力が4倍、回復力は2.5倍。\nドロップ操作を3秒延長。
str = ``;
strArr =[];
if (sk[1]) {strArr.push(nb(sk[1],attrsName).join("、") + "属性");}
if (sk[2]) {strArr.push(nb(sk[2],typeName).join("、") + "类型");}
if (strArr.length) str += strArr.join("和") + "宠物的";
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(`HP ${sk[3]/100}倍`);}
if (sk[4]) {strArr.push(`攻击力 ${sk[4]/100}倍`);}
@@ -622,13 +988,19 @@ function parseSkillDescription(skill)
case 186:
str = '<span class="spColor">版面变为【7×6】</span>';
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}倍`);}
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 188:
@@ -637,6 +1009,15 @@ function parseSkillDescription(skill)
case 191:
str = `${sk[0]}回合内可以贯穿伤害无效盾`;
break;
case 192:
//相連消除9個或以上的火寶珠時攻擊力4倍、結算增加2COMBO
//同時消除光寶珠和水寶珠各4個或以上時攻擊力3倍、結算增加1COMBO;
fullColor = nb(sk[0], attrsName);
str = fullColor.length>1?"同时":"相连";
str += `消除${sk[1]}个或以上的${fullColor.join("、")}宝珠时`;
if (sk[2]) str += `,攻击力×${sk[2]/100}倍`;
if (sk[3]) str += `,结算时连击数+${sk[3]}`;
break;
case 195:
str = `HP 减少${sk[0]}%`;
break;


+ 9
- 9
script.js View File

@@ -244,8 +244,14 @@ window.onload = function()
interchangeSVG = document.querySelector("#interchange-line");
interchangePath = interchangeSVG.querySelector("g line");
const controlBox = document.querySelector(".control-box");
const helpLink = document.querySelector(".help-link");
const statusLine = controlBox.querySelector(".status"); //显示当前状态的

if (location.hostname.indexOf("gitee")>=0)
{
helpLink.hostname = "gitee.com";
}

//▼添加语言列表开始
const langSelectDom = controlBox.querySelector(".languages");
languageList.forEach(function(l){
@@ -525,16 +531,10 @@ function initialize()
return false;
}
const cli = document.createElement("li");
const cdom = cli.head = cli.appendChild(document.createElement("a"));
cdom.class = "monster";
cdom.onclick = clickHeadToNewMon;
const property = cdom.appendChild(document.createElement("div"));
property.className = "property";
const subproperty = cdom.appendChild(document.createElement("div"));
subproperty.className = "subproperty";
const cid = cdom.appendChild(document.createElement("div"));
cid.className = "id";
const cdom = cli.head = createCardA(id);
cli.appendChild(cdom);
changeid({id:id},cdom);
cdom.onclick = clickHeadToNewMon;
return cli;
};



+ 9
- 3
style.css View File

@@ -498,20 +498,26 @@ ul{
font-size: 25px;
}
.edit-box .setting-box .row-mon-id .evo-card-list li,
.edit-box .search-box .search-mon-list li{
.edit-box .search-box .search-mon-list li,
.edit-box .setting-box .skill-box .detail-mon{
display: inline-block;
vertical-align: top;
top: 0;
width: 78px;
height: 80px;
}
.edit-box .setting-box .skill-box .detail-mon{
vertical-align: bottom;
}
.edit-box .setting-box .row-mon-id .evo-card-list .monster,
.edit-box .search-box .search-mon-list .monster{
.edit-box .search-box .search-mon-list .monster,
.edit-box .setting-box .skill-box .detail-mon .monster{
float: none;
transform: scale(0.75) translate(-13px,-13px);
}
.edit-box .setting-box .row-mon-id .evo-card-list .monster .id,
.edit-box .search-box .search-mon-list .monster .id{
.edit-box .search-box .search-mon-list .monster .id,
.edit-box .setting-box .skill-box .detail-mon .monster .id{
bottom: 5px;
font-size: 20px;
}


+ 14
- 0
universal_function.js View File

@@ -251,6 +251,20 @@ function searchCards(cards,attr1,attr2,fixMainColor,types,awokens,sawokens)
}
return res;
}
//产生一个怪物头像
function createCardA(id)
{
const cdom = document.createElement("a");
cdom.class = "monster";
cdom.target = "_blank";
const property = cdom.appendChild(document.createElement("div"));
property.className = "property";
const subproperty = cdom.appendChild(document.createElement("div"));
subproperty.className = "subproperty";
const cid = cdom.appendChild(document.createElement("div"));
cid.className = "id";
return cdom;
}
//将怪物的文字介绍解析为HTML
function descriptionToHTML(str)
{


Loading…
Cancel
Save