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

add increase skill to max button for master variation skills

besaid.zone a003888a dc98a4ba

verified
Changed files
+59 -4
apps
skillulator
src
routes
c
$class
zustand
+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 />
+6 -1
apps/skillulator/src/routes/c/$class/components/action-buttons.tsx
··· 40 40 jobId: number | undefined; 41 41 skillId: number; 42 42 isSelectedMasterVariation?: boolean; 43 + masterVariationSkillId?: number; 43 44 }) { 44 45 const { increaseSkillToMax } = useTreeStore(); 45 46 return ( ··· 60 61 )} 61 62 onClick={() => { 62 63 if (!props.jobId) return; 63 - increaseSkillToMax(props.skillId, props.jobId); 64 + increaseSkillToMax({ 65 + skillId: props.skillId, 66 + jobId: props.jobId, 67 + masterVariationSkillId: props.masterVariationSkillId, 68 + }); 64 69 }} 65 70 > 66 71 max
+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;