Add elf pages
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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[]
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user