feat: card
3
.gitignore
vendored
|
|
@ -6,3 +6,6 @@ config/**/*.*
|
|||
|
||||
data/**/*.*
|
||||
!data/.gitkeep
|
||||
|
||||
resources/images/**/*.*
|
||||
!resources/images/.gitkeep
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ export class Card extends ZZZPlugin {
|
|||
}
|
||||
async card() {
|
||||
const { api, deviceFp } = await this.getAPI();
|
||||
const userData = await this.getPlayerInfo();
|
||||
if (!userData) return false;
|
||||
if (!api) return false;
|
||||
await this.getPlayerInfo();
|
||||
let indexData = await api.getData('zzzIndex', { deviceFp });
|
||||
indexData = await api.checkCode(this.e, indexData, 'zzzIndex', {});
|
||||
if (!indexData || indexData.retcode !== 0) {
|
||||
|
|
@ -32,6 +32,7 @@ export class Card extends ZZZPlugin {
|
|||
indexData = indexData.data;
|
||||
indexData = new ZZZIndexResp(indexData);
|
||||
this.e.playerCard.player.region_name = indexData.stats.world_level_name;
|
||||
await indexData.get_assets();
|
||||
const data = {
|
||||
card: indexData,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -71,13 +71,14 @@ export class GachaLog extends ZZZPlugin {
|
|||
this.getLog(key);
|
||||
}
|
||||
async getLog(key) {
|
||||
const uid = await this.getUID();
|
||||
const lastQueryTime = await redis.get(`ZZZ:GACHA:${uid}:LASTTIME`);
|
||||
if (lastQueryTime && Date.now() - lastQueryTime < 1000 * 60 * 5) {
|
||||
await this.reply('1分钟内只能刷新一次,请稍后重试');
|
||||
return false;
|
||||
}
|
||||
await redis.set(`ZZZ:GACHA:${uid}:LASTTIME`, Date.now());
|
||||
const uid = await this.getUID();
|
||||
this.reply('正在更新抽卡记录,可能需要一段时间,请耐心等待');
|
||||
const data = await updateGachaLog(key, uid);
|
||||
let msg = `抽卡记录更新成功,共${Object.keys(data).length}个卡池`;
|
||||
for (const name in data) {
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ export class Note extends ZZZPlugin {
|
|||
}
|
||||
async note() {
|
||||
const { api, deviceFp } = await this.getAPI();
|
||||
const userData = await this.getPlayerInfo();
|
||||
if (!userData) return false;
|
||||
if (!api) return false;
|
||||
await this.getPlayerInfo();
|
||||
let noteData = await api.getData('zzzNote', { deviceFp });
|
||||
noteData = await api.checkCode(this.e, noteData, 'zzzNote', {});
|
||||
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 { getSquareAvatar } from '../lib/download.js';
|
||||
import { Equip, Weapon } from './equip.js';
|
||||
import { Property } from './property.js';
|
||||
import { Skill } from './skill.js';
|
||||
|
|
@ -194,6 +195,10 @@ export class ZZZAvatarInfo {
|
|||
|
||||
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
|
||||
*/
|
||||
|
|
@ -19,6 +21,11 @@ export class Buddy {
|
|||
this.level = level;
|
||||
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.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.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.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 {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
display: block;
|
||||
}
|
||||
.card .list .item .level {
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
<div class="rank rank{{char.rarity}}"></div>
|
||||
<div class="property {{char.element_str}}"></div>
|
||||
<div class="image">
|
||||
<img src="./images/status.png" alt="">
|
||||
<img src="{{char.square_icon}}" alt="">
|
||||
</div>
|
||||
<div class="level">等级{{char.level}}</div>
|
||||
</div>
|
||||
|
|
@ -76,7 +76,7 @@
|
|||
<div class="item rank{{bangboo.rarity}}">
|
||||
<div class="rank rank{{bangboo.rarity}}"></div>
|
||||
<div class="image">
|
||||
<img src="./images/status.png" alt="">
|
||||
<img src="{{bangboo.square_icon}}" alt="">
|
||||
</div>
|
||||
<div class="level">等级{{bangboo.level}}</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -141,6 +141,8 @@
|
|||
background-color: #e2e2e2;
|
||||
img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
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 |