mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-17 13:47:44 +00:00
fix:圣遗物获取
This commit is contained in:
parent
644932317a
commit
75c9838646
4 changed files with 1134 additions and 548 deletions
|
|
@ -55,6 +55,7 @@ export class Panel extends ZZZPlugin {
|
||||||
|
|
||||||
async refreshPanel() {
|
async refreshPanel() {
|
||||||
const uid = await this.getUID();
|
const uid = await this.getUID();
|
||||||
|
this.uid = uid
|
||||||
let playerInfo = null;
|
let playerInfo = null;
|
||||||
try {
|
try {
|
||||||
playerInfo = await this.getPlayerInfo();
|
playerInfo = await this.getPlayerInfo();
|
||||||
|
|
@ -69,7 +70,8 @@ export class Panel extends ZZZPlugin {
|
||||||
this.result = null;
|
this.result = null;
|
||||||
const useEnka = _.get(settings.getConfig('panel'), 'useEnka', true);
|
const useEnka = _.get(settings.getConfig('panel'), 'useEnka', true);
|
||||||
logger.debug(`[panel.js] useEnka 设置值: ${useEnka}`);
|
logger.debug(`[panel.js] useEnka 设置值: ${useEnka}`);
|
||||||
if (!useEnka || this.e.runtime.hasCk) {
|
if (!useEnka && this.e.runtime.hasCk) {
|
||||||
|
console.log('this.e.runtime.hasCk',this.e.runtime.hasCk)
|
||||||
try {
|
try {
|
||||||
const { api } = await this.getAPI(); // MYS 需要 api 对象
|
const { api } = await this.getAPI(); // MYS 需要 api 对象
|
||||||
// MYS 逻辑需要冷却判断
|
// MYS 逻辑需要冷却判断
|
||||||
|
|
@ -89,12 +91,11 @@ export class Panel extends ZZZPlugin {
|
||||||
logger.mark('[panel.js] MYS API refreshPanelFunction 调用完成.');
|
logger.mark('[panel.js] MYS API refreshPanelFunction 调用完成.');
|
||||||
} catch (mysError) {
|
} catch (mysError) {
|
||||||
logger.error(' MYS API 刷新出错:', mysError);
|
logger.error(' MYS API 刷新出错:', mysError);
|
||||||
this.reply(`MYS API 刷新出错: ${mysError.message}`);
|
await this.refreshByEnka();
|
||||||
return await this.refreshByEnka();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return await this.refreshByEnka();
|
await this.refreshByEnka();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.result && Array.isArray(this.result)) { // 确保有有效数据 (非 null, 是数组)
|
if (this.result && Array.isArray(this.result)) { // 确保有有效数据 (非 null, 是数组)
|
||||||
|
|
@ -146,7 +147,7 @@ export class Panel extends ZZZPlugin {
|
||||||
//enka兜底 todo:数据转换修正..
|
//enka兜底 todo:数据转换修正..
|
||||||
logger.debug('[panel.js] 进入 Enka 逻辑块');
|
logger.debug('[panel.js] 进入 Enka 逻辑块');
|
||||||
try {
|
try {
|
||||||
const enkaData = await getZzzEnkaData(uid);
|
const enkaData = await getZzzEnkaData(this.uid);
|
||||||
if (!enkaData || enkaData === -1 || !enkaData.PlayerInfo) { throw new Error('获取或验证 Enka 数据失败'); }
|
if (!enkaData || enkaData === -1 || !enkaData.PlayerInfo) { throw new Error('获取或验证 Enka 数据失败'); }
|
||||||
this.result = await _enka_data_to_mys_data(enkaData);
|
this.result = await _enka_data_to_mys_data(enkaData);
|
||||||
return this.result;
|
return this.result;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -12,11 +12,14 @@ const __dirname = path.dirname(__filename); // <--- 3. 获取当前文件
|
||||||
const MAP_PATH = __dirname; // Data files are in the same directory
|
const MAP_PATH = __dirname; // Data files are in the same directory
|
||||||
const ALIAS_LIST_DIR = path.join(__dirname, 'alias'); // Alias directory path
|
const ALIAS_LIST_DIR = path.join(__dirname, 'alias'); // Alias directory path
|
||||||
const CHAR_ALIAS_FILE = path.join(ALIAS_LIST_DIR, 'char_alias.json'); // Alias file path
|
const CHAR_ALIAS_FILE = path.join(ALIAS_LIST_DIR, 'char_alias.json'); // Alias file path
|
||||||
|
const BASE_IMAGE_URL = 'https://enka.network';
|
||||||
const PartnerId2DataFile = 'PartnerId2Data.json';
|
const PartnerId2DataFile = 'PartnerId2Data.json';
|
||||||
const WeaponId2DataFile = 'WeaponId2Data.json';
|
const WeaponId2DataFile = 'WeaponId2Data.json';
|
||||||
const EquipId2DataFile = 'EquipId2Data.json';
|
const EquipId2DataFile = 'EquipId2Data.json';
|
||||||
const SkillParamFile = 'PartnerId2SkillParam.json'; // 定义技能数据文件名
|
const SkillParamFile = 'PartnerId2SkillParam.json';
|
||||||
|
const AvatarIconDataFile = 'avatars.json';
|
||||||
|
|
||||||
|
|
||||||
let PartnerId2SkillParam = {}; // 初始化技能数据对象
|
let PartnerId2SkillParam = {}; // 初始化技能数据对象
|
||||||
try {
|
try {
|
||||||
const skillParamPath = path.join(MAP_PATH, SkillParamFile);
|
const skillParamPath = path.join(MAP_PATH, SkillParamFile);
|
||||||
|
|
@ -100,13 +103,30 @@ try {
|
||||||
console.error(`Error reading or parsing ${EquipId2DataFile}:`, error);
|
console.error(`Error reading or parsing ${EquipId2DataFile}:`, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Helper Functions ---
|
let avatar_icon_data = {}; // <--- 新增:用于存储 avatars.json 的数据
|
||||||
|
try {
|
||||||
|
const avatarIconDataPath = path.join(MAP_PATH, AvatarIconDataFile);
|
||||||
|
if (fs.existsSync(avatarIconDataPath)) {
|
||||||
|
const avatarIconContent = fs.readFileSync(avatarIconDataPath, { encoding: 'utf-8' });
|
||||||
|
avatar_icon_data = JSON.parse(avatarIconContent);
|
||||||
|
console.log(`[name_convert.js] 成功加载并解析 ${AvatarIconDataFile}。`);
|
||||||
|
console.log(`[name_convert.js] 从 ${AvatarIconDataFile} 加载了 ${Object.keys(avatar_icon_data).length} 个头像图标条目。`);
|
||||||
|
} else {
|
||||||
|
// 这个文件对于图标URL是必需的,所以用 error 级别
|
||||||
|
console.error(`[name_convert.js] ${AvatarIconDataFile} 文件未找到于: ${avatarIconDataPath}。无法生成角色图标 URL。`);
|
||||||
|
avatar_icon_data = {}; // 保证是个空对象
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`[name_convert.js] 读取或解析 ${AvatarIconDataFile} 时出错:`, error);
|
||||||
|
avatar_icon_data = {};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a character name alias to the canonical character name.
|
* Converts a character name alias to the canonical character name.
|
||||||
* @param {string} char_name - The alias or canonical name entered by the user.
|
* @param {string} char_name - The alias or canonical name entered by the user.
|
||||||
* @returns {string} The canonical character name, or the original input if no alias is found.
|
* @returns {string} The canonical character name, or the original input if no alias is found.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export function alias_to_char_name(char_name) {
|
export function alias_to_char_name(char_name) {
|
||||||
if (!char_name) return char_name; // Handle null/empty input
|
if (!char_name) return char_name; // Handle null/empty input
|
||||||
const lowerCaseName = char_name.toLowerCase().trim(); // Normalize input
|
const lowerCaseName = char_name.toLowerCase().trim(); // Normalize input
|
||||||
|
|
@ -216,12 +236,36 @@ export function char_name_to_char_id(char_name) {
|
||||||
// console.warn(`Character ID not found for name: "${char_name}" (resolved to: "${canonicalName}").`);
|
// console.warn(`Character ID not found for name: "${char_name}" (resolved to: "${canonicalName}").`);
|
||||||
return undefined; // Not found
|
return undefined; // Not found
|
||||||
}
|
}
|
||||||
|
export function get_char_circle_icon_url(char_id) { // 使用 export function 直接导出
|
||||||
|
const charIdStr = String(char_id);
|
||||||
|
|
||||||
|
// 检查新加载的 avatar_icon_data 中是否存在 CircleIcon
|
||||||
|
if (avatar_icon_data[charIdStr] && avatar_icon_data[charIdStr].CircleIcon && typeof avatar_icon_data[charIdStr].CircleIcon === 'string') {
|
||||||
|
const iconPath = avatar_icon_data[charIdStr].CircleIcon; // <--- 从 avatar_icon_data 获取路径
|
||||||
|
// 确保路径以 '/' 开头
|
||||||
|
if (iconPath.startsWith('/')) {
|
||||||
|
return BASE_IMAGE_URL + iconPath;
|
||||||
|
} else {
|
||||||
|
// 日志中指明来源文件
|
||||||
|
console.warn(`[name_convert.js] ${AvatarIconDataFile} 中角色 ID ${charIdStr} 的 CircleIcon 路径不以 '/' 开头: "${iconPath}". 无法构建 URL.`);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 可选日志:指示在 avatar_icon_data 中未找到
|
||||||
|
// if (!avatar_icon_data[charIdStr]) {
|
||||||
|
// console.warn(`[name_convert.js] 在 ${AvatarIconDataFile} 中未找到角色 ID ${charIdStr} 的数据 (用于获取 circle icon URL)。`);
|
||||||
|
// } else if (!avatar_icon_data[charIdStr].CircleIcon || typeof avatar_icon_data[charIdStr].CircleIcon !== 'string') {
|
||||||
|
// console.warn(`[name_convert.js] ${AvatarIconDataFile} 中角色 ID ${charIdStr} 缺少有效 CircleIcon 路径。`);
|
||||||
|
// }
|
||||||
|
return undefined; // 数据或路径缺失则返回 undefined
|
||||||
|
}
|
||||||
|
}
|
||||||
// Export the loaded data objects as well
|
// Export the loaded data objects as well
|
||||||
export {
|
export {
|
||||||
equip_data,
|
equip_data,
|
||||||
weapon_data,
|
weapon_data,
|
||||||
partner_data,
|
partner_data,
|
||||||
char_alias_data,
|
char_alias_data,
|
||||||
PartnerId2SkillParam
|
PartnerId2SkillParam,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ const useEnka = _.get(settings.getConfig('panel'), 'useEnka', true);
|
||||||
export async function getZzzEnkaData(uid) {
|
export async function getZzzEnkaData(uid) {
|
||||||
if (useEnka) {
|
if (useEnka) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(ENKA_API.replace('{uid}', uid), {
|
const response = await fetch(ENKA_API.replace('{uid}', uid),
|
||||||
|
{
|
||||||
headers: {
|
headers: {
|
||||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||||
'Accept': 'application/json, text/plain, */*',
|
'Accept': 'application/json, text/plain, */*',
|
||||||
|
|
@ -16,7 +17,8 @@ export async function getZzzEnkaData(uid) {
|
||||||
'Sec-Fetch-Mode': 'cors',
|
'Sec-Fetch-Mode': 'cors',
|
||||||
'Sec-Fetch-Site': 'same-origin',
|
'Sec-Fetch-Site': 'same-origin',
|
||||||
},
|
},
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
console.error(`HTTP 错误! 状态码: ${response.status}`);
|
console.error(`HTTP 错误! 状态码: ${response.status}`);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue