From 0222501162d18447aa162e9c53e000bc42ccbbd9 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 22:55:01 +0800 Subject: feat(occupation): P15 补齐货郎/书生各 2 条每日任务模板 + 既有事件通道信号桥(Kernel 纯函数 TDD) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 仅新增合法值,未知模板仍拒绝。 --- src/LivingVillage.Kernel/WorldSave.fs | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/LivingVillage.Kernel/WorldSave.fs') 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 = -- cgit v1.2.3