From edffa51b7ebdd5d9bbd6961222903803c9150c5a Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Sun, 4 Oct 2026 03:32:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=B1=E6=8C=96=E9=92=BB=E5=A4=B4=E7=BC=BA?= =?UTF-8?q?=E9=99=B7=E4=BF=AE=E5=A4=8D=EF=BC=882026-10-04=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AE=9E=E6=B5=8BAP=3D1=E6=97=A0=E6=B3=95=E5=BC=80?= =?UTF-8?q?=E6=A0=BC=E2=80=94=E2=80=94=E5=AE=9E=E7=8E=B0=E5=81=8F=E7=A6=BB?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=96=87=E6=9C=AC=E8=BF=94=E5=B7=A5=EF=BC=89?= =?UTF-8?q?=EF=BC=9A=E3=80=8C=E5=BC=80=E6=8E=98=E9=9C=80=E9=A2=9D=E5=A4=96?= =?UTF-8?q?~1AP=E3=80=8D=E7=9A=84=E3=80=8E=E5=BC=80=E6=8E=98=E3=80=8F=3D?= =?UTF-8?q?=E6=8E=98=E6=B7=B1=E5=B1=82=E8=B5=84=E6=BA=90=EF=BC=8CT5?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=94=99=E6=8A=8A=E5=AF=B9=E4=BB=B7=E6=8C=82?= =?UTF-8?q?=E6=88=90=E6=8C=81=E6=9C=89=E6=9C=9F=E6=89=80=E6=9C=89=E6=8C=96?= =?UTF-8?q?=E6=8E=98=E5=8A=A8=E4=BD=9C=E7=A8=8E=EF=BC=88dig=E6=88=90?= =?UTF-8?q?=E6=9C=AC1=E2=86=922=EF=BC=89=E2=86=92AP=3D1=E9=94=81=E6=AD=BB?= =?UTF-8?q?=E5=BC=80=E6=A0=BC=E5=8F=AA=E8=83=BD=E6=A0=87=E6=97=97=EF=BC=88?= =?UTF-8?q?=E8=BF=9D=E6=95=A3=E4=BB=B6=E4=BF=9D=E5=BA=95B-2=E2=80=94?= =?UTF-8?q?=E2=80=94=E6=B5=81=E6=B4=BE=E4=BB=B6=E5=8F=98=E7=BA=AF=E8=B4=9F?= =?UTF-8?q?=E6=94=B6=E7=9B=8A=E4=BB=B6=EF=BC=89=EF=BC=9B=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=3D=E5=AF=B9=E4=BB=B7=E6=8C=82=E4=BB=98=E8=B4=B9=E5=BC=80?= =?UTF-8?q?=E6=8E=98=E4=BE=A7=EF=BC=9AAP=E5=AF=8C=E4=BD=99=EF=BC=88?= =?UTF-8?q?=E2=89=A5=E5=9F=BA=E7=A1=80+extra=EF=BC=89=E6=8C=96=E6=8E=98?= =?UTF-8?q?=E4=BB=98=E5=85=A8=E4=BB=B7=E7=A7=AFdeep=5Fpaid=5Fcount?= =?UTF-8?q?=EF=BC=88=E6=B7=B1=E5=B1=82=E4=BA=A7=E5=87=BA=E9=85=8D=E9=A2=9D?= =?UTF-8?q?=E5=8F=96=E6=95=B0=E9=9D=A2=3D=E4=BB=98=E8=B4=B9=E6=AC=A1?= =?UTF-8?q?=E6=95=B0/cap=EF=BC=89=C2=B7AP=E4=B8=8D=E8=B6=B3=E6=97=B6?= =?UTF-8?q?=E9=99=8D=E7=BA=A7=E5=8F=AA=E4=BB=98=E5=9F=BA=E7=A1=801?= =?UTF-8?q?=E7=85=A7=E5=B8=B8=E5=BC=80=E6=A0=BC=E4=B8=8D=E7=A7=AF=E8=AE=A1?= =?UTF-8?q?=E6=95=B0=E2=80=94=E2=80=94=E6=8C=81=E6=9C=89=E9=92=BB=E5=A4=B4?= =?UTF-8?q?=E6=B0=B8=E4=B8=8D=E9=94=81=E6=AD=BB=E6=99=AE=E9=80=9A=E6=8C=96?= =?UTF-8?q?=E6=A0=BC=EF=BC=8C=E7=89=B9=E6=80=A7=EF=BC=88=E9=92=BB=E5=A4=B4?= =?UTF-8?q?/=E6=B7=B1=E5=B1=82=E8=B5=84=E6=BA=90/AP=E5=AF=B9=E4=BB=B7?= =?UTF-8?q?=EF=BC=89=E5=8E=9F=E6=A0=B7=E4=BF=9D=E7=95=99=EF=BC=9Baction=5F?= =?UTF-8?q?economy=20request=5Fdig=E4=BB=98=E8=B4=B9=E5=88=A4=E5=AE=9A+=5F?= =?UTF-8?q?spend=5Fcost=5Fand=5Farbitrate=E6=8B=86=E5=88=86+deep=5Fpaid=5F?= =?UTF-8?q?count=E8=B4=A6=E6=9C=AC=EF=BC=9Borchestrator=E6=B7=B1=E5=B1=82?= =?UTF-8?q?=E5=9D=97=E6=94=B9=E4=BB=98=E8=B4=B9=E9=85=8D=E9=A2=9D=E5=88=B6?= =?UTF-8?q?=EF=BC=88quota=E5=88=B6=E8=A7=A3=E8=80=A6evt=E2=86=94=E5=8A=A8?= =?UTF-8?q?=E4=BD=9C=E6=98=A0=E5=B0=84=E2=80=94=E2=80=94=E8=BF=9E=E9=94=81?= =?UTF-8?q?=E5=A4=9A=E6=A0=BC=E4=BF=9D=E5=AE=88=E4=B8=8D=E5=A4=B1=E4=BB=98?= =?UTF-8?q?=EF=BC=89=EF=BC=9B=E5=86=92=E7=83=9F+2=E5=9B=9E=E5=BD=92?= =?UTF-8?q?=E6=96=AD=E8=A8=80=EF=BC=88AP=3D1=E9=99=8D=E7=BA=A7=E5=BC=80?= =?UTF-8?q?=E6=A0=BC=3D=E7=94=A8=E6=88=B7=E5=9C=BA=E6=99=AF=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E9=97=B8/AP=3D2=E4=BB=98=E5=85=A8=E4=BB=B7=E7=A7=AF?= =?UTF-8?q?=E6=95=B0=EF=BC=89=E2=86=92716/0=E4=B8=89=E9=97=B8=EF=BC=9Bform?= =?UTF-8?q?ed=E9=87=8D=E9=94=9AN=3D20=E8=AF=BB=E6=95=B0=E4=B8=8E=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=89=8D=E9=80=90=E4=BD=8D=E5=90=8C=E5=B8=A610/75/20?= =?UTF-8?q?=EF=BC=88=E5=88=86=E5=B2=94=E6=96=B9=E5=90=91=E4=B8=8D=E5=8F=98?= =?UTF-8?q?=EF=BC=89=E2=80=94=E2=80=94off=E9=9D=A2=E9=9D=99=E6=80=81?= =?UTF-8?q?=E9=9B=B6=E6=89=B0=E5=8A=A8=E8=AE=BA=E8=AF=81=EF=BC=88=E9=9B=B6?= =?UTF-8?q?=E6=8C=81=E6=9C=89=3D=E9=9B=B6=E8=B7=AF=E5=BE=84=E8=A7=A6?= =?UTF-8?q?=E8=BE=BEdig=E6=88=90=E6=9C=AC=E6=81=A2=E5=A4=8D=E8=A1=A8?= =?UTF-8?q?=E5=80=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/core/action_economy.gd | 38 ++++++++++++++++++++++++++++---- game/core/battle_orchestrator.gd | 12 ++++++---- game/smoke/smoke_all.gd | 14 +++++++++++- 3 files changed, 55 insertions(+), 9 deletions(-) diff --git a/game/core/action_economy.gd b/game/core/action_economy.gd index a942f9f5..a88ad4aa 100644 --- a/game/core/action_economy.gd +++ b/game/core/action_economy.gd @@ -37,12 +37,17 @@ var _next_round_mode := "" # 调试观测量(同板续轮 / var _pending_ap_delta := 0 # 下轮行动点修正排队(格面资源八型批 2026-09-20——action 型 ±1 排队,轮开始兑现后清零) # 蓄力流运行态(迭代 12 T5——relic 件注入面;false=关着零扰动): # relic_ap_carry=整备军备(轮末剩余 AP 转蓄力层替代 RAP 转存——cleared 作废口径改写的停手侧承载); -# relic_dig_extra=深挖钻头(开掘额外 AP 成本——R4 甲非信息税形态);charge_layers=蓄力层账本。 +# relic_dig_extra=深挖钻头付费开掘对价(R4 甲非信息税形态;2026-10-04 试玩缺陷修复——对价挂付费 +# 开掘侧:AP 富余时挖掘付全价 1+extra 积付费计数、AP 不足时降级只付基础 1 照常开格不积计数—— +# 原「持有期所有挖掘无条件 +1」实现把对价错挂成普通挖掘税,AP=1 锁死开格);charge_layers=蓄力层账本。 var relic_ap_carry := false var relic_dig_extra := 0 var _charge_layers := 0 var charge_layers: int: get: return _charge_layers +var _deep_paid_count := 0 +var deep_paid_count: int: + get: return _deep_paid_count func _init(db_ref: ConfigDb) -> void: @@ -62,7 +67,7 @@ func _cost(kind: String) -> int: var ae = db.action_economy match kind: "dig": - return ae.dig_ap_cost + relic_dig_extra # 深挖钻头(迭代 12 T5——开掘额外 ~1 AP:R4 甲非信息税形态) + return ae.dig_ap_cost # 基础挖格成本恒表值(钻头对价挂付费开掘侧——2026-10-04 缺陷修复) "flag_place": return ae.flag_place_ap_cost "move": @@ -81,12 +86,37 @@ func try_spend(action_kind: String) -> bool: return _spend_and_arbitrate(action_kind, false) -# 排雷玩法 挖掘专用:chain_size = 连锁附加格数(不含首格);clears_map = 本次动作后全图安全格开完 +# 排雷玩法 挖掘专用:chain_size = 连锁附加格数(不含首格);clears_map = 本次动作后全图安全格开完。 +# 深挖钻头付费开掘(2026-10-04 缺陷修复——对价挂付费侧):AP 富余(≥基础+extra)时本动作付全价 +# 并积付费开掘计数(orchestrator 深层产出配额取数面);AP 不足全价时**降级只付基础 1 照常开格**、 +# 不积计数——持有钻头永不锁死普通挖格(散件保底 B-2)。 func request_dig(chain_size: int, clears_map: bool) -> bool: if _phase != Phase.ACTIVE: _reject("phase") return false - return _spend_and_arbitrate("dig", clears_map) + var cost := _cost("dig") + if relic_dig_extra > 0 and _ap >= cost + relic_dig_extra: + cost += relic_dig_extra + _deep_paid_count += 1 + if _ap < cost: + _reject("resource_face") + return false + return _spend_cost_and_arbitrate(cost, clears_map) + + +func _spend_cost_and_arbitrate(cost: int, clears_map: bool) -> bool: + if _ap < cost: + _reject("resource_face") + return false + _ap -= cost + if clears_map: + # cleared 胜出(同帧仲裁 cleared > ap_exhausted);剩余 AP 当场清零作废、不进 RAP(EC7/EC10) + _ap = 0 + _finish_round("cleared", "new_board") + elif _ap == 0: + # AP 归 0 瞬间轮次结束——不存在 0-AP 操作窗口 + _finish_round("ap_exhausted", "same_board") + return true func _spend_and_arbitrate(action_kind: String, clears_map: bool) -> bool: diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index bb966600..b39b43f3 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -76,7 +76,7 @@ var _attune_safe_seen := 0 # 掘进蓄能 battle 域安全开格 # 魔矢每战首次计数 battle 域。空集=零扰动) var _relic_first_dig_used := false var _relic_combo := 0 # 矿脉直觉连击计数(battle 域——safe +1/mine 清零) -var _relic_deep_dug := 0 # 深挖钻头深层产出计数(battle 域——每 cap 格额外 grant 一份) +var _relic_deep_given := 0 # 深挖钻头深层已兑付份数(battle 域——付费配额制:quota=付费次数/cap) var _relic_magma_layers := 0 # 熔火之躯积层(battle 域——受地形伤 +1,轮末反打清零) @@ -251,7 +251,7 @@ func begin_battle(enc: Dictionary) -> bool: _relic_flags_for((enc.get("relics", []) as Array)) _relic_first_dig_used = false _relic_combo = 0 - _relic_deep_dug = 0 + _relic_deep_given = 0 _relic_magma_layers = 0 # 树 rule 键消费(迭代 12 T10——Fork 激活侧 effects;真实接线首期两键:先手压制=战斗首轮 # AP+1(queue_ap_delta——先手压制语义)/稳健拓荒=敌方攻击减 1(伤害控制器 flags bulwark); @@ -442,10 +442,14 @@ func _settle() -> void: # 开格流连击/深层产出(迭代 12 T5):矿脉直觉连击 = safe +1(mine 清零在负向分支); # 深挖钻头深层产出 = 每 cap 格额外 grant 一份(收益面补偿额外 AP 成本——R4 甲非信息税对价) _relic_combo += 1 + # 深挖钻头深层产出(2026-10-04 缺陷修复——付费开掘配额制):深层资源只兑付给**付了全价** + # 的挖掘(action_economy.deep_paid_count 每 AP 富余挖格 +1);每 cap 次付费兑一份。 + # AP 不足降级的普通挖格照常开格但不积配额——持有钻头永不锁死挖格(散件保底 B-2)。 var dd_cap := int(_damage.relic_flags.get("deep_dig_cap", 0)) if dd_cap > 0: - _relic_deep_dug += 1 - if _relic_deep_dug % dd_cap == 0: + var quota := int(action_economy.deep_paid_count) / dd_cap + while _relic_deep_given < quota: + _relic_deep_given += 1 var dd_snap = _reward_economy.grant(evt.cell) if dd_snap is Dictionary: _grant_routed(dd_snap, "positive", "safe_cell", evt.cell, ri, "", "(深层资源)") diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 0cdb4271..d5b33a6f 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -724,7 +724,19 @@ func _smoke_relics() -> void: and int(rf23.get("spike_mult", -1)) == 2, "深挖钻头=开掘 +1 AP/每 4 格深层产出(R4 甲非信息税对价)· 蓄力三件=层值 1/减伤 1/层/满层 ×2") check(orch.action_economy.relic_ap_carry and orch.action_economy.relic_dig_extra == 1, - "蓄力/钻头 action_economy 注入(ap_carry 改写停手转存 + dig 成本 +1——关着 false/0 零扰动)") + "蓄力/钻头 action_economy 注入(ap_carry 改写停手转存 + 付费开掘对价注入——关着 false/0 零扰动)") + # ⑦b 深挖钻头付费开掘回归(2026-10-04 试玩缺陷修复——对价挂付费侧):AP=1 降级照常开格 + # (用户实测「AP=1 无法开格只能标旗」的回归闸);AP=2 付全价积付费计数(深层产出配额取数面)。 + var ae_dd = load("res://core/action_economy.gd").new(_db) + ae_dd.relic_dig_extra = 1 + ae_dd._phase = 1 if ae_dd.Phase.ACTIVE == 1 else ae_dd.Phase.ACTIVE # white-box 相位(冒烟专用) + ae_dd._ap = 1 + check(ae_dd.request_dig(0, false) and ae_dd.deep_paid_count == 0, + "钻头降级:AP=1 照常开格(只付基础 1 不积付费——持有钻头永不锁死挖格,散件保底 B-2)") + ae_dd._ap = 2 + ae_dd._phase = ae_dd.Phase.ACTIVE # 首挖 AP 归 0 已翻轮(ap_exhausted 仲裁)——白盒复位续测 + check(ae_dd.request_dig(0, false) and ae_dd.deep_paid_count == 1, + "钻头付费开掘:AP=2 付全价(基础 1+对价 1——deep_paid_count 积数=深层产出配额取数面)") # ⑧ T6 吞噬流求值面(27 件全量——七流派档位成型) var ids27: Array = ids23.duplicate() ids27.append_array(["ley_harvest", "thorn_weaver", "purge_sapper", "magma_body"])