Add character duplication, fix prelevel unselect and ability points calculation

This commit is contained in:
2025-04-23 23:06:15 +02:00
parent ab2778c626
commit 5e6f296c56
7 changed files with 57 additions and 10 deletions

View File

@@ -85,7 +85,7 @@ const trainingSpent = computed(() => Object.values(maxTraining.value).reduce((p,
const modifiers = computed(() => Object.entries(maxTraining.value).reduce((p, v) => { p[v[0] as MainStat] = Math.floor(v[1] / 3) + (data.value.progress.modifiers ? (data.value.progress.modifiers[v[0] as MainStat] ?? 0) : 0); return p; }, {} as Record<MainStat, number>))
const modifierPoints = computed(() => (selectedRaceOptions.value ? selectedRaceOptions.value.reduce((p, v) => p + (v?.modifier ?? 0), 0) : 0) + training.value.reduce((p, v) => p + v[1].reduce((_p, _v) => _p + (_v?.modifier ?? 0), 0), 0));
const modifierSpent = computed(() => Object.values(data.value.progress.modifiers ?? {}).reduce((p, v) => p + v, 0));
const abilityPoints = computed(() => training.value.flatMap(e => e[1].filter(_e => _e.ability !== undefined)).reduce((p, v) => p + v.ability!, 0));
const abilityPoints = computed(() => (selectedRaceOptions.value ? selectedRaceOptions.value.reduce((p, v) => p + (v?.abilities ?? 0), 0) : 0) + training.value.flatMap(e => e[1].filter(_e => _e.ability !== undefined)).reduce((p, v) => p + v.ability!, 0));
const abilityMax = computed(() => Object.entries(characterConfig.abilities).reduce((p, v) => { p[v[0] as Ability] = abilitySpecialFeatures("max", data.value.progress.training.curiosity, Math.floor(maxTraining.value[v[1].max[0]] / 3) + Math.floor(maxTraining.value[v[1].max[1]] / 3)); return p; }, {} as Record<Ability, number>));
const abilitySpent = computed(() => Object.values(data.value.progress.abilities ?? {}).reduce((p, v) => p + v[0], 0));
@@ -119,9 +119,9 @@ function selectRaceOption(level: Level, choice: number)
return;
}
if(character.progress.race.progress.some(e => e[0] === level))
if(character.progress.race.progress.some(e => e[0] == level))
{
character.progress.race.progress.splice(character.progress.race.progress.findIndex(e => e[0] === level), 1, [level, choice]);
character.progress.race.progress.splice(character.progress.race.progress.findIndex(e => e[0] == level), 1, [level, choice]);
}
else
{
@@ -143,9 +143,9 @@ function switchTrainingOption(stat: MainStat, level: TrainingLevel, choice: numb
return;
}
if(character.progress.training[stat].some(e => e[0] === level))
if(character.progress.training[stat].some(e => e[0] == level))
{
if(character.progress.training[stat].some(e => e[0] === level && e[1] === choice))
if(character.progress.training[stat].some(e => e[0] == level && e[1] === choice))
{
for(let i = 15; i >= level; i --) //Invalidate higher levels
{
@@ -155,7 +155,7 @@ function switchTrainingOption(stat: MainStat, level: TrainingLevel, choice: numb
}
}
else
character.progress.training[stat].splice(character.progress.training[stat].findIndex(e => e[0] === level), 1, [level, choice]);
character.progress.training[stat].splice(character.progress.training[stat].findIndex(e => e[0] == level), 1, [level, choice]);
}
else if(trainingPoints.value && trainingPoints.value > 0)
{