卡①T4b(拆件批wr5/V11): combat_segment run 拆三私有——run 留案C闸复位+本轮事实推导(streak/踩雷清零)+蓄力层注入,调 _hero_strike(主角先手单+连珠矢分段)/_enemy_actions(逐敌技能行兑现,施放行与伤害行两支,hero hp=0短路)/_board_deferred_settle(地图账补提交/主角倒下留未生效行/段界flush);调用序=主角→敌方→地图殿后逐字,开单序/行发射点/载荷零变化。验收:gdstyle基线外0 NEW+十套件742 PASS+零SCRIPT ERROR〔拆件批 V11〕
This commit is contained in:
1 parent
dcdde6ad99
commit
bc7a171e3d
1 file changed
+26
-13
@@ -6,6 +6,7 @@ extends RefCounted
|
||||
# 调用序:主角先手 → 逐敌还手 → 地图伤害账殿后〔案C〕;hero hp=0 短路。
|
||||
# 行发射/开单单点归宿主(oc)——案C 暂存闸归 RewardGrant(段持三引用直调,零转发壳)——
|
||||
# 本函数体为原编排器 _combat_segment 逐字搬运(🔴 零行为变更契约)。
|
||||
# run 编排骨架+三私有族(_hero_strike/_enemy_actions/_board_deferred_settle);段序逐字。
|
||||
|
||||
var oc: BattleOrchestrator # 宿主(类型标注=段内 := 推断前提;循环类名引用 Godot 4 全局类安全)
|
||||
var fx_host: BattleFxHost # 效果引擎宿主件(三引用构造——本轮无消费面,构造形与授予段同形)
|
||||
@@ -34,14 +35,20 @@ func run(ri: int) -> void:
|
||||
# 蓄力层注入(内容数据驱动扩展批 T3——整备军备「每层下轮首段 +1」/厚积薄发满层 spike/铁壁整备
|
||||
# 减伤——三件 fact charge_layers 同读 action_economy;battle 域每轮刷新)
|
||||
oc._damage.charge_layers = oc.action_economy.charge_layers
|
||||
# ⓪ 主角先手攻击(基础攻击恒存在;先于敌方行动。案C:授予段不再产出伤害,
|
||||
# 主角进入战斗段时恒存活——先手必兑,除非场上无敌)。
|
||||
# 单分量伤害构成:主角攻击 = 唯一基础分量(atk,吃掷点含暴击;
|
||||
# 类型 = 主角 attack_type 表值(量与类型抽象分离);查甲效矩阵对应行取克制修正)。
|
||||
# 原"基础 + 穿刺/魔法充能三分量"模型随充能系统整体退役——克制策略归冒险前配置(营地换型 / 未来冒险前参数面),
|
||||
# 局内不再有挖掘攒弹药的第二伤害供给。attack_up 增益经 hero_offense 池乘攻击合计(见池乘区注记)。
|
||||
# 护甲等级掷点:基础分量吃掷点判定(含暴击);棋盘来源伤害不掷不折;
|
||||
# 任何伤害落地 ≥ damage_floor(全局 max(1,·) 适用所有来源,下限在控制器管线单点收口)。
|
||||
_hero_strike(ri)
|
||||
_enemy_actions(ri)
|
||||
_board_deferred_settle(ri)
|
||||
|
||||
|
||||
# ⓪ 主角先手攻击(基础攻击恒存在;先于敌方行动。案C:授予段不再产出伤害,
|
||||
# 主角进入战斗段时恒存活——先手必兑,除非场上无敌)。
|
||||
# 单分量伤害构成:主角攻击 = 唯一基础分量(atk,吃掷点含暴击;
|
||||
# 类型 = 主角 attack_type 表值(量与类型抽象分离);查甲效矩阵对应行取克制修正)。
|
||||
# 原"基础 + 穿刺/魔法充能三分量"模型随充能系统整体退役——克制策略归冒险前配置(营地换型 / 未来冒险前参数面),
|
||||
# 局内不再有挖掘攒弹药的第二伤害供给。attack_up 增益经 hero_offense 池乘攻击合计(见池乘区注记)。
|
||||
# 护甲等级掷点:基础分量吃掷点判定(含暴击);棋盘来源伤害不掷不折;
|
||||
# 任何伤害落地 ≥ damage_floor(全局 max(1,·) 适用所有来源,下限在控制器管线单点收口)。
|
||||
func _hero_strike(ri: int) -> void:
|
||||
var hero_alive: bool = int(oc._enemy_system.hero_unit().get("hp", 0)) > 0
|
||||
var hero_target = oc._enemy_system.default_target()
|
||||
if hero_alive and hero_target != null:
|
||||
@@ -59,8 +66,11 @@ func run(ri: int) -> void:
|
||||
"连击分段", "board", int(h.get("value", 0)), DamageController.TARGET_FRONT_ALIVE, ri,
|
||||
oc.minesweeper.hero_pos(), "pierce")
|
||||
oc._damage.submit(ct)
|
||||
# 敌方行动(敌人技能池批——本拍动作开轮已摇定,此处按技能行兑现;行序 = 生成序)。
|
||||
# 死亡即不动手:摇定后、兑现前死亡的敌不在存活序中——本拍技能作废,不 commit、不进冷却。
|
||||
|
||||
|
||||
# 敌方行动(敌人技能池批——本拍动作开轮已摇定,此处按技能行兑现;行序 = 生成序)。
|
||||
# 死亡即不动手:摇定后、兑现前死亡的敌不在存活序中——本拍技能作废,不 commit、不进冷却。
|
||||
func _enemy_actions(ri: int) -> void:
|
||||
for u in oc._enemy_system.query_alive("enemy"):
|
||||
if int(oc._enemy_system.hero_unit().hp) <= 0:
|
||||
break # hero hp=0 立即短路(死尸挨打行是归因噪音——用户拍板)
|
||||
@@ -90,9 +100,12 @@ func run(ri: int) -> void:
|
||||
et["source_unit"] = u
|
||||
et["context"] = {"skill_id": skill_id, "baseline": baseline}
|
||||
oc._damage.submit(et)
|
||||
# 地图伤害兑付(案C:战斗段末——怪物还手后按授予段事件序补提交统一结账;
|
||||
# 主角死于怪物 → 地图账不兑,逐单留「未生效」行不作废静默——没生效也要留痕口径;
|
||||
# 补提交后若地图直伤反杀主角,控制器 _halted 作废余单——战斗已败,胜负归判定段)
|
||||
|
||||
|
||||
# 地图伤害兑付(案C:战斗段末——怪物还手后按授予段事件序补提交统一结账;
|
||||
# 主角死于怪物 → 地图账不兑,逐单留「未生效」行不作废静默——没生效也要留痕口径;
|
||||
# 补提交后若地图直伤反杀主角,控制器 _halted 作废余单——战斗已败,胜负归判定段)
|
||||
func _board_deferred_settle(ri: int) -> void:
|
||||
if int(oc._enemy_system.hero_unit().get("hp", 0)) <= 0:
|
||||
for t in (reward_grant.defer["queue"] as Array):
|
||||
oc._emit_row({"type": "reward_ineffective", "source_class": String(t.get("source_class", "")), "origin_cell": t.get("origin_cell", Vector2i(-1, -1))}, ri,
|
||||
|
||||
Reference in new issue
Block a user