mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
feature:支持Enka面板更新:%更新展柜面板
This commit is contained in:
parent
0fea67a389
commit
21b8915418
25 changed files with 36048 additions and 382 deletions
|
|
@ -102,17 +102,24 @@ export const refreshPanel = async (api, deviceFp) => {
|
|||
// 获取新数据
|
||||
const newData = await getAvatarInfoList(api, deviceFp, true);
|
||||
if (!newData) return null;
|
||||
return mergePanel(api.uid, newData);
|
||||
};
|
||||
|
||||
/**
|
||||
* 合并保存新面板
|
||||
* @param {string|number} uid UID
|
||||
* @param {import('../model/Enka/interface').Mys.Avatar[]} newData
|
||||
*/
|
||||
export const mergePanel = async (uid, newData) => {
|
||||
// 合并新旧数据
|
||||
const finalData = updatePanelData(api.uid, newData);
|
||||
|
||||
const finalData = updatePanelData(uid, newData);
|
||||
const formattedData = finalData.map(item => new ZZZAvatarInfo(item));
|
||||
for (const item of formattedData) {
|
||||
// 下载图片资源
|
||||
await item.get_basic_assets();
|
||||
}
|
||||
return formattedData;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
*获取面板数据
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
import settings from '../settings.js';
|
||||
import settings from '../settings.js'
|
||||
// import PartnerId2SpriteId from '../../resources/map/PartnerId2Data.json' assert { type: 'json' };
|
||||
import { getMapData } from '../../utils/file.js';
|
||||
import { getMapData } from '../../utils/file.js'
|
||||
|
||||
const PartnerId2SpriteId = getMapData('PartnerId2Data');
|
||||
/** @type {import('../../model/Enka/interface.js').Map.PartnerId2Data} */
|
||||
const PartnerId2Data = getMapData('PartnerId2Data')
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -12,12 +13,12 @@ const PartnerId2SpriteId = getMapData('PartnerId2Data');
|
|||
* @returns {string | null}
|
||||
*/
|
||||
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'];
|
||||
};
|
||||
const data = PartnerId2Data?.[id]
|
||||
if (!data) return null
|
||||
if (en) return data?.['en_name']
|
||||
if (full) return data?.['full_name']
|
||||
return data?.['name']
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -25,73 +26,73 @@ export const IDToCharName = (id, full = true, en = false) => {
|
|||
* @returns {string | null}
|
||||
*/
|
||||
export const IDToCharSprite = id => {
|
||||
const data = PartnerId2SpriteId?.[id];
|
||||
if (!data) return null;
|
||||
return data?.['sprite_id'];
|
||||
};
|
||||
const data = PartnerId2Data?.[id]
|
||||
if (!data) return null
|
||||
return data?.['sprite_id']
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @returns {number | null}
|
||||
*/
|
||||
export const charNameToID = name => {
|
||||
for (const [id, data] of Object.entries(PartnerId2SpriteId)) {
|
||||
if (data['name'] === name) return Number(id);
|
||||
for (const [id, data] of Object.entries(PartnerId2Data)) {
|
||||
if (data['name'] === name) return Number(id)
|
||||
}
|
||||
return null;
|
||||
};
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @returns {string | null}
|
||||
*/
|
||||
export const charNameToSprite = name => {
|
||||
for (const [_id, data] of Object.entries(PartnerId2SpriteId)) {
|
||||
if (data['name'] === name) return data['sprite'];
|
||||
for (const [_id, data] of Object.entries(PartnerId2Data)) {
|
||||
if (data['name'] === name) return data['sprite_id']
|
||||
}
|
||||
return null;
|
||||
};
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} _alias
|
||||
* @returns {string | null}
|
||||
*/
|
||||
export const aliasToName = _alias => {
|
||||
const alias = settings.getConfig('alias');
|
||||
const alias = settings.getConfig('alias')
|
||||
for (const [id, data] of Object.entries(alias)) {
|
||||
if (id === _alias) return id;
|
||||
if (data.includes(_alias)) return id;
|
||||
if (id === _alias) return id
|
||||
if (data.includes(_alias)) return id
|
||||
}
|
||||
// 判断PartnerId2SpriteId是否有对应的name
|
||||
for (const [_, data] of Object.entries(PartnerId2SpriteId)) {
|
||||
if (data['name'] === _alias) return data['name'];
|
||||
for (const [_, data] of Object.entries(PartnerId2Data)) {
|
||||
if (data['name'] === _alias) return data['name']
|
||||
}
|
||||
return null;
|
||||
};
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} _alias
|
||||
* @returns {string | null}
|
||||
*/
|
||||
export const aliasToSprite = _alias => {
|
||||
const name = aliasToName(_alias);
|
||||
return charNameToSprite(name);
|
||||
};
|
||||
const name = aliasToName(_alias)
|
||||
return charNameToSprite(name)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @returns {number | null}
|
||||
*/
|
||||
export const aliasToID = name => {
|
||||
const _name = aliasToName(name);
|
||||
const id = charNameToID(_name);
|
||||
return id;
|
||||
};
|
||||
const _name = aliasToName(name)
|
||||
const id = charNameToID(_name)
|
||||
return id
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有角色ID
|
||||
* @returns {string[]}
|
||||
*/
|
||||
export const getAllCharactersID = () => {
|
||||
return Object.keys(PartnerId2SpriteId);
|
||||
};
|
||||
return Object.keys(PartnerId2Data)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { getMapData } from '../../utils/file.js';
|
||||
import { getMapData } from '../../utils/file.js'
|
||||
|
||||
const equipData = getMapData('EquipId2Data');
|
||||
/** @type {import('../../model/Enka/interface.js').Map.EquipId2Data} */
|
||||
const EquipId2Data = getMapData('EquipId2Data')
|
||||
|
||||
/**
|
||||
* 获取驱动盘装备的图片
|
||||
|
|
@ -8,14 +9,14 @@ const equipData = getMapData('EquipId2Data');
|
|||
* @returns {string | null}
|
||||
*/
|
||||
export function equipIdToSprite(equipId) {
|
||||
equipId = equipId.toString();
|
||||
equipId = equipId.toString()
|
||||
if (equipId.length === 5) {
|
||||
const suitId = equipId.slice(0, 3) + '00';
|
||||
if (equipData.hasOwnProperty(suitId)) {
|
||||
return equipData[suitId]['sprite_file'].replace('3D', '');
|
||||
const suitId = equipId.slice(0, 3) + '00'
|
||||
if (EquipId2Data.hasOwnProperty(suitId)) {
|
||||
return EquipId2Data[suitId]['sprite_file'].replace('3D', '')
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -23,5 +24,5 @@ export function equipIdToSprite(equipId) {
|
|||
* @returns {string[]}
|
||||
*/
|
||||
export function getAllEquipID() {
|
||||
return Object.keys(equipData);
|
||||
return Object.keys(EquipId2Data)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ export const idToShortName3 = id => {
|
|||
*/
|
||||
export const nameToShortName3 = propName => {
|
||||
for (const id in propertyData) {
|
||||
if (propertyData[id]?.[1] === propName) return propertyData[id][3];
|
||||
if (propertyData[id][1] === propName) return propertyData[id][3];
|
||||
};
|
||||
return propName;
|
||||
};
|
||||
|
|
@ -101,13 +101,15 @@ export const nameToShortName3 = propName => {
|
|||
/**
|
||||
* 属性名转id
|
||||
* @param {string} propName 属性名
|
||||
* @returns {string}
|
||||
* @returns {number}
|
||||
*/
|
||||
export const nameToId = (propName) => {
|
||||
for (const id in propertyData) {
|
||||
if (propertyData[id]?.[1] === propName) return Number(id);
|
||||
if (propertyData[id][1] === propName ||
|
||||
propertyData[id][1].replace('属性', '') === propName
|
||||
) return Number(id);
|
||||
};
|
||||
return '';
|
||||
return 0;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,32 +1,33 @@
|
|||
// import WeaponId2Sprite from '../../resources/map/WeaponId2Sprite.json' assert { type: 'json' };
|
||||
import { getMapData } from '../../utils/file.js';
|
||||
import { getMapData } from '../../utils/file.js'
|
||||
|
||||
const WeaponId2Sprite = getMapData('WeaponId2Sprite');
|
||||
/** @type {import('../../model/Enka/interface.js').Map.WeaponId2Data} */
|
||||
const WeaponId2Data = getMapData('WeaponId2Data')
|
||||
|
||||
/**
|
||||
* @param {string} id
|
||||
* @returns string
|
||||
*/
|
||||
export const IDToWeaponFileName = id => {
|
||||
const data = WeaponId2Sprite?.[id];
|
||||
return data;
|
||||
};
|
||||
const data = WeaponId2Data?.[id]?.CodeName
|
||||
return data
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
* @returns string
|
||||
*/
|
||||
export const weaponFileNameToID = name => {
|
||||
for (const [id, data] of Object.entries(WeaponId2Sprite)) {
|
||||
if (data === name) return id;
|
||||
for (const [id, data] of Object.entries(WeaponId2Data)) {
|
||||
if (data.CodeName === name) return id
|
||||
}
|
||||
return null;
|
||||
};
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有武器的ID
|
||||
* @returns string[]
|
||||
*/
|
||||
export const getAllWeaponID = () => {
|
||||
return Object.keys(WeaponId2Sprite);
|
||||
};
|
||||
return Object.keys(WeaponId2Data)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ export function saveGachaLog(uid, data) {
|
|||
|
||||
/**
|
||||
* @param {string} uid
|
||||
* @returns {Array<object>}
|
||||
* @returns {import('./../model/Enka/interface').Mys.Avatar[]}
|
||||
*/
|
||||
export function getPanelData(uid) {
|
||||
return getDB('panel', uid) || [];
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ export default class MysZZZApi extends MysApi {
|
|||
return item.ck && item.uid === uid;
|
||||
});
|
||||
if (!ck) {
|
||||
throw new Error(`[ZZZ]要查询的UID:${uid}未绑定Cookie`);
|
||||
throw new Error(`[ZZZ]UID:${uid}未绑定Cookie。若无法更新面板可尝试%更新展柜面板(所更新角色数据与实际不一致时,请提issue)`);
|
||||
}
|
||||
this._device = ck?.device_id || ck?.device;
|
||||
this.cookie = ck?.ck;
|
||||
|
|
|
|||
|
|
@ -158,19 +158,21 @@ export class ZZZPlugin extends plugin {
|
|||
* 获取玩家信息(当调用此方法时,会获取用户的玩家信息,并将其保存到`e.playerCard`中,方便渲染用户信息(此部分请查阅`lib/render.js`中两个模块的作用))
|
||||
* @returns {Promise<boolean | object>}
|
||||
*/
|
||||
async getPlayerInfo() {
|
||||
// 获取 米游社 API
|
||||
const { api, uid } = await this.getAPI();
|
||||
// 获取用户信息
|
||||
let userData = await api.getFinalData('zzzUser').catch(e => {
|
||||
this.reply(e.message);
|
||||
throw e;
|
||||
});
|
||||
async getPlayerInfo(playerData = null) {
|
||||
if (!playerData) {
|
||||
// 获取 米游社 API
|
||||
const { api, uid } = await this.getAPI();
|
||||
// 获取用户信息
|
||||
playerData = await api.getFinalData('zzzUser').catch(e => {
|
||||
this.reply(e.message);
|
||||
throw e;
|
||||
});
|
||||
|
||||
if (!userData) throw new Error('获取用户数据失败');
|
||||
// 取第一个用户信息
|
||||
userData =
|
||||
userData?.list?.find(item => item.game_uid == uid) || userData?.list?.[0];
|
||||
if (!playerData) throw new Error('获取用户数据失败');
|
||||
// 取第一个用户信息
|
||||
playerData =
|
||||
playerData?.list?.find(item => item.game_uid == uid) || playerData?.list?.[0];
|
||||
}
|
||||
|
||||
// 获取用户头像
|
||||
let avatar = '';
|
||||
|
|
@ -184,10 +186,10 @@ export class ZZZPlugin extends plugin {
|
|||
// 写入数据
|
||||
this.e.playerCard = {
|
||||
avatar: avatar,
|
||||
player: userData,
|
||||
player: playerData,
|
||||
};
|
||||
// 返回数据
|
||||
return userData;
|
||||
return playerData;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue