Import and convert battlesuit data
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
import { buildBattlesuitList } from './buildData'
|
||||
|
||||
describe('buildBattlesuitList', () => {
|
||||
it('build list', () => {
|
||||
const list = buildBattlesuitList()
|
||||
expect(list[0]).toMatchObject({
|
||||
id: expect.any(String),
|
||||
tags: ['physical-dmg', 'stun', 'burst', 'time-mastery']
|
||||
})
|
||||
// console.log(list[0])
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,380 @@
|
||||
import {
|
||||
AttributeType,
|
||||
Battlesuit,
|
||||
BattlesuitSkill,
|
||||
BattlesuitSubSkill,
|
||||
CharacterType,
|
||||
SkillTagItem,
|
||||
SkillType,
|
||||
TagType,
|
||||
WeaponType
|
||||
} from '../data/types'
|
||||
import { getRawAvatarDataMap } from './raw/avatarData'
|
||||
import { getRawAvatarSkillDataMap } from './raw/avatarSkillData'
|
||||
import { getRawAvatarSubSkillDataMap } from './raw/avatarSubSkillData'
|
||||
import { getRawAvatarTagUnLockDataMap } from './raw/avatarTagUnLockData'
|
||||
import { getRawTextMap } from './raw/textMap'
|
||||
|
||||
export function getText(id: string | number) {
|
||||
const rawTextMap = getRawTextMap()
|
||||
return rawTextMap[id]?.Text || null
|
||||
}
|
||||
|
||||
export function buildBattlesuitList(): Battlesuit[] {
|
||||
const rawAvatarDataMap = getRawAvatarDataMap()
|
||||
const rawSkillDataMap = getRawAvatarSkillDataMap()
|
||||
const rawSubSkillDataMap = getRawAvatarSubSkillDataMap()
|
||||
const rawAvatarTagUnLockDataMap = getRawAvatarTagUnLockDataMap()
|
||||
|
||||
const rawAvatarDataEntries = Object.entries(rawAvatarDataMap)
|
||||
const rawSubSkillEntries = Object.entries(rawSubSkillDataMap)
|
||||
|
||||
const battlesuitList = rawAvatarDataEntries.map(([id, rawAvatarData]): Battlesuit => {
|
||||
try {
|
||||
return {
|
||||
id,
|
||||
fullName: getText(rawAvatarData.FullName),
|
||||
shortName: getText(rawAvatarData.ShortName),
|
||||
desc: getText(rawAvatarData.Desc),
|
||||
firstName: getText(rawAvatarData.FirstName),
|
||||
lastName: getText(rawAvatarData.LastName),
|
||||
enFirstName: getText(rawAvatarData.EnFirstName),
|
||||
enLastName: getText(rawAvatarData.EnLastName),
|
||||
attributeType: convertAttributeToAttributeType(rawAvatarData.Attribute),
|
||||
isEasterner: rawAvatarData.IsEasterner,
|
||||
weapon: convertClassIdToWeaponType(rawAvatarData.ClassID),
|
||||
character: convertRoleIdToCharacterType(rawAvatarData.RoleID),
|
||||
initialStar: convertStar(rawAvatarData.UnlockStar, 0),
|
||||
tags: rawAvatarData.TagUnlockList.map(rawTagId => {
|
||||
const rawAvatarTagUnLock = rawAvatarTagUnLockDataMap[rawTagId]
|
||||
|
||||
return convertRawTagIdToTagType(rawAvatarTagUnLock.TagID)
|
||||
}),
|
||||
skills: rawAvatarData.SkillList.map<BattlesuitSkill>(rawSkillId => {
|
||||
const rawSkillData = rawSkillDataMap[rawSkillId]
|
||||
const skillIcon = rawSkillData.IconPath.split('/').pop()
|
||||
const subSkills = rawSubSkillEntries.reduce<BattlesuitSubSkill[]>((list, [subSkillId, rawSubSkillData]) => {
|
||||
if (rawSubSkillData.SkillId === rawSkillId) {
|
||||
const subSkillIcon = rawSubSkillData.IconPath.split('/').pop()
|
||||
list.push({
|
||||
id: subSkillId,
|
||||
name: getText(rawSubSkillData.Name),
|
||||
info: getText(rawSubSkillData.Info),
|
||||
brief: getText(rawSubSkillData.Brief),
|
||||
icon: subSkillIcon || '',
|
||||
maxLv: rawSubSkillData.MaxLv,
|
||||
paramBase1: rawSubSkillData.ParamBase_1,
|
||||
paramBase2: rawSubSkillData.ParamBase_2,
|
||||
paramBase3: rawSubSkillData.ParamBase_3,
|
||||
paramAdd1: rawSubSkillData.ParamAdd_1,
|
||||
paramAdd2: rawSubSkillData.ParamAdd_2,
|
||||
paramAdd3: rawSubSkillData.ParamAdd_3,
|
||||
tags: rawSubSkillData.TagList.map(convertRawSkillTag),
|
||||
toggle: rawSubSkillData.SkillToggle,
|
||||
unlockStar: convertStar(rawSubSkillData.UnlockStar, rawSubSkillData.UnlockSubStar)
|
||||
})
|
||||
return list
|
||||
}
|
||||
return list
|
||||
}, [])
|
||||
|
||||
return {
|
||||
id: rawSkillId.toString(),
|
||||
name: getText(rawSkillData.Name),
|
||||
info: getText(rawSkillData.Info),
|
||||
icon: skillIcon || '',
|
||||
skillType: convertShowOrderToSkillType(rawSkillData.ShowOrder),
|
||||
tags: rawSkillData.TagList.map(convertRawSkillTag),
|
||||
paramSubId1: rawSkillData.ParamSubID_1,
|
||||
paramSubId2: rawSkillData.ParamSubID_2,
|
||||
paramSubId3: rawSkillData.ParamSubID_3,
|
||||
subSkills
|
||||
}
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Failed to converting valk data id:${id}, name: ${getText(rawAvatarData.FullName)}`)
|
||||
throw error
|
||||
}
|
||||
})
|
||||
|
||||
return battlesuitList
|
||||
}
|
||||
|
||||
function convertStar(rawStarValue: number, rawSubStarValue: number) {
|
||||
switch (rawStarValue) {
|
||||
case 1:
|
||||
return 'b'
|
||||
case 2:
|
||||
return 'a'
|
||||
case 3:
|
||||
switch (rawSubStarValue) {
|
||||
case 1:
|
||||
return 's1'
|
||||
case 2:
|
||||
return 's2'
|
||||
case 3:
|
||||
return 's3'
|
||||
case 0:
|
||||
return 's'
|
||||
}
|
||||
case 4:
|
||||
switch (rawSubStarValue) {
|
||||
case 1:
|
||||
return 'ss1'
|
||||
case 2:
|
||||
return 'ss2'
|
||||
case 3:
|
||||
return 'ss3'
|
||||
case 0:
|
||||
return 'ss'
|
||||
}
|
||||
case 5:
|
||||
return 'sss'
|
||||
}
|
||||
throw new Error(`Unsupported Raw Star Value (${rawStarValue}, ${rawSubStarValue})`)
|
||||
}
|
||||
|
||||
function convertAttributeToAttributeType(rawValue: number): AttributeType {
|
||||
switch (rawValue) {
|
||||
case 1:
|
||||
return 'bio'
|
||||
case 2:
|
||||
return 'psy'
|
||||
case 3:
|
||||
return 'mech'
|
||||
case 4:
|
||||
return 'qua'
|
||||
case 5:
|
||||
return 'img'
|
||||
case 0:
|
||||
return 'none'
|
||||
default:
|
||||
throw new Error(`Unsupported Raw Attribute(avatar type) (${rawValue})`)
|
||||
}
|
||||
}
|
||||
|
||||
function convertClassIdToWeaponType(rawValue: number): WeaponType {
|
||||
switch (rawValue) {
|
||||
case 1:
|
||||
return 'pistols'
|
||||
case 2:
|
||||
return 'katana'
|
||||
case 3:
|
||||
return 'cannon'
|
||||
case 4:
|
||||
return '2-handed'
|
||||
case 5:
|
||||
return 'cross'
|
||||
case 6:
|
||||
return 'fists'
|
||||
case 7:
|
||||
return 'scythe'
|
||||
case 8:
|
||||
return 'lance'
|
||||
case 9:
|
||||
return 'bow'
|
||||
case 10:
|
||||
return 'chakram'
|
||||
case 11:
|
||||
return 'javelin'
|
||||
default:
|
||||
throw new Error(`Unsupported raw classId(weapon type) (${rawValue})`)
|
||||
}
|
||||
}
|
||||
|
||||
function convertRoleIdToCharacterType(rawValue: number): CharacterType {
|
||||
switch (rawValue) {
|
||||
case 1:
|
||||
return 'kiana'
|
||||
case 2:
|
||||
return 'mei'
|
||||
case 3:
|
||||
return 'bronya'
|
||||
case 4:
|
||||
return 'himeko'
|
||||
case 5:
|
||||
return 'theresa'
|
||||
case 6:
|
||||
return 'fuhua'
|
||||
case 7:
|
||||
return 'rita'
|
||||
case 8:
|
||||
return 'olenyevas'
|
||||
case 9:
|
||||
return 'seele'
|
||||
case 10:
|
||||
return 'durandal'
|
||||
case 11:
|
||||
return 'asuka'
|
||||
case 12:
|
||||
return 'keqing'
|
||||
case 13:
|
||||
return 'fischl'
|
||||
case 14:
|
||||
return 'elysia'
|
||||
case 15:
|
||||
return 'mobius'
|
||||
case 16:
|
||||
return 'raven'
|
||||
case 17:
|
||||
return 'pardofelis'
|
||||
case 18:
|
||||
return 'aponia'
|
||||
case 19:
|
||||
return 'eden'
|
||||
case 20:
|
||||
return 'griseo'
|
||||
case 21:
|
||||
return 'vill-v'
|
||||
case 22:
|
||||
return 'sushang'
|
||||
case 23:
|
||||
return 'ai'
|
||||
case 24:
|
||||
return 'susannah'
|
||||
case 25:
|
||||
return 'hare'
|
||||
case 26:
|
||||
return 'prometheus'
|
||||
case 27:
|
||||
return 'kira'
|
||||
case 101:
|
||||
return 'sakura'
|
||||
case 102:
|
||||
return 'kallen'
|
||||
case 103:
|
||||
return 'apho-mei'
|
||||
case 104:
|
||||
return 'apho-adam'
|
||||
case 105:
|
||||
return 'apho-carol'
|
||||
case 106:
|
||||
return 'apho-bronya'
|
||||
case 107:
|
||||
return 'apho-timido'
|
||||
default:
|
||||
throw new Error(`Unsupported raw roleId(character type) (${rawValue})`)
|
||||
}
|
||||
}
|
||||
|
||||
function convertShowOrderToSkillType(rawShowOrder: number): SkillType {
|
||||
switch (rawShowOrder) {
|
||||
case 1:
|
||||
return 'basic'
|
||||
case 2:
|
||||
return 'special'
|
||||
case 3:
|
||||
return 'evasion'
|
||||
case 4:
|
||||
return 'ultimate'
|
||||
case 5:
|
||||
return 'leader'
|
||||
case 6:
|
||||
return 'passive'
|
||||
case 7:
|
||||
return 'sp'
|
||||
case 0:
|
||||
return 'none'
|
||||
default:
|
||||
throw new Error(`Unsupported raw show order(Skill) (${rawShowOrder})`)
|
||||
}
|
||||
}
|
||||
|
||||
function convertRawTagIdToTagType(rawTagId: number): TagType {
|
||||
switch (rawTagId) {
|
||||
case 1001:
|
||||
return 'branch'
|
||||
case 1002:
|
||||
return 'charge'
|
||||
case 1003:
|
||||
return 'physical-dmg'
|
||||
case 1004:
|
||||
return 'fire-dmg'
|
||||
case 1005:
|
||||
return 'ice-dmg'
|
||||
case 1006:
|
||||
return 'lightning-dmg'
|
||||
case 1007:
|
||||
return 'freeze'
|
||||
case 1008:
|
||||
return 'paralyze'
|
||||
case 1009:
|
||||
return 'stun'
|
||||
case 1010:
|
||||
return 'ignite'
|
||||
case 1011:
|
||||
return 'bleed'
|
||||
case 1012:
|
||||
return 'heavy-atk'
|
||||
case 1013:
|
||||
return 'weaken'
|
||||
case 1014:
|
||||
return 'impair'
|
||||
case 1015:
|
||||
return 'float'
|
||||
case 1016:
|
||||
return 'slow-down'
|
||||
case 1017:
|
||||
return 'time-mastery'
|
||||
case 1018:
|
||||
return 'gather'
|
||||
case 1019:
|
||||
return 'heal'
|
||||
case 1020:
|
||||
return 'fast-atk'
|
||||
case 1021:
|
||||
return 'burst'
|
||||
case 1022:
|
||||
return 'shield'
|
||||
case 1023:
|
||||
return 'aerial'
|
||||
case 1024:
|
||||
return 'ranged'
|
||||
case 1025:
|
||||
return 'meele'
|
||||
}
|
||||
|
||||
throw new Error(`Unsupported raw show order(Skill) (${rawTagId})`)
|
||||
}
|
||||
|
||||
function convertRawSkillTag(rawSkillTag: { Strength: number; TagID: number; TagComment: number }): SkillTagItem {
|
||||
const comment = getText(rawSkillTag.TagComment)
|
||||
return {
|
||||
type: convertRawStrengthToType(rawSkillTag.Strength),
|
||||
strength: convertRawTagIdToStrength(rawSkillTag.TagID),
|
||||
comment
|
||||
}
|
||||
|
||||
function convertRawStrengthToType(rawStrength: number): TagType {
|
||||
switch (rawStrength) {
|
||||
case 239:
|
||||
return 'freeze'
|
||||
case 240:
|
||||
return 'paralyze'
|
||||
case 241:
|
||||
return 'stun'
|
||||
case 242:
|
||||
return 'ignite'
|
||||
case 243:
|
||||
return 'bleed'
|
||||
case 244:
|
||||
return 'heavy-atk'
|
||||
}
|
||||
throw new Error(`Invalid raw strength (raw: ${rawStrength}, comment: ${comment})`)
|
||||
}
|
||||
|
||||
function convertRawTagIdToStrength(rawTagId: number): 1 | 2 | 3 | 4 {
|
||||
switch (rawTagId) {
|
||||
case 16777219:
|
||||
return 1
|
||||
case 33554435:
|
||||
return 2
|
||||
case 50331651:
|
||||
return 3
|
||||
case 67108867:
|
||||
return 4
|
||||
}
|
||||
throw new Error(`Invalid raw tag Id (raw: ${rawTagId}, comment: ${comment})`)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import { doesDirExist } from './fsUtils'
|
||||
import path from 'path'
|
||||
|
||||
describe('doesDirExist', () => {
|
||||
it('returns true if dir exists', () => {
|
||||
const existingDir = path.join(process.cwd(), 'src')
|
||||
const fn = jest.fn(doesDirExist)
|
||||
|
||||
fn(existingDir)
|
||||
|
||||
expect(fn).toReturnWith(true)
|
||||
})
|
||||
|
||||
it('returns false if dir does not exist', () => {
|
||||
const existingDir = path.join(process.cwd(), 'never-exists')
|
||||
const fn = jest.fn(doesDirExist)
|
||||
|
||||
fn(existingDir)
|
||||
|
||||
expect(fn).toReturnWith(false)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,25 @@
|
||||
import fs from 'fs'
|
||||
|
||||
export function doesDirExist(pathname: string) {
|
||||
try {
|
||||
const stat = fs.statSync(pathname)
|
||||
if (stat.isDirectory()) {
|
||||
return true
|
||||
}
|
||||
throw new Error('exists but not a dir')
|
||||
} catch (error: any) {
|
||||
if (error.code === 'ENOENT') {
|
||||
return false
|
||||
}
|
||||
console.error(error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
export function createDirIfNotExist(pathname: string) {
|
||||
if (doesDirExist(pathname)) {
|
||||
return
|
||||
}
|
||||
|
||||
fs.mkdirSync(pathname)
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
import YAML from 'yaml'
|
||||
import { BattlesuitCatalogItem } from '../data/types'
|
||||
|
||||
export const dataDir = path.join(process.cwd(), 'data/v2-pre')
|
||||
export const battlesuitsDir = path.join(dataDir, 'battlesuits')
|
||||
|
||||
export const battlesuitCatalogPath = path.join(dataDir, 'battlesuit-catalog.yaml')
|
||||
|
||||
export function loadBattlesuitCatalog(): BattlesuitCatalogItem[] {
|
||||
return readYamlFile(battlesuitCatalogPath)
|
||||
}
|
||||
|
||||
export function loadBattlesuitData(id: string) {
|
||||
const battlesuitDataPath = path.join(battlesuitsDir, `${id}.yaml`)
|
||||
return readYamlFile(battlesuitDataPath)
|
||||
}
|
||||
|
||||
function readYamlFile(pathname: string) {
|
||||
return YAML.parse(fs.readFileSync(pathname).toString())
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import { loadRawData } from './loadRawData'
|
||||
|
||||
export function getRawAvatarDataMap(): RawAvatarDataMap {
|
||||
return loadRawData('AvatarData.json')
|
||||
}
|
||||
|
||||
export type RawAvatarDataMap = {
|
||||
[key: string]: RawAvatarData
|
||||
}
|
||||
|
||||
export interface RawAvatarData {
|
||||
ClassID: number
|
||||
RoleID: number
|
||||
AvatarType: number
|
||||
FullName: number
|
||||
ShortName: number
|
||||
RomaName: number
|
||||
Desc: number
|
||||
AvatarRegistryKey: number
|
||||
WeaponBaseTypeList: number[]
|
||||
UnlockStar: number
|
||||
SkillList: number[]
|
||||
Attribute: number
|
||||
InitialWeapon: number
|
||||
AvatarCardID: number
|
||||
AvatarFragmentID: number
|
||||
ArtifactFragmentID: number
|
||||
UltraSkillID: number
|
||||
CaptainSkillID: number
|
||||
SKL01SP: number
|
||||
SKL01SPNeed: number
|
||||
SKL01Charges: number
|
||||
SKL01CD: number
|
||||
SKL02SP: number
|
||||
SKL02SPNeed: number
|
||||
SKL02Charges: number
|
||||
SKL02CD: number
|
||||
SKL03SP: number
|
||||
SKL03SPNeed: number
|
||||
SKL03Charges: number
|
||||
SKL03CD: number
|
||||
SKL02ArtifactCD: number
|
||||
SKL02ArtifactSP: number
|
||||
SKL02ArtifactSPNeed: number
|
||||
BaseAvatarID: number
|
||||
FirstName: number
|
||||
LastName: number
|
||||
EnFirstName: number
|
||||
EnLastName: number
|
||||
UISelectVoice: string
|
||||
UILevelUpVoice: string
|
||||
DA_Name: string
|
||||
DA_Type: string
|
||||
ArtifactID: number
|
||||
IsEasterner: boolean
|
||||
FaceAnimationGroupName: string
|
||||
AvatarEffects: number[]
|
||||
TagUnlockList: number[]
|
||||
DefaultDressId: number
|
||||
AvatarStarUpType: number
|
||||
AvatarStarSourceID: number[]
|
||||
IsCollaboration: boolean
|
||||
StarUpBG: string
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import { loadRawData } from './loadRawData'
|
||||
|
||||
export function getRawAvatarSkillDataMap(): RawAvatarSkillDataMap {
|
||||
return loadRawData('AvatarSkillData.json')
|
||||
}
|
||||
|
||||
export type RawAvatarSkillDataMap = {
|
||||
[key: string]: RawAvatarSkillData
|
||||
}
|
||||
|
||||
export interface RawAvatarSkillData {
|
||||
Name: number
|
||||
Info: number
|
||||
ShowOrder: number
|
||||
UnlockLv: number
|
||||
UnlockStar: number
|
||||
SkillStep: number
|
||||
IconPath: string
|
||||
IconPathInLevel: string
|
||||
ButtonName: string
|
||||
ParamBase_1: number
|
||||
ParamLogic_1: number
|
||||
ParamSubID_1: number
|
||||
ParamSubIndex_1: number
|
||||
ParamBase_2: number
|
||||
ParamLogic_2: number
|
||||
ParamSubID_2: number
|
||||
ParamSubIndex_2: number
|
||||
ParamBase_3: number
|
||||
ParamLogic_3: number
|
||||
ParamSubID_3: number
|
||||
ParamSubIndex_3: number
|
||||
CanTry: number
|
||||
TagList: {
|
||||
Strength: number
|
||||
TagID: number
|
||||
TagComment: number
|
||||
}[]
|
||||
UnlockItemList: number[]
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
import { loadRawData } from './loadRawData'
|
||||
|
||||
export function getRawAvatarSubSkillDataMap(): RawAvatarSubSkillDataMap {
|
||||
return loadRawData('AvatarSubSkillData.json')
|
||||
}
|
||||
|
||||
export type RawAvatarSubSkillDataMap = {
|
||||
[key: string]: RawAvatarSubSkillData
|
||||
}
|
||||
|
||||
export interface RawAvatarSubSkillData {
|
||||
Name: number
|
||||
Info: number
|
||||
Brief: number
|
||||
ShowOrder: number
|
||||
SkillId: number
|
||||
IgnoreLeader: false
|
||||
IconPath: string
|
||||
UnlockStar: number
|
||||
UnlockSubStar: number
|
||||
UnlockLv: number
|
||||
UnlockLvAdd: number
|
||||
MaxLv: number
|
||||
UpLevelSubStarNeedList: [
|
||||
{
|
||||
Level: number
|
||||
StarNeed: number
|
||||
SubStarNeed: number
|
||||
}
|
||||
]
|
||||
ScoinCalc: false
|
||||
UnlockScoin: number
|
||||
ScoinLvAdd: number
|
||||
ItemType: number
|
||||
SkillToggle: boolean
|
||||
ParamBase_1: number
|
||||
ParamAdd_1: number
|
||||
ParamBase_2: number
|
||||
ParamAdd_2: number
|
||||
ParamBase_3: number
|
||||
ParamAdd_3: number
|
||||
CanTry: false
|
||||
ArtifactSkillID: number
|
||||
UpLevelArtifactNeedList: [
|
||||
{
|
||||
ArtifactLevel: number
|
||||
SubSkillLevel: number
|
||||
}
|
||||
]
|
||||
TagList: {
|
||||
Strength: number
|
||||
TagID: number
|
||||
TagComment: number
|
||||
}[]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { loadRawData } from './loadRawData'
|
||||
|
||||
export function getRawAvatarTagUnLockDataMap(): RawAvatarTagUnLockDataMap {
|
||||
return loadRawData('AvatarTagUnLock.json')
|
||||
}
|
||||
|
||||
export type RawAvatarTagUnLockDataMap = {
|
||||
[key: string]: RawAvatarTagUnLockData
|
||||
}
|
||||
|
||||
export interface RawAvatarTagUnLockData {
|
||||
TagID: number
|
||||
TagSecondDesc: number
|
||||
UnlockSkillIDList: number[]
|
||||
UnlockSubSkillIDList: number[]
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
const cacheMap = new Map()
|
||||
|
||||
export function loadRawData(fileName: string): any {
|
||||
let result = cacheMap.get(fileName)
|
||||
if (result == null) {
|
||||
result = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'dump/out', fileName)).toString())
|
||||
cacheMap.set(fileName, result)
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import { loadRawData } from './loadRawData'
|
||||
|
||||
export function getRawTagListDataMap(): RawTagListDataMap {
|
||||
return loadRawData('TagListData.json')
|
||||
}
|
||||
|
||||
export type RawTagListDataMap = {
|
||||
[key: string]: RawTagListItem
|
||||
}
|
||||
|
||||
export interface RawTagListItem {
|
||||
TagName: number
|
||||
TagDec: number
|
||||
Icon: string
|
||||
Type: number
|
||||
ShowInScreen: boolean
|
||||
DisplayWeaponList: number[]
|
||||
DisplayStigmataList: number[]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { loadRawData } from './loadRawData'
|
||||
|
||||
export function getRawTextMap(): RawTextMap {
|
||||
return loadRawData('TextMap.json')
|
||||
}
|
||||
|
||||
export type RawTextMap = { [key: string]: { Text: 'string' } }
|
||||
@@ -0,0 +1,37 @@
|
||||
import { buildBattlesuitList } from '../lib/v2-pre/server/buildData'
|
||||
import path from 'path'
|
||||
import { createDirIfNotExist } from '../lib/v2-pre/server/fsUtils'
|
||||
import fs from 'fs'
|
||||
import YAML from 'yaml'
|
||||
import { runScript } from './lib/utils'
|
||||
import { battlesuitCatalogPath, battlesuitsDir, dataDir } from '../lib/v2-pre/server/loadData'
|
||||
import { BattlesuitCatalogItem } from '../lib/v2-pre/data/types'
|
||||
|
||||
runScript(async () => {
|
||||
createDirIfNotExist(dataDir)
|
||||
writeBattlesuitData()
|
||||
})
|
||||
|
||||
function writeBattlesuitData() {
|
||||
const battlesuitList = buildBattlesuitList()
|
||||
|
||||
const simplifiedList: BattlesuitCatalogItem[] = battlesuitList.map(battlesuit => {
|
||||
return {
|
||||
id: battlesuit.id,
|
||||
fullName: battlesuit.fullName,
|
||||
attributeType: battlesuit.attributeType,
|
||||
weapon: battlesuit.weapon,
|
||||
character: battlesuit.character,
|
||||
initialStar: battlesuit.initialStar
|
||||
}
|
||||
})
|
||||
|
||||
fs.writeFileSync(battlesuitCatalogPath, YAML.stringify(simplifiedList))
|
||||
|
||||
createDirIfNotExist(battlesuitsDir)
|
||||
|
||||
for (const battlesuit of battlesuitList) {
|
||||
const battlesuitDataPath = path.join(battlesuitsDir, `${battlesuit.id}.yaml`)
|
||||
fs.writeFileSync(battlesuitDataPath, YAML.stringify(battlesuit))
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
cp -R \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarcardfigures \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarcardicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarchibiicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarfragmentfigures \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avataricon \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatariconside \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarstar \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarstarskill \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatartachie \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/avatarattricons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/skillicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/subskillicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/stateicon/newstateicon \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/stigmatafigures \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/stigmataicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/stigmatasmallicon \
|
||||
dump/sprite2-dump-67/assets/originalresrepos/art/ui/stigmatatype \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/elfcardfigures \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/elfcardicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/elffragmentfigures \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/elftalentbg \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/rogue/materialfigures \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/rogue/supportbufficon \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/rogue/godcloseup \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/weaponicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/weapontypeicons \
|
||||
dump/sprite2-dump-67/assets/asbres/spriteoutput/materialfigures \
|
||||
assets/raw
|
||||
Reference in New Issue
Block a user