# test_guild_skill_parity.gd —— 40250 公会等级与 7 大神龙技能 1:1 纯净回归测试套件 extends SceneTree const GuildSkillSystem = preload("res://guild_skill_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_guild_skill_parity (Direction 3: Guild Skills 1:1) ===") _test_guild_leveling_and_points() _test_skill_leveling_and_passive_spirit() _test_skill_casting_and_formulas() _test_cooldowns_and_buff_decay() _finish() func _test_guild_leveling_and_points() -> void: print("\n--- Test 1: Guild EXP Donation & Leveling ---") var gss := GuildSkillSystem.new() _assert(gss.guild_level == 1, "Initial guild level is 1") _assert(gss.skill_points == 0, "Initial skill points is 0") # Donate EXP to level up to 2 (needed: 50,000) var res = gss.donate_exp(50000) _assert(res["ok"] == true and res["leveled_up"] == true, "Leveled up successfully") _assert(gss.guild_level == 2, "Guild level is now 2") _assert(gss.skill_points == 1, "Awarded 1 skill point") # Donate huge amount to level up to 10 gss.donate_exp(5000000) _assert(gss.guild_level > 2, "Guild level increased with large EXP donation") _assert(gss.skill_points > 1, "Multiple skill points accumulated") func _test_skill_leveling_and_passive_spirit() -> void: print("\n--- Test 2: Skill Leveling & Dragon Eyes (151) Passive ---") var gss := GuildSkillSystem.new() gss.skill_points = 10 # Provide test points # Level up 151 (Dragon Eyes) to 7 (Max) for i in range(7): var res = gss.level_up_skill(GuildSkillSystem.SKILL_DRAGON_EYES) _assert(res["ok"] == true, "Dragon Eyes upgraded to level %d" % (i + 1)) _assert(gss.skill_levels[GuildSkillSystem.SKILL_DRAGON_EYES] == 7, "Dragon Eyes is level 7 (Max)") _assert(gss.max_spirit == 200, "Max Dragon Spirit expanded from 100 to 200") # 8th level attempt rejected var res = gss.level_up_skill(GuildSkillSystem.SKILL_DRAGON_EYES) _assert(res["ok"] == false and res["reason"] == "MAX_SKILL_LEVEL", "Cannot exceed max skill level 7") func _test_skill_casting_and_formulas() -> void: print("\n--- Test 3: Skill Casting & 40250 Formula Scaling ---") var gss := GuildSkillSystem.new() gss.skill_points = 21 # Max out 151 (Dragon Eyes), 152 (Dragon Blood) and 156 (Dragon Rage) for i in range(7): gss.level_up_skill(GuildSkillSystem.SKILL_DRAGON_EYES) gss.level_up_skill(GuildSkillSystem.SKILL_DRAGON_BLOOD) gss.level_up_skill(GuildSkillSystem.SKILL_DRAGON_RAGE) gss.current_spirit = 200 # Cannot cast unlearned skill (154 Holy Armor) var res = gss.cast_guild_skill(GuildSkillSystem.SKILL_HOLY_ARMOR) _assert(res["ok"] == false and res["reason"] == "NOT_LEARNED", "Cannot cast unlearned skill") # Cannot cast passive skill (151) res = gss.cast_guild_skill(GuildSkillSystem.SKILL_DRAGON_EYES) _assert(res["ok"] == false and res["reason"] == "PASSIVE_SKILL", "Cannot cast passive skill") # Cast 152 Dragon Blood (Level 7 -> k=1.0 -> Max HP +20%) res = gss.cast_guild_skill(GuildSkillSystem.SKILL_DRAGON_BLOOD) _assert(res["ok"] == true, "Dragon Blood cast successfully") _assert(is_equal_approx(float(res["value"]), 20.0), "Level 7 Dragon Blood gives +20% Max HP") _assert(gss.current_spirit == 180, "Spirit deducted: 200 - 20 = 180") # Cast 156 Dragon Rage (Level 7 -> k=1.0 -> Crit +50%) res = gss.cast_guild_skill(GuildSkillSystem.SKILL_DRAGON_RAGE) _assert(res["ok"] == true, "Dragon Rage cast successfully") _assert(is_equal_approx(float(res["value"]), 50.0), "Level 7 Dragon Rage gives +50% Critical") var bonuses = gss.get_active_bonuses() _assert(is_equal_approx(float(bonuses["max_hp_pct"]), 20.0), "Active bonus has +20% HP") _assert(is_equal_approx(float(bonuses["critical_pct"]), 50.0), "Active bonus has +50% Crit") func _test_cooldowns_and_buff_decay() -> void: print("\n--- Test 4: Cooldown Enforcement & Buff Decay ---") var gss := GuildSkillSystem.new() gss.skill_points = 7 for i in range(7): gss.level_up_skill(GuildSkillSystem.SKILL_DRAGON_BLOOD) # 1st cast enters cooldown gss.cast_guild_skill(GuildSkillSystem.SKILL_DRAGON_BLOOD) _assert(gss.skill_cooldowns.has(GuildSkillSystem.SKILL_DRAGON_BLOOD), "Skill is in cooldown") # 2nd cast blocked by cooldown var res = gss.cast_guild_skill(GuildSkillSystem.SKILL_DRAGON_BLOOD) _assert(res["ok"] == false and res["reason"] == "COOLDOWN_ACTIVE", "Recasting blocked by cooldown") # Fast forward 61 seconds (cooldown is 60s, buff is 300s) gss.update(61.0) _assert(gss.skill_cooldowns.has(GuildSkillSystem.SKILL_DRAGON_BLOOD) == false, "Cooldown expired after 61s") _assert(gss.active_buffs.has(GuildSkillSystem.SKILL_DRAGON_BLOOD) == true, "Buff remains active after 61s") # Fast forward remaining 240 seconds -> buff expires gss.update(240.0) _assert(gss.active_buffs.has(GuildSkillSystem.SKILL_DRAGON_BLOOD) == false, "Buff expired after 300s total") func _finish() -> void: print("\n=== SUMMARY: %d passed, %d failed ===" % [_passed, _failed]) if _failed == 0: print("ALL TESTS PASSED!\n") quit(0) else: printerr("SOME TESTS FAILED!\n") quit(1)