From 82931aabaaa3e479bc04e11630a77cd9c9dd5fe3 Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期五, 26 十月 2018 20:05:36 +0800
Subject: [PATCH] Merge branch 'master' into leonard

---
 System/FairyAu/FairyGrabBossModel.cs |   80 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/System/FairyAu/FairyGrabBossModel.cs b/System/FairyAu/FairyGrabBossModel.cs
index 8bf9705..dd8aea6 100644
--- a/System/FairyAu/FairyGrabBossModel.cs
+++ b/System/FairyAu/FairyGrabBossModel.cs
@@ -80,6 +80,8 @@
         public int noticeShowPet { get; private set; }
         public int noticeShowHorse { get; private set; }
 
+        public int cacheGotoBossId { get; private set; }
+
         private bool serverInited = false;
         //private DateTime lastQueryProgressTime = DateTime.Now;
 
@@ -89,11 +91,13 @@
         public event Action<int> bossProgressUpdate;
         public event Action bossAllProgressUpdate;
         public event Action bossGrabHintEvent;
+        public event Action gotoBossStateUpdate;
 
         DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
         DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
         MapModel mapModel { get { return ModelCenter.Instance.GetModel<MapModel>(); } }
         BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }
+        PlayerDeadModel deadModel { get { return ModelCenter.Instance.GetModel<PlayerDeadModel>(); } }
 
         public override void Init()
         {
@@ -109,6 +113,8 @@
             GlobalTimeEvent.Instance.secondEvent += SecondEvent;
             TimeMgr.Instance.OnMinuteEvent += MinuteEvent;
             TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;
+            deadModel.AllPlayerDieEvent += PlayerDieEvent;
+            deadModel.AllPlayerRebornEvent += AllPlayerRebornEvent;
             OpenServerActivityCenter.Instance.Register(13, this);
         }
 
@@ -138,6 +144,54 @@
             GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
             TimeMgr.Instance.OnMinuteEvent -= MinuteEvent;
             TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;
+            deadModel.AllPlayerDieEvent -= PlayerDieEvent;
+            deadModel.AllPlayerRebornEvent -= AllPlayerRebornEvent;
+        }
+
+        private void AllPlayerRebornEvent(H0419_tagPlayerReborn package)
+        {
+            if (package.PlayerID == PlayerDatas.Instance.PlayerId)
+            {
+                if (cacheGotoBossId != 0)
+                {
+                    if (package.Type != 0)
+                    {
+                        cacheGotoBossId = 0;
+                    }
+                    if (gotoBossStateUpdate != null)
+                    {
+                        gotoBossStateUpdate();
+                    }
+                }
+            }
+        }
+
+        private void PlayerDieEvent(uint playerId)
+        {
+            if (PlayerDatas.Instance.PlayerId != playerId)
+            {
+                return;
+            }
+            if (PlayerDatas.Instance.fairyData.HasFairy && FuncOpen.Instance.IsFuncOpen(139))
+            {
+                RecheckGrabBoss();
+                if (WindowCenter.Instance.IsOpen<FairyGrabBossHintWin>())
+                {
+                    var list = GAMgr.Instance.GetTypeList(E_ActorClassType.NpcFightBoss);
+                    if (list != null)
+                    {
+                        for (int i = 0; i < list.Count; i++)
+                        {
+                            GA_NpcFightBoss bossActor = list[i] as GA_NpcFightBoss;
+                            if (bossActor != null && bosses.Contains(bossActor.NpcConfig.NPCID))
+                            {
+                                cacheGotoBossId = bossActor.NpcConfig.NPCID;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
         }
 
         private void OnServerOpenDayRefresh()
@@ -186,6 +240,7 @@
 
         private void OnStageLoadFinish()
         {
+            cacheGotoBossId = 0;
             if (!(StageManager.Instance.CurrentStage is DungeonStage))
             {
                 grabBossHintOpen = false;
@@ -257,6 +312,7 @@
                 return;
             }
             grabBossHintOpen = true;
+            cacheGotoBossId = 0;
             if (!WindowCenter.Instance.IsOpen<FairyGrabBossHintWin>())
             {
                 WindowCenter.Instance.Open<FairyGrabBossHintWin>();
@@ -264,6 +320,10 @@
             if (bossGrabHintEvent != null)
             {
                 bossGrabHintEvent();
+            }
+            if (gotoBossStateUpdate != null)
+            {
+                gotoBossStateUpdate();
             }
         }
 
@@ -291,6 +351,14 @@
                     if (fairyGrabBossHelpUpdate != null)
                     {
                         fairyGrabBossHelpUpdate();
+                    }
+                }
+                if (cacheGotoBossId != 0)
+                {
+                    cacheGotoBossId = 0;
+                    if (gotoBossStateUpdate != null)
+                    {
+                        gotoBossStateUpdate();
                     }
                 }
             }
@@ -461,6 +529,18 @@
             return false;
         }
 
+        public bool IsBossKilled(int bossId)
+        {
+            BossProgressInfo bossProgress;
+            bool killed = false;
+            if (TryGetBossProgress(bossId, out bossProgress))
+            {
+                var progress = 1 - (float)bossProgress.currentHp / bossProgress.totalHp;
+                killed = progress >= 1;
+            }
+            return killed;
+        }
+
         public bool TestEnterDungeon(int bossId, out int _error)
         {
             if (!InActivityTime)

--
Gitblit v1.8.0