增加攻击力buff的附加显示
This commit is contained in:
parent
58f9ddffb1
commit
69ee5242e4
|
@ -104,7 +104,6 @@ function parseSkillDescription(skill) {
|
|||
const id = skill.id;
|
||||
let fragment = document.createDocumentFragment(); //创建节点用的临时空间
|
||||
if (id == 0) return fragment;
|
||||
const type = skill.type;
|
||||
const sk = skill.params;
|
||||
|
||||
//珠子名和属性名数组
|
||||
|
@ -266,7 +265,7 @@ function parseSkillDescription(skill) {
|
|||
fullColor = null,
|
||||
atSameTime = null,
|
||||
hasDiffOrbs = null;
|
||||
switch (type) {
|
||||
switch (skill.type) {
|
||||
case 0:
|
||||
str = `对敌方全体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害`;
|
||||
break;
|
||||
|
@ -404,8 +403,8 @@ function parseSkillDescription(skill) {
|
|||
case 49:
|
||||
str = `${sk.slice(0,sk.length-1).map(t=>attrN(t)).join("、")}属性宠物的回复力×${sk[sk.length-1]/100}倍`;
|
||||
break;
|
||||
case 50:
|
||||
str = `${sk[0]}回合内,${(sk[1]==5?"回复力":`${attrN(sk[1])}属性的攻击力`)}${sk[2]>0?`×${sk[2]/100}倍`:"变为0"}`;
|
||||
/*case 50:
|
||||
str = `${sk[0]}回合内,${(sk[1]==5?"回复力":`${attrN(sk[1])}属性的攻击力`)}${sk[2]>0?`×${sk[2]/100}倍`:"变为0"}`;*/
|
||||
break;
|
||||
case 51:
|
||||
str = `${sk[0]}回合内,所有攻击转为全体攻击`;
|
||||
|
@ -546,20 +545,38 @@ function parseSkillDescription(skill) {
|
|||
str = `HP ${(sk[3]?(`减少${100-sk[3]}%`):"变为1")},对敌方全体造成${sk[1].bigNumberToString()}点${attrN(sk[0])}属性伤害`;
|
||||
if (sk[2]) str += `未知 参数2 ${sk[2]}`;
|
||||
break;
|
||||
case 88:
|
||||
/*case 88:
|
||||
str = `${sk[0]}回合内,${typeN(sk[1])}类型的攻击力×${sk[2]/100}倍`;
|
||||
break;
|
||||
break;*/
|
||||
case 50:
|
||||
case 90:
|
||||
strArr = sk.slice(1,-1);
|
||||
str = `${sk[0]}回合内,${strArr.filter(sk=>sk<5).map(attrN).join("、")}属性的攻击力${strArr.includes(5)?'、回复力':''}×${sk[sk.length-1]/100}倍`;
|
||||
{
|
||||
let attrs = sk.slice(1, skill.type == 50 ? 2 : 3);
|
||||
let turns = sk[0];
|
||||
let rate = sk[skill.type == 50 ? 2 : 3] /100;
|
||||
str = `${turns}回合内,`;
|
||||
if (attrs.includes(5) && attrs.length == 1)
|
||||
{
|
||||
str += "回复力";
|
||||
}else
|
||||
{
|
||||
str += `${getAttrTypeString(attrs)}的攻击力${attrs.includes(5) ? "、回复力" : ""}`;
|
||||
}
|
||||
str += `${rate>0?`×${rate}倍`:"变为0"}`;
|
||||
break;
|
||||
}
|
||||
case 91:
|
||||
str = `${sk.slice(0,-1).map(attrN).join("、")}属性宝珠强化(每颗强化珠伤害/回复增加${sk[sk.length-1]}%)`;
|
||||
break;
|
||||
case 88:
|
||||
case 92:
|
||||
strArr = sk.slice(1,-1);
|
||||
str = `${sk[0]}回合内,${strArr.map(typeN).join("、")}类型的攻击力×${sk[sk.length-1]/100}倍`;
|
||||
{
|
||||
let types = sk.slice(1, skill.type == 88 ? 2 : 3);
|
||||
let turns = sk[0];
|
||||
let rate = sk[skill.type == 50 ? 2 : 3] /100;
|
||||
str = `${turns}回合内,${getAttrTypeString(null,types)}的攻击力${rate>0?`×${rate}倍`:"变为0"}`;
|
||||
break;
|
||||
}
|
||||
case 93:
|
||||
str = `将自己换成队长,再次使用此技能则换为原来的队长。(进入地下城时为队长的话无效)`;
|
||||
if (sk[0]) str += `未知 参数0 ${sk[0]}`;
|
||||
|
@ -780,19 +797,19 @@ function parseSkillDescription(skill) {
|
|||
str = "";
|
||||
if (sk[0] || sk[1]) str += `${getAttrTypeString(flags(sk[0]),flags(sk[1]))}宠物`;
|
||||
if (sk[2] || sk[3] || sk[4]) str += `的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]})}`;
|
||||
if (sk[5]) str += `${str.length>0?",":""}受到的${getAttrTypeString(flags(sk[5]))}属性伤害减少${sk[6]}%`;
|
||||
if (sk[5]) str += `${str.length>0?",":""}受到的${getAttrTypeString(flags(sk[5]))}伤害减少${sk[6]}%`;
|
||||
break;
|
||||
case 130:
|
||||
str = `HP ${sk[0]}%以下时`;
|
||||
if (sk[1] || sk[2]) str += `${getAttrTypeString(flags(sk[1]),flags(sk[2]))}宠物`;
|
||||
if (sk[3] || sk[4]) str += `的${getFixedHpAtkRcvString({atk:sk[3],rcv:sk[4]})}`;
|
||||
if (sk[5]) str += `,受到的${getAttrTypeString(flags(sk[5]))}属性伤害减少${sk[6]}%`;
|
||||
if (sk[5]) str += `,受到的${getAttrTypeString(flags(sk[5]))}伤害减少${sk[6]}%`;
|
||||
break;
|
||||
case 131:
|
||||
str = `HP ${sk[0]==100?"全满":`${sk[0]}%以上`}时`;
|
||||
if (sk[1] || sk[2]) str += `${getAttrTypeString(flags(sk[1]),flags(sk[2]))}宠物`;
|
||||
if (sk[3] || sk[4]) str += `的${getFixedHpAtkRcvString({atk:sk[3],rcv:sk[4]})}`;
|
||||
if (sk[5]) str += `,受到的${getAttrTypeString(flags(sk[5]))}属性伤害减少${sk[6]}%`;
|
||||
if (sk[5]) str += `,受到的${getAttrTypeString(flags(sk[5]))}伤害减少${sk[6]}%`;
|
||||
break;
|
||||
case 132:
|
||||
str = `${sk[0]}回合内,宝珠移动时间`;
|
||||
|
@ -883,7 +900,8 @@ function parseSkillDescription(skill) {
|
|||
str = `协力时${getAttrTypeString(flags(sk[0]),flags(sk[1]))}宠物的${getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]})}`;
|
||||
break;
|
||||
case 156: //宝石姬技能
|
||||
awokenArr = sk.slice(1,4).filter(s=>s>0);
|
||||
{
|
||||
let awokenArr = sk.slice(1,4).filter(s=>s>0);
|
||||
fragment.appendChild(document.createTextNode(`${sk[0]?`${sk[0]}回合内,`:""}根据队伍内觉醒技能`));
|
||||
awokenArr.forEach((aid,idx,arr)=>{
|
||||
const icon = fragment.appendChild(document.createElement("icon"));
|
||||
|
@ -903,6 +921,7 @@ function parseSkillDescription(skill) {
|
|||
fragment.appendChild(document.createTextNode(`宝石姬技能,未知buff类型 参数[4]:${sk[4]}`));
|
||||
return fragment;
|
||||
break;
|
||||
}
|
||||
case 157:
|
||||
fullColor = [sk[0],sk[2],sk[4]].filter(s=>s!=null);
|
||||
strArr = [sk[1],sk[3],sk[5]].filter(s=>s>0);
|
||||
|
@ -1500,11 +1519,11 @@ function parseSkillDescription(skill) {
|
|||
str = `队伍中每存在1个${getAttrTypeString(flags(sk[0]), flags(sk[1]))}时,${getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]}, false)}`;
|
||||
break;
|
||||
default:
|
||||
str = `未知的技能类型${type}(No.${id})`;
|
||||
str = `未知的技能类型${skill.type}(No.${id})`;
|
||||
//开发部分
|
||||
//const copySkill = JSON.parse(JSON.stringify(skill));
|
||||
//copySkill.params = copySkill.params.map(p=>[p,getBooleanFromBinary(p).join("")]);
|
||||
console.log(`未知的技能类型${type}(No.${id})`,findFullSkill(skill));
|
||||
console.log(`未知的技能类型${skill.type}(No.${id})`,findFullSkill(skill));
|
||||
break;
|
||||
}
|
||||
const span = fragment.appendChild(document.createElement("span"));
|
||||
|
|
|
@ -519,6 +519,60 @@ const specialSearchFunctions = (function() {
|
|||
});
|
||||
return outObj;
|
||||
}
|
||||
function atkBuff_Rate(card)
|
||||
{
|
||||
const searchTypeArray = [
|
||||
88,92, //类型的
|
||||
50,90, //属性的,要排除回复力
|
||||
156,168, //宝石姬
|
||||
228, //属性、类型数量
|
||||
];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
|
||||
const outObj = {
|
||||
skilltype: 0, //0为没有,1为宝石姬类,2为指定类型、属性
|
||||
types: [],
|
||||
attrs: [],
|
||||
awoken: [],
|
||||
rate: 0,
|
||||
turns: 0,
|
||||
};
|
||||
if (!skill) return outObj;
|
||||
const sk = skill.params;
|
||||
if (skill.type == 88 || skill.type == 92)
|
||||
{
|
||||
outObj.skilltype = 2;
|
||||
outObj.types = sk.slice(1, skill.type == 88 ? 2 : 3);
|
||||
outObj.turns = sk[0];
|
||||
outObj.rate = sk[skill.type == 88 ? 2 : 3];
|
||||
}
|
||||
else if(skill.type == 50 || skill.type == 90)
|
||||
{
|
||||
outObj.attrs = sk.slice(1, skill.type == 50 ? 2 : 3);
|
||||
if (outObj.attrs.includes(5)) //去除回复力
|
||||
return outObj;
|
||||
outObj.skilltype = 2;
|
||||
outObj.turns = sk[0];
|
||||
outObj.rate = sk[skill.type == 50 ? 2 : 3];
|
||||
}
|
||||
else if(skill.type == 156 && sk[4] == 2 //必须要是加攻击力
|
||||
|| skill.type == 168)
|
||||
{
|
||||
outObj.skilltype = 1;
|
||||
outObj.awoken = sk.slice(1, skill.type == 168 ? 7 : 4).filter(s=>s>0);
|
||||
outObj.turns = sk[0];
|
||||
outObj.rate = skill.type == 168 ? sk[7] : sk[5] - 100;
|
||||
}
|
||||
else if(skill.type == 228 && sk[3] > 0)
|
||||
{
|
||||
outObj.skilltype = 1;
|
||||
outObj.attrs = flags(sk[1]);
|
||||
outObj.types = flags(sk[2]);
|
||||
outObj.turns = sk[0];
|
||||
outObj.rate = sk[3];
|
||||
}
|
||||
return outObj;
|
||||
}
|
||||
function damageSelf_Rate(card)
|
||||
{
|
||||
const searchTypeArray = [84,85,86,87,195];
|
||||
|
@ -581,6 +635,20 @@ const specialSearchFunctions = (function() {
|
|||
});
|
||||
return ul;
|
||||
}
|
||||
//产生类型列表
|
||||
function createTypesList(types)
|
||||
{
|
||||
if (types == undefined) types = [0];
|
||||
else if (!Array.isArray(types)) types = [types];
|
||||
const ul = document.createElement("ul");
|
||||
ul.className = "types-ul";
|
||||
types.forEach(type => {
|
||||
const li = ul.appendChild(document.createElement("li"));
|
||||
li.className = `type-icon`;
|
||||
li.setAttribute("data-type-icon", type);
|
||||
});
|
||||
return ul;
|
||||
}
|
||||
|
||||
const functions = [
|
||||
{name:"No Filter",otLangName:{chs:"不做筛选"},
|
||||
|
@ -1851,11 +1919,11 @@ const specialSearchFunctions = (function() {
|
|||
},
|
||||
]},
|
||||
{group:true,name:"----- Buff -----",otLangName:{chs:"----- buff 类-----"}, functions: [
|
||||
{name:"Rate by awoken count(Jewel Princess)",otLangName:{chs:"以觉醒数量为倍率类技能(宝石姬)"},
|
||||
{name:"Rate by state count(Jewel Princess)",otLangName:{chs:"以状态数量为倍率类技能(宝石姬)"},
|
||||
function:cards=>cards.filter(card=>{
|
||||
const searchTypeArray = [156,168,228];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
return skill;
|
||||
const searchTypeArray = [156,168,228];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
return skill;
|
||||
})
|
||||
},
|
||||
{name:"RCV rate change",otLangName:{chs:"回复力 buff(顶回复)"},
|
||||
|
@ -1906,21 +1974,45 @@ const specialSearchFunctions = (function() {
|
|||
}
|
||||
},
|
||||
{name:"ATK rate change",otLangName:{chs:"攻击力 buff(顶攻击)"},
|
||||
function:cards=>cards.filter(card=>{
|
||||
const searchTypeArray = [
|
||||
88,92, //类型的
|
||||
50,90, //属性的,要排除回复力
|
||||
156,168, //宝石姬
|
||||
228, //属性、类型数量
|
||||
];
|
||||
const skill = getCardActiveSkill(card, searchTypeArray);
|
||||
if (!skill) return false;
|
||||
return (skill.type==88 || skill.type==92) || //类型的
|
||||
(skill.type==50 || skill.type==90) && skill.params.slice(1,skill.params.length>2?-1:undefined).some(sk=>sk!=5) || //属性的,要排除回复力
|
||||
skill.type==156 && skill.params[4] == 2 || skill.type==168 || //宝石姬的
|
||||
skill.type==228 && skill.params[3] > 0 //属性、类型数量
|
||||
;
|
||||
})
|
||||
function:cards=>{
|
||||
return cards.filter(card=>{
|
||||
const atkbuff = atkBuff_Rate(card);
|
||||
return atkbuff.skilltype > 0;
|
||||
}).sort((a,b)=>{
|
||||
let a_pC = atkBuff_Rate(a), b_pC = atkBuff_Rate(b);
|
||||
let sortNum = a_pC.skilltype - b_pC.skilltype;
|
||||
if (sortNum == 0)
|
||||
sortNum = a_pC.rate - b_pC.rate;
|
||||
if (sortNum == 0)
|
||||
sortNum = a_pC.turns - b_pC.turns;
|
||||
return sortNum;
|
||||
});
|
||||
},
|
||||
addition:card=>{
|
||||
const atkbuff = atkBuff_Rate(card);
|
||||
const fragment = document.createDocumentFragment();
|
||||
if (atkbuff.skilltype == 0) return fragment;
|
||||
if (atkbuff.skilltype == 1)
|
||||
{
|
||||
fragment.appendChild(document.createTextNode(`+${atkbuff.rate}%/`));
|
||||
if (atkbuff.awoken.length)
|
||||
fragment.appendChild(creatAwokenList(atkbuff.awoken));
|
||||
if (atkbuff.attrs.length)
|
||||
fragment.appendChild(createOrbsList(atkbuff.attrs));
|
||||
if (atkbuff.types.length)
|
||||
fragment.appendChild(createTypesList(atkbuff.types));
|
||||
fragment.appendChild(document.createTextNode(`×${atkbuff.turns}T`));
|
||||
}else if (atkbuff.skilltype == 2)
|
||||
{
|
||||
if (atkbuff.attrs.length)
|
||||
fragment.appendChild(createOrbsList(atkbuff.attrs));
|
||||
if (atkbuff.types.length)
|
||||
fragment.appendChild(createTypesList(atkbuff.types));
|
||||
fragment.appendChild(document.createTextNode(`×${atkbuff.rate / 100}`));
|
||||
fragment.appendChild(document.createTextNode(`×${atkbuff.turns}T`));
|
||||
}
|
||||
return fragment;
|
||||
}
|
||||
},
|
||||
{name:"Move time change",otLangName:{chs:"操作时间 buff(顶手指)"},
|
||||
function:cards=>{
|
||||
|
|
Loading…
Reference in New Issue