summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Kernel/WorldSave.fs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 22:55:01 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 22:55:01 +0800
commit0222501162d18447aa162e9c53e000bc42ccbbd9 (patch)
treed3f1c8f6bf7c0e88158664b188061c0b7fd9f74c /src/LivingVillage.Kernel/WorldSave.fs
parent34c7ebc9ed8b6295ec109c177f75ba0803cc04f2 (diff)
downloadliving-village-0222501162d18447aa162e9c53e000bc42ccbbd9.tar.gz
feat(occupation): P15 补齐货郎/书生各 2 条每日任务模板 + 既有事件通道信号桥(Kernel 纯函数 TDD)
- TaskTemplateId 扩出 BuyGoods(收货)/Resell(转卖)/ObserveNotes(观察记事)/ReasonDebate(论理), taskPoolOf 货郎=[收货,转卖]、书生=[观察记事,论理],四职业池均非空。 - TaskSignal 增 Purchased(玩家买入)/Observed(观察),satisfiesCompletion 给出四模板完成判定; 新增 occupationSeedOf/refreshToday(跨日才重生成,同日含 Done/Failed 终态保留)。 - signalOfInteraction/advanceTask:仅 playerId 发起的 DialogueEvent/TradeEvent 产生信号, NPC 互动不派任务;Offered 须先 acceptTask,终态不可复活。WorldSave 模板 token 双向同步。 - 测试 83 全绿(新增 6:池非空、货郎书生逐日池内确定、模板中文名、完成信号正负、 事件桥含玩家买/卖与 NPC 忽略、既有 DialogueEvent→accept→Done 全链路、refreshToday 逐日)。 - 不动 Sim.step 数值路径;旧档 v3 模板 token 仅新增合法值,未知模板仍拒绝。
Diffstat (limited to 'src/LivingVillage.Kernel/WorldSave.fs')
-rw-r--r--src/LivingVillage.Kernel/WorldSave.fs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/LivingVillage.Kernel/WorldSave.fs b/src/LivingVillage.Kernel/WorldSave.fs
index 1ce1dcb..b327c6d 100644
--- a/src/LivingVillage.Kernel/WorldSave.fs
+++ b/src/LivingVillage.Kernel/WorldSave.fs
@@ -415,6 +415,10 @@ module WorldSave =
| Occupation.NightCatch -> add tokens "night-catch"
| Occupation.SellFish -> add tokens "sell-fish"
| Occupation.MarketInquiry -> add tokens "market-inquiry"
+ | Occupation.BuyGoods -> add tokens "buy-goods"
+ | Occupation.Resell -> add tokens "resell"
+ | Occupation.ObserveNotes -> add tokens "observe-notes"
+ | Occupation.ReasonDebate -> add tokens "reason-debate"
let private readTaskTemplateId (reader: TokenReader) label =
match reader.Take(label) with
@@ -424,6 +428,10 @@ module WorldSave =
| "night-catch" -> Occupation.NightCatch
| "sell-fish" -> Occupation.SellFish
| "market-inquiry" -> Occupation.MarketInquiry
+ | "buy-goods" -> Occupation.BuyGoods
+ | "resell" -> Occupation.Resell
+ | "observe-notes" -> Occupation.ObserveNotes
+ | "reason-debate" -> Occupation.ReasonDebate
| _ -> invalid (sprintf "invalid %s" label)
let private writeTaskState tokens state =