From 2fcb2c11e225352c85a26e3b8cb3d71d4fba68c1 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 09 十月 2018 14:38:26 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/Store/StoreModel.cs                             |   17 ++
 System/FindPrecious/ElderEliteMonsterBehaviour.cs      |   33 ++++++
 System/KnapSack/Logic/EquipDevourWin.cs                |    4 
 System/KnapSack/Logic/PackModelInterface.cs            |    3 
 System/FindPrecious/ElderGodAreaWin.cs                 |   48 ++++++--
 System/FindPrecious/ElderGodBreifInfoBehaviour.cs      |   41 ++++++++
 System/FindPrecious/ElderGodAreaModel.cs               |   82 +++++++++++++--
 System/KnapSack/Logic/PlayerPackModels.cs              |    3 
 System/SystemSetting/SettingEffectMgr.cs               |   49 +++++++++
 System/FindPrecious/ElderEliteMonsterBehaviour.cs.meta |   12 ++
 10 files changed, 253 insertions(+), 39 deletions(-)

diff --git a/System/FindPrecious/ElderEliteMonsterBehaviour.cs b/System/FindPrecious/ElderEliteMonsterBehaviour.cs
new file mode 100644
index 0000000..93f07f5
--- /dev/null
+++ b/System/FindPrecious/ElderEliteMonsterBehaviour.cs
@@ -0,0 +1,33 @@
+锘�//--------------------------------------------------------
+//    [Author]:           绗簩涓栫晫
+//    [  Date ]:           Saturday, August 18, 2018
+//--------------------------------------------------------
+using UnityEngine;
+using System.Collections;
+using UnityEngine.UI;
+using TableConfig;
+
+namespace Snxxz.UI
+{
+
+    public class ElderEliteMonsterBehaviour : MonoBehaviour
+    {
+        [SerializeField] RawImage m_RawImage;
+
+        public void Display(int npcId)
+        {
+            var config = Config.Instance.Get<NPCConfig>(npcId);
+            UI3DModelExhibition.Instance.ShowNPC(npcId, config.UIModeLOffset, config.UIModelRotation, m_RawImage);
+        }
+
+        public void Dispose()
+        {
+            UI3DModelExhibition.Instance.StopShow();
+        }
+
+    }
+
+}
+
+
+
diff --git a/System/FindPrecious/ElderEliteMonsterBehaviour.cs.meta b/System/FindPrecious/ElderEliteMonsterBehaviour.cs.meta
new file mode 100644
index 0000000..bb809bf
--- /dev/null
+++ b/System/FindPrecious/ElderEliteMonsterBehaviour.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 2aefe6a576cf98e49a1b99cc59e23efe
+timeCreated: 1534563304
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/FindPrecious/ElderGodAreaModel.cs b/System/FindPrecious/ElderGodAreaModel.cs
index 37b9be0..a424284 100644
--- a/System/FindPrecious/ElderGodAreaModel.cs
+++ b/System/FindPrecious/ElderGodAreaModel.cs
@@ -13,9 +13,7 @@
 
         int m_SelectedBoss = 0;
         public int selectedBoss {
-            get {
-                return this.m_SelectedBoss;
-            }
+            get { return this.m_SelectedBoss; }
             set {
                 if (this.m_SelectedBoss != value)
                 {
@@ -39,6 +37,7 @@
         public event Action<int> bossSelectedEvent;
         public event Action<int> surplusTimesChangeEvent;
 
+        List<int> sortedElites = new List<int>();
         List<int> sortedBossIds = new List<int>();
         Dictionary<int, ElderGodBossData> elderGodBosses = new Dictionary<int, ElderGodBossData>();
         Dictionary<int, int> npcAngers = new Dictionary<int, int>();
@@ -82,27 +81,61 @@
 
         public bool IsBossUnLocked(int _bossId)
         {
-            var playerLevel = PlayerDatas.Instance.baseData.LV;
-            return elderGodBosses.ContainsKey(_bossId) && playerLevel >= elderGodBosses[_bossId].unLockLevel;
+            var config = Config.Instance.Get<ElderGodAreaConfig>(_bossId);
+            if (config == null)
+            {
+                return false;
+            }
+
+            if (config.MonsterType == 1)
+            {
+                return true;
+            }
+            else
+            {
+                var playerLevel = PlayerDatas.Instance.baseData.LV;
+                return elderGodBosses.ContainsKey(_bossId) && playerLevel >= elderGodBosses[_bossId].unLockLevel;
+            }
         }
 
         public List<int> GetElderGodBosses()
         {
-            return new List<int>(sortedBossIds);
+            var bosses = new List<int>();
+            bosses.Add(sortedElites[0]);
+            bosses.AddRange(sortedBossIds);
+            return bosses;
         }
 
-        public int GetLatestUnLockBoss()
+        public int GetRecommendNpc()
         {
-            for (int i = 0; i < sortedBossIds.Count; i++)
+            foreach (var item in sortedBossIds)
             {
-                var bossId = sortedBossIds[i];
-                if (findPreciousModel.IsBossAlive(bossId))
+                if (findPreciousModel.IsBossAlive(item))
                 {
-                    return bossId;
+                    return item;
+                }
+            }
+
+            return sortedElites[0];
+        }
+
+        public int GetRecommendEliteNpc()
+        {
+            var npc = 0;
+            var levelDelta = int.MaxValue;
+            var myLevel = PlayerDatas.Instance.baseData.LV;
+            foreach (var item in sortedElites)
+            {
+                var config = Config.Instance.Get<NPCConfig>(item);
+                var delta = Mathf.Abs(myLevel - config.NPCLV);
+                if (delta < levelDelta)
+                {
+                    npc = item;
+                    levelDelta = delta;
                 }
             }
 
-            return sortedBossIds[0];
+            return npc;
         }
 
         private void ParseConfig()
@@ -115,12 +148,25 @@
                 {
                     elderGodBosses[config.NPCID] = new ElderGodBossData(config.NPCID);
                 }
+                else
+                {
+                    sortedElites.Add(config.NPCID);
+                }
 
                 npcAngers[config.NPCID] = config.MonsterAnger;
             }
 
+            sortedElites.Sort(EliteMonsterCompare);
             sortedBossIds.AddRange(elderGodBosses.Keys);
             sortedBossIds.Sort(ElderGodBossData.LevelCompare);
+        }
+
+        private int EliteMonsterCompare(int lhs, int rhs)
+        {
+            var config1 = Config.Instance.Get<NPCConfig>(lhs);
+            var config2 = Config.Instance.Get<NPCConfig>(rhs);
+
+            return config1.NPCLV < config2.NPCLV ? -1 : 1;
         }
 
         public void OnMapInitOk()
@@ -128,7 +174,17 @@
             var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
             if (dataMapId == ELDERGODAREA_MAPID)
             {
-                MapTransferUtility.Instance.MoveToNPC(selectedBoss);
+                var target = 0;
+                if (sortedElites.Contains(selectedBoss))
+                {
+                    target = GetRecommendEliteNpc();
+                }
+                else
+                {
+                    target = selectedBoss;
+                }
+
+                MapTransferUtility.Instance.MoveToNPC(target);
             }
         }
     }
diff --git a/System/FindPrecious/ElderGodAreaWin.cs b/System/FindPrecious/ElderGodAreaWin.cs
index 75d72a0..7c9203f 100644
--- a/System/FindPrecious/ElderGodAreaWin.cs
+++ b/System/FindPrecious/ElderGodAreaWin.cs
@@ -16,22 +16,16 @@
     public class ElderGodAreaWin : Window
     {
         [SerializeField] CyclicScroll m_Bosses;
+        [SerializeField] ElderEliteMonsterBehaviour m_EliteMonsterBehaviour;
         [SerializeField] BossIntroduceBehaviour m_BossIntroduce;
         [SerializeField] Text m_Times;
         [SerializeField] Button m_Goto;
         [SerializeField] Button m_KillRecord;
         [SerializeField] ToggleButton m_Subscribe;
 
-        ElderGodAreaModel m_Model;
-        ElderGodAreaModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<ElderGodAreaModel>()); } }
-
-        FindPreciousModel m_FindPreciousModel;
-        FindPreciousModel findPreciousModel { get { return m_FindPreciousModel ?? (m_FindPreciousModel = ModelCenter.Instance.GetModel<FindPreciousModel>()); } }
-
-        DungeonModel m_DungeonModel;
-        DungeonModel dungeonModel {
-            get { return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel<DungeonModel>()); }
-        }
+        ElderGodAreaModel model { get { return ModelCenter.Instance.GetModel<ElderGodAreaModel>(); } }
+        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }
+        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
 
         #region Built-in
         protected override void BindController()
@@ -81,9 +75,9 @@
             var bosses = new List<int>();
             bosses.AddRange(model.GetElderGodBosses());
 
-            model.selectedBoss = model.GetLatestUnLockBoss();
+            model.selectedBoss = model.GetRecommendNpc();
+            DisplayNpcBaseInfo(true);
             m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss);
-            m_BossIntroduce.Display(model.selectedBoss, true);
             m_Bosses.Init(bosses);
             m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss));
         }
@@ -111,7 +105,9 @@
                         break;
                     case 2:
                         WindowCenter.Instance.Close<FindPreciousFrameWin>();
-                        MapTransferUtility.Instance.MoveToNPC(model.selectedBoss);
+                        var config = Config.Instance.Get<ElderGodAreaConfig>(model.selectedBoss);
+                        var targetNpc = config.MonsterType == 1 ? model.GetRecommendEliteNpc() : model.selectedBoss;
+                        MapTransferUtility.Instance.MoveToNPC(targetNpc);
                         break;
                     case 3:
                         SysNotifyMgr.Instance.ShowTip("DungeonNoGO");
@@ -167,10 +163,34 @@
 
         private void OnBossSelected(int _bossId)
         {
-            m_BossIntroduce.Display(_bossId, false);
+            DisplayNpcBaseInfo(false);
             m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(_bossId);
         }
 
+        private void DisplayNpcBaseInfo(bool immediately)
+        {
+            var npcId = model.selectedBoss;
+            var config = Config.Instance.Get<ElderGodAreaConfig>(npcId);
+
+            switch (config.MonsterType)
+            {
+                case 1:
+                    m_KillRecord.gameObject.SetActive(false);
+                    m_BossIntroduce.gameObject.SetActive(false);
+                    m_EliteMonsterBehaviour.gameObject.SetActive(true);
+                    m_EliteMonsterBehaviour.Display(npcId);
+                    break;
+                case 2:
+                    m_KillRecord.gameObject.SetActive(true);
+                    m_BossIntroduce.gameObject.SetActive(true);
+                    m_EliteMonsterBehaviour.gameObject.SetActive(false);
+                    m_BossIntroduce.Display(npcId, immediately);
+                    break;
+                default:
+                    break;
+            }
+        }
+
         private void CheckAchievementGuide()
         {
             if (AchievementGoto.guideAchievementId != 0)
diff --git a/System/FindPrecious/ElderGodBreifInfoBehaviour.cs b/System/FindPrecious/ElderGodBreifInfoBehaviour.cs
index 188f17e..2456010 100644
--- a/System/FindPrecious/ElderGodBreifInfoBehaviour.cs
+++ b/System/FindPrecious/ElderGodBreifInfoBehaviour.cs
@@ -27,7 +27,8 @@
         protected override InteractorableState interactorableState {
             get {
                 var selected = selectedBossId == bossId;
-                var dieOrLocked = !model.IsBossUnLocked(bossId) || !findPreciousModel.IsBossAlive(bossId);
+                var config = Config.Instance.Get<ElderGodAreaConfig>(bossId);
+                var dieOrLocked = config.MonsterType == 2 && (!model.IsBossUnLocked(bossId) || !findPreciousModel.IsBossAlive(bossId));
 
                 if (!dieOrLocked)
                 {
@@ -74,6 +75,44 @@
             UpdateBossNameLevelFont(interactorableState);
         }
 
+        protected override void DrawBossBaseInfo(string _icon, string _name, int _level, int _realm)
+        {
+            var config = Config.Instance.Get<ElderGodAreaConfig>(bossId);
+            m_Portrait.SetSprite(_icon);
+            m_Portrait.SetNativeSize();
+
+            switch (config.MonsterType)
+            {
+                case 1:
+                    m_BossName.text = Language.Get("ElderGodMonster");
+                    m_BossLevel.text = string.Empty;
+                    m_RealmContainer.gameObject.SetActive(false);
+                    break;
+                case 2:
+                    m_BossName.text = _name;
+                    m_BossLevel.text = Language.Get("Z1024", _level);
+                    if (m_Realm != null && m_RealmContainer != null)
+                    {
+                        if (Config.Instance.ContainKey<RealmConfig>(_realm))
+                        {
+                            m_RealmContainer.gameObject.SetActive(true);
+                            var realmConfig = Config.Instance.Get<RealmConfig>(_realm);
+                            if (realmConfig != null)
+                            {
+                                m_Realm.SetSprite(realmConfig.Img);
+                            }
+                        }
+                        else
+                        {
+                            m_RealmContainer.gameObject.SetActive(false);
+                        }
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
+
         protected override void OnSubscribe(int _bossId)
         {
             base.OnSubscribe(_bossId);
diff --git a/System/KnapSack/Logic/EquipDevourWin.cs b/System/KnapSack/Logic/EquipDevourWin.cs
index dbc6b37..0be8c37 100644
--- a/System/KnapSack/Logic/EquipDevourWin.cs
+++ b/System/KnapSack/Logic/EquipDevourWin.cs
@@ -588,10 +588,10 @@
 
         public void SendEquipdevourQuest()
         {
-            if (!modelInterface.isPackResetOk) return;
+            if (!modelInterface.isPackResetOk || SettingEffectMgr.Instance.isStartDecompose) return;
 
             playerPack.isAutoDecompose = false;
-
+            SettingEffectMgr.Instance.isStartDecompose = true;
             CA32C_tagCMEquipDecompose _petEat = new CA32C_tagCMEquipDecompose();
             byte[] _petIndex = new byte[realDevourlist.Count];
             for (int i = 0; i < realDevourlist.Count; i++)
diff --git a/System/KnapSack/Logic/PackModelInterface.cs b/System/KnapSack/Logic/PackModelInterface.cs
index e1b454a..aa04277 100644
--- a/System/KnapSack/Logic/PackModelInterface.cs
+++ b/System/KnapSack/Logic/PackModelInterface.cs
@@ -1213,8 +1213,9 @@
         /// <param name="_oneKeySelllist"></param>
         public void SendOneKeySellQuest(List<ItemModel> _oneKeySelllist)
         {
-            if (!isPackResetOk) return;
+            if (!isPackResetOk || SettingEffectMgr.Instance.isStartOneKeySell) return;
 
+            SettingEffectMgr.Instance.isStartOneKeySell = true;
             byte[] itemIndexs = new byte[_oneKeySelllist.Count];
             int i = 0;
             for (i = 0; i < _oneKeySelllist.Count; i++)
diff --git a/System/KnapSack/Logic/PlayerPackModels.cs b/System/KnapSack/Logic/PlayerPackModels.cs
index 8a42104..9abb6e0 100644
--- a/System/KnapSack/Logic/PlayerPackModels.cs
+++ b/System/KnapSack/Logic/PlayerPackModels.cs
@@ -1398,8 +1398,9 @@
         public void SendEquipdevourQuest()
         {
             List<ItemModel> itemModels = GetCanDevourModellist();
-            if (itemModels == null || itemModels.Count < minDecomposeNum || !modelInterface.isPackResetOk) return;
+            if (itemModels == null || itemModels.Count < minDecomposeNum || !modelInterface.isPackResetOk || SettingEffectMgr.Instance.isStartDecompose) return;
 
+            SettingEffectMgr.Instance.isStartDecompose = true;
             isAutoDecompose = true;
             recordAutoDecomNum = itemModels.Count;
             CA32C_tagCMEquipDecompose _petEat = new CA32C_tagCMEquipDecompose();
diff --git a/System/Store/StoreModel.cs b/System/Store/StoreModel.cs
index a6d1dbc..3bcfbc7 100644
--- a/System/Store/StoreModel.cs
+++ b/System/Store/StoreModel.cs
@@ -1083,12 +1083,21 @@
         {
             foreach(var key in shopRedDict.Keys)
             {
-                if(shopRedDict[key].state != RedPointState.None)
+                StoreConfig storeConfig = Config.Instance.Get<StoreConfig>(key);
+                ItemConfig itemConfig = Config.Instance.Get<ItemConfig>(storeConfig.ItemID);
+                switch (itemConfig.Type)
                 {
-                    string record = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "ShopId",key);
-                    shopRedDict[key].state = RedPointState.None;
-                    LocalSave.SetBool(record, false);
+                    case 26:
+                    case 41:
+                        if (shopRedDict[key].state != RedPointState.None)
+                        {
+                            string record = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "ShopId", key);
+                            shopRedDict[key].state = RedPointState.None;
+                            LocalSave.SetBool(record, false);
+                        }
+                        break;
                 }
+               
             }
         }
 
diff --git a/System/SystemSetting/SettingEffectMgr.cs b/System/SystemSetting/SettingEffectMgr.cs
index acc5687..f420d9e 100644
--- a/System/SystemSetting/SettingEffectMgr.cs
+++ b/System/SystemSetting/SettingEffectMgr.cs
@@ -52,6 +52,8 @@
 
     private float delayTime = 2f;
     private bool isGetNewItem = false;
+    public bool isStartDecompose { get; set; }
+    public bool isStartOneKeySell { get; set; }
 
     private void Awake()
     {
@@ -68,15 +70,21 @@
         DeadModel.playerDieEvent += OnPlayerDie;
         m_storeModel.RefreshBuyResultEvent += RefreshBuySuccess;
         DeadModel.CloseRebornWinEvent += PlayerRebornSuccess;
+        playerPack.RefreshDecomAttrAct += DecomposeSuccess;
+        DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent += OneKeySellSuccess;
     }
 
+  
     public void Begin()
     {
-
+        isStartDecompose = false;
+        isStartOneKeySell = false;
     }
 
     float secondTimer = 0;
     float halfSecondTimer = 0;
+    float autoSellCoolTimer = 0;
+    float autoDecomposeCoolTimer = 0;
     private void LateUpdate()
     {
         if (!(StageManager.Instance.CurrentStage is DungeonStage))
@@ -100,11 +108,32 @@
             }
         }
      
+        if(isStartDecompose)
+        {
+            autoDecomposeCoolTimer += Time.deltaTime;
+            if(autoDecomposeCoolTimer >= 5f)
+            {
+                autoDecomposeCoolTimer = 0;
+                isStartDecompose = false;
+            }
+        }
+
+        if (isStartOneKeySell)
+        {
+            autoSellCoolTimer += Time.deltaTime;
+            if (autoSellCoolTimer >= 5f)
+            {
+                autoSellCoolTimer = 0;
+                isStartOneKeySell = false;
+            }
+        }
+
         if (secondTimer >= 1f)
         {
             secondTimer = 0f;
             RefreshBagItem();
         }
+    
     }
 
     private void PlayerRebornSuccess()
@@ -112,6 +141,18 @@
         isPlayerDie = false;
     }
 
+    private void OneKeySellSuccess(H0721_tagMakeItemAnswer obj)
+    {
+        if (obj.MakeType != (byte)MakeType.Def_mitKeySell)
+            return;
+
+        isStartOneKeySell = false;
+    }
+
+    private void DecomposeSuccess()
+    {
+        isStartDecompose = false;
+    }
 
     public bool GetSettingEffect()
     {
@@ -158,7 +199,7 @@
     {
         if (playerPack.GetReaminGridCount(PackType.rptItem) < 5 && modelInterface.isPackResetOk)
         {
-            if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.isAutoDevour))
+            if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.isAutoDevour) && !isStartDecompose)
             {
                 if(playerPack.IsReachMinDecomposeNum())
                 {
@@ -167,7 +208,9 @@
                 }
             }
 
-            if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.isAutoSell) && modelInterface.GetSellItemList().Count > 0)
+            if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.isAutoSell) 
+                && !isStartOneKeySell
+                && modelInterface.GetSellItemList().Count > 0)
             {
                 modelInterface.SendOneKeySellQuest(modelInterface.GetSellItemList());
                 return;

--
Gitblit v1.8.0