| @@ -57,25 +57,40 @@ function skillDetail(si) | |||
| var pna = ["火","水","木","光","暗","回复","邪魔","毒","剧毒","炸弹"]; | |||
| //类型名数组 | |||
| var tna = ["进化","平衡","体力","回复","龙","神","攻击","恶魔","机械","9","10","11","觉醒","13","强化","卖钱"]; | |||
| //觉醒名数组 | |||
| var ana = ["HP+","攻击+","回复+","火盾","水盾","木盾","光盾","暗盾","自回","防封","防暗","防废","防毒","火+","水+","木+","光+","暗+","手指","心解","SB","火横","水横","木横","光横","暗横","U","SX","心+","协力","龙杀","神杀","恶魔杀","机杀","平衡杀","攻击杀","体力杀","回复杀","进化杀","觉醒杀","强化杀","卖钱杀","7c","5色破防","心追","全体HP","全体回复","破无效","武器觉醒","方块心追","5色溜","大防封","大手指","防云","防封条","大SB","满血强化","下半血强化","L盾","L解锁","10c","c珠","语音","奖励增加","HP-","攻击-","回复-"]; | |||
| //返回属性名 | |||
| function pn(i) | |||
| function pn(i){return pna[i] || ("未知属性" + i);} | |||
| //返回类型名 | |||
| function tn(i){return tna[i] || ("未知类型" + i);} | |||
| //返回觉醒名 | |||
| function an(i){return ana[i-1] || ("未知觉醒" + i);} | |||
| //从二进制的数字中获得有哪些内容 | |||
| function getNamesFromBinary(num,arr) | |||
| { | |||
| return pna[i] || ("未知属性" + i); | |||
| var results = arr.filter(function(pn,pi){ | |||
| return num & Math.pow(2,pi); | |||
| }); | |||
| return results; | |||
| } | |||
| //从二进制(10禁止保存)的数字中获得有哪些珠子 | |||
| function binPns(b) | |||
| { /*b是输入的数字,比如10进制465转二进制=>111010001 | |||
| 然后从地位到高位表示火水木光暗…… | |||
| 用逻辑运算AND序号来获得有没有这个值*/ | |||
| var pns = pna.filter(function(pn,pi){ | |||
| return b & Math.pow(2,pi); | |||
| }); | |||
| return pns; | |||
| return getNamesFromBinary(b,pna); | |||
| } | |||
| //返回类型名 | |||
| function tn(i) | |||
| //从二进制的数字中获得有哪些列(colum) | |||
| function binClum(b) | |||
| { | |||
| var ClumsN = ["左边第1竖列","左边第2竖列","左边第3竖列","右边第3竖列","右边第2竖列","右边第1竖列"]; | |||
| return getNamesFromBinary(b,ClumsN); | |||
| } | |||
| //从二进制的数字中获得有哪些行(row) | |||
| function binRows(b) | |||
| { | |||
| return tna[i] || ("未知类型" + i); | |||
| var RowsN = ["最上1横行","上方第2横行","中间横行","下方第2横行","最下1横行"]; | |||
| return getNamesFromBinary(b,RowsN); | |||
| } | |||
| switch(sk[2]) | |||
| { | |||
| @@ -130,45 +145,87 @@ function skillDetail(si) | |||
| case 17: | |||
| str = "受到的" +pn(sk[6])+ "属性伤害减少" + sk[7] + "%"; | |||
| break; | |||
| case 18: | |||
| str = "将敌人的攻击延迟" + sk[6] + "回合"; | |||
| break; | |||
| case 19: | |||
| str = sk[6] + "回合内敌方防御力减少" + sk[7] + "%"; | |||
| break; | |||
| case 20: //单色A转B,C转D | |||
| var argArr = sk.slice(6); //获取6开始的参数 | |||
| var arrT = []; | |||
| for (var ai=0;ai<argArr.length;ai+=2) | |||
| { | |||
| arrT.push(pn(argArr[ai]) +"宝珠变为" + pn(argArr[ai+1])); | |||
| } | |||
| str = arrT.join(","); | |||
| break; | |||
| case 50: | |||
| str = sk[6] + "回合内" + (sk[7]==5?"回复力":(pn(sk[7]) + "属性的攻击力")) + "×"+ sk[8]/100 + "倍"; | |||
| break; | |||
| case 51: | |||
| str = sk[6] + "回合内,所有攻击转为全体攻击"; | |||
| break; | |||
| case 55: | |||
| str = "对敌方1体造成" + sk[6] + "点无视防御的固定伤害"; | |||
| break; | |||
| case 56: | |||
| str = "对敌方全体造成" + sk[6] + "点无视防御的固定伤害"; | |||
| break; | |||
| case 58: | |||
| str = "对敌方全体造成自身攻击力×" + sk[7]/100 + "~"+sk[8]/100+"倍的" +pn(sk[6])+ "属性伤害"; | |||
| break; | |||
| case 60: | |||
| str = sk[6] + "回合内,受到伤害时进行受到伤害"+sk[7]/100+"倍的"+pn(sk[8])+"属性反击"; | |||
| break; | |||
| case 71: | |||
| var Orbs = sk.slice(6,sk.indexOf(-1,6)); //6开到-1为止都是会产生的属性 | |||
| str = "全画面的宝珠变成" + Orbs.map(function(o){return pn(o);}).join("、"); | |||
| break; | |||
| case 84: | |||
| str = "HP减少"+ sk[9] +"%,对敌方1体造成自身攻击力×" + (sk[7]!=sk[8]?(sk[7]/100+"~"+sk[8]/100):sk[7]/100) + "倍的" + pn(sk[6]) + "属性伤害"; | |||
| str = "HP"+(sk[9]?("减少"+ sk[9] +"%"):"变为1")+",对敌方1体造成自身攻击力×" + (sk[7]!=sk[8]?(sk[7]/100+"~"+sk[8]/100):sk[7]/100) + "倍的" + pn(sk[6]) + "属性伤害"; | |||
| break; | |||
| case 85: | |||
| str = "HP减少"+ sk[9] +"%,对敌方全体造成自身攻击力×" + (sk[7]!=sk[8]?(sk[7]/100+"~"+sk[8]/100):sk[7]/100) + "倍的" + pn(sk[6]) + "属性伤害"; | |||
| break; | |||
| case 87: | |||
| str = "HP变为1,,对敌方全体造成"+sk[7]+"点"+pn(sk[6])+"属性伤害"; | |||
| break; | |||
| case 88: | |||
| str = sk[6] + "回合内" + tn(sk[7]) + "类型的攻击力×"+ sk[8]/100 + "倍"; | |||
| break; | |||
| case 90: | |||
| var Properties = sk.slice(7,sk.length-1); | |||
| str = sk[6] + "回合内" + Properties.map(pi => {return pn(pi);}).join("、") + "属性的攻击力×"+ sk[sk.length-1]/100 + "倍"; | |||
| break; | |||
| case 92: | |||
| var Types = sk.slice(7,sk.length-1); | |||
| str = sk[6] + "回合内" + Types.map(ti => {return tn(ti);}).join("、") + "类型的攻击力×"+ sk[9]/100 + "倍"; | |||
| str = sk[6] + "回合内" + Types.map(ti => {return tn(ti);}).join("、") + "类型的攻击力×"+ sk[sk.length-1]/100 + "倍"; | |||
| break; | |||
| case 110: | |||
| str = "根据余下HP对敌方"+(sk[6]?"1":"全")+"体造成"+pn(sk[7])+"属性伤害(100%HP时为自身攻击力的"+sk[8]/100+"倍,1HP时为自身攻击力的"+sk[9]/100+"倍)"; | |||
| break; | |||
| case 115: | |||
| str = "对敌方全体造成自身攻击力×" + sk[7]/100 + "倍的" + pn(sk[6]) + "属性伤害,并回复伤害"+sk[8]+"%的HP"; | |||
| break; | |||
| case 116:case 138: | |||
| case 116: //多内容主动技能 | |||
| var nextSkillId = sk.slice(6); //6开始都是下个技能的内容 | |||
| /*var nextSkillDetail = nextSkillId.map(function(si){ //每个技能单独获取解释 | |||
| return skillDetail(si); | |||
| });*/ | |||
| str = "按顺序组合发动如下" + (sk[2]==116?"主动":"队长") + "技能:"; | |||
| console.log(str); | |||
| console.log("按顺序组合发动如下主动技能:"); | |||
| nextSkillId.forEach(si => {skillDetail(si)}); | |||
| return; | |||
| break; | |||
| case 118: //随机内容主动技能 | |||
| var nextSkillId = sk.slice(6); //6开始都是下个技能的内容 | |||
| console.log("随机发动如下主动技能:"); | |||
| nextSkillId.forEach(si => {g(si);}); | |||
| return; | |||
| break; | |||
| case 117: | |||
| var arrT = []; | |||
| if(sk[7]>0) arrT.push("回复宠物自身回复力x" + sk[7]/100 + "倍的HP"); | |||
| if(sk[9]) arrT.push("回复最大HP" + sk[9] + "%的HP"); | |||
| if(sk[9]) arrT.push("回复HP上限" + sk[9] + "%的HP"); | |||
| if(sk[6]>0) arrT.push("封锁状态减少" + sk[6] + "回合"); | |||
| if(sk[10]>0) arrT.push("觉醒无效状态减少" + sk[6] + "回合"); | |||
| if(sk[10]>0) arrT.push("觉醒无效状态减少" + sk[10] + "回合"); | |||
| if(sk[8]) arrT.push("未知的sk[8]"); | |||
| str = arrT.join(","); | |||
| break; | |||
| @@ -176,18 +233,71 @@ function skillDetail(si) | |||
| str = sk[7] +"回合内" + binPns(sk[6]).join("、") + "珠的掉落率提高"+ sk[9] + "%"; | |||
| if (sk[7] != sk[8]) str += "还有未知sk[8]"; | |||
| break; | |||
| case 127: //生成竖列 | |||
| var argArr = sk.slice(6); //获取6开始的参数 | |||
| var arrT = []; | |||
| for (var ai=0;ai<argArr.length;ai+=2) | |||
| { | |||
| var clums = binClum(argArr[ai]); | |||
| arrT.push(clums.join("、") +"的宝珠变为" + binPns(argArr[ai+1]).join("、")); | |||
| } | |||
| str = arrT.join(","); | |||
| break; | |||
| case 128: //生成横 | |||
| var argArr = sk.slice(6); //获取6开始的参数 | |||
| var arrT = []; | |||
| for (var ai=0;ai<argArr.length;ai+=2) | |||
| { | |||
| var rows = binRows(argArr[ai]); | |||
| arrT.push(rows.join("、") +"的宝珠变为" + binPns(argArr[ai+1]).join("、")); | |||
| } | |||
| str = arrT.join(","); | |||
| break; | |||
| case 132: | |||
| str = sk[6] + "回合内,宝珠移动时间增加" + sk[7]/10 + "秒"; | |||
| break; | |||
| case 138: //多内容队长技能 | |||
| var nextSkillId = sk.slice(6); //6开始都是下个技能的内容 | |||
| console.log("按顺序组合发动如下队长技能:"); | |||
| nextSkillId.forEach(si => {skillDetail(si)}); | |||
| return; | |||
| break; | |||
| case 140: | |||
| str = binPns(sk[6]).join("、") + "宝珠强化(每颗强化珠伤害增加"+sk[7]+"%)"; | |||
| break; | |||
| case 141: | |||
| str = "随机生成" + binPns(sk[7]).join("、") + "珠各"+ sk[6] + "个"; | |||
| if (sk[7] != sk[8]) str += "还有未知sk[8]"; | |||
| break; | |||
| case 144: | |||
| str = "对敌方全体造成"+binPns(sk[6]).join("、")+"属性总攻击力×" + sk[7]/100 + "倍的" + pn(sk[9]) + "属性伤害"; | |||
| if (sk[8]>0) str += "还有未知sk[8]"; | |||
| break; | |||
| case 146: | |||
| str = "自身以外的宠物技能CD减少"+ (sk[6]!=sk[7]?(sk[6]+"~"+sk[7]):sk[6])+"回合"; | |||
| break; | |||
| case 152: | |||
| str = "将"+ binPns(sk[6]).join("、") + "宝珠锁定"; | |||
| if (sk[7]!=42) str += "还有未知sk[7]"; | |||
| break; | |||
| case 153: | |||
| str = "敌人全体变为"+ pn(sk[6]) + "属性。(" +(sk[7]?"不":"")+"受防护盾的影响)"; | |||
| break; | |||
| case 154: | |||
| str = binPns(sk[6]).join("、") + "珠变为"+ pn(sk[7]); | |||
| str = binPns(sk[6]).join("、") + "珠变为"+ binPns(sk[7]).join("、"); | |||
| break; | |||
| case 156: //宝石姬技能 | |||
| if (sk[10]==2) | |||
| str = sk[6] + "回合内,根据队伍内觉醒技能"+an(sk[7])+"的数目提升所有属性的攻击力,每个觉醒可以提升"+(sk[11]-100)+"%"; | |||
| else if (sk[10]==3) | |||
| str = sk[6] + "回合内,根据队伍内觉醒技能"+an(sk[7])+"的数目减少收到的伤害,每个觉醒可以减少"+sk[11]+"%"; | |||
| else | |||
| str = "156宝石姬技能,未知buff类型sk[10]"; | |||
| if (sk[8]>0) str += "还有未知sk[8]"; | |||
| if (sk[9]>0) str += "还有未知sk[9]"; | |||
| break; | |||
| case 160: | |||
| str = sk[6] + "回合内,结算时增加"+sk[7]+"COMBO"; | |||
| break; | |||
| case 172: | |||
| str = "解锁所有宝珠"; | |||
| @@ -199,6 +309,12 @@ function skillDetail(si) | |||
| if (sk[9]) arrT.push("伤害吸收"); | |||
| str = sk[6] + "回合内敌人的" + arrT.join("、") + "无效化"; | |||
| break; | |||
| case 184: | |||
| str = sk[6] + "回合内,天降的宝珠不会产生COMBO"; | |||
| break; | |||
| case 188: | |||
| str = "对敌方1体造成" + sk[6] + "点无视防御的固定伤害(×多次)"; | |||
| break; | |||
| case 191: | |||
| str = sk[6] + "回合内可以贯穿伤害无效盾"; | |||
| break; | |||