# test_privilege_empire_guild_parity.gd —— Metin2 40250 官方帝国与公会恩泽特权 1:1 测试套件 extends SceneTree const PrivilegeEmpireGuildSystem = preload("res://privilege_empire_guild_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_privilege_empire_guild_parity (Direction 4: Privileges & Rates 1:1) ===") test_empire_and_guild_privileges() test_effective_privilege_max_calculation() test_unique_items_stacking() test_privilege_expiration() test_serialization() print("\n=======================================================") print("Privilege System Tests: %d Passed, %d Failed" % [_passed, _failed]) print("=======================================================\n") if _failed > 0: quit(1) else: quit(0) func test_empire_and_guild_privileges() -> void: print("\n--- Test 1: Empire & Guild Privileges Setup (40250 1:1) ---") var system = PrivilegeEmpireGuildSystem.new() # 辛秀帝国 (1) 开启双倍经验 (+100% EXP, 持续 3600 秒) system.set_empire_privilege(1, PrivilegeEmpireGuildSystem.PRIV_EXP, 100, 3600.0) # 公会 (ID: 501) 开启爆率加成 (+50% Item Drop, 持续 1800 秒) system.set_guild_privilege(501, PrivilegeEmpireGuildSystem.PRIV_ITEM_DROP, 50, 1800.0) # 辛秀国民查询经验加成 var exp_bonus = system.get_effective_privilege(1001, 1, 0, PrivilegeEmpireGuildSystem.PRIV_EXP) _assert(exp_bonus == 100, "Shinsoo citizen enjoys +100% EXP bonus") # 敌国 (Chunjo 2) 查询经验加成 var enemy_exp = system.get_effective_privilege(2001, 2, 0, PrivilegeEmpireGuildSystem.PRIV_EXP) _assert(enemy_exp == 0, "Chunjo citizen has 0% EXP bonus") # 公会 501 成员查询爆率加成 var drop_bonus = system.get_effective_privilege(1001, 1, 501, PrivilegeEmpireGuildSystem.PRIV_ITEM_DROP) _assert(drop_bonus == 50, "Guild 501 member enjoys +50% Item Drop bonus") func test_effective_privilege_max_calculation() -> void: print("\n--- Test 2: Effective Privilege MAX Rule (40250 1:1) ---") var system = PrivilegeEmpireGuildSystem.new() # 全服全境特权: +20% EXP system.set_empire_privilege(0, PrivilegeEmpireGuildSystem.PRIV_EXP, 20, 3600.0) # 辛秀专属帝国特权: +50% EXP system.set_empire_privilege(1, PrivilegeEmpireGuildSystem.PRIV_EXP, 50, 3600.0) # 辛秀第一公会 (888) 特权: +80% EXP system.set_guild_privilege(888, PrivilegeEmpireGuildSystem.PRIV_EXP, 80, 3600.0) # 依据 40250 原版 priv_manager.cpp: # val = MAX(val_ch, GetPrivByEmpire(0, type)) -> 20 # val = MAX(val, GetPrivByEmpire(ch->GetEmpire(), type)) -> 50 # val = MAX(val, GetPrivByGuild(ch->GetGuild()->GetID(), type)) -> 80 var final_exp = system.get_effective_privilege(1001, 1, 888, PrivilegeEmpireGuildSystem.PRIV_EXP) _assert(final_exp == 80, "Computed MAX value (80%) among global, empire, and guild") func test_unique_items_stacking() -> void: print("\n--- Test 3: Experience Ring & Thief Glove Stacking (40250 1:1) ---") var system = PrivilegeEmpireGuildSystem.new() system.set_empire_privilege(1, PrivilegeEmpireGuildSystem.PRIV_EXP, 50, 3600.0) system.set_empire_privilege(1, PrivilegeEmpireGuildSystem.PRIV_ITEM_DROP, 25, 3600.0) # 佩戴经验指环 (+50% EXP) -> 50 + 50 = 100% var exp_with_ring = system.get_effective_privilege(1001, 1, 0, PrivilegeEmpireGuildSystem.PRIV_EXP, true, false) _assert(exp_with_ring == 100, "EXP stacked with Experience Ring (+50% = 100%)") # 佩戴小偷手套 (+100% Drop) -> 25 + 100 = 125% var drop_with_glove = system.get_effective_privilege(1001, 1, 0, PrivilegeEmpireGuildSystem.PRIV_ITEM_DROP, false, true) _assert(drop_with_glove == 125, "Drop rate stacked with Thief Glove (+100% = 125%)") func test_privilege_expiration() -> void: print("\n--- Test 4: Privilege Expiration with Delta Time ---") var system = PrivilegeEmpireGuildSystem.new() system.set_empire_privilege(1, PrivilegeEmpireGuildSystem.PRIV_EXP, 100, 500.0) system.set_guild_privilege(777, PrivilegeEmpireGuildSystem.PRIV_GOLD_DROP, 30, 200.0) # 推进 300 秒 (公会 200 秒特权已过期,帝国 500 秒特权尚存) system.update(300.0) var guild_gold = system.get_effective_privilege(1001, 1, 777, PrivilegeEmpireGuildSystem.PRIV_GOLD_DROP) _assert(guild_gold == 0, "Guild privilege expired after 300s") var emp_exp = system.get_effective_privilege(1001, 1, 777, PrivilegeEmpireGuildSystem.PRIV_EXP) _assert(emp_exp == 100, "Empire privilege still active") # 推进 300 秒 (帝国特权也过期) system.update(300.0) emp_exp = system.get_effective_privilege(1001, 1, 777, PrivilegeEmpireGuildSystem.PRIV_EXP) _assert(emp_exp == 0, "Empire privilege expired after 600s") func test_serialization() -> void: print("\n--- Test 5: Privilege State Serialization ---") var system = PrivilegeEmpireGuildSystem.new() system.set_empire_privilege(1, PrivilegeEmpireGuildSystem.PRIV_EXP, 75, 1000.0) system.set_character_privilege(999, PrivilegeEmpireGuildSystem.PRIV_GOLD_DROP, 15) var data = system.serialize() _assert(data.has("empire_privs") and data.has("char_privs"), "Serialized data") var restored = PrivilegeEmpireGuildSystem.new() restored.deserialize(data) var emp_exp = restored.get_effective_privilege(1001, 1, 0, PrivilegeEmpireGuildSystem.PRIV_EXP) _assert(emp_exp == 75, "Restored 75% empire EXP") var char_gold = restored.get_effective_privilege(999, 1, 0, PrivilegeEmpireGuildSystem.PRIV_GOLD_DROP) _assert(char_gold == 15, "Restored 15% character gold drop")