Android build v1.0.35

This commit is contained in:
Warren H
2026-06-20 16:10:35 -04:00
parent 1281be69d8
commit 2300973164
15 changed files with 877 additions and 293 deletions
+28 -4
View File
@@ -428,6 +428,10 @@ function scaledPvpBossExperience(
return { experience, level }
}
function talentEffectCapacity(level: number) {
return Math.min(4, Math.max(0, Math.floor(level / 5)))
}
type ComponentTemplate = { id: number; slug: string; name: string; itemLevel: number; glyph: string; description: string }
const COMPONENT_ITEMS: Record<number, ComponentTemplate> = {
1: { id: 600, slug: 'minor-component', name: 'Minor Component', itemLevel: 1, glyph: '◆', description: 'A basic crafting component.' },
@@ -1102,6 +1106,24 @@ function createLocalRepository(store: LocalSaveStore): GameRepository {
)!
const talent = gameClass.talents.find((candidate) => candidate.id === talentId)
if (!talent) throw new Error('That talent does not belong to the active class.')
if (save.activeClassId === 1) {
if ((cd.talentRanks[String(talentId)] ?? 0) > 0) {
cd.talentRanks[String(talentId)] = 0
} else {
const capacity = talentEffectCapacity(cd.level)
if (capacity <= 0) throw new Error('Spell effects unlock at level 5.')
const activeCount = gameClass.talents.reduce(
(total, candidate) => total + ((cd.talentRanks[String(candidate.id)] ?? 0) > 0 ? 1 : 0),
0,
)
if (activeCount >= capacity) {
throw new Error(`Level ${cd.level} allows ${capacity} active spell effect${capacity === 1 ? '' : 's'}.`)
}
cd.talentRanks[String(talentId)] = 1
}
store.writeSave(save)
return buildProfile(save)
}
if (cd.talentPoints <= 0) {
throw new Error('No talent points are available.')
}
@@ -1144,10 +1166,12 @@ function createLocalRepository(store: LocalSaveStore): GameRepository {
for (const talent of gameClass.talents) {
cd.talentRanks[String(talent.id)] = 0
}
cd.talentPoints = Math.min(
profile.maxTalentPoints,
cd.talentPoints + refunded,
)
if (save.activeClassId !== 1) {
cd.talentPoints = Math.min(
profile.maxTalentPoints,
cd.talentPoints + refunded,
)
}
store.writeSave(save)
return buildProfile(save)
},