gamer147
8199a95356
feat(battle-xp): wire story first-clear /finish through IBattleXpService
...
- StoryConfig.ClassXpPerClear retired; equivalent knob moves to
BattleXpConfig.StoryXpPerClear (falls back to XpPerWin when null).
- StoryService.FinishAsync now grants class XP via IBattleXpService with
BattleXpMode.Story on the firstClear && isPlayShape branch. Persists
post-grant Level/Exp to Viewer.Classes.
- Wire fields (get_class_experience, class_level) stringified as before.
- StoryConfig kept as an empty [ConfigSection] for future story-specific
knobs. StoryServiceTests updated to reflect the new default path
(XpPerWin=100 crosses classexp.csv L1=50 → L2 with 50 carry).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-07-04 09:06:47 -04:00
..
2026-07-04 09:06:47 -04:00
2026-06-03 07:50:49 -04:00
2026-05-23 16:25:49 -04:00
2026-06-03 07:50:49 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 14:18:01 -04:00
2026-05-26 21:57:47 -04:00
2026-06-03 07:50:49 -04:00
2026-06-03 07:50:49 -04:00
2026-05-26 22:04:10 -04:00
2026-06-03 20:52:41 -04:00
2026-05-26 09:16:21 -04:00
2026-05-26 09:16:21 -04:00
2026-06-03 07:50:49 -04:00
2026-05-26 09:16:21 -04:00
2026-06-03 07:50:49 -04:00
2026-05-31 10:16:53 -04:00
2025-05-18 02:27:17 -04:00
2026-05-24 17:07:05 -04:00
2026-05-23 14:18:01 -04:00
2026-05-23 14:18:01 -04:00
2026-06-13 12:49:57 -04:00
2026-06-13 12:49:57 -04:00
2026-06-13 12:49:57 -04:00
2026-05-23 14:18:18 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 14:18:01 -04:00
2026-05-23 14:18:01 -04:00
2026-05-23 16:25:49 -04:00
2026-05-24 21:13:15 -04:00
2026-06-08 18:51:12 -04:00
2026-06-13 12:49:57 -04:00
2026-05-31 01:22:08 -04:00
2026-05-27 22:41:02 -04:00
2026-05-23 14:18:01 -04:00
2026-05-27 22:55:09 -04:00
2026-06-03 07:50:49 -04:00
2026-05-27 22:55:09 -04:00
2026-06-03 07:50:49 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 16:25:49 -04:00
2026-06-03 07:50:49 -04:00
2026-05-23 14:18:01 -04:00
2026-06-09 16:26:48 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 16:25:49 -04:00
2026-05-28 00:56:20 -04:00
2025-05-18 02:27:17 -04:00
2026-05-24 02:03:13 -04:00
2026-06-09 08:48:16 -04:00
2026-05-30 21:40:50 -04:00
2026-06-27 19:35:08 -04:00
2026-05-30 21:40:50 -04:00
2026-05-30 21:40:50 -04:00
2026-05-24 02:03:13 -04:00
2026-05-23 19:57:34 -04:00
2026-05-26 16:44:54 -04:00
2026-05-23 16:25:49 -04:00
2026-05-25 12:03:47 -04:00
2026-05-26 16:44:54 -04:00
2026-06-03 07:50:49 -04:00
2026-05-23 14:18:01 -04:00
2026-05-23 16:25:49 -04:00
2026-05-23 16:25:49 -04:00
2026-06-09 18:42:10 -04:00
2026-06-09 18:42:10 -04:00
2026-05-24 09:27:10 -04:00
2026-05-23 14:18:01 -04:00
2026-05-25 12:03:47 -04:00
2026-05-23 14:18:01 -04:00
2026-05-27 22:09:45 -04:00
2026-06-03 07:50:49 -04:00
2026-05-27 22:09:45 -04:00
2026-05-23 14:18:01 -04:00
2026-05-23 19:57:34 -04:00
2026-05-23 16:25:49 -04:00
2026-05-27 23:23:07 -04:00
2026-05-31 01:22:08 -04:00
2026-06-09 09:53:10 -04:00
2026-05-23 16:25:49 -04:00
2026-06-27 20:06:46 -04:00
2026-05-27 10:08:11 -04:00
2026-06-09 14:19:00 -04:00
2026-06-13 12:16:22 -04:00
2026-05-31 10:16:53 -04:00
2026-06-10 07:32:05 -04:00
2026-05-26 22:07:05 -04:00
2026-05-26 22:07:05 -04:00
2026-05-26 09:16:21 -04:00
2026-06-09 17:24:32 -04:00
2026-05-27 23:23:07 -04:00
2026-05-27 10:08:11 -04:00
2026-06-08 21:34:20 -04:00
2026-06-09 21:40:08 -04:00
2026-06-09 21:40:08 -04:00
2026-05-28 22:54:46 -04:00
2026-05-28 22:54:46 -04:00
2026-06-13 11:25:40 -04:00
2026-05-27 22:55:09 -04:00
2026-05-27 10:08:11 -04:00
2024-09-12 00:35:31 -04:00
2026-05-24 02:03:13 -04:00
2026-06-27 20:06:46 -04:00
2026-06-09 21:40:08 -04:00
2026-06-08 20:44:52 -04:00
2026-05-25 12:03:47 -04:00
2026-06-09 18:42:10 -04:00
2026-05-27 23:23:07 -04:00