feature:%XX伤害

This commit is contained in:
UCPr 2025-05-02 18:01:04 +08:00
parent 83ca22c3b8
commit 9b7e609f6a
35 changed files with 1849 additions and 114 deletions

View file

@ -255,30 +255,6 @@
.card .basic .info .char_info .addition .role_ranks.r6 span:nth-child(6) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks span:nth-child(7) {
background-image: url("./images/ranks/7.png");
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(1) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(2) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(3) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(4) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(5) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(6) {
opacity: 1 !important;
}
.card .basic .info .char_info .addition .role_ranks.r7 span:nth-child(7) {
opacity: 1 !important;
}
.card .basic .info .property_info {
background-color: rgb(47, 47, 47);
border-left: 0.1em solid rgb(0, 0, 0);
@ -854,7 +830,7 @@
padding-top: 1.2em;
}
.card .damagelist {
margin: 0 2em;
margin: 0 1.2em;
margin-top: 1em;
text-align: center;
display: grid;
@ -866,12 +842,10 @@
}
.card .damagelist .dmg-tr {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr;
grid-template-columns: 0.25fr 1.6fr 1fr 1fr;
border-bottom: 0.1em solid rgba(255, 255, 255, 0.2);
}
.card .damagelist .dmg-tr:first-child {
border-top: 0.2em solid rgba(255, 255, 255, 0.2);
border-bottom: 0.2em solid rgba(255, 255, 255, 0.2);
font-size: 1.1em;
background: rgba(0, 0, 0, 0.2);
text-shadow: 0 0 0.2em rgba(0, 0, 0, 0.6);
@ -881,13 +855,28 @@
text-align: center !important;
background: none !important;
}
.card .damagelist .dmg-tr:nth-child(even) {
background-color: rgba(255, 255, 255, 0.12);
}
.card .damagelist .dmg-tr:last-child {
border-bottom: none;
}
.card .damagelist .info-tr {
font-size: 0.8em !important;
display: grid !important;
grid-template-columns: 1fr !important;
padding: 0.3em !important;
color: #bbb !important;
}
.card .damagelist .info-tr span {
color: #fff !important;
}
.card .damagelist .dmg-td {
padding: 0.5em 0.5em;
font-size: 0.9em;
border-right: 0.1em solid rgba(255, 255, 255, 0.2);
}
.card .damagelist .dmg-td:first-child {
text-align: left;
.card .damagelist .dmg-td:nth-child(2) {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}

View file

@ -243,17 +243,23 @@
</div>
<div class="damagelist">
<div class="dmg-tr titlebar no-zzz-font">
<div class="dmg-td">类型</div>
<div class="td dmg-td">%</div>
<div class="dmg-td">技能类型</div>
<div class="dmg-td">暴击伤害</div>
<div class="dmg-td">期望伤害</div>
</div>
{{each damages damage}}
{{each damages damage,index}}
<div class="dmg-tr">
<div class="dmg-td">{{index+1}}</div>
<div class="dmg-td no-zzz-font">{{damage.skill.name}}</div>
<div class="dmg-td">{{damage.result.critDMG.toFixed(0)}}</div>
<div class="dmg-td">{{damage.result.expectDMG.toFixed(0)}}</div>
</div>
{{/each}}
<div class="tr dmg-tr info-tr no-zzz-font">
<div>伤害计算默认取有弱点、角色等级、1级基础防御力为50的敌方数据且不考虑失衡易伤区</div>
<div>可通过<span>%{{charData.name_mi18n}}伤害+序号</span>查看指定技能伤害详情 如<span>%{{charData.name_mi18n}}伤害1</span></div>
</div>
</div>
{{/if}}
</div>

View file

@ -160,7 +160,7 @@
opacity: 0.4;
}
@for $i from 1 through 7 {
@for $i from 1 through 6 {
span:nth-child(#{$i}) {
background-image: url('./images/ranks/#{$i}.png');
}
@ -843,7 +843,7 @@
}
.damagelist {
margin: 0 2em;
margin: 0 1.2em;
margin-top: 1em;
text-align: center;
display: grid;
@ -855,12 +855,10 @@
.dmg-tr {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr;
grid-template-columns: 0.25fr 1.6fr 1fr 1fr;
border-bottom: 0.1em solid rgba(255, 255, 255, 0.2);
&:first-child {
border-top: 0.2em solid rgba(255, 255, 255, 0.2);
border-bottom: 0.2em solid rgba(255, 255, 255, 0.2);
font-size: 1.1em;
background: rgba(0, 0, 0, 0.2);
text-shadow: 0 0 0.2em rgba(0, 0, 0, 0.6);
@ -870,14 +868,32 @@
background: none !important;
}
}
&:nth-child(even) {
background-color: rgba(255, 255, 255, 0.12);
}
&:last-child {
border-bottom: none;
}
}
.info-tr {
font-size: 0.8em !important;
display: grid !important;
grid-template-columns: 1fr !important;
padding: 0.3em !important;
color: #bbb !important;
span {
color: #fff !important;
}
}
.dmg-td {
padding: 0.5em 0.5em;
font-size: 0.9em;
border-right: 0.1em solid rgba(255, 255, 255, 0.2);
&:first-child {
text-align: left;
&:nth-child(2) {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}

557
resources/panel/damage.css Normal file
View file

@ -0,0 +1,557 @@
@charset "UTF-8";
.damage {
padding-top: 0.8em;
overflow: hidden;
position: relative;
/* 伤害统计 */
/* 乘区数据 */
/* buff统计 */
/* 差异计算 */
}
.damage .uid {
font-size: 0.6em;
text-align: center;
position: absolute;
border-image-source: url("./images/CurseBG08.png");
border-image-slice: 30 60 30 60 fill;
border-image-width: 0.5em 1em 0.5em 1em;
border-image-outset: 0em 0em 0em 0em;
border-image-repeat: stretch stretch;
padding: 0.5em 1.2em;
font-size: 1em;
top: 0.5em;
left: 0.5em;
color: rgb(255, 255, 255);
stroke: 0.05em rgba(0, 0, 0, 0.6);
-webkit-text-stroke: 0.05em rgba(0, 0, 0, 0.6);
z-index: 1;
}
.damage .star {
width: 5.5em;
height: 1.5em;
}
.damage .star.star0 {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url("./images/star/0.png");
}
.damage .star.star1 {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url("./images/star/1.png");
}
.damage .star.star2 {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url("./images/star/2.png");
}
.damage .star.star3 {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url("./images/star/3.png");
}
.damage .star.star4 {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url("./images/star/4.png");
}
.damage .star.star5 {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url("./images/star/5.png");
}
.damage .basic {
display: flex;
align-items: stretch;
overflow: hidden;
}
.damage .basic .char {
width: 55%;
position: relative;
flex-grow: 1;
}
.damage .basic .char .avatar {
height: 100%;
padding-top: 1em;
overflow: hidden;
}
.damage .basic .char .avatar img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: top center;
position: absolute;
}
.damage .basic .char .skills {
position: absolute;
width: 120%;
height: 3.5em;
background: url("./images/skill_bg.png");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
bottom: 3em;
right: -1.6em;
display: flex;
align-items: flex-end;
padding-left: 2.5em;
padding-bottom: 0.2em;
}
.damage .basic .char .skills .skill {
width: 1.4em;
aspect-ratio: 1;
margin-right: 1.38em;
display: flex;
justify-content: center;
align-items: center;
}
.damage .basic .info {
width: 45%;
flex-grow: 0;
flex-shrink: 0;
font-size: 1.2em;
position: relative;
z-index: 2;
}
.damage .basic .info .char_info {
width: 140%;
position: relative;
right: 20%;
padding: 0.3em 0.2em;
padding-right: 20%;
padding-left: 8%;
border-image-slice: 0 30 0 40 fill;
border-image-width: 0em 1.5em 0em 2em;
border-image-outset: 0 0 0 0;
border-image-repeat: stretch stretch;
border-image-source: url("./images/CurseBG04.png");
filter: drop-shadow(0 0 0.1em rgb(0, 0, 0));
}
.damage .basic .info .char_info .base {
display: flex;
align-items: center;
gap: 0.2em;
overflow: hidden;
}
.damage .basic .info .char_info .base .rank {
width: 1.2em;
flex-grow: 0;
flex-shrink: 0;
}
.damage .basic .info .char_info .base .property {
width: 1em;
flex-grow: 0;
flex-shrink: 0;
}
.damage .basic .info .char_info .base .name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.damage .basic .info .char_info .addition {
display: flex;
align-items: center;
font-size: 0.7em;
gap: 0.2em;
padding-left: 1em;
}
.damage .basic .info .char_info .addition .level {
background-color: #000;
padding: 0em 0.7em;
border-radius: 1em;
}
.damage .basic .info .char_info .addition .role_ranks {
display: flex;
gap: 0.1em;
}
.damage .basic .info .char_info .addition .role_ranks span {
width: 1.2em;
aspect-ratio: 1;
border-radius: 1em;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
opacity: 0.4;
}
.damage .basic .info .char_info .addition .role_ranks span:nth-child(1) {
background-image: url("./images/ranks/1.png");
}
.damage .basic .info .char_info .addition .role_ranks.r1 span:nth-child(1) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks span:nth-child(2) {
background-image: url("./images/ranks/2.png");
}
.damage .basic .info .char_info .addition .role_ranks.r2 span:nth-child(1) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r2 span:nth-child(2) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks span:nth-child(3) {
background-image: url("./images/ranks/3.png");
}
.damage .basic .info .char_info .addition .role_ranks.r3 span:nth-child(1) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r3 span:nth-child(2) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r3 span:nth-child(3) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks span:nth-child(4) {
background-image: url("./images/ranks/4.png");
}
.damage .basic .info .char_info .addition .role_ranks.r4 span:nth-child(1) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r4 span:nth-child(2) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r4 span:nth-child(3) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r4 span:nth-child(4) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks span:nth-child(5) {
background-image: url("./images/ranks/5.png");
}
.damage .basic .info .char_info .addition .role_ranks.r5 span:nth-child(1) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r5 span:nth-child(2) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r5 span:nth-child(3) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r5 span:nth-child(4) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r5 span:nth-child(5) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks span:nth-child(6) {
background-image: url("./images/ranks/6.png");
}
.damage .basic .info .char_info .addition .role_ranks.r6 span:nth-child(1) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r6 span:nth-child(2) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r6 span:nth-child(3) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r6 span:nth-child(4) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r6 span:nth-child(5) {
opacity: 1 !important;
}
.damage .basic .info .char_info .addition .role_ranks.r6 span:nth-child(6) {
opacity: 1 !important;
}
.damage .basic .info .property_info {
background-color: rgb(47, 47, 47);
border-left: 0.1em solid rgb(0, 0, 0);
padding-top: 0.2em;
background: url("./images/BgFrame01.png") center/150% no-repeat;
}
.damage .basic .info .property_info .title {
font-size: 0.6em;
}
.damage .basic .info .property_info .title .special-title {
margin-bottom: 0;
padding-bottom: 0;
}
.damage .basic .info .property_info .list {
display: flex;
flex-direction: column;
gap: 0.2em;
padding-bottom: 0.2em;
}
.damage .basic .info .property_info .list .properties {
display: flex;
align-items: center;
gap: 0.4em;
padding: 0.05em 1em 0em 0.05em;
}
.damage .basic .info .property_info .list .properties:nth-child(odd) {
background-color: rgba(221, 224, 221, 0.25);
}
.damage .basic .info .property_info .list .properties .prop-icon {
width: 1em;
flex-grow: 0;
flex-shrink: 0;
margin: 0 0.4em;
}
.damage .basic .info .property_info .list .properties .label {
flex-grow: 1;
flex-shrink: 1;
font-size: 0.65em;
color: rgb(166, 166, 166);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.damage .basic .info .property_info .list .properties .label.yellow {
color: rgb(247, 199, 54);
}
.damage .basic .info .property_info .list .properties .label.blue {
color: rgb(65, 147, 237);
}
.damage .basic .info .property_info .list .properties .label.white {
color: rgb(233, 233, 233);
}
.damage .basic .info .property_info .list .properties .value {
flex-grow: 0;
flex-shrink: 0;
font-size: 0.8em;
}
.damage .basic .info .weapon_info {
border-image-slice: 118 0 68 43 fill;
border-image-width: 4.5em 0em 2.7em 1.7em;
border-image-outset: 0em 0em 0em 0em;
border-image-repeat: stretch stretch;
border-image-source: url("./images/weapon_bg.png");
margin-top: -0.8em;
width: 115%;
margin-left: -15%;
font-size: 0.8em;
padding: 2em 1.2em;
padding-bottom: 3em;
position: relative;
overflow: hidden;
}
.damage .basic .info .weapon_info .info {
width: 100%;
position: relative;
z-index: 2;
}
.damage .basic .info .weapon_info .info .base {
width: 100%;
display: flex;
align-items: center;
gap: 0.5em;
}
.damage .basic .info .weapon_info .info .base .rarity-icon {
width: 2em;
}
.damage .basic .info .weapon_info .info .base .name {
text-shadow: 0 0 0.2em rgb(0, 0, 0);
}
.damage .basic .info .weapon_info .info .main {
display: flex;
flex-direction: column;
justify-content: stretch;
width: max-content;
}
.damage .basic .info .weapon_info .info .main .addition {
font-size: 0.8em;
display: flex;
align-items: center;
gap: 0.4em;
}
.damage .basic .info .weapon_info .info .main .addition .level {
-webkit-clip-path: polygon(0.2em 0%, calc(100% - 0.2em) 0%, 100% 0.2em, 100% calc(100% - 0.2em), calc(100% - 0.2em) 100%, 0.2em 100%, 0% calc(100% - 0.2em), 0% 0.2em);
clip-path: polygon(0.2em 0%, calc(100% - 0.2em) 0%, 100% 0.2em, 100% calc(100% - 0.2em), calc(100% - 0.2em) 100%, 0.2em 100%, 0% calc(100% - 0.2em), 0% 0.2em);
padding: 0 0.4em;
font-size: 0.9em;
display: flex;
justify-content: center;
align-items: center;
color: rgb(43, 38, 40);
margin: 0.1em 0;
background-color: rgb(243, 203, 69);
}
.damage .basic .info .weapon_info .info .main .properties {
display: flex;
align-items: center;
background-color: rgb(65, 147, 237);
gap: 0.2em;
padding: 0 0.5em;
border-radius: 1em;
margin: 0.2em 0;
}
.damage .basic .info .weapon_info .info .main .properties.sub {
background-color: rgb(0, 0, 0);
}
.damage .basic .info .weapon_info .info .main .properties .prop-icon {
width: 1em;
flex-grow: 0;
flex-shrink: 0;
}
.damage .basic .info .weapon_info .info .main .properties .label {
flex-grow: 1;
flex-shrink: 1;
font-size: 0.7em;
color: rgb(222, 222, 222);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.damage .basic .info .weapon_info .icon {
position: absolute;
top: 1.2em;
right: 0;
z-index: 1;
height: 70%;
margin-right: -1em;
}
.damage .basic .info .weapon_info .icon img {
height: 100%;
}
.damage .damage-data {
border-image-source: url("./images/BgFrame01.png");
border-image-slice: 200 100 70 280 fill;
border-image-width: 2em 1em 0.7em 2.8em;
border-image-outset: 2em 1em 0.7em 2.8em;
border-image-repeat: stretch stretch;
padding-bottom: 3.3em;
margin-top: -1.4em;
position: relative;
z-index: 5;
}
.damage .title:nth-child(n+2) {
padding-top: 0.5em;
}
.damage .data-list {
margin: 0 1.2em;
text-align: center;
backdrop-filter: blur(0.2em);
border-radius: 0.5em;
overflow: hidden;
box-shadow: 0 0 3em rgba(0, 0, 0, 0.6);
border: 0.1em solid rgba(255, 255, 255, 0.3);
}
.damage .data-list .tr {
display: grid;
border-bottom: 0.1em solid rgba(255, 255, 255, 0.3);
}
.damage .data-list .tr:first-child {
font-size: 1.1em;
background: rgba(0, 0, 0, 0.2);
text-shadow: 0 0 0.2em rgba(0, 0, 0, 0.6);
color: rgb(206, 190, 149);
}
.damage .data-list .tr:last-child {
border-bottom: none;
}
.damage .data-list .tr:nth-child(even) {
background-color: rgba(255, 255, 255, 0.12);
}
.damage .data-list .td {
padding: 0.5em 0.5em;
font-size: 0.9em;
border-right: 0.1em solid rgba(255, 255, 255, 0.3);
}
.damage .data-list .td:last-child {
border-right: none;
}
.damage .data-list .info-tr {
font-size: 0.8em !important;
display: grid !important;
grid-template-columns: 1fr !important;
padding: 0.3em !important;
color: #bbb !important;
}
.damage .data-list .info-tr span {
color: #fff !important;
}
.damage .damage-list .dmg-tr {
grid-template-columns: 0.25fr 1.6fr 1fr 1fr;
}
.damage .damage-list .dmg-tr.current {
background: rgb(120, 104, 73);
}
.damage .damage-list .dmg-tr.current .dmg-td:nth-child(2) {
color: rgb(251, 198, 65) !important;
font-weight: bold !important;
}
.damage .damage-list .dmg-td:nth-child(2) {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}
.damage .area-list .area-tr {
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
}
.damage .area-list .area-tr:nth-child(odd) {
font-size: 1.1em;
background: rgba(0, 0, 0, 0.2);
text-shadow: 0 0 0.2em rgba(0, 0, 0, 0.6);
color: rgb(206, 190, 149);
}
.damage .area-list .area-tr.anomaly {
grid-template-columns: 1fr 1fr 1fr;
}
.damage .buff-list .buff-tr {
grid-template-columns: 0.7fr 5fr 3fr 2fr;
}
.damage .buff-list .buff-td:nth-child(2) {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}
.damage .difference-list .difference-tr.d2 {
grid-template-columns: repeat(3, 1fr);
}
.damage .difference-list .difference-tr.d3 {
grid-template-columns: repeat(4, 1fr);
}
.damage .difference-list .difference-tr.d4 {
grid-template-columns: repeat(5, 1fr);
}
.damage .difference-list .difference-tr.d5 {
grid-template-columns: repeat(6, 1fr);
}
.damage .difference-list .difference-tr.d6 {
grid-template-columns: repeat(7, 1fr);
}
.damage .difference-list .difference-tr.d7 {
grid-template-columns: repeat(8, 1fr);
}
.damage .difference-list .difference-tr.d8 {
grid-template-columns: repeat(9, 1fr);
}
.damage .difference-list .difference-tr.d9 {
grid-template-columns: repeat(10, 1fr);
}
.damage .difference-list .difference-td {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.damage .difference-list .difference-td span {
font-size: 0.8em;
color: #bbb;
}
.damage .difference-list .difference-td.zero {
background-color: #222;
}
.damage .difference-list .difference-td:first-child {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}
.damage .difference-list .difference-td.positive {
background-color: rgb(82, 38, 32);
}
.damage .difference-list .difference-td.negative {
background-color: rgb(22, 65, 33);
}
.copyright {
margin-top: -3.3em;
position: relative;
z-index: 5;
}
/*# sourceMappingURL=damage.css.map */

257
resources/panel/damage.html Normal file
View file

@ -0,0 +1,257 @@
{{extend defaultLayout}}
{{block 'css'}}
<link rel="stylesheet" href="{{@sys.currentPath}}/damage.css">
{{/block}}
{{block 'main'}}
<div class="damage">
<div class="uid">UID {{uid}}</div>
<div class="basic">
<div class="char">
<div class="avatar">
<img src="{{charData.role_icon}}" alt="">
</div>
<div class="skills">
<div class="skill">{{charData.skills[0].level}}</div>
<div class="skill">{{charData.skills[2].level}}</div>
<div class="skill">{{charData.skills[5].level}}</div>
<div class="skill">{{charData.skills[1].level}}</div>
<div class="skill">{{charData.skills[3].level}}</div>
<div class="skill">{{charData.skills[4].level}}</div>
</div>
</div>
<div class="info">
<div class="char_info">
<div class="base">
<div class="rank rank-icon {{charData.rarity}}"></div>
<div class="property {{charData.element_str}}"></div>
<div class="name">{{charData.full_name_mi18n}}</div>
</div>
<div class="addition">
<div class="level">Lv.{{charData.level}}</div>
<div class="role_ranks r{{charData.rank}}">
<span></span><span></span><span></span><span></span><span></span><span></span>
</div>
</div>
</div>
<div class="property_info">
<div class="title">
<% include(sys.specialTitle, {en: 'PROPERTY' , cn: '属性' , count: 6 }) %>
</div>
{{set basic_properties = charData.basic_properties}}
<div class="list">
<div class="properties">
<div class="prop-icon hpmax"></div>
<div class="label {{charData.get_label(11102)}}">生命值</div>
<div class="value">{{basic_properties.hpmax.final}}</div>
</div>
<div class="properties">
<div class="prop-icon attack"></div>
<div class="label {{charData.get_label(12102)}}">攻击力</div>
<div class="value">{{basic_properties.attack.final}}</div>
</div>
<div class="properties">
<div class="prop-icon def"></div>
<div class="label {{charData.get_label(13102)}}">防御力</div>
<div class="value">{{basic_properties.def.final}}</div>
</div>
<div class="properties">
<div class="prop-icon breakstun"></div>
<div class="label {{charData.get_label(12202)}}">冲击力</div>
<div class="value">{{basic_properties.breakstun.final}}</div>
</div>
<div class="properties">
<div class="prop-icon crit"></div>
<div class="label {{charData.get_label(20103)}}">暴击率</div>
<div class="value">{{basic_properties.crit.final}}</div>
</div>
<div class="properties">
<div class="prop-icon critdam"></div>
<div class="label {{charData.get_label(21103)}}">暴击伤害</div>
<div class="value">{{basic_properties.critdam.final}}</div>
</div>
<div class="properties">
<div class="prop-icon elementabnormalpower"></div>
<div class="label {{charData.get_label(31402)}}">异常掌控</div>
<div class="value">{{basic_properties.elementabnormalpower.final}}</div>
</div>
<div class="properties">
<div class="prop-icon elementmystery"></div>
<div class="label {{charData.get_label(31203)}}">异常精通</div>
<div class="value">{{basic_properties.elementmystery.final}}</div>
</div>
<div class="properties">
<div class="prop-icon penratio"></div>
<div class="label {{charData.get_label(23103)}}">穿透率</div>
<div class="value">{{basic_properties.penratio.final}}</div>
</div>
<div class="properties">
<div class="prop-icon sprecover"></div>
<div class="label {{charData.get_label(30502)}}">能量回复</div>
<div class="value">{{basic_properties.sprecover.final}}</div>
</div>
</div>
</div>
<div class="weapon_info">
{{if charData.weapon}}
<div class="info">
<div class="base">
<div class="rarity-icon {{charData.weapon.rarity}}"></div>
<div class="name">{{charData.weapon.name}}</div>
</div>
<div class="main">
<div class="addition">
<div class="star star{{charData.weapon.star}}"></div>
<div class="level">Lv.{{charData.weapon.level}}</div>
</div>
{{each charData.weapon.main_properties prop}}
<div class="properties">
<div class="prop-icon {{prop.classname}}"></div>
<div class="label">{{prop.property_name}}</div>
<div class="value">{{prop.base}}</div>
</div>
{{/each}}
{{each charData.weapon.properties prop}}
<div class="properties sub">
<div class="prop-icon {{prop.classname}}"></div>
<div class="label">{{prop.property_name}}</div>
<div class="value">{{prop.base}}</div>
</div>
{{/each}}
</div>
</div>
<div class="icon">
<img src="{{charData.weapon.square_icon}}" alt="">
</div>
{{else}}
<div class="info empty">
<div class="base">
<div class="rarity-icon"></div>
<div class="name"></div>
</div>
</div>
{{/if}}
</div>
</div>
</div>
<div class="damage-data">
<div class="title">
<% include(sys.specialTitle, {en: 'DAMAGE' , cn: '伤害统计' }) %>
</div>
<div class="data-list damage-list">
<div class="tr dmg-tr titlebar no-zzz-font">
<div class="td dmg-td">%</div>
<div class="td dmg-td">技能类型</div>
<div class="td dmg-td">暴击伤害</div>
<div class="td dmg-td">期望伤害</div>
</div>
{{each damages d,index}}
{{if index == skill.index}}
<div class="tr dmg-tr current">
{{else}}
<div class="tr dmg-tr">
{{/if}}
<div class="td dmg-td">{{index+1}}</div>
<div class="td dmg-td no-zzz-font">{{d.skill.name}}</div>
<div class="td dmg-td">{{d.result.critDMG.toFixed(0)}}</div>
<div class="td dmg-td">{{d.result.expectDMG.toFixed(0)}}</div>
</div>
{{/each}}
<div class="tr dmg-tr info-tr no-zzz-font">
<div>伤害计算默认取有弱点、角色等级、1级基础防御力为50的敌方数据且不考虑失衡易伤区</div>
<div>当前指令:<span>{{command}}</span></div>
<div>下列计算以 <span>{{damage.skill.name}}</span> 为计算目标</div>
<div>可通过 <span>%{{charData.name_mi18n}}伤害123</span> 切换需要查看的伤害计算</div>
</div>
</div>
<div class="title">
<% include(sys.specialTitle, {en: 'AREA' , cn: '乘区数据' }) %>
</div>
<div class="data-list area-list">
{{set areas = damage.areas}}
<div class="tr area-tr titlebar no-zzz-font">
<div class="td area-td">基础区</div>
<div class="td area-td">暴击区</div>
<div class="td area-td">增伤区</div>
<div class="td area-td">易伤区</div>
<div class="td area-td">抗性区</div>
<div class="td area-td">防御区</div>
</div>
<div class="tr area-tr titlebar">
<div class="td area-td">{{(areas.BasicArea || 1).toFixed(0)}}</div>
<div class="td area-td">{{(areas.CriticalArea || 1).toFixed(2)}}</div>
<div class="td area-td">{{(areas.BoostArea || 1).toFixed(2)}}</div>
<div class="td area-td">{{(areas.VulnerabilityArea || 1).toFixed(2)}}</div>
<div class="td area-td">{{(areas.ResistanceArea || 1).toFixed(2)}}</div>
<div class="td area-td">{{(areas.DefenceArea || 1).toFixed(4)}}</div>
</div>
{{if areas.AnomalyProficiencyArea}}
<div class="tr area-tr anomaly titlebar no-zzz-font">
<div class="td area-td">异常精通区</div>
<div class="td area-td">异常增伤区</div>
<div class="td area-td">等级区</div>
</div>
<div class="tr area-tr anomaly titlebar">
<div class="td area-td">{{(areas.AnomalyProficiencyArea || 1).toFixed(2)}}</div>
<div class="td area-td">{{(areas.AnomalyBoostArea || 1).toFixed(2)}}</div>
<div class="td area-td">{{(areas.LevelArea || 1).toFixed(2)}}</div>
</div>
{{/if}}
<div class="tr area-tr info-tr no-zzz-font">
<div>注:一个技能可能分为多个出伤部分分别计算累加,此时该数据仅为一部分的乘区,下同</div>
</div>
</div>
<div class="title">
<% include(sys.specialTitle, {en: 'BUFF' , cn: 'Buff统计' }) %>
</div>
<div class="data-list buff-list">
<div class="tr buff-tr titlebar no-zzz-font">
<div class="td buff-td">%</div>
<div class="td buff-td">名称</div>
<div class="td buff-td">增益类型</div>
<div class="td buff-td">增益值</div>
</div>
{{each damage.usefulBuffs buff,index}}
<div class="tr buff-tr titlebar">
<div class="td buff-td">{{index+1}}</div>
<div class="td buff-td no-zzz-font">{{buff.name}}</div>
<div class="td buff-td no-zzz-font">{{buff.type}}</div>
<div class="td buff-td">{{buff.value % 1 == 0 ? buff.value < 2 ? buff.value.toFixed(2) : buff.value : buff.value.toFixed(2)}}</div>
</div>
{{/each}}
</div>
{{if differences.length > 1}}
<div class="title">
<% include(sys.specialTitle, {en: 'STAT' , cn: '词条差异计算' }) %>
</div>
<div class="data-list difference-list">
<div class="tr difference-tr d{{differences.length}}">
<div class="td difference-td no-zzz-font">词条变化</div>
{{each differences[0] d}}
<div class="td difference-td no-zzz-font">
{{d.add.shortName}}
<span>+{{d.add.valueBase}}</span>
</div>
{{/each}}
</div>
{{each differences diff}}
<div class="tr difference-tr d{{differences.length}}">
<div class="td difference-td no-zzz-font">
{{diff[0].del.shortName}}
<span>-{{diff[0].del.valueBase}}</span>
</div>
{{each diff d}}
<div class="td difference-td no-zzz-font {{d.difference > 0 ? 'positive' : d.difference < 0 ? 'negative' : 'zero'}}">{{d.difference > 0 ? '+' + d.difference.toFixed(0) : d.difference.toFixed(0)}}</div>
{{/each}}
</div>
{{/each}}
<div class="tr difference-tr info-tr no-zzz-font">
<div>反映在上述buff作用下置换<span>单位词条</span>后的<span>{{skill.name}}</span>期望伤害变化</div>
<div><span>横轴</span>表示<span>增加</span>的单位词条,<span>纵轴</span>表示<span>减少</span>的单位词条,对应坐标即为<span>期望伤害变化</span></div>
</div>
</div>
{{/if}}
</div>
</div>
{{/block}}

547
resources/panel/damage.scss Normal file
View file

@ -0,0 +1,547 @@
.damage {
padding-top: 0.8em;
overflow: hidden;
position: relative;
.uid {
font-size: 0.6em;
text-align: center;
position: absolute;
border-image-source: url('./images/CurseBG08.png');
border-image-slice: 30 60 30 60 fill;
border-image-width: 0.5em 1em 0.5em 1em;
border-image-outset: 0em 0em 0em 0em;
border-image-repeat: stretch stretch;
padding: 0.5em 1.2em;
font-size: 1em;
top: 0.5em;
left: 0.5em;
color: rgb(255, 255, 255);
stroke: 0.05em rgba(0, 0, 0, 0.6);
-webkit-text-stroke: 0.05em rgba(0, 0, 0, 0.6);
z-index: 1;
}
.star {
width: 5.5em;
height: 1.5em;
@for $i from 0 through 5 {
&.star#{$i} {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-image: url('./images/star/#{$i}.png');
}
}
}
.basic {
display: flex;
align-items: stretch;
overflow: hidden;
.char {
width: 55%;
position: relative;
flex-grow: 1;
.avatar {
height: 100%;
padding-top: 1em;
overflow: hidden;
img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: top center;
position: absolute;
}
}
.skills {
position: absolute;
width: 120%;
height: 3.5em;
background: url('./images/skill_bg.png');
background-size: contain;
background-repeat: no-repeat;
background-position: center;
bottom: 3em;
right: -1.6em;
display: flex;
align-items: flex-end;
padding-left: 2.5em;
padding-bottom: 0.2em;
.skill {
width: 1.4em;
aspect-ratio: 1;
margin-right: 1.38em;
display: flex;
justify-content: center;
align-items: center;
}
}
}
.info {
width: 45%;
flex-grow: 0;
flex-shrink: 0;
font-size: 1.2em;
position: relative;
z-index: 2;
.char_info {
width: 140%;
position: relative;
right: 20%;
padding: 0.3em 0.2em;
padding-right: 20%;
padding-left: 8%;
border-image-slice: 0 30 0 40 fill;
border-image-width: 0em 1.5em 0em 2em;
border-image-outset: 0 0 0 0;
border-image-repeat: stretch stretch;
border-image-source: url('./images/CurseBG04.png');
filter: drop-shadow(0 0 0.1em rgb(0, 0, 0));
.base {
display: flex;
align-items: center;
gap: 0.2em;
overflow: hidden;
.rank {
width: 1.2em;
flex-grow: 0;
flex-shrink: 0;
}
.property {
width: 1em;
flex-grow: 0;
flex-shrink: 0;
}
.name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.addition {
display: flex;
align-items: center;
font-size: 0.7em;
gap: 0.2em;
padding-left: 1em;
.level {
background-color: #000;
padding: 0em 0.7em;
border-radius: 1em;
}
.role_ranks {
display: flex;
gap: 0.1em;
span {
width: 1.2em;
aspect-ratio: 1;
border-radius: 1em;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
opacity: 0.4;
}
@for $i from 1 through 6 {
span:nth-child(#{$i}) {
background-image: url('./images/ranks/#{$i}.png');
}
&.r#{$i} {
@for $j from 1 through $i {
span:nth-child(#{$j}) {
opacity: 1 !important;
}
}
}
}
}
}
}
.property_info {
background-color: rgb(47, 47, 47);
border-left: 0.1em solid rgb(0, 0, 0);
padding-top: 0.2em;
background: url('./images/BgFrame01.png') center / 150% no-repeat;
.title {
font-size: 0.6em;
.special-title {
margin-bottom: 0;
padding-bottom: 0;
}
}
.list {
display: flex;
flex-direction: column;
gap: 0.2em;
padding-bottom: 0.2em;
.properties {
display: flex;
align-items: center;
gap: 0.4em;
padding: 0.05em 1em 0em 0.05em;
&:nth-child(odd) {
background-color: rgba(221, 224, 221, 0.25);
}
.prop-icon {
width: 1em;
flex-grow: 0;
flex-shrink: 0;
margin: 0 0.4em;
}
.label {
flex-grow: 1;
flex-shrink: 1;
font-size: 0.65em;
color: rgb(166, 166, 166);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.yellow {
color: rgb(247, 199, 54);
}
&.blue {
color: rgb(65, 147, 237);
}
&.white {
color: rgb(233, 233, 233);
}
}
.value {
flex-grow: 0;
flex-shrink: 0;
font-size: 0.8em;
}
}
}
}
.weapon_info {
border-image-slice: 118 0 68 43 fill;
border-image-width: 4.5em 0em 2.7em 1.7em;
border-image-outset: 0em 0em 0em 0em;
border-image-repeat: stretch stretch;
border-image-source: url('./images/weapon_bg.png');
margin-top: -0.8em;
width: 115%;
margin-left: -15%;
font-size: 0.8em;
padding: 2em 1.2em;
padding-bottom: 3em;
position: relative;
overflow: hidden;
.info {
width: 100%;
position: relative;
z-index: 2;
.base {
width: 100%;
display: flex;
align-items: center;
gap: 0.5em;
.rarity-icon {
width: 2em;
}
.name {
text-shadow: 0 0 0.2em rgb(0, 0, 0);
}
}
.main {
display: flex;
flex-direction: column;
justify-content: stretch;
width: max-content;
.addition {
font-size: 0.8em;
display: flex;
align-items: center;
gap: 0.4em;
.level {
$label-width: 0.2em;
-webkit-clip-path: polygon(
$label-width 0%,
calc(100% - $label-width) 0%,
100% $label-width,
100% calc(100% - $label-width),
calc(100% - $label-width) 100%,
$label-width 100%,
0% calc(100% - $label-width),
0% $label-width
);
clip-path: polygon(
$label-width 0%,
calc(100% - $label-width) 0%,
100% $label-width,
100% calc(100% - $label-width),
calc(100% - $label-width) 100%,
$label-width 100%,
0% calc(100% - $label-width),
0% $label-width
);
padding: 0 0.4em;
font-size: 0.9em;
display: flex;
justify-content: center;
align-items: center;
color: rgb(43, 38, 40);
margin: 0.1em 0;
background-color: rgb(243, 203, 69);
}
}
.properties {
display: flex;
align-items: center;
background-color: rgb(65, 147, 237);
gap: 0.2em;
padding: 0 0.5em;
border-radius: 1em;
margin: 0.2em 0;
&.sub {
background-color: rgb(0, 0, 0);
}
.prop-icon {
width: 1em;
flex-grow: 0;
flex-shrink: 0;
}
.label {
flex-grow: 1;
flex-shrink: 1;
font-size: 0.7em;
color: rgb(222, 222, 222);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
}
.icon {
position: absolute;
top: 1.2em;
right: 0;
z-index: 1;
height: 70%;
margin-right: -1em;
img {
height: 100%;
}
}
}
}
}
.damage-data {
border-image-source: url('./images/BgFrame01.png');
border-image-slice: 200 100 70 280 fill;
border-image-width: 2em 1em 0.7em 2.8em;
border-image-outset: 2em 1em 0.7em 2.8em;
border-image-repeat: stretch stretch;
padding-bottom: 3.3em;
margin-top: -1.4em;
position: relative;
z-index: 5;
}
.title:nth-child(n+2) {
padding-top: 0.5em;
}
.data-list {
margin: 0 1.2em;
text-align: center;
backdrop-filter: blur(0.2em);
border-radius: 0.5em;
overflow: hidden;
box-shadow: 0 0 3em rgba(0, 0, 0, 0.6);
border: 0.1em solid rgba(255, 255, 255, 0.3);
.tr {
display: grid;
border-bottom: 0.1em solid rgba(255, 255, 255, 0.3);
&:first-child {
font-size: 1.1em;
background: rgba(0, 0, 0, 0.2);
text-shadow: 0 0 0.2em rgba(0, 0, 0, 0.6);
color: rgb(206, 190, 149);
}
&:last-child {
border-bottom: none;
}
&:nth-child(even) {
background-color: rgba(255, 255, 255, 0.12);
}
}
.td {
padding: 0.5em 0.5em;
font-size: 0.9em;
border-right: 0.1em solid rgba(255, 255, 255, 0.3);
&:last-child {
border-right: none;
}
}
.info-tr {
font-size: 0.8em !important;
display: grid !important;
grid-template-columns: 1fr !important;
padding: 0.3em !important;
color: #bbb !important;
span {
color: #fff !important;
}
}
}
/* 伤害统计 */
.damage-list {
.dmg-tr {
grid-template-columns: 0.25fr 1.6fr 1fr 1fr;
&.current {
background: rgb(120, 104, 73);
.dmg-td:nth-child(2) {
color: rgb(251, 198, 65) !important;
font-weight: bold !important;
}
}
}
.dmg-td {
&:nth-child(2) {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}
}
}
/* 乘区数据 */
.area-list {
.area-tr {
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
&:nth-child(odd) {
font-size: 1.1em;
background: rgba(0, 0, 0, 0.2);
text-shadow: 0 0 0.2em rgba(0, 0, 0, 0.6);
color: rgb(206, 190, 149);
}
&.anomaly {
grid-template-columns: 1fr 1fr 1fr;
}
}
.area-td {
}
}
/* buff统计 */
.buff-list {
.buff-tr {
grid-template-columns: 0.7fr 5fr 3fr 2fr;
}
.buff-td {
&:nth-child(2) {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}
}
}
/* 差异计算 */
.difference-list {
.difference-tr {
@for $i from 2 through 9 {
&.d#{$i} {
grid-template-columns: repeat($i + 1, 1fr);
}
}
}
.difference-td {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
span {
font-size: 0.8em;
color: #bbb;
}
&.zero {
background-color: #222;
}
&:first-child {
background: rgba(0, 0, 0, 0.2);
color: rgb(206, 190, 149);
}
&.positive {
background-color: rgb(82, 38, 32);
}
&.negative {
background-color: rgb(22, 65, 33);
}
}
}
}
.copyright {
margin-top: -3.3em;
position: relative;
z-index: 5;
}