Skip to content

Commit abe9fc1

Browse files
committed
feat(editor2): remove skills from operators.json and rename equips to modules
1 parent 6b7c9b8 commit abe9fc1

File tree

8 files changed

+517
-954
lines changed

8 files changed

+517
-954
lines changed

scripts/shared.ts

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { access } from 'fs/promises'
2-
import { compact, last, uniq, uniqBy } from 'lodash-es'
2+
import { uniq, uniqBy } from 'lodash-es'
33
import fetch from 'node-fetch'
44
import { pinyin } from 'pinyin'
55
import simplebig from 'simplebig'
@@ -147,29 +147,11 @@ export async function getOperators() {
147147
})
148148
}
149149
}
150-
const equips = equipsByOperatorId[id]
150+
const modules = equipsByOperatorId[id]
151151
?.sort((a, b) => a.charEquipOrder - b.charEquipOrder)
152152
.map(({ typeName1, typeName2 }) => {
153153
return typeName1 === 'ORIGINAL' ? '' : typeName2
154154
})
155-
const skills = ['TOKEN'].includes(op.profession)
156-
? [] // 召唤物无需选择技能,所以不需要技能信息
157-
: compact(
158-
(op.skills as any[]).map(
159-
({ skillId }: { skillId: string | null }) => {
160-
if (!skillId) return null
161-
// 技能的每级都有一个 name,直接取等级最高的那个,以防鹰角背刺
162-
const name = last<{ name: string }>(
163-
skillTable[skillId].levels,
164-
)?.name
165-
if (!name) {
166-
console.error(`Invalid skill: ${op.name} - ${skillId}`)
167-
return null
168-
}
169-
return name
170-
},
171-
),
172-
)
173155
return [
174156
{
175157
id: id,
@@ -182,8 +164,7 @@ export async function getOperators() {
182164
? 0
183165
: Number(op.rarity?.split('TIER_').join('') || 0),
184166
alt_name: op.appellation,
185-
skills,
186-
equips,
167+
modules,
187168
},
188169
]
189170
}),

src/components/editor/operator/EditorOperator.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const createArbitraryOperator = (name: string): OperatorInfo => ({
3232
name_en: '',
3333
prof: '',
3434
rarity: 0,
35-
skills: [],
3635
})
3736

3837
export const EditorOperatorName = <T extends FieldValues>({

src/components/editor/operator/sheet/sheetOperator/SheetOperatorFilterProvider.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ const generateCustomizedOperInfo = (name: string): OperatorInfo => ({
115115
alias: 'customized-operator',
116116
rarity: 0,
117117
alt_name: 'custormized operator named' + name,
118-
skills: [],
119118
})
120119

121120
const useOperatorFiltered = (

src/components/editor2/operator/OperatorItem.tsx

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import {
2121
OPERATORS,
2222
adjustOperatorLevel,
2323
alternativeOperatorSkillUsages,
24-
defaultSkills,
2524
getDefaultRequirements,
2625
getEliteIconUrl,
26+
getSkillCount,
2727
getSkillUsageAltTitle,
2828
withDefaultRequirements,
2929
} from '../../../models/operator'
@@ -66,12 +66,12 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
6666
const edit = useEdit()
6767
const setFavOperators = useSetAtom(editorFavOperatorsAtom)
6868
const info = OPERATORS.find(({ name }) => name === operator.name)
69-
const skills = info ? info.skills : defaultSkills
69+
const skillCount = info ? getSkillCount(info) : 3
7070
const requirements = withDefaultRequirements(
7171
operator.requirements,
7272
info?.rarity,
7373
)
74-
const detailedSkills = skills.map((_, index) => ({
74+
const detailedSkills = Array.from({ length: skillCount }, (_, index) => ({
7575
available: index <= requirements.elite,
7676
defaultLevel: getDefaultRequirements(info?.rarity).skillLevel,
7777
}))
@@ -313,6 +313,7 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
313313
const skillLevel = selected
314314
? requirements.skillLevel
315315
: defaultLevel
316+
const maxLevel = requirements.elite === 2 ? 10 : 7
316317
return (
317318
<li
318319
key={index}
@@ -350,20 +351,19 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
350351
})
351352
}
352353
}}
353-
onValueChange={(value) => {
354+
onValueChange={(_, valueStr) => {
354355
edit(() => {
355356
// 拿到新输入的一位数字(比如原来是 5,输入 2,变成 52,这里会拿到 2)
356-
const acceptedValue =
357-
value >= 10
358-
? +String(value).replace(
359-
String(requirements.skillLevel),
360-
'',
361-
)
362-
: value
363-
let newLevel = clamp(acceptedValue, 0, 9)
357+
let newLevel =
358+
valueStr.length > 1
359+
? +String(valueStr).replace(String(skillLevel), '')
360+
: Number(valueStr)
361+
364362
if (newLevel === 0) {
365363
newLevel = 10
366364
}
365+
newLevel = clamp(newLevel, 1, maxLevel)
366+
367367
onChange?.({
368368
...operator,
369369
requirements: {
@@ -372,7 +372,7 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
372372
},
373373
})
374374
return {
375-
action: 'set-operator-level',
375+
action: 'set-operator-skillLevel',
376376
desc: i18n.actions.editor2.set_operator_skill_level,
377377
squashBy: operator.id,
378378
}
@@ -388,12 +388,12 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
388388
skillLevel: clamp(
389389
requirements.skillLevel + (e.deltaY > 0 ? -1 : 1),
390390
1,
391-
10,
391+
maxLevel,
392392
),
393393
},
394394
})
395395
return {
396-
action: 'set-operator-level',
396+
action: 'set-operator-skillLevel',
397397
desc: i18n.actions.editor2.set_operator_skill_level,
398398
squashBy: operator.id,
399399
}
@@ -412,11 +412,11 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
412412
</li>
413413
)
414414
})}
415-
{controlsEnabled && info?.equips && (
415+
{controlsEnabled && info?.modules && (
416416
<Select
417417
className="row-start-4"
418418
filterable={false}
419-
items={info.equips}
419+
items={info.modules}
420420
itemRenderer={(
421421
item,
422422
{ index, handleClick, handleFocus, modifiers },
@@ -440,7 +440,7 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
440440
...operator,
441441
requirements: {
442442
...operator.requirements,
443-
module: info.equips.indexOf(item),
443+
module: info.modules.indexOf(item),
444444
},
445445
})
446446
return {
@@ -467,7 +467,7 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
467467
: '!bg-gray-300 dark:!bg-gray-600 opacity-15 dark:opacity-25 hover:opacity-30 dark:hover:opacity-50',
468468
)}
469469
>
470-
{info.equips[requirements.module]}
470+
{info.modules[requirements.module]}
471471
</Button>
472472
</Select>
473473
)}

src/components/editor2/operator/OperatorSelect.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ const createArbitraryOperator = (name: string): OperatorInfo => ({
2222
subProf: '',
2323
prof: '',
2424
rarity: 0,
25-
skills: [],
2625
})
2726

2827
const operatorNamesAtom = selectAtom(

src/components/viewer/OperationViewer.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ import { createCustomLevel, findLevelByStageName } from '../../models/level'
5353
import { Level } from '../../models/operation'
5454
import {
5555
OPERATORS,
56-
defaultSkills,
5756
getEliteIconUrl,
57+
getSkillCount,
5858
useLocalizedOperatorName,
5959
withDefaultRequirements,
6060
} from '../../models/operator'
@@ -341,11 +341,13 @@ const OperatorCard: FC<{
341341
const t = useTranslation()
342342
const displayName = useLocalizedOperatorName(operator.name)
343343
const info = OPERATORS.find((o) => o.name === operator.name)
344-
const skills = info ? info.skills : defaultSkills
345344
const { level, elite, skillLevel, module } = withDefaultRequirements(
346345
operator.requirements,
347346
info?.rarity,
348347
)
348+
const skillCount = info
349+
? Math.max(getSkillCount(info), operator.skill ?? 1)
350+
: 3
349351

350352
return (
351353
<div className="relative flex items-start">
@@ -357,12 +359,12 @@ const OperatorCard: FC<{
357359
className="w-20 h-20"
358360
fallback={displayName}
359361
/>
360-
{info?.equips && module !== 0 && (
362+
{info?.modules && module !== 0 && (
361363
<div
362364
title={t.components.editor2.label.opers.requirements.module}
363365
className="absolute -bottom-1 right-1 font-serif font-bold text-lg text-white [text-shadow:0_0_3px_#a855f7,0_0_5px_#a855f7]"
364366
>
365-
{info.equips[module]}
367+
{info.modules[module]}
366368
</div>
367369
)}
368370
</div>
@@ -393,7 +395,7 @@ const OperatorCard: FC<{
393395
)}
394396

395397
<ul className="flex flex-col gap-1 ml-1">
396-
{skills.map((_, index) => {
398+
{Array.from({ length: skillCount }, (_, index) => {
397399
const skillNumber = index + 1
398400
const selected = operator.skill === skillNumber
399401
return (

0 commit comments

Comments
 (0)