Files
mtgodot-poc/project/test_system_setting_parity.gd
T
shenandshen 66d217b313 feat(client): 完成40250客户端核心功能1:1对齐与桥梁高度采样修复
- 桥梁与静态物体高度采样修复:
  - 严格对齐 40250 CMapOutdoor::GetHeight 与 CAttributeInstance::GetHeight
  - 解析 .mdatr 中的 AttributeHeight 网格,使用 is_in_triangle_2d 准确计算桥面多边形平面方程
  - sample_height 查询邻近区块并返回 fMAX(fObjectHeight, fTerrainHeight),彻底解决走上桥面穿透掉入水底/河床的问题
  - 新增 test_bridge_height_parity.gd 自动化对拍测试
- 40250 怪物击杀经验动效:
  - 1:1 实现 FLY_EXP(0) / FLY_HP / FLY_SP 粒子轨迹与爆炸吸附
- 40250 客户端全系统功能对齐(Batches 1-31):
  - 包含公会、交易、骑乘、变身、钓鱼、采矿、商城、信件、结婚、地牢等 134 套对拍系统与自动化回归测试
- 文档沉淀:
  - 新增 docs/CLIENT-PARITY-AUDIT-AND-FIX-GUIDE.md 客户端对拍缺陷发现与修复工程指南
2026-09-19 08:51:25 -07:00

117 lines
4.5 KiB
GDScript

# test_system_setting_parity.gd —— 40250 系统视听与战斗选项 1:1 纯净回归测试套件
extends SceneTree
const SystemSettingSystem = preload("res://system_setting_system.gd")
var _passed := 0
var _failed := 0
func _assert(cond: bool, msg: String) -> void:
if cond:
_passed += 1
print(" [PASS] %s" % msg)
else:
_failed += 1
printerr(" [FAIL] %s" % msg)
func _init() -> void:
print("\n=== Running test_system_setting_parity (Direction 1: System Setting & PK Mode 1:1) ===")
_test_audio_and_display_settings()
_test_pk_modes_and_rules()
_test_import_export_settings()
_finish()
func _test_audio_and_display_settings() -> void:
print("\n--- Test 1: Audio & Display Settings Clamping & Signals ---")
var sss := SystemSettingSystem.new()
var signal_data := {"fired": false, "name": "", "val": null}
sss.setting_changed.connect(func(n: String, v: Variant):
signal_data["fired"] = true
signal_data["name"] = n
signal_data["val"] = v
)
# BGM volume clamping (1.5 -> 1.0)
sss.bgm_volume = 1.5
_assert(sss.bgm_volume == 1.0, "BGM volume clamped to 1.0")
_assert(signal_data["fired"] == true and signal_data["name"] == "bgm_volume", "setting_changed signal fired for bgm")
# SFX volume clamping (-0.2 -> 0.0)
sss.sfx_volume = -0.2
_assert(sss.sfx_volume == 0.0, "SFX volume clamped to 0.0")
# Camera distance clamping (50.0 -> 40.0)
sss.camera_distance = 50.0
_assert(sss.camera_distance == 40.0, "Camera distance clamped to 40.0")
# Fog & Shadow levels
sss.fog_level = 2
_assert(sss.fog_level == 2, "Fog level is 2")
sss.shadow_quality = 0
_assert(sss.shadow_quality == 0, "Shadow quality is 0")
func _test_pk_modes_and_rules() -> void:
print("\n--- Test 2: 4 PK Modes & Combat Rule Matrix ---")
var sss := SystemSettingSystem.new()
var pk_signal := {"fired": false, "mode": -1, "name": ""}
sss.pk_mode_changed.connect(func(m: int, n: String):
pk_signal["fired"] = true
pk_signal["mode"] = m
pk_signal["name"] = n
)
# 1. Monster target is ALWAYS attackable
_assert(sss.can_attack_target(false) == true, "Monsters always attackable in Peace mode")
# 2. PEACE Mode (Default)
_assert(sss.can_attack_target(true, 5000) == false, "Cannot attack positive karma player in Peace mode")
_assert(sss.can_attack_target(true, -5000) == false, "Cannot attack red name player in Peace mode")
# 3. REVENGE Mode (善恶反击)
sss.set_pk_mode(SystemSettingSystem.PkMode.REVENGE)
_assert(pk_signal["fired"] == true and pk_signal["mode"] == SystemSettingSystem.PkMode.REVENGE, "pk_mode_changed signal fired")
_assert(sss.can_attack_target(true, 5000) == false, "Cannot attack positive karma player in Revenge mode")
_assert(sss.can_attack_target(true, -5000) == true, "CAN attack red name player in Revenge mode")
# 4. GUILD Mode (阵营保护)
sss.set_pk_mode(SystemSettingSystem.PkMode.GUILD)
_assert(sss.can_attack_target(true, 5000, 100, 100) == false, "Cannot attack same guild player (guild 100 vs 100)")
_assert(sss.can_attack_target(true, 5000, 101, 100) == true, "CAN attack enemy guild player (guild 101 vs 100)")
# 5. FREE Mode (自由对决)
sss.set_pk_mode(SystemSettingSystem.PkMode.FREE)
_assert(sss.can_attack_target(true, 5000) == true, "Can attack anyone in Free mode")
func _test_import_export_settings() -> void:
print("\n--- Test 3: Import & Export Configuration Dictionary ---")
var sss := SystemSettingSystem.new()
sss.bgm_volume = 0.5
sss.sfx_volume = 0.6
sss.camera_distance = 32.0
sss.set_pk_mode(SystemSettingSystem.PkMode.REVENGE)
sss.show_critical_hit = false
var exported := sss.export_settings()
_assert(exported["bgm_volume"] == 0.5, "Exported BGM volume 0.5")
_assert(exported["current_pk_mode"] == SystemSettingSystem.PkMode.REVENGE, "Exported PK mode Revenge")
_assert(exported["show_critical_hit"] == false, "Exported show_critical_hit false")
# Create new instance and import
var sss2 := SystemSettingSystem.new()
sss2.import_settings(exported)
_assert(sss2.bgm_volume == 0.5, "Imported BGM volume restored")
_assert(sss2.camera_distance == 32.0, "Imported camera distance restored")
_assert(sss2.current_pk_mode == SystemSettingSystem.PkMode.REVENGE, "Imported PK mode restored")
_assert(sss2.show_critical_hit == false, "Imported show_critical_hit restored")
func _finish() -> void:
print("\n==========================================")
print("System Setting Parity Test Results: %d Passed, %d Failed" % [_passed, _failed])
print("==========================================")
if _failed > 0:
quit(1)
else:
quit(0)