添加新技能解析

This commit is contained in:
枫谷剑仙 2025-03-20 20:12:13 +08:00
parent 29a745e4bb
commit dc01d105cb
10 changed files with 268 additions and 154 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 211 KiB

View File

@ -78,6 +78,7 @@ const _localTranslating = {
unbind_awakenings: tp`${'icon'}觉醒无效`,
unbind_matches: tp`${'icon'}无法消除宝珠`,
bind_skill: tp`${'icon'}自身无法使用技能`,
bind_card: tp`卡片自身${'icon'}变为封锁状态`,
defense_break: tp`${'icon'}敌方的防御力减少${'value'}`,
poison: tp`${'icon'}使${'target'}中毒,每回合损失${'belong_to'} ${'value'}${'stats'}`,
time_extend: tp`${'icon'}宝珠移动时间 ${'value'}`,
@ -136,7 +137,7 @@ const _localTranslating = {
obstruct_opponent_before_me: tp`排名比自身高的对手`,
obstruct_opponent_designated_position: tp`${'positions'}排位的对手`,
slot_power_up: tp`${'targets'}${'icon'}${'value'}`,
increase_damage_cap: tp`${'targets'}${'icon'}伤害上限变为${'cap'}`,
increase_damage_cap: tp`${'targets'}${'icon'}伤害上限变为${'cap'}`,
board_jamming_state: tp`${'position'}生成${'icon'}${'state'}${'size'}${'count'}${'comment'}`,
board_size_change: tp`板面大小改变为${'icon'}${'size'}`,
remove_assist: tp`${'icon'}移除自身的辅助宠物(直到地下城结束)`,
@ -221,6 +222,8 @@ const _localTranslating = {
sub_members: tp`队员`,
leader_self: tp`左边队长`,
leader_helper: tp`右边队长`,
left_neighbor: tp`左邻角色`,
right_neighbor: tp`右邻角色`,
collab_id: tp`合作ID为${'id'}的角色`,
gacha_id: tp`抽蛋ID为${'id'}的角色`,
enemy: tp`敌人`,

View File

@ -77,7 +77,7 @@ const _localTranslating = {
unbind_normal: tp`${'icon'}封鎖`,
unbind_awakenings: tp`${'icon'}覺醒無效`,
unbind_matches: tp`${'icon'}無法消除寶珠`,
bind_skill: tp`${'icon'}自身無法使用技能`,
bind_skill: tp`卡片自身${'icon'}變為封鎖狀態`,
defense_break: tp`${'icon'}敵方的防禦力減少${'value'}`,
poison: tp`${'icon'}使${'target'}中毒,每回合損失${'belong_to'} ${'value'}${'stats'}`,
time_extend: tp`${'icon'}寶珠移動時間 ${'value'}`,
@ -136,7 +136,7 @@ const _localTranslating = {
obstruct_opponent_before_me: tp`排名比自身高的對手`,
obstruct_opponent_designated_position: tp`${'positions'}排位的對手`,
slot_power_up: tp`${'targets'}${'icon'}${'value'}`,
increase_damage_cap: tp`${'targets'}${'icon'}傷害上限變為${'cap'}`,
increase_damage_cap: tp`${'targets'}${'icon'}傷害上限變為${'cap'}`,
board_jamming_state: tp`${'position'}生成${'icon'}${'state'}${'size'}${'count'}${'comment'}`,
board_size_change: tp`板面大小改變為${'icon'}${'size'}`,
remove_assist: tp`${'icon'}移除自身的輔助寵物(直到地下城結束)`,
@ -221,6 +221,8 @@ const _localTranslating = {
sub_members: tp`隊員`,
leader_self: tp`左邊隊長`,
leader_helper: tp`右邊隊長`,
left_neighbor: tp`左鄰角色`,
right_neighbor: tp`右鄰角色`,
collab_id: tp`合作ID為${'id'}的角色`,
gacha_id: tp`抽蛋ID為${'id'}的角色`,
enemy: tp`敵人`,

View File

@ -93,6 +93,7 @@ let localTranslating = {
unbind_awakenings: tp`${'icon'}Awoken bind`,
unbind_matches: tp`${'icon'}Unmatchable orb`,
bind_skill: tp`${'icon'}Unable to use skills`,
bind_card: tp`${'icon'}Bind the card itself`,
defense_break: tp`${'icon'}Reduce enemy defense by ${'value'}`,
poison: tp`${'icon'}Poisons ${'target'}, reduce ${'stats'} with ${'belong_to'} ${'value'} per turns`,
time_extend: tp`${'icon'}Orb move time ${'value'}`,
@ -150,7 +151,7 @@ let localTranslating = {
obstruct_opponent_after_me: tp`The opponent ranked lower than me`,
obstruct_opponent_before_me: tp`The opponent ranked higher than me`,
obstruct_opponent_designated_position: tp`No.${'positions'} ranked opponents`,
slot_power_up: tp`The slot of ${'targets'} ${'icon'}${'value'}`,
slot_power_up: tp`The slot of [${'targets'}]'s ${'icon'}${'value'}`,
increase_damage_cap: tp`The ${'icon'}damage cap of ${'targets'} is change to ${'cap'}`,
board_jamming_state: tp`Creates ${'count'} ${'icon'}${'state'} ${'size'} at ${'position'}${'comment'}`,
board_size_change: tp`Board size changed to ${'icon'}${'size'}`,
@ -236,6 +237,8 @@ let localTranslating = {
sub_members: tp`sub-members`,
leader_self: tp`left leader`,
leader_helper: tp`right leader`,
left_neighbor: tp`left neighbor`,
right_neighbor: tp`left neighbor`,
collab_id: tp`Cards with Collaboration ID of ${'id'} `,
gacha_id: tp`Cards with Egg Machine ID of ${'id'} `,
enemy: tp`Enemy`,
@ -1222,22 +1225,21 @@ const specialSearchFunctions = (function() {
}
function memberATK_Addition(card)
{
const searchTypeArray = [230];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const searchTypeArray = [230, 269];
const skills = getCardActiveSkills(card, searchTypeArray);
return skills.map(skill=>{
const sk = skill.params;
const fragment = document.createDocumentFragment();
fragment.appendChild(createTeamFlags(sk[1]));
let str = '';
str +=`${sk[2] / 100}倍×${sk[0]}T`;
fragment.appendChild(document.createTextNode(str));
fragment.appendChild(createTeamFlags(sk[1], skill.type == 269 ? 2 : 1));
fragment.append(`${sk[2] / 100}倍×${sk[0]}T`);
return fragment;
}).nodeJoin(document.createElement("br"));
}
function getIncreaseDamageCap(skill)
{
let cap = 0;
switch (skill.type) {
case 241:case 258:case 263:
case 241:case 258:case 263:case 266:
cap = skill.params[1];
break;
case 246:
@ -1251,16 +1253,16 @@ const specialSearchFunctions = (function() {
}
function memberCap_Addition(card)
{
const searchTypeArray = [241, 246, 247, 258, 263];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const searchTypeArray = [241, 246, 247, 258, 263, 266];
const skills = getCardActiveSkills(card, searchTypeArray);
return skills.map(skill=>{
const sk = skill.params;
let cap = getIncreaseDamageCap(skill);
const fragment = document.createDocumentFragment();
switch (skill.type) {
case 258: {
fragment.appendChild(createTeamFlags(sk[2]));
case 258:
case 266: {
fragment.appendChild(createTeamFlags(sk[2], skill.type == 266 ? 2 : 1));
break;
}
case 241:
@ -1287,7 +1289,8 @@ const specialSearchFunctions = (function() {
switch (skill.type) {
case 258:
case 241:
case 263: {
case 263:
case 266: {
fragment.append(`${(cap*1e8).bigNumberToString()}×${sk[0]}T`);
break;
}
@ -1301,6 +1304,7 @@ const specialSearchFunctions = (function() {
}
}
return fragment;
}).nodeJoin(document.createElement("br"));
}
function dixedDamage_Addition(card)
{
@ -1848,7 +1852,7 @@ const specialSearchFunctions = (function() {
{group:true,name:"Increase Damage Cap",otLangName:{chs:"增加伤害上限",cht:"增加傷害上限"}, functions: [
{name:"Increase Damage Cap - Any",otLangName:{chs:"增加伤害上限 - 任意",cht:"增加傷害上限 - 任意"},
function:cards=>{
const searchTypeArray = [241, 246, 247, 258, 263];
const searchTypeArray = [241, 246, 247, 258, 263, 266];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
@ -1862,11 +1866,20 @@ const specialSearchFunctions = (function() {
},
{name:"Increase Damage Cap - Self",otLangName:{chs:"增加伤害上限 - 自身",cht:"增加傷害上限 - 自身"},
function:cards=>{
const searchTypeArray = [241, 246, 247, 258];
const searchTypeArray = [241, 246, 247, 258, 266];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
if (skill?.type === 258) return Boolean(skill.params[2] & 0b1);
else return skill;
switch (skill?.type) {
case 258: {
return Boolean(skill.params[2] & 0b1);
}
case 266: {
return Boolean(skill.params[2] & 0b100);
}
default: {
return skill;
}
}
}).sort((a,b)=>{
const a_ss = getCardActiveSkill(a, searchTypeArray), b_ss = getCardActiveSkill(b, searchTypeArray);
let a_pC = getIncreaseDamageCap(a_ss), b_pC = getIncreaseDamageCap(b_ss);
@ -1880,7 +1893,7 @@ const specialSearchFunctions = (function() {
const searchTypeArray = [258];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill && Boolean(skill.params[2] & (0b10 | 0b100));
return skill && Boolean(skill.params[2] & 0b110);
}).sort((a,b)=>{
const a_ss = getCardActiveSkill(a, searchTypeArray), b_ss = getCardActiveSkill(b, searchTypeArray);
let a_pC = getIncreaseDamageCap(a_ss), b_pC = getIncreaseDamageCap(b_ss);
@ -1903,6 +1916,20 @@ const specialSearchFunctions = (function() {
},
addition:memberCap_Addition
},
{name:"Increase Damage Cap - Neighbor",otLangName:{chs:"增加伤害上限 - 相邻",cht:"增加傷害上限 - 相鄰"},
function:cards=>{
const searchTypeArray = [266];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill && Boolean(skill.params[2] & 0b11);
}).sort((a,b)=>{
const a_ss = getCardActiveSkill(a, searchTypeArray), b_ss = getCardActiveSkill(b, searchTypeArray);
let a_pC = getIncreaseDamageCap(a_ss), b_pC = getIncreaseDamageCap(b_ss);
return a_pC - b_pC;
});
},
addition:memberCap_Addition
},
{name:"Increase Damage Cap - Attr./Types",otLangName:{chs:"增加伤害上限 - 属性/类型",cht:"增加傷害上限 - 屬性/類型"},
function:cards=>{
const searchTypeArray = [263];
@ -1918,10 +1945,10 @@ const specialSearchFunctions = (function() {
addition:memberCap_Addition
},
]},
{group:true,name:"Member ATK rate change",otLangName:{chs:"队员攻击力",cht:"隊員攻擊力"}, functions: [
{name:"Member ATK rate change - Any",otLangName:{chs:"队员攻击力 - 任意",cht:"隊員攻擊力 - 任意"},
{group:true,name:"Card slot ATK rate change",otLangName:{chs:"卡片位置攻击力",cht:"卡片位置攻擊力"}, functions: [
{name:"Card slot ATK rate change - Any",otLangName:{chs:"卡片位置攻击力 - 任意",cht:"卡片位置攻擊力 - 任意"},
function:cards=>{
const searchTypeArray = [230];
const searchTypeArray = [230, 269];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
@ -1929,27 +1956,37 @@ const specialSearchFunctions = (function() {
},
addition:memberATK_Addition
},
{name:"Member ATK rate change - Self",otLangName:{chs:"队员攻击力 - 自身",cht:"隊員攻擊力 - 自身"},
{name:"Card slot ATK rate change - Self",otLangName:{chs:"卡片位置攻击力 - 自身",cht:"卡片位置攻擊力 - 自身"},
function:cards=>{
const searchTypeArray = [230];
const searchTypeArray = [230, 269];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill && Boolean(skill.params[1] & 0b1);
switch (skill?.type) {
case 230: {
return Boolean(skill.params[1] & 0b1);
}
case 269: {
return Boolean(skill.params[1] & 0b100);
}
default: {
return skill;
}
}
}).sort((a,b)=>sortByParams(a, b, searchTypeArray, 2));
},
addition:memberATK_Addition
},
{name:"Member ATK rate change - Leader",otLangName:{chs:"队员攻击力 - 队长",cht:"隊員攻擊力 - 隊長"},
{name:"Card slot ATK rate change - Leader",otLangName:{chs:"卡片位置攻击力 - 队长",cht:"卡片位置攻擊力 - 隊長"},
function:cards=>{
const searchTypeArray = [230];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill && Boolean(skill.params[1] & (0b10 | 0b100));
return skill && Boolean(skill.params[1] & 0b110);
}).sort((a,b)=>sortByParams(a, b, searchTypeArray, 2));
},
addition:memberATK_Addition
},
{name:"Member ATK rate change - Sub",otLangName:{chs:"队员攻击力 - 队员",cht:"隊員攻擊力 - 隊員"},
{name:"Card slot ATK rate change - Sub",otLangName:{chs:"卡片位置攻击力 - 队员",cht:"卡片位置攻擊力 - 隊員"},
function:cards=>{
const searchTypeArray = [230];
return cards.filter(card=>{
@ -1959,8 +1996,18 @@ const specialSearchFunctions = (function() {
},
addition:memberATK_Addition
},
{name:"Card slot ATK rate change - Neighbor",otLangName:{chs:"卡片位置攻击力 - 相邻",cht:"卡片位置攻擊力 - 相鄰"},
function:cards=>{
const searchTypeArray = [269];
return cards.filter(card=>{
const skill = getCardActiveSkill(card, searchTypeArray);
return skill && Boolean(skill.params[1] & 0b11);
}).sort((a,b)=>sortByParams(a, b, searchTypeArray, 2));
},
addition:memberATK_Addition
},
]},
{name:"Change self's Attr",otLangName:{chs:"转换自身属性",cht:"轉換自身屬性"},
{name:"Change card self's Attr",otLangName:{chs:"转换自身属性",cht:"轉換自身屬性"},
function:cards=>{
const searchTypeArray = [142];
return cards.filter(card=>{
@ -1982,27 +2029,6 @@ const specialSearchFunctions = (function() {
return fragment;
}
},
{name:"Bind self active skill",otLangName:{chs:"自封技能 debuff",cht:"自封技能 debuff"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [214];
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
}),
addition:card=>{
const searchTypeArray = [214];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
return document.createTextNode(`自封技${sk[0]}T`);
}
},
{name:"Remove assist",otLangName:{chs:"移除武器",cht:"移除武器"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [250];
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
})
},
{name:"↓Reduce skills charge",otLangName:{chs:"【坐】增加CD",cht:"【坐】增加CD"},
function:cards=>{
const searchTypeArray = [218];
@ -2022,6 +2048,41 @@ const specialSearchFunctions = (function() {
return fragment;
}
},
{name:"Bind team active skill",otLangName:{chs:"自封队伍技能 debuff",cht:"自封队伍技能 debuff"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [214];
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
}),
addition:card=>{
const searchTypeArray = [214];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
return document.createTextNode(`自封技${sk[0]}T`);
}
},
{name:"Bind card self",otLangName:{chs:"角色自身被绑定",cht:"角色自身被綁定"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [267];
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
}),
addition:card=>{
const searchTypeArray = [267];
const skill = getCardActiveSkill(card, searchTypeArray);
if (!skill) return;
const sk = skill.params;
return document.createTextNode(`自绑定${sk[0]}T`);
}
},
{name:"Remove card self's assist",otLangName:{chs:"移除卡片武器",cht:"移除卡片武器"},
function:cards=>cards.filter(card=>{
const searchTypeArray = [250];
const skill = getCardActiveSkill(card, searchTypeArray);
return skill;
})
},
]},
{group:true,name:"Player's HP change",otLangName:{chs:"玩家HP操纵类",cht:"玩家HP操縱類"}, functions: [
{name:"Heal after turn",otLangName:{chs:"回合结束回血 buff",cht:"回合結束回血 buff"},

View File

@ -386,6 +386,11 @@ class Board
}
}
const SkillTarget = {
type1: ["self","leader-self","leader-helper","sub-members"],
type2: ["right-neighbor","left-neighbor","self"],
};
const SkillValue = {
isLess: function (value) {
if (value.kind === SkillValueKind.Percent) return value.value < 1;
@ -449,6 +454,7 @@ const SkillKinds = {
BoardChange: "board-change",
Unbind: "unbind",
BindSkill: "bind-skill",
BindCard: "bind-card",
RandomSkills: "random-skills",
EvolvedSkills: "evolved-skills",
SkillProviso: "skill-proviso",
@ -1008,6 +1014,7 @@ function unbind(normal, awakenings, matches) {
return { kind: SkillKinds.Unbind, normal: normal, awakenings: awakenings , matches: matches};
}
function bindSkill() { return { kind: SkillKinds.BindSkill}; }
function bindCard() { return { kind: SkillKinds.BindCard}; }
function boardChange(attrs) {
return { kind: SkillKinds.BoardChange, attrs: attrs };
}
@ -1592,8 +1599,9 @@ const skillObjectParsers = {
[229](attrs, types, hp, atk, rcv) {
return powerUp(null, null, p.scaleStateKind(null, Bin.unflags(attrs), Bin.unflags(types), p.mul({hp: hp || 0, atk: atk || 0, rcv: rcv || 0})));
},
//按位置增伤主动技1
[230](turns, target, mul) {
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
const targetTypes = SkillTarget.type1;
const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
slotPowerUp(p.mul({ atk: mul }), typeArr)
@ -1641,7 +1649,7 @@ const skillObjectParsers = {
);
},
[241](turns, cap) { //改变伤害上限主动技
// const targetTypes = ["self","leader-self","leader-helper","sub-members"];
// const targetTypes = SkillTarget.type1;
// const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
increaseDamageCapacity(cap * 1e8, ["self"])
@ -1726,9 +1734,9 @@ const skillObjectParsers = {
autoPath(5),
];
},
//按位置改变伤害上限主动技1
[258](turns, cap, target) { //改变伤害上限主动技
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
const targetTypes = SkillTarget.type1;
const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
increaseDamageCapacity(cap * 1e8, typeArr)
@ -1745,9 +1753,26 @@ const skillObjectParsers = {
},
[264](mul) { return rateMultiply(v.percent(mul), 'plus_point'); },
[265](mul) { return rateMultiply(v.percent(mul), 'part_break'); },
//按位置改变伤害上限主动技2
[266](turns, cap, target) {
const targetTypes = SkillTarget.type2;
const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
increaseDamageCapacity(cap * 1e8, typeArr)
);
},
//卡片自绑定
[267](turns) {return activeTurns(turns, bindCard()); },
//限制技能使用次数
[268](turns) { return timesLimit(turns); },
//按位置增伤主动技2
[269](turns, target, mul) {
const targetTypes = SkillTarget.type2;
const typeArr = Bin.unflags(target).map(n => targetTypes[n]);
return activeTurns(turns,
slotPowerUp(p.mul({ atk: mul }), typeArr)
);
},
//一回合内使用几次技能才有倍率的队长技。
[270](times, atk, rcv) { { return powerUp(Bin.unflags(31), null, p.mul({ atk: atk || 100, rcv: rcv || 100 }), c.useSkill(times)); } },
@ -2255,6 +2280,13 @@ function renderSkill(skill, option = {})
frg.ap(tsp.skill.bind_skill(dict));
break;
}
case SkillKinds.BindCard: {
let dict = {
icon: createIcon(skill.kind)
};
frg.ap(tsp.skill.bind_card(dict));
break;
}
case SkillKinds.BoardChange: { //洗版
const attrs = skill.attrs;
let dict = {
@ -2569,7 +2601,7 @@ function renderSkill(skill, option = {})
targetDict.target = document.createDocumentFragment();
//增加队员伤害的技能的目标,删选出来,其他的目标则不显示
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
const targetTypes = SkillTarget.type1.concat(SkillTarget.type2);
let atkUpTarget = targets.filter(n=>targetTypes.includes(n));
if (atkUpTarget.length) {
targetDict.target.appendChild(createTeamFlags(atkUpTarget));
@ -2745,11 +2777,11 @@ function renderSkill(skill, option = {})
targetDict.target = document.createDocumentFragment();
//增加队员伤害的技能的目标,删选出来,其他的目标则不显示
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
let atkUpTarget = targets.filter(n=>targetTypes.includes(n));
if (atkUpTarget.length) {
targetDict.target.appendChild(createTeamFlags(atkUpTarget));
}
// const targetTypes = SkillTarget.type1;
// let atkUpTarget = targets.filter(n=>targetTypes.includes(n));
// if (atkUpTarget.length) {
targetDict.target.appendChild(createTeamFlags(targets));
// }
targetDict.target.appendChild(targets.map(target=>
tsp?.target[target.replaceAll("-","_")]?.())

View File

@ -1189,7 +1189,7 @@ function cardN(id) {
}
//产生队伍目标类型
function createTeamFlags(target)
function createTeamFlags(target, type)
{
const ul = document.createElement("ul");
ul.className = "team-flags";
@ -1197,7 +1197,7 @@ function createTeamFlags(target)
const li = ul.appendChild(document.createElement("li"));
li.className = "team-member-icon";
}
const targetTypes = ["self","leader-self","leader-helper","sub-members"];
const targetTypes = type == 2 ? SkillTarget.type2 : SkillTarget.type1;
let _target = [];
if (Number.isInteger(target)) {

View File

@ -565,15 +565,15 @@ class LeaderSkillType_MatchingStyle {
this.#flags = arg;
}
}
get multipleAttr(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 0)}
get rowMatch(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 1)}
get combo(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 2)}
get sameColor(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 3)}
get LShape(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 4)}
get crossMatch(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 5)}
get heartCrossMatch(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 6)}
get remainOrbs(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 7)}
get enhanced5Orbs(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 8)}
get multipleAttr(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 0)}
get rowMatch(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 1)}
get combo(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 2)}
get sameColor(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 3)}
get LShape(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 4)}
get crossMatch(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 5)}
get heartCrossMatch(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 6)}
get remainOrbs(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 7)}
get enhanced5Orbs(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 8)}
}
class LeaderSkillType_Restriction_Bind {
#card = null;
@ -585,16 +585,16 @@ class LeaderSkillType_Restriction_Bind {
this.#flags = arg;
}
}
get attrEnhance(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 9)}
get typeEnhance(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 10)}
get board7x6(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 11)}
get noSkyfall(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 12)}
get HpRange(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 13)}
get useSkill(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 14)}
get moveTimeDecrease_Fixed(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 15)}
get minMatchLen(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 16)}
get specialTeam(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 17)}
get effectWhenRecover(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 18)}
get attrEnhance(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 9)}
get typeEnhance(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 10)}
get board7x6(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 11)}
get noSkyfall(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 12)}
get HpRange(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 13)}
get useSkill(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 14)}
get moveTimeDecrease_Fixed(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 15)}
get minMatchLen(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 16)}
get specialTeam(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 17)}
get effectWhenRecover(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 18)}
}
class LeaderSkillType_ExtraEffects {
#card = null;
@ -606,21 +606,21 @@ class LeaderSkillType_ExtraEffects {
this.#flags = arg;
}
}
get addCombo(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 21)}
get fixedFollowAttack(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 22)}
get scaleFollowAttack(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 23)}
get reduce49down(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 24)}
get reduce50(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 25)}
get reduce51up(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 26)}
get moveTimeIncrease(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 20)}
get rateMultiplyExp_Coin(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 27)}
get rateMultiplyDrop(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 28)}
get voidPoison(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 29)}
get counterAttack(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 30)}
get autoHeal(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 31)}
get unbindAwokenBind(){return Boolean(this.#card?.searchFlags?.[0] ?? this.#flags[0] & 1 << 19)}
get resolve(){return Boolean(this.#card?.searchFlags?.[1] ?? this.#flags[1] & 1 << 0)}
get predictionFalling(){return Boolean(this.#card?.searchFlags?.[1] ?? this.#flags[1] & 1 << 1)}
get addCombo(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 21)}
get fixedFollowAttack(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 22)}
get scaleFollowAttack(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 23)}
get reduce49down(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 24)}
get reduce50(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 25)}
get reduce51up(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 26)}
get moveTimeIncrease(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 20)}
get rateMultiplyExp_Coin(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 27)}
get rateMultiplyDrop(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 28)}
get voidPoison(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 29)}
get counterAttack(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 30)}
get autoHeal(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 31)}
get unbindAwokenBind(){return Boolean((this.#card?.searchFlags?.[0] ?? this.#flags[0]) & 1 << 19)}
get resolve(){return Boolean((this.#card?.searchFlags?.[1] ?? this.#flags[1]) & 1 << 0)}
get predictionFalling(){return Boolean((this.#card?.searchFlags?.[1] ?? this.#flags[1]) & 1 << 1)}
}
class Team extends Array {
badge = 0;

View File

@ -44207,19 +44207,19 @@ const cachesMap = new Map([
],
[
"script-json_data.js",
"8538e25e7f6f4e8e08b14282db6ea654"
"37e68450ecb7140ba93515f30fca6dc1"
],
[
"script-skill-parser.js",
"78597abdac6c0bfccc19919c5312ece1"
"228086552199fc6bb7eea0fe64f5feea"
],
[
"script-universal_function.js",
"b86853117fb96211b6b1da2996cdb81e"
"0bdc4d583774cd51cf302f7709cc3fb7"
],
[
"script.js",
"2e05c86aea3bb9b54e22dd07b9723c4b"
"270447ead17c33194fb0525cab9744f7"
],
[
"solo.html",
@ -44235,7 +44235,7 @@ const cachesMap = new Map([
],
[
"style.css",
"1b21675a9c3b07e2913c03d42b7fa65e"
"f634fa900250a1e745b551a9302e8856"
],
[
"temp.js",
@ -44279,7 +44279,7 @@ const cachesMap = new Map([
],
[
"languages/zh-hans.js",
"7b62458760e344526b07c586302333aa"
"92cc36747ac4440bdc45a1eba6ab4be7"
],
[
"languages/zh-hant.css",
@ -44287,7 +44287,7 @@ const cachesMap = new Map([
],
[
"languages/zh-hant.js",
"846cbeec8fc7202ae889f93cdcb089cf"
"04f96537a27ece89005f42da68735431"
],
[
"images/attrs.png",
@ -44439,7 +44439,7 @@ const cachesMap = new Map([
],
[
"images/icon-skills.png",
"f3fa5e8803e7b9f0adbb9b89e45a5b17"
"df43e89a902a603d16cc6cc4f77d25d2"
],
[
"images/icon-switch-leader.png",

View File

@ -3840,6 +3840,10 @@ table .orb-icon
.team-flags.self .team-member-icon:nth-of-type(4) {
background-color: lightblue !important;
}
.team-flags.right-neighbor .team-member-icon:nth-of-type(5),
.team-flags.left-neighbor .team-member-icon:nth-of-type(3) {
background-color: violet !important;
}
/*.open-evolutionary-tree::before
{
@ -4725,7 +4729,8 @@ body.external-link-support #external-support{
.icon-skill[data-icon-type="ctw"]::after,
.icon-skill[data-icon-type="add-combo"]::after,
.icon-skill[data-icon-type="fixed-time"]::after,
.icon-skill[data-icon-type="increase-damage-cap"]::after
.icon-skill[data-icon-type="increase-damage-cap"]::after,
.icon-skill[data-icon-type="bind-card"]::after
{
content: "";
position: absolute;
@ -5011,6 +5016,17 @@ body.external-link-support #external-support{
{
background-position-x: -36px;
}
.icon-skill[data-icon-type="bind-card"]
{
background-position-y: calc(-36px * 39);
}
.icon-skill[data-icon-type="bind-card"]::after
{
transform: scale(0.75);
background-position-y: calc(-36px * 47);
}
.icon-skill[data-icon-type="orb-thorn"]
{
background-position-y:calc(-36px * 37);