+42
-3
apps/skillulator/src/zustand/treeStore.ts
+42
-3
apps/skillulator/src/zustand/treeStore.ts
···
26
26
masterVariationSkillId?: number;
27
27
}) => void;
28
28
increaseSkillToMax: (jobId: number, skillId: number) => void;
29
-
decreaseSkillPoint: (jobId: number, skillId: number) => void;
29
+
decreaseSkillPoint: ({
30
+
jobId,
31
+
skillId,
32
+
masterVariationSkillId,
33
+
}: {
34
+
jobId: number;
35
+
skillId: number;
36
+
masterVariationSkillId?: number;
37
+
}) => void;
30
38
initSkillPoints: (jobId: number, characterLevel: number) => void;
31
39
32
40
createPreloadedSkillTree: (
···
84
92
* Master variation skills don't live in the outer skill array, only within the skill they are variations of...
85
93
*/
86
94
const skill = getSkillById(skillId, job.skills);
87
-
if (skill?.masterVariations?.length) {
95
+
if (
96
+
skill?.masterVariations?.length &&
97
+
typeof masterVariationSkillId !== "undefined"
98
+
) {
88
99
if (!masterVariationSkillId) return state;
89
100
const masterVariationSkill = getSkillById(
90
101
masterVariationSkillId,
···
120
131
return state;
121
132
}),
122
133
),
123
-
decreaseSkillPoint: (jobId: number, skillId: number) =>
134
+
decreaseSkillPoint: ({
135
+
jobId,
136
+
skillId,
137
+
masterVariationSkillId,
138
+
}: { jobId: number; skillId: number; masterVariationSkillId?: number }) =>
124
139
set(
125
140
produce((state: State) => {
126
141
const job = getJobById(jobId, state.jobTree);
127
142
if (!job) return state;
128
143
129
144
const skill = getSkillById(skillId, job.skills);
145
+
if (
146
+
skill?.masterVariations?.length &&
147
+
typeof masterVariationSkillId !== "undefined"
148
+
) {
149
+
if (!masterVariationSkillId) return state;
150
+
const masterVariationSkill = getSkillById(
151
+
masterVariationSkillId,
152
+
skill.masterVariations,
153
+
);
154
+
155
+
if (!masterVariationSkill || masterVariationSkill.skillLevel === 0)
156
+
return state;
157
+
158
+
masterVariationSkill.skillLevel -= 1;
159
+
state.skillPoints += masterVariationSkill.points;
160
+
161
+
updateSkillRequirements(
162
+
job,
163
+
masterVariationSkillId,
164
+
masterVariationSkill.skillLevel,
165
+
);
166
+
return state;
167
+
}
168
+
130
169
if (!skill || skill.skillLevel === 0) return state;
131
170
132
171
skill.skillLevel -= 1;