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 export const JOB_SKILLPOINTS: Record<number, Record<string, number>> = { 2 // elementor 3 9150: { ··· 153 image: "jester.png", 154 }, 155 ];
··· 1 + import type { SkillBracket } from "@/types"; 2 + 3 export const JOB_SKILLPOINTS: Record<number, Record<string, number>> = { 4 // elementor 5 9150: { ··· 155 image: "jester.png", 156 }, 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"; 3 4 export function getJobById(jobId: number, jobs: Jobs) { 5 return jobs.filter((job) => job.id === jobId).at(0); ··· 104 throw new Error("Could not decode skill tree"); 105 } 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 export function getSkillPointsForLevel(characterLevel: number): number { 122 if (characterLevel < 15) { 123 return 0; 124 } 125 126 let totalPoints = 0; 127 - let previousMaxLevel = 0; 128 129 for (const bracket of SKILL_BRACKETS) { 130 const effectiveLevel = Math.min(characterLevel, bracket.maxLevel); 131 const levelsInBracket = Math.max(0, effectiveLevel - previousMaxLevel); 132 133 totalPoints += levelsInBracket * bracket.pointsPerLevel; 134 previousMaxLevel = bracket.maxLevel;
··· 1 + import type { Jobs, Skills } from "../types"; 2 + import { SKILL_BRACKETS, type JOB_SKILLPOINTS } from "./constants"; 3 4 export function getJobById(jobId: number, jobs: Jobs) { 5 return jobs.filter((job) => job.id === jobId).at(0); ··· 104 throw new Error("Could not decode skill tree"); 105 } 106 107 export function getSkillPointsForLevel(characterLevel: number): number { 108 if (characterLevel < 15) { 109 return 0; 110 } 111 112 let totalPoints = 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; 116 117 for (const bracket of SKILL_BRACKETS) { 118 const effectiveLevel = Math.min(characterLevel, bracket.maxLevel); 119 const levelsInBracket = Math.max(0, effectiveLevel - previousMaxLevel); 120 + console.log(bracket, levelsInBracket, levelsInBracket * bracket.pointsPerLevel) 121 122 totalPoints += levelsInBracket * bracket.pointsPerLevel; 123 previousMaxLevel = bracket.maxLevel;