尝试添加[艾莲]伤害计算

This commit is contained in:
a376148946 2024-07-26 13:48:19 +08:00
parent 8c964e5de5
commit bc04f1dcd0
13 changed files with 565 additions and 0 deletions

View file

@ -2,8 +2,11 @@ import { ZZZPlugin } from '../lib/plugin.js';
import render from '../lib/render.js'; import render from '../lib/render.js';
import { rulePrefix } from '../lib/common.js'; import { rulePrefix } from '../lib/common.js';
import { getPanelList, refreshPanel, getPanel } from '../lib/avatar.js'; import { getPanelList, refreshPanel, getPanel } from '../lib/avatar.js';
import { getDamage } from '../model/damage/base.js';
import settings from '../lib/settings.js'; import settings from '../lib/settings.js';
import _ from 'lodash'; import _ from 'lodash';
import { getMapData } from '../utils/file.js';
const skilldict = getMapData('SkillData');
export class Panel extends ZZZPlugin { export class Panel extends ZZZPlugin {
constructor() { constructor() {
@ -89,6 +92,12 @@ export class Panel extends ZZZPlugin {
await this.reply(`未找到角色${name}的面板信息,请先刷新面板`); await this.reply(`未找到角色${name}的面板信息,请先刷新面板`);
return; return;
} }
let damagelist = [];
if (skilldict[data.id]){
damagelist = await getDamage(data);
}else{
damagelist = 0
}
const timer = setTimeout(() => { const timer = setTimeout(() => {
if (this?.reply) { if (this?.reply) {
this.reply('查询成功,正在下载图片资源,请稍候。'); this.reply('查询成功,正在下载图片资源,请稍候。');
@ -99,6 +108,7 @@ export class Panel extends ZZZPlugin {
const finalData = { const finalData = {
uid: uid, uid: uid,
charData: data, charData: data,
damagelist: damagelist,
}; };
await render(this.e, 'panel/card.html', finalData); await render(this.e, 'panel/card.html', finalData);
} }

117
model/damage/avatar.js Normal file
View file

@ -0,0 +1,117 @@
import { getMapData } from '../../utils/file.js';
import { calculate_damage } from './role.js';
const skilldict = getMapData('SkillData');
export const get_let_value = async (let_list, name) => {
if (let_list[name]) {
return let_list[name]
}
return 0
}
export const Avatar = async (data, base_detail, bonus_detail) => {
let damagelist = []
if (data.id == 1191){
/** 处理命座加成 */
if (data.rank >= 1){
let CriticalChanceBase = await get_let_value(bonus_detail, 'CriticalChanceBase');
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + 0.12;
}
if (data.rank >= 2){
let EUP_DmgAdd = await get_let_value(bonus_detail, 'EUP_DmgAdd');
bonus_detail['EUP_DmgAdd'] = EUP_DmgAdd + 0.6;
}
if (data.rank >= 6){
let PenRatio = await get_let_value(bonus_detail, 'PenRatioBase');
bonus_detail['PenRatioBase'] = PenRatio + 0.2;
let C_DmgAdd = await get_let_value(bonus_detail, 'C_DmgAdd');
bonus_detail['C_DmgAdd'] = C_DmgAdd + 2.5;
}
/** 处理天赋加成 */
/** 获取天赋等级与加成倍率 */
let CDB = await getskilllevelnum(data.id, data.skills, 'T', 'T')
let C_CriticalDamageBase = await get_let_value(bonus_detail, 'C_CriticalDamageBase');
bonus_detail['C_CriticalDamageBase'] = C_CriticalDamageBase + CDB;
let A_CriticalDamageBase = await get_let_value(bonus_detail, 'A_CriticalDamageBase');
bonus_detail['A_CriticalDamageBase'] = A_CriticalDamageBase + CDB;
let IceDmgAdd = await get_let_value(bonus_detail, 'Ice_DmgAdd');
bonus_detail['Ice_DmgAdd'] = IceDmgAdd + 0.3;
/** 计算伤害 */
/** 计算普攻伤害 */
let skill_multiplier1 = await getskilllevelnum(data.id, data.skills, 'A', 'A')
let damagelist1 = await calculate_damage(base_detail, bonus_detail, "A", "A", "Ice", skill_multiplier1, data.level)
let damage1 = {
title: '普通攻击:急冻修剪法',
value: damagelist1
}
damagelist.push(damage1)
/** 计算冲刺伤害 */
let skill_multiplier2 = await getskilllevelnum(data.id, data.skills, 'C', 'C')
let damagelist2 = await calculate_damage(base_detail, bonus_detail, "C", "C", "Ice", skill_multiplier2, data.level)
let damage2 = {
title: '冲刺攻击:冰渊潜袭',
value: damagelist2
}
damagelist.push(damage2)
/** 计算特殊技伤害 */
let skill_multiplier3 = await getskilllevelnum(data.id, data.skills, 'E', 'EH')
let damagelist3 = await calculate_damage(base_detail, bonus_detail, "E", "EH", "Ice", skill_multiplier3, data.level)
let damage3 = {
title: '强化特殊技:横扫',
value: damagelist3
}
damagelist.push(damage3)
let skill_multiplier4 = await getskilllevelnum(data.id, data.skills, 'E', 'ES')
let damagelist4 = await calculate_damage(base_detail, bonus_detail, "E", "ES", "Ice", skill_multiplier4, data.level)
let damage4 = {
title: '强化特殊技:鲨卷风',
value: damagelist4
}
damagelist.push(damage4)
/** 计算连携技伤害 */
let skill_multiplier5 = await getskilllevelnum(data.id, data.skills, 'R', 'RL')
let damagelist5 = await calculate_damage(base_detail, bonus_detail, "RL", "RL", "Ice", skill_multiplier5, data.level)
let damage5 = {
title: '连携技:雪崩',
value: damagelist5
}
damagelist.push(damage5)
/** 计算终结技伤害 */
let skill_multiplier6 = await getskilllevelnum(data.id, data.skills, 'R', 'R')
let damagelist6 = await calculate_damage(base_detail, bonus_detail, "R", "R", "Ice", skill_multiplier6, data.level)
let damage6 = {
title: '连携技:雪崩',
value: damagelist6
}
damagelist.push(damage6)
logger.debug('伤害', damagelist);
}
return damagelist;
};
export const avatar_ability = async (data, base_detail, bonus_detail) => {
const damagelist = await Avatar(data, base_detail, bonus_detail);
return damagelist;
}
export const getskilllevelnum = async (avatarId, skills, skilltype, skillname) => {
let skill_typeid = 0
if (skilltype == 'A') skill_typeid = 0;
else if(skilltype == 'C') skill_typeid = 2;
else if(skilltype == 'E') skill_typeid = 1;
else if(skilltype == 'R') skill_typeid = 3;
else if(skilltype == 'L') skill_typeid = 6;
else if(skilltype == 'T') skill_typeid = 5;
let skilllevel = Number(skills.find(property => property.skill_type === skill_typeid)?.level || 1) - 1;
return skilldict[avatarId][skillname][skilllevel];
}

93
model/damage/base.js Normal file
View file

@ -0,0 +1,93 @@
import { getMapData } from '../../utils/file.js';
import { relice_ability } from './relice.js';
import { weapon_ability } from './weapon.js';
import { avatar_ability } from './avatar.js';
const propertyData = getMapData('Property2Name');
const elementData = getMapData('Avatarid2Element');
/**
* 获取某个角色的伤害
* @param {ZZZAvatarInfo} data
* @returns {Promise<damagelist | null>}
logger.debug(xxx)
*/
export const getDamage = async (data) => {
/** 处理基础数据 */
const retuan_detail = await get_base_info(data.properties,data.equip);
let base_detail = retuan_detail['base_detail'];
let bonus_detail = retuan_detail['bonus_detail'];
let set_detail = retuan_detail['set_detail'];
/** 处理驱动盘套装加成 */
let set_detailkeys = Object.keys(set_detail)
for (const set_id of set_detailkeys){
let set_num = Number(set_detail[set_id])
if (set_num >= 2)(
bonus_detail = await relice_ability(set_id, set_num, base_detail, bonus_detail)
)
}
logger.debug('bonus_detail', bonus_detail);
/** 处理音频加成 */
bonus_detail = await weapon_ability(data.weapon, base_detail, bonus_detail)
logger.debug('bonus_detail', bonus_detail);
/** 处理角色加成 */
let damagelist = await avatar_ability(data, base_detail, bonus_detail)
return damagelist
};
/**
* 获取某个角色面包数据
* @param {ZZZAvatarInfo} properties_l
* @param {ZZZAvatarInfo} equip
* @returns base_detail
*/
export const get_base_info = async (properties_l, equip) => {
let retuan_detail = {}
let base_detail = {}
base_detail['hp'] = Number(properties_l.find(property => property.property_name === '生命值').final);
base_detail['attack'] = Number(properties_l.find(property => property.property_name === '攻击力').final);
base_detail['defence'] = Number(properties_l.find(property => property.property_name === '防御力').final);
base_detail['ImpactRatio'] = Number(properties_l.find(property => property.property_name === '冲击力').final);
base_detail['CriticalChanceBase'] = Number(properties_l.find(property => property.property_name === '暴击率').final.replace('%', ''))/100;
base_detail['CriticalDamageBase'] = Number(properties_l.find(property => property.property_name === '暴击伤害').final.replace('%', ''))/100;
base_detail['ElementAbnormalPower'] = Number(properties_l.find(property => property.property_name === '异常掌控').final);
base_detail['ElementMystery'] = Number(properties_l.find(property => property.property_name === '异常精通').final);
base_detail['PenRatioBase'] = Number(properties_l.find(property => property.property_name === '穿透率').final.replace('%', ''))/100;
base_detail['SpGetRatio'] = Number(properties_l.find(property => property.property_name === '能量自动回复').final);
logger.debug('base_detail', base_detail);
retuan_detail['base_detail'] = base_detail
/** 穿
* 穿透值23203
* 伤害加成31503-31703
*/
let bonus_detail = {}
/** 计算套装数量 */
let set_detail = {}
for (let equip_detail of equip){
bonus_detail['PenDelta'] = await get_let_value(bonus_detail, 'PenDelta') + Number(equip_detail.properties.find(property => property.property_id === 23203)?.base || 0);
if (equip_detail.equipment_type == 5){
let propname = propertyData[String(equip_detail.main_properties[0].property_id)][1];
if (propname.includes('属性伤害提高')) {
let propenname = propertyData[String(equip_detail.main_properties[0].property_id)][0];
bonus_detail[propenname] = await get_let_value(bonus_detail, propenname) + Number(equip_detail.main_properties[0].base.replace('%', ''))/100;
}
}
let suit_id = String(equip_detail.equip_suit.suit_id)
set_detail[suit_id] = await get_let_value(set_detail, suit_id) + 1
}
logger.debug('bonus_detail', bonus_detail);
retuan_detail['bonus_detail'] = bonus_detail
logger.debug('set_detail', set_detail);
retuan_detail['set_detail'] = set_detail
return retuan_detail;
}
export const get_let_value = async (let_list, name) => {
if (let_list[name]) {
return let_list[name]
}
return 0
}

38
model/damage/relice.js Normal file
View file

@ -0,0 +1,38 @@
export const get_let_value = async (let_list, name) => {
if (let_list[name]) {
return let_list[name]
}
return 0
}
export const Relic = async (set_id, set_num, base_detail, bonus_detail) => {
if (set_id == '31100'){
if (set_num >= 4){
let R_DmgAdd = await get_let_value(bonus_detail, 'R_DmgAdd');
bonus_detail['R_DmgAdd'] = R_DmgAdd + 0.2;
let AttackAddedRatio = await get_let_value(bonus_detail, 'AttackAddedRatio');
bonus_detail['AttackAddedRatio'] = AttackAddedRatio + 0.15;
logger.debug('relicGetter,4,R_DmgAdd');
}
}else if(set_id == '32500'){
if (set_num >= 2){
let IceDmgAdd = await get_let_value(bonus_detail, 'Ice_DmgAdd');
bonus_detail['Ice_DmgAdd'] = IceDmgAdd + 0.1;
logger.debug('32500,2,Ice_DmgAdd');
}
if (set_num >= 4){
let A_DmgAdd = await get_let_value(bonus_detail, 'A_DmgAdd');
bonus_detail['A_DmgAdd'] = A_DmgAdd + 0.4;
let C_DmgAdd = await get_let_value(bonus_detail, 'C_DmgAdd');
bonus_detail['C_DmgAdd'] = C_DmgAdd + 0.4;
logger.debug('32500,4,A_DmgAdd');
logger.debug('32500,4,C_DmgAdd');
}
}
return bonus_detail;
}
export const relice_ability = async (set_id, set_num, base_detail, bonus_detail) => {
bonus_detail = await Relic(set_id, set_num, base_detail, bonus_detail);
return bonus_detail;
}

143
model/damage/role.js Normal file
View file

@ -0,0 +1,143 @@
export const get_let_value = async (let_list, name) => {
if (let_list[name]) {
return let_list[name]
}
return 0
}
export const calculate_damage = async (base_detail, bonus_detail, skill_type, add_skill_type, avatar_element, skill_multiplier, level) => {
let merged_attr = await merge_attribute(base_detail, bonus_detail)
logger.debug('merged_attr', merged_attr);
let attack = merged_attr.attack
logger.debug('攻击区', attack);
let defence_multiplier = await get_defence_multiplier(merged_attr, level);
logger.debug('防御区', defence_multiplier);
let injury_area = await get_injury_area(merged_attr, skill_type, add_skill_type, avatar_element);
logger.debug('增伤区', injury_area);
let damage_ratio = await get_damage_ratio(merged_attr, skill_type, add_skill_type, avatar_element);
logger.debug('易伤区', damage_ratio);
let critical_damage_base = await get_critical_damage_base(merged_attr, skill_type, add_skill_type, avatar_element);
logger.debug('爆伤区', critical_damage_base);
let critical_chance_base = await get_critical_chance_base(merged_attr, skill_type, add_skill_type, avatar_element);
logger.debug('暴击区', critical_chance_base);
let qiwang_damage = critical_chance_base * critical_damage_base
logger.debug('暴击期望', qiwang_damage);
let damagelist = {}
let damage_cd = attack * skill_multiplier * defence_multiplier * injury_area * damage_ratio * critical_damage_base * 1.2 * 1.5
let damage_qw = attack * skill_multiplier * defence_multiplier * injury_area * damage_ratio * qiwang_damage * 1.2 * 1.5
damagelist['cd'] = damage_cd
damagelist['qw'] = damage_qw
return damagelist
};
export const get_critical_chance_base = async (merged_attr, skill_type, add_skill_type, avatar_element) => {
let critical_chance_base = await get_let_value(merged_attr, 'CriticalChanceBase')
let merged_attrkey = Object.keys(merged_attr)
for (const attr of merged_attrkey){
if (attr.search('_CriticalChanceBase') != -1) {
let attr_name = attr.split('_CriticalChanceBase')[0]
if ([skill_type, add_skill_type, 'All', avatar_element].includes(attr_name)) {
logger.debug(attr + '对' + attr_name + '有' + merged_attr[attr] + '暴击加成')
critical_chance_base = critical_chance_base + merged_attr[attr]
}
}
}
critical_chance_base = Math.min(1, critical_chance_base)
return critical_chance_base
}
export const get_critical_damage_base = async (merged_attr, skill_type, add_skill_type, avatar_element) => {
let critical_damage_base = await get_let_value(merged_attr, 'CriticalDamageBase')
let merged_attrkey = Object.keys(merged_attr)
for (const attr of merged_attrkey){
if (attr.search('_CriticalDamageBase') != -1) {
let attr_name = attr.split('_CriticalDamageBase')[0]
if ([skill_type, add_skill_type, 'All', avatar_element].includes(attr_name)) {
logger.debug(attr + '对' + attr_name + '有' + merged_attr[attr] + '爆伤加成')
critical_damage_base = critical_damage_base + merged_attr[attr]
}
}
}
return critical_damage_base + 1
}
export const get_damage_ratio = async (merged_attr, skill_type, add_skill_type, avatar_element) => {
let damage_ratio = await get_let_value(merged_attr, 'DmgRatio')
let merged_attrkey = Object.keys(merged_attr)
for (const attr of merged_attrkey){
if (attr.search('_DmgRatio') != -1) {
let attr_name = attr.split('_DmgRatio')[0]
if ([skill_type, add_skill_type, 'All', avatar_element].includes(attr_name)) {
logger.debug(attr + '对' + attr_name + '有' + merged_attr[attr] + '易伤加成')
damage_ratio = damage_ratio + merged_attr[attr]
}
}
}
return damage_ratio + 1
}
export const get_injury_area = async (merged_attr, skill_type, add_skill_type, avatar_element) => {
let injury_area = 1.0
let merged_attrkey = Object.keys(merged_attr)
for (const attr of merged_attrkey){
if (attr.search('_DmgAdd') != -1) {
let attr_name = attr.split('_DmgAdd')[0]
if ([skill_type, add_skill_type, 'All', avatar_element].includes(attr_name)) {
logger.debug(attr + '对' + attr_name + '有' + merged_attr[attr] + '增伤')
injury_area = injury_area + merged_attr[attr]
}
}
}
return injury_area
}
export const get_defence_multiplier = async (merged_attr, level) => {
/** 计算防御基础值 */
let defadd = (0.155 * (level * level)) + (3.12 * level) + 46.95
/** 计算降防 */
let ignore_defence = 1.0
if (merged_attr.ignore_defence) {
ignore_defence = 1 - merged_attr.ignore_defence
}
/** 计算穿透率 */
let penratio = 1.0
if (merged_attr.PenRatioBase) {
penratio = 1 - merged_attr.PenRatioBase
}
/** 计算穿透值 */
let pendelta = await get_let_value(merged_attr, 'PenDelta')
/** 计算防御乘区 */
let defence_multiplier = defadd / (defadd + ((defadd * ignore_defence) * penratio - pendelta))
return defence_multiplier
}
export const merge_attribute = async (base_detail, bonus_detail) => {
let merged_attr = {}
let bonus_detailkey = Object.keys(bonus_detail)
for (const merged of bonus_detailkey){
if (merged.search('Attack') != -1 || merged.search('Defence') != -1 || merged.search('HP') != -1) {
continue
} else if (merged.search('Base') != -1) {
merged_attr[merged] = await get_let_value(base_detail, merged) + await get_let_value(bonus_detail, merged)
} else {
merged_attr[merged] = await get_let_value(bonus_detail, merged)
}
}
merged_attr['hp'] = await get_let_value(bonus_detail, 'HPDelta') + await get_let_value(base_detail, 'hp') * (await get_let_value(bonus_detail, 'HPAddedRatio') + 1)
merged_attr['attack'] = await get_let_value(bonus_detail, 'AttackDelta') + await get_let_value(base_detail, 'attack') * (await get_let_value(bonus_detail, 'AttackAddedRatio') + 1)
merged_attr['defence'] = await get_let_value(bonus_detail, 'DefenceDelta') + await get_let_value(base_detail, 'defence') * (await get_let_value(bonus_detail, 'DefenceAddedRatio') + 1)
merged_attr['CriticalChanceBase'] = await get_let_value(bonus_detail, 'CriticalChanceBase') + await get_let_value(base_detail, 'CriticalChanceBase')
merged_attr['CriticalDamageBase'] = await get_let_value(bonus_detail, 'CriticalDamageBase') + await get_let_value(base_detail, 'CriticalDamageBase')
merged_attr['PenRatioBase'] = await get_let_value(bonus_detail, 'PenRatioBase') + await get_let_value(base_detail, 'PenRatioBase')
return merged_attr
}

26
model/damage/weapon.js Normal file
View file

@ -0,0 +1,26 @@
import { getMapData } from '../../utils/file.js';
const weapon_effect = getMapData('weapon_effect');
export const get_let_value = async (let_list, name) => {
if (let_list[name]) {
return let_list[name]
}
return 0
}
export const Weapon = async (equipment, base_detail, bonus_detail) => {
if (equipment.id == 14119){
let IceDmgAdd = await get_let_value(bonus_detail, 'Ice_DmgAdd');
bonus_detail['Ice_DmgAdd'] = IceDmgAdd + weapon_effect['14119']['Param']['IceDmgAdd'][equipment.star - 1];
logger.debug('14119,IceDmgAdd');
let CriticalChanceBase = await get_let_value(bonus_detail, 'CriticalChanceBase');
bonus_detail['CriticalChanceBase'] = CriticalChanceBase + weapon_effect['14119']['Param']['CriticalChanceBase'][equipment.star - 1];
}
return bonus_detail;
};
export const weapon_ability = async (equipment, base_detail, bonus_detail) => {
bonus_detail = await Weapon(equipment, base_detail, bonus_detail);
return bonus_detail;
}

View file

@ -0,0 +1,25 @@
{
"1011": "Electric",
"1021": "Physical",
"1031": "Ether",
"1041": "Fire",
"1061": "Physical",
"1081": "Physical",
"1091": "Ice",
"1101": "Fire",
"1111": "Electric",
"1121": "Fire",
"1131": "Ice",
"1141": "Ice",
"1151": "Fire",
"1161": "Electric",
"1181": "Electric",
"1191": "Ice",
"1201": "Ether",
"1211": "Electric",
"1221": "Ether",
"1241": "Ether",
"1251": "Electric",
"1271": "Electric",
"1281": "Physical"
}

View file

@ -0,0 +1,21 @@
{
"12102":["AttackAddedRatio","攻击力百分比"],
"12103":["AttackDelta","攻击力"],
"11102":["HPAddedRatio","生命值百分比"],
"11103":["HPDelta","生命值"],
"13102":["DefenceAddedRatio","防御力百分比"],
"13103":["DefenceDelta","防御力"],
"20103":["CriticalChanceBase","暴击率"],
"21103":["CriticalDamageBase","暴击伤害"],
"12202":["ImpactRatio","冲击力"],
"31203":["ElementMystery","异常精通"],
"31403":["ElementAbnormalPower","异常精通"],
"23203":["PenDelta","穿透值"],
"30502":["SpGetRatio","能量恢复"],
"23103":["PenRatioBase","穿透率"],
"31703":["IceAddedRatio","冰属性伤害提高"],
"31603":["FireAddedRatio","火属性伤害提高"],
"31503":["PhysicalAddedRatio","物理属性伤害提高"],
"31803":["ElectricAddedRatio","电属性伤害提高"],
"31903":["EtherAddedRatio","以太属性伤害提高"]
}

View file

@ -0,0 +1,25 @@
{
"1191": {
"A": [
4.962,5.414,5.866,6.318,6.77,7.22,7.674,8.126,8.578,9.03,9.482,9.934,10.386,10.838,11.29,11.742
],
"C": [
1.582,1.726,1.87,2.014,2.158,2.302,2.446,2.59,2.734,2.878,3.022,3.166,3.31,3.454,3.598,3.742
],
"ES": [
5.533,6.036,6.539,7.042,7.545,8.048,8.551,9.054,9.557,10.06,10.56,11.066,11.569,12.072,12.575,13.078
],
"EH": [
3.772,4.115,4.458,4.801,5.144,5.487,5.83,6.173,6.516,6.859,7.202,7.545,7.888,8.231,8.574,8.917
],
"R": [
18.908,20.627,22.346,24.065,25.784,27.503,29.222,30.941,32.66,34.379,36.098,37.817,39.536,41.255,42.974,44.693
],
"RL": [
7.946,8.669,9.392,10.115,10.838,11.561,12.284,13.007,13.73,14.453,15.176,15.898,16.622,17.345,18.068,18.791
],
"T": [
0.5, 0.583, 0.666, 0.75, 0.833, 0.916, 1
]
}
}

View file

@ -0,0 +1,20 @@
{
"14119": {
"Param": {
"IceDmgAdd": [
0.25,
0.315,
0.38,
0.445,
0.5
],
"CriticalChanceBase": [
0.2,
0.25,
0.3,
0.35,
0.4
]
}
}
}

View file

@ -617,4 +617,16 @@
z-index: 5; z-index: 5;
} }
.damagelist th {
text-align: center;
padding: 0.3em 0.3em;
width:33%;
}
.damagelist td {
text-align: center;
padding: 0.3em 0.3em;
width:33%;
}
/*# sourceMappingURL=card.css.map */ /*# sourceMappingURL=card.css.map */

View file

@ -177,6 +177,29 @@
<% } %> <% } %>
</div> </div>
{{if damagelist}}
<div class="title">
<% include(sys.specialTitle, {en: 'DAMAGE' , cn: '伤害统计' }) %>
</div>
<table class="damagelist">
<thead>
<tr>
<th>类型</th>
<th>暴击伤害</th>
<th>期望伤害</th>
</tr>
</thead>
<tbody>
{{each damagelist damage}}
<tr>
<td>{{damage.title}}</td>
<td>{{damage.value.cd.toFixed(0)}}</td>
<td>{{damage.value.qw.toFixed(0)}}</td>
</tr>
{{/each}}
</tbody>
</table>
{{/if}}
</div> </div>
</div> </div>
{{/block}} {{/block}}

View file

@ -475,3 +475,15 @@
position: relative; position: relative;
z-index: 5; z-index: 5;
} }
.damagelist {
th {
text-align: center;
padding: 0.3em 0.3em;
width:33%;
}
td {
text-align: center;
padding: 0.3em 0.3em;
width:33%;
}
}