using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; // TODO YYL 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) // { // if (!Application.isPlaying) return; // } // var allKeys = FuncOpenLVConfig.GetKeys(); // funcArray = new int[allKeys.Count]; // int _index = 0; // foreach (var key in allKeys) // { // int func = int.Parse(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()); } } private static Dictionary funcOpenState = new Dictionary(); private int[] funcArray; public event Action OnFuncStateChangeEvent; //纯客户端的功能等级限制, key 以功能配置表的FuncLevelLimitClient为准 //1. 精彩活动-全服红包显示等级 // public Dictionary funcClientLVLimitDict = new Dictionary(); 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().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; // 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 m_CheckFuncDict = new Dictionary(); 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(); }