mirror of
https://github.com/theBowja/GenshinData-1.git
synced 2025-04-29 02:28:36 +09:00
92 lines
3.3 KiB
JavaScript
92 lines
3.3 KiB
JavaScript
const xachieve = getExcel('AchievementExcelConfigData');
|
|
const xgoal = getExcel('AchievementGoalExcelConfigData');
|
|
const xreward = getExcel('RewardExcelConfigData');
|
|
const xmat = getExcel('MaterialExcelConfigData');
|
|
|
|
function collateAchievement(lang) {
|
|
const language = getLanguage(lang);
|
|
let myachievement = xachieve.reduce((accum, obj) => {
|
|
if(obj.IsDeleteWatcherAfterFinish === true) {
|
|
// console.log(`disuse: ${obj.Id} ${language[obj.TitleTextMapHash]}`)
|
|
return accum;
|
|
}
|
|
if(obj.Id === 84517) return accum; // Instant Karma achievement is unobtainable
|
|
|
|
if(obj.PreStageAchievementId) {
|
|
if(language[obj.DescTextMapHash] === '') return accum;
|
|
let data = Object.values(accum).find(ele => ele.Id.includes(obj.PreStageAchievementId));
|
|
data.Id.push(obj.Id);
|
|
|
|
data.stages = data.stages + 1;
|
|
if(data.stages > 3) console.log(`achievement ${obj.Id} has more than 3 stages`);
|
|
|
|
data['stage'+data.stages] = addStage(obj, language);
|
|
|
|
return accum;
|
|
}
|
|
|
|
let data = {};
|
|
data.Id = [obj.Id];
|
|
|
|
data.name = language[obj.TitleTextMapHash];
|
|
if(data.name === '') return accum;
|
|
|
|
data.achievementgroup = language[xgoal.find(e => e.Id === obj.GoalId).NameTextMapHash];
|
|
data.ishidden = obj.IsShow === 'SHOWTYPE_HIDE' ? true : undefined;
|
|
data.sortorder = obj.OrderId;
|
|
data.stages = 1;
|
|
|
|
data['stage'+data.stages] = addStage(obj, language);
|
|
|
|
|
|
let filename = makeFileName(getLanguage('EN')[obj.TitleTextMapHash]);
|
|
if(filename === '') return accum;
|
|
if(accum[filename] !== undefined) {
|
|
if(obj.Id !== 84004 && obj.Id !== 86007)
|
|
console.log('filename collision: ' + filename + ' disuse: ' + obj.IsDisuse);
|
|
filename+='a';
|
|
}
|
|
// if(accum[filename] !== undefined) return accum;
|
|
accum[filename] = data;
|
|
return accum;
|
|
}, {});
|
|
|
|
const groups = [...new Set(xgoal.map(e => language[e.NameTextMapHash]))];
|
|
// for(const g of groups) { showNumber(myachievement, g); };
|
|
console.log('total: ' + Object.values(myachievement).reduce((accum, ele) => { accum+=ele.stages; return accum }, 0));
|
|
|
|
// const wonder = Object.values(myachievement).filter(e => e.achievementgroup === 'Wonders of the World');
|
|
// console.log(wonder.sort((a, b) => a.sortorder - b.sortorder).map(e => e.name).slice(170));
|
|
|
|
return myachievement;
|
|
}
|
|
|
|
function showNumber(myachievement, group) {
|
|
const tmp = Object.values(myachievement).filter(e => e.achievementgroup === group).reduce((accum, ele) => {
|
|
accum+=ele.stages;
|
|
return accum;
|
|
}, 0);
|
|
console.log(`${group}: ${tmp}`);
|
|
}
|
|
|
|
function addStage(obj, language) {
|
|
let out = {};
|
|
out.title = language[obj.TitleTextMapHash];
|
|
if(language[obj.Ps5TitleTextMapHash] !== '')
|
|
out.ps5title = language[obj.Ps5TitleTextMapHash];
|
|
out.description = sanitizeDescription(language[obj.DescTextMapHash]);
|
|
out.progress = obj.Progress;
|
|
const rewards = xreward.find(e => e.RewardId === obj.FinishRewardId).RewardItemList.filter(f => f.ItemId);
|
|
if(rewards.length === 0) console.log(`achievement ${obj.Id} has no rewards`);
|
|
if(rewards.length > 1) console.log(`achievement ${obj.Id} has multiple rewards`);
|
|
if(rewards[0].ItemId !== 201) console.log(`achievement ${obj.Id} has non-primogem reward`);
|
|
out.reward = rewards.map(ele => {
|
|
return {
|
|
name: language[xmat.find(mat => mat.Id === ele.ItemId).NameTextMapHash],
|
|
count: ele.ItemCount
|
|
};
|
|
})[0];
|
|
return out;
|
|
}
|
|
|
|
module.exports = collateAchievement; |