+15
apps/skillulator/src/utils/constants.ts
+15
apps/skillulator/src/utils/constants.ts
···
1
+
import type { SkillBracket } from "@/types";
2
+
1
3
export const JOB_SKILLPOINTS: Record<number, Record<string, number>> = {
2
4
// elementor
3
5
9150: {
···
153
155
image: "jester.png",
154
156
},
155
157
];
158
+
159
+
export const SKILL_BRACKETS: SkillBracket[] = [
160
+
{ maxLevel: 20, pointsPerLevel: 2 },
161
+
{ maxLevel: 40, pointsPerLevel: 3 },
162
+
{ maxLevel: 60, pointsPerLevel: 4 },
163
+
{ maxLevel: 80, pointsPerLevel: 5 },
164
+
{ maxLevel: 100, pointsPerLevel: 6 },
165
+
{ maxLevel: 120, pointsPerLevel: 7 },
166
+
{ maxLevel: 140, pointsPerLevel: 8 },
167
+
{ maxLevel: 150, pointsPerLevel: 1 },
168
+
{ maxLevel: 166, pointsPerLevel: 2 },
169
+
{ maxLevel: 190, pointsPerLevel: 10 },
170
+
];
+6
-17
apps/skillulator/src/utils/skill-tree-helpers.ts
+6
-17
apps/skillulator/src/utils/skill-tree-helpers.ts
···
1
-
import type { Jobs, SkillBracket, Skills } from "../types";
2
-
import type { JOB_SKILLPOINTS } from "./constants";
1
+
import type { Jobs, Skills } from "../types";
2
+
import { SKILL_BRACKETS, type JOB_SKILLPOINTS } from "./constants";
3
3
4
4
export function getJobById(jobId: number, jobs: Jobs) {
5
5
return jobs.filter((job) => job.id === jobId).at(0);
···
104
104
throw new Error("Could not decode skill tree");
105
105
}
106
106
107
-
const SKILL_BRACKETS: SkillBracket[] = [
108
-
{ maxLevel: 20, pointsPerLevel: 2 },
109
-
{ maxLevel: 40, pointsPerLevel: 3 },
110
-
{ maxLevel: 60, pointsPerLevel: 4 },
111
-
{ maxLevel: 80, pointsPerLevel: 5 },
112
-
{ maxLevel: 100, pointsPerLevel: 6 },
113
-
{ maxLevel: 120, pointsPerLevel: 7 },
114
-
{ maxLevel: 140, pointsPerLevel: 8 },
115
-
{ maxLevel: 150, pointsPerLevel: 1 },
116
-
{ maxLevel: 160, pointsPerLevel: 2 },
117
-
{ maxLevel: 165, pointsPerLevel: 2 },
118
-
{ maxLevel: 190, pointsPerLevel: 10 },
119
-
];
120
-
121
107
export function getSkillPointsForLevel(characterLevel: number): number {
122
108
if (characterLevel < 15) {
123
109
return 0;
124
110
}
125
111
126
112
let totalPoints = 0;
127
-
let previousMaxLevel = 0;
113
+
// this is because characters start at level one, not zero
114
+
// needed to calculate the correct amount of skillpoints for the first bracket
115
+
let previousMaxLevel = 1;
128
116
129
117
for (const bracket of SKILL_BRACKETS) {
130
118
const effectiveLevel = Math.min(characterLevel, bracket.maxLevel);
131
119
const levelsInBracket = Math.max(0, effectiveLevel - previousMaxLevel);
120
+
console.log(bracket, levelsInBracket, levelsInBracket * bracket.pointsPerLevel)
132
121
133
122
totalPoints += levelsInBracket * bracket.pointsPerLevel;
134
123
previousMaxLevel = bracket.maxLevel;