罗德岛通讯与技术部

股市

MARKET ECONOMY

现在的养成系统是纯「对话驱动」的关系养成:信任三维(trust_manager)+ 200+

状态:🟡 规划 · 最后核对 2026-08-18

以「资金」为底座,用罗德岛交易所(股市)慢慢铺开养成系统。 2026-08-17 · 🟡 规划(讨论收敛,未实施)

定位

现在的养成系统是纯「对话驱动」的关系养成:信任三维(trust_manager)+ 200+ 干员个体化信赖档案(trust_profiles)+ 躯体状态(somatic_state)+ 人格演化 (operator/evolution)+ 关系图谱(relation/graph)。没有任何资源 / 货币 / 经济。

本设计给这条轴旁边加一条「资源经济」轴:股市是心脏,资金是血,最终走 资金 → 礼物 → 信赖,反哺现有的信任养成。经济是「活的」,因为驱动股价的世界事件 (narrative/engine + world/events)本来就活着。

已定决策

  • 资金:每日固定发放,懒结算(读取时按「距上次领取天数」补发)
  • 桥梁:资金 → 礼物 → 信赖(v1 通用礼物,不做干员偏好)
  • 股价:由「动态」驱动(世界事件 → 公司新闻 → 股价),不是纯随机
  • 单机:价格 feed 全局一致(世界是同一个),钱包/持仓私有;玩家互相交易留作未来
  • 标的:24 家势力公司 + 源石基准指数;罗德岛本身不上(它就是这个交易所)
  • 货币:龙门币(LMD)
  • 入口:第 4 个底部 tab「交易所」(消息 / 联系人 / 动态 / 交易所),与动态平行
  • 送礼:入口在聊天页(聊着聊着可以送),不在交易所页;送礼本身后做

数据契约(全局 vs 私有)——最重要的边界

数据 位置 键控
公司清单、价格 feed、源石指数 data/ 根(全局 无 username
钱包、持仓、交易流水 data/users/{u}/ 按 username
礼物库存、送礼记录 data/users/{u}/ 按 username

⚠️ 价格 feed 是全项目少数几个跨用户共享的可变状态(同 data/moments.json)。 workers=1 下模块级全局没问题,但要持久化(重启不归零),且写它的地方一律不用 per-user 键——正好和「钱包/持仓」反着来,两条边界别混。

公司清单(24 家 + 指数)

势力 公司 板块 事件钩子(股价被什么撬动)
莱茵生命 莱茵生命药业 制药 伦理丑闻 / 实验事故砸盘,大盘稳定
莱茵生命 莱茵生命生物 生物科技 临床实验驱动,高波动
莱茵生命 莱茵生命医疗 医疗器械 平稳成长
喀兰贸易·谢拉格 喀兰贸易 贸易 谢拉格政局
喀兰贸易·谢拉格 谢拉格矿业 矿业 源石/稀有矿,政策敏感
喀兰贸易·谢拉格 谢拉格雪境旅游 旅游 季节敏感
黑钢国际 黑钢国际 安保/PMC 战争=利好、和平=利空
黑钢国际 黑钢训练基地 军备/培训 冲突热度
叙拉古 叙拉古实业 综合实业 家族门面
叙拉古 叙拉古酒业 酒业 叙拉古秩序
叙拉古 叙拉古家族联合 家族资本/灰产 火并/地盘/联姻,波动极大
龙门 龙门商行 综合贸易 龙门繁荣度
龙门 龙门金融 银行/保险 金融政策
龙门 龙门基建 城建/地产 新城区开发
雷姆必拓 雷姆必拓矿业 矿业 源石市场
雷姆必拓 雷姆必拓重工 工程机械 基建投资
乌萨斯 乌萨斯军工 军工 战争驱动
乌萨斯 乌萨斯钢铁 钢铁/重工 军备景气
卡西米尔 卡西米尔骑士竞技 竞技娱乐 赛事/假赛/转会,波动大
卡西米尔 卡西米尔商业银行 金融 经济景气
维多利亚 维多利亚工业 制造 工业景气
维多利亚 维多利亚航运 远洋贸易 航路/海难
伊比利亚 伊比利亚航运 船运 深海/航路事件
伊比利亚 伊比利亚海产 渔业 海洋生态
源石指数 基准 24 家市值加权晴雨表,不交易

价格模型

  • 基础漂移:均值回归随机游走。每家公司有自己的波动率——高波动(叙拉古家族联合、 莱茵生命生物)、低波动(莱茵生命药业、卡西米尔商业银行)。
  • 事件冲击:公司新闻按 faction + 方向 + 强度施加一次性涨跌,带板块联动(spillover)。
  • 源石指数 = 24 家市值加权,当「大盘」挂在动态流开头。

公司新闻事件

  • 新事件类型,模板驱动(不碰 LLM,避免烧每日预算),挂 faction + 方向 + 强度 + 联动。
  • 生成时同时:① 进简报「泰拉新闻」栏 + 股市页(一条可读文案)② 施加股价冲击。
  • ⚠️ 不进社交动态流(广播/干员动态 tab 保持纯舰内)。公司新闻是「舰外」,见下「频道分离」。

模板解剖

{
  id: "rhine_bio_clinical_fail",   # 唯一 id,方便去重/配权重
  faction: "rhine",                # 挂哪个势力
  direction: -1,                   # +1 利好 / -1 利空
  strength: 0.11,                  # 基准幅度(涨跌幅)
  target: "rhine_bio",             # 主目标公司
  spillover: [("rhine_pharma", -0.03)],  # 板块联动
  text: "{target}二期临床出现疑似副作用,试验无限期暂停。"   # 进动态流的文案
}

文案里的 {target} / {pct} / {name} / {place}槽位,运行时填。 同一模板今天砸「莱茵生命生物」、明天砸「莱茵生命药业」,文案自动换名字—— 一份模板吃好几家公司。

模板库覆盖表(10 势力 + 指数)

势力 利好模板主题 利空模板主题 拟条数
莱茵生命 新药获批 / 突破研究 / 大额订单 伦理丑闻 / 临床失败 / 实验事故 3+3
谢拉格 新矿脉 / 政局稳定 / 旅游旺季 政变动荡 / 矿难 / 极寒雪灾 2+2
黑钢国际 冲突升级 / 新合约 / 军备订单 和平协议 / 合约流失 / 人道丑闻 2+2
叙拉古 家族联姻 / 地盘扩张 / 酒业出口 火并 / 内斗 / 查封 3+3
龙门 新城区开发 / 金融放宽 / 贸易枢纽 经济衰退 / 政策收紧 / 基建事故 2+2
雷姆必拓 矿脉发现 / 基建大单 / 源石涨价 矿难 / 源石跌价 / 劳资纠纷 2+2
乌萨斯 军备扩张 / 战争 / 军工订单 和平 / 制裁 / 钢铁过剩 2+2
卡西米尔 赛事爆冷 / 转播权大单 / 明星选手 假赛 / 选手事故 / 限薪改革 3+3
维多利亚 远洋航线 / 殖民扩张 / 工业订单 海难 / 航线封锁 / 殖民地动荡 2+2
伊比利亚 航路安全 / 渔获丰收 / 深海开发 海嗣事件 / 航路关闭 / 生态灾害 2+2
源石指数 源石涨价 / 市场乐观 源石跌价 / 大范围恐慌 2+2

合计约 50 条模板,每条吃 1~3 家公司(靠 {target} 复用)。三大「波动王」—— 莱茵生命、叙拉古、卡西米尔——特意给到 3+3,因为它们是「涨跌有故事」的那几只。

事件样例(动态文案 → 股价反应)

  • 莱茵生命 · 利空:{target}二期临床出现疑似副作用,试验无限期暂停 → 生物 −11%,药业 −3%
  • 莱茵生命 · 利好:{target}新药获哥伦比亚药监局批准上市,首日订单超预期 → 药业 +13%,医疗 +4%
  • 黑钢国际 · 利好:边境冲突升级,多国求购安保服务,黑钢国际连签七份合约 → 国际 +7%,训练基地 +5%,乌萨斯军工 +4%
  • 叙拉古 · 利空:两大家族深夜火并,商业区戒严,家族联合旗下多家产业停摆 → 家族联合 −15%,酒业 −6%
  • 卡西米尔 · 利好:骑士竞技总决赛黑马夺冠,投注盘与转播权双双刷新纪录 → 骑士竞技 +9%
  • 卡西米尔 · 利空:骑士竞技被曝假赛丑闻,联盟启动反舞弊调查 → 骑士竞技 −12%
  • 谢拉格 · 利好:谢拉格探明新源石矿脉,储量预估上调四成 → 矿业 +9%,喀兰贸易 +4%
  • 伊比利亚 · 利空:近海出现异常洋流,多条航路临时关闭,船期大面积延误 → 航运 −8%,海产 −4%
  • 源石指数 · 大盘:源石国际价格走高,源石指数创月内新高 → 全板块 +2~4%

(「黑钢=战争利好」「叙拉古=火并砸盘」这类反转感,是模板主题刻意埋的—— 和平年代它们阴跌,冲突来了才涨。)

融入动态系统:频道分离(不突兀的关键)

现有三个动态 tab(事务 / 干员动态 / 广播)全是舰上生活。公司新闻讲的是 泰拉大陆的公司,是另一个世界——硬塞进广播 tab 就会变成「食堂特供」和 「叙拉古火并」排排坐,那才是突兀。所以它不住社交动态流,住进两个家:

现状 读什么
简报「泰拉新闻」栏 gazette 文档写了、从没建 全局新闻源,每天聚合 1–2 条
股市页 新页面 全局价格 + 当日新闻(「为什么涨跌」)

声音分离:舰内广播挂 【罗德岛广播】【食堂通知】,公司新闻统一挂 【泰拉通讯社】——中立通讯社口吻,一眼看出「这是外面的世界」。

节奏:财经新闻要稀,每日 1–2 条(不是每小时)。market 引擎每日一次 tick(排在简报 08:00 之前):① 24 家价格各走一步均值回归漂移 ② 抽 1–2 条 公司新闻(按势力加权,波动王概率略高)施加冲击、写进全局新闻源。

数据契约(最容易被写坏的地方):

data/market_state.json       全局:价格 + 指数 + 当日新闻(像 weather_state.json 全局共享)
data/users/{u}/market/       私有:钱包 + 持仓 + 交易流水(M2)

⚠️ 三个坑,全是「第二份名单」家族的老毛病:

  • 全局 tick 不走 _for_all_users——那函数按用户复制 + 30s 错峰,是给 「每人的世界各自生成」用的。价格 feed 是同一个世界,必须单次全局 job, 否则 24 家价格在 多个用户眼里各不一样。
  • 简报 per-user,但泰拉新闻是全局——gazette 现在只读 per-user 的事件账本, 加泰拉新闻就得让它也读全局新闻源,把「全局的一条」拼进「每人各自的一期」。
  • 股市 API 端点要进 main.pyprotected_paths

资金与交易

  • 每日固定发放(懒结算)
  • 现价成交、T+0、整股、无手续费、无涨跌停(v1)

礼物桥

  • 通用礼物 3~5 种(价位 + 信赖增益不同)
  • 买(花 LMD)→ 送(trust_manager 增益)
  • 单独「每日礼物信赖预算」,不绕过信任的 24h 上限 / 15min 冷却
  • 入口在聊天页,不在交易所页——送礼是「对某个干员的动作」,聊着聊着送才 自然(2026-08-17 定)。送礼本身后做,先跑 M1/M2。

资金出口的完整设计(送礼之外的胡萝卜 / 下水道:证书、主题、头条、皮肤、语音) 见 stock-market-sinks.md

前端入口(交易所 tab)

  • 第 4 个底部 tab「交易所」(消息 / 联系人 / 动态 / 交易所),与动态平行: 动态 = 舰内社会面,交易所 = 泰拉经济面。
  • 内部子 tab(照消息页的 messagesTabs 模式):行情(24 家 + 指数 + 当日新闻)、 持仓(钱包 + 持股 + 买卖)。钱包余额常驻顶栏(券商 App 那样,哪都能看到钱)。
  • 送礼不在交易所页,入口在聊天页(见「礼物桥」)。
  • UI 沿用既有风格:莱茵生命材质(视觉重设计样板)、无 emoji 图标(内联 SVG)、 无 AI 味。⚠️ 别在交易所页用 emoji 当图标——见 CLAUDE.md「界面里不要用 emoji」。
  • 落地要改的名单:TOP_LEVEL_VIEWS + tabMap + index.html 第四个 button + data-icon 新图标(别和现有 20 个重样)+ protected_paths + bump_frontend_cache.py

v1 推进顺序(每步可回退)

里程碑 内容 done 定义
M1 经济心脏 公司清单 + 价格模拟 + 公司新闻 24 家价格在全局 feed 动起来,一条丑闻能砸对应股价,指数跟着算
M2 资金 + 交易 钱包 + 每日发放 + 买卖 能领钱、能买卖、余额持仓对得上
M3 礼物桥 通用礼物 → 信赖(聊天页入口 聊着聊着能送礼物、信赖涨,超预算当天不涨
M4 前端 交易所页 + 资金 手机上看盘、买卖整条链路走通

关键风险点:

  • ⚠️ 新 API 端点要进 main.pyprotected_paths(「第二份名单」坑)
  • ⚠️ 每日发放用懒结算,不用 scheduler(避开 wait=False 停机那类坑)
  • ⚠️ 接 trust_manager 时别漏 per-user 键({u}:{op}
  • ⚠️ 前端改完跑 bump_frontend_cache.py;UI 直接上「莱茵生命」材质(视觉重设计样板)

未决 / 默认值

  • 礼物价位:递减(越贵单位信赖越便宜,鼓励攒钱买大件)——2026-08-17 已定。 单位信赖成本 120/110/100/90(野花→摆件)。
  • 股价基准:加年化 2.5% 慢牛 drift(锚点回归目标上移,指数有慢牛时间感)—— 2026-08-17 已定。不连真实行情:24 家是虚构公司无 ticker,连 API 会引入外部依赖、 破坏「世界事件」虚构、节奏也不匹配(一天 4 档 vs 秒级 tick)。
  • 发放数额 200:保持,等 M1 跑出真实波动 + 用户实际买卖数据再反推(先跑价格, 再定每天发多少才不通胀不通缩)。
  • 交易规则:整股、无手续费、无涨跌停(可改)