feat: card
3
.gitignore
vendored
|
|
@ -6,3 +6,6 @@ config/**/*.*
|
||||||
|
|
||||||
data/**/*.*
|
data/**/*.*
|
||||||
!data/.gitkeep
|
!data/.gitkeep
|
||||||
|
|
||||||
|
resources/images/**/*.*
|
||||||
|
!resources/images/.gitkeep
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,8 @@ export class Card extends ZZZPlugin {
|
||||||
}
|
}
|
||||||
async card() {
|
async card() {
|
||||||
const { api, deviceFp } = await this.getAPI();
|
const { api, deviceFp } = await this.getAPI();
|
||||||
const userData = await this.getPlayerInfo();
|
if (!api) return false;
|
||||||
if (!userData) return false;
|
await this.getPlayerInfo();
|
||||||
let indexData = await api.getData('zzzIndex', { deviceFp });
|
let indexData = await api.getData('zzzIndex', { deviceFp });
|
||||||
indexData = await api.checkCode(this.e, indexData, 'zzzIndex', {});
|
indexData = await api.checkCode(this.e, indexData, 'zzzIndex', {});
|
||||||
if (!indexData || indexData.retcode !== 0) {
|
if (!indexData || indexData.retcode !== 0) {
|
||||||
|
|
@ -32,6 +32,7 @@ export class Card extends ZZZPlugin {
|
||||||
indexData = indexData.data;
|
indexData = indexData.data;
|
||||||
indexData = new ZZZIndexResp(indexData);
|
indexData = new ZZZIndexResp(indexData);
|
||||||
this.e.playerCard.player.region_name = indexData.stats.world_level_name;
|
this.e.playerCard.player.region_name = indexData.stats.world_level_name;
|
||||||
|
await indexData.get_assets();
|
||||||
const data = {
|
const data = {
|
||||||
card: indexData,
|
card: indexData,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -71,13 +71,14 @@ export class GachaLog extends ZZZPlugin {
|
||||||
this.getLog(key);
|
this.getLog(key);
|
||||||
}
|
}
|
||||||
async getLog(key) {
|
async getLog(key) {
|
||||||
|
const uid = await this.getUID();
|
||||||
const lastQueryTime = await redis.get(`ZZZ:GACHA:${uid}:LASTTIME`);
|
const lastQueryTime = await redis.get(`ZZZ:GACHA:${uid}:LASTTIME`);
|
||||||
if (lastQueryTime && Date.now() - lastQueryTime < 1000 * 60 * 5) {
|
if (lastQueryTime && Date.now() - lastQueryTime < 1000 * 60 * 5) {
|
||||||
await this.reply('1分钟内只能刷新一次,请稍后重试');
|
await this.reply('1分钟内只能刷新一次,请稍后重试');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
await redis.set(`ZZZ:GACHA:${uid}:LASTTIME`, Date.now());
|
await redis.set(`ZZZ:GACHA:${uid}:LASTTIME`, Date.now());
|
||||||
const uid = await this.getUID();
|
this.reply('正在更新抽卡记录,可能需要一段时间,请耐心等待');
|
||||||
const data = await updateGachaLog(key, uid);
|
const data = await updateGachaLog(key, uid);
|
||||||
let msg = `抽卡记录更新成功,共${Object.keys(data).length}个卡池`;
|
let msg = `抽卡记录更新成功,共${Object.keys(data).length}个卡池`;
|
||||||
for (const name in data) {
|
for (const name in data) {
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ export class Note extends ZZZPlugin {
|
||||||
}
|
}
|
||||||
async note() {
|
async note() {
|
||||||
const { api, deviceFp } = await this.getAPI();
|
const { api, deviceFp } = await this.getAPI();
|
||||||
const userData = await this.getPlayerInfo();
|
if (!api) return false;
|
||||||
if (!userData) return false;
|
await this.getPlayerInfo();
|
||||||
let noteData = await api.getData('zzzNote', { deviceFp });
|
let noteData = await api.getData('zzzNote', { deviceFp });
|
||||||
noteData = await api.checkCode(this.e, noteData, 'zzzNote', {});
|
noteData = await api.checkCode(this.e, noteData, 'zzzNote', {});
|
||||||
if (!noteData || noteData.retcode !== 0) {
|
if (!noteData || noteData.retcode !== 0) {
|
||||||
|
|
|
||||||
101
defSet/atlas.yaml
Normal file
|
|
@ -0,0 +1,101 @@
|
||||||
|
「11号」:
|
||||||
|
- 十一号
|
||||||
|
- 十一
|
||||||
|
- 11号
|
||||||
|
- '11'
|
||||||
|
- 「11号」
|
||||||
|
艾莲:
|
||||||
|
- 爱莲
|
||||||
|
- 爱怜
|
||||||
|
- 艾莲·乔
|
||||||
|
- 鲨鱼妹
|
||||||
|
- 鲨鱼
|
||||||
|
安东:
|
||||||
|
- 安东
|
||||||
|
- 安东·伊万诺夫
|
||||||
|
本:
|
||||||
|
- 熊本
|
||||||
|
- 熊本熊
|
||||||
|
- ben
|
||||||
|
- 比格
|
||||||
|
- 本·比格
|
||||||
|
比利:
|
||||||
|
- 比例
|
||||||
|
- bili
|
||||||
|
- 比利·奇德
|
||||||
|
- Billy
|
||||||
|
苍角:
|
||||||
|
- 苍绝
|
||||||
|
- 仓角
|
||||||
|
- 仓脚
|
||||||
|
格莉丝:
|
||||||
|
- 格利斯
|
||||||
|
- 格莉丝·霍华德
|
||||||
|
珂蕾妲:
|
||||||
|
- 柯雷妲
|
||||||
|
- 珂雷哒
|
||||||
|
- 柯蕾妲
|
||||||
|
猫又:
|
||||||
|
- 猫猫
|
||||||
|
- 猫妖
|
||||||
|
- 猫怪
|
||||||
|
- 猫鼬
|
||||||
|
- 猫宫 又奈
|
||||||
|
- 猫宫又奈
|
||||||
|
- 又奈
|
||||||
|
- Neko
|
||||||
|
- neko
|
||||||
|
妮可:
|
||||||
|
- 尼克
|
||||||
|
- 妮克
|
||||||
|
- 妮寇
|
||||||
|
- 妮可·德玛拉
|
||||||
|
- Nicole
|
||||||
|
朱鸢:
|
||||||
|
- 朱元
|
||||||
|
丽娜:
|
||||||
|
- 莉娜
|
||||||
|
- 李娜
|
||||||
|
- 亚历山德丽娜·莎芭丝缇安
|
||||||
|
- rina
|
||||||
|
莱卡恩:
|
||||||
|
- 冯·莱卡恩
|
||||||
|
安比:
|
||||||
|
- 安比
|
||||||
|
- 安笔
|
||||||
|
可琳:
|
||||||
|
- 克林
|
||||||
|
- 柯林
|
||||||
|
- 可林
|
||||||
|
雅:
|
||||||
|
- 星见雅
|
||||||
|
- 星见
|
||||||
|
露西:
|
||||||
|
- 路西
|
||||||
|
- 露西亚娜·德·蒙特夫
|
||||||
|
- 露西亚娜
|
||||||
|
- 鲁西
|
||||||
|
莱特:
|
||||||
|
- 赖特
|
||||||
|
- Lighter
|
||||||
|
悠真:
|
||||||
|
- 悠
|
||||||
|
- 浅羽悠真
|
||||||
|
- 浅羽
|
||||||
|
柳:
|
||||||
|
- 月城
|
||||||
|
- 月城柳
|
||||||
|
青衣:
|
||||||
|
- 青医
|
||||||
|
赛斯:
|
||||||
|
- 赛斯·洛威尔
|
||||||
|
- 塞斯
|
||||||
|
- 洛威尔
|
||||||
|
派派:
|
||||||
|
- 拍拍
|
||||||
|
- 韦尔
|
||||||
|
- 派派·韦尔
|
||||||
|
哲:
|
||||||
|
- 哲
|
||||||
|
铃:
|
||||||
|
- 铃
|
||||||
86
lib/convert/char.js
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
import settings from '../settings.js';
|
||||||
|
import PartnerId2SpriteId from '../../resources/map/PartnerId2SpriteId.json';
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} id
|
||||||
|
* @param {boolean} full 显示全称
|
||||||
|
* @param {boolean} en 是否为英文
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const IDToCharName = (id, full = true, en = false) => {
|
||||||
|
const data = PartnerId2SpriteId?.[id];
|
||||||
|
if (!data) return null;
|
||||||
|
if (en) return data?.['en_name'];
|
||||||
|
if (full) return data?.['full_name'];
|
||||||
|
return data?.['name'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} id
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const IDToCharSprite = id => {
|
||||||
|
const data = PartnerId2SpriteId?.[id];
|
||||||
|
if (!data) return null;
|
||||||
|
return data?.['sprite'];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} name
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const charNameToID = name => {
|
||||||
|
for (const [id, data] of Object.entries(PartnerId2SpriteId)) {
|
||||||
|
if (data['full_name'] === name) return id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} name
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const charNameToSprite = name => {
|
||||||
|
for (const [_id, data] of Object.entries(PartnerId2SpriteId)) {
|
||||||
|
if (data['full_name'] === name) return data['sprite'];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} atlas
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const atlasToName = atlas => {
|
||||||
|
const atlas = settings.getConfig('atlas');
|
||||||
|
for (const [id, data] of Object.entries(atlas)) {
|
||||||
|
if (data.includes(atlas)) return id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} atlas
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const atlasToSprite = atlas => {
|
||||||
|
const atlas = settings.getConfig('atlas');
|
||||||
|
for (const [_id, data] of Object.entries(atlas)) {
|
||||||
|
if (data.includes(atlas)) return data['sprite'];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} name
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const atlasToID = name => {
|
||||||
|
const atlas = settings.getConfig('atlas');
|
||||||
|
for (const [id, data] of Object.entries(atlas)) {
|
||||||
|
if (data.includes(name)) return charNameToID(id);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
21
lib/convert/weapon.js
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
import WeaponId2Sprite from '../../resources/map/WeaponId2Sprite.json';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} id
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const IDToWeaponName = id => {
|
||||||
|
const data = WeaponId2Sprite?.[id];
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} name
|
||||||
|
* @returns string
|
||||||
|
*/
|
||||||
|
export const weaponNameToID = name => {
|
||||||
|
for (const [id, data] of Object.entries(WeaponId2Sprite)) {
|
||||||
|
if (data === name) return id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
};
|
||||||
53
lib/download.js
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
import path from 'path';
|
||||||
|
import fs from 'fs';
|
||||||
|
import { ZZZ_SQUARE_AVATAR, ZZZ_SQUARE_BANGBOO } from './mysapi/api.js';
|
||||||
|
import { resourcesPath } from './path.js';
|
||||||
|
|
||||||
|
const ZZZ_SQUARE_AVATAR_PATH = path.join(resourcesPath, 'square_avatar');
|
||||||
|
const ZZZ_SQUARE_BANGBOO_PATH = path.join(
|
||||||
|
resourcesPath,
|
||||||
|
'bangboo_square_avatar'
|
||||||
|
);
|
||||||
|
const ZZZ_GUIDES_PATH = path.join(resourcesPath, 'guides');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string | number} charID
|
||||||
|
* @returns Promise<string>
|
||||||
|
*/
|
||||||
|
export const getSquareAvatar = async charID => {
|
||||||
|
const filename = `role_square_avatar_${charID}.png`;
|
||||||
|
const avatarPath = path.join(ZZZ_SQUARE_AVATAR_PATH, filename);
|
||||||
|
if (fs.existsSync(avatarPath)) return avatarPath;
|
||||||
|
const url = `${ZZZ_SQUARE_AVATAR}/${filename}`;
|
||||||
|
const savePath = avatarPath;
|
||||||
|
const download = await fetch(url);
|
||||||
|
const arrayBuffer = await download.arrayBuffer();
|
||||||
|
const buffer = Buffer.from(arrayBuffer);
|
||||||
|
if (!fs.existsSync(ZZZ_SQUARE_AVATAR_PATH)) {
|
||||||
|
fs.mkdirSync(ZZZ_SQUARE_AVATAR_PATH, { recursive: true });
|
||||||
|
}
|
||||||
|
fs.writeFileSync(savePath, buffer);
|
||||||
|
return avatarPath;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string | number} bangbooId
|
||||||
|
* @returns Promise<string>
|
||||||
|
*/
|
||||||
|
export const getSquareBangboo = async bangbooId => {
|
||||||
|
const filename = `bangboo_rectangle_avatar_${bangbooId}.png`;
|
||||||
|
const bangbooPath = path.join(ZZZ_SQUARE_BANGBOO_PATH, filename);
|
||||||
|
if (fs.existsSync(bangbooPath)) return bangbooPath;
|
||||||
|
const url = `${ZZZ_SQUARE_BANGBOO}/${filename}`;
|
||||||
|
const savePath = bangbooPath;
|
||||||
|
const download = await fetch(url);
|
||||||
|
const arrayBuffer = await download.arrayBuffer();
|
||||||
|
const buffer = Buffer.from(arrayBuffer);
|
||||||
|
if (!fs.existsSync(ZZZ_SQUARE_BANGBOO_PATH)) {
|
||||||
|
fs.mkdirSync(ZZZ_SQUARE_BANGBOO_PATH, { recursive: true });
|
||||||
|
}
|
||||||
|
fs.writeFileSync(savePath, buffer);
|
||||||
|
return bangbooPath;
|
||||||
|
};
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { element } from '../lib/convert.js';
|
import { element } from '../lib/convert.js';
|
||||||
|
import { getSquareAvatar } from '../lib/download.js';
|
||||||
import { Equip, Weapon } from './equip.js';
|
import { Equip, Weapon } from './equip.js';
|
||||||
import { Property } from './property.js';
|
import { Property } from './property.js';
|
||||||
import { Skill } from './skill.js';
|
import { Skill } from './skill.js';
|
||||||
|
|
@ -194,6 +195,10 @@ export class ZZZAvatarInfo {
|
||||||
|
|
||||||
this.element_str = element.IDToElement(element_type);
|
this.element_str = element.IDToElement(element_type);
|
||||||
}
|
}
|
||||||
|
async get_assets() {
|
||||||
|
const result = await getSquareAvatar(this.id);
|
||||||
|
this.square_icon = result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import { getSquareBangboo } from '../lib/download.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
|
|
@ -19,6 +21,11 @@ export class Buddy {
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.star = star;
|
this.star = star;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get_assets() {
|
||||||
|
const result = await getSquareBangboo(this.id);
|
||||||
|
this.square_icon = result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -39,6 +46,11 @@ export class Item {
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.star = star;
|
this.star = star;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get_assets() {
|
||||||
|
const result = await getSquareBangboo(this.id);
|
||||||
|
this.square_icon = result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -67,4 +79,10 @@ export class ZZZBangbooResp {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
this.bangboo_wiki = bangboo_wiki;
|
this.bangboo_wiki = bangboo_wiki;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get_assets() {
|
||||||
|
for (const item of this.items) {
|
||||||
|
await item.get_assets();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,4 +46,13 @@ export class ZZZIndexResp {
|
||||||
this.cur_head_icon_url = cur_head_icon_url;
|
this.cur_head_icon_url = cur_head_icon_url;
|
||||||
this.buddy_list = buddy_list.map(item => new Buddy(item));
|
this.buddy_list = buddy_list.map(item => new Buddy(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async get_assets() {
|
||||||
|
for (const avatar of this.avatar_list) {
|
||||||
|
await avatar.get_assets();
|
||||||
|
}
|
||||||
|
for (const buddy of this.buddy_list) {
|
||||||
|
await buddy.get_assets();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
|
@ -130,6 +130,8 @@
|
||||||
}
|
}
|
||||||
.card .list .item .image img {
|
.card .list .item .image img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.card .list .item .level {
|
.card .list .item .level {
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
<div class="rank rank{{char.rarity}}"></div>
|
<div class="rank rank{{char.rarity}}"></div>
|
||||||
<div class="property {{char.element_str}}"></div>
|
<div class="property {{char.element_str}}"></div>
|
||||||
<div class="image">
|
<div class="image">
|
||||||
<img src="./images/status.png" alt="">
|
<img src="{{char.square_icon}}" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="level">等级{{char.level}}</div>
|
<div class="level">等级{{char.level}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
<div class="item rank{{bangboo.rarity}}">
|
<div class="item rank{{bangboo.rarity}}">
|
||||||
<div class="rank rank{{bangboo.rarity}}"></div>
|
<div class="rank rank{{bangboo.rarity}}"></div>
|
||||||
<div class="image">
|
<div class="image">
|
||||||
<img src="./images/status.png" alt="">
|
<img src="{{bangboo.square_icon}}" alt="">
|
||||||
</div>
|
</div>
|
||||||
<div class="level">等级{{bangboo.level}}</div>
|
<div class="level">等级{{bangboo.level}}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,8 @@
|
||||||
background-color: #e2e2e2;
|
background-color: #e2e2e2;
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
0
resources/images/.gitkeep
Normal file
152
resources/map/PartnerId2SpriteId.json
Normal file
|
|
@ -0,0 +1,152 @@
|
||||||
|
{
|
||||||
|
"1011": {
|
||||||
|
"sprite_id": "01",
|
||||||
|
"name": "安比",
|
||||||
|
"full_name": "安比·德玛拉",
|
||||||
|
"en_name": "Anby"
|
||||||
|
},
|
||||||
|
"1021": {
|
||||||
|
"sprite_id": "11",
|
||||||
|
"name": "猫又",
|
||||||
|
"full_name": "猫宫 又奈",
|
||||||
|
"en_name": "Nekomata"
|
||||||
|
},
|
||||||
|
"1031": {
|
||||||
|
"sprite_id": "12",
|
||||||
|
"name": "妮可",
|
||||||
|
"full_name": "妮可·德玛拉",
|
||||||
|
"en_name": "Nicole"
|
||||||
|
},
|
||||||
|
"1041": {
|
||||||
|
"sprite_id": "05",
|
||||||
|
"name": "「11号」",
|
||||||
|
"full_name": "「11号」",
|
||||||
|
"en_name": "Soldier 11"
|
||||||
|
},
|
||||||
|
"1061": {
|
||||||
|
"sprite_id": "09",
|
||||||
|
"name": "可琳",
|
||||||
|
"full_name": "可琳·威克斯",
|
||||||
|
"en_name": "Corin"
|
||||||
|
},
|
||||||
|
"1081": {
|
||||||
|
"sprite_id": "10",
|
||||||
|
"name": "比利",
|
||||||
|
"full_name": "比利·奇德",
|
||||||
|
"en_name": "Billy"
|
||||||
|
},
|
||||||
|
"1091": {
|
||||||
|
"sprite_id": "10",
|
||||||
|
"name": "雅",
|
||||||
|
"full_name": "星见 雅",
|
||||||
|
"en_name": "Miyabi"
|
||||||
|
},
|
||||||
|
"1101": {
|
||||||
|
"sprite_id": "14",
|
||||||
|
"name": "珂蕾妲",
|
||||||
|
"full_name": "珂蕾妲·贝洛伯格",
|
||||||
|
"en_name": "Koleda"
|
||||||
|
},
|
||||||
|
"1111": {
|
||||||
|
"sprite_id": "15",
|
||||||
|
"name": "安东",
|
||||||
|
"full_name": "安东·伊万诺夫",
|
||||||
|
"en_name": "Anton"
|
||||||
|
},
|
||||||
|
"1121": {
|
||||||
|
"sprite_id": "16",
|
||||||
|
"name": "本",
|
||||||
|
"full_name": "本·比格",
|
||||||
|
"en_name": "Ben"
|
||||||
|
},
|
||||||
|
"1131": {
|
||||||
|
"sprite_id": "17",
|
||||||
|
"name": "苍角",
|
||||||
|
"full_name": "苍角",
|
||||||
|
"en_name": "Soukaku"
|
||||||
|
},
|
||||||
|
"1141": {
|
||||||
|
"sprite_id": "18",
|
||||||
|
"name": "莱卡恩",
|
||||||
|
"full_name": "冯·莱卡恩",
|
||||||
|
"en_name": "Lycaon"
|
||||||
|
},
|
||||||
|
"1151": {
|
||||||
|
"sprite_id": "27",
|
||||||
|
"name": "露西",
|
||||||
|
"full_name": "露西亚娜·德·蒙特夫",
|
||||||
|
"en_name": "Lucy"
|
||||||
|
},
|
||||||
|
"1161": {
|
||||||
|
"sprite_id": "27",
|
||||||
|
"name": "莱特",
|
||||||
|
"full_name": "莱特",
|
||||||
|
"en_name": "Lighter"
|
||||||
|
},
|
||||||
|
"1181": {
|
||||||
|
"sprite_id": "20",
|
||||||
|
"name": "格莉丝",
|
||||||
|
"full_name": "格莉丝·霍华德",
|
||||||
|
"en_name": "Grace"
|
||||||
|
},
|
||||||
|
"1191": {
|
||||||
|
"sprite_id": "21",
|
||||||
|
"name": "艾莲",
|
||||||
|
"full_name": "艾莲·乔",
|
||||||
|
"en_name": "Ellen"
|
||||||
|
},
|
||||||
|
"1201": {
|
||||||
|
"sprite_id": "21",
|
||||||
|
"name": "悠真",
|
||||||
|
"full_name": "浅羽 悠真",
|
||||||
|
"en_name": "Harumasa"
|
||||||
|
},
|
||||||
|
"1211": {
|
||||||
|
"sprite_id": "22",
|
||||||
|
"name": "丽娜",
|
||||||
|
"full_name": "亚历山德丽娜·莎芭丝缇安",
|
||||||
|
"en_name": "Rina"
|
||||||
|
},
|
||||||
|
"1221": {
|
||||||
|
"sprite_id": "22",
|
||||||
|
"name": "柳",
|
||||||
|
"full_name": "月城 柳",
|
||||||
|
"en_name": "Yanagi"
|
||||||
|
},
|
||||||
|
"1241": {
|
||||||
|
"sprite_id": "23",
|
||||||
|
"name": "朱鸢",
|
||||||
|
"full_name": "朱鸢",
|
||||||
|
"en_name": "Zhu Yuan"
|
||||||
|
},
|
||||||
|
"1251": {
|
||||||
|
"sprite_id": "23",
|
||||||
|
"name": "青衣",
|
||||||
|
"full_name": "青衣",
|
||||||
|
"en_name": "QingYi"
|
||||||
|
},
|
||||||
|
"1271": {
|
||||||
|
"sprite_id": "23",
|
||||||
|
"name": "赛斯",
|
||||||
|
"full_name": "赛斯·洛威尔",
|
||||||
|
"en_name": "Seth"
|
||||||
|
},
|
||||||
|
"1281": {
|
||||||
|
"sprite_id": "28",
|
||||||
|
"name": "派派",
|
||||||
|
"full_name": "派派·韦尔",
|
||||||
|
"en_name": "Piper"
|
||||||
|
},
|
||||||
|
"2011": {
|
||||||
|
"sprite_id": "28",
|
||||||
|
"name": "哲",
|
||||||
|
"full_name": "哲",
|
||||||
|
"en_name": "Wise"
|
||||||
|
},
|
||||||
|
"2021": {
|
||||||
|
"sprite_id": "28",
|
||||||
|
"name": "铃",
|
||||||
|
"full_name": "铃",
|
||||||
|
"en_name": "Belle"
|
||||||
|
}
|
||||||
|
}
|
||||||
47
resources/map/WeaponId2Sprite.json
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
"12001": "Weapon_B_Common_01",
|
||||||
|
"12002": "Weapon_B_Common_02",
|
||||||
|
"12003": "Weapon_B_Common_03",
|
||||||
|
"12004": "Weapon_B_Common_04",
|
||||||
|
"12005": "Weapon_B_Common_05",
|
||||||
|
"12006": "Weapon_B_Common_06",
|
||||||
|
"12007": "Weapon_B_Common_07",
|
||||||
|
"12008": "Weapon_B_Common_08",
|
||||||
|
"12009": "Weapon_B_Common_09",
|
||||||
|
"12010": "Weapon_B_Common_10",
|
||||||
|
"12011": "Weapon_B_Common_11",
|
||||||
|
"12012": "Weapon_B_Common_12",
|
||||||
|
"12013": "Weapon_B_Common_13",
|
||||||
|
"12014": "Weapon_B_Common_14",
|
||||||
|
"13001": "Weapon_A_Common_01",
|
||||||
|
"13002": "Weapon_A_Common_02",
|
||||||
|
"13003": "Weapon_A_Common_03",
|
||||||
|
"13004": "Weapon_A_Common_04",
|
||||||
|
"13005": "Weapon_A_Common_05",
|
||||||
|
"13006": "Weapon_A_Common_06",
|
||||||
|
"13007": "Weapon_A_Common_07",
|
||||||
|
"13008": "Weapon_A_Common_08",
|
||||||
|
"13009": "Weapon_A_Common_09",
|
||||||
|
"13010": "Weapon_A_Common_10",
|
||||||
|
"13011": "Weapon_A_Common_11",
|
||||||
|
"13101": "Weapon_A_1011",
|
||||||
|
"13103": "Weapon_A_1031",
|
||||||
|
"13106": "Weapon_A_1061",
|
||||||
|
"13108": "Weapon_A_1081",
|
||||||
|
"13111": "Weapon_A_1111",
|
||||||
|
"13112": "Weapon_A_1121",
|
||||||
|
"13113": "Weapon_A_1131",
|
||||||
|
"13115": "Weapon_A_1151",
|
||||||
|
"13128": "Weapon_A_1281",
|
||||||
|
"14001": "Weapon_S_Common_01",
|
||||||
|
"14002": "Weapon_S_Common_02",
|
||||||
|
"14003": "Weapon_S_Common_03",
|
||||||
|
"14102": "Weapon_S_1021",
|
||||||
|
"14104": "Weapon_S_1041",
|
||||||
|
"14110": "Weapon_S_1101",
|
||||||
|
"14114": "Weapon_S_1141",
|
||||||
|
"14118": "Weapon_S_1181",
|
||||||
|
"14119": "Weapon_S_1191",
|
||||||
|
"14121": "Weapon_S_1211",
|
||||||
|
"14124": "Weapon_S_1241"
|
||||||
|
}
|
||||||
BIN
resources/square_avatar/role_square_avatar_1011.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
resources/square_avatar/role_square_avatar_1031.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
resources/square_avatar/role_square_avatar_1061.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
resources/square_avatar/role_square_avatar_1081.png
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
resources/square_avatar/role_square_avatar_1111.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
resources/square_avatar/role_square_avatar_1121.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
resources/square_avatar/role_square_avatar_1131.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
resources/square_avatar/role_square_avatar_1141.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
resources/square_avatar/role_square_avatar_1151.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
resources/square_avatar/role_square_avatar_1181.png
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
resources/square_avatar/role_square_avatar_1191.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
resources/square_avatar/role_square_avatar_1281.png
Normal file
|
After Width: | Height: | Size: 67 KiB |