Add stigmata pages

This commit is contained in:
Sakura Knoll
2023-07-11 02:39:32 +09:00 Unverified
parent 4c875ecb8b
commit 95fd4af7cf
17 changed files with 716 additions and 38 deletions
+14 -1
View File
@@ -1,4 +1,4 @@
import { AttributeType, CharacterType, SkillType, TagType, WeaponType } from './types'
import { AttributeType, CharacterType, SkillType, StigmaType, TagType, WeaponType } from './types'
export function getAttributeLabel(type: AttributeType) {
switch (type) {
@@ -48,6 +48,19 @@ export function getWeaponTypeLabel(type: WeaponType) {
}
}
export function getStigmaTypeLabel(type: StigmaType) {
switch (type) {
case 'top':
return '상단'
case 'mid':
return '중단'
case 'bot':
return '하단'
default:
return `Unknown Stigma Type (${type})`
}
}
export function getSkillTypeLabel(type: SkillType) {
switch (type) {
case 'leader':
+45 -2
View File
@@ -176,7 +176,7 @@ export interface WeaponData {
criticalAdd: number
resistanceBase: number
resistanceAdd: number
skills: WeaponSkill[]
skills: EquipmentSkill[]
rankUpMaterials: {
id: string
amount: number
@@ -184,7 +184,7 @@ export interface WeaponData {
powerType: number
}
export interface WeaponSkill {
export interface EquipmentSkill {
id: string
name: string
info: string
@@ -203,3 +203,46 @@ export interface WeaponSkill {
param3: number
param3Add: number
}
export type StigmaType = 'top' | 'mid' | 'bot'
export interface Stigma {
id: string
rarity: 1 | 2 | 3 | 4 | 5
maxRarity: 1 | 2 | 3 | 4 | 5
maxLv: number
type: StigmaType
hpBase: number
hpAdd: number
attackBase: number
attackAdd: number
defenceBase: number
defenceAdd: number
criticalBase: number
criticalAdd: number
icon: string
image: string
smallIcon: string
name: string
description: string
shortName: string
mainId: string
skills: EquipmentSkill[]
rankUpMaterials: {
id: string
amount: number
}[]
}
export interface RootStigma {
id: string
stigmata: Stigma[]
}
export interface StigmataCatalogItem {
id: string
name: string
icon: string
type: StigmaType
maxRarity: 1 | 2 | 3 | 4 | 5
}
@@ -0,0 +1,115 @@
import { RootStigma, StigmaType } from '../../data/types'
import { getRawEquipmentSkillDataMap } from '../raw/equipmentSkillData'
import { getRawStigmataDataMap } from '../raw/stigmataData'
import { convertEquipmentSkill, getText } from './utils'
export function compileStigmataData() {
const rawStigmataDataMap = getRawStigmataDataMap()
const rawStigmataDataMapEntries = Object.entries(rawStigmataDataMap)
const rawEquipmentSkillDataMap = getRawEquipmentSkillDataMap()
const stigmataMainIdStigmataMap = rawStigmataDataMapEntries.reduce((map, [id, rawData]) => {
const mainId = rawData.StigmataMainID.toString()
let rootStigma = map.get(mainId)
if (rootStigma == null) {
rootStigma = {
id: mainId,
stigmata: []
}
map.set(mainId, rootStigma)
}
const [, , icon] = rawData.IconPath.split('/')
const [, , smallIcon] = rawData.SmallIcon.split('/')
const skills = []
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
})
}
rootStigma.stigmata.push({
id,
rarity: rawData.Rarity,
maxRarity: rawData.MaxRarity,
maxLv: rawData.MaxLv,
type: convertStigmataType(rawData.BaseType),
hpBase: rawData.HPBase,
hpAdd: rawData.HPAdd,
attackBase: rawData.AttackBase,
attackAdd: rawData.AttackAdd,
defenceBase: rawData.DefenceBase,
defenceAdd: rawData.DefenceAdd,
criticalBase: rawData.CriticalBase,
criticalAdd: rawData.CriticalAdd,
icon,
image: rawData.ImagePath,
smallIcon,
name: getText(rawData.DisplayTitle),
description: getText(rawData.DisplayDescription),
shortName: getText(rawData.ShortName),
skills,
rankUpMaterials: rawData.EvoMaterial.map(({ ID, Num }) => {
return {
id: ID.toString(),
amount: Num
}
}),
mainId
})
return map
}, new Map<string, RootStigma>())
return [...stigmataMainIdStigmataMap.values()]
}
function convertStigmataType(rawType: number): StigmaType {
switch (rawType) {
case 1:
return 'top'
case 2:
return 'mid'
case 3:
return 'bot'
default:
throw new Error(`Unknown Raw Stigmata Base Type (${rawType})`)
}
}
@@ -1,7 +1,7 @@
import { RootWeaponData, WeaponData } from '../../data/types'
import { getRawEquipmentSkillDataMap, RawEquipmentSkillData } from '../raw/equipmentSkillData'
import { getRawEquipmentSkillDataMap } from '../raw/equipmentSkillData'
import { getRawWeaponDataMap } from '../raw/weaponData'
import { convertTagType, convertWeaponType, getText } from './utils'
import { convertEquipmentSkill, convertWeaponType, getText } from './utils'
export function compileWeaponData(): RootWeaponData[] {
const rawWeaponDataMap = getRawWeaponDataMap()
@@ -21,7 +21,7 @@ export function compileWeaponData(): RootWeaponData[] {
const rawSkill = rawEquipmentSkillDataMap[skillId]
skills.push({
id: skillId,
...convertWeaponSkill(rawSkill),
...convertEquipmentSkill(rawSkill),
param1: rawData.Prop1Param1,
param1Add: rawData.Prop1Param1Add,
param2: rawData.Prop1Param2,
@@ -35,7 +35,7 @@ export function compileWeaponData(): RootWeaponData[] {
const rawSkill = rawEquipmentSkillDataMap[skillId]
skills.push({
id: skillId,
...convertWeaponSkill(rawSkill),
...convertEquipmentSkill(rawSkill),
param1: rawData.Prop2Param1,
param1Add: rawData.Prop2Param1Add,
param2: rawData.Prop2Param2,
@@ -49,7 +49,7 @@ export function compileWeaponData(): RootWeaponData[] {
const rawSkill = rawEquipmentSkillDataMap[skillId]
skills.push({
id: skillId,
...convertWeaponSkill(rawSkill),
...convertEquipmentSkill(rawSkill),
param1: rawData.Prop3Param1,
param1Add: rawData.Prop3Param1Add,
param2: rawData.Prop3Param2,
@@ -100,22 +100,4 @@ export function compileWeaponData(): RootWeaponData[] {
weapons: rawWeaponMainIdWeaponDataMap.get(weaponId) || []
}
})
function convertWeaponSkill(rawSkill: RawEquipmentSkillData) {
const iconName = rawSkill.SkillIconPath.split('/').pop()
return {
name: getText(rawSkill.SkillName),
info: getText(rawSkill.SkillDisplay),
icon: iconName != null && iconName.length > 0 ? iconName : undefined,
skillCd: rawSkill.SkillCD,
skillSpCost: rawSkill.SPCost,
skillSpNeed: rawSkill.SPNeed,
tags: rawSkill.TagList.map(rawEquipmentSkillTag => {
return {
type: convertTagType(rawEquipmentSkillTag.TagID),
comment: getText(rawEquipmentSkillTag.TagComment)
}
})
}
}
}
@@ -1,4 +1,5 @@
import { TagType, WeaponType } from '../../data/types'
import { RawEquipmentSkillData } from '../raw/equipmentSkillData'
import { getRawTextMap } from '../raw/textMap'
export function getText(id: string | number) {
@@ -91,3 +92,21 @@ export function convertTagType(rawTagId: number): TagType {
throw new Error(`Unsupported raw show order(Skill) (${rawTagId})`)
}
export function convertEquipmentSkill(rawSkill: RawEquipmentSkillData) {
const iconName = rawSkill.SkillIconPath.split('/').pop()
return {
name: getText(rawSkill.SkillName),
info: getText(rawSkill.SkillDisplay),
icon: iconName != null && iconName.length > 0 ? iconName : undefined,
skillCd: rawSkill.SkillCD,
skillSpCost: rawSkill.SPCost,
skillSpNeed: rawSkill.SPNeed,
tags: rawSkill.TagList.map(rawEquipmentSkillTag => {
return {
type: convertTagType(rawEquipmentSkillTag.TagID),
comment: getText(rawEquipmentSkillTag.TagComment)
}
})
}
}
+12
View File
@@ -11,6 +11,9 @@ export const battlesuitCatalogPath = path.join(dataDir, 'battlesuit-catalog.yaml
export const weaponsDir = path.join(dataDir, 'weapons')
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 function loadBattlesuitCatalog(): BattlesuitCatalogItem[] {
return readYamlFile(battlesuitCatalogPath)
}
@@ -29,6 +32,15 @@ export function loadWeaponData(id: string) {
return readYamlFile(weaponDataPath)
}
export function loadStigmataCatalog(): WeaponCatalogItem[] {
return readYamlFile(stigmataCatalogPath)
}
export function loadStigmaData(id: string) {
const stigmaDataPath = path.join(stigmataDir, `${id}.yaml`)
return readYamlFile(stigmaDataPath)
}
function readYamlFile(pathname: string) {
return YAML.parse(fs.readFileSync(pathname).toString())
}
+99
View File
@@ -0,0 +1,99 @@
import { loadRawData } from './loadRawData'
export function getRawStigmataDataMap(): RawStigmataDataMap {
return loadRawData('StigmataData.json')
}
export type RawStigmataDataMap = {
[key: string]: RawStigmaData
}
export interface RawStigmaData {
Rarity: 1 | 2 | 3 | 4 | 5
MaxRarity: 1 | 2 | 3 | 4 | 5
SubRarity: number
SubMaxRarity: number
Cost: number
PowerType: number
MaxLv: number
ExpType: number
SellPriceBase: number
SellPriceAdd: number
GearExpProvideBase: number
GearExpPorvideAdd: number
BaseType: number
LabelPath: string
DisplayTitle: number
DisplayDescription: number
DisplayNumber: number
IconPath: string // 'SpriteOutput/StigmataIcons/S1A_1'
ImagePath: string // 'S1A_1'
HPBase: number
HPAdd: number
SPBase: number
SPAdd: number
AttackBase: number
AttackAdd: number
DefenceBase: number
DefenceAdd: number
CriticalBase: number
CriticalAdd: number
DurabilityMax: number
EvoMaterial: [
{
ID: number
Num: number
}
]
EvoID: number
Prop1ID: number
Prop1Param1: number
Prop1Param2: number
Prop1Param3: number
Prop1Param1Add: number
Prop1Param2Add: number
Prop1Param3Add: number
Prop2ID: number
Prop2Param1: number
Prop2Param2: number
Prop2Param3: number
Prop2Param1Add: number
Prop2Param2Add: number
Prop2Param3Add: number
Prop3ID: number
Prop3Param1: number
Prop3Param2: number
Prop3Param3: number
Prop3Param1Add: number
Prop3Param2Add: number
Prop3Param3Add: number
Protect: boolean
SetID: number
SmallIcon: string
TattooPath: string
OffsetX: number
OffsetY: number
Scale: number
AffixTreeId: number
CanRefine: boolean
RecycleID: number
DisjoinScoinCost: number
DisjoinAddMaterial: [
{
ID: number
Num: number
}
]
LinkIDList: number[]
Quality: number
StigmataMainID: number
ShortName: number
SellPriceID: number
Transcendent: boolean
Target: number
IsSecurityProtect: boolean
GachaMainDropDisplayConfig: number[]
GachaGiftDropDisplayConfig: number[]
StigmataFilterList: number[]
CollaborationSetID: number
}