@@ -87,7 +87,7 @@ const defaultRequirementsByRarity: Record<
87
87
1 : { potentiality : 1 , module : 0 , elite : 0 , level : 30 , skillLevel : 1 } ,
88
88
2 : { potentiality : 1 , module : 0 , elite : 0 , level : 30 , skillLevel : 1 } ,
89
89
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 } ,
91
91
5 : { potentiality : 1 , module : 0 , elite : 2 , level : 40 , skillLevel : 7 } ,
92
92
6 : { potentiality : 1 , module : 0 , elite : 2 , level : 60 , skillLevel : 10 } ,
93
93
}
@@ -109,41 +109,90 @@ export function adjustOperatorLevel({
109
109
rarity = 6 ,
110
110
elite,
111
111
level,
112
- adjustment,
112
+ delta,
113
+ roundTo = Math . abs ( delta ) ,
113
114
} : {
114
115
rarity ?: number
115
116
elite : number
116
117
level : number
117
- adjustment : number
118
+ delta : number
119
+ roundTo ?: number
118
120
} ) {
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
+
131
147
if ( elite === 1 ) {
132
148
level += elite1
133
149
} else if ( elite === 2 ) {
134
150
level += elite2
135
151
}
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 ) {
144
193
elite = 2
145
194
level -= elite2
146
- } else if ( level > elite1 ) {
195
+ } else if ( elite1 !== 0 && level > elite1 ) {
147
196
elite = 1
148
197
level -= elite1
149
198
} else {
0 commit comments