a collection of tools for fly for fun universe skillulator.lol

fix skill point calculation for max level 20 bracket

besaid.zone 7f718062 1d834f0b

verified
Changed files
+21 -17
apps
skillulator
+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
··· 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;