增加攻击力buff的附加显示

This commit is contained in:
枫谷剑仙 2021-08-06 20:29:12 +08:00
parent 58f9ddffb1
commit 69ee5242e4
3 changed files with 148 additions and 36 deletions

View File

@ -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"));

View File

@ -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=>{

View File

@ -1369,7 +1369,8 @@ icon.inflicts::after
margin: 0.5px !important;
}
.awoken-preview .awoken-icon,
.custom-addition .awoken-icon
.custom-addition .awoken-icon,
.custom-addition .type-icon
{
filter: unset;
transform: scale(0.75);