From bb463ef0b13236738a1da9cd04f57def3e7e2c7c Mon Sep 17 00:00:00 2001 From: yyl <yyl> Date: 星期五, 29 八月 2025 15:21:51 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts --- Main/Component/UI/Common/FuncOpen.cs | 490 +++++++++++++++++++++++++++-------------------------- 1 files changed, 249 insertions(+), 241 deletions(-) diff --git a/Main/Component/UI/Common/FuncOpen.cs b/Main/Component/UI/Common/FuncOpen.cs index f5276a3..84ddee8 100644 --- a/Main/Component/UI/Common/FuncOpen.cs +++ b/Main/Component/UI/Common/FuncOpen.cs @@ -4,250 +4,258 @@ using UnityEngine; using LitJson; - public class FuncOpen - { - private static FuncOpen _inst = null; - public static FuncOpen Instance { - get { - if (_inst == null) - { - _inst = new FuncOpen(); - } - return _inst; - } - } - - protected FuncOpen() - { - if (Application.isEditor) +public class FuncOpen +{ + private static FuncOpen _inst = null; + public static FuncOpen Instance { + get { + if (_inst == null) { - if (!Application.isPlaying) return; + _inst = new FuncOpen(); } - - var allKeys = new List<int>(FuncOpenLVConfig.dic.Keys);//GetKeys(); - funcArray = new int[allKeys.Count]; - int _index = 0; - foreach (var key in allKeys) - { - int func = key; - funcOpenState[func] = false; - funcArray[_index] = func; - _index++; - } - - DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; - DTC0102_tagCDBPlayer.switchAccountEvent += SwitchAccountEvent; - - funcClientLVLimitDict.Clear(); - var jsonConfig = JsonMapper.ToObject(FuncConfigConfig.Get("FuncLevelLimitClient").Numerical1); - foreach (var key in jsonConfig.Keys) - { - funcClientLVLimitDict[int.Parse(key)] = int.Parse(jsonConfig[key].ToString()); - } - } - - private void BeforePlayerDataInitializeEvent() - { - for (int i = 0; i < funcArray.Length; i++) - { - funcOpenState[funcArray[i]] = false; - } - } - - private void SwitchAccountEvent() - { - for (int i = 0; i < funcArray.Length; i++) - { - funcOpenState[funcArray[i]] = false; - if (OnFuncStateChangeEvent != null) - { - OnFuncStateChangeEvent(funcArray[i]); - } - } - } - - // TaskModel m_TaskModel; - // TaskModel taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel<TaskModel>()); } } - private static Dictionary<int, bool> funcOpenState = new Dictionary<int, bool>(); - private int[] funcArray; - - public event Action<int> OnFuncStateChangeEvent; - - //绾鎴风鐨勫姛鑳界瓑绾ч檺鍒�, key 浠ュ姛鑳介厤缃〃鐨凢uncLevelLimitClient涓哄噯 - //1. 绮惧僵娲诲姩-鍏ㄦ湇绾㈠寘鏄剧ず绛夌骇 - public Dictionary<int, int> funcClientLVLimitDict = new Dictionary<int, int>(); - public bool IsClientLVLimit(int key) - { - if (!funcClientLVLimitDict.ContainsKey(key)) - return true; - - if (PlayerDatas.Instance.baseData.LV >= funcClientLVLimitDict[key]) - return true; - - return false; - } - - - public void UpdateFuncState(HA302_tagMCFuncOpenStateList vNetData) - { - for (int i = 0; i < vNetData.FuncCount; i++) - { - - var funcState = vNetData.FuncStateList[i]; - - bool bPerFuncIsOpen = false; - bool bAfterFuncIsOpen = false; - - if (!funcOpenState.ContainsKey(funcState.FuncID)) - { - funcOpenState.Add(funcState.FuncID, funcState.State == 1); - bAfterFuncIsOpen = true; - } - else - { - bPerFuncIsOpen = funcOpenState[funcState.FuncID]; - funcOpenState[funcState.FuncID] = funcState.State == 1; - bAfterFuncIsOpen = funcOpenState[funcState.FuncID]; - } - if (OnFuncStateChangeEvent != null) - { - OnFuncStateChangeEvent(funcState.FuncID); - } - } - } - - private bool IsFuncOpen(int key, out int errorCode) - { - - errorCode = 0; - var config = FuncOpenLVConfig.Get(key); - if (config == null) - { - return false; - } - // if (config.LimitMagicWeapon > 0) - // { - // Treasure treasure = null; - // var _stage = config.LimitMagicWeapon % 100; - // ModelCenter.Instance.GetModel<TreasureModel>().TryGetTreasure(config.LimitMagicWeapon / 100, out treasure); - // if (treasure == null || treasure.state != TreasureState.Collected || treasure.level < _stage) - // { - // errorCode = 2; - // return false; - // } - // } - // if (config.LimitMissionID > 0) - // { - // MissionDetailDates missionDetailDates = null; - // taskmodel.allMissionDict.TryGetValue(config.LimitMissionID, out missionDetailDates); - // if (missionDetailDates == null || missionDetailDates.MissionState != 3) - // { - // errorCode = 4; - // return false; - // } - // } - // if (config.LimiRealmLV > 0 && PlayerDatas.Instance.baseData.realmLevel < config.LimiRealmLV) - // { - // errorCode = 3; - // return false; - // } - if (config.LimitLV > 0 && PlayerDatas.Instance.baseData.LV < config.LimitLV) - { - errorCode = 1; - return false; - } - return true; - // return false; - } - - public bool IsFuncOpen(int key, bool tip = false) - { - bool isOpen = false; - if (funcOpenState.ContainsKey(key)) - isOpen = funcOpenState[key]; - if (!isOpen && tip) - ProcessorFuncErrorTip(key); - return isOpen; - } - - public void ProcessorFuncErrorTip(int key) - { - var config = FuncOpenLVConfig.Get(key); - if (config != null) - { - SoundPlayer.Instance.PlayUIAudio(SoundPlayer.defaultClickNegativeAudio); - if (config.Tip.Equals("FuncLimit_Level")) - { - SysNotifyMgr.Instance.ShowTip(config.Tip); - return; - } - var errorCode = 0; - if (!IsFuncOpen(key, out errorCode)) - { - switch (errorCode) - { - case 1: - SysNotifyMgr.Instance.ShowTip(config.Tip, Language.Get("OpenFunc4", config.LimitLV)); - break; - // TODO YYL - // case 2: - // var treasureConfig = TreasureConfig.Get(config.LimitMagicWeapon / 100); - // SysNotifyMgr.Instance.ShowTip(config.Tip, Language.Get("OpenFunc1", treasureConfig != null ? treasureConfig.Name : string.Empty)); - // break; - // case 3: - // SysNotifyMgr.Instance.ShowTip(config.Tip, UIHelper.GetRealmName(config.LimiRealmLV, true)); - // break; - case 4: - if (config.LimitLV > 0) - { - SysNotifyMgr.Instance.ShowTip(config.Tip, Language.Get("OpenFunc2", config.LimitLV)); - } - else - { - SysNotifyMgr.Instance.ShowTip(config.Tip, Language.Get("OpenFunc3")); - } - break; - } - } - } - } - - public int GetLimitLv(int key) - { - // FuncOpenLVConfig tagFuncOpenLVModel = FuncOpenLVConfig.Get(key); - // if (tagFuncOpenLVModel.LimitLV != 0) - // { - // return tagFuncOpenLVModel.LimitLV; - // } - // if (tagFuncOpenLVModel.LimitMissionID != 0) - // { - // var TaskConfig = PyTaskConfig.Get(tagFuncOpenLVModel.LimitMissionID); - // return TaskConfig.lv; - // } - - return 1; - } - - Dictionary<int, ICheckFuncOpen> m_CheckFuncDict = new Dictionary<int, ICheckFuncOpen>(); - public void Register(int _key, ICheckFuncOpen _check) - { - if (!m_CheckFuncDict.ContainsKey(_key)) - { - m_CheckFuncDict.Add(_key, _check); - } - } - - public bool CheckFuncOpen(int _key) - { - if (m_CheckFuncDict.ContainsKey(_key)) - { - return m_CheckFuncDict[_key].CheckFunc(); - } - return true; + return _inst; } } - public interface ICheckFuncOpen + protected FuncOpen() { - bool CheckFunc(); - } \ No newline at end of file + if (Application.isEditor) + { + if (!Application.isPlaying) return; + } + + var allKeys = new List<int>(FuncOpenLVConfig.dic.Keys);//GetKeys(); + funcArray = new int[allKeys.Count]; + int _index = 0; + foreach (var key in allKeys) + { + int func = key; + funcOpenState[func] = false; + funcArray[_index] = func; + _index++; + } + + DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; + DTC0102_tagCDBPlayer.switchAccountEvent += SwitchAccountEvent; + + funcClientLVLimitDict.Clear(); + var jsonConfig = JsonMapper.ToObject(FuncConfigConfig.Get("FuncLevelLimitClient").Numerical1); + foreach (var key in jsonConfig.Keys) + { + funcClientLVLimitDict[int.Parse(key)] = int.Parse(jsonConfig[key].ToString()); + } + } + + private void BeforePlayerDataInitializeEvent() + { + for (int i = 0; i < funcArray.Length; i++) + { + funcOpenState[funcArray[i]] = false; + } + } + + private void SwitchAccountEvent() + { + for (int i = 0; i < funcArray.Length; i++) + { + funcOpenState[funcArray[i]] = false; + if (OnFuncStateChangeEvent != null) + { + OnFuncStateChangeEvent(funcArray[i]); + } + } + } + + // TaskModel m_TaskModel; + // TaskModel taskmodel { get { return m_TaskModel ?? (m_TaskModel = ModelCenter.Instance.GetModel<TaskModel>()); } } + private static Dictionary<int, bool> funcOpenState = new Dictionary<int, bool>(); + private int[] funcArray; + + public event Action<int> OnFuncStateChangeEvent; + + //绾鎴风鐨勫姛鑳界瓑绾ч檺鍒�, key 浠ュ姛鑳介厤缃〃鐨凢uncLevelLimitClient涓哄噯 + //1. 绮惧僵娲诲姩-鍏ㄦ湇绾㈠寘鏄剧ず绛夌骇 + public Dictionary<int, int> funcClientLVLimitDict = new Dictionary<int, int>(); + public bool IsClientLVLimit(int key) + { + if (!funcClientLVLimitDict.ContainsKey(key)) + return true; + + if (PlayerDatas.Instance.baseData.LV >= funcClientLVLimitDict[key]) + return true; + + return false; + } + + + public void UpdateFuncState(HA302_tagMCFuncOpenStateList vNetData) + { + for (int i = 0; i < vNetData.FuncCount; i++) + { + + var funcState = vNetData.FuncStateList[i]; + + bool bPerFuncIsOpen = false; + bool bAfterFuncIsOpen = false; + + if (!funcOpenState.ContainsKey(funcState.FuncID)) + { + funcOpenState.Add(funcState.FuncID, funcState.State == 1); + bAfterFuncIsOpen = true; + } + else + { + bPerFuncIsOpen = funcOpenState[funcState.FuncID]; + funcOpenState[funcState.FuncID] = funcState.State == 1; + bAfterFuncIsOpen = funcOpenState[funcState.FuncID]; + } + if (OnFuncStateChangeEvent != null) + { + OnFuncStateChangeEvent(funcState.FuncID); + } + } + } + + private bool IsFuncOpen(int key, out int errorCode) + { + + errorCode = 0; + var config = FuncOpenLVConfig.Get(key); + if (config == null) + { + return false; + } + + if (config.OpenDay > 0) + { + if (config.OpenDay > TimeUtility.OpenDay + 1) + { + errorCode = 2; + return false; + } + } + + if (config.LimitMissionID > 0) + { + + if (TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID) > 0) + { + errorCode = 4; + return false; + } + } + if (config.LimiRealmLV > 0 && PlayerDatas.Instance.baseData.realmLevel < config.LimiRealmLV) + { + errorCode = 3; + return false; + } + if (config.LimitLV > 0 && PlayerDatas.Instance.baseData.LV < config.LimitLV) + { + errorCode = 1; + return false; + } + return true; + // return false; + } + + public bool IsFuncOpen(int key, bool tip = false) + { + bool isOpen = false; + if (funcOpenState.ContainsKey(key)) + isOpen = funcOpenState[key]; + if (!isOpen && tip) + ProcessorFuncErrorTip(key); + return isOpen; + } + + public void ProcessorFuncErrorTip(int key) + { + var config = FuncOpenLVConfig.Get(key); + if (config != null) + { + SoundPlayer.Instance.PlayUIAudio(SoundPlayer.defaultClickNegativeAudio); + + var errorCode = 0; + if (!IsFuncOpen(key, out errorCode)) + { + switch (errorCode) + { + case 1: + SysNotifyMgr.Instance.ShowStringTip(Language.Get("FuncLimit_Level", config.LimitLV) + + Language.Get("FuncLimitOpen1")); + break; + case 2: + //寮�鏈嶅灏戝ぉ 涓�鑸槸缁勫悎 + if (config.LimitLV != 0) + { + SysNotifyMgr.Instance.ShowStringTip(Language.Get("FuncLimit_OpenDay", config.OpenDay) + + Language.Get("FuncLimitOpen2") + + Language.Get("FuncLimit_Level", config.LimitLV) + + Language.Get("FuncLimitOpen1")); + + } + else if (config.LimitMissionID != 0) + { + SysNotifyMgr.Instance.ShowStringTip(Language.Get("FuncLimit_OpenDay", config.OpenDay) + + Language.Get("FuncLimitOpen2") + + Language.Get("FuncLimit_Mission", TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID)) + + Language.Get("FuncLimitOpen1")); + } + else + { + SysNotifyMgr.Instance.ShowStringTip(Language.Get("FuncLimit_OpenDay", config.OpenDay) + + Language.Get("FuncLimitOpen1")); + } + break; + case 3: + SysNotifyMgr.Instance.ShowStringTip(Language.Get("FuncLimit_Realm", RealmConfig.Get(config.LimiRealmLV).Name) + + Language.Get("FuncLimitOpen1")); + break; + case 4: + SysNotifyMgr.Instance.ShowStringTip(Language.Get("FuncLimit_Mission", TaskManager.Instance.GetNeedFinishTaskCount(config.LimitMissionID)) + + Language.Get("FuncLimitOpen1")); + break; + } + } + } + } + + public int GetLimitLv(int key) + { + // FuncOpenLVConfig tagFuncOpenLVModel = FuncOpenLVConfig.Get(key); + // if (tagFuncOpenLVModel.LimitLV != 0) + // { + // return tagFuncOpenLVModel.LimitLV; + // } + // if (tagFuncOpenLVModel.LimitMissionID != 0) + // { + // var TaskConfig = PyTaskConfig.Get(tagFuncOpenLVModel.LimitMissionID); + // return TaskConfig.lv; + // } + + return 1; + } + + Dictionary<int, ICheckFuncOpen> m_CheckFuncDict = new Dictionary<int, ICheckFuncOpen>(); + public void Register(int _key, ICheckFuncOpen _check) + { + if (!m_CheckFuncDict.ContainsKey(_key)) + { + m_CheckFuncDict.Add(_key, _check); + } + } + + public bool CheckFuncOpen(int _key) + { + if (m_CheckFuncDict.ContainsKey(_key)) + { + return m_CheckFuncDict[_key].CheckFunc(); + } + return true; + } +} + +public interface ICheckFuncOpen +{ + bool CheckFunc(); +} \ No newline at end of file -- Gitblit v1.8.0