Skip to content

Commit

Permalink
feat: skill_mobile
Browse files Browse the repository at this point in the history
  • Loading branch information
TiAmo-code committed Jul 19, 2024
1 parent 2adaeab commit 5227366
Show file tree
Hide file tree
Showing 2 changed files with 213 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
node_modules
.DS_Store
.DS_Store
.history
211 changes: 211 additions & 0 deletions tools/mobile_build.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
/*
* @Author: iRuxu
* @Email : rx6@qq.com
* @Date: 2022-05-29 10:11:59
* @LastEditTime: 2022-07-23 16:04:21
* @Description: 构建奇穴数据,order是重数,position是纵向位置!
*/
const path = require('path');
const fs = require('fs');
const { readTabFile, writeCsvFile, buildProgressBar, Logger, isNullOrZero } = require('./includes/utils');
const filter = require('./includes/filter.js');
const dateFormat = require('./includes/dateFormat');
const force_ids = require('@jx3box/jx3box-data/data/xf/forceid.json');
const xf = require('@jx3box/jx3box-data/data/xf/xf.json');

const kungfu_map = Object.values(xf).reduce((acc, cur) => {
if (cur.name === '山居剑意') cur.name = '问水诀';
acc[cur.kungfuId] = cur.name;
return acc;
}, {});

(async () => {
Logger.info('========== 开始构建奇穴数据 ==========');
Logger.info('读取必要的raw数据......');
const datas = {
school_map: force_ids,
kungfu_map,
xf,
mobile_kungfu_map: (await readTabFile(path.join(__dirname, '../raw/skill_mobile/MainKungfuInfo.tab'))).reduce((acc, cur) => {
if (cur.name === '移动端_山居剑意') cur.name = '移动端_问水诀';
acc[cur.TalentGroup] = cur.name.replace('移动端_', '');
console.log(acc);
return acc;
}, {}),
skill: [],
skill_txt: (await readTabFile(path.join(__dirname, '../raw/skill_mobile/skill.txt'))).reduce((acc, cur) => {
let key = `${cur.SkillID}_${cur.Level}`;
acc[key] = cur;
return acc;
}, {}),
skill_tab: (await readTabFile(path.join(__dirname, '../raw/skill_mobile/skills.tab'))).reduce((acc, cur) => {
acc[cur.SkillID] = cur;
return acc;
}, {}),
buff: [],
buff_txt: (await readTabFile(path.join(__dirname, '../raw/skill_mobile/buff.txt'))).reduce((acc, cur) => {
let key = `${cur.BuffID}_${cur.Level}`;
acc[key] = cur;
return acc;
}, {}),
buff_tab: (await readTabFile(path.join(__dirname, '../raw/skill_mobile/buff.tab'))).reduce((acc, cur) => {
let key = `${cur.ID}_${cur.Level}`;
cur.BuffID = cur.ID;
cur.BuffName = cur.Name;
delete cur.ID;
delete cur.Name;
acc[key] = cur;
return acc;
}, {}),
points: await readTabFile(path.join(__dirname, '../raw/skill_mobile/tenextrapoint.tab')),
temp: [],
temp_title_map: {
school: '门派',
kungfu: '心法',
order: '奇穴位置',
name: '奇穴名',
desc: '奇穴描述',
skillID: '技能ID',
position: '纵向位置',
},
talents: {},
talent_null: require('./includes/null'),
result: {},
};
Logger.info('合并需要用到的 skill 数据......');
{
let bar = await buildProgressBar(Object.keys(datas.skill_txt).length, '合并需要用到的 skill 数据');
for (let k in datas.skill_txt) {
let skill = datas.skill_txt[k];
let _skill = datas.skill_tab[skill.SkillID];
if (!_skill) _skill = {};
skill = Object.assign(skill, _skill);
_skill.__scan = true;
datas.skill.push(skill);
bar.tick();
}
let remain_skills = Object.values(datas.skill_tab).filter((t) => !t.__scan);
bar.total = bar.total + remain_skills.length;
for (let skill of remain_skills) {
datas.skill.push(skill);
bar.tick();
}
bar.terminate();
}
Logger.info('合并需要用到的 buff 数据.....');
{
let bar = await buildProgressBar(Object.keys(datas.buff_tab).length, 'buff合表中...', '...');
for (let buffid in datas.buff_tab) {
let buff = datas.buff_tab[buffid];
let _buff = datas.buff_txt[`${buff.BuffID}_${buff.Level}`];
if (!_buff) _buff = {};
buff = Object.assign(buff, _buff);
_buff.__scan = true;
datas.buff.push(buff);
bar.tick();
}
let remain_buff = Object.values(datas.buff_txt).filter((buff) => !buff.__scan);
bar.total = bar.total + remain_buff.length;
for (let buff of remain_buff) {
datas.buff.push(buff);
bar.tick();
}
bar.terminate();
Logger.info('构建奇穴数据......');
}
Logger.info('生成中间表......');
{
for (let point of datas.points) {
let school = datas.school_map[point.ForceID];
let kungfu = datas.mobile_kungfu_map[point.KungFuID];
console.log(kungfu);
let mountID = datas.xf[kungfu]['id'];

let _talents = [];
let _position = 1;
for (let index of [1, 2]) {
let keys = [point[`SkillID${index}`], point[`SkillLevel${index}`]];
let skill = datas.skill_txt[`${keys[0]}_${keys[1]}`];
if (!skill) skill = datas.skill_txt[`${keys[0]}_0`];
if (skill) {
let order = ((~~point.PointID - 1) % 12) + 1;
datas.temp.push({
school,
kungfu,
order,
name: skill.Name,
desc: skill.Desc,
skillID: keys[0],
position: _position++,
});
if (!datas.talents[mountID]) {
datas.talents[mountID] = [];
}
_talents.push(keys[0]);
}
}
// console.log(datas.talents);
console.log(mountID);
datas.talents[mountID].push(_talents);
}
}
//需要用到的方法
const getSkill = (qixue) => {
if (!qixue) return null;
let skill = datas.skill.find((t) => t.SkillID == qixue.skillID);
let desc = filter(qixue.desc, datas).replace(/\"/g, "'");
let name = skill.Name;
let icon = parseInt(skill.IconID);
let order = `${qixue.order}`; //第几层
let pos = qixue.position; //某层的第几个
let is_skill = !isNullOrZero(skill.HelpDesc) ? 1 : 0;
let meta = skill['SpecialDesc'];
let extend = skill['HelpDesc'];
let id = qixue.skillID;

return {
name,
icon,
desc,
order,
pos,
is_skill,
meta,
extend,
id,
};
};
Logger.info('构建奇穴......');
{
let bar = await buildProgressBar(datas.temp.length, '奇穴构建');
for (let item of datas.temp) {
let { kungfu, order, position } = item;
//心法不存在,创建心法
if (!datas.result[kungfu]) datas.result[kungfu] = {};
//奇穴位置不存在,建立奇穴位
if (!datas.result[kungfu][order]) datas.result[kungfu][order] = {};
let skill = getSkill(item);
datas.result[kungfu][order][position] = skill;
bar.tick(1, {
doing: `${kungfu}-(${skill.id})${item.name}`.substring(0, 10),
title: bar.title,
});
}
datas.result['其它'] = datas.talent_null;
bar.terminate();
}
Logger.info('构建结束,开始输出...');
fs.writeFileSync('./dist/talents.json', JSON.stringify(datas.talents));
fs.writeFileSync('./output/talents.json', JSON.stringify(datas.talents));
fs.writeFileSync(`./output/v${dateFormat(new Date())}.json`, JSON.stringify(datas.result));
writeCsvFile(
'./dist/temp.csv',
datas.temp.map((t) => {
for (let key in t) {
t[datas.temp_title_map[key]] = t[key];
delete t[key];
}
return t;
})
);
})();

0 comments on commit 5227366

Please sign in to comment.