From cfdd99036f324b4fb0eacfd79b3d3f6606061fb0 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 13 十一月 2023 14:48:55 +0800
Subject: [PATCH] 9930 子 【BT0.1】【主干】境界修改 / 【BT0.1】【主干】境界修改

---
 System/Realm/RealmModel.cs |  146 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 146 insertions(+), 0 deletions(-)

diff --git a/System/Realm/RealmModel.cs b/System/Realm/RealmModel.cs
index ee521a7..ed5a629 100644
--- a/System/Realm/RealmModel.cs
+++ b/System/Realm/RealmModel.cs
@@ -20,6 +20,7 @@
         public int realmEquipDisplayLevel { get; private set; }
         public int realmLevelUpReikiPoint { get; private set; }
         public bool isBossPass { get; private set; }
+        public int xxzlAwardState { get; private set; }
         public int realmExpTime { get; private set; }
         public long startExp { get; private set; }
 
@@ -89,6 +90,7 @@
         public readonly Redpoint challengeRedpoint = new Redpoint(114, 11402);
         //public readonly Redpoint realmPoolRedpoint = new Redpoint(114, 11403);
         public readonly Redpoint realmDailyRedpoint = new Redpoint(114, 11404);
+        public readonly Redpoint xxzlRedpoint = new Redpoint(114, 11405);
 
         int m_SelectRealm = 0;
         public int selectRealm
@@ -129,11 +131,13 @@
 
         public event Action selectRealmRefresh;
         public event Action realmExpRefresh;
+        public event Action<bool> xxzlStateRefresh;
 
         EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
         EquipStarModel equipStarModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
         PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
         ActivitiesPushModel pushModel { get { return ModelCenter.Instance.GetModel<ActivitiesPushModel>(); } }
+        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
 
         public override void Init()
         {
@@ -142,6 +146,7 @@
             GlobalTimeEvent.Instance.secondEvent += PerSecond;
             packModel.refreshItemCountEvent += RefreshItemCountEvent;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
+            WindowCenter.Instance.windowBeforeOpenEvent += OnBeforeWindowOpen;
             ParseConfig();
         }
 
@@ -154,6 +159,7 @@
             buffSeconds = 0;
             buffAddRate = 0;
             realmEffectCount = 0;
+            xxzlAwardState = 0;
             SysNotifyMgr.Instance.OnSystemNotifyEvent -= OnSystemNotifyEvent;
         }
 
@@ -667,7 +673,15 @@
 
         public void ReceivePackage(HA311_tagMCSyncRealmInfo package)
         {
+            int beforeAwardState = xxzlAwardState;
             isBossPass = package.IsPass == 1;
+            xxzlAwardState = (int)package.XXZLAwardState;
+            bool isOver = false;
+            if (beforeAwardState != 0 && beforeAwardState != xxzlAwardState && IsRealmXXZLOver())
+            {
+                isOver = true;
+            }
+            xxzlStateRefresh?.Invoke(isOver);
             RefreshRedpoint();
         }
 
@@ -779,11 +793,19 @@
             }
         }
 
+
+
         void RefreshRedpoint()
         {
             var levelUpable = false;
             var challengeable = false;
             var dailyRedpointable = false;
+            levelUpRedpoint.state = RedPointState.None;
+            challengeRedpoint.state = RedPointState.None;
+            realmDailyRedpoint.state = RedPointState.None;
+
+            if (!IsRealmXXZLOver())
+                return;
 
             if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Realm))
             {
@@ -837,6 +859,130 @@
 
         //    realmPoolRedpoint.state = isPoolFull ? RedPointState.Simple : RedPointState.None;
         //}
+
+        #region 淇粰涔嬭矾
+
+
+        public int selectXXZL;
+
+        //浠诲姟瀹屾垚杩涘害
+        public bool IsRealmXXZLMissionFinish(int missionID, out int process)
+        {
+            var config = RealmXXZLConfig.Get(missionID);
+            bool isFinish = false;
+            process = 0;
+            switch (config.TaskType)
+            {
+                case 1:
+                    isFinish = treasureModel.IsTreasureCollected(config.NeedValue);
+                    process = isFinish ? 1 : 0;
+                    break;
+                case 2:
+                    process = ModelCenter.Instance.GetModel<SkyTowerModel>().highestPassFloor;
+                    isFinish = process >= config.NeedValue;
+                    break;
+                case 3:
+                    process = ModelCenter.Instance.GetModel<WorldBossModel>().killCntTotal;
+                    isFinish = process >= config.NeedValue;
+                    break;
+                case 4:
+                    process = (int)ModelCenter.Instance.GetModel<DailyQuestModel>().ActivityPlaceInfo.TotalCount;
+                    isFinish = process >= config.NeedValue;
+                    break;
+                case 5:
+                    isFinish = ModelCenter.Instance.GetModel<PersonalBossModel>().IsFBPass(config.NeedValue);
+                    process = isFinish ? 1 : 0;
+                    break;
+                case 6:
+                    process = ModelCenter.Instance.GetModel<DungeonModel>().GetAllEnterTimes(60010);
+                    isFinish = process >= config.NeedValue;
+                    break;
+                case 7:
+                    process = ModelCenter.Instance.GetModel<ReikiRootModel>().GetReikiRootTotalPointWithFree();
+                    isFinish = process >= config.NeedValue;
+                    break;
+            }
+
+            return isFinish;
+        }
+
+        public bool IsRealmXXZLOver()
+        {
+            var count = RealmXXZLConfig.GetKeys().Count;
+            return xxzlAwardState == (Math.Pow(2, count + 1) - 2);
+        }
+
+        public int GetXXZLProcess()
+        {
+            var ids = RealmXXZLConfig.GetKeys();
+            int process = 0;
+            foreach (var id in ids)
+            {
+                if (IsGetAward(int.Parse(id)))
+                {
+                    process++;
+                }
+            }
+            return process;
+        }
+
+        public bool IsGetAward(int missionID)
+        {
+            return (xxzlAwardState & (int)Math.Pow(2, missionID)) != 0;
+        }
+
+        void RefreshXXZLRedpoint()
+        {
+            xxzlRedpoint.state = RedPointState.None;
+            if (IsRealmXXZLOver())
+            {
+                WindowCenter.Instance.windowBeforeOpenEvent -= OnBeforeWindowOpen;
+                return;
+            }
+            var ids = RealmXXZLConfig.GetKeys();
+            foreach (var id in ids)
+            {
+                int process;
+                if (!IsGetAward(int.Parse(id)) && IsRealmXXZLMissionFinish(int.Parse(id), out process))
+                {
+                    xxzlRedpoint.state = RedPointState.Simple;
+                    return;
+                }
+            }
+        }
+
+        void OnBeforeWindowOpen(Window window)
+        {
+            if (window.name == "MainInterfaceWin")
+            {
+                RefreshXXZLRedpoint();
+            }
+        }
+
+        public void FocusSelectIndex()
+        {
+            var ids = RealmXXZLConfig.GetKeys();
+            int index = -1;
+            foreach (var id in ids)
+            {
+                int missionID = int.Parse(id);
+                int process;
+                var state = IsGetAward(missionID);
+                bool isFinish = IsRealmXXZLMissionFinish(missionID, out process);
+                if (!state && isFinish)
+                {
+                    selectXXZL = missionID - 1;
+                    return;
+                }
+                else if (!state && !isFinish && index == -1)
+                {
+                    index = missionID - 1;
+                }
+            }
+
+            selectXXZL = index;
+        }
+        #endregion
     }
 
     public struct RealmLevelUpEquipCondition

--
Gitblit v1.8.0