@@ -4,7 +4,7 @@ import fetch from 'node-fetch'
4
4
import { pinyin } from 'pinyin'
5
5
import simplebig from 'simplebig'
6
6
7
- type Profession = { id : string ; name : string }
7
+ type Profession = { id : string ; name : string ; name_en ?: string }
8
8
type Professions = ( Profession & { sub : Profession [ ] } ) [ ]
9
9
10
10
export async function fileExists ( file : string ) {
@@ -48,11 +48,14 @@ function transformOperatorName(name: string) {
48
48
}
49
49
}
50
50
51
- const CHARACTER_TABLE_JSON_URL =
51
+ const CHARACTER_TABLE_JSON_URL_CN =
52
52
'https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData/master/zh_CN/gamedata/excel/character_table.json'
53
- const UNIEQUIP_TABLE_JSON_URL =
53
+ const UNIEQUIP_TABLE_JSON_URL_CN =
54
54
'https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData/master/zh_CN/gamedata/excel/uniequip_table.json'
55
-
55
+ const CHARACTER_TABLE_JSON_URL_EN =
56
+ 'https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData_YoStar/main/en_US/gamedata/excel/character_table.json'
57
+ const UNIEQUIP_TABLE_JSON_URL_EN =
58
+ 'https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData_YoStar/main/en_US/gamedata/excel/uniequip_table.json'
56
59
const CHARACTER_BLOCKLIST = [
57
60
'char_512_aprot' , // 暮落(集成战略):It's just not gonna be there.
58
61
'token_10012_rosmon_shield' , // 迷迭香的战术装备:It's just not gonna be there.
@@ -74,37 +77,55 @@ async function json(url: string) {
74
77
}
75
78
76
79
export async function getOperators ( ) {
77
- const [ charTable , uniequipTable ] = await Promise . all ( [
78
- json ( CHARACTER_TABLE_JSON_URL ) ,
79
- json ( UNIEQUIP_TABLE_JSON_URL ) ,
80
- ] )
80
+ const [ charTableCN , uniequipTableCN , charTableEN , uniequipTableEN ] =
81
+ await Promise . all ( [
82
+ json ( CHARACTER_TABLE_JSON_URL_CN ) ,
83
+ json ( UNIEQUIP_TABLE_JSON_URL_CN ) ,
84
+ json ( CHARACTER_TABLE_JSON_URL_EN ) ,
85
+ json ( UNIEQUIP_TABLE_JSON_URL_EN ) ,
86
+ ] )
81
87
82
- const { subProfDict } = uniequipTable
88
+ const { subProfDict : subProfDictCN } = uniequipTableCN
89
+ const { subProfDict : subProfDictEN } = uniequipTableEN
83
90
84
- const opIds = Object . keys ( charTable )
91
+ const opIds = Object . keys ( charTableCN )
85
92
const professions : Professions = [ ]
86
93
const result = uniqBy (
87
94
opIds . flatMap ( ( id ) => {
88
- const op = charTable [ id ]
95
+ const op = charTableCN [ id ]
96
+ const enName = charTableEN [ id ] ?. name || op . appellation || op . name
97
+
89
98
if ( [ 'TRAP' ] . includes ( op . profession ) ) return [ ]
90
99
91
100
if ( ! [ 'TOKEN' ] . includes ( op . profession ) ) {
92
101
const prof = professions . find ( ( p ) => p . id === op . profession )
93
102
if ( ! prof ) {
103
+ const enSubProfName =
104
+ subProfDictEN ?. [ op . subProfessionId ] ?. subProfessionName ||
105
+ subProfDictCN [ op . subProfessionId ] . subProfessionName
106
+
94
107
professions . push ( {
95
108
id : op . profession ,
96
109
name : PROFESSION_NAMES [ op . profession ] ,
110
+ name_en :
111
+ op . profession . charAt ( 0 ) + op . profession . slice ( 1 ) . toLowerCase ( ) ,
97
112
sub : [
98
113
{
99
114
id : op . subProfessionId ,
100
- name : subProfDict [ op . subProfessionId ] . subProfessionName ,
115
+ name : subProfDictCN [ op . subProfessionId ] . subProfessionName ,
116
+ name_en : enSubProfName ,
101
117
} ,
102
118
] ,
103
119
} )
104
120
} else if ( ! prof . sub . find ( ( p ) => p . id === op . subProfessionId ) ) {
121
+ const enSubProfName =
122
+ subProfDictEN ?. [ op . subProfessionId ] ?. subProfessionName ||
123
+ subProfDictCN [ op . subProfessionId ] . subProfessionName
124
+
105
125
prof . sub . push ( {
106
126
id : op . subProfessionId ,
107
- name : subProfDict [ op . subProfessionId ] . subProfessionName ,
127
+ name : subProfDictCN [ op . subProfessionId ] . subProfessionName ,
128
+ name_en : enSubProfName ,
108
129
} )
109
130
}
110
131
}
@@ -113,6 +134,7 @@ export async function getOperators() {
113
134
id : id ,
114
135
prof : op . profession ,
115
136
subProf : op . subProfessionId ,
137
+ name_en : enName ,
116
138
...transformOperatorName ( op . name ) ,
117
139
rarity :
118
140
op . subProfessionId === 'notchar1'
0 commit comments