fix(combat): 战斗逐项对齐 40250,修复移动 / 技能释放与武器挂点
- 连击类型由 combo_changed 驱动(SetComboSkillFlag,技能 122 等级) - 命中判定改为 .msa 刀尖 Z 圆柱 vs .msm 防御球(hit_collision.gd 逐行移植) - _register_hit 改为 map::insert 语义,修正命中上限 - 攻速同时缩放 GetAttackingElapsedTime 与攻击动作速率;按武器动作模式目录绑定攻击段 - 去掉本地连击超时,motion_bound 清命中表 / 连击段号 - __ProcessDataAttackSuccess:InsertDelay 硬直、physics_push.gd 击退 + GetBlendingPosition 同步、 命中特效、__HitGood / __HitGreate / __HitStone 受击动作链与抖动(ui/hit_reaction.gd) - ClassicSession::send_use_skill 不再夹带 CG_FLY_TARGETING - mac 前进 / 后退方向与技能释放修复;武器按职业骨骼挂到手上 - 新增 hit_collision / physics_push / hit_view / net_world_push / weapon_attach 测试; gpu_pose_bounds / race_motion_assembly 适配 damage 随机变体 - 文档:CLIENT-GAP.md、CLIENT-GAP-FIX.md §3.5 / §3.7 与 C.5 增量 130 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ft3kXpNdLbKEfg5uDLfqVF
This commit is contained in:
@@ -189,6 +189,26 @@ func _run() -> void:
|
||||
_ck(st.is_fan_range(91), "skill 91 IsFanRange(bipabu FAN_RANGE)")
|
||||
_ck(st.target_range(91) == 1800, "target_range(91) == 1800(bipabu.msk Range)")
|
||||
_ck(st.target_count(91, 20) == 0, "target_count(91) == 0(bipabu 无 TargetCountFormula -> 仅主目标)")
|
||||
# LoadLocaleData:RegisterSkillDesc 后 RegisterSkillTable(PythonApplication.cpp:1049-1055)。
|
||||
# RegisterSkill(.msk) 在参考端没有调用点,dwTargetRange 只来自 SkillTable.txt 的
|
||||
# TARGET_RANGE 列;GetTargetRange(PythonSkill.cpp:1086)对 MELEE/CHARGE_ATTACK 固定 170。
|
||||
var tbl := SkillTable.new()
|
||||
for lang in ["en", "common"]:
|
||||
if tbl.load_file(assets.path_join("locale/locale/%s/skilldesc.txt" % lang)):
|
||||
break
|
||||
var table_loaded: bool = tbl.has_method("load_table") \
|
||||
and bool(tbl.call("load_table", assets.path_join("locale/locale/common/skilltable.txt")))
|
||||
_ck(table_loaded, "load_table(common/skilltable.txt) succeeds")
|
||||
if table_loaded:
|
||||
_ck(tbl.target_range(1) == 0, "SkillTable TARGET_RANGE 0 overrides samyeon.msk Range: %d" % tbl.target_range(1))
|
||||
_ck(tbl.target_range(47) == 2500, "target_range(47) == 2500(SkillTable)")
|
||||
_ck(tbl.target_range(91) == 1800, "target_range(91) == 1800(SkillTable)")
|
||||
_ck(tbl.target_range(31) == 170, "MELEE_ATTACK 31 -> MELEE_SKILL_TARGET_RANGE 170: %d" % tbl.target_range(31))
|
||||
_ck(tbl.target_range(5) == 170, "CHARGE_ATTACK 5 -> MELEE_SKILL_TARGET_RANGE 170: %d" % tbl.target_range(5))
|
||||
# 预约趋近要在 Actor 碰撞(两 body 各 55cm)挡住前进入射程。
|
||||
for id in tbl._by_id.keys():
|
||||
var r := tbl.target_range(int(id))
|
||||
_ck(r == 0 or r - 10 > 110, "skill %d range %d is reachable past actor collision" % [id, r])
|
||||
# 非扇形/圆形技能:fly_shape == SINGLE(0),无 target_range
|
||||
_ck(st.fly_shape(1) == 0, "fly_shape(1) == SINGLE(0)(samyeon 非范围技)")
|
||||
_ck(st.target_count(1, 10) == 0, "target_count(1) == 0(无 TargetCountFormula)")
|
||||
|
||||
Reference in New Issue
Block a user