Skip to content

Commit

Permalink
增加玩家技能名称反查 ID 与等级
Browse files Browse the repository at this point in the history
  • Loading branch information
whc2001 committed Jan 2, 2023
1 parent 438cbca commit 903b018
Show file tree
Hide file tree
Showing 3 changed files with 2,145 additions and 0 deletions.
121 changes: 121 additions & 0 deletions build/skill_name_to_id_level.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
const path = require('path');
const { exists, readFile, parseTable, writeFile } = require('@jx3box/jx3box-build-common/file');
const { initLogger } = require('@jx3box/jx3box-build-common/logger');

let baseLogger = null;

function GetMaxKey(obj) {
return Object.entries(obj).sort((x, y) => ~~y[0] - ~~x[0])[0][0];
}

/**
* 读取所有技能最大等级
*/
async function readSkillMaxLevel(client) {
let logger = baseLogger.job("readSkillMaxLevel");

let ret = {};
logger.info('读取所有技能最大等级');

const skillOpenLevelPath = path.join(__dirname, `../raw/${client}/skill_open_level.txt`);
const skillMaxLevelTable = await parseTable(await readFile(skillOpenLevelPath), {
keepColumns: ['SkillID', 'SkillLevel'],
});

for (let line of skillMaxLevelTable) {
const skillID = line['SkillID'];
const skillLevel = line['SkillLevel'];
if (!ret.hasOwnProperty(skillID) || ret[skillID] < skillLevel) {
ret[skillID] = skillLevel;
}
}

logger.info(`共读取 ${skillMaxLevelTable.length} 条数据`);
return ret;
}

/**
* 读取与构建所有技能 ID 与等级到技能名称的映射
*/
async function readAllSkillIDLevelAndName(client) {
let logger = baseLogger.job("readAllSkillIDLevelAndName");

let ret = {};
logger.info('读取所有技能信息');
const skillPath = path.join(__dirname, `../raw/${client}/skill.txt`);
const skillTable = await parseTable(await readFile(skillPath), {
keepColumns: ['SkillID', 'Level', 'Name'],
});

for (let line of skillTable) {
const skillID = ~~line['SkillID'];
const skillLevel = ~~line['Level'];

if (!ret.hasOwnProperty(skillID))
ret[skillID] = {};
ret[skillID][skillLevel] = line['Name'];
}

logger.info(`共构建 ${Object.keys(ret).length} 条数据`);
return ret;
}

async function buildSkillNameToIDAndLevel(client, maxSkillLevel, skillIDLevelAndName) {
let logger = baseLogger.job("buildSkillNameToIDAndLevel");

let ret = {};
logger.info('构建技能名称到 ID 与等级反查映射');

const kungfuSkillPath = path.join(__dirname, `../raw/${client}/skill_kungfu.txt`);
const kungFuSkillTable = await parseTable(await readFile(kungfuSkillPath), {
keepColumns: ['Skill'],
});
const allKungfuSkills = kungFuSkillTable.reduce((acc, cur) => {
const skills = (cur['Skill'] || '').trim().replace('|', ';').split(';');
for (let skill of skills)
if (skill)
acc.push(skill);
return acc;
}, []);

for (let skillID of allKungfuSkills) {
if (skillIDLevelAndName[skillID]) {
// skill_open_level 或技能表中查不到的取技能表中最大
let maxLevel = maxSkillLevel[skillID];
if (!maxLevel || !skillIDLevelAndName[skillID][maxLevel])
maxLevel = GetMaxKey(skillIDLevelAndName[skillID]);
ret[skillIDLevelAndName[skillID][maxLevel]] = {
id: skillID,
level: maxLevel
};
}
}
logger.info(`共构建 ${Object.keys(ret).length} 条数据`);
return ret;
}

async function main(client) {
let logger = baseLogger;
try {

logger.info(`开始构建 ${client} 的技能图标映射数据...`);

let maxSkillLevel = await readSkillMaxLevel(client);
let allSkillIDLevelAndName = await readAllSkillIDLevelAndName(client);
let skillNameToIDLevel = await buildSkillNameToIDAndLevel(client, maxSkillLevel, allSkillIDLevelAndName);
const skillNameToIDLevelPath = path.join(__dirname, `../data/xf/skill_name_id_level_${client}.json`);
await writeFile(skillNameToIDLevelPath, JSON.stringify(skillNameToIDLevel, null, 4));

logger.success();
} catch (e) {
logger.fail(e);
}
await logger.end();
}

module.exports = client => {
return async () => {
baseLogger = initLogger('jx3-data/skill_name_to_id_level');
await main(client);
}
};
Loading

0 comments on commit 903b018

Please sign in to comment.