心魄 · 后台

管理员登录(仅本机 / SSH 隧道可达)。

二次认证

输入验证器 App 里的 6 位动态码。

手机不在身边?用恢复码

启用二次认证

用验证器 App(Google Authenticator / 1Password / Authy 等)扫下面的二维码添加;然后输入 App 生成的 6 位码确认。

扫不了?「手动输入密钥」填下面这串,账户名任填,类型选「基于时间」:

恢复码(只显示这一次)

手机丢失时可以用恢复码代替验证码登录,每条只能用一次。抄下来或打印,放安全的地方。

心魄 后台

下载页

近 30 天活跃趋势(上报成长的设备数 / 日)

加载中…

情绪分布

共鸣最多的歌

歌曲歌手共鸣数

最近共鸣(匿名)

类型歌/句第N情绪

现在有多少人在用 (心跳时刻 ∪ 他自己的行为记录,取更近的那个 · 已剔除排除名单里的设备)

我们没有长连接,「在线」= 刚刚还在用。心跳一次冷启只发一发,所以光看心跳会把 「开着 App 玩了一整天、只是没重启」报成好几天没活跃 —— 这几格因此同时认 共鸣 / 听歌 / 每日首登 / 灵田掉落 / 道具台账这几条他自己的行为记录, 取最近的那一个。判据只有一处(服务端 growth.active_device_count), Telegram bot 的速查屏和日报读的是同一份。

近 48 小时作息(每小时有行为的设备数 · UTC+8)

加载中…

「有行为」= 听歌 / 共鸣 / 操作 / 登录任一条落了库。开着 app 不动不算, 所以这条曲线比日活低是正常的——它看的是作息,不是日活。

近 30 天日活(每天有多少台设备上报过)

加载中…

心魄成长

形态分布

段位分布

勋章点亮人数

心魄榜(后台完整名次 · 客户端只看得到自己第几)

名次设备邀请码发给谁端心魄等级心魄值听歌成长值累计收听勋章最近上报

里程碑名单(内测奖励依据 · 先到先得,序数落库不重算)

全部榜单(后台看得到完整名次)

跟客户端读的是同一个函数,⛔ 后台不另算一遍 —— 对不上的可能性从设计上就没有。
⚠️ 后台这一份 include_excluded=1:排除出榜的设备也列出来 (客户端看不到)。所以名次可能跟用户屏幕上的差一位,那不是 bug —— 排除名单里不只有测试机,榜单去重也会把真实用户的第二台设备放进来。

用户账号点行进详情

账号登录方式设备数介绍人介绍来心魄等级心魄值段位勋章共鸣分最后登录

同设备多号一台设备注册过 ≥2 个心魄号 · 只标记不处理(新注册已按「一台设备至多注册 1 个号」拦住)

设备机型注册过的号(心魄号 · 昵称 · 注册时间 · 来源)

设备点行进详情

设备名次心魄等级心魄值点亮勋章收听共鸣分端型号系统AppIP最后活跃成长上报账号榜单

崩溃与异常退出点行看堆栈

时刻端型号系统崩时 build类型原因阶段描述内存设备堆栈

记录来自系统自己保留的进程死亡信息(安卓 ApplicationExitInfo · iOS MetricKit),客户端启动时捞回来上报。安卓这条是回溯的——用户装上新版打开一次,装之前那些崩溃也会一并补报上来。保留 90 天,删号即抹除。

安卓 Java 崩溃的堆栈从 build 74 起才有。系统的 ApplicationExitInfo 对 Java 未捕获异常不给堆栈(只给 ANR 与原生崩溃), 所以 73 及以前那些 crash 记录「堆栈」列是空的——不是漏报,是系统不给。 74 起 App 自己在崩之前把堆栈落盘、下次启动贴回同一条记录。

「被系统清理」不是我们的崩溃。国产 ROM 的清理器(一键清理 / 上滑清理 / 锁屏清理 / 省电清理)会把 app 进程直接 force-stop,前台服务开着、通知栏挂着、 音乐正在响也照杀。系统把凶手写在「描述」那一列里,我们只是照实翻译出来。 进程一死,音乐和桌面歌词一起没 —— 用户报的「播放莫名停止」「微信里看不到桌面歌词」 多半都是它。回答用户时可以按设备查:点某一行的设备哈希只看这一台。

「本地存档出事」也不是崩溃,是用户的数据在丢:手机本地那份存档 (曲库/收藏/共鸣/激活状态全在里面)不见了、或者读不出来。用户那边看到的是「App 变回刚装的样子、 下载的音乐全没了、还要重新绑邀请码」。它比崩溃更要命 —— 崩溃重开一次就好, 档丢了是不可逆的。state_persist_blocked 是最重的一档:那台机器当时 存不了任何东西(这是有意的,宁可这一场不保存,也不拿默认态把用户的档盖掉)。 描述里的 ×N 是同一台机器发生过几次;state_missing 后面跟的 music / pos / bak / corrupt / tmp 是机器上还剩哪些痕迹 —— 有痕迹才说明是真丢了, 全空则是新装、根本不会报上来。

「Dart 错误」不是崩溃,是「没崩但坏了」:某一页白了 / 点了没反应,进程还活着。 它不计进上面的崩溃统计,也不在「异常退出(默认)」里——要看请在筛选里单独选。 同一个 bug 按堆栈签名合并成一条,描述里的 ×N 是发生次数。

站长信箱举报 / 投诉 / 建议 / 问题四类合一,点行看详情与截图

时间类型端版本设备内容图状态

客户端「反馈与投诉」入口提交(举报走同一条管线,多两列「指向谁」)。防滥用:单图 ≤3MB、每条 ≤3 图、每设备每日 ≤5 条、每设备累计图片 ≤100MB(都可用 HP_FEEDBACK_* 环境变量调)。已处理条目保留 365 天后连图自动清理;未处理的永不自动清。这条通道任何模式下都不许关(未保法 78 条投诉举报渠道)。

发信奖励落到用户收件箱,由用户点「领取」——货币进钱包,宝箱/碎片/装备/礼物进背包

发件台账

时间收件人分类标题附件状态经手操作

用户「一键清除」是软删,清掉的信在这张表里照样查得到(「他说没收到」要能查)。客户端每人只看得到最近 50 封、每页 10 条;服务端一封不删。未领取的可作废;已领取的撤不回来——心魄币走反向发放,宝箱/碎片走不了,道具(头像框/礼物/背景)走下面那一屏收回。

道具收回先查背包看清楚有什么,再收——不够扣整笔拒绝,⛔ 不做部分回收

道具键持有其中可赠予操作

收回会往 decor_item_ledger 写一行负数(admin_revoke:<经手>:<时刻>,后台「全服存量」按这个前缀认来源),并往 op_log 落一条 user_item_revoke(记谁收的 + 为什么)。事由不许留空。⚠️ 挂在交易所的件不在背包里,收不到。

人工找回密码内测期唯一的找回通道:邀请码 / 设备哈希前 6 位 / 大致注册时间,三选二

心魄号登录名昵称注册时间设备前 6 位邀请码操作

每一次人工改密码都会往 op_log 落一条 password_reset_manual(记「过了哪两项核验 + 谁操作的」,永不记密码本身),并踢掉该账号全部会话、清掉改名冷却。没有规矩的人工通道 = 谁都能来要号。

没设密码的号在用、但从没设过账号密码 —— 换手机就登不回来。点「设初始密码」给他一组临时凭证(不踢会话,他登录后必须先改密码)

心魄号昵称最后活跃版本设备数操作

用户名默认 = 心魄号(纯数字合法),密码默认随机 10 位;核验同样三选二。落一条 credentials_init_manual(永不记密码本身)。临时密码只显示一次,关掉弹窗就查不回来了。

成长值超限告警服务端只校验不重算;复核只改状态,永不删行

心魄号设备上报累计物理上限在册超出次数状态操作

⚠️ 内测成长数据本身不可比:build ≤73 那个「开播 1.5 秒即算听完」的测试闸污染过全体数据。复核时先排除这一项,别拿内测数字校准任何曲线。

个人签名按心魄号看当前签名与最近 20 次变更;违规可清空(留痕,用户那边显示「已被管理员清空」)

清空签名

清空后用户可以重新写;旧签名原文留在留痕里(signature_cleared,记操作人与原因)。⛔ 不可撤销(不会自动恢复旧签名)。

讨论区独立模块 + 远程开关;下架是留痕不是删除,删除是真删(删前抄原文进管理留痕)

帖子

时间作者标题正文回复赞状态操作

回复

时间作者内容状态操作

被删掉的配图

图删除时间到期时间上传者大小状态

开关在「开关」页的 discussion(默认关;关掉后 /v1/discussion/* 全 403,客户端画不出入口,但这一页照常能看能管)。⚠️ 上架中国大陆之前不许开:讨论区 = 信息发布服务,须先做手机号/身份证实名 + 内容审核。

四个动作的留痕去处:下架/恢复写在帖子行上(谁下的 / 为什么 / 什么时候);修改与删除写进「管理留痕」页(discussion_edit / discussion_delete)—— 修改留的是改之前是什么,删除留的是删之前的整篇原文(含被连带删掉的那些回复)。⛔ 删除不可逆:帖子、它下面所有人的回复、点赞、通知一起没,没有恢复按钮。

配图是唯一留得住的:被删帖子的图,字节进保留期(默认 180 天,对齐《网络安全法》第二十一条的六个月基线),用户侧立刻 404、这一页在保留期内还看得到原图,到期由清扫真删。⚠️ 作者自己撤回、以及用户注销账号,配图都是当场真删——那两条是用户在行使自己的删除权,不进保留期。

同一套动作客户端里的管理员也做得了(rules.discussion.moderators,默认只有心魄号 10001)。⛔ 客户端一个号都没写死 —— 换人管理在这儿改配置即可,不用发包。

心魄灵田

掉落点位与掉率灵田一共六个掉落点位,掉率写在运营 manifest 的 rules.garden;保存即发布

点位 触发条件 当前掉率 默认 改为 键名

「集齐黑胶」「形态里程碑」默认 1.00 = 必得,调低即变成概率点位。 里程碑是终身一次的发放:未命中不写幂等键,下次进灵田还会再掷 —— 调低掉率不会让某台设备永久丢包。 掉率只管附赠的那枚碎片,唱片集齐本身与星痕结算不受影响。 改动落 op_log(action=garden_drop_config_change,含前后值)。

星痕余额与对账

设备 余额 流水重放 对账 累计产出 已注入心魄值 私人歌曲

事件流水纠纷就查这里:采撷者与主人两条记录指向同一个 idem_key

时刻类型操作者对象曲目 星痕idem_key详情

灵田是服务端权威的(跟成长值那条线相反 —— 那条是客户端算、服务端存)。 事件流水 append-only,永不修改也永不删除;数据库快照按 GFS 轮转(近 48 小时每小时一份、30 天每天一份、12 周每周一份)。 备份只是防灾,流水才是真相:任何余额都能从流水重放出来。

装扮碎片

近 30 天逐日掉落深色=听歌 · 浅色=灵田 · 绿色=保底发放

近 7 日 Top 设备

设备昵称 / 邀请备注7 日掉落 触顶天数

掉落漏斗(近 30 天)逐环节计数:掷点 → 命中 → 定档 → 定名(定向/旁落)→ 保底;参数配坏当天在这里现形

日期 掷点 命中 微光流光星耀心魄 保底强制 定向 旁落 首登发放 补偿发放

卡册达成(全服)各档 点亮首件/升紫/升金 的设备数;紫金按当前阈值评估

档位点亮首件升紫升金

账本明细append-only,永不修改删除;余额随时可从这里重放

时刻设备渠道点位碎片数量 指向 记账原因

参数设置写入运营 manifest 的 rules.shards,保存即生效(version 自动 +1);写前自动备份,改动记 op_log

档位权重 tier_weights:
间隔不得大于「时长门槛 × 0.94」,否则卡在门槛上的歌永远掉不出来
卡册(微光/流光/星耀/心魄):

具名碎片池三段式:命中 → 按档位权重定档 → 该档内定名(定向/按权重轮转)。全部条目具名;通用碎片已退役,不许再配

⚠️ 碎片跟着道具走:不保存这张表时,池子由「道具」页签自动派生 —— 在架 ∧ 定了稀有度 ∧ 非限定件的每一件都参与,名字与档位都现查台账, 改道具的名字/稀有度/上下架,碎片一同改。 这里保存一次,就把成员名单钉死成这一份(之后新登记的道具不会自动进池, 但名字与档位仍以台账为准)。想回到自动派生,去运营 manifest 删掉 rules.shards.pool。

内部编号(别改历史)显示名 档位 档内权重 台账

告警查询时评估:每次打开本页跑一轮,红/黄写 op_log(action=shard_alert)留痕,同日去重。 参数改动同样留痕(action=shard_config_change,含前后值)。

宝箱商店

四档宝箱的价目、开出枚数、档位权重与保底,以及哪几张货架露出去了。
⚠️ 货架开关是「卖不卖」,商城总闸是「进不进得来」 —— 两件事。 总闸关着的时候,货架开着也没人看得见。
🔴 套利自检那张表不是装饰:「买高档箱刷低档碎片更便宜」这类事 只有算出来才看得见 —— 微光箱 20% 那次废掉整个流光箱,就是没人算这张表。

货架

四档宝箱

宝箱档心魄币心魄钻石 枚数 档位权重 保底 在手

套利自检(每档碎片的最优购买路线)

档合成片数 最优路线 期望单价 成品直购价

派发宝箱

⚠️ 发出去收不回来(回收要填负数,且同样进台账)。 每一笔都带幂等键:同一个键重复提交不会发第二次。

碎片赠送往来

谁把碎片送给了谁。作废会把碎片从收方收回、退还给送方 —— ⚠️ 收方已经拿去合成掉的话会拒,那时的修法是补发而不是硬扣。

时间送方收方碎片枚数状态操作

海上贸易 · 发行总阀

净印出 = 当天系统付出的银币 − 收回的银币(换汇、同账号设备归拢不算)。它就是这个玩法往经济里灌的水。
改 k:次日北京 0 点生效,每天最多一次,单次不超过上限。急停:当天即时、只许往下,一直沿用到下次改。

加载中…

海上贸易 · 玩家查看与纠错

个人故事线退回(上面填心魄号 + NPC):
小时

海上贸易 · 任务 / 船位 / 心魄币商店 / 新榜

不填心魄号 = 全服概览(线 2 当前生效配置、任务状态分布、周榜冠军、全服首达);填号 = 这个人的船位、任务、解锁、船上装饰。 数值改远程配置 rules.sea_trade.ship_slots / decor / shop / quests / boards / marquee.kinds。 船位纠正:把「买来的船位数」直接改成新值(写 oplog)。

海上贸易 · 酒馆讯息排期

老板会在排期时段里把这句话混进酒馆讯息(跟别的讯息一起按权重抽,权重 1 = 跟普通讯息一样容易被抽到)。 没到开始时间,玩家那边任何接口都拿不到这句话;停用 / 过期同样不出。 港口留空 = 所有港;泉州写 home;多个港用逗号隔开。文案里可以写 {port}(换成本港名)。
冷清天的港只剩一句「生意不好」,排期讯息也会被压掉;预览时勾「不管冷清」能看到它排进去的样子。

预览:某港某时刻会听到什么

海上贸易 · 配置表

灰底格子不能改(主键);其余格子点进去改,离开格子即保存。 「开港」只改港口表的 open 一格。🔴 港口 / 商品不删,用 open / status 下线。
⚠️ 种子只补缺不覆盖:代码里的种子改了不会自己到线上,要在「种子对账」里逐条采用。

海上贸易 · 港口样式与素材包

港口画面(总图昼夜 / 三张内景 / 立绘)不在安装包里,玩家第一次进这个港时下载;叫法和六入口热点也在这里,改完玩家下次进港生效。
开新港(不发包):① 本机跑 build_sea_assets.py → ② 按部署说明上传 sea_assets/ → ③ 这里点「刷新并核 sha256」,这一套「素材包」一格全绿 → ④ 叫法 / 热点没有就在下面新建一套 → ⑤ 配置表里把港口的 style_set 指过来、勾 open。
「下发」关掉 = 这一套不给客户端(还没开的港先备好样式,别剧透)。⚠️ 种子只补缺不覆盖:种子 JSON 改了要在这里逐套「采用种子值」。

套名称在用港口下发素材包总图

编辑一套(JSON:name / ports / fac / npc / call / catchphrase / greet / spots)

spots = 六入口框 [x0, x1, y0, y1](图宽 / 图高百分比);没写的入口用模板。fac 键:tavern trade capital wild yard dock; npc 键:tavern sailor trade wright capital(首府人物可空);greet 键:tavern trader sailor yard tip。

海上繁荣度 · 开关与联动

加载中…

本周 / 下周捐建

捐建日 = 周日;周六 0 点公示下一个周日的门槛和捐建港,第一次算出来就落表冻结。 还没到公示时刻的那一周标「预演」:照当前公式现算给你看,⛔ 不落表,到点时数据变了结果也会变。
每港一格:本周捐了多少 / 繁荣级(门槛五档)。手排某一周的捐建港 = 远程配置 rules.sea_trade.prosperity.manual_ports(键是捐建日 YYYY-MM-DD)。

本周极品在哪个港

最近几个捐建日的捐款

最近 8 周各港等级

当前生效配置

撤掉一个冻结周(下次读按当时规则重算)

只限还没人捐过的捐建周(有捐款服务端直接拒):试点期冻结过的那周要按正式口径重算时用。写操作留痕。

全服海上事件 · 开关与联动

加载中…

排期列表

海盗舰队 / 封港 / 大商队求购 / 风暴季 / 丰收。航程只认派船之前排好的事件;预告时刻起酒馆里出传闻、横幅开始倒计时。
参数范围与预告下限服务端写死(见下面「规则」),填错直接拒。⚠️ 已经开始的事件只能改标题 / 传闻 / 备注; 停用 = 酒馆里那条传闻也收回。

新建 / 编辑

瓶中信 · 开关与联动

加载中…

全服:内容 / 投放 / 收集进度

纸条池 = 服务端数据文件(编号即指纹,只追加不改号)。「在架」= 没下架的;收集进度按在架总数算。 ⛔ 这一屏不出纸条正文和谜底,只数数。

查某个人

任务线 / 单封信整条退回

删掉这个人这条线的进度和委托记录,之后可以重新从瓶子里捞到。⛔ 不收回已经发出去的银币 / 货 / 券(那些走各自的纠正通道)。写操作留痕。

群聊 · 开关与联动

加载中…

群列表

搜:群号 / 群名片段 / 群主心魄号。「待处理举报」= 信箱里没归档的「群聊」+「群消息」两类举报。 人数上限没单独改过的群跟全站默认(rules.dm_ext.group_member_cap)。

群详情点上面一行的「详情」

处置这个群

群号填好再动手(点「详情」会自动填上)。三件事都写留痕;解散不可撤销:没领完的群红包当场退回发送人,成员收到「该群因违反规定已被解散」。

群名重置成「群聊<群号>」,公告 / 头像清空。

用户红包 · 开关与联动

加载中…

对账

逐个红包从钱包流水重放:已关闭的必须 扣出合计 = 领取合计 + 退回合计,开着的 领取合计 + 退回合计 ≤ 扣出合计。不平的条数只该是 0,不是 0 就是事故。每天至少点一次。

红包列表

测试机同设备互发放行名单

正常情况下用过同一台设备的两个号不能互发 / 互领红包。名单里的心魄号不受这条限制(只给测试机用)。 写的是远程配置 rules.dm_ext.rp_same_device_allow_nos,整表替换,清空 = 全撤。写留痕。

冻结一个红包

没领的份立即退回发送人,已领的不追。已经领完 / 退回过的红包冻结不了(什么都不会动)。写留痕。⛔ 不可撤销。

对账

逐箱从钱包流水重放:支付 = 已被抢份结算价合计 + 退款(开着的箱 已被抢 + 退款 ≤ 支付)。不平的条数只该是 0,不是 0 就是事故。

集装箱列表

冻结一个集装箱

立即关箱:没被抢的份按结算价折回 + 未分配余额退回发箱人(只退钻),已抢的不追。已经关了的箱冻结不了(什么都不会动)。写留痕。⛔ 不可撤销。

聊天媒体

私聊 / 群聊里发的图片 · GIF · 语音 · 视频 · 文件。保留口径:≤ 大件线的保留若干天;大件对方 / 全员看过即删、且有最长小时数;没发出去的孤儿件 24 小时清。 删除 = 删盘上字节 + 标「已过期」(行留着,聊天气泡显示已过期)。⚠️ 同一份文件被多条消息共用时,只有最后一条也删了才真删字节。

删除一个媒体件

删盘上字节 + 标已过期,⛔ 不可恢复。只删这个件,不动它所在的消息(消息要隐藏去「看上下文」里点)。写留痕。

全站禁言 · 正在禁言的人

心魄管理员在客户端(客厅名片 / 群成员 / 私聊右上角「⋯」)禁的人:禁言期间私聊、群聊、客厅卧室都发不了言,到点自动失效(这里只列还没到点的)。 时长只有 1 小时 / 1 天 / 7 天 / 永久。后台只能解除,⛔ 不能在这里禁(禁言要心魄管理员本人在客户端做,留痕里记的是官方号)。

解除禁言

立刻恢复这个人在私聊、群聊、客厅卧室的发言。写留痕(谁解的、原因)。

禁言 / 解除流水

最近 100 条,新的在上。「谁」= 官方号的账号,或 admin:后台用户名。

全员通知记录

心魄管理员在聊天主页右上角发的全员通知:以官方号给每个用户发一条私聊(分批、同一次只发一遍)。拉黑了官方号(或被官方号拉黑)的人不发,列在「跳过」里。 每天上限看远程配置 rules.official.broadcast_daily_cap(出厂 3 条)。「发送中」= 中途断了,官方号再点一次同一条会接着发。

聊天表情盘

两种表情:文本表情(系统 emoji,点了插进输入框跟正文一起发;⚠️ 新码位老安卓可能显示成方块,加之前先在测试机上看一眼); 图片表情(上传的小图,点了直接发出去;老版本 App 收到显示成一个占位圆球)。 从没配过时用户看到的是安装包内置那一套 —— 第一次配先点「从内置导入」再改。删掉的图片表情:新消息发不出,聊过的历史照样显示。

改动历史

每次改动存一版全文。「回到这一版」= 把那一版内容再存成新的一版(版本号继续往上走,客户端照常拉到)。

全服共建 · 开关与联动

加载中…

灵泉:进度与各阶

公式目标预览(不落库)

目标ₙ = max(倍数ₙ × 目标₁, 取整(kₙ × 基数 Bₙ));基数 = 最近一个窗口的全服自然产出。

本周档位快照

最近捐献(200 条)

锁定下一阶目标(开阶)

第一次 = 开第一阶(灵泉开始众筹)。先点上面「算一遍」看公式目标,认可就留空走公式,否则填一个整数。锁定后这一阶目标不再变。写留痕。

灵泉许愿

许愿跟着全服共建那一位开关走;引水(第一阶)完成前回「还没引水」。下面是最近 200 次许愿与各签表的签分布。

试点放行

给指定设备单独打开某个功能(新玩法先给两台测试机跑一轮, ⛔ 别一上来全量)。
🔴 保存是整表替换:这台设备的放行名单以你勾的这一份为准, 没勾的当场撤销。⛔ 别以为只加了一条。
⚠️ 未成年人模式与依赖链压过试点 —— 放行不等于绕过闸。

已放行的设备

设备放行的功能备注更新时间操作

升级版本号

LATEST(线上最新):客户端 build 低于它就弹「有新版本」提示(可关、可静音)。 MIN(强制下限):低于它就整壳换成拦截页,只剩「去升级」。
生效值 = 远程值(填了且合法)优先,否则用服务器 env。保存写进运营配置,API 下一个请求就读到,⛔ 不用重启。 用户那边:冷启动、或切回前台(45 秒节流)时拉到。「清除」= 删掉远程值、回到 env。
🔴 顺序:双端包出好 → 下载链接真能下到新版(iOS 在 TestFlight 可装)→ 最后才在这里拨号。 🔴 MIN 不许高于 LATEST(服务端拒);MIN 往上拨会先算出近 7 天活跃里会被拦下几台,再让你确认一次。

平台项生效值来源远程值env 值改成操作
加载中…

LATEST 与 MIN 一起拨(MIN = LATEST)

仍只在 env(只读 · 改要重启)

兑换码

批量铸码,谁先兑谁得(跟点名发券互补的另一条投放口)。
⚠️ 兑换码是不记名的:事后查不出「这一张原本打算给谁」—— 留痕只记「什么时候铸了多少张、谁铸的」,⛔ 不记码本身 (留痕不该变成一份可以直接拿去兑的清单)。
⚠️ 铸出来就在外面了:截图 / 转发都算发出去。一批一个用途, ⛔ 别拿同一批码发两件事,那样对不了账。

码类型状态被谁兑了铸于兑于备注

电台 BGM

心魄源电台的背景音清单。重建会按当前上架歌重新扫一遍生成清单 —— ⚠️ 它不改任何一首歌,只重算「电台按什么顺序放」。

衔野归灶

一屏看得出:开没开、三条水口今天放了多少、 灶气封顶摸不摸得到。
🔴 「理论合计」跟「够得着」是两个数:前者按灵性 10 算(目前没有 任何一只随行有),后者按目录里最好的那一只算 —— 后者才是「封顶摸不摸得到」的判据。前者看着 5500 没问题的时候, 后者可能是 4900(2026-09-10 真发生过)。
⚠️ 「卡住的趟」只该是 0;不是 0 就点一下「催结算」(跟读接口懒结算同一条路,幂等)。

随行目录

随行出身档 偏好 下限 食性钻价上不上架

珍品家具的具名能力

家具能力效果为什么不印东西

内容目录(改完即生效,⛔ 不用发版)

每一节是一份 JSON,改完点「存这一节」。 逐节写,没动的节一个字不碰。
⚠️ 存进去之前会过一遍服务端的清洗:整节要么全好要么整节拒收 (坏值当场 422,⛔ 不会静默回落成默认值)。
🔴 属性码只认这几个:; 族只认 ; 家具能给的东西只认 。 打错一个字**整节拒收**(那是故意的:打错字的静默失效查起来最费劲)。

最近的出野

设备随行地点状态到点时刻

魄印足迹

🔴 最上面那三个数只该是 0:卡住的程 / 空程 / 封印码对不上。
⚠️ 揭晓前后台也看不到足迹 —— 后台跟前台走同一个函数, 「能不能提前知道号码」在代码里只有一个答案。 封印码后台永远看得到:那本来就是给人核对的。

运营日 / 程状态售出 参与足迹 封印码 揭晓时刻操作

互动数据

送礼 / 赠予 / 合成 / 结 CP / 开客厅 / 交友 / 发帖回帖,按运营日(UTC+8)分天。
⚠️ 「多少人」是整段窗口的去重人数,不是每天人数相加 —— 同一个人天天送礼只算一个人。
⚠️ 合成读的是道具台账里 craft: 那一批, ⛔ 不是合成飘屏表 —— 那张只写心魄档,拿它当合成总数会漏掉前三档。

项目 合计 多少人 最高的一天

逐日明细

⭐ 没有数据的那天也有一行 0 —— 少一天会被读成「那天没统计」, 而不是「那天真的一次都没有」。

只有累计的几项

这几项答不出「某天几次」,每一行后面写着为什么。 ⛔ 别拿它们的时间列去分天——那只会把一个人几百次串门全算在最后一天。

项目数值为什么没有按天

全服存量

现有=此刻还在用户手里的(台账含负数行重放); 发出过=历史上一共发出去多少件。 两个数刻意都摆出来 —— 只看「现有」看不出「发了 900 件、被消耗掉 880 件」。
⚠️ 成品按「件」、碎片按「枚」,两张表刻意分开 —— 加在一起等于说「我有 3 件半」。

指纹名字资产键类别稀有度状态 现有 发出过 设备数

成品来源

每条发货路一共净发出(或净收回)多少件。负数是正常的: 送礼支出、集卡消耗、挂单托管都是从背包里扣。

来源台账前缀净件数流水行数

碎片存量

来源分类走碎片自己那份分类函数(全站唯一一份),⛔ 这一页没有第二套口径。

碎片现有 掉出过设备数

碎片来源

渠道净枚数

地图天气

🔴 全服同一套:所有人看到的是同一种天气,⛔ 不读任何人的 IP、不要定位权限。 每天 0 点摇一次;摇中非「正常」的,当天出现一段,起点按 — 小时对齐、 持续 — 小时。段不跨零点。
⚠️ 整条线的总闸不在这一屏,在「运营与发布 › 功能开关」里那条地图天气 —— 开关只许有一处,这儿再放一个迟早跟那儿对不上。 关掉 = 一整天正常天气(⛔ 不摇不落库);昼夜四时段的小时表照常下发, 底图不会停在同一张天光上。

① 概率

⚠️ 整张表一起提交(权重是一组互相依赖的数,只改一个的话「其余分剩下的」就不成立)。 改完立刻生效,⛔ 不动今天已经摇好的那一行。

天气权重(万分比)占比说明

② 特效包(素材做好在这里接上)

一种天气 × 一个时段 = 一个特效包,跟客厅背景是同一套编排包。 先去「道具资产」那一屏把包传上去(类型 space_bg),再回这里填包名。 改完立刻生效,⛔ 不用发版。
⚠️ 填了还没传上来的包名不拦(先配好、素材随后到是正常顺序),但会 标红——那种日子用户那边什么都不会画。 空着 = 这个时段不画。⛔「正常」那一档不许配包(它的定义就是什么都不画)。

天气清晨白天傍晚夜里还没传上来的

③ 新增一种天气

⭐ 加一种全新的天气不用发版:这里填 code + 中文名(+ 一句文案), 加好之后它就出现在上面 ① 和 ② 两张表里,包名去 ② 那张表填, 素材在「道具资产」那一屏传(类型 space_bg)。
🔴 code 是目录名和配置键,不是给人看的名字:只许字母数字与 _ -(⛔ 不许点号 / 冒号 / 斜杠 / 中文,⛔ 最长 24 个字符)。 填错当场报错,⛔ 不会被悄悄改成另一个 code 存进去。 名字(中文)随便写,用户看到的是它。
⚠️ 新加的天气权重是 0 = 摇不到。要让它出现,去上面 ① 把它那一行的权重填上 再整表保存一次(⛔ 权重不能只改一个)。 权重 0 的天气仍然能用下面「现在就变天」和「指定某一天」点名。
⚠️ 没填包名的时段会按 wx_<code>_day(清晨/白天/傍晚)与 wx_<code>_night(夜里)两个默认名去找包 —— 传包时直接用这两个名字最省事,不用再回 ② 改一遍。

④ 段的对齐 / 时长 / 段数,与昼夜几点换

改完立刻生效,⛔ 不用发版;但 🔴 不动今天已经摇好的那一行 (今天的天气是既成事实)——要改今天走下面「现在就变天」。
⚠️ 只提交改过的那几格。填了范围外的数当场报错, ⛔ 不会「看起来存上了、生效值没变」。

参数值单位 / 范围是什么意思

🔴 昼夜四个时段各从北京几点开始(升序,⛔ 不许相等)—— 这一行同时决定三样东西:地图底图那一张天光、天气用白天版还是夜晚版、 以及哪几只小动物出得来。⚠️ 改它要客户端 build ≥ 124 才认; 更旧的包收不到这一行,照它自己内置的 05 / 09 / 17 / 21 走(= 今天的行为)。

⑤ 现在就变天

覆盖今天那一行,立刻生效。⚠️ 超过零点会被截断,截了会在结果里说出来。

小时

⑥ 指定某一天

⚠️ 只生效一次:那天 0 点摇的时候认它、不摇,用掉就自动清,⛔ 不会永久锁死。

天后(1 = 明天)
哪一天定成什么用掉没

最近 14 天

日期天气时段怎么来的

镖局 · 运营旋钮

运镖 / 围镖 / 押镖 / 钱庄的全部可调项。每一格都写着单位、合法范围、 这是什么意思,以及改了之后什么时候生效。 保存逐键覆盖:只动你改过的那几格,⛔ 别的键一个都不碰。
🔴
🔴
⚠️ 每天最大次数那六格在「镖局统计」那一屏(同一张登记表的一个切面,两边改哪边都一样)。 ⚠️ 总闸在「功能开关」那一屏 —— 开关只许有一处。

暗镖牌库

每张牌是登记表里的一行:原语(写死在代码里)+ 参数 + 牌名 / 大字 / 小字 / 颜色 + 出现率 / 上限 / 资格 / 开关。 改牌的流程:新建草稿 → 改 → 校验 → 预算(子进程调平 + 重算公示)→ 主理人逐条划公示 → 主理人确认生效。 生效 = 写 rules.<组>.cards(版本号 +1),下一局开局起用新表,进行中的局照局记录结完。
🔴 调平旋钮的出现率只能由预算算出来,手填无效。🔴 同一时刻全后台只许一个预算在跑。 🔴 只有主理人账号能「确认生效」和切换牌组。

充值 VIP · 五档门槛与特权

基础值(⚠️ 这一屏改不了,只是给你对照)

哪一项基础值单位叠加方式去哪一屏改

五档

档门槛(元)门槛(分) 这一档新增 一次性钻石
这一档那一份
一次性头像框
这一档那一个
一次性聊天气泡
CB 的号,0 = 不给
累计之后生效

现在谁是几档

按 recharge_orders 里已到账的单现算。⚠️ 金额这一列只在后台看得到 —— 对外任何地方只发等级数字,⛔ 不发金额。

心魄号昵称累计(元)单数档

镖局 · 每天最大次数

运镖 / 围镖 / 押镖三个玩法的每日额度都在这儿,改完立刻生效,⛔ 不用发版。
🔴 0 = 一次都不许(⛔ 不是「不限」)。要放开填个大数。
⚠️ 只挡新的接单 / 押注 / 开局,⛔ 不打断已经在路上的那一趟。
⚠️ 镖局还有第七个每日次数 ——炒镖每天几笔(escort_vault.speculate_daily_max), 它在「镖局旋钮」那一屏(跟这六格同一张登记表)。其余五十多格可调项也都在那一屏。

玩法 · 哪个次数每天最多说明

运镖统计

⭐ 归日直接读运镖流水自己那一列(接单时刻切的运营日), ⛔ 不拿时间戳重切一次 —— 那是第二套口径。
⚠️ 「奖励钻石」只算已结算的那些:回报在接单那一刻就摇定了, T+10 分钟才入账,把在途那趟算进去,账面上的「已发钻石」会提前变大。
⚠️ 「消费钻石」含刷新任务单的花费 —— 漏掉它这个数就是偏小的。

运营日 人数 趟数 消费钻石 奖励钻石 净额 头奖 作废

用户经济

每个人现在手上有多少:两种货币的余额 / 累计到手 / 已花掉, 加上碎片、背包、挂在交易所的、待领的、累计充值。
🔴 一行 = 一个人(同一账号的多台设备已经合起来算), 没绑账号的设备各自一行。
⚠️「已花掉」是推导量(累计到手 − 余额),不是另记的一张表; 负数只可能来自后台反向发放收回,如实显示。
⚠️ 挂在交易所的件不在背包里(挂单那一刻已进托管)⇒ 两列分开,别相加。
🔒「心魄钻石·余额」= 钱包可用余额(用户钱包页看到的那个数),不含保险箱; 保险箱里的钻单独一列(单位:钻)。「钻·已花掉」= 累计到手 − 可用 − 保险箱(锁进保险箱不算花掉,取出也不算新到手)。
⚓「银币·海上贸易」= 航海账户余额,单位是银币(1 钻 = 10 银币),⛔ 别跟钻那几列相加。
⛔ 这一页只读,也不做对账:「只该是 0」的那几个数在「对账」页。

⭐ 点表头排序(再点一次反向)

对账

把只该是 0 的几个数放一屏。每一条都是「物化列 vs 台账重放」的差 —— append-only 台账是权威,物化列只是列表页的加速。对不上就以台账为准。
⚠️ 灰色的「查不了」不是 0:那是这台库还没有那张表 (对应玩法从没被打开过)。⛔ 别把它当成「一切正常」。
⛔ 这一页只读:修法在各自那一页(灵田 / 交易所 / 心魄币发放), 统计页不开第二条纠正通道。

免费账户名单里的人,每周一北京时间 0 点自动补给;手上还够的那周就不发

内测用户里有不少还在念书的人,想继续测试就得花家里的钱充值 —— 这条线就是不让他们花这个钱:把人放进这张名单,每周一 看一眼手上还剩多少,不够就补上。
🔴 判定口径只有一处,而且只看心魄钻石:钻低于存量线就补一份, 到线(正好等于)就算够、不补。下面那行规则写的就是此刻真正生效的判据, 名单里那一列「本周判定」跟真发那一刻读的是同一个函数。
⛔ 心魄币既不比较、也不发 —— 它是充值币,白发它等于绕过充值这条线本身。 名单里那一列心魄币余额只是给你看的背景(这人充没充过),不参与任何判断。
⚠️ 发放走收件箱:用户点「领取」才进钱包。所以刚发完 余额不会立刻变 —— 那不是没发出去,是他还没领。
⚠️ 一周只发一次。手动发过,周一那一拍就跳过;反过来也一样。 真要在同一周再发一次,勾「强制补发」——台账上看得出那是本周第几次。

自动发放与数额

补一次发 心魄钻石
存量线 心魄钻石 —— 到这条线就算够(正好等于也算),低于它才补
信的标题
信的正文(用户在收件箱里看到的就是这几句)

单项上限 10000(防手滑,不是业务规则:这条线是机器 自动跑的,多打一个零的时候人不在场)。两个数额不许同时为 0 —— 那样每人收到一封什么都没有的信,比不发更糟。

名单

心魄号昵称状态 心魄币(仅参考) 心魄钻石 本周判定 / 已发 备注加入时间操作

封停 = 留在名单里但不发(要看得见自己停过谁,所以不是删掉),随时能恢复。 移出只把人从名单里拿走,已经发出去的记录一行不动。 ⚠️ 「号没了」那一行是这个账号已经注销或退号 —— 那种情况不会发,也不该指望它会。
🔴 发完之后那一列还会写「要补」,这是对的:信刚发出去、用户还没点领取, 他的余额一个字没变,按规则当然还是「要补」。真正回答「这周发没发」的是它下面那个绿标。

每周统计

那一周(周一)发了几人够了没发跳过 心魄钻石合计最后一次跑

读的是下面那张台账,⛔ 不是「跑了几轮」那几个数 —— 同一周补发过就有两轮,合计要把它们加在一起。

发放记录

⚠️「够了没发」也在这张表里 —— 「他这周为什么没收到」只有这里答得出。
时间那一周心魄号昵称判定 发了钻 判定时的钻 方式经手

管理操作留痕

后台自己干了什么。⚠️ 这一页之前不存在 —— op_log 一直在写,但唯一的读取方按「哪个用户 / 哪台设备」过滤, 而绝大多数管理动作这两个键都是空的(改配置、作废、发布、 充值、每日盘点全是),于是那些行通过界面永远翻不出来, 只有直接开库才看得见。这一页刻意不按主体过滤。
动作那一列标红的是不可逆 / 动钱的操作。 操作人为空的是老行 —— 那时还没有这一列,能从备注里翻出来的已经翻了, ⛔ 翻不到的留空,不猜。

时间动作对象 操作人IP备注

后台循环

这 12 条循环每一条都是「抓异常 → 记日志 → 下一拍继续」—— 一条连着崩一周,跟健康的循环在日志外面看起来一模一样。 这张表回答两件事:上次跑完一轮是什么时候、是不是崩了又被拉起来 (启动次数 蹭蹭涨而 本次已跑 总是个位数 = 崩溃循环, systemd 的 is-active 看不出这件事)。
⚠️ 写这张表的是 API 进程,读它的是后台进程 —— 全部一起变红多半不是十二条循环同时坏了,是 API 进程整个没在跑。
「从没跑完过」不是故障:清理是 24 小时一拍,进程起来不久本来就还没到第一拍。

循环状态间隔上次跑完 已过 本次已跑 启动次数 本次启动于最后一次错误

功能开关

按模块分组,每条开关带着它的依赖与联动一起显示—— 「开了没反应」多半是上游没开(会标红「开了也白开」);「关错范围」是因为下游功能会跟着一起没。 标「编译期」的条目后台改不了(要发新包),如实显示而不是假装能改。 每次改动写 op_log(action=flag_change),配置文件改前自动备份。

运营待办

奖励台账记的是已决的奖品;这里记的是「说了要做但还没落点」的事—— 补偿给什么未定 / 活动到期要结算 / 券等时机 / 发版前验收欠账。 只增不删:不做了就置「已作废」,行留着,台账要能回答「当时为什么记」。 活动到期与待发放的奖会自动冒出来(同一件事只建一次;办完置状态后不会再回来)。

新增待办

状态优类别标题 / 说明 到期来源操作

送礼

送礼流水是 append-only 台账:所有读数(送出/收到/榜单/飘屏)都从它算出来, 一个计数列都不落——所以纠错只要把一行标「已作废」,全部派生数字当场自愈, 扣掉的道具同时退回去。行永不删除(台账要能回答「这笔曾经发生过、后来被谁作废」)。

档位缺口

这些在架礼物解析不出稀有度档位(资产目录 gifts/catalog.json 里没有、 碎片池里也没有),因此只会在房间内播、不进全 App 飘屏。 修法:把资产目录传上去,或在下面的参数面板里给它一个人工覆盖档位。

参数(rules.gifts · 保存即生效,不用发版)

扣减模式是开送礼前必须先定的那件事: 「扣持有的道具」是经济宪法口径(送出消耗一件手里的礼物), 但它要求碎片掉落已开闸、用户手上真有货,否则谁也送不出去; 「不扣(内测)」只记流水,先把链路跑通。

时间礼物档件 送礼人收礼人场景扣减状态操作

心价总值与四张榜

两种心价别混:送出 / 收到 / 客厅刷出是成交额 (gift_sends.ref_value 是送礼那一刻的心价快照,事后调价一分不动); 卡册是现价估值(item_catalog.ref_value 当前值 × 已点亮的卡,调价当场跟着变)。 全部现算,一个计数列都不落 —— 作废一行送礼,四个数当场自愈;任意一天可重放。

心价缺口

这些在架道具的 ref_value 是空或 0,按 0 计入上面所有心价读数 —— 这张表不空,那几个数就是偏低的。(种子是 INSERT OR IGNORE,只对新插入的行生效, 所以老库里的行加了列也补不上值。)修法:去「道具」页签逐件补价。 这里绝不按档位反推一个数字把窟窿盖住 —— 缺口要看得见。

名次谁心价

名次口径与成长榜同源:并列同名次;未成年人模式的人整行不发且名次不重排 (前 20 可能只回 19 行 —— 名次全站只有一个定义,宁可空一格)。
「排除」角标:名下每一台设备都在「排除设备」里的账号。 客户端那一面它一点痕迹都没有 —— 整行不发、 不占席位(后面的人自动前移)、自己那一行也不发、按号也查不到读数; 后台这一面相反:照常列出来(运营要看得见它的数据),只是没有名次。 两处治理原则相反且都对:闸收敛的是「对外露面」,不是让这个人从运营视野里消失。
榜长:累计总榜(卡册)前 20 名,日榜(送出 / 收到 / 客厅)前 10 名。 卡的是「席位数」不是「行数」。

参数(后台可调 · 存了客户端下次拉配置就变,不发包)

每一块单独保存,互不牵连。保存前服务端用线上同一套规则试算一遍:坏值当场拒并说哪一格不对, 不会「存进去再悄悄回落默认」。保存成功会写操作留痕(前后值)。 名字 / 档位 / 在架状态的真源是「道具台账」,这里只读。

礼物宝箱

每个数都从开箱台账数出来。开箱次数= 请求数(「1 个勾三人」或「10 连」都算一次), 箱数= 一共开了几箱。返金是开箱那一刻真正记上的数(未成年人收礼方记 0)。 实测概率只拿自然摇出的箱算:保底顶出来的那一箱不是摇的,算进去会让保底件的实测偏高, 保底次数单列。

最近开箱

时间开箱号送礼人收礼人宝箱箱数 扣钻开出保底返金状态操作

整次开箱作废 · 会退钻、收回返金

以一次开箱为单位(上表一行 = 一个开箱号)逐箱作废:按开箱那一刻的单价退钻给送礼人, 收回收礼人拿到的返金(先从待领收益里收,不够再从钱包里收,都不够就照实报「收不回来」), 飘屏撤下,锦鲤红包还没领的份作废(已领走的钻追不回)。 幸运值不回滚(开过就是开过)。幂等:已作废的箱不会退第二次。
先点「干跑」看会动什么,确认无误再点「确认作废」(要连点两下)。

锦鲤红包

至尊宝箱开出锦鲤 ⇒ 那间客厅生成一个红包,开出那一刻就预先拆好每一份。 已结束= 抢完 + 过期(自然收尾);作废= 开出它的那一箱被作废了(纠正通道动过)。 状态按读路径那一份判:到了时间还没被循环拨走的,这里照样显示「已过期」。

时间红包号客厅开出人宝箱状态 已领份数已领钻到期领取明细

海崖垂钓

钓的次数= 请求数(钓 1 次 / 钓 10 次各算一次),钓出件数= 一共钓了几条。 鱼饵进出按账本事由归来源;认不出的来源单列成「未归类」,不并进「其它」。 🔴 这里的概率只给后台看:客户端公示一个概率都不发。

最近钓鱼记录

时间谁次数扣饵钓出 幸运值保底飘屏分享

每日鱼饵任务 · 按日领取

🔴 这里统计的是「领取」:用户点了领取才落一行,做完了没领的人看不见。 格子 = 当天领了这条的人数(按账号去重;一个账号一条一天只领得到一次,所以人数 = 次数), 小字是发出去的鱼饵。定义里已删的任务照样一行,标「定义里已没有」。 日期是运营日(北京 0 点切)。任务的增删改在「宝箱与垂钓 › 参数」⑥ 那一栏。

发放账目

心魄币只有两条来源:这个按钮和 telegram /coins, 两条都写进同一本 append-only 流水(coin_events), 账目不另起表——同一份清单存两处必漂移。 判重认的是发放事由(下面那个下拉),不是备注: 自由文本永远不会字面相同(库里 9 笔派发就写出了「内测」和「内测用户」两种写法)。 命中口径是「同心魄号或同设备」的净额——换台设备拦得住, 发错了反向收回之后又能重新发。

发放 / 回收

发给最后上报该版本的每一个账号(一个账号一份, 名下两台设备不发两份);排除名单里的设备不发(跟全站统计同一份名单)。 ⭐ 谁拿过记在账号上,卸载重装换了设备也领不到第二份; 用户升到下一个版本之后就不在这一批名单里了 —— 奖励绑在这个 build 上。
⚠️ 版本是「最后一次上报」的值:装了新版但一直没打开 App 的人,这里还算在旧版里。

在途

走「发到收件箱」发出去、用户还没点领取的钱。 还没落进流水,也不算进汇总——它还没到人手上。 急着让人立刻拿到,就把上面的「怎么给」切成直接到账。

发出时间谁事由数额经手

按事由汇总

一个事由发过几个人、发出去多少、最近一次什么时候。 事由为空的历史行归到「(无事由)」里照样列出来—— 兜底桶可以兜底,但不能把它藏起来。

事由发给了谁币种笔数人(设备) 发出收回净额最近一次

流水(谁 / 因为什么 / 多少 / 什么时候)

事由写错了会让上面那张汇总表算错,所以每一行都能改事由(✎)。 ⚠️ 改的只有事由:钱、时间、发给谁、经手一个字都不动; 每一次订正都留痕(谁 / 什么时候 / 从什么改成什么),行上带「已订正」角标,鼠标停上去看得见。 ⚠️ 判重会跟着搬家:改成新事由之后,这个人在新事由下就算发过了、在旧事由下又变成没发过。

时间谁事由数额 备注经手设备订正

免费碎片哨兵

一枚白得的碎片,顺着「攒碎片 → 合成礼物 → 送出去拿返还」这条路 最后能变成多少钻。它不是常量:返还四档、定档权重、每档里礼物占的比例 (道具增删就变)、各件合成片数,任何一个动了它都跟着动 —— 所以这里现算,⛔ 没有任何一版的现值被写死在代码里。
⚠️ 两列分叉是预期:差额 = 逐件 craft_shards 覆盖把这枚碎片抬高(或压低)了多少。

荒野销毁哨兵

玩家在荒野背包里销毁装备换钻,按档定价。单价是远程键 rules.overlord.scrap_gem, 而装备的来量由掉率决定 —— 调掉率 = 调这里的发行量。

充值(爱发电)

用户在爱发电付钱 → 我们拿订单号回源核对 → 按实付金额发心魄币。 钱数一律以爱发电查到的为准,通知正文一个字都不信(那条通知没有签名,谁都能伪造)。 认不出人的挂在下面的「待认领」等指人 —— ⛔ 从不猜:发错了收不回来。
⚠️ 「类型」那一列要看:月卡单卖的不是心魄币(它发钻石 —— 到账一份 + 每天领一份), 所以它的「心魄币」天生是 0,跟作废单长得一模一样。 分得开靠的就是那一列(类型=月卡 / 心魄币)。

收款算所有订单 —— 待认领那几笔钱是真收了的,只是还没找到人; 把它们排除掉,账面上就凭空少了一块。 已发出只算已到账的:还挂在半路上的币算进去, 就会让「发出去多少」提前变大,而这个数正是拿来跟钱对账的。
时间切的是我们记下这笔的时刻,不是爱发电的下单时刻:对账补回来的旧单算在补记那天。

对不对得上

把爱发电最近几页订单拉回来,没记过的补记补发——补的是通知丢了、 或者我们重启时错过的那些。这一步要走外网,慢的时候十几秒; 平时它每 5 分钟自己跑一次,这个按钮只是「现在就跑一次」。幂等,重复点不会重复发钱。

凭证

⛔ 只显示末 4 位——够你认出「是不是我刚贴上去的那一把」, 又不至于让这一页的截图变成一把钥匙。完整值一次都不会发到浏览器上。 改一把 = 贴新的、点保存,当场生效,不用重启; 留空保存 = 清掉后台这一把,退回服务器环境变量里那一把。

「测试连通」只查不发钱:拿现在这把钥匙敲一次爱发电的门,看放不放我们进去。 要补发漏掉的订单请用上面的「立即对账」。

绑定(爱发电账号 ↔ 心魄号)

认对过一次的爱发电账号会被记下来,以后他不填留言也认得出—— 用户看到的规则「第一次填留言、以后不用填」就是这一行在兜底。
绑错了才来这儿断开:两个人共用一个爱发电账号、 或者他第一次留言写的是朋友的号。⚠️ 绑定是粘的—— 绑上之后他在留言里改写新号也没用,钱照旧进旧号,只有在这儿断开才换得掉。

解绑只影响将来。断开之后,这个爱发电账号的下一笔 回到「看留言认人」:留言里写了心魄号就直接发给那个号;没写、写错、写了两个, 就落进下面的「待认领」等你指人 —— 钱不会丢,只是要人指一次。
已经发出去的币、已经记下的订单一个字都不动(那是台账,只增不改)。
⚠️ 这儿改不了「绑给谁」:要把这个爱发电账号挂到另一个人, 等他下一笔进「待认领」,在那儿指给新的号 —— 指成功会自动绑上新的人。 ⛔ 这里没有「改绑」输入框是故意的:那等于开一个绕过订单、凭手输就能改钱去向的口子。

待认领

留言里认不出心魄号的单子。对着留言原文确认是谁,填号、按「发给他」。 ⚠️ 发出去收不回来——号填错了就是发给了别人。
⭐ 指成功会顺手把这个爱发电账号绑给他,以后他不填留言也认得出。 绑错了去上面的「绑定」卡断开。

订单

订单号时间实付 类型心魄币 档位心魄号状态

交易所(玩家挂单自售道具)

玩家把自己的道具挂出来、别人用心魄钻石买走。 出发点是把线下私下交易拉到台面上防欺诈,不是变现口 —— ⛔ 全链路没有任何现实货币的入口、出口或换算。 挂单那一刻货就从背包扣走进托管,撤单/过期/道具下架都原样退回卖家。
⭐ 卖出的货款不直接进钱包:先落在「交易所收益」里,用户自己点一下 转入钱包才变成心魄钻石。所以下面的待转入是一笔真实的负债 —— 那些钱已经是用户的了,只是还没搬进钱包。成交费从卖家货款里扣,扣掉的那份销毁。

托管中= 在架挂单还压着的件数(这些货此刻不在任何人的背包里)。 钻石流水只算没被作废的成交:作废那几笔钱货都已经搬回去了, 算进来账面上就凭空多一块。

收口 · 会动别人的货

过期流拍+道具下架强制流拍,货原样退回卖家。 幂等,重复点不会退两次。 平时市场页每次打开都会顺手跑一次,「立即收口」只是「现在就跑一次」。
「强制流拍这一件」会把该道具的全部在架单一次性退掉 —— 在加工台把一件道具改成下架之后才用它,填资产键 (frame_54 / gift_train / bg1)。

在架挂单

单号卖家道具类别单价 剩 / 总状态对账

求购单

⭐ 求购单是挂单即冻:挂出去那一刻钻就从买家钱包扣走压在交易所。 「冻结」那一列跟钱包流水重放对不上就是事故(对账列会当场标红)。 撤单 / 过期(48 小时)/ 道具下架都会把剩余的钻原路退回钱包。

单号买家道具类别出价 剩 / 总冻结状态对账

成交订单

⭐ 作废是这一摊的纠正通道:钱退回买家、从卖家收回,货从买家搬回卖家。 行永不删除,翻状态让所有读数当场自愈。 ⚠️ 买家已经把货花掉了就作废不了(会明说原因),那种情况先让他补回来。

单号时间买家卖家道具来自 件数成交额状态

道具台账

全部装扮/玩法元素的指纹登记簿:指纹 = 类别前缀-三位序号(如 FR-054),永不复用—— 下架只改状态占号,没有删除。每次改动记 op_log(action=item_change,含前后值)。 「素材未就绪」= 状态为「规划中」的条目。

新增条目选类别后序号自动分配,指纹生成后不可改

指纹类别中文名 获取方式 稀有度 合成片数 解锁条件 参考价 资产键 状态备注

发布与回滚

改台账只是写进这台服务器;客户端手里还攥着旧目录缓存。发布= 目录版本 +1, 等于对全部客户端喊「你手上的目录过期了,去重拉」。每发布一次存一版台账快照, 发错了可以回滚到任意一版。
⚠️ 回滚是「前滚回旧内容」:版本号继续 +1,不会退回去 —— 退回一个客户端见过的号等于告诉它「没变」,用户手里就永远是错的那一版。

道具资产

台账管「这件叫什么」,资产管「它长什么样」。传进来就进 /v1/decor/assets.json,装机的客户端下次刷新自己换上,不用发版。
撤掉 = 资产层的回滚:客户端回落到安装包里那版(纯远程的新件回落占位)。 半截包(精灵图没传齐)会被挡在清单外并在下面列出原因 —— 它不会报错,只会让用户看到的还是旧的。

头像框渲染参数

洞径 / 洞心 / 编排包目录。以前写死在服务端源码里,改一个值要改代码再部署一次; 现在填完就进 /v1/decor/frames.json,客户端不用更新也认得这个号。
⭐ 对已有号同样生效:运营覆盖层下发时带 override,客户端对随包已有的号整条替换 (洞径 / 洞心 / 编排包 / 名字 / 家族)—— 换包时先把包传到上面的资产区,客户端下完包才换上,不会出现洞径换了图还是旧的。 撤掉覆盖 = 客户端回到随包那版。台账里把号设成 retired = 客户端选择页去掉该格、戴着的人退回无框。
客户端每 10 分钟自动重拉一次,不用点「发布」。

上传歌曲(后台直传)

音频必填;歌词收 srt / lrc / vtt(带时轴)或 txt(无时轴——App 端整段平摊显示,逐句滚动不可用,建议本地加工台配好时轴后同名重传覆盖)。同「专辑+歌名」重传会覆盖同一首。

心魄源歌曲(上下架 / 备注 / 删除)

歌曲指纹专辑mood词/封面时长听完下载来源状态备注操作

歌曲举报用户举报的歌与理由 · 处置 = 软删 + 删文件,行留着可追溯

时间歌上传者举报人理由状态操作

用户在 App 里举报一首房间背景音乐,这里就会多一行。
⚠️ 默认只列未处理的 —— 处置完的要靠上面那个下拉才看得见。 在这之前「已处理」那一批在后台整个不存在, 事后想复核一条自己当初怎么判的都翻不出来。

互动歌曲(用户上传的房间背景音乐)按上传者心魄号搜 · 一键下架 = 软删 + 删文件,行留着可追溯

ID上传时间上传者歌名 / 艺人时长大小私有在几人歌单举报状态操作

开关在「系统 › 开关与循环」页的 room_music(默认关;依赖 voice_chat)。这里只做 UGC 存储与转发:没有官方歌单、没有推荐位、不按热度排(版权口径)。下架 = 软删 + 删文件 + deleted_reason=takedown,用户歌单里那一行保留但不可播;正在放的歌由 API 兜底循环在 10 秒内跳过。

活动公告(心魄页标题右侧入口)

改公告三步:① 在下方表单填写(改已有公告先点列表行「编辑」带入)→ ② 点「加入列表 / 保存修改」→ ③ 点「发布到线上」。图片 / 视频上传后同样要走完 ② ③ 才会出现在线上。

有未发布的本地修改

标题正文时间窗图/链顺序操作

归档区(0)—— 已撤下但留档的公告,不发给客户端
标题正文时间窗图/链操作

新增公告

点选填入;要别的表情:mac 在表情框按 ⌃⌘空格 调系统表情面板

最多 30 段。段落支持 **粗体** 与换行;图 / 视频选择文件即上传;按钮要么填 https 外链、要么选站内页面,二选一。

手机预览(近似效果,两端渲染器按同一份规范实现,最终以客户端为准)

都留空 = 常驻显示;填了到点自动上/下线(按本机时区填即可)。

发布 = 整表覆盖线上公告并递增版本,客户端冷启动后生效。列表清空后发布 = 撤下全部公告。

飘屏公告(全客户端顶部飘过)

跟上面那张表**不是一回事**:上面是「有哪些公告可以读」(长期驻留、有未读红点、进公告中心); 这里是「什么时刻往全体屏幕上飘一句话」(转瞬即逝、按次数播、可定向、可撤回)。 发布即生效,不用发版、也不用点上面那个「发布到线上」。 想让用户点飘屏能看全文,就在「关联公告」里选一条上面已发布的公告。

发一条

时间按本机时区填。重复间隔最少 1 分钟(全服广播是稀缺资源);填了「播几次」大于 1 就必须给间隔, 否则几次会落在同一毫秒上、用户只看到一条。

状态正文样式面向时间窗 节拍已播/计划下次关联公告操作

运营活动

新建活动
奖励参数(阈值 · 奖额 · 达标口径)

⚠️ 全站只许有一条活动勾这个,且周期必须是 2026-09-17 ~ 2026-10-16 (跟公告一字不差)—— 对不上时服务端会拒绝记账并说清楚差在哪,⛔ 不会替你猜一条。

第一期那套面板(新活动一般都不用;勾了才画,也才发数据)
活动周期状态台账操作

活动规则(点开)

当日听歌时长榜

按 UTC+8 切天。今天的数字是活的——快照不是零点打的,「当日听歌」实际覆盖「昨天最后一次同步 → 现在」, 所以会看到「今天才过 1 小时,榜首却有 1.5 小时」。要定稿数据看前一天。 设备当天没同步 App,那天的听歌会算进它下次同步的那天(「基线」列会标跨天)。

名次发给谁邀请码端当日听歌基线累计记奖

配音秀数据录入(外部数据 · 人工)

名次参与者点赞链接收集人录入时间记奖

心魄榜(实时 · 与 App 同口径)

名次发给谁邀请码心魄值累计收听记奖

勋章达标名单(已获得 ≥9 枚勋章)

发给谁邀请码勋章数点亮(含人格)圆满最近上报记奖

阶梯达标面 某个数值每跨一档给一份奖(「心魄值到 300 的倍数」就是这个形状)

每 一档
谁当前值跨了几档已登记已发还欠距下一档操作

三态:够格(还欠有值)→ 点「登记」记进下面的台账 → 台账里「发到收件箱」变已发。「已发」现查收件箱的发件幂等键(act:<活动>:<量>:<档>)——那条唯一索引才是真正挡住重复的闸;拿台账当判据会出现「台账说发过、闸说没发过」两个结论。在排除名单里的设备与不够格的行不给按钮(⚠️ 名单里不只有测试机,也有被榜单去重排掉的真实用户第二台设备)。

推广奖励面 介绍来的新用户达标,给推荐人发

推荐人介绍来达标够几档已登记已发还欠操作

发放台账(奖品线下/外部发放,这里只记账)

记一笔奖(上面各榜的「记奖」按钮会帮你填好,核对后提交)
日期奖项奖品获奖者依据状态操作

第三期活动

这一屏只算账和留痕,⛔ 一分钱都不发。 三块都是同一条路:记(存下依据)→ 点(记进这条活动上面的 发放台账)→ 台账那一行的「发到收件箱」才真发货。
⚠️ 台账、冲销都在这一页上面那一节,⛔ 不用跳去别的活动。

① 内测推广 · 点赞阶梯

⛔ 不做对账(朋友圈截图你在讨论区人工看)。填几个赞,这里算该发多少。

参与记录 ·「记」和「点」是两个动作
记 = 存下「谁、几个赞、该拿多少、谁记的、什么时候」(⛔ 不发一分钱, 也不进台账);点 = 记进这条活动的台账;发货仍是台账那一行「发到收件箱」。
⚠️ 同一个号只能有**一笔有效**的参与记录(公告的「仅有一次」就是这道闸)。 记错了 ⇒ 作废那一笔重记;点错了 ⇒ 去上面的发放台账冲销。

② 进军排行榜 · 本周前三

榜第 1 名第 2 名第 3 名
该发的清单 (这一份是活的:榜一变它就变。要发奖,先在下面「记」一份快照)

心魄号身份依据心魄币
周评快照 ·「记」和「点」是两个动作
每周一评:开发侧「记」,你「点」。 「记」= 把当周八个榜的前三封存成一份快照(⛔ 不发一分钱); 「点」= 对着快照里的某一行点一下,记进《活动》页的台账,再发到收件箱。
⚠️ 榜是会变的 —— 不先封存,下周就再也查不回来这一周到底谁前三 (公告让同学们保留周评截图,我们这边也得有自己那一份)。
记错了 ⇒ 作废整周重记;点错了 ⇒ 去《活动》页把那一行冲销。两条通道,别混。

手动改绑介绍人

新用户自填会漏会错(⛔ 邀请码追不到是谁发的,98 张票一张都没挂号)。填错/没填的在这儿直接指定。

③ 充值测试 · 结束时该补的钻石

发币档 = 到手币数 × 10;月卡档 = 月卡钻石总额(1350/张)× 2。 ⚠️「账上实发」只做对账参照,补发按理论值。

心魄号实付到手币币侧补发 月卡月卡补发合计

结算留痕 ·「记」和「点」是两个动作
记 = 把上面那张活表冻成每人一笔(⛔ 不发一分钱,也不进台账); 点 = 记进这条活动的台账;发货仍是台账那一行「发到收件箱」。
⚠️ 已经有有效留痕的号跳过不覆盖 —— 中途记一次、结束时再记一次是安全的, 第二次只补新出现的人。某个人的数字要重记,先把他那一笔作废。
⚠️ 台账单行有上限(10000),一笔大额补发会拆成几行记,每行各自发一次。

总闸 · 这一届现在开着没有

总闸住在远程配置(rules.festival)—— 改完客户端下一次拉配置就生效,⛔ 不用发包。
🔴 活动定义(活动名 / 幕次 / 件 / 价格 / 任务文案)一个字都不在远程配置里: 那份 JSON 是匿名公开的,写进去 = 开幕前全网可见。 它在库表 festival_config,在下面「活动定义」那一栏改。
⚠️ 未成年人模式压过试点放行,顺序不许反。按设备单独放行走 「试点放行」那一屏的 ,⛔ 这一屏改不了(开关只许有一处)。
⚠️ 「压过时间表」是手动的:⛔ 没有「到点自动开幕」这种逻辑, 该开的时候得有人来点。

客户端此刻收到什么

⭐ 这一块不是后台另算的 —— 它就是 GET /v1/festival/state 的回包本身(一台没被试点放行的普通设备)。上下两栏改完点保存, 这里当场跟着变;对不上就说明改的不是同一个东西。
⚠️ 关着的时候这里一个字都不发(活动名 / 幕次 / 块全不带)—— 回包是开幕前唯一一条会被人抓的线。
⚠️ tasks 块在任务引擎接上之前整块不下发: 宁可少一块,也⛔ 不发一屏 0/20 的假进度。


        

活动定义 ·

一届一行。id 同时是节日册的册名(会进客户端的路由参数), 所以只收小写字母开头的字母数字下划线,⛔ 改名请新建一行。
⚠️ 块的种类是发包那一刻定死的契约()—— 发包后只能少不能多。配了认不出的种类,保存这一步就会拦住你; 真漏进去的话客户端是整块丢掉且不报错。
⚠️ 幕次的 starts_at / ends_at 是整数毫秒时间戳。
⚠️ 任务定义住在 tasks 块的 items 里。判据(metric) 只能是这几个: —— 全部是服务端自己写的行,⛔ 成长值 / 心魄值 / 听歌时长那些 是客户端算完上报的,改包就能刷。配错了服务端是整条丢掉, 所以保存这一步会当场拦住你。
⚠️ 件清单不在这里:这一届有哪几件,真源是 道具台账的 series 那一列(填成这一届的 id)—— ⛔ 别在配置里再抄一份,两份必漂。

已经存了这几届

id活动名幕块任务 大小改于谁改的

幕次

key幕名从到现在是它吗

块(客户端照单画)

种类标题里面几条客户端认得吗

整包 JSON

发出去多少

「今天」按运营日切(北京 0 点),跟掉落日闸同一把尺子。

任务 · 领了多少

判据一律落在服务端自己写的行上(掉落 / 灵田 / 镖局 / 开箱 / 送礼流水)—— ⛔ 成长值、心魄值、听歌时长那些是客户端算完上报的,改包就能刷。
⚠️ 一个账号一条任务一天只领得到一次(换台手机也不行), 所以「今天领了几次」= 今天有几个人做完了这条。

任务 id文案判据(metric)目标 奖今天领了累计领了多少人领过

任务 · 按日领取

🔴 这里统计的是「领取」(festival_task_claims 一次领取一行)—— 做完了没点领取的人看不见。格子 = 当天领了这条的人数(按账号去重),小字是发出去的宝箱数。
⚠️ 一次性任务(once,整届一次)不属于任何一天,单独在「一次性」那一栏(整届累计); 当天汇总里「一次性」那一行按领取时刻切运营日另算。双节没有「领满额外奖励」那一类,那一格是「—」。

双节宝箱按来路

来路(reason)今天发累计发涉及多少人

限定件

资产键指纹名字档状态 心价? 合成片数 合出? 买到? 直购单数? 花了 总共到手此刻在手 多少人有? 碎片还剩?

节日册进度分布

点亮几格多少人

回收折算

关灯那天把没用完的活动碎片折算掉 · 会真发货

先干跑(默认就是干跑):给出「会动多少人、折出多少」的数, 一个字节都不写库。把数交主理人看过,再回来真跑。
🔴 真跑发出去追不回来,所以要把活动 id 手打一遍才点得动。
⚠️ 干跑是单进程的 —— 它证明不了并发下的样子。真跑完去回查库, ⛔ 别只看返回码。


          

邀请码(内测准入门票)

网页注册

心魄号来源登录名昵称邀请码 介绍人已装设备邮箱注册时间

票码备注激活创建状态操作

通知通道

绑定飞书自定义机器人或 Telegram bot 之后,用户反馈、异常告警、发币回执都会推到那里 (两个都绑就两边都发)。凭证只回显末 4 位;输入框留空点保存 = 清掉后台里这一项,退回环境变量 HP_FEISHU_* / HP_TELEGRAM_* 兜底。每次改动写 op_log(action=notify_setting,只记掩码)。

飞书自定义机器人

Telegram bot

发送记录(最近 20 条)

时间类型级别通道结果详情

疯狂碎片 · 超级奖励模式

积累池 池子是**计数器不是奖金袋** —— 奖品是固定额,池子只决定什么时候触发。 阈值是**倍数**,开出「超级大奖」那一档才全服清零(跑完没开出 ⇒ 继续累积)。 🔴 这几个数一个都不许下发给客户端。

档本轮累计下一次触发线还差 本轮已触发开服至今抽水累计触发清过上次清零

成本口径 期望支出按**每人抽一次**算(N 人局 = N 次)。宝箱成本是现算的, 跟红线哨兵同源。

档阈值(币)阈值(钻)匣子数 单人期望支出N=5 期望N=5 占阈值

最近几局 逐人一行:他点了哪个匣、开出什么、是不是超时代开。 ⚠️ 点哪个匣**不决定**开出什么(按钮是表演,结果由概率表现掷)。

心魄迷局

按配比分组 规则整套挂远程配置(rules.room_game,保存即生效);这张表是调参数的依据。 守方胜率的分母**不含**「没有胜方」的局。

配比局数守方胜蚀心胜无胜方 守方胜率平均轮数平均局长中立达成发奖

此刻生效的四档 改这些不用发版:运营 manifest 的 rules.room_game。一局开始后就锁死在 config_json 里,改配置不影响进行中的局。

人数阵营角色首夜平安阶段时长信息口径
点一行看单局详情(players 快照 / 每夜行动 / 每轮票型 / 平票次数 / 每阶段时长 / award_skip)
局房主开局结束人数配置 状态结束原因胜方奖励

客厅台球

近 24 小时局数客厅好友球房欢乐场发奖跳过

命中率打标(近 7 天)

真人对局里非开球杆的合法进球率;判据只在服务端(rules.billiards.flag),这里只照着列。只打标、不拦截、不扣奖励。

心魄号最近打标日杆数进球进球率

闯关 · 关卡管理

底库关来自 billiards_levels.json;这里新增 / 改的关存数据库,不用发版,客户端按服务端下发的关数显示。 新增 / 改一关必须先让服务端机器人真打一遍:在 limit 杆内打不过、三星线 par 低于机器人杆数、球位重叠都会被拒。 下架 = 玩家看不到、开不了局,解锁顺延到下一个上架的关;已拿的星与首通钻不动。每 10 关一章,每章第 10 关是章末关(首通钻按章末价)。

选一颗球,再点球台摆放(0 = 母球,8 = 黑八):
目标球(要全部打进才过关):
随机出一盘当底稿 / 从现有关复制
关章来源目标limit / par机器人难度画像状态操作

镖局股份(心魄镖局股)

用户拿心魄钻石申购份额,池子当围镖的承兑方:围镖的钱有一部分进池子、押中了由池子赔。 净值随每一笔围镖的下注与结算连续变动。池子自己一颗钻都不造:余额跟台账上各类转账对不上就是事故, 对账由服务端算、页面只照着染色。
⭐ 运营真正在调的那个数是承兑比例(underwrite_bp,管的是发行量): 收益 = 抽水率 × 这个比例 × 当天真实成交额 ÷ 池子 —— 冷清的日子接近 0,有人押中大的那天是负的。 ⛔ 这里没有「目标日收益」(2026-09-10 撤:那个键是把一个每天瞄准 0.5% 的收益率旋钮当公示发出去, 等于承诺;现在只剩一条可选的上轨 max_daily_yield_bp,默认 0 = 不设)。 人工接管填了数就直接用它、忽略公式 —— 出事时一句话把自动化关掉,不用发版。 关总闸 = 停申购、停承兑、仍可赎回(关功能不等于扣钱)。

建议承兑是服务端按公式现算出来的(⛔ 不让运营自己乘除);今日生效是 0 点落下去的那个 (单日最多变 ±5 点、人工接管压过公式)。涨跌一律按昨收算 —— 盘中净值几乎不动,按今开算恒等于 0。 前台用户看到的每个数(净值 / 承兑 / 池子 / 持仓)这里都有同名字段,能一屏对照。

今日池子净收支

旋钮(rules.escort_shares · 不用发版)

万分比(bp):100 = 1%,2500 = 25%。逐键覆盖:每一格进来时填的就是生效值,保存只动你改过的那几格。 留空 = 这一格不动(⛔ 不再是「回默认」—— 从前那种整节覆盖会把界面上没有格子的键悄悄抹掉)。
🔴 什么时候生效:承兑比例 / 日收益上限 / 承兑上限 / 承兑下限 / 单日最多变 / 取几日均 这六格 明天那一档才按新值算(今天的比例开盘时就落盘了,⛔ 不会重算);今天要当场改走 🔴 人工接管那一格。其余各格即时生效。
⚠️ 承兑下限别调低(整数舍入会让净值变成噪音);按最坏赔付留底别关(关掉 = 挤兑时池子会欠钱)。 标着未接线的键登记了但还没接线,拧了不会有反应。

交易时段(rules.escort_shares.market)

分钟数(北京):540 = 09:00,1440 = 24:00(右开界,口径同 escort.close_min)。休市日与调休日成对维护(中国调休会把某个周六变成交易日)。 锁定分钟是确定性措施不是风控(FIFO 队列要可复现)。

纠正通道

手动收口:立刻跑一次开盘 / 收盘 / 比例 / 快照(幂等,平时后台每分钟自己跑)。 校正池子余额:往池子里加一笔带操作人与原因的 adjust 行(⛔ 不伪装成正常流水,对账里单列)。 作废一行:在下面台账里对申购 / 赎回那一行点「作废」——反向再记一行 + 钱包反向一笔,幂等。承兑行不从这儿改。

隔夜委托

单号心魄号方向数量挂单时刻状态成交净值

日 K(最近 14 个交易日)

交易日开高低收昨收跳空涨跌(按昨收)状态

台账(最近 200 行)

时间种类谁池子 ±钻份额 ±成交净值围镖单费操作人

登录账号

用户名:

二次认证:

修改密码