From 6baeb5035476322948a628f9551720a773250e74 Mon Sep 17 00:00:00 2001 From: theBowja Date: Tue, 1 Nov 2022 19:49:15 -0400 Subject: [PATCH] no idea what i did --- myscripts/collateAchievement.js | 11 +++---- myscripts/collateAchievementGroup.js | 5 ++-- myscripts/collateAnimal.js | 5 ++-- myscripts/collateDomainMonsterList.js | 24 +++++++-------- myscripts/collateEnemy.js | 14 ++++++--- myscripts/collateFood.js | 13 +++++++-- myscripts/collateGeography.js | 2 ++ myscripts/collateMaterial.js | 4 ++- myscripts/collateWeapon.js | 4 ++- myscripts/collateWindGlider.js | 2 ++ myscripts/myscript.js | 42 +++++++++++++++++++++------ myscripts/template.js | 28 ++++++++++++++++++ 12 files changed, 114 insertions(+), 40 deletions(-) create mode 100644 myscripts/template.js diff --git a/myscripts/collateAchievement.js b/myscripts/collateAchievement.js index 51c31d4af..d6bd7af8c 100644 --- a/myscripts/collateAchievement.js +++ b/myscripts/collateAchievement.js @@ -3,7 +3,9 @@ const xgoal = getExcel('AchievementGoalExcelConfigData'); const xreward = getExcel('RewardExcelConfigData'); const xmat = getExcel('MaterialExcelConfigData'); + function collateAchievement(lang) { + const dupeCheck = {}; const language = getLanguage(lang); let myachievement = xachieve.reduce((accum, obj) => { if(obj.isDisuse === true) { @@ -39,14 +41,9 @@ function collateAchievement(lang) { data['stage'+data.stages] = addStage(obj, language); - let filename = makeFileName(getLanguage('EN')[obj.titleTextMapHash]); + let filename = makeUniqueFileName(obj.titleTextMapHash, accum, data); 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; + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; }, {}); diff --git a/myscripts/collateAchievementGroup.js b/myscripts/collateAchievementGroup.js index e6159364e..db44be291 100644 --- a/myscripts/collateAchievementGroup.js +++ b/myscripts/collateAchievementGroup.js @@ -4,6 +4,7 @@ const xmat = getExcel('MaterialExcelConfigData'); function collateAchievementGroup(lang) { const language = getLanguage(lang); + const dupeCheck = {}; let myachievementgroup = xgroup.reduce((accum, obj) => { let data = {}; data.id = obj.id; @@ -25,9 +26,9 @@ function collateAchievementGroup(lang) { data.nameicon = obj.iconPath; - let filename = makeFileName(getLanguage('EN')[obj.nameTextMapHash]); + let filename = makeUniqueFileName(obj.nameTextMapHash, accum); if(filename === '') return accum; - if(accum[filename] !== undefined) console.log('filename collision: ' + filename); + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; }, {}); diff --git a/myscripts/collateAnimal.js b/myscripts/collateAnimal.js index b90688e51..60da11dee 100644 --- a/myscripts/collateAnimal.js +++ b/myscripts/collateAnimal.js @@ -14,6 +14,7 @@ for([key, value] of Object.entries(xcodex[0])) { function collateAnimal(lang) { const language = getLanguage(lang); + const dupeCheck = {}; let mydata = xcodex.reduce((accum, obj) => { if(obj.type === 'CODEX_MONSTER') return accum; if(obj.isDisuse) return accum; @@ -33,9 +34,9 @@ function collateAnimal(lang) { data.nameicon = mydescribe.icon; - let filename = makeFileName(getLanguage('EN')[mydescribe.nameTextMapHash]); + let filename = makeUniqueFileName(mydescribe.nameTextMapHash, accum); if(filename === '') return accum; - if(accum[filename] !== undefined) console.log('filename collision: ' + filename); + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; }, {}); diff --git a/myscripts/collateDomainMonsterList.js b/myscripts/collateDomainMonsterList.js index cc9632eea..6aab572ee 100644 --- a/myscripts/collateDomainMonsterList.js +++ b/myscripts/collateDomainMonsterList.js @@ -108,20 +108,20 @@ const monsterMap = { "forge trial thunder iii": ['la el slime', 'mu el slime', 'fa el ci mage'], "forge trial thunder iv": ['la el slime', 'mu el slime', 'fa el ci mage'], - "forge tainted clouds i": ['pyro fungus', 'dendro fungus', 'hydro fungus', 'electro fungus'], - "forge tainted clouds ii": ['cryo fungus', 'pyro fungus', 'geo fungus', 'dendro fungus', 'electro fungus'], - "forge tainted clouds iii": ['pyro fungus', 'cryo fungus', 'geo fungus', 'electro fungus', 'dendro fungus', 'hydroshroom', 'dendroshroom'], - "forge tainted clouds iv": ['hydro fungus', 'dendro fungus', 'hydroshroom', 'dendroshroom'], + "forge tainted clouds i": ['str pyro fungus', 'fl dendro fungus', 'fl hydro fungus', 'wh electro fungus'], + "forge tainted clouds ii": ['wh cryo fungus', 'str pyro fungus', 'str geo fungus', 'fl dendro fungus', 'wh electro fungus'], + "forge tainted clouds iii": ['str pyro fungus', 'wh cryo fungus', 'str geo fungus', 'wh electro fungus', 'fl dendro fungus', 'g hydroshroom', 'w dendroshroom'], + "forge tainted clouds iv": ['f hydro fungus', 'f dendro fungus', 'g hydroshroom', 'w dendroshroom'], - "forge obsession i": ['pyro fungus', 'dendro fungus', 'hydro fungus', 'electro fungus'], - "forge obsession ii": ['cryo fungus', 'pyro fungus', 'geo fungus', 'dendro fungus', 'electro fungus'], - "forge obsession iii": ['pyro fungus', 'cryo fungus', 'geo fungus', 'electro fungus', 'dendro fungus', 'hydroshroom', 'dendroshroom'], - "forge obsession iv": ['hydro fungus', 'dendro fungus', 'hydroshroom', 'dendroshroom'], + "forge obsession i": ['str pyro fungus', 'f dendro fungus', 'f hydro fungus', 'wh electro fungus'], + "forge obsession ii": ['wh cryo fungus', 'str pyro fungus', 'str geo fungus', 'f dendro fungus', 'wh electro fungus'], + "forge obsession iii": ['str pyro fungus', 'wh cryo fungus', 'str geo fungus', 'electro fungus', 'f dendro fungus', 'g hydroshroom', 'w dendroshroom'], + "forge obsession iv": ['f hydro fungus', 'f dendro fungus', 'g hydroshroom', 'w dendroshroom'], - "forge lead karma i": ['pyro fungus', 'dendro fungus', 'hydro fungus', 'electro fungus'], - "forge lead karma ii": ['cryo fungus', 'pyro fungus', 'geo fungus', 'dendro fungus', 'electro fungus'], - "forge lead karma iii": ['pyro fungus', 'cryo fungus', 'geo fungus', 'electro fungus', 'dendro fungus', 'hydroshroom', 'dendroshroom'], - "forge lead karma iv": ['hydro fungus', 'dendro fungus', 'hydroshroom', 'dendroshroom'], + "forge lead karma i": ['str pyro fungus', 'f dendro fungus', 'f hydro fungus', 'wh electro fungus'], + "forge lead karma ii": ['wh cryo fungus', 'str pyro fungus', 'str geo fungus', 'f dendro fungus', 'wh electro fungus'], + "forge lead karma iii": ['str pyro fungus', 'wh cryo fungus', 'str geo fungus', 'wh electro fungus', 'f dendro fungus', 'g hydroshroom', 'w dendroshroom'], + "forge lead karma iv": ['f hydro fungus', 'f dendro fungus', 'g hydroshroom', 'w dendroshroom'], "maste alt flame i": ['py slime', 'la py slime', 'py ab mage'], "maste alt flame ii": ['py slime', 'la py slime', 'py ab mage'], diff --git a/myscripts/collateEnemy.js b/myscripts/collateEnemy.js index f8098bab9..3a136af2a 100644 --- a/myscripts/collateEnemy.js +++ b/myscripts/collateEnemy.js @@ -27,6 +27,7 @@ if(out === null) console.log('enemy null resistance rounding'); function collateEnemy(lang) { const language = getLanguage(lang); const xmat = getExcel('MaterialExcelConfigData'); + const dupeCheck = {}; let mymonster = xcodex.reduce((accum, obj) => { if(obj.type !== 'CODEX_MONSTER') return accum; @@ -64,9 +65,6 @@ function collateEnemy(lang) { // Abyss Lector: Violet Lightning, Abyss Herald: Wicked Torrents, Abyss Lector: Fathomless Flames // Hydro Cicin, Electro Cicin, Cryo Cicin data.rewardpreview = []; - } else if(obj.Id === 26090101) { // Floating Hydro Fungus - let rewardpreview = xpreview.find(pre => pre.id === 16012).previewItems.filter(pre => pre.id); - data.rewardpreview = mapRewardList(rewardpreview, language); } else if(obj.Id === 29010104) { // dvalin lvl90 let rewardpreview = xpreview.find(pre => pre.id === 15005).previewItems.filter(pre => pre.id); data.rewardpreview = mapRewardList(rewardpreview, language); @@ -145,6 +143,7 @@ function collateEnemy(lang) { let filename = makeFileName(getLanguage('EN')[des.nameTextMapHash]); if(filename === '') return accum; + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; @@ -169,7 +168,14 @@ const noRewardListMonsterMap = { 25030101: 25010201, // Treasure Hoarders: Carmen 25040101: 25010201, // Treasure Hoarders: Boss 25050101: 25010201, // Millelith Soldier - 25050201: 25010201 // Millelith Sergeant + 25050201: 25010201, // Millelith Sergeant + 25410201: 25210301, // Eremite Galehunter + 25410101: 25210301, // Eremite Stone Enchanter + 26090101: 26090201, // Floating Hydro Fungus + 26090301: 26090201, // Floating Anemo Fungus + 26090601: 26090401, // Whirling Pyro Fungus + 26091001: 26090901, // Stretch Electro Fungus + 26120401: 26120301 // Grounded Geoshroom } // makes sure each monster has a corresponding "investigation" data diff --git a/myscripts/collateFood.js b/myscripts/collateFood.js index 73f55fded..94a309aed 100644 --- a/myscripts/collateFood.js +++ b/myscripts/collateFood.js @@ -20,6 +20,7 @@ const mapQualityToProp = { function collateFood(lang) { const language = getLanguage(lang); + const dupeCheck = {}; let myfood = xrecipe.reduce((accum, obj) => { //if(obj.id !== 1003) return accum; @@ -61,7 +62,11 @@ function collateFood(lang) { // data.source = data.imagename = obj.icon; - accum[makeFileName(getLanguage('EN')[obj.nameTextMapHash])] = data; + + let filename = makeFileName(getLanguage('EN')[obj.nameTextMapHash]); + if(accum[filename] !== undefined) console.log('filename collision: ' + filename); + checkDupeName(data, dupeCheck) + accum[filename] = data; // check if there is a specialty let myspec = getSpecialty(obj.id); @@ -90,7 +95,11 @@ function collateFood(lang) { spdata.ingredients = ingredients; spdata.imagename = xd.icon; - accum[makeFileName(getLanguage('EN')[xd.nameTextMapHash])] = spdata; + filename = makeFileName(getLanguage('EN')[xd.nameTextMapHash]); + if(accum[filename] !== undefined) console.log('filename collision: ' + filename); + checkDupeName(spdata, dupeCheck); + accum[filename] = spdata; + return accum; }, {}); // console.log(myfood); diff --git a/myscripts/collateGeography.js b/myscripts/collateGeography.js index 7a5e0a0fb..16ea25fbe 100644 --- a/myscripts/collateGeography.js +++ b/myscripts/collateGeography.js @@ -5,6 +5,7 @@ const xarea = getExcel('WorldAreaConfigData'); function collageGeography(lang) { const language = getLanguage(lang); + const dupeCheck = {}; let mygeography = xview.reduce((accum, obj) => { let data = {}; @@ -24,6 +25,7 @@ function collageGeography(lang) { let filename = makeFileName(getLanguage('EN')[obj.nameTextMapHash]); if(filename === '') return accum; if(accum[filename] !== undefined) console.log('filename collision: ' + filename); + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; }, {}); diff --git a/myscripts/collateMaterial.js b/myscripts/collateMaterial.js index 7a1d8d134..4bfab7ff3 100644 --- a/myscripts/collateMaterial.js +++ b/myscripts/collateMaterial.js @@ -57,6 +57,7 @@ function collateMaterial(lang) { const xpool = getExcel('FishPoolExcelConfigData'); let sortOrder = 0; + const dupeCheck = {}; let mymaterial = xmat.reduce((accum, obj) => { sortOrder++; @@ -111,9 +112,10 @@ function collateMaterial(lang) { data.imagename = obj.icon; if(!data.imagename) console.log(data.name+' has no icon'); - let filename = makeUniqueFileName(obj.nameTextMapHash, accum); + let filename = makeUniqueFileName(obj.nameTextMapHash, accum, data); if(filename === '') return accum; if(filename.includes('shrineofdepthskey')) return accum; + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; }, {}); diff --git a/myscripts/collateWeapon.js b/myscripts/collateWeapon.js index dc71e9e66..1c8860686 100644 --- a/myscripts/collateWeapon.js +++ b/myscripts/collateWeapon.js @@ -15,16 +15,18 @@ const xplayableWeapon = xweapon.filter(obj => { function collateWeapon(lang) { const language = getLanguage(lang); + const dupeCheck = {}; const xsubstat = getExcel('WeaponPromoteExcelConfigData'); let myweapon = xplayableWeapon.reduce((accum, obj) => { let data = {}; data.id = obj.id; - let filename = makeUniqueFileName(obj.nameTextMapHash, accum); + let filename = makeUniqueFileName(obj.nameTextMapHash, accum, data); if(filename === "") return accum; if(accum[filename] !== undefined) console.log(filename+' IS NOT UNIQUE'); data.name = language[obj.nameTextMapHash]; + checkDupeName(data, dupeCheck); data.description = sanitizeDescription(language[obj.descTextMapHash]); data.weapontype = language[weaponTextMapHash[obj.weaponType]]; data.rarity = ''+obj.rankLevel; diff --git a/myscripts/collateWindGlider.js b/myscripts/collateWindGlider.js index 15a8bb510..3a4606fb9 100644 --- a/myscripts/collateWindGlider.js +++ b/myscripts/collateWindGlider.js @@ -4,6 +4,7 @@ const xfly = getExcel('AvatarFlycloakExcelConfigData'); function collateWindGlider(lang) { const language = getLanguage(lang); + const dupeCheck = {}; let mydata = xfly.reduce((accum, obj) => { let data = {}; data.id = obj.flycloakId; @@ -28,6 +29,7 @@ function collateWindGlider(lang) { let filename = makeFileName(getLanguage('EN')[obj.nameTextMapHash]); if(filename === '') return accum; if(accum[filename] !== undefined) console.log('filename collision: ' + filename); + checkDupeName(data, dupeCheck); accum[filename] = data; return accum; }, {}); diff --git a/myscripts/myscript.js b/myscripts/myscript.js index e665c4bf2..bac43019f 100644 --- a/myscripts/myscript.js +++ b/myscripts/myscript.js @@ -27,7 +27,7 @@ global.isPlayer = function(data) { return data.candSkillDepotIds && data.candSki global.getPlayerElement = function(SkillDepotId) { let tmp = xskilldepot.find(ele => ele.id === SkillDepotId); return tmp === undefined ? tmp : tmp.talentStarName.split('_').pop(); } global.getLanguage = function(abbriev) { return getTextMap(abbriev.toUpperCase()); } global.normalizeStr = function(str) { return str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); } -global.makeFileName = function(str, lang) { return normalizeStr(str).toLowerCase().replace(/[^a-z]/g,''); } +global.makeFileName = function(str, lang) { return normalizeStr(str).toLowerCase().replace(/[^a-z0-9]/g,''); } global.convertBold = function(str) { return str.replace(/(.*?)<\/color>/gi, '**$1**'); } global.stripHTML = function(str) { return (str || '').replace(/(<([^>]+)>)/gi, ''); } global.capitalizeFirst = function(str) { return str[0].toUpperCase() + str.toLowerCase().slice(1); } @@ -70,6 +70,7 @@ global.dayOfWeek = function(num) { return xmanualtext.find(ele => ele.textMapId === 'UI_ABYSSUS_DATE'+num).textMapContentTextMapHash; } +const uniqueLog = {}; // if it isn't unique, then appends "a" to end. or "b". all the way to "z". global.makeUniqueFileName = function(textmaphash, map) { let name = getLanguage('EN')[textmaphash]; @@ -77,11 +78,34 @@ global.makeUniqueFileName = function(textmaphash, map) { let filename = makeFileName(name); if(map[filename] === undefined) return filename; - let charset = "abcdefghijklmnopqrstuvwxyz"; - let i = 0; - while(map[filename+charset[i]] !== undefined) { i++; } - if(i === 26) console.log("cannot make unique filename for " + name); - else return filename+charset[i]; + let i = 1; + while(map[filename+"-"+("0" + i).slice(-2)] !== undefined) { i++; } + if(i > 99) console.log("cannot make unique filename for " + name); + else { + // if (!uniqueLog[name + ' ' + i]) + // console.log(' dupe made: '+name + ' ' + i) + return filename+"-"+("0" + i).slice(-2); + } +} + +const dupelogskip = [118002, 11419, 100934, 28030501, 80032, 82010]; +global.checkDupeName = function(data, namemap) { + let name = data.name; + let key = name.toLowerCase().replace(/[ ["'·\.「」…!\!?\?(\)。,,《》—『』«»<>\]#{\}]/g, ''); + let id; + if (namemap[key]) { + namemap[key].dupealias = namemap[key].name + ' 0'; + id = namemap[key].id || namemap[key].id[0] || -1; + } else { + namemap[key] = data; + return false; + } + let i = 1; + while (namemap[key+i]) { i++; } + data.dupealias = name+' '+i; + if(!dupelogskip.includes(id)) console.log(" dupealias added " + id + ": "+data.dupealias); + namemap[key+i] = data; + return true; } const xcity = getExcel('CityConfigData'); @@ -155,9 +179,9 @@ function exportData(folder, collateFunc, englishonly, skipwrite) { // exportData('namecards', require('./collateNamecard')); // exportData('geographies', require('./collateGeography')); // exportData('achievements', require('./collateAchievement')); -// exportData('achievementgroups', require('./collateAchievementGroup')); -// exportData('adventureranks', require('./collateAdventureRank')); -exportData('crafts', require('./collateCraft')); +exportData('achievementgroups', require('./collateAchievementGroup')); +exportData('adventureranks', require('./collateAdventureRank')); +// exportData('crafts', require('./collateCraft')); // exportData('commissions', require('./collateCommission'), true); // unfinished // exportData('voiceovers', require('./collateVoiceover'), true); // unfinished diff --git a/myscripts/template.js b/myscripts/template.js new file mode 100644 index 000000000..450cb4504 --- /dev/null +++ b/myscripts/template.js @@ -0,0 +1,28 @@ +const xmat = getExcel('MaterialExcelConfigData'); + + + +function collate(lang) { + const language = getLanguage(lang); + const dupeCheck = {}; + let mydata = xmat.reduce((accum, obj) => { + let data = {}; + data.id = obj.Id; + + data.name = language[obj.nameTextMapHash]; + data.description = sanitizeDescription(language[obj.descTextMapHash]); + + + + let filename = makeUniqueFileName(obj.nameTextMapHash, accum); + if(filename === '') return accum; + checkDupeName(data, dupeCheck); + accum[filename] = data; + + return accum; + }, {}); + + return mydata; +} + +module.exports = collate; \ No newline at end of file