# 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)