Browse Source

增加新宝石姬技能的搜索

tags/v21.0
枫谷剑仙 4 years ago
parent
commit
a6f092ca0b
2 changed files with 80 additions and 40 deletions
  1. +77
    -40
      script-json_data.js
  2. +3
    -0
      script-skill-parser.js

+ 77
- 40
script-json_data.js View File

@@ -1005,7 +1005,7 @@ const specialSearchFunctions = (function() {
const searchTypeArray = [
88,92, //类型的
50,90, //属性的,要排除回复力
156,168, //宝石姬
156,168,231, //宝石姬
228, //属性、类型数量
];
const skill = getCardActiveSkill(card, searchTypeArray);
@@ -1040,7 +1040,7 @@ const specialSearchFunctions = (function() {
|| skill.type == 168)
{
outObj.skilltype = 1;
outObj.awoken = sk.slice(1, skill.type == 168 ? 7 : 4).filter(s=>s>0);
outObj.awoken = sk.slice(1, skill.type == 168 ? 7 : 4).filter(Boolean);
outObj.turns = sk[0];
outObj.rate = skill.type == 168 ? sk[7] : sk[5] - 100;
}
@@ -1052,6 +1052,48 @@ const specialSearchFunctions = (function() {
outObj.turns = sk[0];
outObj.rate = sk[3];
}
else if(skill.type == 231 && sk[6] > 0)
{
outObj.skilltype = 1;
outObj.awoken = sk.slice(1, 5).filter(Boolean).filter(flags);
outObj.turns = sk[0];
outObj.rate = sk[6];
}
return outObj;
}
function rcvBuff_Rate(card)
{
const searchTypeArray = [
50,90,
228, 231, //宝石姬
];
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 == 228 && sk[4] > 0) {
outObj.skilltype = 1;
outObj.attrs = flags(sk[1]);
outObj.types = flags(sk[2]);
outObj.turns = sk[0];
outObj.rate = sk[4];
} else if (skill.type == 231 && sk[7] > 0) {
outObj.skilltype = 1;
outObj.awoken = sk.slice(1, 5).filter(Boolean).filter(flags);
outObj.turns = sk[0];
outObj.rate = sk[7];
} else if (skill.type == 50 || skill.type == 90) {
outObj.skilltype = sk.slice(1,sk.length>2?-1:undefined).includes(5) ? 2 : 0;
outObj.turns = sk[0];
outObj.rate = sk.length > 2 ? sk[sk.length-1] : 0;
}
return outObj;
}
function damageSelf_Rate(card)
@@ -1788,57 +1830,52 @@ const specialSearchFunctions = (function() {
{group:true,name:"----- Buff -----",otLangName:{chs:"----- buff 类-----"}, functions: [
{name:"Rate by state count(Jewel Princess)",otLangName:{chs:"以状态数量为倍率类技能(宝石姬)"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [156,168,228];
const searchTypeArray = [156,168,228,231];
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
})
},
{name:"RCV rate change",otLangName:{chs:"回复力 buff(顶回复)"},
function:cards=>{
const searchTypeArray = [50,90,228];
function getRecScale(as)
{
const sk = as.params;
if (as.type == 228)
{
return sk[4];
}else
{
return sk.slice(1,sk.length>2?-1:undefined).includes(5) ? (sk.length > 2 ? sk[sk.length-1] : 0) : null;
}
}
return cards.filter(card=>{
const skills = getCardActiveSkills(card, searchTypeArray);
if (skills.length)
{
return skills.some(as=>getRecScale(as) != null);
}else return false;
const atkbuff = rcvBuff_Rate(card);
return atkbuff.skilltype > 0;
}).sort((a,b)=>{
const a_s = getCardActiveSkills(a, searchTypeArray), b_s = getCardActiveSkills(b, searchTypeArray);
const a_sv = a_s.map(a_s=>getRecScale(a_s)).filter(n=>n!==null).sort().reverse()[0],
b_sv = b_s.map(b_s=>getRecScale(b_s)).filter(n=>n!==null).sort().reverse()[0];
return a_sv - b_sv;
let a_pC = rcvBuff_Rate(a), b_pC = rcvBuff_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 searchTypeArray = [50,90,228];
function getRecScale(as)
const atkbuff = rcvBuff_Rate(card);
const fragment = document.createDocumentFragment();
fragment.appendChild(createOrbsList([5]));
if (atkbuff.skilltype == 0) return fragment;
if (atkbuff.skilltype == 1)
{
const sk = as.params;
if (as.type == 228)
{
return sk[4];
}else
{
return sk.slice(1,sk.length>2?-1:undefined).includes(5) ? (sk.length > 2 ? sk[sk.length-1] : 0) : null;
}
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`));
}
const skills = getCardActiveSkills(card, searchTypeArray);
const skill = skills.find(as=>getRecScale(as) != null);
if (skill.type == 228)
return `回+${getRecScale(skill) / 100}×N`;
else
return `回x${getRecScale(skill) / 100}`;
return fragment;
}
},
{name:"ATK rate change(All)",otLangName:{chs:"全队攻击力 buff(顶攻击)"},


+ 3
- 0
script-skill-parser.js View File

@@ -1405,6 +1405,9 @@ const parsers = {
})(target);
return activeTurns(turns, powerUp({target: targetType}, null, p.mul({ atk: mul })));
},
[231](turns, awoken1, awoken2, awoken3, awoken4, awoken5, atk, rcv) {
return activeTurns(turns, powerUp(null, null, p.scaleStateKindCount([awoken1, awoken2, awoken3, awoken4, awoken5].filter(Boolean), null, null, p.mul({atk: atk, hp:0, rcv: rcv}))));
},
[232](...ids) { return evolvedSkills(false, ids.map(id => this.parser(id))); },
[233](...ids) { return evolvedSkills(true, ids.map(id => this.parser(id))); },
[1000](type, pos, ...ids) {


Loading…
Cancel
Save