Implement Stigmata Set pages

This commit is contained in:
Sakura Knoll
2023-07-11 23:55:35 +09:00 Unverified
parent 699398f2f2
commit 4ae5c57009
7 changed files with 430 additions and 10 deletions
+15
View File
@@ -227,6 +227,7 @@ export interface Stigma {
description: string
shortName: string
mainId: string
setId: string
skills: EquipmentSkill[]
rankUpMaterials: {
id: string
@@ -246,3 +247,17 @@ export interface StigmataCatalogItem {
type: StigmaType
maxRarity: 1 | 2 | 3 | 4 | 5
}
export interface StigmataSet {
id: string
name: string
desc: string
skills: EquipmentSkill[]
stigmaIdList: string[]
}
export interface StigmataSetCatalogItem {
id: string
name: string
stigmataList: { id: string; icon: string; maxRarity: number }[]
}
@@ -1,4 +1,5 @@
import { RootStigma, StigmaType } from '../../data/types'
import { EquipmentSkill, RootStigma, StigmataSet, StigmaType } from '../../data/types'
import { getRawEquipmentSetDataMap } from '../raw/equipmentSetData'
import { getRawEquipmentSkillDataMap } from '../raw/equipmentSkillData'
import { getRawStigmataDataMap } from '../raw/stigmataData'
import { convertEquipmentSkill, getText } from './utils'
@@ -7,8 +8,18 @@ export function compileStigmataData() {
const rawStigmataDataMap = getRawStigmataDataMap()
const rawStigmataDataMapEntries = Object.entries(rawStigmataDataMap)
const rawEquipmentSkillDataMap = getRawEquipmentSkillDataMap()
const rawEquipmentSetDataMap = getRawEquipmentSetDataMap()
const stigmaSetIdMainIdListMap = new Map<string, string[]>()
const stigmataMainIdStigmataMap = rawStigmataDataMapEntries.reduce((map, [id, rawData]) => {
// Bronya calorie has a dummy data
if (id === '32274') {
return map
}
// Mei Chrismas does not exist in the game
if (rawData.StigmataMainID === 120443) {
return map
}
const mainId = rawData.StigmataMainID.toString()
let rootStigma = map.get(mainId)
if (rootStigma == null) {
@@ -17,6 +28,14 @@ export function compileStigmataData() {
stigmata: []
}
map.set(mainId, rootStigma)
const setId = rawData.SetID.toString()
let mainIdList = stigmaSetIdMainIdListMap.get(setId)
if (mainIdList == null) {
mainIdList = []
stigmaSetIdMainIdListMap.set(setId, mainIdList)
}
mainIdList.push(mainId)
}
const [, , icon] = rawData.IconPath.split('/')
const [, , smallIcon] = rawData.SmallIcon.split('/')
@@ -92,13 +111,72 @@ export function compileStigmataData() {
amount: Num
}
}),
setId: rawData.SetID.toString(),
mainId
})
return map
}, new Map<string, RootStigma>())
return [...stigmataMainIdStigmataMap.values()]
const stigmataSetList = Object.entries(rawEquipmentSetDataMap).map<StigmataSet>(([id, rawData]) => {
const skills: EquipmentSkill[] = []
if (rawData.Prop1ID !== 0) {
const skillId = rawData.Prop1ID.toString()
const rawSkill = rawEquipmentSkillDataMap[skillId]
skills.push({
id: skillId,
...convertEquipmentSkill(rawSkill),
param1: rawData.Prop1Param1,
param1Add: rawData.Prop1Param1Add,
param2: rawData.Prop1Param2,
param2Add: rawData.Prop1Param2Add,
param3: rawData.Prop1Param3,
param3Add: rawData.Prop1Param3Add
})
}
if (rawData.Prop2ID !== 0) {
const skillId = rawData.Prop2ID.toString()
const rawSkill = rawEquipmentSkillDataMap[skillId]
skills.push({
id: skillId,
...convertEquipmentSkill(rawSkill),
param1: rawData.Prop2Param1,
param1Add: rawData.Prop2Param1Add,
param2: rawData.Prop2Param2,
param2Add: rawData.Prop2Param2Add,
param3: rawData.Prop2Param3,
param3Add: rawData.Prop2Param3Add
})
}
if (rawData.Prop3ID !== 0) {
const skillId = rawData.Prop3ID.toString()
const rawSkill = rawEquipmentSkillDataMap[skillId]
skills.push({
id: skillId,
...convertEquipmentSkill(rawSkill),
param1: rawData.Prop3Param1,
param1Add: rawData.Prop3Param1Add,
param2: rawData.Prop3Param2,
param2Add: rawData.Prop3Param2Add,
param3: rawData.Prop3Param3,
param3Add: rawData.Prop3Param3Add
})
}
return {
id,
name: getText(rawData.SetName),
desc: getText(rawData.SetDesc),
skills,
stigmaIdList: stigmaSetIdMainIdListMap.get(id) || []
}
})
return {
stigmataSetList,
stigmataMainIdStigmataMap
}
}
function convertStigmataType(rawType: number): StigmaType {
+14 -2
View File
@@ -1,7 +1,7 @@
import fs from 'fs'
import path from 'path'
import YAML from 'yaml'
import { BattlesuitCatalogItem, WeaponCatalogItem } from '../data/types'
import { BattlesuitCatalogItem, Stigma, StigmataSet, WeaponCatalogItem } from '../data/types'
export const dataDir = path.join(process.cwd(), 'data/v2-pre')
@@ -14,6 +14,9 @@ export const weaopnCatalogPath = path.join(dataDir, 'weapon-catalog.yaml')
export const stigmataDir = path.join(dataDir, 'stigmata')
export const stigmataCatalogPath = path.join(dataDir, 'stigmata-catalog.yaml')
export const stigmataSetsDir = path.join(dataDir, 'stigmata-sets')
export const stigmataSetCatalogPath = path.join(dataDir, 'stigmata-set-catalog.yaml')
export function loadBattlesuitCatalog(): BattlesuitCatalogItem[] {
return readYamlFile(battlesuitCatalogPath)
}
@@ -36,11 +39,20 @@ export function loadStigmataCatalog(): WeaponCatalogItem[] {
return readYamlFile(stigmataCatalogPath)
}
export function loadStigmaData(id: string) {
export function loadStigmaData(id: string): Stigma {
const stigmaDataPath = path.join(stigmataDir, `${id}.yaml`)
return readYamlFile(stigmaDataPath)
}
export function loadStigmataSetCatalog(): WeaponCatalogItem[] {
return readYamlFile(stigmataSetCatalogPath)
}
export function loadStigmataSetData(id: string): StigmataSet {
const stigmataSetPath = path.join(stigmataSetsDir, `${id}.yaml`)
return readYamlFile(stigmataSetPath)
}
function readYamlFile(pathname: string) {
return YAML.parse(fs.readFileSync(pathname).toString())
}
@@ -0,0 +1,38 @@
import { loadRawData } from './loadRawData'
export function getRawEquipmentSetDataMap(): RawEquipmentSetDataMap {
return loadRawData('EquipmentSetData.json')
}
export type RawEquipmentSetDataMap = {
[key: string]: RawEquipmentSetData
}
export interface RawEquipmentSetData {
SetName: number
SetDesc: number
Prop1ID: number
SpellEffectNum1: number
Prop1Param1: number
Prop1Param2: number
Prop1Param3: number
Prop1Param1Add: number
Prop1Param2Add: number
Prop1Param3Add: number
Prop2ID: number
SpellEffectNum2: number
Prop2Param1: number
Prop2Param2: number
Prop2Param3: number
Prop2Param1Add: number
Prop2Param2Add: number
Prop2Param3Add: number
Prop3ID: number
SpellEffectNum3: number
Prop3Param1: number
Prop3Param2: number
Prop3Param3: number
Prop3Param1Add: number
Prop3Param2Add: number
Prop3Param3Add: number
}