fix:圣遗物获取

This commit is contained in:
xyz 2025-04-04 02:03:51 +08:00
parent 644932317a
commit 75c9838646
4 changed files with 1134 additions and 548 deletions

View file

@ -12,11 +12,14 @@ const __dirname = path.dirname(__filename); // <--- 3. 获取当前文件
const MAP_PATH = __dirname; // Data files are in the same directory
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 BASE_IMAGE_URL = 'https://enka.network';
const PartnerId2DataFile = 'PartnerId2Data.json';
const WeaponId2DataFile = 'WeaponId2Data.json';
const EquipId2DataFile = 'EquipId2Data.json';
const SkillParamFile = 'PartnerId2SkillParam.json'; // 定义技能数据文件名
const SkillParamFile = 'PartnerId2SkillParam.json';
const AvatarIconDataFile = 'avatars.json';
let PartnerId2SkillParam = {}; // 初始化技能数据对象
try {
const skillParamPath = path.join(MAP_PATH, SkillParamFile);
@ -100,13 +103,30 @@ try {
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.
* @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.
*/
export function alias_to_char_name(char_name) {
if (!char_name) return char_name; // Handle null/empty 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}").`);
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 {
equip_data,
weapon_data,
partner_data,
char_alias_data,
PartnerId2SkillParam
PartnerId2SkillParam,
};