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