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 </div> 137 {/* <DecreaseSkillPointButton {...props} /> */} 138 <IncreaseSkillToMaxButton 139 - skillId={variation.id} 140 jobId={props.jobId} 141 isSelectedMasterVariation={isSelectedMasterVariation} 142 hasMinLevelRequirements={variation?.hasMinLevelRequirements} 143 isMaxed={variation?.isMaxed} 144 />
··· 136 </div> 137 {/* <DecreaseSkillPointButton {...props} /> */} 138 <IncreaseSkillToMaxButton 139 + skillId={props.skill.id} 140 jobId={props.jobId} 141 isSelectedMasterVariation={isSelectedMasterVariation} 142 + masterVariationSkillId={variation.id} 143 hasMinLevelRequirements={variation?.hasMinLevelRequirements} 144 isMaxed={variation?.isMaxed} 145 />
+6 -1
apps/skillulator/src/routes/c/$class/components/action-buttons.tsx
··· 40 jobId: number | undefined; 41 skillId: number; 42 isSelectedMasterVariation?: boolean; 43 }) { 44 const { increaseSkillToMax } = useTreeStore(); 45 return ( ··· 60 )} 61 onClick={() => { 62 if (!props.jobId) return; 63 - increaseSkillToMax(props.skillId, props.jobId); 64 }} 65 > 66 max
··· 40 jobId: number | undefined; 41 skillId: number; 42 isSelectedMasterVariation?: boolean; 43 + masterVariationSkillId?: number; 44 }) { 45 const { increaseSkillToMax } = useTreeStore(); 46 return ( ··· 61 )} 62 onClick={() => { 63 if (!props.jobId) return; 64 + increaseSkillToMax({ 65 + skillId: props.skillId, 66 + jobId: props.jobId, 67 + masterVariationSkillId: props.masterVariationSkillId, 68 + }); 69 }} 70 > 71 max
+51 -2
apps/skillulator/src/zustand/treeStore.ts
··· 26 skillId: number; 27 masterVariationSkillId?: number; 28 }) => void; 29 - increaseSkillToMax: (jobId: number, skillId: number) => void; 30 decreaseSkillPoint: ({ 31 jobId, 32 skillId, ··· 219 return state; 220 }), 221 ), 222 - increaseSkillToMax: (skillId: number, jobId: number) => 223 set( 224 produce((state: State) => { 225 const job = getJobById(jobId, state.jobTree); 226 if (!job) return state; 227 228 const skill = getSkillById(skillId, job.skills); 229 if (!skill) return state; 230 231 if (skill.levels === skill.skillLevel) return state;
··· 26 skillId: number; 27 masterVariationSkillId?: number; 28 }) => void; 29 + increaseSkillToMax: ({ 30 + jobId, 31 + skillId, 32 + masterVariationSkillId, 33 + }: { 34 + jobId: number; 35 + skillId: number; 36 + masterVariationSkillId?: number; 37 + }) => void; 38 decreaseSkillPoint: ({ 39 jobId, 40 skillId, ··· 227 return state; 228 }), 229 ), 230 + increaseSkillToMax: ({ 231 + jobId, 232 + skillId, 233 + masterVariationSkillId, 234 + }: { 235 + jobId: number; 236 + skillId: number; 237 + masterVariationSkillId?: number; 238 + }) => 239 set( 240 produce((state: State) => { 241 const job = getJobById(jobId, state.jobTree); 242 if (!job) return state; 243 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 + } 278 if (!skill) return state; 279 280 if (skill.levels === skill.skillLevel) return state;