走镖系统融入方案 —— 借鉴《运镖天下之四大镖局》
依据:《运镖天下》设定整理 + 2026-09-25 对现有代码的调研。 结论先行:走镖不是新玩法岛,而是把已有的五个散件(游历队伍 / 城镇委托 / 山匪 / 城镇好感 / 门人忠诚)串成一个中程循环的粘合剂。GDD 6.1 早已预留「送镖/护镖/暗镖」任务槽位,本方案负责把槽位填实。 状态:待评审→ 第一、二批已实现(2026-09-25 当日落地,见下方「实现状态」)。数值均为建议初值,全部进balance.json#world并带_note,待实测调优。
〇、实现状态(2026-09-25)
已落地(第一批 + 第二批主体 + 第三批,2026-09-25 全部完成)
第三批(同日晚间补齐)
- 暗镖(
tier:"an"):只在镖路合同镇或自设分号镇抽签刷出(10%)。货值固定 5000、酬劳 50%、押金 15%、护队 4 人;途中不得动武——游历中参与任何战斗(撞匪被动作战或主动开打)即"败露":委托作废、押金没收、好感 −8(比普通逾期更痛)。与买路钱是天然搭档(太平期间遇不到匪,暗镖就安全)。 - 镖局马厩(千里马):门派级购买(1200 两/匹,至多 3 匹),每匹给所有游历队伍速度 +6%(封顶 +18%),乘在 tick 速度刷新之后(与减速/饥饿同一条乘数链)。⚠️ 偏差说明:《运镖天下》里马就是镖局的资产而非镖师的装备,故做成马厩购买而非人物装备件——装备系统零改动。
- 镖局分号:好感 ≥「平常」(60) 的镇可花 1500 两挂靠。收益:发货镇押镖酬劳 ×1.2(本地行情)+ 垄断加成(每间 +5%,封顶 +25%,全局生效)。账本
TravelState.escort_branches。 - AI 商队:常量 2 支在两座存活城镇间走 A* 路线(速度 0.5 格/tick,慢于队伍),3D 仆从模型 + 赭金标牌 + 小舆图金点;到站消失、60 tick 后在别处重生(总量恒定)。队伍贴上(扫掠判定,与山匪同款几何)弹交涉框:劫镖=真战斗演算(护卫 4 人),赢了抢货值一半但起点/终点两镇好感各 −8(给"劫镖天下"邪道加的闸);放行=商队把这支队伍记进
ignore不再纠缠。交涉中移动/采集/休整/收队全部被拦,与山匪遭遇互斥。 - 主线护送章节:
mainline.json章节战斗新增battle.escort(要护的人名)。tactical.simulate新增护送目标(build_escort:我方侧、不主动出手、会被敌人攻击、血量按等级缩放);终局判定改写:目标活着=胜(打退敌人或撑到时限都算"送到")、倒下=即败(reason:"护送成功"/"护送目标倒下")。首个落地章节:卷二第 11 章「枯荣禅机」→「南下护行」(护送段誉,3 名吐蕃武士,v2 战斗数 24→25,verify_mainline 全绿)。
第一、二批(2026-09-25 日间)
- 押镖三档:铜镖(货值 600)/ 银镖(1600)/ 金镖(4000);酬劳=货值×40%,押金=货值×25%(接镖先付,送达退还,逾期没收);护队人数 2/3/4。生成权重 铜60/银30/金10,「镖路合同」镇改为 30/40/30(专出高价单)。
- 时限:
due_day绝对作品日(生成日 + 2 + 距离÷40,封顶 +6)。没人接过期 ⇒ 悄悄换新(《运镖天下》"一天没人接就消失");接了逾期 ⇒ 作废:押金没收 + 城镇好感 −5 + 日志。 - 酬劳修正:提前 ≥1 日送达 ×1.2;发货镇好感 ≥80(镖路合同)×1.3(两者可叠)。
- 送达结算:押金退还 + 酬劳入账;全队忠诚 +2;镖职记功——趟子手→镖师(6)→镖头(15)→大镖头(30)→总镖头(50) 按送达次数晋升,晋升忠诚 −8(《运镖天下》"升职降忠诚"),可 摆宴(200 两,忠诚 +8)补救。
- 金镖资格:交割时队中须有镖职 ≥「镖头」的门人压阵,人数够也不行。
- 买路钱(400 两 / 2 个作品日"Jianghu太平"):太平期间游荡山匪不撞队伍;已在打的遭遇照旧。
- 护镖令(600 两):在途的送信/押镖委托期限各 +2 日(一次性改
due_day,不留计时器状态)。 - 前端:委托卡显示档位/押金/剩余日/合同标/金镖资格提示;队伍卡任务行带档位与倒计时(逾期染红);委托板底部「Jianghu打点」区(买路钱/护镖令按钮);详情浮窗 howto 按押镖行规重写;新增
town_quest_failed(逾期)与escort_rank_up(晋升)toast。 - 存档:
TravelState.safe_pass(太平剩余 tick)与escort_ledger(镖职账本)进存档;老档缺省(没太平、账本空),走镖字段漏存即"读档后悄悄归零"的教训已写成注释。 - 验收:selftest 1356 通过 / 0 失败(新增 19 条端到端断言);probe_worldmap 116 通过 / 0 失败(新增 2 条 UI 断言);四道门禁全过;前端已 rebuild;后端已用新代码重启。
与原方案的差异(约束"不动人物/武器/装备/战斗/地图"的改造)
- "护送到底即胜"未做成 tactical 战斗目标(那要动战斗系统)——风险改由 押金 + 期限 承担:遭遇战败沿用既有规则(队伍被打散、全队负伤),只要在限期内任何一支够格队伍送达即成功。戏剧性等价(误期才是敌人),实现零战斗改动。
- 三路打点的"名门派高手护道"未做(留给 P1 事件框架,避免现在造新事件动词)。
- AI 挖角未做(会移除门人,触碰"人物系统"红线,且需要事件 UI)。
- 镖职账本挂在
TravelState而非 Character——沿用"负伤名册"同一条纪律:影响面锁死在游历系统,不碰人物模型。 - 五色五兽职级弃用(青龙/白虎与境界 7/8 撞名),改镖行真实职级。
暂缓(待后续批次)
- AI 挖角:会移除门人(触碰人物系统红线)且需要事件 UI,暂缓。
- 名门派高手护道:留给 P1 事件框架(要新增事件动词)。
- 三批均落地后,运镖天下的核心机制已全部有本作对应物;后续按实测反馈调
balance.json#world的 escort_* 数值即可。
接口速查(Integrate探针/后续开发用)
- 指令:一批/二批:
escort_buy_pass/escort_gov_pass/escort_feast{member};三批:escort_buy_horse/escort_branch_buy{town}/caravan_choice{action:pass|rob};town_quest_accept/town_quest_abandon增押金语义。 - 委托新字段:
tier(tong/yin/jin/an)/cargo_value/deposit/due_day/deposit_paid/stealth;quest_view增tier_cn/days_left/contract。 - TravelState 新增:二批
safe_pass、escort_ledger;三批escort_branches、horses、caravans[]、caravan_meet、caravan_respawn(Caravan类:aid/bid 记起终点镇 id、ignore 记放行过的队伍)。方法escort_note_delivery/escort_has_rank/escort_rank_of/horse_speed_mult/branch_global_mult/ensure_caravans/_caravan_hit。 - tactical 新增:
build_escort(name, level)、simulate(..., escort=)(_passive单位不驱动时钟;终局块护送判定改写)。 - 事件流:
town_quest_failed、escort_rank_up、escort_pass、escort_gov_pass、三批escort_horse、escort_branch、caravan_pass、caravan_robbed/caravan_fought。 - 主线:章节
battle.escort(人名)→_cmd_mainline_battle自动构造护送目标(预览同样携带)。 - balance#world:
escort_约 35 个键 +travel_caravan_7 个键(均带_note)。
一、现状盘点:两套"镖"并存,都不够"镖"
| 现有系统 | 实现 | 问题 |
|---|---|---|
| 城镇委托·护送(大地图侧) | towns.py:61 类型权重 escort=3;完成=任意队伍带 ≥2 人走到目标镇(engine.py:2669) | 太轻:无时限、无风险、无押金,奖励 170 银+12 好感,性价比远低于剿匪+采集,没人会专程护送 |
| 议事厅·押镖(门派侧) | core/taskboard.py 掷骰结算,duration tick 挂机完成 | 抽象掷骰,不走图、不看路、无Jianghu感;与大地图侧完全平行 |
游历骨架(world/travel.py)已经很好:多队(≤3)、A* 寻路、队速=最慢者、行军耗粮、遭遇战(25 支山匪 RoamForce)、事件光点。缺的只是一个"为什么上路"的强理由——押镖就是那个理由。
二、机制映射总表(运镖天下 → 本作)
| # | 运镖天下机制 | 本作落点 | 批次 |
|---|---|---|---|
| 1 | 委托 S/E 标记,一天没人接就消失,可暂停细看 | 城镇委托加 due_day(过期换新);委托面板显示时限 | 一 |
| 2 | 镖物价值/酬劳/时限/赔偿,镖是"大单" | 押镖玩法:镖货实体挂 TravelParty.pending_escort,价值分档,酬劳=价值×0.4,押金=价值×0.25 | 二 |
| 3 | 镖队只剩 1 人也算送达(护送到底即胜) | 押镖状态败北≠团灭才算失败:只要镖货/护送对象仍在,战败也判送达但扣声望(见 5.3 折中) | 二 |
| 4 | 忠诚三线:61 应征 / 80 可挖 / 40 离职;升职大降忠诚需加薪 | Character.loyalty 已存在但只随任务涨跌:走镖成功 +2~3、晋升镖职 −10~15 需摆宴安抚、AI 挖角低忠诚门人 | 二 |
| 5 | 五色五兽镖师等级(黑凤/白虎/赤狮/黄豹/青龙) | ⚠️ 直接弃用——青龙/白虎已是境界 7/8 的名字(GDD 3.1),撞车。改用镖行真实职级:趟子手→镖师→镖头→大镖头→总镖头 五档 | 二 |
| 6 | 三路打点:土匪买路 / 名门护道 / 官府免查 | P1 好感度框架的第一个落地形态:买路钱(BanditForce)/ 护镖令(Government)/ 镖路合同(Town favor≥80) | 二 |
| 7 | 分局=路网:起终点必须自有建筑,垄断市场 | 镖局分号建筑(分舵,GDD 4.7 门派 3 级解锁):分号可作押镖起终点,线路越多高价镖越多 | 三 |
| 8 | 千里马 15000 两,脚程数倍 | 装备坐骑位(GDD 4.6 已规划坐骑主机动):给 member_travel_speed 加装备系数 | 三 |
| 9 | 抚恤金/镖物赔偿金拖垮对手 | 押镖失败赔镖(扣押金+声望);战败已有掉银粮通道,只接数值 | 一 |
| 10 | 送钱名门派人护道(象征性助战) | 事件框架新动词 hire_escort(消耗银,N tick 内遭遇战援军),或并入三路打点 | 三 |
| 11 | 反面教训:三指令战棋单调→玩家全去门口埋伏劫镖("劫镖天下") | 设计红线:正道押镖净收益必须压倒任何劫掠捷径;若做 AI 商队,劫镖必须带重好感/声望惩罚 | 全程 |
三、两套镖的分工(轻重循环咬合)
挂机层(低险稳收):议事厅掷骰镖 —— GDD 6.5 的自动派遣(D≤2、成功率>90%)挂在这里,
离线也在跑,产出贴着 k_idle 系数。
主动层(中险高收):大地图押镖 —— 真实走图、时限、遇匪真打(TacticalBattle)、
失败赔镖;单趟净收益目标 = 同耗时剿匪的 1.5~2 倍。
引导层(零险): 城镇轻护送/送信保留现状,作为新手第一次跑图的引路任务。
三层用同一条"押镖"叙事,玩家从掷骰镖自然升级到亲自押金镖。
四、代码落点速查(调研已核实的扩展点)
- 委托生成:
world/towns.py:61_TYPE_WEIGHTS/gen_quest(纯函数,派生随机流)——加due_day、cargo_value、deposit字段,必须从_quest_rng派生,不许碰主随机流(同种子同世界纪律)。 - 到达判定:
engine.py:2669类型过滤硬编码in ("letter","escort")——加时限校验(GameClock.day_count(),tick 口径,勿用墙钟)。 - 队伍任务态:
travel.pyTravelParty.pending_node/harvest是现成模式,仿制pending_escort(随存档走)。 - 战斗终局:
core/tactical.py:984胜负判定块(现仅歼灭/时限)——护送目标存活判定加在这里,result.reason加新枚举。 - 指令注册:
engine.py:857command 分发表加escort_*键;快照字段挂_world_summary(engine.py:4268)。 - 打点/事件:
events.json动词表 +apply_event(events.py:155)加新动词;BanditForce/Government 挂"免战到期日"字段进存档。 - 数值:全部进
balance.json#world。
五、分批落地
第一批:把现有护送委托做"真"(小改,3 处代码 + 数值)
- 委托加
due_day(生成时从派生 rng 出 N=3~6 作品日)与过期换新;到期未送达自动作废、进度清零。 - 护送/送信完成加时限奖励:提前送达 ×1.2,压线 ×1.0。
- 护送途中遭遇战败北=赔镖:扣
reward.silver × 0.5且城镇好感 −5(走_finish_town_quest反向)。 - 走镖送达全队 loyalty +2(复用任务结算的 loyalty 通道)。
- 验收:selftest 断言(过期/赔镖/忠诚)+ 探针(接镖→等待过期→榜单换新)。
第二批:押镖成为玩法 + 三路打点(中改,本方案核心)
押镖
- 新押镖委托档位:铜镖/银镖/金镖(镖物价值 800/2000/5000 银起),酬劳=价值×0.4,接镖先交押金=价值×0.25(失败没收),送达返还并结酬劳。
TravelParty.pending_escort = {quest_id, tier, cargo_value, npc, due_day};队伍头顶挂镖旗(复用游历 UI 骨架),HUD 显示剩余日数。- 护送对象:优先用现有主线角色(注意:新角色尚无立绘),或纯镖货(无单位,只显示镖车图标)。
- tactical 护送战:护送对象作为不可控单位参战,存活到终局=胜、阵亡=败,
reason新增「护送目标阵亡」。 - 镖职五档(趟子手→镖师→镖头→大镖头→总镖头):按押镖次数+战功晋升;晋升即忠诚 −10~15,可花银「摆宴」减免;镖职给酬劳分成(+5%/档)与
member_travel_speed(+2%/档)加成——对齐运镖天下"升职降忠诚逼你加薪"的核心人事循环。 - AI 挖角:AIGuild 每 N 日尝试挖
loyalty < 30的门人,玩家收到事件可花银挽留(对应运镖天下 80 分挖角线的防守面)。
三路打点(P1 好感度框架第一批实体)
- 买路钱:对指定 BanditForce 付银(200×匪等级)→ 5 作品日内其 6 格半径遭遇率减半;一次性投保,到期重来。
- 护镖令:向 Government 纳贡 → 10 作品日内押镖时限 +2 日、金镖刷新率上调(官面照应)。
- 镖路合同:Town favor ≥80(既有档位)后,该镇押镖酬劳 ×1.3 且专出高价单——把"送信/护送攒好感"闭环成"好感换镖路",这是运镖天下"分局垄断"在本作的轻量替身。
第三批:路网与Jianghu生态(大改/可选,待二批验证后拍板)
- 镖局分号:分舵建筑挂"镖局"功能,分号可作押镖起终点;拥有分号的线路出金镖——重现"分局=路网"的扩张欲。
- AI 商队:运镖天下 AI 门派也会走镖的可视化版——地图上出现带货游历队;劫它=高收益但沿途城镇好感重罚(堵死"劫镖天下"邪道),护它(义镖)=声望。
- 暗镖:GDD 6.1 已留名——限时、途中禁战(遇匪只能靠买路钱或绕路),纯路线规划玩法。
- 坐骑装备:兵器坊产"坐骑"件,主加
member_travel_speed(运镖天下千里马的等价物)。 - 主线护送章节:
mainline.json章节加battle.objective:"escort"类型(内容侧tools/mainline_v*_content.py),让某几章的"护送 XX 离险境"真正用上这套战斗目标。
六、设计红线(从运镖天下的教训里来)
- 正道收益 > 邪道:老作品玩家全部退化成门口埋伏劫对手镖,因为正道走镖收益撑不起工资。本作押镖单趟净收益必须 ≥ 同耗时剿匪 1.5 倍,且打点成本低到"值得买"。
- 护送判定的戏剧性:"剩 1 人也算送达"是好设计——护送战的失败条件是镖丢而非人亡,战损只影响盈亏,不让玩家因减员重跑长路。
- 两套刻度别混:时限/免战到期日一律走 tick·作品日口径(
GameClock.day_count),不碰墙钟(体力/换榜那套)。 - 纯函数纪律:委托新字段全部从
_quest_rng派生,保证同种子同世界。 - 不给战斗做减法:运镖天下三指令战棋是被时代限制的将就,本作 tactical 已是全自动演算+战报回放,只需加护送目标,不必学它的极简。
文档结束 · v1.0 · 2026-09-25 · 待评审