From 5df482a22d9b243cf92bc2d6826a294cff93daee Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期五, 17 八月 2018 14:11:08 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/WindowJump/WindowJumpMgr.cs   |   16 +++++
 Utility/EnumHelper.cs                |    2 
 System/Team/TeamModel.cs             |   11 +++
 System/DailyQuest/DailyQuestWin.cs   |   83 ++++++++++++++++++++++++---
 System/DailyQuest/DailyQuestModel.cs |    9 --
 5 files changed, 99 insertions(+), 22 deletions(-)

diff --git a/System/DailyQuest/DailyQuestModel.cs b/System/DailyQuest/DailyQuestModel.cs
index 656fc01..97e7441 100644
--- a/System/DailyQuest/DailyQuestModel.cs
+++ b/System/DailyQuest/DailyQuestModel.cs
@@ -110,7 +110,6 @@
 
             UpdateRedpoints();
 
-            treasureModel.treasureStageUpEvent += OnTreasureStageUp;
             fairyLeagueModel.onFairyLeagueBattleEvent += OnFairyLeagueBattle;
             dungeonModel.dungeonRecordChangeEvent += OnDungeonRecordChange;
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionStateChange;
@@ -120,7 +119,6 @@
 
         public override void UnInit()
         {
-            treasureModel.treasureStageUpEvent -= OnTreasureStageUp;
             fairyLeagueModel.onFairyLeagueBattleEvent -= OnFairyLeagueBattle;
             dungeonModel.dungeonRecordChangeEvent -= OnDungeonRecordChange;
             FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionStateChange;
@@ -497,11 +495,6 @@
             }
         }
 
-        private void OnTreasureStageUp(int _treasureId)
-        {
-            UpdateDailyActionRedpoint((int)DailyQuestType.TreasureAwaken);
-        }
-
         private void OnFairyLeagueBattle()
         {
             UpdateDailyActionRedpoint((int)DailyQuestType.FairyLeague);
@@ -546,7 +539,7 @@
                             case DailyQuestType.ElderGodArea:
                             case DailyQuestType.DungeonAssist:
                             case DailyQuestType.RuneTower:
-                            case DailyQuestType.TreasureAwaken:
+                            case DailyQuestType.TreasureCollectSoul:
                                 dailyQuest.redpoint.state = RedPointState.None;
                                 break;
                             default:
diff --git a/System/DailyQuest/DailyQuestWin.cs b/System/DailyQuest/DailyQuestWin.cs
index fe0d5d4..087d2e0 100644
--- a/System/DailyQuest/DailyQuestWin.cs
+++ b/System/DailyQuest/DailyQuestWin.cs
@@ -31,6 +31,7 @@
         DailyQuestModel model { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
         DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
         PlayerTaskDatas taskModel { get { return ModelCenter.Instance.GetModel<PlayerTaskDatas>(); } }
+        TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
 
         public int guidingDailyQuestId = 0;
 
@@ -272,8 +273,8 @@
                     WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
                     WindowCenter.Instance.Open<RuneTowerWin>();
                     break;
-                case DailyQuestType.TreasureAwaken:
-                    GotoTreasureAwaken();
+                case DailyQuestType.TreasureCollectSoul:
+                    GotoTreasureCollectSoul();
                     break;
                 case DailyQuestType.DungeonAssist:
                     WindowCenter.Instance.CloseImmediately<DailyQuestWin>();
@@ -456,23 +457,58 @@
             }
         }
 
-        private void GotoTreasureAwaken()
+        private void GotoTreasureCollectSoul()
         {
             var treasureModel = ModelCenter.Instance.GetModel<TreasureModel>();
             var treasures = treasureModel.GetTreasureCategory(TreasureCategory.Human);
             var gotoTreasureId = 0;
-            for (int i = 0; i < treasures.Count; i++)
+            for (int i = treasures.Count - 1; i >= 0; i--)
             {
-                var treasureId = treasures[i];
-                Treasure treasure;
-                if (treasureModel.TryGetTreasure(treasureId, out treasure))
+                if (IsTreasureCollectSoul(treasures[i]))
                 {
-                    var humanTreasure = treasure as HumanTreasure;
+                    gotoTreasureId = treasures[i];
+                    break;
+                }
+            }
 
-                    if (humanTreasure.castSoulRedpoint.state == RedPointState.Simple)
+            if (gotoTreasureId == 0)
+            {
+                var result = treasures.FindLast((x) =>
+                  {
+                      Treasure treasure;
+                      if (treasureModel.TryGetTreasure(x, out treasure))
+                      {
+                          var humanTreasure = treasure as HumanTreasure;
+                          var config = ConfigManager.Instance.GetTemplate<TreasureConfig>(humanTreasure.id);
+                          return humanTreasure != null && (humanTreasure.humanState == HumanTreasureState.CastSoul);
+                      }
+                      else
+                      {
+                          return false;
+                      }
+                  }
+                  );
+
+                if (result != 0)
+                {
+                    gotoTreasureId = result;
+                }
+            }
+
+            if (gotoTreasureId == 0)
+            {
+                for (int i = 0; i < treasures.Count; i++)
+                {
+                    Treasure treasure;
+                    if (treasureModel.TryGetTreasure(treasures[i], out treasure))
                     {
-                        gotoTreasureId = humanTreasure.id;
-                        break;
+                        var humanTreasure = treasure as HumanTreasure;
+                        if (humanTreasure != null
+                            && (humanTreasure.humanState == HumanTreasureState.Locked || humanTreasure.humanState == HumanTreasureState.Challenge))
+                        {
+                            gotoTreasureId = humanTreasure.id;
+                            break;
+                        }
                     }
                 }
             }
@@ -504,6 +540,31 @@
             }
         }
 
+        private bool IsTreasureCollectSoul(int _treasureId)
+        {
+            Treasure treasure;
+            if (treasureModel.TryGetTreasure(_treasureId, out treasure))
+            {
+                var humanTreasure = treasure as HumanTreasure;
+                if (humanTreasure.humanState == HumanTreasureState.CastSoul)
+                {
+                    foreach (var achievementGroup in treasure.achievementGroups.Values)
+                    {
+                        if (achievementGroup.IsAwardable())
+                        {
+                            return true;
+                        }
+                    }
+                }
+
+                return false;
+            }
+            else
+            {
+                return false;
+            }
+        }
+
         private bool IsDungeon()//鏄惁鍦ㄥ壇鏈腑
         {
             var mapId = PlayerDatas.Instance.baseData.MapID;
diff --git a/System/Team/TeamModel.cs b/System/Team/TeamModel.cs
index 5dffb24..de67d5d 100644
--- a/System/Team/TeamModel.cs
+++ b/System/Team/TeamModel.cs
@@ -185,6 +185,8 @@
         Redpoint invitationRedpoint = new Redpoint(28);
         Redpoint memberCountRedpoint = new Redpoint(34);
 
+        int lastOpenCountryMapRecorder = 0;
+
         public override void Init()
         {
             levelMaxBuf = GeneralConfig.Instance.playerMaxLevel;
@@ -205,6 +207,7 @@
 
         public void OnSwitchAccount()
         {
+            lastOpenCountryMapRecorder = 0;
             m_CurrentMission = new TeamMission(CURRENTMAP_MISSION, 0);
             m_MissionBuf = new TeamMission(CURRENTMAP_MISSION, 0);
             m_MyTeam = new MyTeam();
@@ -336,7 +339,7 @@
                 var lineId = 0;
                 if (myTeam.mission.mapId == CURRENTMAP_MISSION || myTeam.mission.mapId == NONE_MISSION)
                 {
-                    mapId = PlayerDatas.Instance.baseData.MapID;
+                    mapId = lastOpenCountryMapRecorder == 0 ? PlayerDatas.Instance.baseData.MapID : lastOpenCountryMapRecorder;
                     lineId = 0;
                 }
                 else
@@ -1097,6 +1100,12 @@
         public void OnPlayerLoginOk()
         {
             serverInited = true;
+
+            var mapConfig = ConfigManager.Instance.GetTemplate<MapConfig>(PlayerDatas.Instance.baseData.MapID);
+            if (mapConfig != null && mapConfig.MapFBType == (int)MapType.OpenCountry)
+            {
+                lastOpenCountryMapRecorder = PlayerDatas.Instance.baseData.MapID;
+            }
         }
 
         private void OnMatchingCoolDownEnd()
diff --git a/System/WindowJump/WindowJumpMgr.cs b/System/WindowJump/WindowJumpMgr.cs
index cea4226..2f57a9e 100644
--- a/System/WindowJump/WindowJumpMgr.cs
+++ b/System/WindowJump/WindowJumpMgr.cs
@@ -11,8 +11,8 @@
         IsJumpState = false;
         funcOpenBagItem = ConfigManager.Instance.GetTemplate<FuncConfigConfig>("OpenBagItem");
         StageManager.Instance.onStartStageLoadingEvent += ClearCurRecord;
+        GlobalTimeEvent.Instance.secondEvent += SecondRefresh;
     }
-
     private Window preWin = null;
     private WindowSearchConfig _tagWinSearchModel;
     private FuncOpenLVConfig _tagOpenLvModel;
@@ -938,6 +938,20 @@
         }
        
     }
+    private void SecondRefresh()
+    {
+        if (DeadModel.playerIsDie && WindowCenter.Instance.CheckOpen<MainInterfaceWin>())
+        {
+            if(!WindowCenter.Instance.CheckOpen<RebornWin>()
+               && !WindowCenter.Instance.CheckOpen<ReliveWin>()
+               && !WindowCenter.Instance.CheckOpen<ElderGodAreaExitWin>()
+               && !WindowCenter.Instance.CheckOpen<ElderGodAreaRebornWin>())
+            {
+                ClearJumpData();
+                DeadModel.PlayerDie(PlayerDatas.Instance.baseData.PlayerID);
+            }
+        }
+    }
 
     public void ClearJumpData()
     {
diff --git a/Utility/EnumHelper.cs b/Utility/EnumHelper.cs
index 0435bbf..351d724 100644
--- a/Utility/EnumHelper.cs
+++ b/Utility/EnumHelper.cs
@@ -303,7 +303,7 @@
     FairyTask = 18,
     RuneTowerSweep = 19,
     RuneTower = 21,
-    TreasureAwaken = 22,
+    TreasureCollectSoul = 22,
     DungeonAssist = 23,
     BossHome = 24,
     PersonalBoss = 25,

--
Gitblit v1.8.0