按需求调整:原「待领池上限 = 本层需求 100%,超出部分按 30% 转灵石」 的设计从未真正给玩家发放过灵石(只累加了一个 overflow_converted 统计 字段,没有任何加灵石动作),属于名不副实的死逻辑,现整体取消。 - core/offline.py:删除 PENDING_CAP_RATIO / PENDING_OVERFLOW_RATIO / CLAIM_OVERFLOW_RATIO 三个常量及 settle/claim 中的封顶与折算逻辑; 删除 OfflineState.overflow_converted 字段及其序列化;待领池修为 完整沉淀、不设上限,领取时超出本层需求的部分由 add_exp 截断后 完整留池(突破后继续领,不丢失、不折算) - tests:改写 test_pending_pool_capped_and_converted 为 test_pending_pool_uncapped(验证不封顶)+ 新增 test_claim_overflow_stays_in_pool(验证超出部分留池) - overview.md:为历史变更日志加注记,标明该设计已取消 验证:317 项回归测试全绿(+1);全库无残留常量/字段引用。 Co-Authored-By: Claude <noreply@anthropic.com>
文字修仙 —— 可扩展修仙文字游戏框架
纯 Python 标准库实现,无第三方依赖。目标不是做一个完整的游戏,而是搭一套能长出来的骨架:
境界、属性、修炼、突破、机缘、丹药、存档七个基础模块已经跑通;战斗、渡劫、门派、装备、功法、技能、炼丹、秘境、任务、坊市作为「可插拔系统」示范接入方式。
境界已扩展为凡界九境 + 仙界九境(渡劫圆满飞升人仙,飞升不是终点——法无止境,仙是修不完的)。
定位挂机养老:闭关挂机(idle 自动打坐-休息循环、CLI 空回车即打坐)+ 离线收益(读档按真实流逝时间结算,收益与手动打坐完全一致)。
快速开始
./run.sh # 一键启动(自动选 Python 3.10+,交互模式)
./run.sh web # Web 版:手机/电脑浏览器试玩(同网访问)
./run.sh --name 李青玄 # 自定义角色名
./run.sh demo.py # 无交互演示核心循环(固定种子,可复现)
./run.sh -m unittest discover -s tests -v # 251 项内核回归测试
本机已通过 Homebrew 提供
python命令(3.14.5,指向python3),直接python main.py即可;若换机器遇到command not found或语法错误,用run.sh自动挑选 Python 3.10+(macOS 自带/usr/bin/python3是 3.9,不支持本项目语法)。
手动指定解释器(需 Python 3.10+,用到 X | Y 类型语法):
python main.py --name 李青玄 # 进入交互模式
python main.py --load 1 # 读取 1 号存档
python demo.py # 演示
目录结构
xiuxian/
├── config/ 纯数据层:改数值不用动逻辑
│ ├── realms.py 境界表(凡九+仙九共十八境 / 小境界 / 修为需求 / 突破率 / 寿元 / 仙劫名目)+ 地点灵气表 + 境界铭文 + 境界神通表
│ ├── items.py 物品与丹药表(效果、价格、突破加成、丹毒、装备加成、药品阶)
│ ├── arts.py 功法表(品阶、门槛、加成、熟练度上限与练成速度、签名技能)
│ ├── skills.py 技能表(四类技能、消耗比例、冷却、威力、反噬、施放文案)
│ ├── recipes.py 丹方表(材料、基础成功率、门槛、耗时、售价)
│ ├── dungeons.py 秘境表(层数、层内抽签权重、宝箱池、通关大奖)
│ ├── companions.py 道侣表(4 位道友、情分缩放加成、赠礼喜好)
│ ├── estates.py 洞府表(凡居→洞天,修炼加成、维护费、荒废)
│ ├── assets.py 产业表(灵田/矿脉/丹铺/商队,每日产出与增资)
│ └── masters.py 师长表(3 位师长、职位修炼场地加成、指点)
├── core/ 内核:不依赖任何具体玩法
│ ├── attributes.py 属性面板:base + Modifier(add/mul)双层修正
│ ├── cultivator.py 修士实体(境界、修为、气血灵力精力、背包、状态)
│ ├── cultivation.py 修炼与突破系统
│ ├── numfmt.py 大数格式化(万/亿/万亿/兆/京),修为/属性显示防膨胀
│ ├── effects.py 效果 DSL 执行器(exp/hp/item/buff/flag/attr…)
│ ├── event_system.py 剧情事件系统(数据驱动,读 data/events.json)
│ ├── inventory.py 背包与丹药服用(含丹毒机制)
│ ├── base_system.py 玩法系统基类 + 事件总线 + 命令描述
│ ├── bonus.py 全局加成聚合器(法财侣地师统一聚合成一条 Modifier)
│ ├── offline.py 离线收益引擎(UTC 基准、待领池、幂等、异常防护)
│ ├── time_governor.py 时间预算闸门(游戏时间 ≤ 现实时间×10,防刷修)
│ ├── game.py 世界状态容器、时间推进、系统编排
│ ├── save.py 存档读档(版本号 + 迁移钩子 + 原子写入)
│ └── rng.py 可存档随机源
├── systems/ 可插拔玩法(挂载即用,卸掉也不影响内核)
│ ├── equipment.py 装备:六部位穿脱,属性经 Modifier 即时生效
│ ├── arts.py 功法:多件装备、数据驱动效果、熟练度缩放威力
│ ├── skill.py 技能:修习功法即得签名技能,战斗中按预设策略自动施放
│ ├── alchemy.py 丹道:采药、换购丹方、开炉炼丹、品阶判定、造诣累积
│ ├── dungeon.py 秘境:线性层数推进、层内抽签、战败退层、通关冷却
│ ├── combat.py 回合制斗法 + 注册 battle 效果供事件调用
│ ├── tribulation.py 渡劫:金丹以上突破前先过天劫
│ ├── sect.py 门派:七大派、入门、日俸、贡献、晋升、门派功法、修炼场地
│ ├── quest.py 任务:订阅战斗/事件/突破计数,按门派累声望,目标达成自动交付
│ ├── market.py 坊市:买/卖/价格每日浮动,给灵石消费出口
│ ├── duel.py 论道:切磋换修为(每日 5 场)
│ ├── estate.py 洞府:购置/扩建/维护(地)
│ ├── asset.py 产业:灵田矿脉丹铺商队(财)
│ ├── companion.py 道侣:结识/双修/赠礼/并肩对敌(侣)
│ ├── tianjiao.py 天骄榜:NPC 排名竞技、每日俸禄、胜则互换名次
│ └── inner_demon.py 心魔劫:跨大境界突破后三选一心境考验
├── ui/ 表现层(换 Web/GUI 只改这里)
│ ├── panel.py 渲染函数
│ ├── cli.py 终端命令循环
│ └── web/ Web 组件化资源(移动端复用基础)
│ ├── tokens.css 设计令牌:颜色/间距/字号/圆角/阴影/层级(CSS 变量)
│ ├── app.css 组件样式:卡片/进度条/属性格/标签/行动条/文字流/Toast + 三档响应式断点
│ ├── app.js 组件逻辑:renderStatus/appendFlow/toast,window.UI 组件 API
│ └── page.html 页面骨架(含 /*TOKENS_CSS*/ 等占位符,web_server 启动时内嵌)
├── factory.py 装配工厂:create_game / load_game / default_systems
data/events.json 剧情事件表(新增剧情只改这个文件)
data/quests.json 任务定义表(id、门派、目标、奖励、声望门槛,新增任务只改这个文件)
demo.py 最小可运行示例
main.py 命令行入口
web_server.py Web 版(加载 web/ 组件化页面,零依赖单文件可运行)
run.sh 一键启动(CLI / Web / demo / 测试)
tests/test_core.py 内核回归测试
依赖方向严格单向:ui → systems → core → config,反向依赖一律不允许。
各模块作用
| 模块 | 职责 | 关键接口 |
|---|---|---|
config/realms.py |
定义十八个大境界(凡九炼气→渡劫 + 仙九人仙→混元)、每境界的小层数、修为需求曲线、跨境界基础成功率、寿元、境界铭文、仙劫名目、境界神通表 | RealmRegistry.get/next_realm/stage_exp_required/global_stage_index、REVELATIONS、POWERS、power_of() |
config/items.py |
物品字典,声明类型、可否服用、效果、突破加成、丹毒、装备部位与加成 | get_item(id)、EQUIP_SLOTS |
config/arts.py |
功法字典,声明品阶、价格、境界门槛、加成、熟练度上限与练成速度、签名技能 | get_art(id)、scaled_bonus(art, prof)、proficiency_scale(prof, max) |
config/skills.py |
技能字典:四类(攻伐/疗伤/护体/回灵)、消耗比例、冷却、威力、自伤比例、施放文案(cast) | get_skill(id)、scaled_power(skill, scale)、SKILL_KINDS |
config/items.py(品阶) |
丹药下/中/上品:中品即基表,下品上品由程序派生,药效 70%/100%/140% | GRADES、graded_id()、parse_graded()、make_grade_variant() |
config/recipes.py |
丹方字典:材料、基础成功率、境界门槛、耗时、灵力精力、售价 | get_recipe(id)、STARTING_RECIPES |
config/dungeons.py |
秘境字典:层数、每层抽签权重、境界门槛、宝箱池、通关奖励与冷却 | get_dungeon(id)、unlocked_for(realm) |
core/attributes.py |
属性面板。装备、功法、buff、门派加成统一走 Modifier | AttributeSet.value/grow_base/add_modifier/tick |
core/cultivator.py |
修士实体,只管「我是谁、什么状态」,不含规则 | roll_cultivator()、add_exp/heal_hp/damage/exp_required |
core/cultivation.py |
修炼产出修为;突破判定、成功跃迁、失败反噬;闭关挂机(自动打坐-休息循环);后台周天运转(被动修炼) | CultivationSystem.cultivate/rest/breakthrough/idle/success_rate/pill_info |
core/effects.py |
把声明式效果作用到角色,事件/丹药/掉落共用一套语法 | apply_effects(game, effects) |
core/event_system.py |
按地点事件率抽事件,校验条件与选项前置,结算效果 | EventSystem.trigger/choose/check_conditions/check_require |
core/inventory.py |
物品增删查、服用、丹毒累积 | Inventory.add/remove/use/has |
core/game.py |
世界状态、时间推进与跨日结算、系统装配、命令聚合 | Game.advance_time/travel/add_system/register_effect/to_dict |
core/save.py |
JSON 存档,含版本号与迁移表,写入走临时文件原子替换 | SaveManager.save/load/list_slots/delete/migrate |
systems/equipment.py |
装备穿脱与属性注入,按前缀幂等重建,读档自动恢复 | EquipmentSystem.equip/unequip/rebuild/info |
systems/arts.py |
功法修习、主修切换、熟练度累积与缩放,注册 art 效果 |
ArtSystem.learn/set_main/practice/gain_proficiency/rebuild |
systems/skill.py |
技能:汇总已修习功法的签名技能,按策略决定本回合放什么,负责扣灵力与计冷却 | SkillSystem.known/choose_action/begin_battle/next_round/end_battle/info |
systems/alchemy.py |
丹道:采药、丹方换购、开炉判定、品阶分档、造诣累积,注册 recipe 效果 |
AlchemySystem.gather/learn/refine/rate_of/furnace_bonus |
systems/dungeon.py |
秘境:进入、深入、退层、退出与放弃,进度可续,注册 dungeon 效果 |
DungeonSystem.enter/next/flee/abandon/catalog |
data/quests.json |
任务定义表:门派、目标(战斗/事件/突破计数与过滤)、奖励、声望门槛、是否一次性 | get_quest(id)、QUESTS、ObjectiveDef |
systems/quest.py |
任务:开局自动接取可用任务,订阅总线计数,达成自动发奖励并按门派累声望,声望跨门槛解锁高阶任务 | QuestSystem.overview/accepted/reputation/_auto_accept |
systems/market.py |
坊市:买入/卖出/价格每日浮动(夹在基准价 [0.5,1.8] 倍),卖出价为买入价 0.6 倍,买卖不耗时间 | MarketSystem.buy/sell/catalog/buy_price/sell_price |
core/bonus.py |
全局加成聚合器:法/财/侣/地/师各来源按效果类型声明的叠加规则统一聚合,属性类注入一条 bonus:total Modifier |
BonusAggregator.add/value/rebuild、Game.rebuild_bonuses() |
core/offline.py |
离线收益引擎:UTC epoch 基准、待领池(本层已满留池)、幂等结算、时间回拨/超长截断等异常防护 | OfflineEngine.settle/claim_pending |
core/time_governor.py |
时间预算闸门:游戏时间推进 ≤ 现实时间 × 10(TIME_RATIO),防刷按钮刷修为 |
TimeGovernor.consume/sync |
systems/duel.py |
论道切磋:胜得修为 4%、负 2%,每日 5 场(精力 + 每日限额双约束) | DuelSystem.duel/daily_left |
systems/estate.py |
洞府(地):购置/扩建/维护,品阶凡居→洞天修炼 +5%→+45%,付不起维护则荒废 | EstateSystem.buy/upgrade/pay_maintenance |
systems/asset.py |
产业(财):灵田/矿脉/丹铺/商队每日产出灵石与材料,可增资升级(线性成长) | AssetSystem.upgrade/collect/day_end |
systems/companion.py |
道侣(侣):结识 4 位道友、双修/赠礼/并肩对敌涨情分,加成随情分 0.5→1.0 缩放 | CompanionSystem.meet/dual/gift |
systems/tianjiao.py |
天骄榜:10 位 NPC 天骄排名竞技,胜则互换名次,每日俸禄按名次、每日 3 战 | TianjiaoSystem.list/fight/allowance |
systems/inner_demon.py |
心魔劫:跨大境界突破成功后 30% 触发,三选一(正道/歧途/超脱)效果 DSL 结算 | InnerDemonSystem.maybe_trigger/choose |
web_server.py |
Web 版:纯标准库 HTTP 服务,启动时加载 ui/web/ 组件化页面(双栏面板 + 叙事文字流 + 行动按钮 + 底部行动条),Cookie 会话隔离、异常兜底 |
GameSession.command/status/actions、player_data()、_load_page() |
ui/web/tokens.css |
设计令牌:颜色/间距/字号/圆角/阴影/z-index 全 CSS 变量——移动端复用基础 | --c-*、--space-*、--fs-*、--radius-* |
ui/web/app.css |
组件样式:StatusCard/StatBar/StatGrid/TagList/ActionBar/FlowLine/Toast + 三档响应式断点,零裸值 | 组件类 .card/.stat-grid/.tline/.toast 等 |
ui/web/app.js |
组件逻辑:状态渲染/文字流/Toast,暴露组件 API | window.UI.renderStatus/appendFlow/toast/classify/sendLine |
systems/*.py |
其余玩法模块,订阅总线、注册命令、注册自定义效果 | 见下节 |
核心数据结构
# 属性:最终值 = (base + Σadd) × Πmul
Modifier(source="buff:悟道", add={"comprehension": 3}, mul={"comprehension": 1.3}, hours_left=72)
# 修士:大境界 + 层 + 当前层修为进度
Cultivator(realm_key="qi_refining", stage=2, exp=47.5, total_exp=...)
# 事件:条件 + 权重 + 选项(选项带前置条件与效果)
EventDef(id, title, text, weight, conditions, choices=[ChoiceDef(id, text, effects, require)])
# 效果(dict 形式,事件 JSON 与物品表共用)
{"type": "exp", "value": 260}
{"type": "attr", "key": "physique", "value": 2}
{"type": "item", "id": "spirit_water", "count": 1}
{"type": "buff", "id": "spring", "name": "灵泉洗髓", "hours": 96, "mul": {"comprehension": 1.15}}
{"type": "battle", "tier": "normal"} # 由战斗系统注册的自定义效果
{"type": "art", "id": "qingxin", "proficiency": 150} # 由功法系统注册,用于传功
{"type": "recipe", "id": "cleansing_pill"} # 由丹道系统注册,用于传丹方
{"type": "dungeon", "id": "luoyun", "floor": 2} # 由秘境系统注册,直接送入某层
{"type": "poison", "value": -15} # 清毒丹:负的丹毒即化毒
装备与功法
两者共用同一套机制:挂载 → 注入 Modifier → 按 source 前缀幂等重建。
最终属性 = (base + Σadd) × Πmul
穿青锋剑 -> add_modifier(Modifier(source="equip:weapon", add={"atk": 6}))
卸下 -> remove_modifier("equip:weapon")
主修清心诀 -> add_modifier(Modifier(source="art:main", add={"max_mp": 12}, mul={"comprehension": 1.09}))
因为战斗、修炼、渡劫读的都是 p.atk / p.max_hp 这类派生属性,装备与功法不需要任何适配代码就自动生效。前缀(equip: / art:)的意义在于读档后可以整批清掉旧修正器再按存档重建,避免残留。
六个部位:兵器、护甲、靴履、佩饰、腰带、法宝。同部位换装自动卸下旧的回背包;越阶装备(如玄铁重剑需筑基)穿不上。
熟练度缩放:功法到手只有六成效力,练满才十成。
add_effective = add × (0.6 + 0.4 × 熟练度/上限)
mul_effective = 1 + (mul - 1) × (0.6 + 0.4 × 熟练度/上限)
熟练度由打坐(订阅 practice)与斗法取胜(订阅 combat_victory)累积,也可以 art practice 专修。高阶功法 practice_gain 更低——天阶大衍周天诀 ×0.5,练成耗时是黄阶清心诀(×1.4)的三倍多,形成「早换早受益」与「高阶后劲足」的取舍。
技能(功法的主动技能)
修习功法即得该功法的签名技能,威力按这门功法的熟练度缩放——刚学会六成,练满十成,与属性加成共用同一条 proficiency_scale。所以「换更强功法」不等于立刻变强,取舍逻辑前后一致。
| 功法 | 签名技能 | 类型 | 消耗 | 冷却 | 满熟练威力 |
|---|---|---|---|---|---|
| 清心诀 | 清心咒 | 疗伤 | 灵力 18% | 3 回合 | 回复气血 22% |
| 庚金剑诀 | 庚金一击 | 攻伐 | 灵力 10% | 2 回合 | 190% 普攻 |
| 玄龟镇海功 | 玄龟护体 | 护体 | 灵力 12% | 2 回合 | 减伤 45% |
| 赤焰焚天诀 | 焚天斩 | 攻伐 | 灵力 16% | 4 回合 | 260% 普攻(自伤 6% 气血) |
| 太虚养神功 | 太虚回灵 | 回灵 | 不耗灵力 | 5 回合 | 回复灵力 28% |
| 大衍周天诀 | 周天星斗 | 攻伐 | 灵力 20% | 3 回合 | 290% 普攻 |
为什么是「自动施法 + 策略预设」而不是回合手动选技能:fight(enemy) -> list[str] 是非交互式契约,一次调用打完全场返回日志,调用方有四处——事件 {"type":"battle"}(自动开战,无处输入)、hunt 命令、dungeon.next()、测试与推演脚本。改成回合手动会让这四处全部失效。因此决策权交给玩家预设的策略,战斗仍是一次调用打完。
三档策略的差别全在「什么时候舍不得」:
| 策略 | 治疗线 | 护体线 | 灵力保留 | 推演表现(seed=2026,400 日) |
|---|---|---|---|---|
| 保守 | 气血 55% | 70% | 留 40% 不动 | 零战死,但 ~2% 的战斗打满 40 回合仍未分胜负 |
| 均衡 | 35% | 45% | 留 20% | 战斗比无技能快约 15%,无战死 |
| 激进 | 25% | 不放护体 | 倾泻 | 结束最快,但推演中出现过 1 次战死 |
消耗与产出一律按比例,不写绝对值。 灵力上限跨五个数量级(开局 40 → 炼气 220 → 渡劫 1173 万),写 mp_cost=20 在炼气是 9% 的蓝条、到渡劫只剩 0.0002%——和「灵石挂在指数增长量上结余 288 亿」「秘境修为写固定值在炼气能飞升」是同一类坑。按比例后实测庚金一击在九个境界都恰好是蓝条的 10.0%。
回灵不耗灵力是刻意的:它是「灵力见底」这个死局的出口,代价是让掉一回合,所以必须恰好在最需要的时候能放出来。
残血时不放护体(任何策略):敌人快死了,减伤救不了你,多点输出才能结束战斗。不这么处理,保守档会一路护体到打满 40 回合。
满血不放疗伤:攻击技能都在冷却时,若八成药力落不进去(会溢出)就宁可普攻,否则日志里会出现「气血回复 1(60/60)」这种白让一回合的操作。
技能系统是可选装配的:战斗侧只做 game.systems.get("skill"),取不到就完全按原样普攻。卸掉技能系统后,事件自动战斗、秘境推进、既有测试与推演脚本行为分毫不变(有专门的测试守着这条)。
文字质感(文字即玩法)
本作的核心不是「用文字凑合出画面」,而是让文字本身成为乐趣:数值与判定是骨架,文案是血肉,且两者严格分离——换文风只改数据层,不动一行逻辑。
战斗日志叙事化。 战斗不再是「你击中 青纹狼,造成 12 点伤害」的数值简报,而是每回合从词库抽一个动作前缀组成的叙事流:
寒光乍现,你击中 青纹狼,造成 13 点伤害,剩余 30
你施展【庚金一击】,一道庚金剑气凝于剑尖,锐啸破空,直贯 青纹狼 要害。青纹狼 受到 22 点伤害,剩余 0
青纹狼 发出一声悲鸣,缓缓倒地不起。
词库(systems/combat.py 顶部 PLAYER_STRIKE_FLAVOR / ENEMY_STRIKE_FLAVOR / VICTORY_LINES 等)可自行扩充,加条目即生效。
技能施放文案在配置里。 每门签名技能的施放描写写在 config/skills.py 的 cast 字段,attack 类支持 {enemy} 占位(str.format 渲染)。第三方/事件发放的功法若没配 cast,自动退回通用句式,战斗不受影响。
境界铭文。 每踏入一个大境界,突破日志里多一句该境界的意境描述(config/realms.py 的 REVELATIONS,凡九 + 仙九共十八句全齐):「金丹碎裂,一道元婴自识海踏出,从此夺舍避死、神通自成。」小境界升级不打扰。渡劫圆满突破人仙有专属横幅「霞光万道,天门洞开」,铭文即飞升叙事。
锚点词约束(这条是测试守着的)。 文案可以随便改,但保留几处机器依赖:普攻行含「你击中」、技能行含「施展【」、受击行含「反扑/受到/剩余」、胜利行含「倒地不起」——demo、推演脚本、自动化测试都靠它们辨认行为。词库与文案消耗的是与战斗判定同一个随机源,因此同 seed 输出依旧完全可复现;文风改造不改变任何数值公式与判定规则。
丹道(炼丹)
闭环是 采药 → 换购丹方 → 开炉 → 成丹(分三品)。没有采药,炼丹就是无米之炊,所以 dan gather 是这个系统的上游。
成功率(每次开炉都把算式打在日志里,不藏黑箱):
成功率 = 夹在[5%, 95%]( 丹方基础
+ 造诣 × 2% ← 上限 12 点,即 +24%
+ (悟性 − 10) × 1.5%
+ 气运 × 0.4%
+ 丹炉加成 ) ← 紫砂药鼎 +6% / 朱雀丹炉 +12%
品阶由「火候」而非二段掷骰决定:掷点低于成功率即成丹,低得越多火候越足。
品质值 = (成功率 − 掷点) / 成功率 + 火候修正(造诣 × 2% + 丹炉,上限 +20%)
品质值 ≥ 66% → 上品(药力 140%) ≥ 33% → 中品(100%) 否则下品(70%)
分工是刻意的:成败看悟性气运,火候看手艺与家伙。若品阶只由归一余量决定,那它必然均匀分布,造诣与丹炉就只剩「少废几炉」的意义了。零造诣无丹炉时三品各占三分之一;练满配朱雀丹炉后上品过半、下品近乎绝迹。
品阶不手抄三份表——config/items.py 只写中品基表,下品/上品用 dataclasses.replace 程序化派生(id 带 #low / #high 后缀),药效、丹毒、价格、突破加成按倍率一起缩放。中品即基表 id 不变,老存档与掉落表完全兼容。
不炸炉:失手只损材料(每种退回一半,向下取整),不损装备、不掉修为境界、不伤气血,但精力灵力照耗、时间照走。失败也给三成修为和 0.4 点造诣——「虽未成丹,火候上总算有了点心得」。
丹毒与清毒丹:上品药力猛、丹毒也重(140%),嗑得越猛药效越差(最低保留 30%)。清毒丹方不进药力专化丹毒,是这套负反馈的泄压阀。
秘境(秘境探索)
五座秘境按境界门槛依次解锁:落云秘境(炼气)、万兽深渊(筑基)、太虚洞天(金丹)、瑶池仙园(人仙,飞升后第一个仙界秘境)、万劫云海(金仙)。形态是线性层数推进——每层随机抽「妖兽 / 机缘 / 遗宝 / 静室」四种签,最后一层固定守关之敌,击倒给一次性厚赏并进入冷却。
难度靠 tier 不靠层数。敌人属性按玩家境界等比缩放(combat.spawn),所以「第 7 层」和「第 1 层」若同 tier,打起来一样难。秘境难度只由层内 tier(weak → normal → elite → boss)拉开,层数只是 tier 的载体。
四条规则:
- 层内抽签 —— 每层按权重抽类型;机缘层走
EventSystem且限定scene: dungeon,不会在洞天里撞见「宗门招徒」这类户外事件 - 进度可续 ——
dungeon flee随时退出,回来dungeon enter从原层继续;通关后按冷却日数方可再入(也可dungeon abandon放弃进度换取提前重入) - 战败退一层 —— 濒死护持后被打退一层,已得之物不吐出来,不掉装备境界;退层即整备(回 25% 气血),防残血连败的死亡螺旋;连败三次明说「此处非你眼下能撼动」
- 奖励走效果 DSL —— 宝箱与通关大奖复用
core/effects.py,修为一律用exp_ratio(按当前境界需求比例)而不是绝对值——写固定值在炼气期能直接飞升、到渡劫期等于零,和「灵石挂在指数增长量上」是同一类坑
战场在秘境里会失真:fight() 只返回日志、不返回胜负,秘境靠订阅 combat_victory 总线标记胜负;战后气血低于 11.5% 判「败退」而非「平局」。精力门槛在深入前自己先查——fight() 缺精力会直接 return 且敌人满血存活,会被误判成战败退层。
飞升与仙界(飞升不是终点)
凡界九境(炼气 → 渡劫)之后直接接仙界九境(人仙 → 地仙 → 天仙 → 玄仙 → 金仙 → 太乙 → 大罗 → 准圣 → 混元),渡劫圆满突破即飞升——仙界就是 config/realms.py 里追加的九行数据,渡劫的 next_realm 天然指向人仙,突破路径零特殊分支,只有横幅与铭文是专属的(「霞光万道,天门洞开——你飞升仙界!」)。
凡界:炼气九层 → 筑基 → 金丹 → 元婴 → 化神 → 炼虚 → 合体 → 大乘 → 渡劫
↑ 金丹以上跨境界突破先渡天劫
飞升:渡劫圆满 → 【霞光万道,天门洞开】→ 人仙初期
仙界:人仙 → 地仙 → 天仙 → 玄仙 → 金仙 → 太乙 → 大罗 → 准圣 → 混元
↑ 跨境界继续渡劫,名目随境界分层(仙劫 → 天衰之劫 → 道心劫 → 斩三尸 → 合道大劫)
仙劫分层:仙界跨境界突破沿用渡劫机制(同一条 before_breakthrough 判定),劫名按目标境界数据驱动(RealmDef.tribulation)——低阶仙境渡「仙劫」、天仙起「天衰之劫」、金仙起「道心劫」、大罗进阶「斩三尸」、准圣→混元「合道大劫」。机制只换文案与名目,判定、失败拦截、劫余 buff 全部复用。
仙界修炼产出与顿悟:修炼产出在仙界每境 ×3(凡界 ×1.6),仙界「仙缘」更盛——顿悟比例 8% → 12%。顿悟按每 4 时辰判定一次(不再是一次打坐一骰):挂机 cultivate(24) 与手动 cultivate(4)×6 收益一致,操作粒度不产生 6 倍差。
寿元是纯展示:挂机养老定位,age 随年增长、寿元随境界提升,但不因寿元耗尽而陨落(game.py 不判定死亡)。仙界寿元写「与天同寿」级大数。
仙界内容(第二十五批填坑):凡界 24 批打磨完后,仙界是「数值衔接但内容空白」的断层——境界/神通/铭文/劫名都有,唯独缺配套。本批补齐:
| 仙界内容 | 说明 |
|---|---|
| 仙界秘境 | 瑶池仙园(人仙起步,5 层)、万劫云海(金仙起步,5 层);守关/宝箱奖励全走 exp_ratio(按仙界需求比例,防后期归零),灵石锚定入门境界一场战利量级 |
| 仙阶功法 | 太虚剑典(攻伐)/ 周天妙法(挂机修炼)/ 破虚诀(突破)/ 混元一气诀(全能,太乙起);走已预留的「仙 480」品阶预算,validate_balance 自检 |
| 仙界地点 | 瑶池(灵气 ×4.5)、万劫云海(×6.0),带 min_realm 门槛,飞升前 travel 被拦,防白嫖高灵气 |
| 仙界丹药 | 蕴仙丹(修为 8% 需求)/ 破境仙丹(突破 +15pp~6pp,跨全仙界 9 境);配套 2 张仙阶丹方 + 仙材(仙兽内丹/仙草) |
| 仙阶装备 | 六部位,min_realm="human_immortal",掉落池按境界自动筛(人仙/金仙 6 件,炼气 0 件) |
仙界深度重构(第二十七批):第二十五批解决了「内容空白」,但仙界仍是纯数值爬坡——实测凡界 74 日/境、仙界也是 74 日/境,飞升毫无体感差异。根因是产出挂「本层需求比例」⇒ 每层耗时 ≈ 常数,仙界密度↑被 exp_growth↑ 恰好抵消,硬拉数值无效。本批改为双轴成长:
| 轴 | 驱动 | 产出 | 效果区 |
|---|---|---|---|
| 境界轴(纵向) | 打坐 | 修为 | 加区 grow_base(每境属性约 ×4) |
| 法则轴(横向) | 悟道 | 感悟 | 乘区 attr_mul(偏移相加,非连乘) |
法则刻意走乘区——若也走加区,会被境界的指数成长稀释,玩家感受不到差异。仙界突破改为双条件:修为 AND 法则门槛;仙界打坐 13~15 日即圆满,剩余时间全在悟道,「仙途漫漫」由玩法自然产生。
| 仙界系统 | 说明 |
|---|---|
| 法则(八条 × 五阶) | 金(攻)/木(气血)/水(灵力)/火(身法)/土(防御)/空间(神识)/时间(修炼速度)/因果(顿悟概率)。wudao 静悟攒感悟 → 点亮阶数 → 乘区;laws 查面板、law focus 设专注 |
| 突破软门槛 | 未达门槛则成功率 −30pp(终局 −35pp),压到 5% 安全下限但不禁突破——可硬冲,符合「失败温和化、不阻断」 |
| 仙阶门派(5 座) | 天枢剑宗/长生道宫(人仙起)、焚天殿/厚土门(地仙起)、太虚观(天仙起)。每门主修一法则(悟道 +50%)、兼修一条(+20%);仙职记名→真传→长老→首座→道主 |
| 仙凡两隔 | 飞升后凡界宗门停俸停贡献,但已授予的 buff 与师承保留(不吃亏);仙门贡献与仙职独立累积,飞升不是「直接满级」 |
| 仙界专属事件(12 个) | 法则回响/悟道古石/道纹残篇/混沌未判(once 大额机缘)、仙人论道、仙门诏令、云外坊市、仙人争执、劫云预兆、虚空裂隙、混沌凶兽、瑶池蟠桃。仙界触发占比实测 94% |
| 法则顿悟 | 静悟时概率触发,额外给 4 时辰产出;概率由因果法则驱动(上限 36%,五阶全程有边际收益) |
数值纪律:事件感悟走 insight_hours(挂产出速率而非「下一阶需求」——后者在 1000+ 天体量下必然崩盘,一次探索可顶半个月),且每日硬闸 2 次;全部可重复来源的感悟总预算 989 ≈ 基准的 3.25%,由测试守住上限。所有基线(成本表/门槛/产出速率)集中在 config/laws.py,校准史写进注释。
境界神通(把铭文变成机制)
每踏入一个大境界,突破时授予一个数据驱动的被动神通(config/realms.py 的 POWERS,炼气/筑基入门阶段无):
| 境界 | 神通 | 效果 |
|---|---|---|
| 金丹 | 丹心 | 炼丹成功率 +6% |
| 元婴 | 元灵 | 灵力上限 +12% |
| 化神 | 神游 | 神识 +30 |
| 炼虚 | 虚遁 | 身法 +15% |
| 合体 | 道体 | 修炼产出 +10% |
| 大乘 | 法相 | 战斗五维 +8% |
| 渡劫 | 劫体 | 渡劫成功率 +8% |
| 人仙 | 仙体 | 气血上限 +10% |
| 地仙 | 仙灵 | 灵力上限 +12% |
| 天仙 | 法则之丝 | 攻击 +12% |
| 玄仙 | 道印 | 防御 +12% |
| 金仙 | 仙域 | 修炼产出 +15% |
| 太乙 | 道果 | 神识 +80 |
| 大罗 | 不朽之躯 | 气血上限 +20% |
| 准圣 | 言出法随 | 突破成功率 +5% |
| 混元 | 与道合真 | 战斗五维 +15% |
实现:数值型(add/mul)注入永久 Modifier(source="realm:<key>"),随属性管线生效、随存档持久化;比率型(炼丹/修炼/渡劫/突破加成)由各系统按当前境界查 power_of() 表。全部是增益、无负反馈——挂机友好,纯正反馈。
现实时钟:全程跟现实时间走(挂机也一直打坐)
时间模型:手动操作时游戏内时间由命令推进(一次打坐 = 游戏内 4 时辰,现实 1 秒);但只要超过 1 分钟没操作,现实时钟接管——命令间隙流逝的现实时间在下一次命令前自动结算为闭关打坐。挂着不动也一直打坐,回来敲任意键即看到收益。
后台周天运转(被动修炼):做任何事时,游戏时间每推进一点都会自动涨修为——打怪、探秘境、赶路、炼丹、休息期间周天自行运转,不占精力、不打断操作、无日志刷屏。产出为主动打坐的 60%(PASSIVE_RATIO),无顿悟、无功法熟练度——主动打坐/闭关仍是高收益路径(100% + 顿悟 + 熟练度)。
| 路径 | 产出 | 额外收益 | 精力 |
|---|---|---|---|
| 后台周天(做其他事时) | 主动打坐 × 60% | 无 | 不消耗 |
| 主动打坐 / 闭关 / 现实时钟结算 | 100% | 顿悟 + 功法熟练度 | 消耗 |
| 场景 | 换算 | 倍率 |
|---|---|---|
| 在线挂机(开着终端不操作) | 现实 1 小时 = 游戏内 1.5 日 | ONLINE_DAYS_PER_HOUR=1.5(活跃加成) |
| 离线(关掉游戏) | 现实 1 小时 = 游戏内 1 日 | OFFLINE_DAYS_PER_HOUR=1.0 |
| 单次结算上限 | 24 现实小时(防挂机一年回来满级) | CLOCK_MAX_HOURS=24 |
闭关:idle [天数] 一条命令自动推演「打坐 → 精力耗尽 → 休息 → 继续」循环,支持小数天(idle 0.5 = 12 时辰),收益与手动 cultivate 完全一致(同一套函数,无任何额外加成或折扣——「收益不区分」是硬约束)。无参 idle 闭关到修为圆满自动停——突破是决策点,留给玩家,不自动冲关、不自动嗑药。
> idle 5
=== 闭关 5.0 日 ===
静心吐纳,修为 +2432(0 -> 2432)
CLI 空回车 = 自动打坐 4 时辰:在线挂机连按回车即持续修炼;挂机超过 1 分钟回来,回车前会自动结算现实时间的闭关收益(见上表在线倍率)。单次闭关上限 30 游戏日(IDLE_MAX_DAYS,idle 最终兜底)。
离线收益:存档记录 saved_at 时间戳,读档时按真实流逝时间结算(倍率 1.0)。读档即可看到「离线归来:阔别 X 时辰」+ 闭关日志。结算后立即刷新存档时间戳,同一存档反复读档不会重复结算。
—— 离线归来:阔别 2.0 时辰 ——
=== 闭关 2.0 日 ===
静心吐纳,修为 +18698(0 -> 18698)
期间顿悟 2 次,妙悟自生。
离线期间修为满了同样停在突破门槛前(不自动冲关)。闭关/离线打坐期间功法熟练度照涨(订阅同一 practice 主题)。全部倍率在 factory.py 顶部可调。
收益时钟互斥规则(v2 重构)
同一时刻只有一种主收益在结算,多套收益不叠加:
| 场景 | 结算什么 |
|---|---|
| 离线期间 | 只结算离线收益(需求 × 1.0% / 现实小时,所有加成只生效 50%) |
| 在线但不动 | 被动周天 + 现实时钟同时存在,取高者(现实时钟走闭关,收益更高) |
| 主动打坐 / 闭关 | 暂停被动周天,改结算主动收益(100% + 顿悟 + 熟练度) |
| 战斗 / 探索 / 炼丹等操作 | 被动周天继续静默运行 |
待领池防跳级(core/offline.py):待领池上限 = 当前层需求 100%,超出部分按 30% 自动转化为灵石;领取后超出当前层需求的部分衰减为 30%——离线收益是「辅助」,不会直接填满一整层,防止攒离线跳级。
日常任务(7 项 · 全可跳过)与一键托管
日常系统(xiuxian/systems/daily.py,命令 daily list):7 项轻量日常,全部可跳过,不做没有任何损失,做了给锦上添花的奖励:
| # | 任务 | 完成方式 | 奖励(阶梯) |
|---|---|---|---|
| 1 | 领取离线收益 | 读档/claim 自动 |
完成 3 项:额外修为 +1% |
| 2 | 打坐 2 时辰 | 任意打坐/闭关累积 | 完成 5 项:+3% + 随机材料袋 |
| 3 | 猎妖 1 次 | hunt |
完成 7 项:+5% + 每日宝箱 |
| 4 | 论道 1 次 | duel |
奖励不滚动不累积,当日清零 |
| 5 | 探索 1 次 | explore |
各系统成功动作自动打点,无需专门操作 |
| 6 | 炼丹 1 炉 | dan refine |
|
| 7 | 拜访道侣/师长 | companion/sect |
一键托管(idle-auto on/off):开启后自动循环「打坐 → 精力不足休息 → 继续」;修为圆满自动停止等待玩家突破。不会自动突破/嗑药/换装备/接任务——所有决策权始终在玩家手中。CLI 与 Web 均可使用,挂机养老的核心玩法。
Web 版(手机/浏览器试玩)
纯标准库 http.server 实现,零依赖。启动后手机连同一 WiFi,浏览器打开 http://<本机IP>:8000 即可游玩——这就是「安卓版」的最优形态:不需要打包 APK,浏览器即客户端;挂机养老游戏天然适合浏览器常驻。
./run.sh web # 启动(默认端口 8000,可 ./run.sh web 8123 改端口)
# 本机 IP:macOS ifconfig | grep inet / Windows ipconfig 查询
- 复用 CLI 同一套
dispatch逻辑(CLI.run_line捕获输出),命令行为与终端完全一致,现实时钟结算(在线 1.5 倍)照常生效 - 组件化 + 设计令牌(
xiuxian/ui/web/):颜色/间距/字号/圆角/阴影全部抽象为 CSS 变量(tokens.css),组件样式零裸值——移动端或其他前端工程直接复用这套基础;页面骨架与逻辑独立成文件(page.html / app.js),改 UI 不动服务端 - 三档响应式断点:≥1024px 双栏(380px 面板 + 文字流)、768~1023px 双栏压缩(320px)、<768px 单栏 + 底部固定行动条(横向滚动、主操作置首、拇指区);320px 窄屏亦无横向溢出
- 页面深色修仙风、双栏布局:左栏角色面板(境界/三槽进度条/四维属性/神通功法装备标签)+ 行动按钮 + 输入框;右栏「历程 · 文字流」按发生顺序呈现修行经历,每条带游戏时间标记与命令回显
- 文字流分类着色 + 流式输出(纯前端,与游戏逻辑零耦合):过程叙述斜体灰、结果行(修为 + / 突破 / 拾获 / 顿悟…)金色、失败行(失败 / 不足 / 溃败…)暗红、系统行灰色小字;短日志逐字打字机呈现(默认 15ms/字,
window.UI.stream可调),批量日志(>6 行)直接渲染防卡顿,点击文字流立即完成当前行 - 行动按钮上下文感知(
GameSession.actions按状态返回下一步,端上免打字):优先级 心魔劫(突破后四选一按钮)> 秘境进行中(深入/退出)> 待决机缘(择·XX选项,免敲choose N)> 可突破(变「突破」/「休息」/「调息(冷却 N 日)」)> 背包可用丹药(直接「服 聚气丹」,免敲use <id>)> 可进入秘境(「秘境·落云秘境」,免敲dungeon enter <id>)> 休闲动作(打猎/论道/双修/探查/采药等);输入框保留作兜底,每 30 秒自动刷新状态 - 仙界身份感知(第二十六批):状态卡境界旁显示「仙」金徽章(
realm-badge immortal,飞升后)/「凡」灰徽章;已装备功法标签带品阶标注,仙阶功法金色高亮(功法·周天妙法(仙阶))——飞升后前端一眼看出已入仙途 - 秘境目录弹窗(第二十六批):行动区「秘境目录」按钮点击弹窗,卡片式列出全部秘境——名称 / 描述 / 境界门槛 / 层数 / 冷却 / 通关奖励(修为比例 + 灵石)+ 当前状态;仙阶秘境金边 + 「仙」徽章;绿色「可入」可点直接进入,红色显示锁定原因(复用服务端
is_locked()口径);移动端同样适配 - 数据端点:
/api/status(状态+行动按钮)、/api/catalog(秘境目录结构化 JSON,第二十六批新增) - 触控优化:按钮最小高度 44px(移动端点按标准);hover 态仅在支持悬停的设备生效(触屏不粘住);错误提示走全局 Toast,不再污染日志流
- 按 Cookie 分会话隔离:同一浏览器固定同一角色,多设备/无痕窗口各开各档;无鉴权,仅限局域网/本机测试,勿暴露公网;以后要真 APK,从 WebView 打包即可
修炼产出:按本层需求比例
打坐、闭关、被动周天共用同一套产出公式,以「当前层需求的比例」为基准:
每时辰产出 = 本层需求 × 0.2% × 悟性倍率 × 灵气密度 × (1 + 神通加成) × 随机[0.88, 1.14]
悟性倍率 = (1 + 悟性/50) / 1.5 # 悟性 25 时为 1.0
顿悟 = 每 4 时辰判定一次,给本层需求的 8%(凡界)/ 12%(仙界)
为什么不是固定速率:旧公式按境界序号 ×1.6/×3 增长,而需求按 ×6~10 增长,增速不匹配导致 比值每境衰减约 6.7 倍——炼气期一次打坐直接打满(108%),渡劫之后形同虚设(0.00008%)。 改为按需求比例后,打坐在任何境界都有稳定意义,且与需求曲线天然同步。
| 地点灵气 | 打坐 16.7 时辰(100 精力) | 每层约需 |
|---|---|---|
| 青石镇 ×1.0 | 需求 6.6% | ~10 游戏日 |
| 宗门灵脉 ×3.0 | 需求 13.5% | ~5 游戏日 |
精力 = 主动操作频率闸门(v2 放宽版)
v2 定位「主动操作是调味料,挂机收益才是主菜」——精力不再是硬预算,而是限制主动操作频率的软闸门:
| 规则 | 数值 | 说明 |
|---|---|---|
| 精力上限 | 100 | 上限固定 |
| 恢复速度 | 2 / 时辰 | 在线离线均恢复;调息、跨日、离线结算都会回 |
| 主动打坐消耗 | 1.5 / 时辰 | 打坐不再是精力大户,可长时间挂机修炼 |
| 猎妖 / 论道 / 探索 | 8 / 5 / 10 | 主动操作的主要消耗 |
| 炼丹 / 秘境深入 | 6 / 炉、12 / 层 | 单次操作成本 |
| 突破 | 30 | 需要状态达标 |
核心原则(v2):
- 精力用完后,被动周天与离线收益不受影响——精力只限制主动操作频率,不限制挂机收益
- 完成全部 7 项日常约消耗 40-50 精力,非常充裕;上线精力大概率是满的(离线也恢复)
- 闭关挂机
idle/ 一键托管idle-auto走挂机路径(角色自行打坐-休息),不受精力约束
突破的三重门槛(突破本就需要达标,不是随时能冲):
- 修为达标——当前层修为必须满(
exp ≥ exp_required,面板显示「修为 100/100」才能冲击) - 成功率判定——比例式公式(境界 base × 三维倍率 − 丹毒 + 加成,各来源封顶 +30pp),失败温和化:只散当前层 20%~40% 修为 + 轻伤(调息 4 时辰可愈)+ 失败补偿 +2pp(可叠加至 +10pp),绝不掉境界
- 金丹以上先渡劫——天劫/仙劫未过直接拦截,另加 3 日调养冷却
所以「一直点按钮推进」的节奏是受控的:修为要攒够(时间成本)→ 突破要掷骰(失败成本)→ 仙界还要过劫。
功法系统(多件装备 + 数据驱动效果)
数据结构
@dataclass(frozen=True)
class ArtEffect: # 一条效果(数据)
type: str # 效果类型,见 EFFECT_TYPES
value: float = 0.0 # 数值(attr_mul 为偏移 0.15=+15%)
key: str = "" # 属性键(attr_add / attr_mul 用)
params: dict = {} # 新类型的自定义参数,无需改结构
stack: str = "" # 可选:覆盖该类型的默认叠加规则
@dataclass(frozen=True)
class EffectTypeDef: # 效果类型的元信息(数据驱动的核心)
stack: str # add 相加 / mul 相乘 / max 取最高
desc: str # 说明(面板展示)
unit: str # "" 或 "%"
cost: float # 每单位折算的「效果点」,用于品阶预算
@dataclass(frozen=True)
class ArtDef:
id, name, rank, desc
price, min_realm # 学习条件:灵石 + 境界门槛
effects: tuple[ArtEffect] # 效果列表(可多类型混搭)
max_proficiency, practice_gain, level_growth, skills
效果类型与叠加规则
| 类型 | 含义 | 叠加规则 | 消费端 |
|---|---|---|---|
attr_add |
属性固定值加成 | add(相加) | 属性管线(Modifier) |
attr_mul |
属性百分比加成 | add(偏移相加,非连乘) | 属性管线(Modifier) |
cultivate_speed |
打坐修为速率 | add | cultivation._hourly_gain |
breakthrough_rate |
突破成功率 | max(取最高) | cultivation.success_rate |
insight_rate |
顿悟(悟道)概率 | add | cultivation 顿悟判定 |
stone_gain |
灵石获取 | add | combat._stones_for |
百分比刻意按偏移相加而非连乘:两件 +20% 得 +40%(×1.4)而不是 ×1.44 —— 多件功法不会叠成指数爆炸。
突破率用 max:突破是决策点,功法只该「略微增加把握」而非抹平难度。强效类型另有封顶
(BONUS_CAPS:速率 ≤60%、突破率 ≤6%、灵石 ≤50%、悟道 ≤15%)。
品阶、等级、学习条件、装备上限
| 项 | 规则 |
|---|---|
| 品阶 | 黄阶/玄阶/地阶/天阶/仙阶,每阶有效果点预算(RANK_BUDGET,按练满后计价),由 validate_balance() 自检、测试守着 |
| 等级 | 由熟练度派生:每 200 熟练度 1 级(满级 5),每级效果 ×level_growth(+15%) |
| 熟练度 | 决定「发挥几成」:0.6(刚会)→ 1.0(练满),换高阶功法不等于立刻变强 |
| 学习条件 | price(灵石)+ min_realm(境界门槛) |
| 装备上限 | slots_for_realm():炼气起 2 件,每 3 个大境界 +1,硬顶 5 件 |
平衡预算(练满后计价):黄阶 32 / 玄阶 90 / 地阶 240 / 天阶 260 / 仙阶 480 点; 折价:固定值 1 点/点、百分比 1 点/%、速率 2 点/%、悟道 2.5 点/%、突破率 3 点/%。
实测平衡(练满 + 装备,宗门灵脉):
| 配置 | 攻击 | 气血 | 打坐产出 | 速率 |
|---|---|---|---|---|
| 筑基·黄阶 2 件 | +35% | — | +5% | 0% |
| 金丹·玄阶 2 件(攻防) | +70% | +3% | 0% | 0% |
| 元婴·地阶×2+天阶 3 件 | +19% | +43% | +79% | 60%(封顶) |
属性加成只影响观感与成长感 —— 敌人按玩家属性等比缩放,战斗难度自洽。
固定值加成的境界缩放
固定值若写死,前期占比过大(+67%)、后期形同虚设(+0.003%)。因此 realm_attr_scale()
从境界配置累加出量级比(该境界累计攻击 / 炼气累计),不写死系数 —— 改任何境界配置都自动跟随,
实测每件的固定值加成都稳定在基础属性的约 +13%。
实时重算
ArtSystem.rebuild():移除旧 art: 前缀修正器 → 按类型聚合所有已装备功法的效果 → 经
EFFECT_APPLIERS 落地(属性类进 Modifier,速率类进缓存)→ 夹住当前气血/灵力不超过新上限。
装备/卸下/熟练度变化/读档都会触发,因此「装卸即时生效」。
配置示例(不同定位)
"qingxin": ArtDef("qingxin", "清心诀", "黄阶", # 辅助·新手
price=200, effects=(
ArtEffect("attr_mul", 0.10, key="comprehension"),
ArtEffect("attr_add", 5.0, key="max_mp"))),
"gengjin": ArtDef("gengjin", "庚金剑诀", "黄阶", # 攻伐·固定值+百分比
price=400, effects=(
ArtEffect("attr_add", 2.0, key="atk"),
ArtEffect("attr_mul", 0.12, key="atk"))),
"xuangui": ArtDef("xuangui", "玄龟镇海功", "玄阶", # 防御·有得有失
price=1500, min_realm="foundation", effects=(
ArtEffect("attr_mul", 0.20, key="def"),
ArtEffect("attr_add", 4.0, key="def"),
ArtEffect("attr_mul", 0.12, key="max_hp"),
ArtEffect("attr_mul", -0.05, key="speed"))), # 负面效果也是数据
"qingmu": ArtDef("qingmu", "青木长生功", "地阶", # 专修炼·速率流
price=8000, min_realm="core", effects=(
ArtEffect("cultivate_speed", 0.25),
ArtEffect("attr_mul", 0.15, key="max_hp"),
ArtEffect("insight_rate", 0.02))),
"dongxuan": ArtDef("dongxuan", "洞玄破境诀", "天阶", # 冲关·max 规则
price=36000, min_realm="nascent", effects=(
ArtEffect("breakthrough_rate", 0.03),
ArtEffect("insight_rate", 0.04),
ArtEffect("attr_mul", 0.10, key="spirit"))),
如何新增一种效果类型(以「突破成功率」为例,三步,核心逻辑零改动)
# ① config/arts.py —— 声明类型(叠加规则、说明、平衡折价)
EFFECT_TYPES["breakthrough_rate"] = EffectTypeDef(STACK_MAX, "突破成功率加成", "%", cost=3.0)
# ② systems/arts.py —— 注册「聚合值如何生效」(非属性类用通用函数即可)
EFFECT_APPLIERS["breakthrough_rate"] = _apply_generic # 写入 bonus 缓存(可套封顶)
# ③ 消费端 —— 读一次并参与计算(core/cultivation.py)
arts_sys = self.game.systems.get("arts")
art_rate = arts_sys.bonus("breakthrough_rate") if arts_sys else 0.0
rate = base * (...) + extra_bonus + pw_bonus + art_rate
之后即可在功法里写 ArtEffect("breakthrough_rate", 0.03) —— 聚合、装备、重算全部自动支持,
无需再改 rebuild() 或任何核心逻辑。
修仙五要(法·财·侣·地·师)
「法财侣地师」五要齐备,各自提供修炼加成,统一走 core/bonus.py 全局聚合器
(同一套效果类型与叠加规则),装卸/升级/好感/拜师即时重算。实测递进:
| 根基 | 打坐产出 | 每层耗时 |
|---|---|---|
| ① 只有功法(法) | +26% | -20% |
| ② 功法 + 洞府(地) | +55% | -36% |
| ③ + 道侣(侣) | +66% | -40% |
| ④ + 师承(师) | +77% | -44% |
地·洞府(estate):购置 → 扩建 → 维护。品阶(凡居/洞府/福地/洞天)越高加成越强(修炼 +5%→+45%),
但每日需维护灵石——付不起则荒废(加成失效,补缴复灵),形成「财」与「地」的相互牵制。
财·产业(asset):灵田/灵石矿脉/坊间丹铺/跨域商队,每日产出灵石与材料(供丹道变现)。
可增资升级(1~5 级线性成长),同样有维护费——付不起则停摆。产出刻意用线性而非复利,防止后期收入爆炸。
侣·道侣(companion):结识四位道友(剑修/丹师/阵修/剑仙),加成随情分增长(初识五成 → 圆满十成)。
增进情分的途径:双修(每日 3 次,耗精力灵力换修为+情分)、并肩对敌(战斗自动涨)、赠礼(灵石换情分,快但纯消费)。
师·师门(sect 扩展):七大门派(青云宗/血煞门/药王谷/天机阁/剑冢/万宝楼,各有独特 buff 与师长),
入门后按职位拜师(外门→长老),职位越高,门派修炼场地加成越高(外门+2% → 长老+12%)。
门派专属功法以贡献兑换(唯本门弟子可修,共 6 门:青云剑诀/血煞魔功/药王真解/天机演算诀/万剑归宗/点石成金术)。
灵室静修(贡献租用,24 时辰修炼 +30%)——形成「做任务 → 攒贡献 → 换功法/租灵室 → 冲关」的完整循环。
法·功法:见上文「功法系统」。
命令:estate [list|buy|upgrade|restore|sell] asset [list|buy|upgrade|sell]
companion [list|meet|dual|gift] sect [masters|apprentice|mentor|…] claim
修为获取途径(打坐之外的五条路)
所有途径的修为都按「本层需求的比例」结算(与打坐同一口径),不会因境界提升而失效; 每条途径都有独立的防刷限制,避免任何单一途径碾压其他。
| 途径 | 触发条件 | 修为收益 | 成本 | 防刷限制 |
|---|---|---|---|---|
| 打坐/闭关 | cultivate/idle |
需求 ×0.2%/时辰(宗门 ×3 灵气时 0.6%) | 6 精力/时辰 | 精力预算(每日 +50 恢复) |
| 猎妖斗法 | hunt [tier] |
需求 ×2.0~3.2%/场 | 25 精力/场 | 精力预算 |
| 论道切磋 | duel [tier](新增) |
胜 需求 ×4% / 负 ×2% | 15 精力/场 | 每日 5 场 |
| 历练探查 | explore(新增修为) |
需求 ×3%~6%(按机缘稀有度) | 20 精力/次 | 每日 5 次 |
| 服用丹药 | use <丹药>(改为比例) |
聚气丹 ×2%、灵泉水 ×5%(按品阶缩放) | 灵石/材料 + 丹毒 | 每日 8 颗 |
| 秘境闯关 | dungeon(新增层修为) |
每层通过 需求 ×1.5% + 通关大奖 | 精力/层 + 时间 | 通关冷却(3~7 日) |
| 师门任务 | quest(数据新增) |
任务奖励 需求 ×5% | 任务目标本身的精力 | 目标次数(猎妖 3 + 历练 2) |
数值平衡(元婴初期,需求 11 万,单日可投入量):
| 途径 | 单日投入 | 修为 | 占需求 |
|---|---|---|---|
| 打坐 | 100 精力 | 2.0万 | 18.2% |
| 猎妖 normal | 100 精力 | 1.2万 | 10.6% |
| 论道切磋 | 75 精力(5 场) | 2.4万 | 21.8% |
| 历练探查 | 100 精力(5 次) | 2.0万 | 18.6% |
| 服用丹药 | 8 颗 | 1.7万 | 15.7% |
单日各途径收益相当(1522%),组合使用约 3040%/日 → 每层约 3 天;实测
多途径组合 400 游戏日推进到天仙后期(纯打坐同期只到渡劫后期)。
防刷的公共底座:Cultivator.daily(每日限额计数器,按游戏日索引,跨日自动失效,
存档只保留最近 3 天)——历练、切磋、丹药共用它,避免各途径各写一套计数逻辑。
每日限额:{ "5": { "duel": 3, "explore": 5, "pill": 2 } } # 第 5 天各途径已用次数
离线挂机(后台累计修为)
字段设计(存档 JSON offline):
{
"offline": {
"last_settled_at": 1767312000.0, // UTC epoch 秒(唯一时间基准)
"pending_exp": 1234567.0, // 待领修为池(无上限)
"total_offline_exp": 98765432.0, // 累计离线修为(统计)
"settled_count": 42, // 结算次数(幂等审计)
"last_duration": 36000.0, // 上次有效时长(秒)
"anomaly": "" // 异常说明:首次登录/时间回拨/超长截断
}
}
若迁移到数据库,等价表结构:
CREATE TABLE player_offline (
player_id BIGINT PRIMARY KEY,
last_settled_at DOUBLE PRECISION NOT NULL, -- UTC epoch 秒,建索引
pending_exp DOUBLE PRECISION NOT NULL DEFAULT 0,
total_offline_exp DOUBLE PRECISION NOT NULL DEFAULT 0,
settled_count BIGINT NOT NULL DEFAULT 0,
updated_at TIMESTAMP NOT NULL
);
结算公式:
有效时长 = clamp(now - last_settled_at, 0, 365天) - 宽限期(60秒)
修为 = 有效时长(小时) × 本层需求 × 1.0%/小时 × (1 + 神通加成)
离线速率 = 主动打坐的 50%(主动 ≈2%/现实时,含时间闸门打坐效率),挂机永远比不上亲自操作, 但绝不浪费时间——对齐 v2「挂机养老」核心体验。
接口流程(读档时自动执行):
load_game(slot)
├─ 读存档 → Game.from_dict(恢复 offline 状态)
├─ settle_offline(game, saved_at)
│ ├─ 无 UTC 基准且有 saved_at → 兼容换算(老存档)
│ ├─ compute_offline_gain() → 处理边界(首次/回拨/超长/宽限)
│ └─ settle() → 累加 pending_exp + 推进 last_settled_at(幂等)
├─ claim() → 能落袋的立刻到账,本层已满的留池等突破
└─ manager.save() → 写回,保证重复读档不再结算
边界处理:
| 情况 | 处理 |
|---|---|
| 首次登录无记录 | 不发修为,初始化 last_settled_at = now |
| 时间回拨(now < last) | 不发修为,基准修正为 now,标记「时间回拨」 |
| 异常偏移(> 365 天) | 截断到上限,标记「超长截断」 |
| 短间隔(< 60 秒) | 宽限期内不结算,防抖动与刷取 |
| 幂等 | 结算后立刻推进 last_settled_at 并 settled_count + 1;重复调用 elapsed 归零 |
待领池设计:离线修为先进 pending_exp 池(总量无上限),登录时自动领取——
能落袋的立刻到账,本层已满的部分留在池中,突破后 claim 继续领取,
因此超长离线积累的修为不会因为「本层已满」被 add_exp 截断而浪费。
新玩法:天骄榜 & 心魔劫
天骄榜(排名竞技)
金丹以上自动入榜(垫底),挑战排名高于自己的 NPC 天骄(10 位,战力按境界递增),胜则互换名次。
- 每日俸禄:按名次发放灵石与修为(第 1 名 500 灵石 + 30% 需求,逐名递减)
- 防刷:每日 3 次挑战 + NPC 缓慢成长(防躺平)+ 敌人按属性等比缩放
- 操作:
tianjiao list看榜tianjiao fight <名次>挑战
心魔劫(心境考验)
跨大境界突破成功后 30% 概率触发(金丹起),文字三选一(正道/歧途/超脱)。 不同选择不同后果——无绝对对错,体现修仙哲学。正道稳(小增益),歧途险(大增益+副作用),超脱随机。
- 防刷:自然触发不可主动刷;每次突破最多一次
- 数据驱动:心魔题库在
inner_demon.py的TRIALS元组中,加新题只需添一条 - 操作:突破后自动触发,
demon <选项>选择
时间预算闸门(防刷修为的核心约束)
游戏时间推进速度 ≤ 现实时间 × 10(TIME_RATIO=10,即 1 现实小时最多推进 10 游戏时辰)。
无论怎么点按钮,修为获取速率的上限被现实时间锁定。
实现:core/time_governor.py 的 TimeGovernor 在 Game.advance_time() 入口加一道预算闸门:
可用预算 = (now - anchor) / 3600 × 10 - consumed
实际推进 = min(期望推进, 可用预算) # 不足则截断
- 闭关挂机(idle)/ 离线结算:走
bypass_budget=True(挂机收益由 offline.py 的独立速率 1.0%/小时控制,不叠加时间闸门) - 被动周天:不走 advance_time(由
_on_hour_passed被动接收时辰),天然不受闸门影响 - 主动操作(打坐/休息/战斗/突破/秘境/历练):全部受闸门约束
效果:精力预算限制了「每天能主动操作多少」,时间预算限制了「游戏时间流逝多快」。双重约束下, 修为获取速率的上限 = 现实时间 × 10 × 打坐效率 —— 刷按钮无法突破这个物理上限。
旁路:demo / 测试设 game.clock.disabled = True 跳过闸门。
数值防膨胀
修为/属性随境界指数增长(炼气 100 → 混元圆满 ~1.2e19),数值体系靠三层机制保持可读、可控、可解释:
1. 大数格式化(显示层):所有修为与属性显示走 numfmt.fmt_num() 中文单位——万 / 亿 / 万亿 / 兆 / 京。面板、日志、战斗伤害统一可读:「气血 60/8000万」「修为 60亿/264.6亿」,不再出现 11 位长串。纯展示,不改任何数值与判定。
2. 收益按比例(数值层):修为增长设计上就防「越大越爆炸」——
- 顿悟奖励 = 当前层需求 × 8%(凡界)/12%(仙界):比例恒定,无论需求涨到多大,每层修炼天数不变,不形成正反馈膨胀
- 秘境/丹药修为走
exp_ratio(需求比例)而非绝对值(写固定值在炼气能飞升、渡劫等于零) - 被动修炼 = 主动打坐 × 60%,无顿悟——只是线性附加,不放大顿悟
- 突破失败修为 -35%(比例惩罚,不随数值增大而失效)
3. 收益有界(节奏层):现实时钟单次结算上限 24 现实小时、闭关上限 30 游戏日;被动修炼不耗精力、无独立公式。纯挂机基线(seed=2026):~3000 日走完凡界全程 + 仙界五境(金仙后期),仙界每境 ~190 日与既有基线一致——新增收益渠道后节奏未失控,文档同步更新基线。
关键设计
双层突破。 小境界突破(炼气三层→四层)几乎必成只耗修为;大境界突破(炼气圆满→筑基)有失败率、可嗑丹、金丹以上还要先渡天劫。
突破判定开放给外部。 breakthrough() 在掷骰前广播 before_breakthrough,任何系统都能往 payload["bonus"] 叠加成功率,或直接 payload["blocked"]=True 中止。丹药、渡劫、门派护法、阵法都走这条路,彼此不知道对方存在。
突破率是比例式,不是加和式。 旧公式 base + 0.01×(体质−10) + ... 在体质≥18 就被 clamp 顶格到 98%,三维差异后期完全失效。现改为:
成功率 = 夹[5%, 98%]( base × (1 + 0.15%×(体质−10) + 0.10%×(悟性−10) + 0.05%×(气运−10))
− 0.015%×丹毒 + 丹药 + 神通 )
三维按倍率放大多大的 base 就放大多少:大乘期(base 0.18)三维 500 时实际 0.45——属性到后期依然可解释、有贡献,不再被上限吞掉。
效果 DSL 可扩展。 内置类型覆盖数值、属性、物品、buff、flag;不够用时,game.register_effect("battle", handler) 注册自定义类型,事件 JSON 里直接写 {"type":"battle"}。战斗就是这样被剧情事件调用的。
随机源可存档。 RNG 持久化 Mersenne Twister 内部状态,读档后随机序列无缝延续,配合固定 seed 可完整复现一局。
敌人按玩家等比缩放。 战斗系统不维护「每个境界一张怪物表」,而是按玩家当前属性乘以难度系数生成,从炼气到渡劫共用一套代码。
冲关冷却。 突破失败或被拦截(多半是渡劫未过)后需调养 3 日(小境界 1 日)才能再冲。没有这道闸,玩家可以每天硬冲大境界,而失败累积的丹毒(+3)跑不过每日消退(-1),越冲越难,最后卡死在某个境界。血量低于 40% 时突破只会预警、不会拦截——残血冲关是玩家自己的选择,但得让他知道代价。
事件总线的日志要就地回收。 bus.emit() 不返回 handler 的返回值,因此凡是订阅者产生了给玩家看的文本(如「功法熟练度 78 → 104」),一律塞进 payload["logs"],由广播方统一收回拼进返回日志。否则效果发生了,玩家却看不到。
如何扩展
加一个新玩法(比如炼丹、秘境、双修)
- 继承
GameSystem,写上id与name - 在
on_bind()里self.game.bus.on(主题, 处理函数)订阅关心的时机 - 需要玩家输入就实现
commands()返回Command列表 - 需要持久化就实现
to_dict()与load_state() - 在
factory.default_systems()里加一行
可用主题:new_game、loaded、before_breakthrough、after_breakthrough、day_end、hour_passed、practice(打坐练功时,区别于任意时间流逝的 hour_passed)、event_resolved、combat_victory。
加剧情:只改 data/events.json,不动代码。
加境界:在 config/realms.py 的 REALMS 元组里加一行。
加物品/丹药:在 config/items.py 的 ITEMS 字典里加一项,效果用同一套 DSL。
换界面:重写 ui/panel.py 与 ui/cli.py,内核零改动。
命令一览
内核命令:status bag use <id> travel <地点> map save [槽] load [槽] slots help quit
玩法命令(由各系统注册):
| 命令 | 来源 | 说明 |
|---|---|---|
cultivate [小时] |
修炼 | 打坐修炼,消耗精力换修为 |
idle [天数] |
修炼 | 闭关挂机:自动打坐-休息循环,无参闭关至修为圆满自动停;收益与手动完全一致 |
breakthrough |
修炼 | 修为圆满时冲击下一境界 |
rest [小时] |
修炼 | 调息,恢复精力气血,缓释丹毒 |
explore [force] |
事件 | 外出探查,按地点事件率触发机缘 |
choose N |
事件 | 对当前事件做出选择 |
equip [物品id] |
装备 | 穿戴装备(无参查看已穿戴与可穿戴清单) |
unequip <部位> |
装备 | 卸下装备,部位可用中文(兵器)或键名(weapon) |
art |
功法 | 查看已修习功法与主修 |
art list |
功法 | 功法目录,含价格、门槛、圆满效果、练成速度 |
art learn <id> |
功法 | 修习功法(扣灵石,需满足境界门槛) |
art main <id> |
功法 | 切换主修功法,属性即时变动 |
art practice [小时] |
功法 | 专修功法,只涨熟练度不涨修为 |
skill |
技能 | 查看已修习功法带来的技能、威力与当前施法策略 |
skill strategy <保守|均衡|激进> |
技能 | 切换施法策略(也可写 conservative/balanced/aggressive) |
dan |
丹道 | 查看已悟丹方、造诣、当前成功率与所需材料 |
dan list |
丹道 | 丹方目录,含材料、基础成功率、门槛、换购价 |
dan learn <id> |
丹道 | 花灵石换购丹方(后期灵石的一大去处) |
dan refine <id> [炉数] |
丹道 | 开炉炼丹,逐炉打印成功率算式与品阶判定 |
dan gather [时辰] |
丹道 | 外出采药,产出灵草,稀有材料看运气(v2:凶险机制已取消) |
dungeon list |
秘境 | 秘境目录,含门槛、层数、冷却与通关记录 |
dungeon enter <id> |
秘境 | 进入秘境;已在其中则从上次进度继续 |
dungeon next |
秘境 | 深入一层,触发本层抽签 |
dungeon flee |
秘境 | 退出秘境,进度保留 |
dungeon abandon |
秘境 | 放弃进度,换取冷却后提前重入 |
hunt [weak|normal|elite|boss] |
斗法 | 主动猎妖,掉落材料与装备 |
duel [档位] |
论道 | 以悟性/神识切磋换修为(每日 5 场) |
tribulation |
天劫 | 查看下次渡劫成功率 |
sect [info|list|join|masters|apprentice|mentor|chamber|stipend] |
门派 | 门派事务(v2:贡献每日自动获得) |
estate [list|buy|upgrade|restore|sell] |
洞府 | 洞府(地):购置/扩建/自动维护 |
asset [list|buy|upgrade|sell] |
产业 | 产业(财):每日产出,维护从产出扣除 |
companion [list|meet|dual|gift] |
道侣 | 道侣(侣):加成边际递减 100/60/30/15% |
tianjiao [list|fight <名次>] |
天骄榜 | 排名竞技:NPC 与玩家同步成长,胜则互换名次 |
demon <选项> |
心魔 | 突破后心魔劫:正道/歧途/超脱/随缘 |
quest |
任务 | 查看进行中任务、进度与门派声望(开局自动接取可用任务) |
market list |
坊市 | 浏览可交易物品与当前买入价(每日买卖各限 3 次) |
market buy <id> [数量] |
坊市 | 按浮动价买入(大量买入推高价格) |
market sell <id> [数量] |
坊市 | 按卖出价(买入价 0.6 倍)卖出(大量卖出压低价格) |
daily list |
日常 | 查看 7 项日常进度(全部可跳过) |
idle-auto on/off |
托管 | 一键托管:自动打坐-休息循环(修为圆满自动停) |
数值现状(seed=2026 自动推演)
只修炼+突破、不嗑药不入门派:第 115 日筑基圆满,第 162 日金丹中期。
加入打猎攒灵石、按需学功法换装备后:第 39 日筑基圆满,第 45 日金丹初期,第 88 日元婴初期。
再把炼丹接进日常循环(采药 → 炼丹 → 按需嗑药,并买齐七张丹方与朱雀丹炉):第 277 日渡劫后期走完全程,400 日累计开炉 680 次、成丹率 92%,聚气丹品阶分布约 上 273 / 中 142 / 下 77(满造诣配丹炉,上品过半)。
秘境进日常循环(冷却一到就刷)后:400 日推演通关落云 811 次、万兽推进到 4 层(守关 boss 打不过会退层),灵石结余从上轮 13 万降到约 1.2 万——秘境宝箱 + 丹方换购是后期灵石的主要出口。代价是秘境会吃掉大量时间与精力(每层 12 时辰),脚本验证「每天死刷秘境」会挤掉修炼进度,这与真实玩家的选择一致:秘境是资源来源,不是修炼替代品。
渡劫裸装成功率约 45%,叠上功法、丹药、门派可推到 80% 以上。初始 200 灵石是刻意卡的线——够修习一门黄阶功法,不够买兵器,开局就要在「功法 / 门派 / 攒钱买装备 / 换购丹方」之间做取舍。
任务与坊市接入日常循环后(seed=2026 / 7,400 日,含猎妖、事件、任务、坊市):两 seed 均第 ~244 日达渡劫后期,无崩溃;青云宗声望累积 1400+(散修声望 5)、一次性任务完成 2、进行中 3、坊市买入 40 次、卖出 85 次。灵石有了稳定的消费出口(买丹药补足消耗、卖妖丹/材料回流灵石),后期灵石结余从纯秘境轮的约 1.2 万量级被进一步消纳,溢出明显收敛。任务把已有行为(战斗/事件/突破)转化为可交付目标,声望跨门槛(如「宗门荣耀」需青云宗 24)后自动解锁高阶任务,形成「做任务涨声望 → 解锁更肥任务 → 再涨声望」的正循环。
技能接入日常循环后(seed=2026 / 7,含猎妖、事件、任务、坊市、六门功法全修):两 seed 均推进到渡劫后期,无崩溃,六门功法全部修习(技能全解锁)。技能对进度曲线没有破坏性影响——三种策略与无技能对照组最终境界一致,差别只在战斗过程:每场平均施法约 10~12 次,均衡/激进档的战斗回合数比无技能少约 15%,保守档反而更长(治疗与护体占掉了输出回合),激进档在其中一个 seed 付出了 1 次战死。这个「更快 vs 更稳」的取舍正是策略预设要交还给玩家的东西。
仙界扩展后(seed=2026,纯挂机策略:修炼+顿悟+突破,无丹药无秘境):第 150 日飞升人仙,431 日天仙、692 日玄仙、884 日金仙、1143 日大罗、1474 日混元,约 3000 日混元圆满——仙界每境 130~190 日,与凡界后期同构(顿悟按需求比例恒定所致),符合挂机养老的长线定位;全资源玩家(丹药/秘境/功法叠加)会明显更快。从渡劫后期构造玩家实测仙劫链路:天衰之劫判定 73.1% 渡劫率 → 渡劫成功 +5% → 突破独立判定,双层门槛按设计工作。
v2 挂机养老版基线(seed=2026,纯挂机:修炼+顿悟+突破,精力放宽后打坐不再卡时长):154 日筑基、219 日金丹、294 日元婴、570 日大乘、738 日飞升人仙、1346 日混元、1501 日混元圆满——精力放宽(打坐 1.5/时 + 恢复 2/时)让纯挂机节奏比方案 A 基线(约 3000 日通关)快 2 倍。离线收益 1.0%/现实小时(对齐 v2 软上限表「离线=主动的 50%」)且加成只生效 50%、待领池封顶 1 层需求防跳级;7 项日常每日约 +5% 修为的锦上添花;突破失败温和化(散 20~40% + 补偿 +2pp)让冲关不再劝退。注:v2 目标表「纯离线 180-240 日飞升」与「每日 1-2 小时 90-120 日飞升」基于全资源场景,当前纯挂机(无丹药/无秘境)节奏约 170-200 日,已对齐飞升目标;筑基段(5-7 天)与飞升段在数学上不可能同时满足(比例体系下全流程等速),以飞升行为主锚。
仙界深度重构基线(第二十七批,8 seed 取均值,从人仙起步均衡策略):仙界总时长 1204 日(目标 1170,偏差 +2.9%,σ=143 日);单境停留 人仙 91 / 地仙 119 / 天仙 127 / 玄仙 125 / 金仙 156 / 太乙 181 / 大罗 152 / 准圣 118 / 混元 135 日。凡界 68.6 日/境 → 仙界 104.8 日/境(比值 1.53x)——重构前两者均为 74 日/境、完全同速,飞升毫无体感差异。法则终局 32.8/40 阶(八条均衡推进,末档强制取舍)。存档向前兼容:剥离 law 系统与仙门字段的老档可正常读取、零法则进度直接可玩。
仙界经济闭环 + 法则词条化基线(第二十八批,8 seed 双模式对照,拜天枢画像):最激进「全买派」(仙门贡献全砸感悟兑换 + 每日买满 2 颗法则感悟丹)外部感悟占比 5.4%(峰值 6.3%,远低于 15% 红线);与纯挂机基线对照,经济对仙界总时长的净压缩仅 1.4%(833→821 日)——双轴资源博弈成环未破坏 1170 节奏。8 条法则全部词条化(主属性 + 阶梯副词条,time/causality 补齐 physique/luck),不引入二级战斗属性。绝对值说明:拜天枢(+50% 主修金悟道)把 realistic 仙界时长压到 ~820-830 日(纯挂机同画像 833 日),与第 27 批 1204 日无宗门基线之差属宗门加速效应,非本批回归;若要重新锚定 ~1170,应下调 WUDAO_BASE(独立调参项)。
已知边界
-
战斗修为收益略高于打坐(约 1.13 倍),属风险补偿(战败会掉 20% 修为 + 灵石);若后续失衡,调
combat.py的exp_reward系数即可。 -
v2 后探索不再有凶险(地点只影响灵气与机缘率);连续探索 3 次后机缘率减半(疲惫值),休息 4 时辰恢复。
-
坊市每日买卖各限 3 次,交易会推动价格(防倒买倒卖套利)。
-
Web 版按 Cookie 分会话;同一浏览器共享角色,换设备/无痕窗口会开新档。
-
存档为明文 JSON,改档属于单机可接受的作弊(无防篡改)。
-
装备为简版:纯属性、无强化等级、无套装效果、无耐久。
-
技能为策略自动施放,无回合内手动选技能(受
fight()非交互契约限制,见上文)。 -
门派为示例实现,只覆盖入门、日俸、贡献、晋升(v2 起贡献每日自动获得)。
-
炼丹为单炉串行,无「火候自动控温」「批量一键炼到底」;丹炉占法宝位,与青囊葫芦二选一。
-
仙界九境主体内容已落地(第二十五批:仙界秘境/仙阶功法/仙界地点/仙阶丹药/仙阶装备);第二十七批补齐仙界法则系统、仙阶门派(5 座)、仙界专属事件(12 个),并把仙界节奏从「与凡界同速」重构为 1.53 倍;第二十八批打通仙界经济闭环(仙市·法则兑换消耗仙门贡献 + 仙阶丹药消耗灵石,双轴资源博弈成环)并把 8 条法则全部词条化(主属性 + 阶梯副词条,不引入二级战斗属性)。
-
寿元为纯展示(挂机养老定位,无死亡判定);仙界「与天同寿」大数。
-
闭关不自动突破、不自动嗑药(决策点留给玩家);一键托管
idle-auto同样不越权。 -
氪金设计(离线扩容/外观/一键日常)为单机版的预留方向,当前未接入付费体系——数值天花板不因付费而变,此设计红线不变。
-
无 NPC 对话树、无地图探索网格(秘境为线性层数推进,非自由地图),都可按上文方式接入。