diff --git a/.gitignore b/.gitignore index e2c293e..98bf00a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ config/**/*.* data/**/*.* !data/.gitkeep + +resources/images/**/*.* +!resources/images/.gitkeep diff --git a/apps/card.js b/apps/card.js index f876e3b..77d871c 100644 --- a/apps/card.js +++ b/apps/card.js @@ -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, }; diff --git a/apps/gachalog.js b/apps/gachalog.js index 4d1be34..9cc8c1d 100644 --- a/apps/gachalog.js +++ b/apps/gachalog.js @@ -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) { diff --git a/apps/note.js b/apps/note.js index f7d1451..82f8f29 100644 --- a/apps/note.js +++ b/apps/note.js @@ -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) { diff --git a/defSet/atlas.yaml b/defSet/atlas.yaml new file mode 100644 index 0000000..7cc990f --- /dev/null +++ b/defSet/atlas.yaml @@ -0,0 +1,101 @@ +「11号」: + - 十一号 + - 十一 + - 11号 + - '11' + - 「11号」 +艾莲: + - 爱莲 + - 爱怜 + - 艾莲·乔 + - 鲨鱼妹 + - 鲨鱼 +安东: + - 安东 + - 安东·伊万诺夫 +本: + - 熊本 + - 熊本熊 + - ben + - 比格 + - 本·比格 +比利: + - 比例 + - bili + - 比利·奇德 + - Billy +苍角: + - 苍绝 + - 仓角 + - 仓脚 +格莉丝: + - 格利斯 + - 格莉丝·霍华德 +珂蕾妲: + - 柯雷妲 + - 珂雷哒 + - 柯蕾妲 +猫又: + - 猫猫 + - 猫妖 + - 猫怪 + - 猫鼬 + - 猫宫 又奈 + - 猫宫又奈 + - 又奈 + - Neko + - neko +妮可: + - 尼克 + - 妮克 + - 妮寇 + - 妮可·德玛拉 + - Nicole +朱鸢: + - 朱元 +丽娜: + - 莉娜 + - 李娜 + - 亚历山德丽娜·莎芭丝缇安 + - rina +莱卡恩: + - 冯·莱卡恩 +安比: + - 安比 + - 安笔 +可琳: + - 克林 + - 柯林 + - 可林 +雅: + - 星见雅 + - 星见 +露西: + - 路西 + - 露西亚娜·德·蒙特夫 + - 露西亚娜 + - 鲁西 +莱特: + - 赖特 + - Lighter +悠真: + - 悠 + - 浅羽悠真 + - 浅羽 +柳: + - 月城 + - 月城柳 +青衣: + - 青医 +赛斯: + - 赛斯·洛威尔 + - 塞斯 + - 洛威尔 +派派: + - 拍拍 + - 韦尔 + - 派派·韦尔 +哲: + - 哲 +铃: + - 铃 diff --git a/lib/convert/char.js b/lib/convert/char.js new file mode 100644 index 0000000..4358cc3 --- /dev/null +++ b/lib/convert/char.js @@ -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; +}; diff --git a/lib/convert/weapon.js b/lib/convert/weapon.js new file mode 100644 index 0000000..63b068d --- /dev/null +++ b/lib/convert/weapon.js @@ -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; +}; diff --git a/lib/download.js b/lib/download.js new file mode 100644 index 0000000..79b2736 --- /dev/null +++ b/lib/download.js @@ -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 + */ +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 + */ +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; +}; diff --git a/model/avatar.js b/model/avatar.js index f3df15a..d63dd04 100644 --- a/model/avatar.js +++ b/model/avatar.js @@ -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; + } } /** diff --git a/model/bangboo.js b/model/bangboo.js index cb75030..96fb0cb 100644 --- a/model/bangboo.js +++ b/model/bangboo.js @@ -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(); + } + } } diff --git a/model/index.js b/model/index.js index 90b9625..b38159c 100644 --- a/model/index.js +++ b/model/index.js @@ -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(); + } + } } diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53001.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53001.png new file mode 100644 index 0000000..3241893 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53001.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53003.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53003.png new file mode 100644 index 0000000..a66e68e Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53003.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53005.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53005.png new file mode 100644 index 0000000..04972cf Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53005.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53006.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53006.png new file mode 100644 index 0000000..6624884 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53006.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53007.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53007.png new file mode 100644 index 0000000..5a7b920 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53007.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53009.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53009.png new file mode 100644 index 0000000..7c24677 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53009.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53010.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53010.png new file mode 100644 index 0000000..f4efe9b Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53010.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53011.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53011.png new file mode 100644 index 0000000..76c55b2 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53011.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53012.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53012.png new file mode 100644 index 0000000..9dcb1c5 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_53012.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54001.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54001.png new file mode 100644 index 0000000..2c7b805 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54001.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54002.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54002.png new file mode 100644 index 0000000..9e2ab91 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54002.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54003.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54003.png new file mode 100644 index 0000000..7eddbe4 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54003.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54004.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54004.png new file mode 100644 index 0000000..e66956f Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54004.png differ diff --git a/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54008.png b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54008.png new file mode 100644 index 0000000..a6953c2 Binary files /dev/null and b/resources/bangboo_square_avatar/bangboo_rectangle_avatar_54008.png differ diff --git a/resources/card/index.css b/resources/card/index.css index 787eab8..3e75d51 100644 --- a/resources/card/index.css +++ b/resources/card/index.css @@ -130,6 +130,8 @@ } .card .list .item .image img { width: 100%; + height: 100%; + object-fit: contain; display: block; } .card .list .item .level { diff --git a/resources/card/index.html b/resources/card/index.html index b64bf3c..7a951a4 100644 --- a/resources/card/index.html +++ b/resources/card/index.html @@ -47,7 +47,7 @@
- +
等级{{char.level}}
@@ -76,7 +76,7 @@
- +
等级{{bangboo.level}}
diff --git a/resources/card/index.scss b/resources/card/index.scss index 049a2d0..f1be98f 100644 --- a/resources/card/index.scss +++ b/resources/card/index.scss @@ -141,6 +141,8 @@ background-color: #e2e2e2; img { width: 100%; + height: 100%; + object-fit: contain; display: block; } } diff --git a/resources/images/.gitkeep b/resources/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resources/map/PartnerId2SpriteId.json b/resources/map/PartnerId2SpriteId.json new file mode 100644 index 0000000..e6ccb28 --- /dev/null +++ b/resources/map/PartnerId2SpriteId.json @@ -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" + } +} diff --git a/resources/map/WeaponId2Sprite.json b/resources/map/WeaponId2Sprite.json new file mode 100644 index 0000000..58ef7a4 --- /dev/null +++ b/resources/map/WeaponId2Sprite.json @@ -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" +} diff --git a/resources/square_avatar/role_square_avatar_1011.png b/resources/square_avatar/role_square_avatar_1011.png new file mode 100644 index 0000000..9a67751 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1011.png differ diff --git a/resources/square_avatar/role_square_avatar_1031.png b/resources/square_avatar/role_square_avatar_1031.png new file mode 100644 index 0000000..d01ca2e Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1031.png differ diff --git a/resources/square_avatar/role_square_avatar_1061.png b/resources/square_avatar/role_square_avatar_1061.png new file mode 100644 index 0000000..bd9396d Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1061.png differ diff --git a/resources/square_avatar/role_square_avatar_1081.png b/resources/square_avatar/role_square_avatar_1081.png new file mode 100644 index 0000000..a944c52 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1081.png differ diff --git a/resources/square_avatar/role_square_avatar_1111.png b/resources/square_avatar/role_square_avatar_1111.png new file mode 100644 index 0000000..62e34e6 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1111.png differ diff --git a/resources/square_avatar/role_square_avatar_1121.png b/resources/square_avatar/role_square_avatar_1121.png new file mode 100644 index 0000000..be38312 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1121.png differ diff --git a/resources/square_avatar/role_square_avatar_1131.png b/resources/square_avatar/role_square_avatar_1131.png new file mode 100644 index 0000000..70d332d Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1131.png differ diff --git a/resources/square_avatar/role_square_avatar_1141.png b/resources/square_avatar/role_square_avatar_1141.png new file mode 100644 index 0000000..24d4b35 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1141.png differ diff --git a/resources/square_avatar/role_square_avatar_1151.png b/resources/square_avatar/role_square_avatar_1151.png new file mode 100644 index 0000000..5c2a768 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1151.png differ diff --git a/resources/square_avatar/role_square_avatar_1181.png b/resources/square_avatar/role_square_avatar_1181.png new file mode 100644 index 0000000..6e31848 Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1181.png differ diff --git a/resources/square_avatar/role_square_avatar_1191.png b/resources/square_avatar/role_square_avatar_1191.png new file mode 100644 index 0000000..dfc0f3d Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1191.png differ diff --git a/resources/square_avatar/role_square_avatar_1281.png b/resources/square_avatar/role_square_avatar_1281.png new file mode 100644 index 0000000..e83d28d Binary files /dev/null and b/resources/square_avatar/role_square_avatar_1281.png differ