Skip to content

Commit 3f2a378

Browse files
committed
fix(editor2): incorrect elite 1 level caps for rarity 4 and 6
1 parent e675196 commit 3f2a378

File tree

2 files changed

+74
-25
lines changed

2 files changed

+74
-25
lines changed

src/components/editor2/operator/OperatorItem.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ export const OperatorItem: FC<OperatorItemProps> = memo(
206206
rarity: info?.rarity,
207207
level: requirements.level,
208208
elite: requirements.elite,
209-
adjustment: e.deltaY > 0 ? -10 : 10,
209+
delta: e.deltaY > 0 ? -10 : 10,
210210
}),
211211
},
212212
})

src/models/operator.ts

Lines changed: 73 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ const defaultRequirementsByRarity: Record<
8787
1: { potentiality: 1, module: 0, elite: 0, level: 30, skillLevel: 1 },
8888
2: { potentiality: 1, module: 0, elite: 0, level: 30, skillLevel: 1 },
8989
3: { potentiality: 1, module: 0, elite: 1, level: 55, skillLevel: 7 },
90-
4: { potentiality: 1, module: 0, elite: 1, level: 70, skillLevel: 7 },
90+
4: { potentiality: 1, module: 0, elite: 1, level: 60, skillLevel: 7 },
9191
5: { potentiality: 1, module: 0, elite: 2, level: 40, skillLevel: 7 },
9292
6: { potentiality: 1, module: 0, elite: 2, level: 60, skillLevel: 10 },
9393
}
@@ -109,41 +109,90 @@ export function adjustOperatorLevel({
109109
rarity = 6,
110110
elite,
111111
level,
112-
adjustment,
112+
delta,
113+
roundTo = Math.abs(delta),
113114
}: {
114115
rarity?: number
115116
elite: number
116117
level: number
117-
adjustment: number
118+
delta: number
119+
roundTo?: number
118120
}) {
119-
const elite1 = 50
120-
const elite2 = elite1 + 70
121-
const maxLevel =
122-
rarity === 6
123-
? elite2 + 90
124-
: rarity === 5
125-
? elite2 + 80
126-
: rarity === 4
127-
? elite2 + 70
128-
: rarity === 3
129-
? elite1 + 55
130-
: 30
121+
if (delta === 0) {
122+
return { elite, level }
123+
}
124+
125+
let elite1 = 50
126+
let elite2: number
127+
let maxLevel: number
128+
129+
if (rarity === 6) {
130+
elite2 = elite1 + 80
131+
maxLevel = elite2 + 90
132+
} else if (rarity === 5) {
133+
elite2 = elite1 + 70
134+
maxLevel = elite2 + 80
135+
} else if (rarity === 4) {
136+
elite2 = elite1 + 60
137+
maxLevel = elite2 + 70
138+
} else if (rarity === 3) {
139+
elite2 = 0
140+
maxLevel = elite1 + 55
141+
} else {
142+
elite1 = 0
143+
elite2 = 0
144+
maxLevel = 30
145+
}
146+
131147
if (elite === 1) {
132148
level += elite1
133149
} else if (elite === 2) {
134150
level += elite2
135151
}
136-
level += adjustment
137-
// 向 adjustment 的绝对值取整,如果 adjustment=±10,就可以得到整十的等级
138-
level =
139-
(adjustment < 0 ? Math.ceil : Math.floor)(level / Math.abs(adjustment)) *
140-
Math.abs(adjustment)
141-
142-
level = clamp(level, 1, maxLevel)
143-
if (level > elite2) {
152+
153+
;(() => {
154+
// 特殊处理:把精英1满级和精英2 1级当成两个边界点,从任何方向尝试跨越时都只能落到这两个点上
155+
if (elite2 !== 0) {
156+
if (
157+
(level > elite2 + 1 && level + delta <= elite2 + 1) ||
158+
(level === elite2 && delta > 0)
159+
) {
160+
level = elite2 + 1
161+
return
162+
} else if (
163+
(level < elite2 && level + delta >= elite2) ||
164+
(level === elite2 + 1 && delta < 0)
165+
) {
166+
level = elite2
167+
return
168+
}
169+
}
170+
// 同上,处理精英0满级和精英1 1级
171+
if (elite1 !== 0) {
172+
if (
173+
(level > elite1 + 1 && level + delta <= elite1 + 1) ||
174+
(level === elite1 && delta > 0)
175+
) {
176+
level = elite1 + 1
177+
return
178+
} else if (
179+
(level < elite1 && level + delta >= elite1) ||
180+
(level === elite1 + 1 && delta < 0)
181+
) {
182+
level = elite1
183+
return
184+
}
185+
}
186+
187+
level += delta
188+
level = (delta < 0 ? Math.ceil : Math.floor)(level / roundTo) * roundTo
189+
level = clamp(level, 1, maxLevel)
190+
})()
191+
192+
if (elite2 !== 0 && level > elite2) {
144193
elite = 2
145194
level -= elite2
146-
} else if (level > elite1) {
195+
} else if (elite1 !== 0 && level > elite1) {
147196
elite = 1
148197
level -= elite1
149198
} else {

0 commit comments

Comments
 (0)