From 93cef6ad482dd60b477c75b69027da9ca14aff60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Tue, 16 Mar 2021 12:57:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=8C=87=E5=AE=9A=E6=8A=80?= =?UTF-8?q?=E8=83=BD=E6=94=B9=E4=B8=BA=E6=95=B0=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script-universal_function.js | 60 +++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/script-universal_function.js b/script-universal_function.js index 55784d3c..4f904b17 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -658,56 +658,57 @@ function countTeamHp(memberArr, leader1id, leader2id, solo, noAwoken = false) { } //返回卡片的队长技能 -function getCardLeaderSkill(card, skillTypes) { - return getActuallySkill(Skills[card.leaderSkillId], skillTypes, false); +function getCardLeaderSkills(card, skillTypes) { + return getActuallySkills(Skills[card.leaderSkillId], skillTypes, false); } //查找到真正起作用的那一个技能 -function getActuallySkill(skill, skillTypes, searchRandom = true) { - if (skillTypes.includes(skill.type)) { - return skill; - } else if (skill.type == 116 || (searchRandom && skill.type == 118) || skill.type == 138) { - const subSkills = skill.params.map(id => Skills[id]); - for (let i = 0; i < subSkills.length; i++) { //因为可能有多层调用,特别是随机118再调用组合116的,所以需要递归 - let foundSubSkill = getActuallySkill(subSkills[i], skillTypes, searchRandom); - if (foundSubSkill) { - return foundSubSkill; - } - } - return null; - } else { - return null; +function getActuallySkills(skill, skillTypes, searchRandom = true) { + if (skillTypes.includes(skill.type)) + { + return [skill]; + } + else if (skill.type == 116 || (searchRandom && skill.type == 118) || skill.type == 138) + { + //因为可能有多层调用,特别是随机118再调用组合116的,所以需要递归 + let subSkills = skill.params.flatMap(id => getActuallySkills(Skills[id], skillTypes, searchRandom)); + subSkills = subSkills.filter(s=>s.length); + return subSkills; + } + else + { + return []; } } //计算队伍是否为76 function tIf_Effect_76board(leader1id, leader2id) { const searchTypeArray = [162, 186]; - const ls1 = getCardLeaderSkill(Cards[leader1id], searchTypeArray); - const ls2 = getCardLeaderSkill(Cards[leader2id], searchTypeArray); + const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0]; + const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0]; return Boolean(ls1 || ls2); } //计算队伍是否为无天降 function tIf_Effect_noSkyfall(leader1id, leader2id) { const searchTypeArray = [163, 177]; - const ls1 = getCardLeaderSkill(Cards[leader1id], searchTypeArray); - const ls2 = getCardLeaderSkill(Cards[leader2id], searchTypeArray); - + const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0]; + const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0]; +[0] return Boolean(ls1 || ls2); } //计算队伍是否为毒无效 function tIf_Effect_poisonNoEffect(leader1id, leader2id) { const searchTypeArray = [197]; - const ls1 = getCardLeaderSkill(Cards[leader1id], searchTypeArray); - const ls2 = getCardLeaderSkill(Cards[leader2id], searchTypeArray); + const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0]; + const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0]; return Boolean(ls1 || ls2); } //计算队伍的+C function tIf_Effect_addCombo(leader1id, leader2id) { const searchTypeArray = [192, 194, 206, 209, 210]; - const ls1 = getCardLeaderSkill(Cards[leader1id], searchTypeArray); - const ls2 = getCardLeaderSkill(Cards[leader2id], searchTypeArray); + const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0]; + const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0]; function getSkillAddCombo(skill) { if (!skill) return 0; @@ -731,8 +732,8 @@ function tIf_Effect_addCombo(leader1id, leader2id) { //计算队伍的追打 function tIf_Effect_inflicts(leader1id, leader2id) { const searchTypeArray = [199, 200, 201]; - const ls1 = getCardLeaderSkill(Cards[leader1id], searchTypeArray); - const ls2 = getCardLeaderSkill(Cards[leader2id], searchTypeArray); + const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0]; + const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0]; function getSkillFixedDamage(skill) { if (!skill) return 0; @@ -752,8 +753,8 @@ function tIf_Effect_inflicts(leader1id, leader2id) { //计算队伍操作时间 function countMoveTime(team, leader1id, leader2id, teamIdx) { const searchTypeArray = [178, 15, 185]; - const ls1 = getCardLeaderSkill(Cards[leader1id], searchTypeArray); - const ls2 = getCardLeaderSkill(Cards[leader2id], searchTypeArray); + const ls1 = getCardLeaderSkills(Cards[leader1id], searchTypeArray)[0]; + const ls2 = getCardLeaderSkills(Cards[leader2id], searchTypeArray)[0]; const time1 = leaderSkillMoveTime(ls1); const time2 = leaderSkillMoveTime(ls2); @@ -845,6 +846,7 @@ function countMoveTime(team, leader1id, leader2id, teamIdx) { function getReduceScale(ls, allAttr = false, noHPneed = false, noProbability = false) { const sk = ls.params; let scale = 0; + const searchTypeArray = [16, 17, 36, 38, 43, 129, 163, 130, 131, 151, 169, 198, 170, 182, 193, 171, 183]; switch (ls.type) { case 16: //无条件盾 scale = sk[0] / 100;