From 04cdb1ce7c7c2cdeedbfe4078539410a90780531 Mon Sep 17 00:00:00 2001 From: theBowja Date: Fri, 31 Dec 2021 10:59:56 -0500 Subject: [PATCH] bing chilling --- myscripts/collateArtifact.js | 5 ++ myscripts/collateCharacter.js | 12 +++++ myscripts/collateConstellation.js | 2 +- myscripts/collateFishingPoint.js | 79 +++++++++++++++++++++++++++++++ myscripts/collateFood.js | 4 +- myscripts/collateMaterial.js | 20 ++++++++ myscripts/collateTalent.js | 8 +++- myscripts/myscript.js | 6 +-- 8 files changed, 128 insertions(+), 8 deletions(-) create mode 100644 myscripts/collateFishingPoint.js diff --git a/myscripts/collateArtifact.js b/myscripts/collateArtifact.js index 78a055405..e15ec3a75 100644 --- a/myscripts/collateArtifact.js +++ b/myscripts/collateArtifact.js @@ -32,6 +32,11 @@ function collateArtifact(lang) { } }); + 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 => { diff --git a/myscripts/collateCharacter.js b/myscripts/collateCharacter.js index 4dc1c908a..388e66b3a 100644 --- a/myscripts/collateCharacter.js +++ b/myscripts/collateCharacter.js @@ -18,6 +18,18 @@ function collateCharacter(lang) { data.name = language[obj.NameTextMapHash]; if(isPlayer(obj)) data.name = language[playerIdToTextMapHash[obj.Id]]; + + data.fullname = data.name; + if(!isPlayer(obj)) { + let cardimgname = obj.IconName.slice(obj.IconName.lastIndexOf('_')+1); + cardimgname = `UI_AvatarIcon_${cardimgname}_Card`; + let charmat = xmat.find(ele => ele.Icon === cardimgname); + data.fullname = language[charmat.NameTextMapHash]; + } + + if(data.name !== data.fullname) console.log(`fullname diff ${lang}: ${data.name} | ${data.fullname}`); + + //if(data.name === 'Traveler') data.name = capitalizeFirst(avatarIdToFileName[obj.Id]); data.description = sanitizeDescription(language[obj.DescTextMapHash]); data.weapontype = language[weaponTextMapHash[obj.WeaponType]]; diff --git a/myscripts/collateConstellation.js b/myscripts/collateConstellation.js index efdc3181b..48bf0a6d2 100644 --- a/myscripts/collateConstellation.js +++ b/myscripts/collateConstellation.js @@ -17,7 +17,7 @@ function collateConstellation(lang) { let stars = depot.Talents.map(talentId => xconstellation.find(ele => ele.TalentId === talentId)); for(let i = 1; i <= 6; i++) { data['c'+i] = { - name: language[stars[i-1].NameTextMapHash], + name: sanitizeDescription(language[stars[i-1].NameTextMapHash]), effect: sanitizeDescription(language[stars[i-1].DescTextMapHash]) }; data.images['c'+i] = `https://upload-os-bbs.mihoyo.com/game_record/genshin/constellation_icon/${stars[i-1].Icon}.png`; diff --git a/myscripts/collateFishingPoint.js b/myscripts/collateFishingPoint.js new file mode 100644 index 000000000..4b0ff2084 --- /dev/null +++ b/myscripts/collateFishingPoint.js @@ -0,0 +1,79 @@ +// /* +// MATERIAL_AVATAR_MATERIAL is talent level-up material, etc. + +// */ + +// const filter = ['MATERIAL_EXCHANGE', 'MATERIAL_WOOD', 'MATERIAL_AVATAR_MATERIAL', 'MATERIAL_EXP_FRUIT', +// 'MATERIAL_WEAPON_EXP_STONE', 'MATERIAL_CONSUME', 'MATERIAL_FISH_BAIT', 'MATERIAL_FISH_ROD']; + +// // Adventure EXP, Mora, Primogems, Companionship EXP, Apple, Sunsettia +// const includeMatId = [102, 202, 201, 105, 100001, 100002]; +// // Crafted Items, Primordial Essence, Raw Meat (S), Fowl (S), Original Essence (Invalidated), Original Resin (Invalidated) +// // Scarlet Quartz, Scarlet Quartz, Test Stamina Growth Item, Test Temporary stamina Growth Item +// const excludeMatId = [110000, 112001, 100086, 100087, 210, 211, +// 101005, 101007, 106000, 106001]; + +// function sortMaterials(mata, matb) { +// if(mata.Rank < matb.Rank) return -1; +// if(mata.Rank > matb.Rank) return 1; +// if(mata.Id < matb.Id) return -1; +// if(mata.Id > matb.Id) return 1; +// return 0; +// } + +// function collateFishingPoint(lang) { +// const language = getLanguage(lang); +// const xsource = getExcel('MaterialSourceDataExcelConfigData'); +// const xmat = getExcel('MaterialExcelConfigData').sort(sortMaterials); +// const xarchive = getExcel('MaterialCodexExcelConfigData'); +// const xdungeon = getExcel('DungeonExcelConfigData'); + +// let sortOrder = 0; + +// let mymaterial = xmat.reduce((accum, obj) => { +// sortOrder++; +// if(!includeMatId.includes(obj.Id)) { +// if(!obj.MaterialType) return accum; +// if(excludeMatId.includes(obj.Id)) return accum; +// if(!filter.includes(obj.MaterialType)) return accum; +// } +// if(obj.Icon === "UI_ItemIcon_109000") return accum; // skip recipes +// else if(obj.Icon === "UI_ItemIcon_221003") return accum; // skip diagrams +// else if(obj.Icon === "UI_ItemIcon_221035") return accum; // skip bait blueprint +// else if(obj.Icon === "UI_ItemIcon_221001") return accum; // skip instruction blueprints + +// let data = {}; +// data.Id = obj.Id; +// data.name = language[obj.NameTextMapHash]; +// if(data.name === '') return accum; +// data.sortorder = sortOrder; +// data.description = sanitizeDescription(language[obj.DescTextMapHash]); +// data.category = obj.MaterialType ? obj.MaterialType.slice(9) : obj.ItemType; +// data.materialtype = language[obj.TypeDescTextMapHash]; +// if(obj.RankLevel) data.rarity = ''+obj.RankLevel; + +// let tmp = xsource.find(ele => ele.Id === obj.Id); +// let dungeonlist = tmp.DungeonList.filter(ele => ele !== 0); +// if(dungeonlist > 0) { +// if(dungeonlist.length > 1) console.log(`${data.name} drops from more than one dungeon!`); +// data.dropdomain = language[xdungeon.find(ele => ele.Id === dungeonlist[0]).DisplayNameTextMapHash]; // artifact domains don't have DisplayNameTextMapHash +// data.daysofweek = getDayWeekList(dungeonlist[0], language); +// } +// if(getLanguage('EN')[obj.TypeDescTextMapHash] === 'Fish') { // get fishing locations + +// } +// data.source = tmp.TextList.map(ele => language[ele]).filter(ele => ele !== ''); + +// data.imagename = obj.Icon; +// if(!data.imagename) console.log(data.name+' has no icon'); + +// let filename = makeFileName(getLanguage('EN')[obj.NameTextMapHash]); +// if(filename === '') return accum; +// if(filename.includes('shrineofdepthskey')) return accum; +// accum[filename] = data; +// return accum; +// }, {}); +// return mymaterial; +// } + +// module.exports = collateMaterial; diff --git a/myscripts/collateFood.js b/myscripts/collateFood.js index 6a9ae2e33..40f67976f 100644 --- a/myscripts/collateFood.js +++ b/myscripts/collateFood.js @@ -33,7 +33,7 @@ function collateFood(lang) { data.foodfilter = language[getManualTextMapHash(obj.FoodType)]; data.foodcategory = undefined; data.effect = obj.EffectDesc.reduce((accum, eff) => { - const tmp = stripHTML(language[eff]); + const tmp = replaceLayout(stripHTML(language[eff])); if(tmp) accum.push(tmp); return accum; }, []).join('\n'); @@ -81,7 +81,7 @@ function collateFood(lang) { if(language[xd.InteractionTitleTextMapHash]) console.log(`specialty ${obj.Id} has interaction`); if(language[xd.SpecialDescTextMapHash]) console.log(`specialty ${obj.Id} has special`); - spdata.effect = language[xd.EffectDescTextMapHash]; + spdata.effect = replaceLayout(language[xd.EffectDescTextMapHash]); spdata.description = sanitizeDescription(language[xd.DescTextMapHash]); spdata.basedish = basedish; diff --git a/myscripts/collateMaterial.js b/myscripts/collateMaterial.js index 245006c1e..5604d2d15 100644 --- a/myscripts/collateMaterial.js +++ b/myscripts/collateMaterial.js @@ -28,6 +28,10 @@ function collateMaterial(lang) { const xarchive = getExcel('MaterialCodexExcelConfigData'); const xdungeon = getExcel('DungeonExcelConfigData'); + const xfish = getExcel('FishExcelConfigData'); + const xstock = getExcel('FishStockExcelConfigData'); + const xpool = getExcel('FishPoolExcelConfigData'); + let sortOrder = 0; let mymaterial = xmat.reduce((accum, obj) => { @@ -59,6 +63,21 @@ function collateMaterial(lang) { data.dropdomain = language[xdungeon.find(ele => ele.Id === dungeonlist[0]).DisplayNameTextMapHash]; // artifact domains don't have DisplayNameTextMapHash data.daysofweek = getDayWeekList(dungeonlist[0], language); } + // get fishing locations + if(getLanguage('EN')[obj.TypeDescTextMapHash] === 'Fish') { + let fishId = xfish.find(ele => ele.ItemId === obj.Id).Id; + let stockIds = xstock.reduce((stockAccum, stockObj) => { + if(stockObj._fishWeight[fishId] !== undefined) stockAccum.push(stockObj.Id); + return stockAccum; + }, []); + data.fishinglocations = stockIds.reduce((poolAccum, stockId) => { + let pool = xpool.find(p => p._stockList.includes(stockId)); + if(pool === undefined) return poolAccum; + if(!poolAccum.includes(language[pool._poolNameTextMapHash])) + poolAccum.push(language[pool._poolNameTextMapHash]); + return poolAccum; + }, []); + } data.source = tmp.TextList.map(ele => language[ele]).filter(ele => ele !== ''); data.imagename = obj.Icon; @@ -66,6 +85,7 @@ function collateMaterial(lang) { let filename = makeFileName(getLanguage('EN')[obj.NameTextMapHash]); if(filename === '') return accum; + if(filename.includes('shrineofdepthskey')) return accum; accum[filename] = data; return accum; }, {}); diff --git a/myscripts/collateTalent.js b/myscripts/collateTalent.js index 67d2a8319..13d82aa64 100644 --- a/myscripts/collateTalent.js +++ b/myscripts/collateTalent.js @@ -36,11 +36,14 @@ function collateTalent(lang) { let talent = xtalent.find(tal => tal.Id === skId); let combatTypeProp = talentCombatTypeMap[index]; let ref = data[combatTypeProp] = {}; - + ref.Id = talent.Id; ref.name = language[talent.NameTextMapHash]; let desc = language[talent.DescTextMapHash].split('\\n\\n'); // extract out the italicized part ref.info = sanitizeDescription(desc[0]); if(desc[1]) ref.description = sanitizeDescription(desc[1]); + ref.icon = talent.SkillIcon; + if(combatTypeProp === 'combat3') + ref.icon = ref.icon + '_HD'; ref.labels = []; // build the labels @@ -82,9 +85,10 @@ function collateTalent(lang) { passive.forEach((skId, index) => { let talent = xpassive.find(pas => pas.ProudSkillGroupId === skId); let ref = data['passive'+(index+1)] = {}; // store reference in variable to make it easier to access - + ref.Id = skId; ref.name = language[talent.NameTextMapHash]; ref.info = sanitizeDescription(language[talent.DescTextMapHash]); + ref.icon = talent.Icon; }); data.costs = costs; data.parameters = parameters; diff --git a/myscripts/myscript.js b/myscripts/myscript.js index d7da746cd..6f6ee7fc8 100644 --- a/myscripts/myscript.js +++ b/myscripts/myscript.js @@ -99,7 +99,7 @@ function exportData(folder, collateFunc, englishonly, skipwrite) { console.log("done "+folder); } -// exportData('characters', require('./collateCharacter.js')); +exportData('characters', require('./collateCharacter.js')); // exportCurve('characters', 'AvatarCurveExcelConfigData'); // exportData('constellations', require('./collateConstellation')); // exportData('talents', require('./collateTalent.js')); @@ -109,10 +109,10 @@ function exportData(folder, collateFunc, englishonly, skipwrite) { // exportData('foods', require('./collateFood')); // exportData('materials', require('./collateMaterial')); // run twice // exportData('domains', require('./collateDomain')); // run twice // remember to add back recommendedelements and disorder and entrypicpath -exportData('enemies', require('./collateEnemy'), true); +// exportData('enemies', require('./collateEnemy')); // exportData('domains', require('./collateDomainMonsterList')); // run only after both domains and enemies have run. sync // exportCurve('enemies', 'MonsterCurveExcelConfigData'); - +// // exportData('fishingpoints', require('./collateFishingPoint')); //console.log(collateCharacter('EN')) //console.log(collateConstellation('EN').hutao)