客栈经济循环体系 v1.0
整理时间:2026-07-31 14:15 +08:00 整理人:Mavis(PM 视角) truth source 对齐:
docs/design/active/产品需求总览-v1.md(2026-07-01)src/data/economy/catalog.ts(2026-06-24 baseline-only)src/data/nightmarket/+src/utils/nightmarket/+src/components/nightmarket/(已建三层,夜市参考模板)AGENTS.md三层架构守则(2026-06-29)docs/design/active/主厅总览页精简方案-v1.md(白天经营总览)docs/design/active/后院玩法补全方案-v1.md(食材/后院供给侧)本文档作用:把"白天 / 晚上"两条经济线 + 横切消耗,收成一张可施工的产品视角骨架;不替代单模块设计文档,只提供 consolidated 视角 + 实施切片入口。
0. PM TL;DR(90 秒读完)
- 核心循环:单日 = 白天经营 + 晚上夜宵 + 夜间简报 → 睡眠;单周目 = 经营爬坡 + 终局收束;多周目 = 阅历折算 + 传承商店。
- 三币种已设计(铜钱 / 关中银票 / 江湖阅历),
data/economy/catalog.ts是 baseline-only——运行时循环未串,这是当前最大缺口。 - 白天经济 = 大堂(堂食/住房) + 后厨(出餐/宴席/酒水) + 经营玩法(竞标/拍卖/押注/任务)。
- 晚上经济 = 夜市(已建,参考模板) + 闯荡(已有,白天也开) + 住店(嵌在 InnManagementTab,待抽)。
- 横切消耗 = 食材流 / 员工体力 / 客诉口碑 / 时间节律(凌晨维护、巡防、打烊)。
- 当前阻塞点:
economy/没有"循环/loop"层,只有"基线/baseline"层 → 需要抽data/economy/loops/+utils/economy/loopEngine.ts串运行时。 - 本档不重复的内容:
货币体系与数值体系表格初步建表.md、主厅总览页精简方案-v1.md、后院玩法补全方案-v1.md——本档只做"循环骨架"层。
1. 设计原则(继承,不再讨论)
1.1 三层分离(AGENTS.md §1)
| 层 | 经济域目录 | 内容 |
| :-: | :--- | :--- |
| 数据 | src/data/economy/loops/ | 循环定义、节点表、收支关系(只 type + const) |
| 逻辑 | src/utils/economy/loopEngine.ts | 结算、调拨、压力线、阻尼 |
| UI | src/components/economy/ | 流向图、回放、调参面板 |
禁止:data/economy/loops/ 里写函数;utils/economy/loopEngine.ts 里写 ECONOMY_CURRENCIES 这种常量。
1.2 baseline-only 现状认知
data/economy/catalog.ts 自标 runtimeImpact: 'baseline-only',只供口径引用,不通运行时。本档要做的"循环"层是运行时层,与 baseline 是上下游关系:
baseline(catalog.ts) → loops ← runtime 调度(App.tsx / useInnSimulationController)
口径定义 流转规则 调用方
baseline 不会被替换,只会被 loops 引用。
1.3 单日节律(产品需求总览 §1.2)
[ 单日循环 ]
客栈开盘 → 伙计排班 → 接待客人 → 随机事件 → 客栈打烊 → 江湖简报
↑ ↓
└──── 夜间消耗(清洁/治安/休息)───┘
经济循环嵌在这条节律上,每一拍都有"流入 / 流出"事件。
2. 经济循环全景(三圈)
2.1 单日循环
flowchart LR
subgraph DAY["☀️ 白天 · 09:00-19:00"]
D1[大堂<br/>堂食 + 住房] -->|铜钱 +| Wallet
D2[后厨<br/>出餐 + 宴席] -->|铜钱 +| Wallet
D3[经营玩法<br/>竞标/拍卖/押注] -->|铜钱 ± 银票 ±| Wallet
end
subgraph NIGHT["🌙 晚上 · 19:00-01:00"]
N1[夜市摆摊] -->|铜钱 +| Wallet
N2[闯荡/野外] -->|素材 + 银票 ±| Wallet
N3[住店] -->|铜钱 +| Wallet
end
subgraph RESET["🌃 凌晨 · 01:00-09:00"]
R1[清洁维护] -->|员工体力 -| Mood
R2[巡防] -->|员工体力 -| Safety
R3[食材采购] -->|铜钱 -| Stock
R4[工资结算] -->|铜钱 -| Wallet
end
Wallet[铜钱包] --> Stock[食材库存]
Stock --> D2
Stock --> N1
Wallet --> D3
Wallet --> R3
Wallet --> R4
关键观察:
- 铜钱是主循环货币,贯穿全日;关中银票只在大额玩法(竞标/稀有)出现;阅历不进入单日,只在终局结算。
- 食材是从铜钱派生出的"二次资源",在白天消耗、夜宵消化库存。
- 凌晨不是空的,是消耗最集中的时段(工资、采购、维护)。
2.2 单周目循环(90-360 天)
Day 1-30 启航期:客流少,大堂为主,夜市尝鲜
Day 31-90 爬坡期:经营玩法解锁(竞标/拍卖),开始有出有进
Day 91-180 磨合期:宴席/江湖事密集,客诉事件增多,口碑双刃剑
Day 181-300 鼎盛期:擂台/比武,银票大进大出,口碑决定上限
Day 301-360 收束期:年终大事件 → 终局判定 → 阅历折算
每个阶段都有典型经济特征,数值上要分层(详见 §6 资源表)。
2.3 多周目循环
终局结算 → 阅历折算(边际递减) → 传承商店 → 下局开局加成
↓
永久 Buff
阅历不能反向买回铜钱当周目用(否则刷钱);只允许前置传承 + 后置返利两个方向(参考 ECONOMY_LEGACY_REDEMPTION_BANDS 三段递减)。
3. 白天经济(主收入)
3.1 大堂(堂食 + 住房登记)
| 项 | 类型 | 来源 | 消耗 | 备注 | | :-: | :-: | :--- | :--- | :--- | | 堂食点菜 | 收入(微-中) | 客单价 × 客流 | 食材 + 后厨排班 | 口碑正反馈,熟客加成 | | 客房登记 | 收入(中-大) | 房价 × 入住率 | 清洁 + 房契维护 | 入住即收 vs 退房才结(待决 §8.4) | | 寄存服务 | 收入(微) | 寄存费 | 库容 | 微薄,主要做钩子 |
关键代码锚点:InnManagementTab.tsx + MainHallPanel.tsx + PatronsPanel.tsx(客流/口碑)。
3.2 后厨(出餐 + 宴席 + 酒水)
| 项 | 类型 | 来源 | 消耗 | 备注 |
| :-: | :-: | :--- | :--- | :--- |
| 常规出餐 | 收入(小-正餐档) | 菜谱价 × 出餐量 | 食材 + 厨师体力 | 跟大堂强耦合 |
| 宴席 | 收入(宴席档) | 桌价 × 桌数 | 食材 × 3 + 全员体力 + 酒水 | 高客单、高消耗、高口碑 |
| 酒水零售 | 收入(便饭-正餐) | 酒价 × 杯/壶 | 酿造原料 + 库容 | 跟 BrewingBoard 联 |
| 外卖/外送 | 收入(正餐) | 订单价 | 食材 + 派送员工 | 当前没实现,预留口 |
关键代码锚点:KitchenTab.tsx + RecipeTab.tsx + BrewingBoard.tsx + BanquetPanel.tsx。
3.3 经营玩法(竞标/拍卖/押注/任务)
| 玩法 | 投入 | 收入 | 风险 | 备注 |
| :-: | :--- | :--- | :-: | :--- |
| 官府竞标 | 银票 | 道具/银两 | 中 | auction/,已建三层 |
| 拍卖会 | 铜钱 | 稀有道具 | 中 | 已有,关联联机 |
| 七侠骰坊 | 铜钱 | 铜钱(倍率) | 高 | arcade/,小游戏集群 |
| 武林擂台 | 银票 + 体力 | 名声 + 银票 | 高 | TournamentDuelScene |
| 商路 | 食材 + 铜钱 | 食材(异域) | 中 | TradeRoutePanel |
| 江湖事任务 | 时间 | 银票 + 羁绊 | 低-中 | JianghuAffairsTab |
关键代码锚点:components/auction/、components/arcade/、components/traderoute/、components/jianghu/JianghuAffairsTab.tsx。
经营玩法共通问题(见 §8.2):用铜钱还是银票?用体力还是时间? 这是经济循环的关键参数。
4. 晚上经济
4.1 夜市摆摊(已建,参考模板)
完整流程(参照 NightMarketPanel.tsx):
选摊位(dock/temple/street) → 选定价(fair/peak/gouge)
↓
选菜单(≤3 道) → 派伙计(单选) → 出摊结算
↓
铜钱 + 熟客好感 +
消耗:熟食库存(cookedFood) + 员工晚班体力 + 摊位维护费(轻)
收入:铜钱 + 顾客群好感(merchant/escort/scholar/constable/jianghu)
关键文件:
data/nightmarket/(摊位/定价配置)utils/nightmarket/nightMarketLogic.ts(结算)components/nightmarket/NightMarketPanel.tsx(UI)
经济地位:夜市是消库存 + 赚铜钱 + 攒口碑的三合一场景,不能拆。
4.2 闯荡 / 野外 / 采集
| 子玩法 | 投入 | 收入 | 备注 |
| :-: | :--- | :--- | :--- |
| 闯荡主程 | 体力 + 干粮 + 装备 | 素材 + 偶发银票 | AdventureTab.tsx |
| 野外采集 | 体力 | 药材/食材 | WildernessBoard.tsx |
| 采集 | 体力 | 食材 + 素材 | GatheringBoard.tsx |
| 悬赏/委托 | 时间 | 银票 + 羁绊 | JianghuAffairsTab 子分支 |
关键问题:闯荡是否消耗员工(派伙计外出)还是仅玩家?目前是玩家,待与 staffDepth 派工模型对齐。
4.3 住店
当前状态:嵌在 InnManagementTab.tsx,不是独立 Tab。
| 待决问题 | 候选方案 | 倾向 | | :-: | :--- | :---: | | 入住即收 vs 退房才结 | 退房才结(更经营感) | ✅ | | 房费定价 | 客房等级 × 入住天数 | ✅ | | 住客与堂食客分流 | 同客流模型(Patrons) | ✅ | | 晚间住店是"经营"还是"过夜事件" | 经营(纳入经济循环) | ✅ |
详见 §8.4。
5. 横切消耗(经济循环的"血液")
横切消耗不单独产生收入,但所有收入场景都吃。漏掉任何一个,经济都会爆。
5.1 食材流(从采购到消耗)
采购(SupplyMarket) → 库存(Stock) → 后厨出餐
↓ ↓
腐烂衰减 宴席(×3)
↓ ↓
报损 夜市摆摊(消库存)
核心约束:食材不过夜会腐(已经在 cleanliness 维度的 crisis 里有耦合,需要单独抽 foodSpoilage 引擎)。
5.2 员工体力流
日班(大堂 + 后厨) ──→ 疲劳 ──→ 晚班可选(夜市 + 闯荡派工) ──→ 夜间休息
↓ ↓ ↓
mood 衰减 mood 加速衰减 mood 恢复
↓
mood < 40 触发罢工 / 离岗
关键文件:utils/staffDepth.ts + data/staff/depthDefaults.ts + data/staff/depthRules.ts。
5.3 客诉与口碑流
服务质量(出餐 + 清洁 + 治安) → 口碑(reputation) ±
↓
口碑 < 100 → 客流减少(经济反噬)
口碑 < 10 → 黑名单 / 官差上门(终局风险)
↓
口碑 100+ → 贵客增加(经济正反馈)
关键文件:data/economy/catalog.ts 中 reputation 维度 + PatronsPanel.tsx。
5.4 时间节律
| 时段 | 主调 | 关键事件 | | :-: | :-: | :--- | | 05:00-09:00 | 维护 | 采购、工资结算、食材补货 | | 09:00-13:00 | 早场 | 堂食 + 后厨出餐 | | 13:00-17:00 | 下午场 | 经营玩法(竞标/拍卖/任务) + 宴席筹备 | | 17:00-19:00 | 晚场 | 晚堂食 + 客诉高峰 | | 19:00-23:00 | 夜市 | 摆摊 + 闯荡 | | 23:00-01:00 | 打烊 | 收摊 + 简报 + 巡防 | | 01:00-05:00 | 凌晨 | 清洁 + 维护 + 离线收益 |
关键文件:utils/gameTime.ts + data/year1Plan.ts。
6. 资源 / 币种 / 价格档对照
6.1 三币种分工(已设计,本档强化)
| 币种 | 作用域 | 典型场景 | 收支节奏 | | :-: | :-: | :--- | :--- | | 铜钱 | run | 堂食/宴席/经营玩法/夜市/采购/工资/罚款 | 高频(每时辰) | | 关中银票 | run | 官府竞标/稀有羁绊/大额赔付/武林重注 | 低频(每周目几次) | | 江湖阅历 | account | 终局折算/成就解锁/传承商店 | 终局一次 |
PM 建议(见 §8.2):
- 铜钱 ↔ 银票不能自由兑换(否则失去"大额"语义)
- 阅历不能反向刷(仅允许传承 + 永久 Buff,参考
ECONOMY_LEGACY_REDEMPTION_BANDS递减)
6.2 四经营维度(已有 baseline)
| 维度 | 当前值 | 阈值 | 触发事件 | | :-: | :-: | :-: | :--- | | 名声 | 50 | < 100 关注 / < 10 危机 | 客流 / 贵客 / 黑名单 | | 清洁 | 80 | < 40 关注 / < 30 危机 | 卫生危机 / 客诉 | | 治安 | 70 | < 40 关注 / < 30 危机 | 偷窃 / 斗殴 / 官差 | | 心情 | 80 | < 40 关注 / < 30 危机 | 罢工 / 离岗 / 羁绊断裂 |
注:reputation 当前 naturalDelta: { amount: 0 },没有自动衰减——这是设计空白,待补(口碑应该缓慢衰减,否则数值会"通胀")。
6.3 六价格档 × 五现金流档
价格档(ECONOMY_PRICE_TIERS)决定单笔订单的金额,现金流档(ECONOMY_CASHFLOW_BANDS)决定当日累计的吞吐量。
两者的关系:
- 一次宴席是"正餐档 × 1 笔" + "宴席档 × 多次"
- 当日净收入 = Σ(各档单笔 × 笔数) - 经营消耗
- 压力线(通胀)对标的是当日净收入而非单笔
6.4 食材 / 体力 / 时间的"非货币资源"
| 资源 | 单位 | 上限 | 衰减 | 关键场景 | | :-: | :-: | :-: | :-: | :--- | | 食材 | 单位/库存 | 库容 | 腐烂/消耗 | 后厨 / 宴席 / 夜市 | | 体力 | 0-100/员工 | 单员工 100 | 班次消耗 / 休息恢复 | 大堂 / 后厨 / 闯荡 | | 时间 | 时辰 | 每日 12 时辰 | 自然流逝 | 经营玩法 / 维护 |
这些"非货币资源"在循环里地位等同货币,必须有独立的循环引擎(不要塞进铜钱循环里)。
7. 模块清单
7.1 已有(代码已落,继续)
| 模块 | 数据层 | 逻辑层 | UI 层 | 状态 |
| :-: | :--- | :--- | :--- | :-: |
| 货币/数值基线 | ✅ data/economy/ | ❌(baseline-only) | — | 🟡 待接 runtime |
| 员工工资 | ✅ staffExpenseTables | ❌ | — | 🟡 待接 |
| 大堂 | 散 | 散 | MainHallPanel | ✅ |
| 后厨 | 散 | 散 | KitchenTab | ✅ |
| 经营玩法(竞标) | ✅ data/auction/ | ✅ auctionRules.ts | ✅ auction/ | ✅ |
| 经营玩法(拍卖) | ✅ data/auction/ | ✅ | ✅ | ✅ |
| 经营玩法(小游戏) | 散 | 散 | arcade/ | 🟡 |
| 闯荡 | ✅ data/adventure/ | 部分 | AdventureTab | 🟡 hotfix 中 |
| 夜市 | ✅ data/nightmarket/ | ✅ nightMarketLogic | ✅ NightMarketPanel | ✅ 模板 |
| 住店 | — | — | 嵌在 InnManagementTab | 📋 待抽 |
| 后院(食材供给) | 散 | 散 | BackyardTab | ✅ |
7.2 待建(本档目标)
| 模块 | 数据层 | 逻辑层 | UI 层 | 优先级 |
| :-: | :--- | :--- | :--- | :-: |
| 经济循环引擎 | 📋 data/economy/loops/ | 📋 utils/economy/loopEngine.ts | 📋 components/economy/FlowDiagram.tsx | P0 |
| 夜宵/晚班派工 | — | 📋 utils/staffNightShift.ts | — | P0 |
| 食材腐烂引擎 | — | 📋 utils/foodSpoilage.ts | — | P1 |
| 口碑衰减 | 📋 data/economy/loops/reputation.ts | 同上 | — | P1 |
| 住店独立 Tab | 📋 data/inn/stay/ | 📋 utils/inn/stayLogic.ts | 📋 components/inn/StayTab.tsx | P2 |
| 经营玩法币种统一 | — | 📋 utils/economy/playCost.ts | — | P1 |
7.3 baseline → runtime 迁移路径
Step 1 抽 data/economy/loops/(只放 type + const 节点表)
Step 2 抽 utils/economy/loopEngine.ts(只放结算 + 调拨 + 压力线)
Step 3 App.tsx / useInnSimulationController 接入 loopEngine
Step 4 各模块(夜市/拍卖/闯荡)用 loopEngine 替代各自的收支计算
Step 5 验证:经济基线表不动,只引用
约束:ECONOMY_CURRENCIES / OPERATING_DIMENSIONS / PRESSURE_LINES 三个数组不挪动位置,只新增 loops/ 子目录。
8. PM 待决 4 题(给建议,等 P1 拍板)
8.1 夜宵 / 住店定位
P1 原题:夜宵/住店是"独立收入线"还是"大堂经济的延伸"?
PM 建议:都是独立收入线,但与白天经济共享基础设施。
- 独立:有独立的 UI Tab / 派工模型 / 收支节奏
- 共享:客流模型(Patrons)、员工池(staffDepth)、食材库存(Stock)
- 数据层建议:夜宵走
data/nightmarket/(已建),住店新建data/inn/stay/ - UI 层建议:住店从
InnManagementTab拆出,与NightMarketPanel平级
8.2 经营玩法币种
P1 原题:经营玩法的"投入"用什么计价?
PM 建议:按风险分层,不统一。
- 低风险(七侠骰坊、商路):铜钱,小进小出
- 中风险(江湖事任务、悬赏):银票,中等额度
- 高风险(官府竞标、武林擂台、拍卖):银票 + 体力(双押)
- 统一抽象:用
utils/economy/playCost.ts暴露computePlayCost(play, scale)接口,内部按玩法表决定 - 不引入"精力/气运"虚拟币(避免第四币种导致体系膨胀)
8.3 员工晚班调度
P1 原题:员工晚班是"派工"还是"自愿"?
PM 建议:派工制 + 心情制,双约束。
- 派工制:玩家主动分配,但受
mood维度影响 - 心情制:心情 < 60 不接晚班,心情 < 40 直接罢工
- 体力制:派工需扣
体力,体力 < 30 拒绝出摊/闯荡 - 派工逻辑入口:统一在
utils/staffNightShift.ts,夜市 + 闯荡 + 住店都从这一个口子走 - UI:派工按钮在
InnStatusCard或StaffStatusCard(已存在,加挂载点)
8.4 住店独立 Tab
P1 原题:"住店"现在算完整经济场景还是只算"过夜事件"?
PM 建议:独立经济场景,Tab 化。
- 场景地位:与
NightMarketPanel平级,纳入晚上经济 - 数据层:新建
data/inn/stay/,三层分离 - 关键字段:房型 / 房价 / 入住率 / 续住率 / 住客评价
- 经济循环:退房才结(更经营感);按"房价 × 入住天数 × 续住加成"结算
- 抽离路径:从
InnManagementTab抽出"客房"分支,新建components/inn/StayTab.tsx
9. 实施切片(下一步动作)
按依赖顺序,4 个切片串完整个经济循环:
切片 1:经济循环引擎(经济域 P0)
- 目标:
data/economy/loops/+utils/economy/loopEngine.ts上线 - 入口:
App.tsx/useInnSimulationController.ts调loopEngine.tick() - 范围:
- 节点表:
DayLoop / NightLoop / DawnLoop - 调拨:大堂/后厨/夜市的收入统一过 loopEngine
- 压力线:接 baseline 的 4 条
- 节点表:
- 不做:不重构 baseline,不重写各模块收支
- 预估:中等切片,1 个 lane 跑通
切片 2:晚班派工模型(员工域 P0)
- 目标:
utils/staffNightShift.ts+ 接入夜市 / 住店 / 闯荡 - 入口:夜市的"派伙计"按钮改用
assignNightShift() - 范围:派工校验 + 心情/体力约束
- 不做:不改
staffDepth现有派工逻辑,只在晚班场景叠加
切片 3:横切消耗引擎(资源域 P1)
- 目标:
utils/foodSpoilage.ts+ 口碑衰减 - 入口:凌晨维护 tick
- 范围:
- 食材腐烂:每晚衰减
- 口碑衰减:
naturalDelta补 0 → -1/天 - 客诉流:接
PatronsPanel反馈
- 不做:不重做库存系统,只在现有库存上叠腐烂标记
切片 4:住店独立化(场景域 P2)
- 目标:
data/inn/stay/+components/inn/StayTab.tsx+ 从InnManagementTab抽出 - 入口:
ConsoleTabsBar.tsx加新 Tab - 范围:三档房型 + 入住/退房 + 住客评价
- 不做:不接羁绊,只走经济循环
10. 关联文档
| 主题 | 文档 |
| :--- | :--- |
| 产品总览 | 产品需求总览-v1.md |
| 货币基线 | 货币体系与数值体系表格初步建表.md |
| 白天总览 | 主厅总览页精简方案-v1.md |
| 后院供给 | 后院玩法补全方案-v1.md |
| 夜市(模板) | 夜市外摆设计稿 + data/nightmarket/ |
| 闯荡 | 闯荡玩法介绍.html + 闯荡玩法未完成功能清单-v1.md |
| 官府竞标 | government-warehouse-auction-v1.md + data/auction/ |
| 联机 | 联机P2P房间骨架-v1.md |
| 三层守则 | AGENTS.md §1 |
11. 文档状态
- v1.0 初稿(2026-07-31):Mavis 起草
- 未决项:§8 四个 PM 建议等 P1 拍板
- 后续版本:
- v1.1:切片 1-2 跑通后,补运行时截图 + 数值压力测试
- v1.2:切片 3 完成后,补横切消耗曲线
- v1.3:切片 4 完成后,补住店经济沙盘