generated from nhcarrigan/template
feat: sync and patch all content stats on existing saves (#130)
## Summary - Sync New Content now **injects** missing entries AND **patches canonical fields** on all existing entries to match current defaults - Adventurers: stats (baseCost, combatPower, goldPerSecond, essencePerSecond, name, class, level) - Quests: duration, prerequisites, combat requirement, rewards - Bosses: HP, damage, rewards, prestige requirement, upgrade rewards - Zones: unlock conditions (boss/quest required) - Upgrades: multiplier, costs - Equipment: bonus, cost, set membership - Achievements: condition, reward - Crafting: multipliers recomputed from `craftedRecipeIds` so recipe balance changes apply retroactively Closes #126 ## Test plan - [ ] On an existing save, click Sync New Content and verify the notification reports patched counts for all content types - [ ] Verify that rebalanced adventurer/boss/upgrade stats are reflected in the UI after syncing - [ ] Verify that player-owned state (counts, unlock status, boss HP, quest status) is preserved after syncing - [ ] Verify crafting multipliers are correct after syncing if any recipes were previously crafted ✨ This issue was created with help from Hikari~ 🌸 Reviewed-on: #130 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #130.
This commit is contained in:
@@ -13,16 +13,24 @@ import { ConfirmationModal } from "../ui/confirmationModal.js";
|
||||
type ActiveModal = "force-unlocks" | "hard-reset" | "sync-new-content" | null;
|
||||
|
||||
interface SyncNewContentResult {
|
||||
achievementsAdded: number | undefined;
|
||||
adventurersAdded: number | undefined;
|
||||
bossesAdded: number | undefined;
|
||||
bossRewardsPatched: number | undefined;
|
||||
equipmentAdded: number | undefined;
|
||||
explorationAreasAdded: number | undefined;
|
||||
questRewardsPatched: number | undefined;
|
||||
questsAdded: number | undefined;
|
||||
upgradesAdded: number | undefined;
|
||||
zonesAdded: number | undefined;
|
||||
achievementsAdded: number | undefined;
|
||||
achievementsPatched: number | undefined;
|
||||
adventurersAdded: number | undefined;
|
||||
adventurerStatsPatched: number | undefined;
|
||||
bossesAdded: number | undefined;
|
||||
bossesPatched: number | undefined;
|
||||
bossRewardsPatched: number | undefined;
|
||||
craftingRecipesReapplied: number | undefined;
|
||||
equipmentAdded: number | undefined;
|
||||
equipmentPatched: number | undefined;
|
||||
explorationAreasAdded: number | undefined;
|
||||
questRewardsPatched: number | undefined;
|
||||
questsAdded: number | undefined;
|
||||
questsPatched: number | undefined;
|
||||
upgradesAdded: number | undefined;
|
||||
upgradesPatched: number | undefined;
|
||||
zonesAdded: number | undefined;
|
||||
zonesPatched: number | undefined;
|
||||
}
|
||||
|
||||
const safeNumber = (value: number | undefined): number => {
|
||||
@@ -43,9 +51,17 @@ const buildSyncNewContentMessage = (result: SyncNewContentResult): string => {
|
||||
[ safeNumber(result.bossRewardsPatched), "boss reward(s) patched" ],
|
||||
[ safeNumber(result.explorationAreasAdded), "exploration area(s)" ],
|
||||
[ safeNumber(result.adventurersAdded), "adventurer tier(s)" ],
|
||||
[ safeNumber(result.adventurerStatsPatched), "adventurer stat(s) patched" ],
|
||||
[ safeNumber(result.upgradesAdded), "upgrade(s)" ],
|
||||
[ safeNumber(result.equipmentAdded), "equipment item(s)" ],
|
||||
[ safeNumber(result.achievementsAdded), "achievement(s)" ],
|
||||
[ safeNumber(result.questsPatched), "quest stat(s) patched" ],
|
||||
[ safeNumber(result.bossesPatched), "boss stat(s) patched" ],
|
||||
[ safeNumber(result.zonesPatched), "zone stat(s) patched" ],
|
||||
[ safeNumber(result.upgradesPatched), "upgrade stat(s) patched" ],
|
||||
[ safeNumber(result.equipmentPatched), "equipment stat(s) patched" ],
|
||||
[ safeNumber(result.achievementsPatched), "achievement stat(s) patched" ],
|
||||
[ safeNumber(result.craftingRecipesReapplied), "crafting recipe(s) reapplied" ],
|
||||
];
|
||||
const parts = entries.
|
||||
filter(([ count ]) => {
|
||||
|
||||
Reference in New Issue
Block a user