2
0
mirror of https://github.com/ctrlcvs/xiaoyao-cvs-plugin.git synced 2024-12-22 11:00:51 +08:00

增加星铁角色图鉴

This commit is contained in:
ctrlcvs 2023-06-27 15:49:56 +08:00
parent cd11506a60
commit 685e9088b4
475 changed files with 34437 additions and 50 deletions

View File

@ -1,7 +1,9 @@
# 1.2.9 # 1.2.9
* 增加星穹铁道武器图鉴 * 增加星穹铁道武器、角色图鉴
* 指令`#于夜色中图鉴` * 指令`#于夜色中图鉴`
* 指令`#希儿图鉴`
* 需要在设置中开启 指令:`#图鉴设置星铁图鉴开启` * 需要在设置中开启 指令:`#图鉴设置星铁图鉴开启`
* 感谢****@小萌新****提供的部分数据
# 1.2.8 # 1.2.8
* 增加`#原神充值` 原神离线充值 * 增加`#原神充值` 原神离线充值
* 增加`#商品列表` * 增加`#商品列表`

View File

@ -1,18 +1,26 @@
import fs from "fs"; import fs from "fs";
import { import {
Cfg,Data Cfg, Data
} from "../components/index.js"; } from "../components/index.js";
import lodash from 'lodash'; import lodash from 'lodash';
import Common from "../components/Common.js"; import Common from "../components/Common.js";
const _path = process.cwd(); const _path = process.cwd();
let pathPlus = `${_path}/plugins/xiaoyao-cvs-plugin/resources/sr/` let pathPlus = `${_path}/plugins/xiaoyao-cvs-plugin/resources/sr/`
export async function AtlasAlias(e,{render}) { export async function AtlasAlias(e, {render}) {
let data =await GetData(e) let data
if(!data) return false data = await GetRoleData(e)
await Common.render(`sr/weapon/index`, { if (data?.url) return sendMsg(e, {render}, data.data, data.url)
data = await GetWeaPonData(e)
if (data?.url) return sendMsg(e, {render}, data.data, data.url)
return false
}
export async function sendMsg(e, {render}, data, url) {
await Common.render(url, {
...data ...data
},{ }, {
e, e,
render, render,
scale: 1.4 scale: 1.4
@ -21,80 +29,187 @@ export async function AtlasAlias(e,{render}) {
} }
export async function GetData(e) { export async function GetRoleData(e) {
let name=e.msg.replace(/\*|#|星铁|(四|4)星|(五|5)星|星穹铁道|图鉴|专武/g,'') let name = e.msg.replace(/\*|#|星铁|星穹铁道|图鉴/g, '')
let roleName = GetRole(name)?.name
if(!roleName){
return false
}
let data = Data.readJSON(pathPlus, `character/${roleName}/data.json`)
let items = Data.readJSON(pathPlus, 'items/data.json')
if(!data) return false
let baseAttr=[{key:'sp',name:'能量',num:data.sp}]
let baseObj={
atk:'攻击力',
hp:'生命值',
def: "防御力",
speed: "速度",
cpct: "暴击率",
cdmg: "暴击伤害",
aggro: "嘲讽"
}
for (const item of Object.keys(data.baseAttr)) {
baseAttr.push({
key:item,
name:baseObj[item],
num: parseInt(data.baseAttr[item])
})
}
let growObj={
atk:'攻击',
hp:'生命',
def: "防御",
speed: "速度",
cpct: "暴击率",
cdmg: "暴击伤害",
aggro: "嘲讽",
effect:"效果命中",
damage:"伤害",
resist:"效果抵抗"
}
let growAttr=[]
for (const item of Object.keys(data.growAttr)) {
growAttr.push({
name:growObj[item]+"强化",
key:item,
num: parseInt(lodash.sum(data.growAttr[item]))+"%"
})
}
let newMaterial = [{...items["213"],num:294},{...items["2"],num: data.rarity==5?89600:834400}]
for (const materialElement of data.materials) {
for (const newMaterialElement of materialElement) {
if([2].includes(newMaterialElement.id * 1)) continue
if (!lodash.map(newMaterial, 'id').includes(newMaterialElement.id)) {
newMaterial.push(newMaterialElement)
} else {
for (let v = 0; v < newMaterial.length; v++) {
if (newMaterial[v].id == newMaterialElement.id) {
newMaterial[v].num += newMaterialElement.num
}
newMaterial[v] = {...items[newMaterial[v].id], ...newMaterial[v]}
}
}
}
}
data.skillMaterial=[]
for (const [index,item] of Object.entries(data.skill_tree)) {
let levelsMaterial=lodash.map(Object.values(item.levels), 'material_list')
for (const levelsMaterialElement of levelsMaterial) {
for (const levelsMaterialElement1 of levelsMaterialElement) {
if (!lodash.map(data.skillMaterial, 'id').includes(levelsMaterialElement1.id)) {
data.skillMaterial.push(levelsMaterialElement1)
} else {
for (let v = 0; v < data.skillMaterial.length; v++) {
if (data.skillMaterial[v].id == levelsMaterialElement1.id) {
data.skillMaterial[v].num += levelsMaterialElement1.num
}
data.skillMaterial[v] = {...items[data.skillMaterial[v].id], ...data.skillMaterial[v]}
}
}
}
}
}
for (const [i,item] of Object.entries(data.skillsData)) {
let newAttributeBuff=[]
if(item?.AttributeBuff&&item.AttributeBuff.length>0){
for (const item1 of item.AttributeBuff) {
let text = item1.replace(/:|/,":").split(':')
newAttributeBuff.push({
key:text[0],
isType:text[0].includes('额外')?"extra":"attribute",
value:text[1]
})
}
}
data.skillsData[i].newAttributeBuff=newAttributeBuff
}
data.materials = newMaterial
data.baseAttr=baseAttr
data.growAttr=growAttr
return {data,url: 'sr/character/index'}
}
export async function GetWeaPonData(e) {
let name = e.msg.replace(/\*|#|星铁|(四|4)星|(五|5)星|星穹铁道|图鉴|专武/g, '')
let list = Data.readJSON(pathPlus, 'weapon/data.json') let list = Data.readJSON(pathPlus, 'weapon/data.json')
let items = Data.readJSON(pathPlus, 'items/data.json') let items = Data.readJSON(pathPlus, 'items/data.json')
let role=GetRole(name) let role = GetRole(name)
let isUp=false; let isUp = false;
if(role) { if (role) {
name=role.name name = role.name
isUp=true isUp = true
} }
let roleData,roleList =[]; let roleData, roleList = [];
lodash.forEach(list,(v,k)=>{ lodash.forEach(list, (v, k) => {
if(isUp&&v.belongRole.includes(name)){ if (isUp && v.belongRole.includes(name)) {
roleList.push(v) roleList.push(v)
return return
}else if([v.name,...v.names,...v?.suitRole].includes(name)&&!isUp){ } else if ([v.name, ...v.names, ...v?.suitRole].includes(name) && !isUp) {
roleList.push(v) roleList.push(v)
return return
} }
}) })
let isUp4=/4|四/.test(e.msg) let isUp4 = /4|四/.test(e.msg)
let isUp5=/5|五/.test(e.msg) let isUp5 = /5|五/.test(e.msg)
if(roleList.length==0) return false if (roleList.length == 0) return false
roleData=roleList[0] roleData = roleList[0]
for (const role of roleList) { for (const role of roleList) {
if(isUp4&&role.star==4){ if (isUp4 && role.star == 4) {
roleData=role roleData = role
}else if (isUp5&&role.star==5){ } else if (isUp5 && role.star == 5) {
roleData=role roleData = role
}else if(!isUp4&&!isUp5&&roleData.star<role.star){ } else if (!isUp4 && !isUp5 && roleData.star < role.star) {
roleData=role roleData = role
} }
} }
if(roleData){ if (roleData) {
let newMaterial=[] let newMaterial = []
for (const materialElement of roleData.material) { for (const materialElement of roleData.material) {
for (const newMaterialElement of materialElement) { for (const newMaterialElement of materialElement) {
if(!lodash.map(newMaterial,'id').includes(newMaterialElement.id)&&![2].includes(newMaterialElement.id*1)){ if (!lodash.map(newMaterial, 'id').includes(newMaterialElement.id) && ![2].includes(newMaterialElement.id * 1)) {
newMaterial.push(newMaterialElement) newMaterial.push(newMaterialElement)
}else{ } else {
for (let v =0;v<newMaterial.length;v++) { for (let v = 0; v < newMaterial.length; v++) {
if(newMaterial[v].id==newMaterialElement.id){ if (newMaterial[v].id == newMaterialElement.id) {
newMaterial[v].num+=newMaterialElement.num newMaterial[v].num += newMaterialElement.num
} }
newMaterial[v]={...items[newMaterial[v].id],...newMaterial[v]} newMaterial[v] = {...items[newMaterial[v].id], ...newMaterial[v]}
} }
} }
} }
} }
roleData.material=newMaterial roleData.material = newMaterial
for (const item of Object.keys(roleData.fullValues)) { for (const item of Object.keys(roleData.fullValues)) {
let {base,stop} = roleData.fullValues[item] let {base, stop} = roleData.fullValues[item]
roleData.fullValues[item]={ roleData.fullValues[item] = {
base: parseInt(base),stop:parseInt(stop) base: parseInt(base), stop: parseInt(stop)
} }
} }
let suitRole=[] let suitRole = []
for (const item of roleData.suitRole) { for (const item of roleData.suitRole) {
let list=GetRole(item) let list = GetRole(item)
if(roleData.belongRole.includes(item)) list.isUp=true if (roleData.belongRole.includes(item)) list.isUp = true
suitRole.push(list) suitRole.push(list)
} }
roleData.suitRole=suitRole roleData.suitRole = suitRole
} }
return roleData return {data: roleData, url: `sr/weapon/index`}
} }
let GetRole=(name)=>{
let GetRole = (name) => {
let list = Data.readJSON(pathPlus, 'character/data.json') let list = Data.readJSON(pathPlus, 'character/data.json')
let role; let role;
lodash.forEach(list,(v,k)=>{ lodash.forEach(list, (v, k) => {
if([v.name,...v.names].includes(name)){ if ([v.name, ...v.names].includes(name)) {
role=v role = v
} }
}) })
return role return role

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,520 @@
@font-face {
font-family: HYWenHei;
src: url(../../font/HYWenHei.ttf);
}
@font-face {
font-family: MiSans-Regular;
src: url(../../font/MiSans-Regular.ttf);
}
@font-face {
font-family: MiSans-Medium;
src: url(../../font/MiSans-Medium.ttf);
}
@font-face {
font-family: MiSans-Bold;
src: url(../../font/MiSans-Bold.ttf);
}
@font-face {
font-family: HYWenHei-Hew;
src: url(../../font/HYWenHei-55W.ttf);
}
@font-face {
font-family: MiSans-Normal;
src: url(../../font/MiSans-Normal.ttf);
}
@font-face {
font-family: MiSans-Demibold;
src: url(../../font/MiSans-Demibold.ttf);
}
@font-face {
font-family: AKZIDENZ_GROTESK_EXTRABOLDALT;
src: url(../../font/AKZIDENZ_GROTESK_EXTRABOLDALT.ttf);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
user-select: none;
}
body {
font-size: 18px;
color: #1e1f20;
font-family: Number, YS2, PingFangSC-Medium, PingFang SC, sans-serif;
transform: scale(1.4);
transform-origin: 0 0;
width: 1600px;
position: relative;
}
img {
width: 100%;
height: 100%;
}
.container {
width: 1600px;
background-color: rgb(230, 230, 230);
/* background-image: url('image/背景.png'); */
/* height: 900px; */
}
.body-top {
height: 700px;
width: 1600px;
position: relative;
background-color: #fff;
overflow: hidden;
}
.body-top-left {
width: 700px;
position: absolute;
left: -80px;
}
.body-top-left div:nth-child(1) {
position: absolute;
height: 930px;
width: 930px;
transform: scale(1.5);
z-index: 2;
top: -110px;
}
.body-top-left div:nth-child(2) {
filter: grayscale(100%);
position: absolute;
height: 930px;
width: 930px;
transform: scale(1.5);
top: -110px;
left: 450px;
z-index: 1;
opacity: 0.2;
}
.body-top-zz {
height: 700px;
position: absolute;
width: 100%;
opacity: 0.3;
/* background: repeating-linear-gradient(125deg, #fff, #fff 4px, #808080 5px, #808080 2px); */
}
.border {
margin: 20px;
width: 1560px;
position: absolute;
height: calc(100% - 40px);
border: 2px solid #2a2625;
opacity: 0.6;
z-index: 999999;
}
.body-top-right {
position: absolute;
right: 50px;
width: 630px;
top: 50px;
height: 620px;
z-index: 9;
}
.body-top-right-name {
display: flex;
justify-content: flex-end;
}
.body-top-right-name>div:nth-child(1) {
margin-right: 21px;
text-align: right;
font-size: 72px;
color: #000000;
font-family: 'MiSans-bold';
}
.body-top-right-star {
position: absolute;
display: flex;
justify-content: end;
right: 100px;
z-index: 2;
flex-wrap: wrap;
align-content: flex-end;
}
.body-top-right-star-img {
width: 80px;
height: 80px;
margin-right: -11px;
}
.body-top-right-star-img:last-child {
left: 0px;
}
.body-top-right-name-attribute div {
width: 80px;
}
.body-top-right-roleInfo-item,
.body-top-right-roleInfo-list {
display: flex;
justify-content: space-between;
margin-top: 10px;
}
.body-top-right-roleInfo-item>div,
.body-top-right-roleInfo-list>div {
width: 100%;
display: flex;
justify-content: space-between;
background-color: rgba(242, 242, 242, 0.9);
height: 50px;
width: 300px;
padding: 0 30px;
align-items: center;
border: 2px solid rgba(204, 204, 204, 0.9);
outline: 2px solid #fff;
border-radius: 4px 30px 4px 4px;
color: #333333;
font-size: 24px;
font-family: 'MiSans-Regular';
}
.body-top-right-roleInfo-list {
flex-wrap: wrap;
margin-top: 0;
}
.body-top-right-roleInfo-list>div,
.cvsSet {
width: 120px;
height: 80px;
flex-direction: column;
justify-content: center;
font-size: 30px;
padding: 0;
margin-top: 10px;
}
.cvsSet{
width: 247px !important;
}
.body-top-right-roleInfo-list>div>div:nth-child(1) {
font-family: 'AKZIDENZ_GROTESK_EXTRABOLDALT';
}
.body-top-right-roleInfo-list>div>div:nth-child(2) {
font-size: 16px;
font-family: 'AKZIDENZ_GROTESK_EXTRABOLDALT';
}
.body-top-right-roleInfo-list:last-child>div {
width: 190px;
height: 80px;
position: relative;
}
.body-top-right-roleInfo-list:last-child>div>div:nth-child(1) {
position: absolute;
width: 16px;
height: 76px;
left: 0;
background-color: #dac291;
border-radius: 4px 0 0 4px;
}
.body-top-right-roleInfo-list:last-child>div>div:nth-child(2) {
font-size: 30px;
font-family: 'AKZIDENZ_GROTESK_EXTRABOLDALT';
}
.body-top-right-roleInfo-list:last-child>div>div:nth-child(3) {
font-size: 16px;
font-family: 'AKZIDENZ_GROTESK_EXTRABOLDALT';
}
.fontFamily_Medium {
font-family: 'MiSans-Medium';
}
.fontFamily_Regular {
font-family: 'MiSans-Regular';
}
.icon_left {
position: absolute;
background-image: url(img/四角图标.png);
top: 1px;
left: 1px;
width: 192px;
height: 192px;
z-index: 6;
}
.icon_right {
position: absolute;
background-image: url(img/四角图标.png);
top: 1px;
left: 1407px;
width: 192px;
height: 192px;
z-index: 6;
transform: rotate(90deg);
}
.icon_left_bottom {
position: absolute;
background-image: url(img/四角图标.png);
bottom: 1px;
left: 1px;
width: 192px;
height: 192px;
z-index: 6;
transform: rotate(270deg);
}
.icon_right_bottom {
position: absolute;
background-image: url(img/四角图标.png);
bottom: 1px;
left: 1407px;
width: 192px;
height: 192px;
z-index: 6;
transform: rotate(180deg);
}
.background_Tm {
width: 100%;
height: 700px;
position: absolute;
z-index: 1;
opacity: 0.5;
background-color: #fff;
}
.body-content {
margin: 30px 20px 0px;
padding-bottom: 40px;
}
.role-levet {
width: calc(100% - 60px);
display: flex;
justify-content: space-between;
margin-left: 30px;
flex-wrap: wrap;
margin-bottom: 15px;
}
.role-levet-left {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
/*width: 990px;*/
}
.roleInfo-item {
width: 480px;
height: 100px;
display: flex;
justify-content: space-between;
position: relative;
align-items: center;
background-color: rgba(242, 242, 242, 0.9);
border: 2px solid rgba(204, 204, 204, 0.9);
outline: 2px solid #fff;
border-radius: 8px;
margin-bottom: 15px;
font-size: 32px;
font-family: 'MiSans-Regular';
}
.roleInfo-item>div:nth-child(1) {
position: absolute;
width: 16px;
height: 96px;
left: 0;
border-radius: 6px 0 0 6px;
}
.infoColor2 {
background-color: #8bddb8;
}
.infoColor3 {
background-color: #80aeee;
}
.infoColor4 {
background-color: #ba98f8;
}
.infoColor5 {
background-color: #f7d07e;
}
.roleInfo-item>div:nth-child(2) {
width: 70px;
height: 70px;
margin: 0 30px;
border-radius: 50%;
background-color: #e6e6e6;
}
.roleInfo-item>div:nth-child(3) {
flex: 1 auto;
}
.roleInfo-item>div:nth-child(4) {
margin-right: 34px;
}
.role-levet-right {
width: 480px;
margin-bottom: 15px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-size: 30px;
color: #000000;
position: relative;
border-radius: 8px;
}
.role-levet-right-bg {
position: absolute;
background-image: url('./img/条纹.png');
opacity: 0.2;
top: 0;
width: 100%;
height: 100%;
border-radius: 8px;
}
.role-title {
background-color: #2a2625;
width: 100%;
height: 60px;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
margin-top: 15px;
}
.role-title div {
width: 50px;
flex-shrink: 0;
height: 50px;
margin: 0 35px;
}
.role-title>div:nth-child(2) {
width: 100%;
flex: 1 auto;
text-align: center;
/*color: #fff;*/
justify-content: center;
align-items: center;
display: flex;
font-size: 36px;
font-family: 'MiSans-Demibold';
color:#d6c297;
}
.role-talent {
display: flex;
justify-content: space-between;
position: relative;
align-items: center;
font-size: 36px;
color: #333333;
margin: 0 30px 0 60px;
background-color: #b2b2b2;
height: 60px;
}
.role-talent>div:nth-child(1) {
width: 60px;
height: 60px;
background-image: url('img/技能图标.png');
position: absolute;
left: -30px;
z-index: 9;
}
.role-talent-bg {
background-image: url(img/条纹.png);
background-color: #b2b2b2;
width: 100%;
position: absolute;
top: 0;
height: 60px;
z-index: 0;
opacity: 0.2;
}
.role-talent>div:nth-child(2) {
margin-left: 30px;
z-index: 9;
font-family: 'MiSans-Demibold';
}
.role-talent>div:nth-child(3) {
margin-left: 30px;
z-index: 9;
font-family: 'MiSans-Regular';
}
.role-talent-text {
/*display: flex;*/
width: 1440px;
justify-content: left;
margin: 0 92px;
font-family: 'MiSans-Regular';
font-size: 36px;
color: #2a2625;
margin-top: 15px;
margin-bottom: 15px;
word-wrap: break-word;
}
.role-talent-extra,.role-talent-attribute{
display: flex;
justify-content: left;
margin: 0 30px 0 60px;
padding-left: 30px;
font-family: 'MiSans-Demibold';
font-size: 36px;
color: #2a2625;
margin-top: 30px;
margin-bottom: 30px;
background-color: #d9d9d9;
}
.role-talent-extra>.role-talent-extraInfo:nth-child(2){
font-family: 'MiSans-Regular';
margin-left: 30px;
}
.role-talent-attribute>.role-talent-extraInfo:nth-child(2){
font-family: 'MiSans-Regular';
margin-left: 30px;
}
.role-talent-attribute{
background-color: #f2f2f2;
}
.textColor {
background: linear-gradient(to right, rgba(253,78,53) 0%, rgba(225,42,110)) 100%;
-webkit-background-clip: text;
color: transparent;
font-weight: 600;
}

View File

@ -0,0 +1,208 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<link rel="shortcut icon" href="#"/>
<link rel="stylesheet" type="text/css" href="{{_layout_path}}sr/character/index.css?v=1.0"/>
</head>
<body>
<div class="container">
<div class="border"></div>
<div class="icon_left"></div>
<div class="icon_right"></div>
<div class="icon_left_bottom"></div>
<div class="icon_right_bottom"></div>
<div class="background_Tm"></div>
<div class="body-top">
<div class="body-top-left">
<div>
<img src="{{_layout_path}}sr/{{portrait}}" alt="">
</div>
<div>
<img src="{{_layout_path}}sr/{{portrait}}" alt="">
</div>
</div>
<div class="body-top-zz">
<img src="{{_layout_path}}sr/character/img/条纹.png" alt="">
</div>
<div class="body-top-right">
<div class="body-top-right-name">
<div>
<div>{{name}}</div>
<div class="body-top-right-star">
<% for(var i = 0; i < rarity; i++){ %>
<div class="body-top-right-star-img">
<img src="{{_layout_path}}sr/character/img/星.png" alt="">
</div>
<% } %>
</div>
</div>
<div class="body-top-right-name-attribute">
<div>
<img src="{{_layout_path}}sr/character/img/命途/{{path}}.png" alt="">
</div>
<div>
<img src="{{_layout_path}}sr/character/img/属性/{{element}}.png" alt="">
</div>
</div>
</div>
<div class="body-top-right-roleInfo">
<div class="body-top-right-roleInfo-item">
<div>
<div>命途</div>
<div class="fontFamily_Medium">{{path}}</div>
</div>
<div>
<div>属性</div>
<div class="fontFamily_Medium">{{element}}</div>
</div>
</div>
<div class="body-top-right-roleInfo-item">
<div>
<div>派系</div>
<div class="fontFamily_Medium">{{factions}}</div>
</div>
<div>
<div>所属</div>
<div class="fontFamily_Medium">{{affiliation}}</div>
</div>
</div>
<div class="body-top-right-roleInfo-item">
<div style="width: 100%;">
<div>配音</div>
<div>中:{{cncv}} / 日:{{jpcv}}</div>
</div>
</div>
<div class="body-top-right-roleInfo-list">
{{each baseAttr list}}
<div>
<div>{{list.num}}</div>
<div>{{list.name}}</div>
</div>
{{/each}}
<div class="cvsSet">
<div >xiaoyao-cvs</div>
<div class="fontFamily_Regular">制作</div>
</div>
</div>
<div class="body-top-right-roleInfo-list">
{{each growAttr list}}
<div>
<div></div>
<div>{{list.num}}</div>
<div>{{list.name}}</div>
</div>
{{/each}}
</div>
</div>
</div>
</div>
<div class="body-content">
<div class="role-title">
<div>
<img src="{{_layout_path}}sr/character/img/星2.png" alt="">
</div>
<div >升级消耗(Lv1-Lv80)</div>
<div>
<img src="{{_layout_path}}sr/character/img/星2.png" alt="">
</div>
</div>
<div class="role-levet">
<div class="role-levet-left">
{{each materials list}}
<div class="roleInfo-item">
<div class="infoColor{{list.rarity}}"></div>
<div><img src="{{_layout_path}}sr/{{list.icon}}" alt=""></div>
<div>{{list.name}}</div>
<div>×{{list.num}}</div>
</div>
{{/each}}
</div>
<!-- <div class="role-levet-right">-->
<!-- <div class="role-levet-right-bg"></div>-->
<!-- <div>升级消耗</div>-->
<!-- <div>(Lv1-Lv80)</div>-->
<!-- </div>-->
</div>
<div class="role-title">
<div>
<img src="{{_layout_path}}sr/character/img/星2.png" alt="">
</div>
<div >角色行迹</div>
<div>
<img src="{{_layout_path}}sr/character/img/星2.png" alt="">
</div>
</div>
<div class="role-levet">
{{each skillMaterial list}}
<div class="roleInfo-item">
<div class="infoColor{{list.rarity}}"></div>
<div><img src="{{_layout_path}}sr/{{list.icon}}" alt=""></div>
<div>{{list.name}}</div>
<div>×{{list.num}}</div>
</div>
{{/each}}
</div>
{{each skillsData list}}
<div class="role-talent">
<div>
<img style="transform: scale(0.7);" src="{{_layout_path}}sr/{{list.icon}}" alt="">
</div>
<div>
{{list.name}}
</div>
<div style="margin-right: {{list.max_level==1?"15px":0}}">
{{list.type_text}} {{if(list.max_level!=1)}}Lv1-Lv{{list.max_level}}{{/if}}
</div>
<div class="role-talent-bg"></div>
</div>
<div class="role-talent-text">
{{@list.desc}}
</div>
{{each list.newAttributeBuff item}}
{{if item.isType=="attribute"}}
<div class="role-talent-{{item.isType}}">
<div class="role-talent-extraInfo">{{item.key}}</div>
<div class="role-talent-extraInfo">{{item.value}}</div>
</div>
{{else}}
<div class="role-talent-{{item.isType}}">
<div class="role-talent-extraInfo">{{item.key}}</div>
<div class="role-talent-extraInfo"></div>
</div>
<div class="role-talent-text">
{{@item.value}}
</div>
{{/if }}
{{/each}}
{{/each}}
<div class="role-title">
<div>
<img src="{{_layout_path}}sr/character/img/星2.png" alt="">
</div>
<div>星魂</div>
<div>
<img src="{{_layout_path}}sr/character/img/星2.png" alt="">
</div>
</div>
{{each eidolons list}}
<div class="role-talent">
<div>
<img style="transform: scale(0.7);" src="{{_layout_path}}sr/{{list.icon}}" alt="">
</div>
<div>
{{list.name}}
</div>
<div></div>
<div class="role-talent-bg"></div>
</div>
<div class="role-talent-text">
{{list.effect}}
</div>
{{/each}}
</div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

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