部分enka面板更新能力

This commit is contained in:
xyz 2025-04-03 00:01:31 +08:00
parent d6a299c275
commit 28432cd0a5
6 changed files with 1359 additions and 46 deletions

512
lib/ekapi/PartnerScore.json Normal file
View file

@ -0,0 +1,512 @@
{
"1011": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1021": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1031": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0.75,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 1,
"异常掌控": 0
},
"1041": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1061": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1081": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1091": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.25,
"穿透率": 0,
"异常精通": 0.25,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1101": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 1,
"异常掌控": 0
},
"1111": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1121": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0,
"攻击力": 0,
"防御力百分比": 1,
"防御力": 1,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 1,
"异常掌控": 0
},
"1131": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 1,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1141": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 1,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1151": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.5,
"穿透率": 1,
"异常精通": 0.5,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 1,
"异常掌控": 0
},
"1161": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1181": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
},
"1191": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1201": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1211": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 1,
"穿透率": 1,
"异常精通": 0.5,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 1,
"异常掌控": 0
},
"1221": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0,
"暴击伤害": 0,
"穿透值": 0.25,
"穿透率": 0.25,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1241": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 1,
"暴击伤害": 1,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1251": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 1,
"攻击力": 1,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1271": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0,
"攻击力": 0,
"防御力百分比": 1,
"防御力": 1,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 0,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 1,
"异常掌控": 0
},
"1171": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0,
"暴击伤害": 0,
"穿透值": 0.25,
"穿透率": 0.25,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1261": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0,
"暴击伤害": 0,
"穿透值": 0.25,
"穿透率": 0.25,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 0
},
"1281": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
},
"1311": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
},
"1321": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
},
"1381": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
},
"1291": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
},
"1331": {
"生命值百分比": 0,
"生命值": 0,
"攻击力百分比": 0.75,
"攻击力": 0.75,
"防御力百分比": 0,
"防御力": 0,
"暴击率": 0.75,
"暴击伤害": 0.75,
"穿透值": 0.75,
"穿透率": 1,
"异常精通": 1,
"冲击力": 0,
"伤害加成": 1,
"能量自动回复": 0,
"异常掌控": 1
}
}

View file

@ -0,0 +1,173 @@
{
"「11号」": [
"十一号",
"十一",
"11号",
"11",
"「11号」"
],
"艾莲": [
"爱莲",
"爱怜",
"艾莲·乔",
"鲨鱼妹",
"鲨鱼"
],
"安东": [
"安东",
"安东·伊万诺夫"
],
"本": [
"熊本",
"熊本熊",
"ben",
"比格",
"本·比格"
],
"比利": [
"比例",
"bili",
"比利·奇德",
"Billy"
],
"苍角": [
"苍绝",
"仓角",
"仓脚"
],
"格莉丝": [
"格里斯",
"格利斯",
"格莉斯"
],
"珂蕾妲": [
"柯雷妲",
"珂雷哒",
"柯蕾妲"
],
"猫又": [
"猫猫",
"猫妖",
"猫怪",
"猫鼬",
"猫宫 又奈",
"猫宫又奈",
"又奈",
"Neko",
"neko"
],
"妮可": [
"尼克",
"妮克",
"妮寇",
"妮可·德玛拉",
"Nicole"
],
"朱鸢": [
"朱渊",
"朱元"
],
"丽娜": [
"莉娜",
"李娜",
"亚历山德丽娜·莎芭丝缇安",
"rina"
],
"莱卡恩": [
"冯·莱卡恩"
],
"安比": [
"安比",
"安笔"
],
"可琳": [
"克林",
"柯林",
"可林"
],
"雅": [
"星见雅",
"星见"
],
"露西": [
"路西",
"露西亚娜·德·蒙特夫",
"露西亚娜",
"鲁西"
],
"莱特": [
"赖特",
"Lighter"
],
"悠真": [
"悠",
"浅羽悠真",
"浅羽"
],
"柳": [
"月城",
"月城柳"
],
"青衣": [
"青医",
"轻易"
],
"赛斯": [
"赛斯·洛威尔",
"塞斯",
"洛威尔"
],
"派派": [
"拍拍",
"韦尔",
"派派·韦尔"
],
"凯撒": [
"恺撒",
"凯萨",
"凯撒·金",
"恺撒"
],
"简": [
"简",
"见",
"简·杜"
],
"柏妮思": [
"柏妮丝",
"妮丝",
"妮思",
"伯尼斯",
"博妮丝"
],
"哲": [
"哲"
],
"铃": [
"铃"
],
"波可娜": [
"波可娜·费雷尼",
"PulchraFeliny"
],
"耀嘉音": [
"耀佳音",
"佳音",
"耀"
],
"雨果": [
"雨果"
],
"薇薇安": [
"薇薇安",
"反舌鸟"
],
"零号·安比": [
"安比零",
"银心锡兵",
"零号",
"大安比",
"sp安比",
"s安比"
]
}

313
lib/ekapi/name_convert.js Normal file
View file

@ -0,0 +1,313 @@
// name_convert.js
console.log('[name_convert.js] 文件开始执行'); // <--- 加入这行
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url'; // <--- 1. 导入 fileURLToPath
// Use import.meta.url WITH fileURLToPath
const __filename = fileURLToPath(import.meta.url); // <--- 2. 获取当前文件的绝对路径
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 PartnerId2DataFile = 'PartnerId2Data.json';
const WeaponId2DataFile = 'WeaponId2Data.json';
const EquipId2DataFile = 'EquipId2Data.json';
let char_alias_data = {};
try {
// Ensure the alias directory exists before trying to read the file
if (fs.existsSync(ALIAS_LIST_DIR) && fs.existsSync(CHAR_ALIAS_FILE)) {
const charAliasContent = fs.readFileSync(CHAR_ALIAS_FILE, { encoding: 'utf-8' });
char_alias_data = JSON.parse(charAliasContent);
} else {
console.warn(`Alias file not found at: ${CHAR_ALIAS_FILE}. Aliases will not be loaded.`);
}
} catch (error) {
console.error('Error reading or parsing char_alias.json:', error);
}
let partner_data = {};
try {
const partnerDataPath = path.join(MAP_PATH, PartnerId2DataFile);
if (fs.existsSync(partnerDataPath)) {
const partnerDataContent = fs.readFileSync(partnerDataPath, { encoding: 'utf-8' });
partner_data = JSON.parse(partnerDataContent);
console.log(`[name_convert.js] 成功解析 JSON。`);
console.log(`[name_convert.js] 加载了 ${Object.keys(partner_data).length} 个伙伴条目。`);
console.log(`[name_convert.js] 加载后是否存在 "1191"? ${partner_data.hasOwnProperty('1191')}`);
console.log(`[name_convert.js] 加载后是否存在 "1021"? ${partner_data.hasOwnProperty('1021')}`);
// Optional: Keep debug logs if needed during development
// console.log('--- partner_data loaded successfully ---');
// console.log(`Loaded ${Object.keys(partner_data).length} partner entries.`);
// console.log('--- partner_data sample entry ---');
// const sampleKey = Object.keys(partner_data)[0];
// if (sampleKey) console.log({ [sampleKey]: partner_data[sampleKey] });
// console.log('--- partner_data loading end ---');
} else {
console.error(`Partner data file not found at: ${partnerDataPath}`);
}
} catch (error) {
console.error(`Error reading or parsing ${PartnerId2DataFile}:`, error);
}
let weapon_data = {};
try {
const weaponDataPath = path.join(MAP_PATH, WeaponId2DataFile);
if (fs.existsSync(weaponDataPath)) {
const weaponDataContent = fs.readFileSync(weaponDataPath, { encoding: 'utf-8' });
weapon_data = JSON.parse(weaponDataContent);
} else {
console.error(`Weapon data file not found at: ${weaponDataPath}`);
}
} catch (error) {
console.error(`Error reading or parsing ${WeaponId2DataFile}:`, error);
}
let equip_data = {};
try {
const equipDataPath = path.join(MAP_PATH, EquipId2DataFile);
if (fs.existsSync(equipDataPath)) {
const equipDataContent = fs.readFileSync(equipDataPath, { encoding: 'utf-8' });
equip_data = JSON.parse(equipDataContent);
} else {
console.error(`Equipment data file not found at: ${equipDataPath}`);
}
} catch (error) {
console.error(`Error reading or parsing ${EquipId2DataFile}:`, error);
}
// --- Helper Functions ---
/**
* 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
for (const canonical_name in char_alias_data) {
// Check if the input matches the canonical name (case-insensitive)
if (lowerCaseName === canonical_name.toLowerCase()) {
return canonical_name;
}
// Check if the input matches any alias in the array (case-insensitive)
if (Array.isArray(char_alias_data[canonical_name])) {
for (const alias of char_alias_data[canonical_name]) {
if (lowerCaseName === String(alias).toLowerCase()) {
return canonical_name;
}
}
}
}
// No alias found, return the original (trimmed) name
return char_name.trim();
}
/**
* Gets the sprite ID for a given character ID.
* @param {string|number} char_id - The character ID.
* @returns {string} The sprite ID, or a default ('28') if not found.
*/
export function char_id_to_sprite(char_id) {
const charIdStr = String(char_id);
// Corrected variable name: partner_data
if (partner_data[charIdStr] && partner_data[charIdStr].sprite_id) {
return partner_data[charIdStr].sprite_id;
} else {
// console.warn(`Sprite ID not found for character ID: ${charIdStr}. Using default.`);
return '28'; // Default sprite ID (Rope Master?)
}
}
/**
* Gets the full name for a given character ID.
* @param {string|number} char_id - The character ID.
* @returns {string} The character's full name, or a default ('绳匠') if not found.
*/
export function char_id_to_full_name(char_id) {
const charIdStr = String(char_id);
// Corrected variable name: partner_data
if (partner_data[charIdStr] && partner_data[charIdStr].full_name) {
return partner_data[charIdStr].full_name;
} else {
// console.warn(`Full name not found for character ID: ${charIdStr}. Using default.`);
return '绳匠'; // Default name (Rope Master)
}
}
/**
* Gets the sprite file name for a given equipment ID (relic).
* @param {string|number} equip_id - The equipment ID.
* @returns {string|undefined} The sprite file name, or undefined if not found.
*/
export function equip_id_to_sprite(equip_id) {
const equipIdStr = String(equip_id);
if (equipIdStr.length === 5) { // Assuming 5-digit IDs for relics
const suit_id = equipIdStr.slice(0, 3) + '00'; // Derive suit ID
if (equip_data[suit_id] && equip_data[suit_id].sprite_file) {
return equip_data[suit_id].sprite_file;
}
}
// console.warn(`Sprite file not found for equipment ID: ${equipIdStr}.`);
return undefined; // Return undefined if not found
}
/**
* Gets the short name for a given character ID.
* @param {string|number} char_id - The character ID.
* @returns {string|undefined} The character's short name, or undefined if not found.
*/
export function char_id_to_char_name(char_id) {
const charIdStr = String(char_id);
// Corrected variable name: partner_data
if (partner_data[charIdStr] && partner_data[charIdStr].name) {
return partner_data[charIdStr].name;
} else {
// console.warn(`Short name not found for character ID: ${charIdStr}.`);
return undefined;
}
}
/**
* Gets the character ID for a given character name (handles aliases).
* @param {string} char_name - The character name or alias.
* @returns {string|undefined} The character ID (as a string), or undefined if not found.
*/
export function char_name_to_char_id(char_name) {
if (!char_name) return undefined; // Handle null/empty input
const canonicalName = alias_to_char_name(char_name); // Resolve alias first
// Corrected variable name: partner_data
for (const char_id in partner_data) {
const charData = partner_data[char_id];
// Compare against the canonical name from alias resolution
if (charData && charData.name && charData.name === canonicalName) {
return char_id; // Return the ID (key)
}
}
// console.warn(`Character ID not found for name: "${char_name}" (resolved to: "${canonicalName}").`);
return undefined; // Not found
}
// Export the loaded data objects as well
export {
equip_data,
weapon_data,
partner_data,
char_alias_data // Optionally export alias data if needed elsewhere
};
// import fs from 'node:fs';
// import path from 'node:path';
//
// const MAP_PATH = path.dirname(new URL(import.meta.url).pathname);
// const ALIAS_LIST = path.join(path.dirname(new URL(import.meta.url).pathname), 'alias');
// const CHAR_ALIAS = path.join(ALIAS_LIST, 'char_alias.json');
// const PartnerId2DataFile = 'PartnerId2Data.json';
// const WeaponId2DataFile = 'WeaponId2Data.json';
// const EquipId2DataFile = 'EquipId2Data.json';
//
// let char_alias_data = {};
// try {
// const charAliasContent = fs.readFileSync(CHAR_ALIAS, { encoding: 'utf-8' });
// char_alias_data = JSON.parse(charAliasContent);
// } catch (error) {
// console.error('Error reading char_alias.json:', error);
// }
//
// let partner_data = {};
// try {
// const partnerDataContent = fs.readFileSync(path.join(MAP_PATH, PartnerId2DataFile), { encoding: 'utf-8' });
// partner_data = JSON.parse(partnerDataContent);
// console.log('--- partner_data 内容开始 ---');
// console.log(partner_data);
// console.log('--- partner_data 内容结束 ---');
// } catch (error) {
// console.error('Error reading PartnerId2Data.json:', error);
// }
//
// let weapon_data = {};
// try {
// const weaponDataContent = fs.readFileSync(path.join(MAP_PATH, WeaponId2DataFile), { encoding: 'utf-8' });
// weapon_data = JSON.parse(weaponDataContent);
// } catch (error) {
// console.error('Error reading WeaponId2Data.json:', error);
// }
//
// let equip_data = {};
// try {
// const equipDataContent = fs.readFileSync(path.join(MAP_PATH, EquipId2DataFile), { encoding: 'utf-8' });
// equip_data = JSON.parse(equipDataContent);
// } catch (error) {
// console.error('Error reading EquipId2Data.json:', error);
// }
//
// export function char_id_to_sprite(char_id) {
// const charIdStr = String(char_id);
// if (partener_data[charIdStr]) {
// return partener_data[charIdStr].sprite_id;
// } else {
// return '28';
// }
// }
//
// export function char_id_to_full_name(char_id) {
// const charIdStr = String(char_id);
// if (partener_data[charIdStr]) {
// return partener_data[charIdStr].full_name;
// } else {
// return '绳匠';
// }
// }
//
// export function equip_id_to_sprite(equip_id) {
// const equipIdStr = String(equip_id);
// if (equipIdStr.length === 5) {
// const suit_id = equipIdStr.slice(0, 3) + '00';
// if (equip_data[suit_id]) {
// return equip_data[suit_id].sprite_file;
// }
// }
// return undefined;
// }
//
// export function alias_to_char_name(char_name) {
// for (const i in char_alias_data) {
// if (char_name === i || (Array.isArray(char_alias_data[i]) && char_alias_data[i].includes(char_name))) {
// return i;
// }
// }
// return char_name;
// }
//
// export function char_id_to_char_name(char_id) {
// if (partener_data[char_id]) {
// return partener_data[char_id].name;
// } else {
// return undefined;
// }
// }
//
// export function char_name_to_char_id(char_name) {
// const aliasConvertedName = alias_to_char_name(char_name);
// for (const i in partener_data) {
// const chars = partener_data[i];
// if (aliasConvertedName === chars.name) {
// return i;
// }
// }
// return undefined;
// }
//
// export {
// equip_data,
// weapon_data,
// partner_data,
// };

39
lib/ekapi/query.js Normal file
View file

@ -0,0 +1,39 @@
import settings from '../settings.js'
import { ENKA_API } from './api.js'
import _ from 'request'
const useEnka = _.get(settings.getConfig('config'), 'useEnka', true);
export async function getZzzEnkaData(uid) {
if (useEnka) {
try {
const response = await fetch(ENKA_API.replace('{uid}', uid), {
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',
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Referer': 'https://enka.network/',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
},
});
if (!response.ok) {
console.error(`HTTP 错误! 状态码: ${response.status}`);
return response.status;
}
const data = await response.json(); // 解析 JSON 响应
if (typeof data === 'number') {
return data;
}
return data;
} catch (error) {
console.error("Error fetching ZZZ Enka data:", error);
return -1;
}
}
// 如果 useEnka 为 false你可能需要返回一个默认值或者执行其他逻辑
return null; // 或者其他你希望返回的值
}