更新对e.game的处理逻辑

This commit is contained in:
Kokomi 2023-10-25 03:34:36 +08:00
parent 53674eea86
commit 04badff625
2784 changed files with 622 additions and 691 deletions

View File

@ -1,4 +1,4 @@
import fs from 'fs'
import fs from 'node:fs'
import lodash from 'lodash'
import { exec } from 'child_process'
import { Cfg, Common, Data, Version, App } from '#miao'

View File

@ -1,4 +1,4 @@
import fs from 'fs'
import fs from 'node:fs'
import { promisify } from 'util'
import { pipeline } from 'stream'
import MD5 from 'md5'

View File

@ -1,7 +1,7 @@
import lodash from 'lodash'
import { Data } from '#miao'
import { Character, Weapon } from '#miao.models'
import { poolDetail } from '../../resources/meta/info/index.js'
import { poolDetail } from '../../resources/meta-gs/info/index.js'
import moment from 'moment'
let poolVersion = []

View File

@ -1,5 +1,5 @@
import { Cfg, Common, Data, Version } from '#miao'
import fs from 'fs'
import fs from 'node:fs'
import lodash from 'lodash'
import HelpTheme from './HelpTheme.js'

View File

@ -1,5 +1,5 @@
import lodash from 'lodash'
import fs from 'fs'
import fs from 'node:fs'
import { Data } from '#miao'
let HelpTheme = {

View File

@ -1,4 +1,4 @@
import fs from 'fs'
import fs from 'node:fs'
import lodash from 'lodash'
import cfgData from './cfg/CfgData.js'
import { Version } from '#miao'

View File

@ -1,4 +1,4 @@
import fs from 'fs'
import fs from 'node:fs'
import lodash from 'lodash'
import { Data } from '#miao'

View File

@ -40,7 +40,7 @@ class Artifact extends Base {
get img () {
return this.isGs ?
`meta/artifact/imgs/${this.setName}/${this.idx}.webp` :
`meta-gs/artifact/imgs/${this.setName}/${this.idx}.webp` :
`meta-sr/artifact/${this.setName}/arti-${this.idx}.webp`
}

View File

@ -208,6 +208,9 @@ export default class Avatar extends Base {
// 设置天赋
setTalent (ds = false, mode = 'original', updateTime = '') {
if (!this.char) {
return false
}
const now = this._now || (new Date()) * 1
if (ds) {
let ret = this.char.getAvatarTalent(ds, this.cons, mode)

View File

@ -299,7 +299,7 @@ class Character extends Base {
}
try {
let name = this.isTraveler ? `旅行者/${this.elem}` : this.name
this.meta._detail = Data.readJSON(`resources/meta${this.isSr ? '-sr' : ''}/character/${name}/data.json`, 'miao')
this.meta._detail = Data.readJSON(`resources/meta-${this.game}/character/${name}/data.json`, 'miao')
} catch (e) {
console.log(e)
}

View File

@ -6,8 +6,8 @@ import Base from './Base.js'
import { Data } from '#miao'
import MaterialMeta from './material/MaterialMeta.js'
let data = Data.readJSON('resources/meta/material/data.json','miao')
let abbr = await Data.importDefault('resources/meta/material/abbr.js', 'miao')
let data = Data.readJSON('resources/meta-gs/material/data.json','miao')
let abbr = await Data.importDefault('resources/meta-gs/material/abbr.js', 'miao')
let mMap = {}
let getItem = (ds) => {
mMap[ds.name] = {
@ -72,7 +72,7 @@ class Material extends Base {
}
get img () {
return `meta/material/${this.type}/${this.name}.webp`
return `meta-gs/material/${this.type}/${this.name}.webp`
}
get icon () {

View File

@ -63,7 +63,7 @@ export default class Player extends Base {
let imgs = char?.imgs || {}
return {
face: imgs.face || '/common/item/face.webp',
banner: imgs.banner || `/meta${this.isSr ? '-sr' : ''}/character/common/imgs/banner.webp`
banner: imgs.banner || `/meta-${this.game}/character/common/imgs/banner.webp`
}
}

View File

@ -1,11 +1,11 @@
import fs from 'fs'
import fs from 'node:fs'
import lodash from 'lodash'
import Base from './Base.js'
import { Character } from './index.js'
import DmgBuffs from './dmg/DmgBuffs.js'
import DmgAttr from './dmg/DmgAttr.js'
import DmgCalc from './dmg/DmgCalc.js'
import { Common, MiaoError, Meta } from '#miao'
import { MiaoError, Meta } from '#miao'
export default class ProfileDmg extends Base {
constructor (profile = {}, game = 'gs') {
@ -20,18 +20,11 @@ export default class ProfileDmg extends Base {
static dmgRulePath (name, game = 'gs') {
const _path = process.cwd()
const meta = game === 'sr' ? 'meta-sr' : 'meta'
let path = `${_path}/plugins/miao-plugin/resources/${meta}/character/${name}/calc_user.js`
if (fs.existsSync(path)) {
return path
}
path = `${_path}/plugins/miao-plugin/resources/${meta}/character/${name}/calc_auto.js`
if (fs.existsSync(path) && Common.cfg('teamCalc')) {
return path
}
path = `${_path}/plugins/miao-plugin/resources/${meta}/character/${name}/calc.js`
if (fs.existsSync(path)) {
return path
for (let file of ['calc_user', 'calc_auto', 'calc']) {
let path = `${_path}/plugins/miao-plugin/resources/meta-${game}/character/${name}/${file}.js`
if (fs.existsSync(path)) {
return path
}
}
return false
}

View File

@ -29,7 +29,7 @@ class Weapon extends Base {
}
get img () {
return `${this.isGs ? 'meta' : 'meta-sr'}/weapon/${this.type}/${this.name}/icon.webp`
return `${this.isGs ? 'meta-gs' : 'meta-sr'}/weapon/${this.type}/${this.name}/icon.webp`
}
get abbr () {
@ -41,9 +41,9 @@ class Weapon extends Base {
get imgs () {
if (this.isGs) {
return {
icon: `meta/weapon/${this.type}/${this.name}/icon.webp`,
icon2: `meta/weapon/${this.type}/${this.name}/awaken.webp`,
gacha: `meta/weapon/${this.type}/${this.name}/gacha.webp`
icon: `meta-gs/weapon/${this.type}/${this.name}/icon.webp`,
icon2: `meta-gs/weapon/${this.type}/${this.name}/awaken.webp`,
gacha: `meta-gs/weapon/${this.type}/${this.name}/gacha.webp`
}
} else {
return {
@ -114,7 +114,7 @@ class Weapon extends Base {
if (this._detail) {
return this._detail
}
const path = this.isGs ? 'resources/meta/weapon' : 'resources/meta-sr/weapon'
const path = this.isGs ? 'resources/meta-gs/weapon' : 'resources/meta-sr/weapon'
try {
this._detail = Data.readJSON(`${path}/${this.type}/${this.name}/data.json`, 'miao')
} catch (e) {

View File

@ -117,6 +117,11 @@ let ArtisMark = {
mainKey = 'dmg'
}
fixPct = Math.max(0, Math.min(1, (attrs[mainKey]?.weight || 0) / (posMaxMark['m' + idx])))
if (game === 'gs') {
if (['atk', 'hp', 'def'].includes(mainKey) && attrs[mainKey]?.weight >= 75) {
fixPct = 1
}
}
}
ret += (attrs[mainKey]?.mark || 0) * (mAttr.value || 0) / 4
}
@ -201,7 +206,7 @@ let ArtisMark = {
})
let setData = artis.getSetData()
artis.mark = totalMark
artis.markClass = ArtisMark.getMarkClass(totalMark / 5)
artis.markClass = ArtisMark.getMarkClass(totalMark / (this.isGs ? 5 : 6))
let ret = {
classTitle: charCfg.classTitle,
artis: artisRet,

View File

@ -84,7 +84,7 @@ const ArtisMarkCfg = {
}
let charRule = char.getArtisCfg() || function ({ def }) {
return def(usefulAttr[char.name] || {})
return def(usefulAttr[char.name] || { atk: 75, cpct: 100, cdmg: 100, dmg: 100, phy: 100 })
}
if (charRule) {

View File

@ -1,7 +1,7 @@
import lodash from 'lodash'
import moment from 'moment'
import { Data } from '#miao'
import { chestInfo } from '../../resources/meta/info/index.js'
import { chestInfo } from '../../resources/meta-gs/info/index.js'
import AvatarUtil from './AvatarUtil.js'
const MysAvatar = {

View File

@ -64,7 +64,7 @@ const ProfileAvatar = {
return this.char.getImgs(profile._costume).splash
}
let nPath = `meta/character/${name}`
let nPath = `meta-gs/character/${name}`
let isSuper = false
let talent = profile.talent ? lodash.map(profile.talent, (ds) => ds.original).join('') : ''
if (profile.cons === 6 || ['ACE', 'MAX'].includes(profile.artis?.markClass) || talent === '101010') {

View File

@ -1,8 +1,8 @@
import { Data } from '#miao'
import lodash from 'lodash'
import fs from 'fs'
import fs from 'node:fs'
const charPath = process.cwd() + '/plugins/miao-plugin/resources/meta/character'
const charPath = process.cwd() + '/plugins/miao-plugin/resources/meta-gs/character'
let cfgMap = {
char: {},
async init () {
@ -28,7 +28,7 @@ let cfgMap = {
return fs.existsSync(`${charPath}/${char}/${file}.js`)
},
async getCfg (char, file, module = '') {
let cfg = await Data.importModule(`resources/meta/character/${char}/${file}.js`, 'miao')
let cfg = await Data.importModule(`resources/meta-gs/character/${char}/${file}.js`, 'miao')
if (module) {
return cfg[module]
}

View File

@ -1,7 +1,7 @@
/**
* 角色照片及角色图像资源相关
* */
import fs from 'fs'
import fs from 'node:fs'
import lodash from 'lodash'
import sizeOf from 'image-size'
import { Cfg } from '#miao'
@ -90,8 +90,8 @@ const CharImg = {
if (!['空', '荧', '旅行者'].includes(name)) {
travelerElem = ''
}
const nPath = `/meta/character/${name}/`
const tPath = `/meta/character/旅行者/${travelerElem}/`
const nPath = `/meta-gs/character/${name}/`
const tPath = `/meta-gs/character/旅行者/${travelerElem}/`
let add = (key, path, path2) => {
if (path2 && fs.existsSync(`${rPath}/${nPath}/${path2}.${fileType}`)) {
imgs[key] = `${nPath}${path2}.${fileType}`

View File

@ -14,9 +14,9 @@ import Weapon from './Weapon.js'
import User from './User.js'
import MysApi from './MysApi.js'
for (let game of ['meta', 'meta-sr']) {
for (let game of ['gs', 'sr']) {
for (let type of ['artifact', 'character', 'material', 'weapon']) {
let file = `./plugins/miao-plugin/resources/${game}/${type}/index.js`
let file = `./plugins/miao-plugin/resources/meta-${game}/${type}/index.js`
if (fs.existsSync(file)) {
try {
await import(`file://${process.cwd()}/${file}`)

View File

@ -8,34 +8,36 @@
{{block 'main'}}
<div class="uid">UID {{uid}}</div>
<div class="artis">
{{each artis ds}}
<div class="item arti">
{{if ds && ds.name && ds.main && ds.main.key && ds.main.key!="undefined"}}
<div class="avatar">
<img src="{{_res_path}}{{ds.side}}" onerror="whenError(this)"/>
</div>
<div class="arti-icon">
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
</div>
<div class="head">
<strong>{{ds.name}}</strong>
<span class="mark mark-{{ds.markClass}}"><span>{{ds.mark}}分</span> - {{ds.markClass}}</span>
</div>
<ul class="detail attr">
<li class="arti-main"><span class="title">{{artisKeyTitle[ds.main?.key]}}</span><span class="val">+{{ds.main?.value}}</span>
</li>
{{each ds.attrs attr}}
{{if attr && attr.key}}
<li class="{{ds.charWeight[attr.key]*1 > 79.9 ?`great`:(ds.charWeight[attr.key]*1>0 ? `useful`:`nouse`)}}">
<span class="title">{{if attr.eff}}<i class="eff">{{attr.eff || ''}}</i>{{/if}}{{if attr.upNum}}<i class="up-num up-{{attr.upNum}}"></i>{{/if}}{{artisKeyTitle[attr.key]}}</span>
<span class="val">+{{attr.value}}</span></li>
<div class="profile-cont game-{{game}}">
<div class="artis">
{{each artis ds}}
<div class="item arti">
{{if ds && ds.name && ds.main && ds.main.key && ds.main.key!="undefined"}}
<div class="avatar">
<img src="{{_res_path}}{{ds.side}}" onerror="whenError(this)"/>
</div>
<div class="arti-icon">
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
</div>
<div class="head">
<strong>{{ds.name}}</strong>
<span class="mark mark-{{ds.markClass}}"><span>{{ds.mark}}分</span> - {{ds.markClass}}</span>
</div>
<ul class="detail attr">
<li class="arti-main"><span class="title">{{artisKeyTitle[ds.main?.key]}}</span><span class="val">+{{ds.main?.value}}</span>
</li>
{{each ds.attrs attr}}
{{if attr && attr.key}}
<li class="{{ds.charWeight[attr.key]*1 > 79.9 ?`great`:(ds.charWeight[attr.key]*1>0 ? `useful`:`nouse`)}}">
<span class="title">{{if attr.eff}}<i class="eff">{{attr.eff || ''}}</i>{{/if}}{{if attr.upNum}}<i
class="up-num up-{{attr.upNum}}"></i>{{/if}}{{artisKeyTitle[attr.key]}}</span>
<span class="val">+{{attr.value}}</span></li>
{{/if}}
{{/each}}
</ul>
{{/if}}
{{/each}}
</ul>
{{/if}}
</div>
{{/each}}
</div>
{{/each}}
</div>
{{/block}}
{{/block}}

View File

@ -57,7 +57,6 @@ body,
width: 650px;
position: relative;
z-index: 2;
padding: 0 10px;
}
.artis .no-bg {
opacity: 0;

View File

@ -12,75 +12,76 @@
{{block 'main'}}
{{set ad = artisDetail}}
<div class="basic">
<div class="main-pic"
style="background-image:url({{_res_path}}{{splash}})"></div>
<div class="detail">
<div class="char-name">{{data.name}}</div>
<div class="char-lv">UID {{uid}} - Lv.{{data.level}}
<span class="cons cons-{{data.cons}}">{{data.cons}}命</span></div>
<div class="cont">
<div class="item arti-stat">
<div class="arti-class-title">评分规则:{{charCfg.classTitle}}</div>
<div class="arti-stat-ret">
<div><strong class="mark-{{artisDetail.markClass}}">{{ad.markClass}}</strong><span>圣遗物评级</span></div>
<div><strong>{{ad.mark}}</strong><span>圣遗物总分</span></div>
<div class="profile-cont game-{{game}}">
<div class="basic">
<div class="main-pic"
style="background-image:url({{_res_path}}{{splash}})"></div>
<div class="detail">
<div class="char-name">{{data.name}}</div>
<div class="char-lv">UID {{uid}} - Lv.{{data.level}}
<span class="cons cons-{{data.cons}}">{{data.cons}}命</span></div>
<div class="cont">
<div class="item arti-stat">
<div class="arti-class-title">评分规则:{{charCfg.classTitle}}</div>
<div class="arti-stat-ret">
<div><strong class="mark-{{artisDetail.markClass}}">{{ad.markClass}}</strong><span>圣遗物评级</span></div>
<div><strong>{{ad.mark}}</strong><span>圣遗物总分</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="artis">
<% for(let idx = 1; idx<=(game==='gs'?5:6); idx++) {
let ds = ad?.artis[idx]
%>
{{if idx === 1 && game === 'gs'}}
<div class="item no-bg"></div>
{{/if}}
<div class="item arti {{idx}}">
{{if ds && ds.name && ds.main && ds.main.key && ds.main.key!="undefined"}}
<div class="arti-icon">
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
<span>+{{ds.level}}</span>
</div>
<div class="head">
<strong>{{ds.name}}</strong>
<span class="mark mark-{{ds.markClass}}"><span>{{ds.mark}}分</span> - {{ds.markClass}}</span>
</div>
<ul class="detail attr">
<li class="arti-main">
<span class="title">{{artisKeyTitle[ds.main.key]}}</span>
<span class="val">+{{ds.main.value}}</span>
{{if idx >1 }}
<span class="mark">{{ mark( ds.main.mark / 6 ) }}</span>
{{else}}
<span class="val"> - </span>
{{/if}}
</li>
{{each ds.attrs attr}}
{{if attr.key}}
<li class="{{ad.charWeight[attr.key]*1 > 79.9 ?`great`:(ad.charWeight[attr.key]*1>0 ? `useful`:`nouse`)}}"><span
<div class="artis">
<% for(let idx = 1; idx<=(game==='gs'?5:6); idx++) {
let ds = ad?.artis[idx]
%>
{{if idx === 1 && game === 'gs'}}
<div class="item no-bg"></div>
{{/if}}
<div class="item arti {{idx}}">
{{if ds && ds.name && ds.main && ds.main.key && ds.main.key!="undefined"}}
<div class="arti-icon">
<div class="img" style="background-image:url({{_res_path}}{{ds.img}})"></div>
<span>+{{ds.level}}</span>
</div>
<div class="head">
<strong>{{ds.name}}</strong>
<span class="mark mark-{{ds.markClass}}"><span>{{ds.mark}}分</span> - {{ds.markClass}}</span>
</div>
<ul class="detail attr">
<li class="arti-main">
<span class="title">{{artisKeyTitle[ds.main.key]}}</span>
<span class="val">+{{ds.main.value}}</span>
{{if idx >1 }}
<span class="mark">{{ mark( ds.main.mark / 6 ) }}</span>
{{else}}
<span class="val"> - </span>
{{/if}}
</li>
{{each ds.attrs attr}}
{{if attr.key}}
<li class="{{ad.charWeight[attr.key]*1 > 79.9 ?`great`:(ad.charWeight[attr.key]*1>0 ? `useful`:`nouse`)}}"><span
class="title">{{if attr.eff}}<i class="eff">{{attr.eff || ''}}</i>{{/if}}{{artisKeyTitle[attr.key]}} </span><span
class="val">+{{attr.value}}</span>
<span class="mark">{{ ( 46.6 / 6 / 100 * attr._mark ).toFixed(1) }}</span>
</li>
{{/if}}
{{/each}}
</ul>
<ul class="detail attr mark-calc">
<li style="display:none;"></li>
<li>
<span class="title">总分对齐</span>
<span class="val">
<span class="mark">{{ ( 46.6 / 6 / 100 * attr._mark ).toFixed(1) }}</span>
</li>
{{/if}}
{{/each}}
</ul>
<ul class="detail attr mark-calc">
<li style="display:none;"></li>
<li>
<span class="title">总分对齐</span>
<span class="val">
*{{( 66 / (46.6/6/100 * charCfg.posMaxMark[idx]) * 100).toFixed(1)}}%
</span>
</li>
{{if idx>2 || game==='sr' }}
<li>
<span class="title">最优主词缀</span>
<span class="val">
</li>
{{if idx>2 || game==='sr' }}
<li>
<span class="title">最优主词缀</span>
<span class="val">
{{if game==='sr' && idx<=2 }} - {{else}}
{{if ds.main.title === '充能效率'}}
*100%
@ -89,140 +90,141 @@
*{{(50 + 50 * mainWeight / charCfg.posMaxMark["m"+idx] ).toFixed(0)}}%
{{/if}}{{/if}}
</span>
</li>
</li>
{{/if}}
<li class="result">
<span class="title">最终得分</span>
<span class="mark">{{ds.mark}}</span>
</li>
</ul>
{{/if}}
<li class="result">
<span class="title">最终得分</span>
<span class="mark">{{ds.mark}}</span>
</li>
</ul>
{{/if}}
</div>
<% } %>
</div>
{{if changeProfile}}
<div class="cont">
<div class="cont-footer dmg-desc">
<strong>该面板为非实际数据。当前替换命令:</strong> {{changeProfile}}
</div>
</div>
{{/if}}
<!-- 词条规则 -->
<div class="cont">
<div class="cont-title">
{{data.name}}评分规则: {{charCfg.classTitle}}
</div>
<div class="cont-table mark-table">
<div class="tr thead">
<div class="th">属性</div>
<div>评分权重</div>
<div>词条成长</div>
<div>每点得分</div>
<div>副词条最高分</div>
<div>主词条最高分</div>
</div>
{{each attrMap ds key}}
{{set keyCfg = charCfg.attrs[key]||{} }}
{{if ds.type!== "plus" && keyCfg?.weight > 0}}
<div class="tr">
<div class="th">{{ds.title}}</div>
<div class="td">{{keyCfg?.weight}}</div>
<div class="td">{{ds.text}}</div>
<div class="td">{{charCfg.attrs[key]?.mark > 0 ? (46.6/6 / 100 * charCfg.attrs[key]?.mark).toFixed(2) : "-"}}
<% } %>
</div>
{{if changeProfile}}
<div class="cont">
<div class="cont-footer dmg-desc">
<strong>该面板为非实际数据。当前替换命令:</strong> {{changeProfile}}
</div>
</div>
{{/if}}
<!-- 词条规则 -->
<div class="cont">
<div class="cont-title">
{{data.name}}评分规则: {{charCfg.classTitle}}
</div>
<div class="cont-table mark-table">
<div class="tr thead">
<div class="th">属性</div>
<div>评分权重</div>
<div>词条成长</div>
<div>每点得分</div>
<div>副词条最高分</div>
<div>主词条最高分</div>
</div>
<div class="td">
{{if ['元素伤害','物伤加成','治疗加成'].includes(ds.title)}}
&nbsp; &nbsp; -
{{each attrMap ds key}}
{{set keyCfg = charCfg.attrs[key]||{} }}
{{if ds.type!== "plus" && keyCfg?.weight > 0}}
<div class="tr">
<div class="th">{{ds.title}}</div>
<div class="td">{{keyCfg?.weight}}</div>
<div class="td">{{ds.text}}</div>
<div class="td">{{charCfg.attrs[key]?.mark > 0 ? (46.6/6 / 100 * charCfg.attrs[key]?.mark).toFixed(2) : "-"}}
</div>
<div class="td">
{{if ['元素伤害','物伤加成','治疗加成'].includes(ds.title)}}
&nbsp; &nbsp; -
{{else}}
{{ mark(keyCfg?.weight) }}
{{/if}}
</div>
<div class="td"> {{ mark(keyCfg?.weight / 3 ) }}</div>
</div>
{{/if}}{{/each}}
</div>
<ul class="cont-msg">
<li>每个角色有不同的词条评分权重已隐藏权重为0的词条后续会逐步扩充不同流派的规则</li>
<li>以权重值100的单词条理论最高分46.6分为基准,根据权重值及当前词条成长计算每点得分</li>
<li><strong>词条得分:</strong> 词条数值 * 当前词条每点得分。小攻击、小防御、小生命折算为对应百分比词条进行计分</li>
<li><strong>原始总分(对齐前):</strong>计算所有副词条的评分之和沙杯头三个位置附加25%的主词条评分</li>
</ul>
</div>
<!-- 位置规则 -->
<div class="cont">
<div class="cont-title">
圣遗物评分计算
</div>
<div class="cont-table mark-table">
<div class="tr thead">
<div class="th">位置</div>
{{if game === 'gs'}}
<div>生之花</div>
<div>死之羽</div>
<div>时之沙</div>
<div>空之杯</div>
<div>理之冠</div>
{{else}}
{{ mark(keyCfg?.weight) }}
<div>帽子</div>
<div>手套</div>
<div>衣服</div>
<div>靴子</div>
<div></div>
<div></div>
{{/if}}
</div>
<div class="td"> {{ mark(keyCfg?.weight / 3 ) }}</div>
<div class="tr">
<div class="th">最高分(对齐前)</div>
{{each charCfg.posMaxMark m key}}
{{if key.length === 1}}
<div>{{ mark( m / 6 )}}</div>
{{/if}}
{{/each}}
</div>
<div class="tr">
<div class="th">总分对齐比例</div>
{{each charCfg.posMaxMark m key}}
{{if key.length === 1}}
<div>{{( 66 / (46.6/6/100 * m) * 100).toFixed(1)}}%</div>
{{/if}}
{{/each}}
</div>
<div class="tr">
<div class="th">最优主词缀权重</div>
<div>-</div>
<div>-</div>
<div>{{charCfg.posMaxMark.m3}}</div>
<div>{{charCfg.posMaxMark.m4}}</div>
<div>{{charCfg.posMaxMark.m5}}</div>
</div>
</div>
{{/if}}{{/each}}
<ul class="cont-msg">
<li><strong>总分对齐比例: </strong>根据<strong>{{data.name}}</strong>不同圣遗物位置可选词条及评分计算理论最高原始词条总分。为使不同角色不同位置最终总分对齐规定圣遗物满分为66分。理论总分对齐比例
= 66 / 理论最高原始分 * 100%
</li>
<li><strong>最优主词缀比例: </strong>对主词条词缀非最优的圣遗物进行评分惩罚。若装备的圣遗物主词条不是当前位置的最高权重主词条或元素杯属性不符则依据权重差值比例进行分数扣减最多扣减50%。主词缀为充能时不进行扣减
</li>
<li><strong>最终得分:</strong>圣遗物最终得分 = 原始总分 * 总分对齐比例 * 最优主词缀比例</li>
<li><strong>得分级别:</strong>MAX(&gt;56分) / ACE(&gt;49分) / SSS(&gt;42分) / SS(&gt;35分) / S(&gt;28分) / A / B / C / D
</li>
</ul>
</div>
<ul class="cont-msg">
<li>每个角色有不同的词条评分权重已隐藏权重为0的词条后续会逐步扩充不同流派的规则</li>
<li>以权重值100的单词条理论最高分46.6分为基准,根据权重值及当前词条成长计算每点得分</li>
<li><strong>词条得分:</strong> 词条数值 * 当前词条每点得分。小攻击、小防御、小生命折算为对应百分比词条进行计分</li>
<li><strong>原始总分(对齐前):</strong>计算所有副词条的评分之和沙杯头三个位置附加25%的主词条评分</li>
</ul>
</div>
<!-- 位置规则 -->
<div class="cont">
<div class="cont-title">
圣遗物评分计算
<div class="cont">
<div class="cont-title">圣遗物评分补充说明</div>
<ul class="cont-msg">
<li>圣遗物评分的目标是对角色圣遗物词条进行一个快速的评估,一般来说评分更高的圣遗物可能会更匹配角色</li>
<li>但实际情况下圣遗物各词条的提升并非线性,且需考虑各的词条平衡,故评分仅供参考,请勿过分追求高评分</li>
<li>如需更精准的词条评估请使用 <strong>#{{data.name}}伤害</strong>命令进行伤害及词条侧重分析</li>
<li>当前评分为<strong>喵喵版评分规则</strong>,根据角色实际需求侧重,对不同角色会使用不同的评分逻辑。</li>
<li>喵喵逻辑与通用的评分不同,请勿横向比较分值。当前评分逻辑仍在完善中,如有问题请反馈给喵喵</li>
<li>目前为角色通用逻辑,后期会补充同角色不同流派(例如血牛钟离、暴力芭芭拉)的判定及评分逻辑,以使评分更加精准</li>
</ul>
</div>
<div class="cont-table mark-table">
<div class="tr thead">
<div class="th">位置</div>
{{if game === 'gs'}}
<div>生之花</div>
<div>死之羽</div>
<div>时之沙</div>
<div>空之杯</div>
<div>理之冠</div>
{{else}}
<div>帽子</div>
<div>手套</div>
<div>衣服</div>
<div>靴子</div>
<div></div>
<div></div>
{{/if}}
</div>
<div class="tr">
<div class="th">最高分(对齐前)</div>
{{each charCfg.posMaxMark m key}}
{{if key.length === 1}}
<div>{{ mark( m / 6 )}}</div>
{{/if}}
{{/each}}
</div>
<div class="tr">
<div class="th">总分对齐比例</div>
{{each charCfg.posMaxMark m key}}
{{if key.length === 1}}
<div>{{( 66 / (46.6/6/100 * m) * 100).toFixed(1)}}%</div>
{{/if}}
{{/each}}
</div>
<div class="tr">
<div class="th">最优主词缀权重</div>
<div>-</div>
<div>-</div>
<div>{{charCfg.posMaxMark.m3}}</div>
<div>{{charCfg.posMaxMark.m4}}</div>
<div>{{charCfg.posMaxMark.m5}}</div>
</div>
</div>
<ul class="cont-msg">
<li><strong>总分对齐比例: </strong>根据<strong>{{data.name}}</strong>不同圣遗物位置可选词条及评分计算理论最高原始词条总分。为使不同角色不同位置最终总分对齐规定圣遗物满分为66分。理论总分对齐比例
= 66 / 理论最高原始分 * 100%
</li>
<li><strong>最优主词缀比例: </strong>对主词条词缀非最优的圣遗物进行评分惩罚。若装备的圣遗物主词条不是当前位置的最高权重主词条或元素杯属性不符则依据权重差值比例进行分数扣减最多扣减50%。主词缀为充能时不进行扣减
</li>
<li><strong>最终得分:</strong>圣遗物最终得分 = 原始总分 * 总分对齐比例 * 最优主词缀比例</li>
<li><strong>得分级别:</strong>MAX(&gt;56分) / ACE(&gt;49分) / SSS(&gt;42分) / SS(&gt;35分) / S(&gt;28分) / A / B / C / D
</li>
</ul>
</div>
<div class="cont">
<div class="cont-title">圣遗物评分补充说明</div>
<ul class="cont-msg">
<li>圣遗物评分的目标是对角色圣遗物词条进行一个快速的评估,一般来说评分更高的圣遗物可能会更匹配角色</li>
<li>但实际情况下圣遗物各词条的提升并非线性,且需考虑各的词条平衡,故评分仅供参考,请勿过分追求高评分</li>
<li>如需更精准的词条评估请使用 <strong>#{{data.name}}伤害</strong>命令进行伤害及词条侧重分析</li>
<li>当前评分为<strong>喵喵版评分规则</strong>,根据角色实际需求侧重,对不同角色会使用不同的评分逻辑。</li>
<li>喵喵逻辑与通用的评分不同,请勿横向比较分值。当前评分逻辑仍在完善中,如有问题请反馈给喵喵</li>
<li>目前为角色通用逻辑,后期会补充同角色不同流派(例如血牛钟离、暴力芭芭拉)的判定及评分逻辑,以使评分更加精准</li>
</ul>
</div>
{{/block}}

View File

@ -76,7 +76,6 @@ body, .container {
width: 650px;
position: relative;
z-index: 2;
padding: 0 10px;
.no-bg {
opacity: 0;
@ -121,4 +120,4 @@ body, .container {
}
}
}

View File

@ -143,6 +143,9 @@ body {
.char-attr li .value2 .base {
color: #eee;
}
.char-attr li .value2 .base.zero {
color: #aaaa;
}
.char-attr li .value2 .plus {
color: #90e800;
}
@ -289,42 +292,6 @@ body {
filter: grayscale(100%);
opacity: 0.4;
}
.elem_anemo .talent-icon {
background-image: url(../common/bg/talent-anemo.png);
}
.elem_anemo .container {
background-image: url(../common/bg/bg-anemo.jpg);
}
.elem_cryo .talent-icon {
background-image: url(../common/bg/talent-cryo.png);
}
.elem_cryo .container {
background-image: url(../common/bg/bg-cryo.jpg);
}
.elem_electro .talent-icon {
background-image: url(../common/bg/talent-electro.png);
}
.elem_electro .container {
background-image: url(../common/bg/bg-electro.jpg);
}
.elem_geo .talent-icon {
background-image: url(../common/bg/talent-geo.png);
}
.elem_geo .container {
background-image: url(../common/bg/bg-geo.jpg);
}
.elem_hydro .talent-icon {
background-image: url(../common/bg/talent-hydro.png);
}
.elem_hydro .container {
background-image: url(../common/bg/bg-hydro.jpg);
}
.elem_pyro .talent-icon {
background-image: url(../common/bg/talent-pyro.png);
}
.elem_pyro .container {
background-image: url(../common/bg/bg-pyro.jpg);
}
.data-info {
position: absolute;
bottom: -10px;
@ -402,28 +369,30 @@ body {
.dmg-cont .tr > div.value-none {
box-shadow: none;
}
.dmg-cont .thead {
.dmg-cont .tr.thead {
text-align: center;
}
.dmg-cont .thead > div {
.dmg-cont .tr.thead > div {
color: #d3bc8e;
background: rgba(0, 0, 0, 0.4);
line-height: 40px;
height: 40px;
font-size: 15px;
}
.dmg-cont .title,
.dmg-cont .th {
.dmg-cont .tr .title,
.dmg-cont .tr .th {
color: #d3bc8e;
padding-right: 15px;
text-align: right;
background: rgba(0, 0, 0, 0.4);
min-width: 100px;
font-size: 15px;
}
.profile-mode .dmg-idx {
display: none !important;
}
.profile-mode .dmg-title {
width: 33.3333%;
width: 40%;
}
.dmg-mode .dmg-idx,
.weapon-mode .dmg-idx {
@ -976,6 +945,7 @@ body {
display: table;
color: #fff;
min-height: 100px;
width: 100%;
}
.sr-weapon .weapon-img {
display: table-cell;

View File

@ -60,7 +60,7 @@
{{attr[key]}}
</div>
<div class="value2">
<span class="base">{{attr[key+'Base']}}</span>
<span class="base {{attr[key+'Base'] === '0.0%' ? 'zero':''}}">{{attr[key+'Base']}}</span>
<span class="plus">+{{attr[key+'Plus']}}</span>
</div>

View File

@ -160,6 +160,10 @@ body {
.base {
color: #eee;
&.zero {
color: #aaaa;
}
}
.plus {
@ -347,59 +351,6 @@ body {
}
.elem_anemo .talent-icon {
background-image: url(../common/bg/talent-anemo.png)
}
.elem_anemo .container {
background-image: url(../common/bg/bg-anemo.jpg);
}
.elem_cryo .talent-icon {
background-image: url(../common/bg/talent-cryo.png)
}
.elem_cryo .container {
background-image: url(../common/bg/bg-cryo.jpg);
}
.elem_electro .talent-icon {
background-image: url(../common/bg/talent-electro.png)
}
.elem_electro .container {
background-image: url(../common/bg/bg-electro.jpg);
}
.elem_geo .talent-icon {
background-image: url(../common/bg/talent-geo.png)
}
.elem_geo .container {
background-image: url(../common/bg/bg-geo.jpg);
}
.elem_hydro .talent-icon {
background-image: url(../common/bg/talent-hydro.png)
}
.elem_hydro .container {
background-image: url(../common/bg/bg-hydro.jpg);
}
.elem_pyro .talent-icon {
background-image: url(../common/bg/talent-pyro.png)
}
.elem_pyro .container {
background-image: url(../common/bg/bg-pyro.jpg);
}
.data-info {
position: absolute;
bottom: -10px;
@ -446,13 +397,13 @@ body {
color: #d3bc8e;
padding: 10px 20px;
text-align: left;
}
.cont-title span {
font-size: 12px;
color: #aaa;
margin-left: 10px;
font-weight: normal;
span {
font-size: 12px;
color: #aaa;
margin-left: 10px;
font-weight: normal;
}
}
.cont-footer {
@ -469,49 +420,52 @@ body {
.dmg-cont .tr {
display: table-row;
}
.dmg-cont .tr:nth-child(even) {
background: rgba(0, 0, 0, .4);
}
.dmg-cont .tr:nth-child(odd) {
background: rgba(50, 50, 50, .4);
}
.dmg-cont .tr > div {
display: table-cell;
box-shadow: 0 0 1px 0 #fff;
}
.dmg-cont .tr > div.value-full {
display: table;
width: 200%;
}
.dmg-cont .tr > div.value-none {
box-shadow: none;
}
.dmg-cont .thead {
text-align: center;
}
.dmg-cont .thead > div {
color: #d3bc8e;
background: rgba(0, 0, 0, .4);
line-height: 40px;
height: 40px;
}
.dmg-cont .title,
.dmg-cont .th {
color: #d3bc8e;
padding-right: 15px;
text-align: right;
background: rgba(0, 0, 0, .4);
min-width: 100px;
&:nth-child(even) {
background: rgba(0, 0, 0, .4);
}
&:nth-child(odd) {
background: rgba(50, 50, 50, .4);
}
& > div {
display: table-cell;
box-shadow: 0 0 1px 0 #fff;
&.value-full {
display: table;
width: 200%;
}
&.value-none {
box-shadow: none;
}
}
&.thead {
text-align: center;
& > div {
color: #d3bc8e;
background: rgba(0, 0, 0, .4);
line-height: 40px;
height: 40px;
font-size: 15px;
}
}
.title,
.th {
color: #d3bc8e;
padding-right: 15px;
text-align: right;
background: rgba(0, 0, 0, .4);
min-width: 100px;
font-size: 15px;
}
}
.profile-mode .dmg-idx {
@ -519,7 +473,7 @@ body {
}
.profile-mode .dmg-title {
width: 33.3333%;
width: 40%;
}
.dmg-mode,
@ -1199,6 +1153,7 @@ body {
display: table;
color: #fff;
min-height: 100px;
width: 100%;
.weapon-img {
display: table-cell;

View File

@ -8,58 +8,61 @@
{{block 'main'}}
{{set demo = chars[0]?.abbr || "雷神" }}
<div class="head-box">
<div class="title">#面板列表
<div class="label">UID:{{uid}}</div>
<div class="profile-cont game-{{game}}">
<div class="head-box">
<div class="title">#面板列表
<div class="label">UID:{{uid}}</div>
</div>
{{if msg}}
<div class="label">{{msg}}</div>
{{/if}}
<div class="label">你可以使用<span>#{{demo}}面板</span><span>#{{demo}}伤害</span><span>#{{demo}}圣遗物</span>命令来查看面板信息了
</div>
</div>
{{if msg}}
<div class="label">{{msg}}</div>
{{/if}}
<div class="label">你可以使用<span>#{{demo}}面板</span><span>#{{demo}}伤害</span><span>#{{demo}}圣遗物</span>命令来查看面板信息了</div>
</div>
<div class="cont group-rank-tip {{groupRank?'has-rank':'no-rank'}}">
<div class="cont-title">
{{if !allowRank}}
<span> <i class="group-rank-icon dmg-icon"></i>本面板暂未参与排名,参与要求:{{rankCfg.limitTxt}} </span>
{{else}}
<span>
<div class="cont group-rank-tip {{groupRank?'has-rank':'no-rank'}}">
<div class="cont-title">
{{if !allowRank}}
<span> <i class="group-rank-icon dmg-icon"></i>本面板暂未参与排名,参与要求:{{rankCfg.limitTxt}} </span>
{{else}}
<span>
<i class="group-rank-icon dmg-icon"></i>综合练度排名
<i class="group-rank-icon mark-icon"></i>圣遗物评分排名
</span>
<span class="rank-time">
<span class="rank-time">
排名:本群内 {{rankCfg.time}} 后,通过 #面板 命令查看过的角色数据
</span>
{{/if}}
</div>
</div>
<div class="cont {{groupRank?'has-rank':'no-rank'}}">
<div class="char-list">
{{each chars char}}
<div class="char-item {{char.isNew&&hasNew ?'new-char':''}}">
<div class="item-icon char-icon star{{char.star}}">
<span class="img"
style="background-image:url({{_res_path}}{{char.face}})"></span>
</div>
<span class="name">{{char.abbr}}<span class="cons cons-{{char.cons}}">{{char.cons}}</span></span>
{{if char.groupRank}}
{{set gr = char.groupRank}}
{{set rank = gr.rank >= (rankCfg.number || 15) ? 10:(gr.rank <=3 ? gr.rank : 4)}}
<div class="group-rank rank-{{rank}} rank-type-{{gr.rankType}}">
<span>{{gr.rank}}</span>
</div>
{{/if}}
</div>
{{/each}}
</div>
<div class="cont-footer">
{{if hasNew}}
<span class="new-tip">本次更新角色</span>
{{else}}
<span>{{if updateTime.profile }} 更新时间:{{updateTime.profile }} {{/if}}</span>
{{/if}}
<span class="serv">
<div class="cont {{groupRank?'has-rank':'no-rank'}}">
<div class="char-list">
{{each chars char}}
<div class="char-item {{char.isNew&&hasNew ?'new-char':''}}">
<div class="item-icon char-icon star{{char.star}}">
<span class="img"
style="background-image:url({{_res_path}}{{char.face}})"></span>
</div>
<span class="name">{{char.abbr}}<span class="cons cons-{{char.cons}}">{{char.cons}}</span></span>
{{if char.groupRank}}
{{set gr = char.groupRank}}
{{set rank = gr.rank >= (rankCfg.number || 15) ? 10:(gr.rank <=3 ? gr.rank : 4)}}
<div class="group-rank rank-{{rank}} rank-type-{{gr.rankType}}">
<span>{{gr.rank}}</span>
</div>
{{/if}}
</div>
{{/each}}
</div>
<div class="cont-footer">
{{if hasNew}}
<span class="new-tip">本次更新角色</span>
{{else}}
<span>{{if updateTime.profile }} 更新时间:{{updateTime.profile }} {{/if}}</span>
{{/if}}
<span class="serv">
当前更新服务:{{servName}}
</span>
</div>
</div>
</div>
{{/block}}
{{/block}}

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Some files were not shown because too many files have changed in this diff Show More