Add elf pages

This commit is contained in:
Sakura Knoll
2023-07-14 09:48:09 +09:00 Unverified
parent afafab1956
commit 679ffe48b9
14 changed files with 560 additions and 18 deletions
+32
View File
@@ -5,3 +5,35 @@ export function repeat<N>(count: number, rendererFn: (index: number) => N) {
}
return result
}
export class ListMap<K, V> {
map: Map<K, V[]>
constructor(mapOrEntries?: Map<K, V[]> | [K, V[]][]) {
if (mapOrEntries == null) {
this.map = new Map()
} else {
this.map = new Map(mapOrEntries)
}
}
get(key: K) {
return this.map.get(key)
}
set(key: K, value: V) {
let list = this.map.get(key)
if (list == null) {
list = []
this.map.set(key, list)
}
list.push(value)
}
entries() {
return this.map.entries()
}
values() {
return this.map.values()
}
}
+50
View File
@@ -307,3 +307,53 @@ export interface ErSigil {
unlockHint: string
type: number
}
export interface Elf {
cardIcon: string
id: string
fullName: string
icon: string
chibiIcon: string
figureImage: string
rarity: number
cardId: number
fragmentId: number
storyDesc: string
ultSkillCd: number
ultSkillCost: number
skillBg: string
tags: {
type: TagType
comment: string
}[]
captainSkillIds: string[]
skills: ElfSkill[]
}
export interface ElfSkill {
id: string
elfId: string
name: string
info: string
skillType: string
skillTypeId: string
icon: string
row: number
col: number
unlockStar: number
maxLv: number
paramBase1: number
paramBase2: number
paramBase3: number
paramAdd1: number
paramAdd2: number
paramAdd3: number
}
export interface ElfCatalogItem {
id: string
fullName: string
cardIcon: string
chibiIcon: string
rarity: number
}
@@ -0,0 +1,66 @@
import { ListMap } from '../../../utils'
import { Elf, ElfSkill } from '../../data/types'
import { getRawElfDataMap } from '../raw/elfData'
import { getRawElfSkillDataMap } from '../raw/elfSkillData'
import { convertTagType, getText } from './utils'
export function compileElfData() {
const rawElfDataMap = getRawElfDataMap()
const rawElfSkillDataMap = getRawElfSkillDataMap()
const rawElfSkillMap = Object.entries(rawElfSkillDataMap).reduce<ListMap<string, ElfSkill>>(
(map, [id, rawSkillData]) => {
const elfId = rawSkillData.ElfID.toString()
map.set(elfId, {
id,
elfId,
name: getText(rawSkillData.Name),
info: getText(rawSkillData.Info),
skillType: getText(rawSkillData.SkillTypeTag),
skillTypeId: rawSkillData.SkillType.toString(),
icon: rawSkillData.IconPath.split('/').pop()!,
row: rawSkillData.UIPointRow,
col: rawSkillData.UIPointColumn,
unlockStar: rawSkillData.UnlockStar,
maxLv: rawSkillData.MaxLv,
paramBase1: rawSkillData.AbilityParamBase_1,
paramBase2: rawSkillData.AbilityParamBase_2,
paramBase3: rawSkillData.AbilityParamBase_3,
paramAdd1: rawSkillData.AbilityParamAdd_1,
paramAdd2: rawSkillData.AbilityParamAdd_2,
paramAdd3: rawSkillData.AbilityParamAdd_3
})
return map
},
new ListMap()
)
const elfs = Object.entries(rawElfDataMap).map<Elf>(([id, rawData]) => {
const skills = rawElfSkillMap.get(id) || []
return {
id,
fullName: getText(rawData.FullName),
icon: rawData.IconPath.split('/').pop()!,
cardIcon: rawData.StoryBGImg.split('/').pop()!,
chibiIcon: rawData.ElfChibiIcon.split('/').pop()!,
figureImage: rawData.StoryBGImg.split('/').pop()!,
rarity: rawData.Rarity,
cardId: rawData.ElfCardID,
fragmentId: rawData.ElfFragmentID,
storyDesc: getText(rawData.StoryDesc),
ultSkillCd: rawData.UltraSkillCD,
ultSkillCost: rawData.UltraSkillSPCost,
skillBg: rawData.SkillTabBGImg.split('/').pop()!,
tags: rawData.TagList.map(rawTag => {
return {
type: convertTagType(rawTag.TagID),
comment: getText(rawTag.TagComment)
}
}),
captainSkillIds: rawData.CaptainSkillIDs.map(rawId => rawId.toString()),
skills
}
})
return elfs
}
+14
View File
@@ -3,6 +3,8 @@ import path from 'path'
import YAML from 'yaml'
import {
BattlesuitCatalogItem,
Elf,
ElfCatalogItem,
ErBattlesuit,
ErBattlesuitCatalogItem,
ErSigil,
@@ -35,6 +37,9 @@ export const erSignetsDir = path.join(dataDir, 'er-signets')
export const erSupportsPath = path.join(dataDir, 'er-supports.yaml')
export const erSigilsPath = path.join(dataDir, 'er-sigils.yaml')
export const elfsDir = path.join(dataDir, 'elfs')
export const elfCatalogPath = path.join(dataDir, 'elf-catalog.yaml')
export function loadBattlesuitCatalog(): BattlesuitCatalogItem[] {
return readYamlFile(battlesuitCatalogPath)
}
@@ -93,6 +98,15 @@ export function loadErSigils(): ErSigil[] {
return readYamlFile(erSigilsPath)
}
export function loadElfCatalog(): ElfCatalogItem[] {
return readYamlFile(elfCatalogPath)
}
export function loadElfData(id: string): Elf {
const elfDataPath = path.join(elfsDir, `${id}.yaml`)
return readYamlFile(elfDataPath)
}
function readYamlFile(pathname: string) {
return YAML.parse(fs.readFileSync(pathname).toString())
}
+57
View File
@@ -0,0 +1,57 @@
import { loadRawData } from './loadRawData'
export function getRawElfDataMap(): RawElfDataMap {
return loadRawData('ElfData.json')
}
export type RawElfDataMap = {
[key: string]: RawElfData
}
export interface RawElfData {
Index: number
FullName: number
ElfRegistryKey: string
ElfUIModelPath: string
ElfUIModelPosition: {
X: 0.135
Y: -0.32
Z: 3.74
}
ElfUIModelRotation: {
X: 0
Y: -7.2
Z: 0
}
IconPath: string // 'SpriteOutput/ElfIcon/Elf_01'
ElfChibiIcon: string // 'SpriteOutput/AvatarChibiIcons/Elf_10001'
PortraitCommonIcon: string // 'SpriteOutput/ElfCardIcons/Elf_10001'
StoryBGImg: string // 'SpriteOutput/ElfCardFigures/Elf_10001'
PresentBGImg: string // 'SpriteOutput/ElfCardFigures/Elf_10001'
AIName: string // 'Behavior_Elf_01'
IsFlight: number
UnlockStar: number
Rarity: number
ElfCardID: number
ElfFragmentID: number
CarryPlayerLevel: number
UISoundbankName: string
StoryDesc: number
RGBCGID: number
AlphaCGID: number
UltraSkillCD: number
UltraSkillSPCost: number
AttackSkillCD: number
SkillTabBGImg: string // 'SpriteOutput/ElfTalentBg/TalentBg1'
TalentTabBGImg: string // 'SpriteOutput/ElfTalentBg/TalentBg1'
SelectAudio: string // 'VO_Elf_01_BloodEmbrace_SwitchIn'
LevelUpAudio: string // 'VO_Elf_01_BloodEmbrace_LevelUp'
CombatPointRarity: number
TagList: {
TagID: number
TagComment: number
}[]
FeatureBrief: number
TrialStageActivityList: number[]
CaptainSkillIDs: number[]
}
+32
View File
@@ -0,0 +1,32 @@
import { loadRawData } from './loadRawData'
export function getRawElfSkillDataMap(): RawElfSkillDataMap {
return loadRawData('ElfSkillData.json')
}
export type RawElfSkillDataMap = {
[key: string]: RawElfSkillData
}
export interface RawElfSkillData {
ElfID: number
Name: number
Info: number
SkillTypeTag: number
MaxLv: number
SkillType: number
IconPath: string //'SpriteOutput/Elf_Skill_Icon/Skill_Elf_Attack_101'
IconType: number
UnlockStar: number
UIPointRow: number
UIPointColumn: number
TagList: { TagID: number; TagComment: number }[]
IconSpecial: number
AbilityParamBase_1: number
AbilityParamAdd_1: number
AbilityParamBase_2: number
AbilityParamAdd_2: number
AbilityParamBase_3: number
AbilityParamAdd_3: number
HasNoRestrictionAbility: number
}