From fb4b1ed3c3366f993136e1f9a442bb2dc6d758ab Mon Sep 17 00:00:00 2001
From: client_Hale <339726288@qq.com>
Date: 星期三, 26 九月 2018 22:35:18 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/FindPrecious/FindPreciousModel.cs |   83 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 72 insertions(+), 11 deletions(-)

diff --git a/System/FindPrecious/FindPreciousModel.cs b/System/FindPrecious/FindPreciousModel.cs
index a75e2d6..af799b0 100644
--- a/System/FindPrecious/FindPreciousModel.cs
+++ b/System/FindPrecious/FindPreciousModel.cs
@@ -223,8 +223,13 @@
                 BossInfo bossInfo;
                 if (TryGetBossInfo(bossId, out bossInfo))
                 {
-                    bossInfo.deadLines.Clear();
-                    bossInfo.deadLines.AddRange(bossLineInfo.DeadLineList);
+                    bossInfo.lineToAlives.Clear();
+                    for (var j = 0; j < bossLineInfo.LineIDList.Length; j++)
+                    {
+                        var line = bossLineInfo.LineIDList[j];
+                        var state = bossLineInfo.StateList[j];
+                        bossInfo.lineToAlives[line] = state == 1;
+                    }
                 }
             }
         }
@@ -499,7 +504,8 @@
             bool isCommunalAlive { get; set; }
             public List<BossKillRecord> killRecords = new List<BossKillRecord>();
             public DateTime refreshTime { get; private set; }
-            public List<byte> deadLines = new List<byte>();
+            public Dictionary<int, bool> lineToAlives = new Dictionary<int, bool>();
+            public int rebornTotalCd { get; private set; }
 
             public BossInfo(int _id)
             {
@@ -509,6 +515,7 @@
             public void UpdateBossInfo(HA902_tagGCGameWorldBossInfo.tagBossInfoObj _bossInfo)
             {
                 isCommunalAlive = _bossInfo.IsAlive == 1;
+                rebornTotalCd = (int)_bossInfo.RefreshCD;
                 killRecords.Clear();
                 if (!string.IsNullOrEmpty(_bossInfo.KillRecord))
                 {
@@ -534,14 +541,42 @@
                     {
                         return false;
                     }
-                    else if ((BossFakeLineUtility.Instance.lastBossNpcID == bossId && Time.realtimeSinceStartup < BossFakeLineUtility.Instance.inMistakeForBossAliveOverTime)
-                        && !IsLineBossDead(PlayerDatas.Instance.baseData.FBID))
-                    {
-                        return true;
-                    }
                     else
                     {
-                        return isCommunalAlive;
+                        var isMistakeBoss = BossFakeLineUtility.Instance.lastBossNpcID == bossId
+                            && Time.realtimeSinceStartup < BossFakeLineUtility.Instance.inMistakeForBossAliveOverTime;
+                        var isLineBossAlive = IsLineBossAlive(PlayerDatas.Instance.baseData.FBID);
+
+                        if (isMistakeBoss && isLineBossAlive)
+                        {
+                            return true;
+                        }
+                        else
+                        {
+                            var currentNeutralMap = false;
+                            if (Config.Instance.ContainKey<WorldBossConfig>(bossId))
+                            {
+                                var worldBossConfig = Config.Instance.Get<WorldBossConfig>(bossId);
+                                currentNeutralMap = worldBossConfig.MapID == PlayerDatas.Instance.baseData.MapID;
+                                currentNeutralMap = currentNeutralMap && GeneralConfig.Instance.neutralMaps.Contains(worldBossConfig.MapID);
+                            }
+
+                            if (currentNeutralMap)
+                            {
+                                return isLineBossAlive;
+                            }
+                            else
+                            {
+                                if (BossFakeLineUtility.Instance.IsBossKilledRecently(bossId))
+                                {
+                                    return !IsAnyLineBossDead();
+                                }
+                                else
+                                {
+                                    return IsAnyLineBossAlive();
+                                }
+                            }
+                        }
                     }
                 }
                 else
@@ -550,9 +585,35 @@
                 }
             }
 
-            bool IsLineBossDead(int _lineId)
+            bool IsLineBossAlive(int _lineId)
             {
-                return deadLines.Contains((byte)_lineId);
+                return lineToAlives.ContainsKey(_lineId) && lineToAlives[_lineId];
+            }
+
+            bool IsAnyLineBossAlive()
+            {
+                foreach (var item in lineToAlives)
+                {
+                    if (item.Value)
+                    {
+                        return true;
+                    }
+                }
+
+                return false;
+            }
+
+            bool IsAnyLineBossDead()
+            {
+                foreach (var item in lineToAlives)
+                {
+                    if (!item.Value)
+                    {
+                        return true;
+                    }
+                }
+
+                return false;
             }
 
         }

--
Gitblit v1.8.0