Skip to content

Commit

Permalink
技能名称反查增加虚技能映射
Browse files Browse the repository at this point in the history
  • Loading branch information
whc2001 committed Jan 9, 2023
1 parent 3767d1d commit 1c9554c
Show file tree
Hide file tree
Showing 11 changed files with 16,541 additions and 557 deletions.
69 changes: 64 additions & 5 deletions build/skill_name_to_id_level.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const path = require('path');
const { exists, readFile, parseTable, writeFile } = require('@jx3box/jx3box-build-common/file');
const { exists, readFile, parseTable, writeFile, TABLE_DEFAULT_ROW_MODE } = require('@jx3box/jx3box-build-common/file');
const { initLogger } = require('@jx3box/jx3box-build-common/logger');

let baseLogger = null;
Expand Down Expand Up @@ -60,12 +60,38 @@ async function readAllSkillIDLevelAndName(client) {
return ret;
}

async function buildSkillNameToIDAndLevel(client, maxSkillLevel, skillIDLevelAndName) {
/**
* 读取所有虚技能替换映射
*/
async function readAllSkillReplace(client) {
let logger = baseLogger.job("readAllSkillReplace");

let ret = {};
logger.info('读取所有虚技能替换映射');
const skillReplacePath = path.join(__dirname, `../raw/${client}/skill_replace.txt`);
const skillReplaceTable = await parseTable(await readFile(skillReplacePath), {
keepColumns: ['src_skill_id', 'dst_skill_id1', 'dst_skill_id2'],
useDefaultRow: TABLE_DEFAULT_ROW_MODE.IGNORE
});

for(let line of skillReplaceTable) {
if(line['dst_skill_id1'])
ret[line['dst_skill_id1']] = line['src_skill_id'];
if(line['dst_skill_id2'])
ret[line['dst_skill_id2']] = line['src_skill_id'];
}

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

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

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

// 面板技能表
logger.info('读取所有技能');
const kungfuSkillPath = path.join(__dirname, `../raw/${client}/skill_kungfu.txt`);
const kungFuSkillTable = await parseTable(await readFile(kungfuSkillPath), {
keepColumns: ['Skill'],
Expand All @@ -77,8 +103,28 @@ async function buildSkillNameToIDAndLevel(client, maxSkillLevel, skillIDLevelAnd
acc.push(skill);
return acc;
}, []);
logger.info(`共读取 ${allKungfuSkills.length} 条数据`);

// 面板奇穴表
logger.info('读取所有奇穴');
const tenextraPointPath = path.join(__dirname, `../raw/${client}/tenextrapoint.tab`);
const tenExtraPointsTable = await parseTable(await readFile(tenextraPointPath));
const allTenExtraPointSkills = tenExtraPointsTable.reduce((acc, cur) => {
for (let i = 1; i <= 5; ++i) {
const skillID = cur[`SkillID${i}`];
const skillLevel = cur[`SkillLevel${i}`];
if (skillID && skillLevel)
acc.push(skillID);
}
return acc;
}, []);
logger.info(`共读取 ${allTenExtraPointSkills.length} 条数据`);

// 开始构建
logger.info('构建技能名称到 ID 与等级反查映射');
for (let skillID of [...allKungfuSkills, ...allTenExtraPointSkills]) {

for (let skillID of allKungfuSkills) {
// 直接查询
if (skillIDLevelAndName[skillID]) {
// skill_open_level 或技能表中查不到的取技能表中最大
let maxLevel = maxSkillLevel[skillID];
Expand All @@ -89,6 +135,18 @@ async function buildSkillNameToIDAndLevel(client, maxSkillLevel, skillIDLevelAnd
level: maxLevel
};
}

// 替换查询
if(skillReplace[skillID]) {
let replaceSkillID = skillReplace[skillID];
let maxLevel = maxSkillLevel[replaceSkillID];
if (!maxLevel || !skillIDLevelAndName[replaceSkillID][maxLevel])
maxLevel = GetMaxKey(skillIDLevelAndName[replaceSkillID]);
ret[skillIDLevelAndName[replaceSkillID][maxLevel]] = {
id: skillID,
level: maxLevel
};
}
}
logger.info(`共构建 ${Object.keys(ret).length} 条数据`);
return ret;
Expand All @@ -102,7 +160,8 @@ async function main(client) {

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

Expand Down
Loading

0 comments on commit 1c9554c

Please sign in to comment.