GenshinData-1/myscripts/collateArtifact.js
2022-11-30 15:12:20 +07:00

68 lines
2.5 KiB
JavaScript

// object map that converts relic EquipType to a property name
const relicTypeToPropertyName = { 'EQUIP_BRACER': 'flower', 'EQUIP_NECKLACE': 'plume', 'EQUIP_SHOES': 'sands', 'EQUIP_RING': 'goblet', 'EQUIP_DRESS': 'circlet'};
// convert artifact type to index in readables
const relicTypeToIndex = {'EQUIP_BRACER': '4', 'EQUIP_NECKLACE': '2', 'EQUIP_SHOES': '5', 'EQUIP_RING': '1', 'EQUIP_DRESS': '3'}
function collateArtifact(lang) {
const language = getLanguage(lang);
const xsets = getExcel('ReliquarySetExcelConfigData');
const xrelics = getExcel('ReliquaryExcelConfigData');
const xreliccodex = getExcel('ReliquaryCodexExcelConfigData');
const xrefine = getExcel('EquipAffixExcelConfigData');
let myartifact = xsets.reduce((accum, obj) => {
if(obj.setIcon === '') return accum;
let setname;
let filename;
let data = {};
// get available rarities
data.rarity = xreliccodex.reduce((accum, relic) => {
if(obj.setId !== relic.suitId) return accum;
relic.level = relic.level.toString();
if(accum.indexOf(relic.level) === -1) accum.push(relic.level);
return accum;
}, []);
// set bonus effects
obj.setNeedNum.forEach((ele, ind) => {
let effect = xrefine.find(e => e.affixId === obj.EquipAffixId*10 + ind);
data[ele+'pc'] = language[effect.descTextMapHash];
if(setname === undefined) {
setname = language[effect.nameTextMapHash];
filename = makeFileName(getLanguage('EN')[effect.nameTextMapHash]);
}
});
if(data.rarity.length === 0) {
if(lang === 'EN') console.log(`Artifact set: ${setname} not available`);
return accum;
}
data.images = {};
// relic pieces
obj.containsList.forEach(ele => {
let relic = xrelics.find(e => e.id === ele);
let relicdata = {};
relicdata.name = language[relic.nameTextMapHash];
relicdata.relictype = xmanualtext.find(ele => ele.textMapId === relic.equipType).textMapContentTextMapHash;
relicdata.relictype = language[relicdata.relictype];
relicdata.description = language[relic.descTextMapHash];
relicdata.story = getReadable(`Relic${obj.setId}_${relicTypeToIndex[relic.equipType]}${(lang != 'CHS') ? ('_' + lang) : ''}`, lang);
data[relicTypeToPropertyName[relic.equipType]] = relicdata;
data.images['name'+relicTypeToPropertyName[relic.equipType]] = relic.icon;
data.images[relicTypeToPropertyName[relic.equipType]] = `https://upload-os-bbs.mihoyo.com/game_record/genshin/equip/${relic.icon}.png`;
});
data.name = setname;
accum[filename] = data;
return accum;
}, {});
return myartifact;
}
module.exports = collateArtifact;