# test_monarch_empire_treasury_parity.gd —— Metin2 40250 君主特权与国库祈愿系统 1:1 测试套件 extends SceneTree const MonarchEmpireTreasurySystem = preload("res://monarch_empire_treasury_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_monarch_empire_treasury_parity (Direction 1: Monarch & Treasury 1:1) ===") test_monarch_appointment() test_treasury_management_and_tax() test_heal_my_empire() test_power_up_and_defense_up() test_serialization() print("\n=======================================================") print("Monarch Treasury Tests: %d Passed, %d Failed" % [_passed, _failed]) print("=======================================================\n") if _failed > 0: quit(1) else: quit(0) func test_monarch_appointment() -> void: print("\n--- Test 1: Monarch Appointment & Verification (40250 1:1) ---") var system = MonarchEmpireTreasurySystem.new() _assert(system.is_monarch(1001, 1) == false, "No monarch initially") # 任命辛秀帝国 (红国 1) 君主 var ok = system.appoint_monarch(1, 1001, "赤霄狂帝") _assert(ok == true, "Appointed Shinsoo monarch") _assert(system.is_monarch(1001, 1) == true, "Player 1001 is monarch of Shinsoo") _assert(system.is_monarch(1002, 1) == false, "Player 1002 is not monarch") _assert(system.is_monarch(1001, 2) == false, "Player 1001 is not Chunjo monarch") var info = system.get_monarch_info(1) _assert(info["player_name"] == "赤霄狂帝", "Monarch name recorded") _assert(info["player_id"] == 1001, "Monarch PID recorded") func test_treasury_management_and_tax() -> void: print("\n--- Test 2: Treasury Gold & Monster Micro-Tax (40250 1:1) ---") var system = MonarchEmpireTreasurySystem.new() _assert(system.get_treasury_gold(1) == 0, "Treasury starts at 0") # 国库注资 1,000,000 system.add_treasury_gold(1, 1000000) _assert(system.get_treasury_gold(1) == 1000000, "Treasury has 1,000,000 gold") # 征缴打怪微税 (2% 进国库) var tax = system.collect_monster_tax(1, 50000, 0.02) _assert(tax == 1000, "Collected 1,000 gold tax from 50,000 drop") _assert(system.get_treasury_gold(1) == 1001000, "Treasury increased to 1,001,000") # 扣除资金 var dec_ok = system.dec_treasury_gold(1, 500000) _assert(dec_ok == true, "Dec treasury 500,000 succeeded") _assert(system.get_treasury_gold(1) == 501000, "Treasury balance is 501,000") # 超额扣除拦截 dec_ok = system.dec_treasury_gold(1, 9999999) _assert(dec_ok == false, "Rejected overdraft") func test_heal_my_empire() -> void: print("\n--- Test 3: HealMyEmpire Grace (40250 1:1) ---") var system = MonarchEmpireTreasurySystem.new() system.appoint_monarch(1, 1001, "赤霄狂帝") system.add_treasury_gold(1, 300000) # 存入 300,000 # 模拟在线国民 var citizens: Array[Dictionary] = [ {"pid": 1001, "empire": 1, "hp": 200, "max_hp": 2000, "sp": 50, "max_sp": 500}, {"pid": 1002, "empire": 1, "hp": 50, "max_hp": 1500, "sp": 10, "max_sp": 400}, {"pid": 2001, "empire": 2, "hp": 100, "max_hp": 1000, "sp": 20, "max_sp": 300} # 敌国国民 ] # 非君主尝试施展 -> 拦截 var res = system.heal_my_empire(1002, 1, citizens) _assert(res["ok"] == false, "Rejected non-monarch cast") _assert(res["reason"] == "NOT_MONARCH", "Reason is NOT_MONARCH") # 君主施展恩泽圣愈 res = system.heal_my_empire(1001, 1, citizens) _assert(res["ok"] == true, "HealMyEmpire succeeded") _assert(res["healed_count"] == 2, "Healed 2 Shinsoo citizens") _assert(citizens[0]["hp"] == 2000 and citizens[0]["sp"] == 500, "Citizen 1 fully restored") _assert(citizens[1]["hp"] == 1500 and citizens[1]["sp"] == 400, "Citizen 2 fully restored") _assert(citizens[2]["hp"] == 100, "Enemy empire citizen not healed") _assert(res["remaining_treasury"] == 200000, "Cost 100,000 deducted from treasury") # 冷却期连续施放 -> 拦截 res = system.heal_my_empire(1001, 1, citizens) _assert(res["ok"] == false, "Rejected during cooldown") _assert(res["reason"] == "COOLDOWN_ACTIVE", "Reason is COOLDOWN_ACTIVE") func test_power_up_and_defense_up() -> void: print("\n--- Test 4: PowerUp & DefenseUp Empire Auras (40250 1:1) ---") var system = MonarchEmpireTreasurySystem.new() system.appoint_monarch(1, 1001, "赤霄狂帝") system.add_treasury_gold(1, 2000000) # 200万国库金币 # 激活战力觉醒 (PowerUp, +10% 攻击力) var res = system.activate_power_up(1001, 1) _assert(res["ok"] == true, "Activated PowerUp") _assert(res["att_grade_bonus"] == 0.10, "+10% attack bonus") _assert(res["remaining_treasury"] == 1500000, "Deducted 500,000 cost") # 激活铁壁守护 (DefenseUp, +10% 防御力) res = system.activate_defense_up(1001, 1) _assert(res["ok"] == true, "Activated DefenseUp") _assert(res["def_grade_bonus"] == 0.10, "+10% defense bonus") # 检查国民享受的增益 var buffs = system.get_citizen_empire_buffs(1) _assert(buffs["att_bonus"] == 0.10, "Shinsoo citizen enjoys +10% attack") _assert(buffs["def_bonus"] == 0.10, "Shinsoo citizen enjoys +10% defense") # 敌国无增益 var enemy_buffs = system.get_citizen_empire_buffs(2) _assert(enemy_buffs["att_bonus"] == 0.0, "Enemy has 0 bonus") # 时间推移 1900 秒 (增益持续 1800 秒结束) system.update(1900.0) buffs = system.get_citizen_empire_buffs(1) _assert(buffs["att_bonus"] == 0.0 and buffs["def_bonus"] == 0.0, "Auras expired naturally") func test_serialization() -> void: print("\n--- Test 5: Serialization & Restoration ---") var system = MonarchEmpireTreasurySystem.new() system.appoint_monarch(1, 1001, "赤霄狂帝") system.add_treasury_gold(1, 888888) var data = system.serialize() _assert(data.has("monarch_pids") and data["treasury"][1] == 888888, "Serialized state") var restored = MonarchEmpireTreasurySystem.new() restored.deserialize(data) _assert(restored.is_monarch(1001, 1) == true, "Restored monarch PID") _assert(restored.get_treasury_gold(1) == 888888, "Restored treasury gold")