+2
-1
apps/skillulator/src/routes/c/$class/components/Skill.tsx
+2
-1
apps/skillulator/src/routes/c/$class/components/Skill.tsx
···
136
136
</div>
137
137
{/* <DecreaseSkillPointButton {...props} /> */}
138
138
<IncreaseSkillToMaxButton
139
-
skillId={variation.id}
139
+
skillId={props.skill.id}
140
140
jobId={props.jobId}
141
141
isSelectedMasterVariation={isSelectedMasterVariation}
142
+
masterVariationSkillId={variation.id}
142
143
hasMinLevelRequirements={variation?.hasMinLevelRequirements}
143
144
isMaxed={variation?.isMaxed}
144
145
/>
+51
-2
apps/skillulator/src/zustand/treeStore.ts
+51
-2
apps/skillulator/src/zustand/treeStore.ts
···
26
26
skillId: number;
27
27
masterVariationSkillId?: number;
28
28
}) => void;
29
-
increaseSkillToMax: (jobId: number, skillId: number) => void;
29
+
increaseSkillToMax: ({
30
+
jobId,
31
+
skillId,
32
+
masterVariationSkillId,
33
+
}: {
34
+
jobId: number;
35
+
skillId: number;
36
+
masterVariationSkillId?: number;
37
+
}) => void;
30
38
decreaseSkillPoint: ({
31
39
jobId,
32
40
skillId,
···
219
227
return state;
220
228
}),
221
229
),
222
-
increaseSkillToMax: (skillId: number, jobId: number) =>
230
+
increaseSkillToMax: ({
231
+
jobId,
232
+
skillId,
233
+
masterVariationSkillId,
234
+
}: {
235
+
jobId: number;
236
+
skillId: number;
237
+
masterVariationSkillId?: number;
238
+
}) =>
223
239
set(
224
240
produce((state: State) => {
225
241
const job = getJobById(jobId, state.jobTree);
226
242
if (!job) return state;
227
243
228
244
const skill = getSkillById(skillId, job.skills);
245
+
if (
246
+
skill?.masterVariations?.length &&
247
+
typeof masterVariationSkillId !== "undefined"
248
+
) {
249
+
if (!masterVariationSkillId) return state;
250
+
const masterVariationSkill = getSkillById(
251
+
masterVariationSkillId,
252
+
skill.masterVariations,
253
+
);
254
+
255
+
if (!masterVariationSkill) return state;
256
+
if (masterVariationSkill.levels === masterVariationSkill.skillLevel)
257
+
return state;
258
+
259
+
const maxPossibleLevel = Math.min(
260
+
masterVariationSkill.levels,
261
+
Math.floor(state.skillPoints / masterVariationSkill.points),
262
+
);
263
+
264
+
if (maxPossibleLevel > masterVariationSkill.skillLevel) {
265
+
const levelsToAdd =
266
+
maxPossibleLevel - masterVariationSkill.skillLevel;
267
+
masterVariationSkill.skillLevel = maxPossibleLevel;
268
+
state.skillPoints -= levelsToAdd * masterVariationSkill.points;
269
+
}
270
+
271
+
updateSkillRequirements(
272
+
job,
273
+
masterVariationSkillId,
274
+
masterVariationSkill.skillLevel,
275
+
);
276
+
return state;
277
+
}
229
278
if (!skill) return state;
230
279
231
280
if (skill.levels === skill.skillLevel) return state;