//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, September 12, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using TableConfig; using System.Collections.Generic; using System; using Snxxz.UI; //功能预告红点 [XLua.LuaCallCSharp] public class FeatureNoticeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { public List FunctionList = new List(); public Dictionary DicAwardItem = new Dictionary();//奖励物品 public Dictionary DicOpenFuncState = new Dictionary(); public Dictionary DicRedPoint = new Dictionary();//红点 public event Action UpdateAwarfItem; private const int Redpoint_key1 = 38; public Redpoint redPointStre1 = new Redpoint(Redpoint_key1); private int OpenFuncId = 0; private bool RedPointChange = false; private bool IsRedPoint = false; public int FunctionForecastIndex = 0; public override void Init() { AddList(); AddAwardItem(); AddRedPoint(); } public void OnBeforePlayerDataInitialize() { //PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnPlayersUpLV; //FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; //treasureModel.treasureStateChangeEvent -= treasureStateChangeEvent; //treasureModel.treasureStageUpEvent -= treasureStageUpEvent; FunctionForecastIndex = 0; DicOpenFuncState.Clear(); StageManager.Instance.onStageLoadFinish -= OnStageLoadFinish; PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= Updatefighting; } public void OnPlayerLoginOk() { //FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; //PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnPlayersUpLV; //treasureModel.treasureStateChangeEvent += treasureStateChangeEvent; //treasureModel.treasureStageUpEvent += treasureStageUpEvent; StageManager.Instance.onStageLoadFinish += OnStageLoadFinish; PlayerDatas.Instance.PlayerDataRefreshInfoEvent += Updatefighting; RedPoint_State(); // RedDotStatus(); } private void Updatefighting(PlayerDataRefresh _tCDBPlayerRefresh) { if (_tCDBPlayerRefresh == PlayerDataRefresh.LV &&PlayerDatas.Instance.baseData.LV>=100) { RedPoint_State(); } } public override void UnInit() { } private void OnStageLoadFinish() { if (!(StageManager.Instance.CurrentStage is DungeonStage)) { OpenFuncId = 0; RedPointChange = false; IsRedPoint = false; } } //private void treasureStageUpEvent(int obj) //{ // RedDotStatus(); //} //private void treasureStateChangeEvent(int obj) //{ // RedDotStatus(); //} //private void OnFuncStateChangeEvent(int obj) //{ // RedDotStatus(); //} //private void OnPlayersUpLV(PlayerDataRefresh obj) //{ // if (obj == PlayerDataRefresh.LV) // { // RedDotStatus(); // } //} private void AddList()//添加列表信息 { if (FunctionList.Count <= 0) { var configs = Config.Instance.GetAllKeys(); foreach (var key in configs) { var functionForecastConfig = Config.Instance.Get(key); if (functionForecastConfig != null && functionForecastConfig.Display == 1) { FunctionList.Add(functionForecastConfig); } } } } private void AddAwardItem() { if (DicAwardItem.Count <= 0) { var configs = Config.Instance.GetAllKeys(); foreach (var key in configs) { var functionForecastConfig = Config.Instance.Get(key); if (!DicAwardItem.ContainsKey(functionForecastConfig.FuncId) && functionForecastConfig.Display == 1) { ImpactRankModel.RankAwardItem _award = new ImpactRankModel.RankAwardItem(); if (functionForecastConfig.Award == string.Empty) { continue; } var _jsonData = LitJson.JsonMapper.ToObject(functionForecastConfig.Award); foreach (string _key in _jsonData.Keys) { var _job = int.Parse(_key); var _itemArray = LitJson.JsonMapper.ToObject(_jsonData[_key].ToJson()); for (int j = 0; j < _itemArray.Length; j++) { _award.Add(_job, new AwardItem() { item = new Item(_itemArray[j][0], _itemArray[j][1]), isBind = 1, }); } } DicAwardItem.Add(functionForecastConfig.FuncId, _award); } } // DebugEx.LogError(DicAwardItem); } } private void AddRedPoint() { if (DicRedPoint.Count <= 0) { var configs = Config.Instance.GetAllKeys(); foreach (var key in configs) { var functionForecastConfig = Config.Instance.Get(key); if (!DicRedPoint.ContainsKey(functionForecastConfig.FuncId) && functionForecastConfig.Display == 1) { int RedPointkey = Redpoint_key1 * 10000 + functionForecastConfig.FuncId; Redpoint redPointMountStare = new Redpoint(Redpoint_key1, RedPointkey); DicRedPoint.Add(functionForecastConfig.FuncId, redPointMountStare); } } } } private void RedPoint_State() { var configs = Config.Instance.GetAllKeys(); foreach (var key in DicRedPoint.Keys) { DicRedPoint[key].state=RedPointState.None; } if (PlayerDatas.Instance.baseData.LV <= 100)//功能预告红点110级前不显示 { return; } foreach (var _key in DicOpenFuncState.Keys) { if (DicRedPoint.ContainsKey(_key) && DicOpenFuncState[_key].State==1 && DicOpenFuncState[_key].AwardState==0 && DicAwardItem.ContainsKey(_key)) { DicRedPoint[_key].state = RedPointState.Simple; } } } //private void RedDotStatus()//红点1 //{ // for (int i = 0; i < FunctionList.Count; i++) // { // if (!FuncOpen.Instance.IsFuncOpen(FunctionList[i].FuncId)) // { // redPointStre1.state = RedPointState.None; // if (OpenFuncId != FunctionList[i].FuncId) // { // RedPointChange = false; // } // if (OpenFuncId != FunctionList[i].FuncId || !RedPointChange) // { // OpenFuncId = FunctionList[i].FuncId; // IsRedPoint = false; // TrailerClassification(FunctionList[i].FuncId); // } // return; // } // } //} //private void TrailerClassification(int funcID)//红点1 //{ // FuncOpenLVConfig funcoPenConfig = Config.Instance.Get(funcID); // var functionForecastConfig = Config.Instance.Get(funcID); // if (funcoPenConfig.LimitMagicWeapon != 0 || funcoPenConfig.LimitMissionID != 0) // { // if (funcoPenConfig.LimitMagicWeapon != 0)//法宝 // { // int faBaoID = funcoPenConfig.LimitMagicWeapon / 100; // MagicWeapon(faBaoID, funcID); // return; // } // else if (funcoPenConfig.LimitMissionID != 0)//任务 // { // if (functionForecastConfig.RedPointLV <= 0) // { // return; // } // if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.RedPointLV) // { // RedPointChange = true; // IsRedPoint = true; // } // if (IsRedPoint) // { // redPointStre1.state = RedPointState.Simple; // } // else // { // redPointStre1.state = RedPointState.None; // } // return; // } // } // else//等级 // { // if (functionForecastConfig.RedPointLV <= 0) // { // return; // } // if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.RedPointLV) // { // RedPointChange = true; // IsRedPoint = true; // } // if (IsRedPoint) // { // redPointStre1.state = RedPointState.Simple; // } // else // { // redPointStre1.state = RedPointState.None; // } // return; // } //} TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel(); } } //private void MagicWeapon(int fabaoID, int funcID)//红点1 //{ // var functionForecastConfig = Config.Instance.Get(funcID); // if (functionForecastConfig.RedPointLV > 0)//根据填的等级来 // { // if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.RedPointLV) // { // RedPointChange = true; // IsRedPoint = true; // } // if (IsRedPoint) // { // redPointStre1.state = RedPointState.Simple; // } // else // { // redPointStre1.state = RedPointState.None; // } // return; // } // Treasure treasure;//根据解锁法宝的百分比 // if (treasureModel.TryGetTreasure(fabaoID, out treasure) // && treasure.state == TreasureState.Collected) // { // var list = treasure.treasureStages; // var funcStage = 0; // for (int i = 0; i < list.Count; i++) // { // if (list[i].unlockType == TreasureStageUnlock.Func && // list[i].func == funcID) // { // funcStage = i; // break; // } // } // if (treasure.stage == funcStage - 1 || funcStage == 0) // { // float exp = ((float)treasure.exp / treasure.treasureStages[funcStage].exp) * 100; // if (functionForecastConfig.RedPointPercentage > -1) // { // if (exp >= functionForecastConfig.RedPointPercentage) // { // RedPointChange = true; // IsRedPoint = true; // } // if (IsRedPoint) // { // redPointStre1.state = RedPointState.Simple; // } // } // else // { // redPointStre1.state = RedPointState.None; // } // } // } //} public IEnumerator WhetherToPlayTheBox() { yield return new WaitForSeconds(0.7f); var inDungeon = IsDungeon(); var IsOpenMaininterface = WindowCenter.Instance.IsOpen(); var IsOpenOffLineOnHook = WindowCenter.Instance.IsOpen(); var treasureModel = ModelCenter.Instance.GetModel(); var IsLoading = StageManager.Instance.isLoading; if (NewBieCenter.Instance.inGuiding || treasureModel.newGotShowing || inDungeon || !IsOpenMaininterface || treasureModel.treasureStageUpShow || WindowCenter.Instance.ExitAnyFullScreenOrMaskWin() || IsOpenOffLineOnHook || IsLoading) { yield break; } for (int i = 0; i < FunctionList.Count; i++) { if (!FuncOpen.Instance.IsFuncOpen(FunctionList[i].FuncId)) { var functionForecastConfig = Config.Instance.Get(FunctionList[i].FuncId); if (functionForecastConfig.FrameLevel <= 0) { yield break; } string strKey = "FeatureNotice" + functionForecastConfig.FrameLevel + PlayerDatas.Instance.baseData.PlayerID; int type = LocalSave.GetInt(strKey); bool IsOpenMain = WindowCenter.Instance.IsOpen(); if (PlayerDatas.Instance.baseData.LV >= functionForecastConfig.FrameLevel && type == 0) { LocalSave.SetInt(strKey, functionForecastConfig.FrameLevel); var IsOpenFeatureNotice = WindowCenter.Instance.IsOpen(); if (!IsOpenFeatureNotice) { WindowCenter.Instance.Close(); WindowCenter.Instance.Open(); } } } } } private bool IsDungeon() { var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = Config.Instance.Get(mapId); return mapConfig != null && mapConfig.MapFBType != 0; } List functionForecastValue = new List(); public int GetOpenLv(int Inedx) { int lv = 0; if (functionForecastValue.Count <= 0) { functionForecastValue= Config.Instance.GetAllValues(); } // var functionForecastValue = Config.Instance.GetAllValues(); foreach (var value in functionForecastValue) { if (value.OpenNumber == Inedx) { lv = value.DisplayLevel; return lv; } } return lv; } public class OpenFuncState { public int State; public int AwardState; } public void OpenFuncAwardState(HA302_tagMCFuncOpenStateList info) { for (int i = 0; i < info.FuncCount; i++) { int FuncID = info.FuncStateList[i].FuncID; if (!DicOpenFuncState.ContainsKey(FuncID)) { OpenFuncState openFuncState = new OpenFuncState(); openFuncState.State = info.FuncStateList[i].State; openFuncState.AwardState = info.FuncStateList[i].AwardState; DicOpenFuncState.Add(FuncID, openFuncState); } else { DicOpenFuncState[FuncID].State= info.FuncStateList[i].State; DicOpenFuncState[FuncID].AwardState = info.FuncStateList[i].AwardState; } } if (UpdateAwarfItem != null) { UpdateAwarfItem(); } RedPoint_State(); } public void SendGetAward(int OpenFuncId) { CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward(); getReward.RewardType = (byte)GotServerRewardType.Def_RewardType_OpenFunc; getReward.DataEx = (uint)OpenFuncId; getReward.DataExStrLen = 0; getReward.DataExStr = string.Empty; GameNetSystem.Instance.SendInfo(getReward); } }