From cd6cbe8ed6c2d5b8c7f294b451d25d820ecdc83f Mon Sep 17 00:00:00 2001
From: Client_PangDeRong <593317293@qq.com>
Date: 星期四, 25 十月 2018 16:18:17 +0800
Subject: [PATCH] 4326 【前端】【1.2.0】离线挂机符批量使用修改

---
 System/KnapSack/Logic/PackSendQuestMgr.cs       |   68 ++++++++++++----
 System/KnapSack/New/BatchUseModel.cs            |    8 ++
 System/KnapSack/New/OfflineHangUpUseWin.cs.meta |   12 +++
 System/KnapSack/New/OfflineHangUpUseWin.cs      |  136 ++++++++++++++++++++++++++++++++++
 4 files changed, 205 insertions(+), 19 deletions(-)

diff --git a/System/KnapSack/Logic/PackSendQuestMgr.cs b/System/KnapSack/Logic/PackSendQuestMgr.cs
index ca36c6f..493b07d 100644
--- a/System/KnapSack/Logic/PackSendQuestMgr.cs
+++ b/System/KnapSack/Logic/PackSendQuestMgr.cs
@@ -824,7 +824,25 @@
                 return;
             }
 
-            if (useItemModel.itemInfo.ItemID == fairyModel.changeFairyNameItem)
+            if(itemModel.itemId == 952)
+            {
+                int maxUseCnt = GetOfflineMaxNum(itemModel);
+                if(maxUseCnt <= 1)
+                {
+                    if (!CheckIsMaxOfflineTime(maxUseCnt,itemModel))
+                    {
+                        SendMakeUseQuest(itemModel.itemInfo.ItemPlace);
+                    }
+                }
+                else
+                {
+                    BatchUseModel.Instance.SetOfflineUseModel(itemModel.itemInfo.ItemGUID);
+                    WindowCenter.Instance.Open<OfflineHangUpUseWin>();
+                }
+                return;
+            }
+
+            if (itemModel.itemInfo.ItemID == fairyModel.changeFairyNameItem)
             {
                 if (PlayerDatas.Instance.fairyData.HasFairy)
                 {
@@ -867,12 +885,6 @@
                 {
                     switch (itemModel.itemInfo.ItemID)
                     {
-                        case 952:
-                            if (!CheckIsMaxOfflineTime(itemModel))
-                            {
-                                SendMakeUseQuest(itemModel.itemInfo.ItemPlace);
-                            }
-                            break;
                         case RoleRenameWin.renameToolId:
                             WindowCenter.Instance.Open<RoleRenameWin>();
                             break;
@@ -888,29 +900,47 @@
                 }
             }
         }
-
-        private bool CheckIsMaxOfflineTime(ItemModel itemModel)
+        public int GetOfflineMaxNum(ItemModel itemModel)
         {
-            int willTime = HangUpSetModel.Instance.offlinePluginTime + itemModel.chinItemModel.EffectValueA1;
-            if (HangUpSetModel.Instance.offlinePluginTime >= HangUpSetModel.Instance.maxOfflinePluginTime)
+            int remainOffline = HangUpSetModel.Instance.maxOfflinePluginTime - HangUpSetModel.Instance.offlinePluginTime;
+            int maxUseCnt = 0;
+            if (remainOffline > 0)
+            {
+                int extraCnt = remainOffline % itemModel.chinItemModel.EffectValueA1 > 0 ? 1 : 0;
+                maxUseCnt = remainOffline / itemModel.chinItemModel.EffectValueA1 + extraCnt;
+                if (maxUseCnt > itemModel.itemInfo.ItemCount)
+                {
+                    return itemModel.itemInfo.ItemCount;
+                }
+            }
+            return maxUseCnt;
+        }
+
+        public bool CheckIsMaxOfflineTime(int useNum, ItemModel itemModel)
+        {
+            int remainOffline = HangUpSetModel.Instance.maxOfflinePluginTime - HangUpSetModel.Instance.offlinePluginTime;
+            if (remainOffline <= 0)
             {
                 SysNotifyMgr.Instance.ShowTip("OfflinePluginTime");
                 return true;
             }
-            else if (willTime > HangUpSetModel.Instance.maxOfflinePluginTime)
+            else
             {
-                ConfirmCancel.ShowPopConfirm(Language.Get("OfflinePluginTime102"), Language.Get("OfflinePluginTime101"), (bool isOk) =>
+                int willTime = HangUpSetModel.Instance.offlinePluginTime + itemModel.chinItemModel.EffectValueA1 * useNum;
+                if (willTime > HangUpSetModel.Instance.maxOfflinePluginTime)
                 {
-                    if (isOk)
+                    ConfirmCancel.ShowPopConfirm(Language.Get("OfflinePluginTime102"), Language.Get("OfflinePluginTime101"), (bool isOk) =>
                     {
-                        SendMakeUseQuest(itemModel.itemInfo.ItemPlace);
-                    }
-                });
-                return true;
+                        if (isOk)
+                        {
+                           SendMakeUseQuest(itemModel.itemInfo.ItemPlace,useNum);
+                        }
+                    });
+                    return true;
+                }
             }
             return false;
         }
-
         public void SendMakeUseQuest(int index, int useCnt = 1, int extra = 0)
         {
             ItemModel itemModel = playerPack.GetItemModelByIndex(PackType.rptItem,index);
diff --git a/System/KnapSack/New/BatchUseModel.cs b/System/KnapSack/New/BatchUseModel.cs
index aedf4b7..b07c055 100644
--- a/System/KnapSack/New/BatchUseModel.cs
+++ b/System/KnapSack/New/BatchUseModel.cs
@@ -51,5 +51,13 @@
             storeConfig = null;
         }
         #endregion
+
+        #region 绂荤嚎鎸傛満鏈嶄娇鐢ㄦ暟鎹�
+        public string offlineGuid { get; private set; }
+        public void SetOfflineUseModel(string guid)
+        {
+            this.offlineGuid = guid;
+        }
+        #endregion
     }
 }
diff --git a/System/KnapSack/New/OfflineHangUpUseWin.cs b/System/KnapSack/New/OfflineHangUpUseWin.cs
new file mode 100644
index 0000000..7a63f70
--- /dev/null
+++ b/System/KnapSack/New/OfflineHangUpUseWin.cs
@@ -0,0 +1,136 @@
+锘縰sing System;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Snxxz.UI
+{
+    public class OfflineHangUpUseWin : Window
+    {
+        [SerializeField] Slider _batchUseSlider;
+        [SerializeField] Text _number;
+        [SerializeField] Button _addBtn;
+        [SerializeField] Button _reduceBtn;
+        [SerializeField] Button _useBtn;
+        [SerializeField] Button _closeBtn;
+        [SerializeField] Text offlineText;
+        private ItemModel itemModel;
+        PlayerPackModel _playerPack;
+        PlayerPackModel playerPack
+        {
+            get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PlayerPackModel>()); }
+        }
+        #region Built-in
+        protected override void BindController()
+        {
+
+        }
+
+        protected override void AddListeners()
+        {
+            _addBtn.onClick.AddListener(OnClickAddBtn);
+            _reduceBtn.onClick.AddListener(OnClickReduceBtn);
+            _useBtn.onClick.AddListener(OnClickBatchUseBtn);
+            _closeBtn.onClick.AddListener(CloseClick);
+            _batchUseSlider.onValueChanged.AddListener(delegate
+            {
+                OnUseValueChange();
+            });
+        }
+
+        protected override void OnPreOpen()
+        {
+            Display();
+        }
+
+        protected override void OnAfterOpen()
+        {
+           
+        }
+
+        protected override void OnPreClose()
+        {
+
+        }
+        protected override void OnAfterClose()
+        {
+
+        }
+        #endregion
+
+        public void Display()
+        {
+            itemModel = playerPack.GetItemModelByGUID(BatchUseModel.Instance.offlineGuid);
+            if (itemModel == null) return;
+
+            int maxOfflineNum = PackSendQuestMgr.Instance.GetOfflineMaxNum(itemModel);
+            _batchUseSlider.maxValue = maxOfflineNum;
+            _batchUseSlider.minValue = 1;
+            _batchUseSlider.value = _batchUseSlider.minValue;
+            OnUseValueChange();
+        }
+
+        public void OnUseValueChange()
+        {
+            _number.text = Mathf.Ceil(_batchUseSlider.value).ToString();
+            UpdateOfflineTime();
+        }
+
+        public void UpdateOfflineTime()
+        {
+            if (itemModel == null) return;
+            offlineText.text = GetOfflinePluginTime();
+        }
+
+        public void OnClickAddBtn()
+        {
+            if (_batchUseSlider.value < _batchUseSlider.maxValue)
+            {
+                _batchUseSlider.value++;
+            }
+        }
+
+        public void OnClickReduceBtn()
+        {
+            if (_batchUseSlider.value > _batchUseSlider.minValue)
+            {
+                _batchUseSlider.value--;
+            }
+        }
+
+        public void OnClickBatchUseBtn()
+        {
+            if (itemModel == null)
+                return;
+            bool isMax = PackSendQuestMgr.Instance.CheckIsMaxOfflineTime((int)Mathf.Ceil(_batchUseSlider.value), itemModel);
+            if(!isMax)
+            {
+                PackSendQuestMgr.Instance.SendMakeUseQuest(itemModel.itemInfo.ItemPlace, (int)Mathf.Ceil(_batchUseSlider.value));
+            }
+            CloseClick();
+        }
+
+        public string GetOfflinePluginTime()
+        {
+            TimeSpan timeSpan = TimeSpan.FromSeconds(HangUpSetModel.Instance.offlinePluginTime);
+            string s = "";
+            if (timeSpan.Hours > 0)
+            {
+                s = Language.Get("ItemOverdue103", timeSpan.Hours);
+            }
+            if (timeSpan.Minutes > 0)
+            {
+                s = StringUtility.Contact(s, Language.Get("ItemOverdue104", timeSpan.Minutes));
+            }
+
+            if (s == "")
+            {
+                s = Language.Get("ItemOverdue104", 0);
+            }
+
+            int addHour = (itemModel.chinItemModel.EffectValueA1 / 3600)* (int)Mathf.Ceil(_batchUseSlider.value);
+            s = StringUtility.Contact(s,"+", Language.Get("ItemOverdue103",addHour));
+            return s;
+        }
+
+    }
+}
diff --git a/System/KnapSack/New/OfflineHangUpUseWin.cs.meta b/System/KnapSack/New/OfflineHangUpUseWin.cs.meta
new file mode 100644
index 0000000..8126638
--- /dev/null
+++ b/System/KnapSack/New/OfflineHangUpUseWin.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 5682063d28a2b244db79c05ce7f0075e
+timeCreated: 1540449836
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0