fix: make discipline perk numerical bonuses functional via structured BonusSpec
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m23s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m23s
- Add PerkBonus type and optional bonus field to DisciplinePerk - Populate bonus data on 39 perks across base, elemental, elemental-regen, elemental-regen-advanced, and invoker discipline files - Rewrite computeDisciplineEffects() to apply once/infinite/capped perk bonuses through known stat keys (maxManaBonus, baseDamageBonus, regen_*, elementCap_*) - Add per-element cap bonus routing in effects.ts computeAllEffects() - Remove dead enchantPower bonus (no consumer in effects pipeline)
This commit is contained in:
@@ -23,6 +23,7 @@ export const baseDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 100,
|
||||
value: 0,
|
||||
description: '+50 Max Mana',
|
||||
bonus: { stat: 'maxManaBonus', amount: 50 },
|
||||
},
|
||||
{
|
||||
id: 'raw-mastery-2',
|
||||
@@ -30,6 +31,7 @@ export const baseDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 500,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +25 Max Mana',
|
||||
bonus: { stat: 'maxManaBonus', amount: 25 },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -26,6 +26,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 150,
|
||||
value: 0,
|
||||
description: '+0.35 Metal Regen/tick',
|
||||
bonus: { stat: 'regen_metal', amount: 0.35 },
|
||||
},
|
||||
{
|
||||
id: 'regen-metal-inf',
|
||||
@@ -33,6 +34,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 400,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.15 Metal Regen/tick',
|
||||
bonus: { stat: 'regen_metal', amount: 0.15 },
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -55,6 +57,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 150,
|
||||
value: 0,
|
||||
description: '+0.35 Sand Regen/tick',
|
||||
bonus: { stat: 'regen_sand', amount: 0.35 },
|
||||
},
|
||||
{
|
||||
id: 'regen-sand-inf',
|
||||
@@ -62,6 +65,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 400,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.15 Sand Regen/tick',
|
||||
bonus: { stat: 'regen_sand', amount: 0.15 },
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -84,6 +88,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 150,
|
||||
value: 0,
|
||||
description: '+0.35 Lightning Regen/tick',
|
||||
bonus: { stat: 'regen_lightning', amount: 0.35 },
|
||||
},
|
||||
{
|
||||
id: 'regen-lightning-inf',
|
||||
@@ -91,6 +96,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 400,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.15 Lightning Regen/tick',
|
||||
bonus: { stat: 'regen_lightning', amount: 0.15 },
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -114,6 +120,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 200,
|
||||
value: 0,
|
||||
description: '+0.25 Crystal Regen/tick',
|
||||
bonus: { stat: 'regen_crystal', amount: 0.25 },
|
||||
},
|
||||
{
|
||||
id: 'regen-crystal-inf',
|
||||
@@ -121,6 +128,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 500,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.1 Crystal Regen/tick',
|
||||
bonus: { stat: 'regen_crystal', amount: 0.1 },
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -143,6 +151,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 200,
|
||||
value: 0,
|
||||
description: '+0.25 Stellar Regen/tick',
|
||||
bonus: { stat: 'regen_stellar', amount: 0.25 },
|
||||
},
|
||||
{
|
||||
id: 'regen-stellar-inf',
|
||||
@@ -150,6 +159,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 500,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.1 Stellar Regen/tick',
|
||||
bonus: { stat: 'regen_stellar', amount: 0.1 },
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -172,6 +182,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 200,
|
||||
value: 0,
|
||||
description: '+0.25 Void Regen/tick',
|
||||
bonus: { stat: 'regen_void', amount: 0.25 },
|
||||
},
|
||||
{
|
||||
id: 'regen-void-inf',
|
||||
@@ -179,6 +190,7 @@ export const elementalRegenAdvancedDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 500,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.1 Void Regen/tick',
|
||||
bonus: { stat: 'regen_void', amount: 0.1 },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -31,6 +31,7 @@ function makeBaseRegen(id: string, name: string, manaType: string, cost: number)
|
||||
threshold: 100,
|
||||
value: 0,
|
||||
description: `+${BASE_REGEN} ${name} Regen/tick`,
|
||||
bonus: { stat: `regen_${shortId}`, amount: BASE_REGEN },
|
||||
},
|
||||
{
|
||||
id: `${id}-inf`,
|
||||
@@ -38,6 +39,7 @@ function makeBaseRegen(id: string, name: string, manaType: string, cost: number)
|
||||
threshold: 300,
|
||||
value: 100,
|
||||
description: `Every 100 XP: +0.25 ${name} Regen/tick`,
|
||||
bonus: { stat: `regen_${shortId}`, amount: 0.25 },
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -73,6 +75,7 @@ export const elementalRegenDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 100,
|
||||
value: 0,
|
||||
description: '+0.4 Transference Regen/tick',
|
||||
bonus: { stat: 'regen_transference', amount: 0.4 },
|
||||
},
|
||||
{
|
||||
id: 'regen-transference-inf',
|
||||
@@ -80,6 +83,7 @@ export const elementalRegenDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 300,
|
||||
value: 100,
|
||||
description: 'Every 100 XP: +0.2 Transference Regen/tick',
|
||||
bonus: { stat: 'regen_transference', amount: 0.2 },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -45,6 +45,7 @@ function makeElementalAttunement(cfg: ElementalAttunementConfig): DisciplineDefi
|
||||
threshold: 200,
|
||||
value: 0,
|
||||
description: `+10 ${cfg.name} Capacity`,
|
||||
bonus: { stat: `elementCap_${cfg.manaType}`, amount: 10 },
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -23,6 +23,7 @@ export const invokerDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 200,
|
||||
value: 0,
|
||||
description: '+10 Base Damage',
|
||||
bonus: { stat: 'baseDamageBonus', amount: 10 },
|
||||
},
|
||||
{
|
||||
id: 'spell-2',
|
||||
@@ -30,6 +31,7 @@ export const invokerDisciplines: DisciplineDefinition[] = [
|
||||
threshold: 400,
|
||||
value: 30,
|
||||
description: 'Every 300 XP: +5 Base Damage',
|
||||
bonus: { stat: 'baseDamageBonus', amount: 5 },
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user