diff --git a/languages/en.css b/languages/en.css index 229a434f..364255db 100644 --- a/languages/en.css +++ b/languages/en.css @@ -235,23 +235,36 @@ label[for="merge-skill"]::after{ content: "⛔Remove Assist"; } .control-box .config-display-list summary::before{ - content:"Display Switchs List"; + content:"Displayed Information Switchs List"; } -.control-box .show-mon-id-lbl::after{ - content:"🆔Show card's ID"; +label[for="show-card-id"]::after{ + content:"🆔Card's ID"; } -.control-box .show-mon-skill-cd-lbl::after{ - content:"❄️Show skill's cooldown"; +label[for="show-card-rarity"]::after{ + content:"⭐️Card's Rarity"; } -label[for="show-mon-rarity"]::after{ - content:"⭐️Show Rarity"; +label[for="show-member-skill-cd"]::after{ + content:"❄️Member's Skill CD"; } -.control-box .show-mon-awoken-lbl::after{ - content:"👁️Show card awoken"; +label[for="show-member-ability"]::after{ + content:"⚔️Member's Ability"; } -.control-box .show-awoken-count-lbl::after{ - content:"⚔️Show awoken count and ability"; +label[for="show-member-awoken"]::after{ + content:"👁️Member's Awoken"; } +label[for="show-team-total-info"]::after{ + content:"Team's HP Info"; +} +label[for="show-team-awoken-count"]::after{ + content:"Team's Awoken Count"; +} +label[for="show-team-awoken-effect"]::after{ + content:"Team's Awoken Effect Calculate"; +} +label[for="show-team-attrtype-count"]::after{ + content:"Team's Rarity, Attributes, Types Count"; +} + label[for="change-swap-to-copy"]::after{ content:"\"Copy\" when dragging (or hold down Ctrl)"; } @@ -309,7 +322,7 @@ label[for="default-level"]::after .search-box .attrs-div label[for="fix-main-color"]::after{ content: "The order of the attributes is consistent with the order you selected"; } -.search-box .consider-equivalent-awoken-label::after{ +.search-box label[for="consider-equivalent-awoken"]::after{ content: "Search for Equivalent Awoken"; } .search-box label[for="include-super-awoken"]::after{ diff --git a/languages/ja.css b/languages/ja.css index f0f93323..b0333fb1 100644 --- a/languages/ja.css +++ b/languages/ja.css @@ -228,23 +228,37 @@ label[for="merge-skill"]::after{ content: "⛔アシストを解除"; } .control-box .config-display-list summary::before{ - content:"表示内容の開閉器一覧"; + content:"情報表示内容の開閉器一覧"; } -label[for="show-mon-id"]::after{ - content:"🆔モンスターIDを表示"; + +label[for="show-card-id"]::after{ + content:"🆔カード番号"; +} +label[for="show-card-rarity"]::after{ + content:"⭐️カードの希少性"; +} +label[for="show-member-skill-cd"]::after{ + content:"❄️メンバーズスキルCD"; } -label[for="show-mon-skill-cd"]::after{ - content:"❄️スキル クールを表示"; +label[for="show-member-ability"]::after{ + content:"⚔️メンバーの能力"; } -label[for="show-mon-rarity"]::after{ - content:"⭐️希少性を表示"; +label[for="show-member-awoken"]::after{ + content:"👁️メンバーの覚醒"; } -label[for="show-mon-awoken"]::after{ - content:"👁️カードの覚醒を表示"; +label[for="show-team-total-info"]::after{ + content:"チームのHP情報"; } -label[for="show-awoken-count"]::after{ - content:"⚔️総覚醒と能力値の表示"; +label[for="show-team-awoken-count"]::after{ + content:"チームの覚醒合計"; } +label[for="show-team-awoken-effect"]::after{ + content:"チームの覚醒効果の計算"; +} +label[for="show-team-attrtype-count"]::after{ + content:"チームの希少性、属性、タイプの合計"; +} + label[for="change-swap-to-copy"]::after{ content:"ドラッグ時にコピー (またはCtrlを押したまま)"; } @@ -302,7 +316,7 @@ label[for="default-level"]::after .search-box .attrs-div label[for="fix-main-color"]::after{ content: "属性の順序は、選択した順序と一致"; } -.search-box .consider-equivalent-awoken-label::after{ +.search-box label[for="consider-equivalent-awoken"]::after{ content: "同時に同等の覚醒を検索"; } .search-box label[for="include-super-awoken"]::after{ diff --git a/languages/ko.css b/languages/ko.css index d080d86d..57a490ca 100644 --- a/languages/ko.css +++ b/languages/ko.css @@ -224,25 +224,38 @@ label[for="merge-skill"]::after{ content: "⛔보조를 해제합"; } .control-box .config-display-list summary::before{ - content:"디스플레이 스위치 목록"; + content:"표시된 정보 전환 목록"; } -label[for="show-mon-id"]::after{ - content:"🆔몬스터 ID 표시"; +label[for="show-card-id"]::after{ + content:"🆔카드 ID"; } -label[for="show-mon-skill-cd"]::after{ - content:"❄️스킬의 사용 대기 시간 표시"; +label[for="show-card-rarity"]::after{ + content:"⭐️카드의 희귀도"; } -label[for="show-mon-rarity"]::after{ - content:"⭐️희귀도 표시"; +label[for="show-member-skill-cd"]::after{ + content:"❄️회원의 CD"; } -label[for="show-mon-awoken"]::after{ - content:"👁️카드 각성을 표시합"; +label[for="show-member-ability"]::after{ + content:"⚔️회원의 능력"; } -label[for="show-awoken-count"]::after{ - content:"⚔️각성 통계 및 기능 값 표시"; +label[for="show-member-awoken"]::after{ + content:"👁️회원이 깨어났다"; } +label[for="show-team-total-info"]::after{ + content:"팀의 HP 정보"; +} +label[for="show-team-awoken-count"]::after{ + content:"팀의 각성 카운트"; +} +label[for="show-team-awoken-effect"]::after{ + content:"팀의 각성 효과 계산"; +} +label[for="show-team-attrtype-count"]::after{ + content:"팀의 희귀도, 속성, 유형 수"; +} + label[for="change-swap-to-copy"]::after{ - content:"끌 때 복사 (또는 Ctrl 키를 누른 채)"; + content:"끌 때 복사(또는 Ctrl 키를 누른 채)"; } label[for="default-level"]::after { @@ -298,7 +311,7 @@ label[for="default-level"]::after .search-box .attrs-div label[for="fix-main-color"]::after{ content: "속성 순서는 선택한 순서와 일치합니다"; } -.search-box .consider-equivalent-awoken-label::after{ +.search-box label[for="consider-equivalent-awoken"]::after{ content: "동시에 해당 경계를 각성"; } .search-box label[for="include-super-awoken"]::after{ diff --git a/languages/zh-TW.css b/languages/zh-TW.css index 08a1cded..022c6620 100644 --- a/languages/zh-TW.css +++ b/languages/zh-TW.css @@ -234,22 +234,34 @@ label[for="merge-skill"]::after{ content: "⛔解除輔助"; } .control-box .config-display-list summary::before{ - content:"展示內容開關列表"; + content:"展示信息開關列表"; } -label[for="show-mon-id"]::after{ - content:"🆔顯示怪物ID"; +label[for="show-card-id"]::after{ + content:"🆔卡片ID"; } -label[for="show-mon-skill-cd"]::after{ - content:"❄️顯示技能冷卻"; +label[for="show-card-rarity"]::after{ + content:"⭐️卡片稀有度"; } -label[for="show-mon-rarity"]::after{ - content:"⭐️顯示稀有度"; +label[for="show-member-skill-cd"]::after{ + content:"❄️隊員技能冷卻"; } -label[for="show-mon-awoken"]::after{ - content:"👁️顯示卡片覺醒"; +label[for="show-member-ability"]::after{ + content:"⚔️隊員能力值"; } -label[for="show-awoken-count"]::after{ - content:"⚔️顯示覺醒統計和能力值"; +label[for="show-member-awoken"]::after{ + content:"👁️隊員覺醒"; +} +label[for="show-team-total-info"]::after{ + content:"隊伍生命值等信息統計"; +} +label[for="show-team-awoken-count"]::after{ + content:"隊伍覺醒計數"; +} +label[for="show-team-awoken-effect"]::after{ + content:"隊伍覺醒效果計算"; +} +label[for="show-team-attrtype-count"]::after{ + content:"隊伍稀有度、屬性與類型計數"; } label[for="change-swap-to-copy"]::after{ content:"拖拽時使用“複製”(或按住 Ctrl)"; @@ -308,7 +320,7 @@ label[for="default-level"]::after .search-box .attrs-div label[for="fix-main-color"]::after{ content: "強制屬性順序與選擇順序一致"; } -.search-box .consider-equivalent-awoken-label::after{ +.search-box label[for="consider-equivalent-awoken"]::after{ content: "同時搜索等效覺醒"; } .search-box label[for="include-super-awoken"]::after{ diff --git a/languages/zh.css b/languages/zh.css index 54270f2d..95615969 100644 --- a/languages/zh.css +++ b/languages/zh.css @@ -145,6 +145,9 @@ label[for="merge-skill"]::after{ .edit-box .button-box .button-done.only-assist::after{ content: "只能辅助"; } +.team-awoken-effect::before{ + content: "队伍觉醒效果:"; +} .team-awoken::before{ content: "队伍觉醒总计:"; } @@ -233,7 +236,7 @@ label[for="merge-skill"]::after{ content: "⛔解除辅助"; } .control-box .config-display-list summary::before{ - content:"展示内容开关列表"; + content:"展示信息开关列表"; } label[for="show-card-id"]::after{ content:"🆔卡片ID"; @@ -250,14 +253,14 @@ label[for="show-member-ability"]::after{ label[for="show-member-awoken"]::after{ content:"👁️队员觉醒"; } -label[for="show-3P-team-total-info"]::after{ - content:"队伍信息统计"; +label[for="show-team-total-info"]::after{ + content:"队伍生命值等信息统计"; } label[for="show-team-awoken-count"]::after{ content:"队伍觉醒计数"; } label[for="show-team-awoken-effect"]::after{ - content:"队伍觉醒效果统计"; + content:"队伍觉醒效果计算"; } label[for="show-team-attrtype-count"]::after{ content:"队伍稀有度、属性与类型计数"; @@ -319,7 +322,7 @@ label[for="default-level"]::after .search-box .attrs-div label[for="fix-main-color"]::after{ content: "强制属性顺序与选择顺序一致"; } -.search-box .consider-equivalent-awoken-label::after{ +.search-box label[for="consider-equivalent-awoken"]::after{ content: "同时搜索等效觉醒"; } .search-box label[for="include-super-awoken"]::after{ diff --git a/multi.html b/multi.html index 3b319132..47902acc 100644 --- a/multi.html +++ b/multi.html @@ -37,7 +37,8 @@ const teamsCount = 2; .show-team-name-left :where( .team-member-awoken, .team-assist-awoken, - .team-member-types + .team-member-types, + .team-ability ){ padding-left: var(--head-block-width); } @@ -74,9 +75,10 @@ const teamsCount = 2; + - +
@@ -144,14 +146,24 @@ const teamsCount = 2;
-
- - -
+ +
-
- - -
diff --git a/script-universal_function.js b/script-universal_function.js index 5393b8f3..eb0eca5c 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -1194,7 +1194,7 @@ function countTeamHp(team, leader1id, leader2id, solo, noAwoken = false) { case 217:{ //限定队伍星级,不包括好友队长 let cardsArr = memberArr.slice(0, 5).filter(m => m.id > 0).map(m => m.card); //所有的卡片 const rarityCount = cardsArr.reduce((pre, memberCard)=>{ - return pre + memberCard.rarity; + return pre + (memberCard?.rarity || 1); }, 0); scale = rarityCount <= sk[0] ? sk[1] / 100 : 1; break; diff --git a/script.js b/script.js index c88d99a3..291afacf 100644 --- a/script.js +++ b/script.js @@ -3050,7 +3050,9 @@ function initialize() { teamBadge.classList.remove(className_ChoseBadges); team[2] = parseInt(this.value, 10); const teamTotalInfoDom = teamBigBox.querySelector(".team-total-info"); //队伍能力值合计 - refreshTeamTotalHP(teamTotalInfoDom, team, teamIdx); + if (teamTotalInfoDom) refreshTeamTotalHP(teamTotalInfoDom, team, teamIdx); + const teamAwokenEffectDom = teamBigBox.querySelector(".team-awoken-effect"); //队伍觉醒效果计算 + if (teamAwokenEffectDom) refreshTeamAwokenEfeect(teamAwokenEffectDom, team, teamIdx); createNewUrl(); } else { teamBadge.classList.add(className_ChoseBadges); @@ -4575,15 +4577,19 @@ function initialize() { } else { const teamTotalInfoDom = teamBigBox.querySelector(".team-total-info"); //队伍能力值合计 if (teamTotalInfoDom) refreshTeamTotalHP(teamTotalInfoDom, teamData, editBox.memberIdx[0]); + const formationTotalInfoDom = formationBox.querySelector(".formation-total-info"); //所有队伍能力值合计 if (formationTotalInfoDom) refreshFormationTotalHP(formationTotalInfoDom, formation.teams); + + const teamAwokenEffectDom = teamBigBox.querySelector(".team-awoken-effect"); //队伍觉醒效果计算 + if (teamAwokenEffectDom) refreshTeamAwokenEfeect(teamAwokenEffectDom, teamData, editBox.memberIdx[0]); const teamMemberTypesDom = teamBigBox.querySelector(".team-member-types"); //队员类型 - if (teamMemberTypesDom) refreshmemberTypes(teamMemberTypesDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 + if (teamMemberTypesDom) refreshMemberTypes(teamMemberTypesDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 const teamMemberAwokenDom = teamBigBox.querySelector(".team-member-awoken"); //队员觉醒 const teamAssistAwokenDom = teamBigBox.querySelector(".team-assist-awoken"); //辅助觉醒 - if (teamMemberAwokenDom && teamAssistAwokenDom) refreshmemberAwoken(teamMemberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 + if (teamMemberAwokenDom && teamAssistAwokenDom) refreshMemberAwoken(teamMemberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 const teamAwokenDom = teamBigBox.querySelector(".team-awoken"); //队伍觉醒合计 if (teamAwokenDom) refreshTeamAwokenCount(teamAwokenDom, teamData); @@ -4656,11 +4662,11 @@ function initialize() { if (formationTotalInfoDom) refreshFormationTotalHP(formationTotalInfoDom, formation.teams); const teamMemberTypesDom = teamBigBox.querySelector(".team-member-types"); //队员类型 - if (teamMemberTypesDom) refreshmemberTypes(teamMemberTypesDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 + if (teamMemberTypesDom) refreshMemberTypes(teamMemberTypesDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 const teamMemberAwokenDom = teamBigBox.querySelector(".team-member-awoken"); //队员觉醒 const teamAssistAwokenDom = teamBigBox.querySelector(".team-assist-awoken"); //辅助觉醒 - if (teamMemberAwokenDom && teamAssistAwokenDom) refreshmemberAwoken(teamMemberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 + if (teamMemberAwokenDom && teamAssistAwokenDom) refreshMemberAwoken(teamMemberAwokenDom, teamAssistAwokenDom, teamData, editBox.memberIdx[2]); //刷新本人觉醒 const teamAwokenDom = teamBigBox.querySelector(".team-awoken"); //队伍觉醒合计 if (teamAwokenDom) refreshTeamAwokenCount(teamAwokenDom, teamData); @@ -5451,8 +5457,8 @@ function refreshAll(formationData) { } refreshMemberSkillCD(teamBox, teamData, ti); //技能CD refreshAbility(teamAbilityDom, teamData, ti); //本人能力值 - refreshmemberAwoken(teamMemberAwokenDom, teamAssistAwokenDom, teamData, ti); //本人觉醒 - refreshmemberTypes(teamMemberTypesDom, teamData, ti); //本人类型 + refreshMemberAwoken(teamMemberAwokenDom, teamAssistAwokenDom, teamData, ti); //本人觉醒 + refreshMemberTypes(teamMemberTypesDom, teamData, ti); //本人类型 } const teamTotalInfoDom = teamBigBox.querySelector(".team-total-info"); //队伍能力值合计 @@ -5460,6 +5466,9 @@ function refreshAll(formationData) { const teamAwokenDom = teamBigBox.querySelector(".team-awoken"); //队伍觉醒合计 if (teamAwokenDom) refreshTeamAwokenCount(teamAwokenDom, teamData); + + const teamAwokenEffectDom = teamBigBox.querySelector(".team-awoken-effect"); //队伍觉醒效果计算 + if (teamAwokenEffectDom) refreshTeamAwokenEfeect(teamAwokenEffectDom, teamData, teamNum); }); if (formationTotalInfoDom) refreshFormationTotalHP(formationTotalInfoDom, formation.teams); @@ -5470,6 +5479,295 @@ function refreshAll(formationData) { // txtDetail.onblur(); //这个需要放在显示出来后再改才能生效 } +//刷新队伍觉醒效果计算 +function refreshTeamAwokenEfeect(awokenEffectDom, team, ti) { + let targetIcon; + //防绑 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"52\"]")) { + const teamFlagsMembers = Array.from(targetIcon.parentElement.querySelectorAll(".team-flags li")); + const equivalentAwoken = equivalent_awoken.find(eak => eak.big === 52); + //储存附加 52 即大防绑的队长技能 + const leader1 = team[0][0], leader2 = team[0][5]; + const parseLSkill = skillParser(leader1?.card?.leaderSkillId).concat(skillParser(leader2?.card?.leaderSkillId)); + let lsAwoken = parseLSkill.filter(skill=>skill.kind == SkillKinds.ImpartAwakenings); + + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + let thisAwokenNum = 0; + if (team[2] === 8 && mi === 0) { + thisAwokenNum = 2; + } else { + let effectiveAwokens = memberData.effectiveAwokens(assistData); + if (lsAwoken.length) { //增加队长技赋予的觉醒 + const {attrs, types} = memberData.getAttrsTypesWithWeapon(assistData); + lsAwoken.forEach(pls=>{ + if (attrs.some(a => pls.attrs.includes(a)) || types.some(t => pls.types.includes(t))) { + effectiveAwokens.push(...pls.awakenings); + } + }); + } + thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + } + teamFlagsMembers[mi].setAttribute("data-percent", Math.round(Math.min(thisAwokenNum/2,1)*100)); + } + } + //SX + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"28\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + const thisAwokenNum = awokenCountInTeam(team, 28, solo, teamsCount); + let prob = thisAwokenNum / 5; + if (team[2] == 9) prob += 0.5; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //暗 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"68\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + const equivalentAwoken = equivalent_awoken.find(eak => eak.big === 68); + const thisAwokenNum = awokenCountInTeam(team, equivalentAwoken.small, solo, teamsCount) + + awokenCountInTeam(team, equivalentAwoken.big, solo, teamsCount) * equivalentAwoken.times; + let prob = thisAwokenNum / 5; + if (team[2] == 12) prob += 0.5; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //废 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"69\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + const equivalentAwoken = equivalent_awoken.find(eak => eak.big === 69); + const thisAwokenNum = awokenCountInTeam(team, equivalentAwoken.small, solo, teamsCount) + + awokenCountInTeam(team, equivalentAwoken.big, solo, teamsCount) * equivalentAwoken.times; + let prob = thisAwokenNum / 5; + if (team[2] == 13) prob += 0.5; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //毒 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"70\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + const equivalentAwoken = equivalent_awoken.find(eak => eak.big === 70); + const thisAwokenNum = awokenCountInTeam(team, equivalentAwoken.small, solo, teamsCount) + + awokenCountInTeam(team, equivalentAwoken.big, solo, teamsCount) * equivalentAwoken.times; + let prob = thisAwokenNum / 5; + if (team[2] == 14) prob += 0.5; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //云 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"54\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + const thisAwokenNum = awokenCountInTeam(team, 54, solo, teamsCount); + let prob = thisAwokenNum / 1; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //封条 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"55\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + const thisAwokenNum = awokenCountInTeam(team, 55, solo, teamsCount); + let prob = thisAwokenNum / 1; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //掉废 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"14\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + let prob = team[0].some(member=>member?.latent?.includes(14)) ? 1 : 0; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //掉毒 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"15\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".prob"); + let prob = team[0].some(member=>member.latent.includes(15)) ? 1 : 0; + targetValue.setAttribute(dataAttrName, Math.round(Math.min(prob,1)*100)); + } + //心横解转转 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"40\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".count"); + const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 20); + let count = 0; + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + if (memberData.latent.includes(40)) { + let effectiveAwokens = memberData.effectiveAwokens(assistData); + count += effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + } else { + continue; + } + } + targetValue.setAttribute(dataAttrName, count); + } + //心追解云封 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"46\"]")) { + const targetValue = targetIcon.parentElement.querySelector(".count"); + let count = 0; + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + if (memberData.latent.includes(46)) { + let effectiveAwokens = memberData.effectiveAwokens(assistData); + count += effectiveAwokens.filter(ak=>ak==45).length; + } else { + continue; + } + } + targetValue.setAttribute(dataAttrName, count); + } + //普通L + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"60\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 60); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + let effectiveAwokens = memberData?.effectiveAwokens(assistData); + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon(assistData) || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } + //L解禁武器 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"48\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 60); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + //const assistData = team[1][mi]; //L解禁武器,武器上的L无意义 + if (memberData.latent.includes(48)) { + let effectiveAwokens = memberData.effectiveAwokens(); + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon() || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } else { + continue; + } + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } + //普通十字 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"78\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 78); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + let effectiveAwokens = memberData.effectiveAwokens(assistData); + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon(assistData) || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } + //U解禁消 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"41\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 27); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + //const assistData = team[1][mi]; //L解禁武器,武器上的L无意义 + if (memberData.latent.includes(41)) { + let effectiveAwokens = memberData.effectiveAwokens(); + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon() || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } else { + continue; + } + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } + //普通C珠 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"62\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + //目前没有大觉醒 + //const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 78); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + let effectiveAwokens = memberData.effectiveAwokens(assistData); + //let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==62).length; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon(assistData) || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } + //C珠破吸 + if (targetIcon = awokenEffectDom.querySelector(".latent-icon[data-latent-icon=\"39\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + //目前没有大觉醒 + //const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 27); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + //const assistData = team[1][mi]; //L解禁武器,武器上的L无意义 + if (memberData.latent.includes(39)) { + let effectiveAwokens = memberData.effectiveAwokens(); + //let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==62).length; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon() || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } else { + continue; + } + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } + //普通T字 + if (targetIcon = awokenEffectDom.querySelector(".awoken-icon[data-awoken-icon=\"126\"]")) { + const orbs = Array.from(targetIcon.parentElement.querySelectorAll(".orb-list .orb")); + //目前没有大觉醒 + //const equivalentAwoken = equivalent_awoken.find(eak => eak.small === 78); + let count = new Array(orbs.length).fill(0); + for (let mi=0; mi < team[0].length; mi++) { + const memberData = team[0][mi]; + const assistData = team[1][mi]; + let effectiveAwokens = memberData.effectiveAwokens(assistData); + //let thisAwokenNum = effectiveAwokens.filter(ak=>ak==equivalentAwoken.small).length + effectiveAwokens.filter(ak=>ak==equivalentAwoken.big).length * equivalentAwoken.times; + let thisAwokenNum = effectiveAwokens.filter(ak=>ak==126).length; + if (thisAwokenNum == 0) continue; + const {attrs=[]} = memberData.getAttrsTypesWithWeapon(assistData) || {}; + attrs.distinct().forEach(attr=>{ + count[attr] += thisAwokenNum; + }); + } + orbs.forEach((orb,oi)=>{ + orb.setAttribute(dataAttrName,count[oi]); + }); + } +} //刷新队伍觉醒统计 function refreshTeamAwokenCount(awokenDom, team) { let fragment = document.createDocumentFragment(); //创建节点用的临时空间 @@ -5574,7 +5872,7 @@ function refreshAbility(abilityDom, team, idx) { }); } //刷新队员 -function refreshmemberTypes(memberTypesDom, team, idx) { +function refreshMemberTypes(memberTypesDom, team, idx) { if (!memberTypesDom) return; //如果没有dom,直接跳过 const member = team[0][idx]; const assist = team[1][idx]; @@ -5594,7 +5892,7 @@ function refreshmemberTypes(memberTypesDom, team, idx) { } } //刷新队员觉醒 -function refreshmemberAwoken(memberAwokenDom, assistAwokenDom, team, idx) { +function refreshMemberAwoken(memberAwokenDom, assistAwokenDom, team, idx) { if (!memberAwokenDom) return; //如果没有dom,直接跳过 const memberData = team[0][idx]; @@ -5603,19 +5901,10 @@ function refreshmemberAwoken(memberAwokenDom, assistAwokenDom, team, idx) { const memberCard = Cards[memberData.id] || Cards[0]; const assistCard = Cards[assistData.id] || Cards[0]; //队员觉醒 - let memberAwokens = memberCard?.awakenings?.slice(0,memberData.awoken) || []; - //单人和三人为队员增加超觉醒 - if ((solo || teamsCount === 3) && - memberData.sawoken > 0 && //怪物超觉醒编号大于0 - //memberCard?.superAwakenings?.length > 0 && //卡片有超觉醒 - memberData.level >= 100 && //怪物大于100级 - memberData.plus.every(p=>p>=99) //怪物297了 - ) { - memberAwokens.push(memberData.sawoken); - } + let memberAwokens = memberData.effectiveAwokens() || []; //memberAwokens.sort(); //武器觉醒 - let assistAwokens = assistCard?.awakenings?.slice(0,assistData?.awoken); + let assistAwokens = assistData.effectiveAwokens() || []; if (!assistAwokens?.includes(49)) assistAwokens = []; //清空非武器的觉醒 //assistAwokens.sort(); /*if (assistAwokens.includes(49)) diff --git a/solo.html b/solo.html index 949d3f27..2134d54d 100644 --- a/solo.html +++ b/solo.html @@ -57,9 +57,10 @@ const teamsCount = 1; + - +
@@ -506,7 +507,48 @@ const teamsCount = 1;
-
+
+
    +
  • +
      +
    • +
    +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
+
    +
  • +
    +
  • +
  • +
    +
  • +
  • +
    +
  • +
  • +
    +
  • +
  • +
    +
  • +
  • +
    +
  • +
  • +
    +
  • +
+
    @@ -1043,12 +1085,12 @@ const teamsCount = 1;
  • -
  • -
  • -
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • +
  • diff --git a/style-monsterimages.css b/style-monsterimages.css index b41e49f8..16503a67 100644 --- a/style-monsterimages.css +++ b/style-monsterimages.css @@ -1347,7 +1347,7 @@ ){ /*所以横向占两格*/ grid-column: span 2; } -.edit-box .m-latent-allowable-ul .latent-icon:where( +.latent-icon.show-enabling-awokwn:where( [data-latent-icon='39'], [data-latent-icon='40'], [data-latent-icon='41'], @@ -1361,22 +1361,22 @@ margin-left: 6px; opacity: 0.5; } -.m-latent-allowable-ul .latent-icon[data-latent-icon='39']::after{ /*C珠破吸*/ +.latent-icon.show-enabling-awokwn[data-latent-icon='39']::after{ /*C珠破吸*/ background-position-y: calc(-32px * 62); } -.m-latent-allowable-ul .latent-icon[data-latent-icon='40']::after{ /*心横解转转*/ +.latent-icon.show-enabling-awokwn[data-latent-icon='40']::after{ /*心横解转转*/ background-position-y: calc(-32px * 20); } -.m-latent-allowable-ul .latent-icon[data-latent-icon='41']::after{ /*U解禁消*/ +.latent-icon.show-enabling-awokwn[data-latent-icon='41']::after{ /*U解禁消*/ background-position-y: calc(-32px * 27); } -.m-latent-allowable-ul .latent-icon[data-latent-icon='46']::after{ /*心追解云封*/ +.latent-icon.show-enabling-awokwn[data-latent-icon='46']::after{ /*心追解云封*/ background-position-y: calc(-32px * 45); } -.m-latent-allowable-ul .latent-icon[data-latent-icon='47']::after{ /*心L大SB*/ +.latent-icon.show-enabling-awokwn[data-latent-icon='47']::after{ /*心L大SB*/ background-position-y: calc(-32px * 59); } -.m-latent-allowable-ul .latent-icon[data-latent-icon='48']::after{ /*心L大SB*/ +.latent-icon.show-enabling-awokwn[data-latent-icon='48']::after{ /*心L大SB*/ background-position-y: calc(-32px * 60); } diff --git a/style.css b/style.css index 94b8cd57..a62a305c 100644 --- a/style.css +++ b/style.css @@ -775,15 +775,16 @@ body:not(.show-team-awoken-effect) .team-awoken-effect /*队伍觉醒效果统 { opacity: 0.5; } -body:not(.show-3P-team-total-info):not(.solo) .formation-box .team-total-info /*3P下隐藏队伍血量统计*/ + /*3P下隐藏队伍血量统计*/ +body:not(.show-team-total-info) .formation-box .team-total-info { display: none; } -body:not(.show-3P-team-total-info):not(.solo) .formation-box .team-bigbox +body:not(.show-team-total-info):not(.solo) .formation-box .team-bigbox { margin-bottom: 5px; } -body:not(.show-3P-team-total-info):not(.solo) .formation-box .team-badge +body:not(.show-team-total-info):not(.solo) .formation-box .team-badge { position: absolute; z-index: 10; @@ -1246,7 +1247,7 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after .abilitys>div::before { font-size: 0.75em; - width: 2.5em; + width: 3em; display: inline-block; } /*.abilitys .hp::before{ @@ -2767,6 +2768,81 @@ body:not(.solo) .awoken-icon[data-awoken-icon="64"]::after margin-top:5px; /*content: "觉醒总计:";*/ } +.team-awoken-effect { + font-family: var(--game-font-family); + font-size: 16px; + line-height: 32px; +} +.team-awoken-effect::before{ + font-family: var(--font-family); +} +.team-awoken-effect>ul { + display: grid; + grid-template-columns: repeat(6, 110px); +} +.team-awoken-effect .team-flags { + display: inline-block; + vertical-align: middle; +} +.team-awoken-effect .team-flags .team-member-icon { + width: 15px; + height: 15px; +} +.team-awoken-effect .team-flags .team-member-icon[data-percent="0"] { + background-color: red; +} +.team-awoken-effect .team-flags .team-member-icon[data-percent="50"] { + background-color: pink; +} +.team-awoken-effect .team-flags .team-member-icon[data-percent="100"] { + background-color: lightgreen; +} +.team-awoken-effect .prob[data-value="100"] { + color: #28c031; + text-shadow: black 1px 1px 1px; +} +.team-awoken-effect .prob::before{ + content: attr(data-value); +} +.team-awoken-effect .prob::after{ + content: "%"; +} +.team-awoken-effect .count::before{ + content: "×"; +} +.team-awoken-effect .count::after{ + content: attr(data-value); +} +.team-awoken-effect .latent-icon { + display: inline-flex; + width: 32px; + vertical-align: middle; +} +.team-awoken-effect .latent-icon.show-enabling-awokwn { + width: 64px; +} +.team-awoken-effect .orb-list { + display: inline-block; + vertical-align: middle; +} +.team-awoken-effect .orb-list .orb { + font-size: 16px; +} + +.team-awoken-effect .orb-list .orb:not([data-value]), +.team-awoken-effect .orb-list .orb[data-value="0"]{ + filter: grayscale(100%); +} +.team-awoken-effect .orb-list .orb[data-value]:not([data-value="0"])::before { + content: "x"attr(data-value); + color: white; + -webkit-text-stroke: 1px black; + text-stroke: 1px black; + text-shadow: black 1px 1px 1px; + position: relative; + text-align: center; +} + .detail-box{ margin-top:5px; } @@ -3310,11 +3386,6 @@ table .orb-icon -webkit-text-stroke: 3px black; /*非W3C标准,但都支持*/ } -.control-box, -.control-box button -{ - font-family: var(--icon-font-family); -} #default-level { width: 50px; } @@ -3417,11 +3488,6 @@ body.external-link-support #external-support{ color: white; text-align: center; font-size: 2em; - font-family: var(--icon-font-family); -} -#player-data-frame .brown-button::before -{ - font-family: var(--icon-font-family); } #player-data-frame .upload-data { diff --git a/triple.html b/triple.html index dc0b832c..37aa94d4 100644 --- a/triple.html +++ b/triple.html @@ -68,7 +68,7 @@ const teamsCount = 3; - + @@ -519,6 +519,48 @@ const teamsCount = 3;
    +
    +
      +
    • +
        +
      • +
      +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    • +
    +
      +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    • +
      +
    • +
    +
      @@ -959,108 +1001,51 @@ const teamsCount = 3;
      +
      +
        +
      • +
          +
        • +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
        +
      • +
        +
      • +
      • +
        +
      • +
      • +
        +
      • +
      • +
        +
      • +
      • +
        +
      • +
      • +
        +
      • +
      • +
        +
      • +
      +
      -
        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      +
      • @@ -1498,108 +1483,51 @@ const teamsCount = 3;
      • +
        +
          +
        • +
            +
          • +
          +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        • +
        +
          +
        • +
          +
        • +
        • +
          +
        • +
        • +
          +
        • +
        • +
          +
        • +
        • +
          +
        • +
        • +
          +
        • +
        • +
          +
        • +
        +
        -
          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        +
          @@ -2133,12 +2061,12 @@ const teamsCount = 3;
        • -
        • -
        • -
        • -
        • -
        • -
        • +
        • +
        • +
        • +
        • +
        • +