# weapon_reach_scale_attack_parity_test —— 40250 __NormalAttackProcess。 # # ActorInstanceCollisionDetection.cpp 将刀尖球从 last 到 current 的位移向量 # 乘以 __GetReachScale();AFFECT_GEOMGYEONG=1.5 不只影响视觉刀光,也影响 # 攻击命中位置。 extends SceneTree const NetPlay = preload("res://net_play.gd") var _fail := 0 func _ck(condition: bool, message: String) -> void: if not condition: _fail += 1 printerr("FAIL: " + message) func _run() -> void: var np := NetPlay.new() root.add_child(np) var view := Node.new() var script := GDScript.new() script.source_code = """ extends Node func weapon_reach_scale() -> float: return 1.5 """ script.reload() view.set_script(script) root.add_child(view) np.player_view = view if not np.has_method("_attack_sample_positions"): _ck(false, "attack sample path exposes the reach-scaled endpoint helper") else: var out: Dictionary = np._attack_sample_positions( Vector3(0.0, 0.0, 0.0), Vector3(10.0, 0.0, 0.0), 0.0, Vector3.ZERO) _ck(Vector3(out.get("last", Vector3.ZERO)).is_equal_approx(Vector3.ZERO), "attack sweep keeps the last sample unchanged") _ck(Vector3(out.get("pos", Vector3.ZERO)).is_equal_approx(Vector3(15.0, 0.0, 0.0)), "AFFECT_GEOMGYEONG reach scale extends the attack sweep by 1.5") if _fail == 0: print("PASS: weapon_reach_scale_attack_parity_test (attack sweep reach scale)") quit(0) else: printerr("%d check(s) failed" % _fail) quit(1) func _init() -> void: call_deferred("_run")