From eb08b17ddd08424eb03e1d6e5606933f0034ac45 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期三, 06 五月 2026 10:04:57 +0800
Subject: [PATCH] 262 幻境阁 优化配表支持

---
 Main/System/PhantasmPavilion/PhantasmPavilionManager.cs |  119 ++++++++++++++++++++++++-----------------------------------
 1 files changed, 48 insertions(+), 71 deletions(-)

diff --git a/Main/System/PhantasmPavilion/PhantasmPavilionManager.cs b/Main/System/PhantasmPavilion/PhantasmPavilionManager.cs
index 7cc4e63..1eb3e20 100644
--- a/Main/System/PhantasmPavilion/PhantasmPavilionManager.cs
+++ b/Main/System/PhantasmPavilion/PhantasmPavilionManager.cs
@@ -522,97 +522,49 @@
     // 闄ら亾鍏疯В閿佸锛屽叾浠栨柟寮忔殏榛樿姘镐箙
     // 1 - 榛樿瑙i攣锛屽嵆鍒涜灏卞彲鐢ㄧ殑
     // 2 - 閬撳叿瑙i攣锛屾敮鎸佹椂鏁堛�佸崌绾э紝 Value閰嶇墿鍝両D
-    // 3 - 鍏宠仈姝﹀皢瑙i攣锛孷alue閰嶆灏咺D
     public bool IsUnlock(PhantasmPavilionType type, int id)
     {
-        // 閰嶇疆琛ㄤ腑涓嶅瓨鍦紝瑙嗕负鏈В閿�
-        if (!Has(type, id))
-            return false;
+        if (!Has(type, id)) return false;
 
         int unlockWayValue = GetUnlockWay(type, id);
         int unlockValue = GetUnlockValue(type, id);
-        // 瑙i攣鏂瑰紡鏃犳晥
-        if (!Enum.IsDefined(typeof(PhantasmPavilionUnlockWay), unlockWayValue))
-            return false;
-        var unlockWay = (PhantasmPavilionUnlockWay)unlockWayValue;
 
-        switch (unlockWay)
+        if (unlockWayValue == 1) return true; // 1 - 榛樿瑙i攣
+
+        if (unlockWayValue == 2) // 2 - 閬撳叿瑙i攣
         {
-            case PhantasmPavilionUnlockWay.Activate:
-                return true;
-            case PhantasmPavilionUnlockWay.Hero:
-                bool hasHero = HeroManager.Instance.HasHero(unlockValue);
-                return hasHero;
-            case PhantasmPavilionUnlockWay.Item:
-                // 灏佸寘閲屾病鏈�
-                if (!TryGetInfo(type, id, out var info))
-                    return false;
-                // 鐜╁鏁版嵁涓殑鐘舵�佹槸鈥滄湭婵�娲烩��
-                if (!info.State)
-                    return false;
-                // 鏄惁涓衡�滃凡杩囨湡鐨勯亾鍏封��
-                if (IsExpired(info, unlockWay))
-                    return false;
-                return true;
-            case PhantasmPavilionUnlockWay.Skin:
-                bool hasSkin = HeroUIManager.Instance.IsHeroSkinActive(HeroConfig.GetHeroIDBySkinID(unlockValue), unlockValue);
-                return hasSkin;
-            case PhantasmPavilionUnlockWay.Model:
-                // 濡傛灉瀵瑰簲鐨勫舰璞″凡瑙i攣锛屽垯璇ュご鍍忎篃瑙i攣
-                return IsUnlock(PhantasmPavilionType.Model, unlockValue);
-            default:
-                return false;
+            if (!TryGetInfo(type, id, out var info)) return false;
+            if (!info.State) return false;
+            if (IsExpired(info, PhantasmPavilionUnlockWay.Item)) return false;
+            return true;
         }
+
+        // 3銆�4銆�5鍙婁互涓婂叏閮ㄤ氦缁欏垎鍙戝嚱鏁版寜琛ㄦ牸绫诲瀷鐙珛澶勭悊
+        return CheckTableSpecificUnlock(type, unlockWayValue, unlockValue);
     }
 
-    /// <summary>
-    /// 鑾峰緱褰撳墠鐘舵��
-    /// </summary>
-    /// <returns>0 - 鏈縺娲�, 1 - 鍙縺娲�, 2 - 宸叉縺娲�</returns>
     public PhantasmPavilionState GetUnLockState(PhantasmPavilionType type, int id)
     {
-        // 閰嶇疆琛ㄤ腑涓嶅瓨鍦紝瑙嗕负鈥滄湭婵�娲烩��
-        if (!Has(type, id))
-            return PhantasmPavilionState.Locked;
+        if (!Has(type, id)) return PhantasmPavilionState.Locked;
 
-        // 宸茬粡瑙i攣
-        if (IsUnlock(type, id))
-            return PhantasmPavilionState.Activated;
+        // 濡傛灉宸茬粡婊¤冻瑙i攣鏉′欢锛岀洿鎺ヨ繑鍥� Activated
+        if (IsUnlock(type, id)) return PhantasmPavilionState.Activated;
 
-        // 杩愯鍒拌繖閲岋紝璇存槑鐗╁搧鏄�滄湭婵�娲烩�濇垨鈥滃凡杩囨湡鈥濈姸鎬� (IsUnlock 杩斿洖 false)
-        // 鏃犳晥鐨勮В閿佹柟寮�
         int unlockWayValue = GetUnlockWay(type, id);
-        if (!Enum.IsDefined(typeof(PhantasmPavilionUnlockWay), unlockWayValue))
-            return PhantasmPavilionState.Locked;
-
-        var unlockWay = (PhantasmPavilionUnlockWay)unlockWayValue;
         int unlockValue = GetUnlockValue(type, id);
 
-        switch (unlockWay)
+        // 鍙湁閬撳叿瑙i攣(2)瀛樺湪"鏈縺娲讳絾鏉愭枡瓒冲"鐨勭壒鏈変腑闂寸姸鎬�
+        if (unlockWayValue == 2)
         {
-            // 妫�鏌ラ亾鍏锋縺娲绘潯浠�
-            case PhantasmPavilionUnlockWay.Item:
-                return CheckCanActivateByItem(type, id, unlockValue)
-                    ? PhantasmPavilionState.CanActivate
-                    : PhantasmPavilionState.Locked;
-            // 妫�鏌ユ灏嗘縺娲绘潯浠�
-            case PhantasmPavilionUnlockWay.Hero:
-                int heroID = unlockValue;
-                return HeroManager.Instance.HasHero(heroID)
-                    ? PhantasmPavilionState.Activated
-                    : PhantasmPavilionState.Locked;
-            case PhantasmPavilionUnlockWay.Skin:
-                return HeroUIManager.Instance.IsHeroSkinActive(HeroConfig.GetHeroIDBySkinID(unlockValue), unlockValue)
-                    ? PhantasmPavilionState.Activated
-                    : PhantasmPavilionState.Locked;
-            case PhantasmPavilionUnlockWay.Model:
-                return IsUnlock(PhantasmPavilionType.Model, unlockValue)
-                    ? PhantasmPavilionState.Activated
-                    : PhantasmPavilionState.Locked;
-            default:
-                return PhantasmPavilionState.Locked;
+            return CheckCanActivateByItem(type, id, unlockValue)
+                ? PhantasmPavilionState.CanActivate
+                : PhantasmPavilionState.Locked;
         }
+
+        // 鍏朵粬鍏宠仈瑙i攣濡傛灉涓嶆弧瓒� IsUnlock锛屽垯蹇呭畾鏄� Locked 鐘舵��
+        return PhantasmPavilionState.Locked;
     }
+
 
     // 妫�鏌ユ槸鍚︽弧瓒斥�滈�氳繃閬撳叿婵�娲烩�濈殑鏉′欢
     private bool CheckCanActivateByItem(PhantasmPavilionType type, int id, int itemId)
@@ -636,6 +588,31 @@
         return true;
     }
 
+    /// <summary>
+    /// 鏍规嵁鎵�灞炶〃鏍�(Type)瑙f瀽 UnlockWay 鐨勭壒瀹氬惈涔夊苟鍒ゆ柇鏄惁婊¤冻鏉′欢 (鎺掗櫎 UnlockWay 1 鍜� 2)
+    /// </summary>
+    public bool CheckTableSpecificUnlock(PhantasmPavilionType type, int unlockWay, int unlockValue)
+    {
+        switch (type)
+        {
+            case PhantasmPavilionType.Face:
+                // 澶村儚琛ㄧ嫭鏈夌殑 UnlockWay 瑙f瀽瑙勫垯
+                if (unlockWay == 3) return HeroManager.Instance.HasHero(unlockValue);
+                if (unlockWay == 4) return HeroUIManager.Instance.IsHeroSkinActive(HeroConfig.GetHeroIDBySkinID(unlockValue), unlockValue);
+                if (unlockWay == 5) return IsUnlock(PhantasmPavilionType.Model, unlockValue); // 鍏宠仈褰㈣薄
+                break;
+
+            case PhantasmPavilionType.FacePic:
+            case PhantasmPavilionType.ChatBox:
+            case PhantasmPavilionType.Title:
+            case PhantasmPavilionType.Model:
+                // 鍏朵粬琛ㄧ洰鍓嶇殑鍏辨湁瑙f瀽瑙勫垯
+                if (unlockWay == 3) return HeroManager.Instance.HasHero(unlockValue);
+                if (unlockWay == 4) return HeroUIManager.Instance.IsHeroSkinActive(HeroConfig.GetHeroIDBySkinID(unlockValue), unlockValue);
+                break;
+        }
+        return false;
+    }
     public void CheckTimeOut()
     {
         bool isTimeOut = false;

--
Gitblit v1.8.0