From 6fae2f660ac6cdf5be45261caa0d31afc544ff95 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 31 十二月 2025 17:59:18 +0800
Subject: [PATCH] 121 【武将】武将系统 - 重生

---
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB239_tagCSHeroRebirth.cs |    6 
 Main/System/HeroUI/HeroRebornWin.cs                                           |  238 ++++++++++++++++++++++++++++++++++
 Main/System/HeroUI/HeroRebornCell.cs.meta                                     |   11 +
 Main/System/HeroUI/HeroRebornCell.cs                                          |   20 ++
 Main/System/HeroUI/HeroRebornWin.cs.meta                                      |   11 +
 Main/System/HeroUI/HeroUIManager.Reborn.cs                                    |  101 +-------------
 Main/System/HeroUI/HeroUIManager.cs                                           |    3 
 7 files changed, 298 insertions(+), 92 deletions(-)

diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB239_tagCSHeroRebirth.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB239_tagCSHeroRebirth.cs
index 1e07b1a..e7da744 100644
--- a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB239_tagCSHeroRebirth.cs
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB239_tagCSHeroRebirth.cs
@@ -5,6 +5,9 @@
 
 public class CB239_tagCSHeroRebirth : GameNetPackBasic {
     public ushort ItemIndex;    //姝﹀皢鐗╁搧鎵�鍦ㄦ灏嗚儗鍖呬綅缃储寮�
+    public byte LVReset;    //閲嶇疆绛夌骇
+    public byte BreakReset;    //閲嶇疆绐佺牬
+    public byte AwakeReset;    //閲嶇疆瑙夐啋
 
     public CB239_tagCSHeroRebirth () {
         combineCmd = (ushort)0x03FE;
@@ -13,6 +16,9 @@
 
     public override void WriteToBytes () {
         WriteBytes (ItemIndex, NetDataType.WORD);
+        WriteBytes (LVReset, NetDataType.BYTE);
+        WriteBytes (BreakReset, NetDataType.BYTE);
+        WriteBytes (AwakeReset, NetDataType.BYTE);
     }
 
 }
diff --git a/Main/System/HeroUI/HeroRebornCell.cs b/Main/System/HeroUI/HeroRebornCell.cs
new file mode 100644
index 0000000..b8848a7
--- /dev/null
+++ b/Main/System/HeroUI/HeroRebornCell.cs
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+public class HeroRebornCell : CellView
+{
+    [SerializeField] ItemCell itemCell;
+    [SerializeField] Text itemName;
+
+    public void Display(int index, string replaceItemName, List<Item> items)
+    {
+        int itemID = items[index].id;
+        itemCell.Init(new ItemCellModel(itemID, false, items[index].countEx));
+        itemCell.button.SetListener(() =>
+        {
+            ItemTipUtility.Show(itemID);
+        });
+        itemName.text = replaceItemName;
+    }
+}
diff --git a/Main/System/HeroUI/HeroRebornCell.cs.meta b/Main/System/HeroUI/HeroRebornCell.cs.meta
new file mode 100644
index 0000000..c943b81
--- /dev/null
+++ b/Main/System/HeroUI/HeroRebornCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1057fbe6aa0422f45b5540032f6baa5b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroUI/HeroRebornWin.cs b/Main/System/HeroUI/HeroRebornWin.cs
new file mode 100644
index 0000000..587bcaf
--- /dev/null
+++ b/Main/System/HeroUI/HeroRebornWin.cs
@@ -0,0 +1,238 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+//甯︽湁澶氫釜鐗╁搧鐨勬搷浣滄彁绀�
+public class HeroRebornWin : UIBase
+{
+    [SerializeField] Text m_Info2;  //鐗╁搧鍒楄〃涓嬫柟鎻愮ず
+    [SerializeField] ScrollerController m_Scroller;
+    [SerializeField] Button m_ConfirmBtn;
+    [SerializeField] Button m_CancleBtn;
+    [SerializeField] Transform moneyObj;
+    [SerializeField] Text moneyText;
+    [SerializeField] Image moneyIcon;
+
+    [SerializeField] Toggle lvToggle;
+    [SerializeField] Toggle breakToggle;
+    [SerializeField] Toggle awakeToggle;
+
+
+    #region Built-in
+
+    string replaceItemName;
+    int costCnt;
+    List<Item> items = new List<Item>();
+
+    protected override void InitComponent()
+    {
+        m_ConfirmBtn.AddListener(ConfirmBtn);
+        m_CancleBtn.AddListener(() =>
+        {
+            CloseWindow();
+        });
+        lvToggle.onValueChanged.AddListener((bool isOn) =>
+        {
+            var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
+            if (hero == null)
+            {
+                return;
+            }
+            Display(hero);
+            if (lvToggle.isOn == true)
+            {
+                breakToggle.isOn = true;
+            }
+        });
+
+        breakToggle.onValueChanged.AddListener((bool isOn) =>
+        {
+            var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
+            if (hero == null)
+            {
+                return;
+            }
+            Display(hero);
+            if (!breakToggle.isOn)
+            {
+                lvToggle.isOn = false;
+            }
+        });
+
+        awakeToggle.onValueChanged.AddListener((bool isOn) =>
+        {
+            var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
+            if (hero == null)
+            {
+                return;
+            }
+            Display(hero);
+        });
+
+        lvToggle.isOn = true;
+        breakToggle.isOn = true;
+    }
+
+    protected override void OnPreOpen()
+    {
+        m_Scroller.OnRefreshCell += OnRefreshCell;
+        var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
+        if (hero == null)
+        {
+            return;
+        }
+        Display(hero);
+
+    }
+
+
+    protected override void OnPreClose()
+    {
+        m_Scroller.OnRefreshCell -= OnRefreshCell;
+
+    }
+
+    #endregion
+
+
+    void Display(HeroInfo hero)
+    {
+        items.Clear();
+        replaceItemName = $"( {HeroUIManager.Instance.rebornPayBackPer}% )";
+
+        costCnt = 0;
+        Dictionary<string, double> rebornParam = new Dictionary<string, double>();  //閲嶇敓娑堣�楀叕寮忓弬鏁�
+
+        var payBack1 = new Dictionary<int, long>();
+
+        if (hero.heroLevel == 0)
+        {
+            lvToggle.isOn = false;
+        }
+        if (hero.breakLevel == 0)
+        {
+            breakToggle.isOn = false;
+        }
+
+
+        if (lvToggle.isOn)
+        {
+            payBack1 = HeroUIManager.Instance.GetHeroLVPayBack(hero.Quality, hero.heroLevel);
+            //鍏堣绠楁湁娌℃秷鑰�
+            rebornParam.Add("heroLV", hero.heroLevel);
+            costCnt = (int)JaceCalculator.Calculate(HeroUIManager.Instance.rebornFormula, rebornParam);
+        }
+
+        if (breakToggle.isOn)
+        {
+            payBack1 = CommonFunc.AddDict(payBack1, HeroUIManager.Instance.GetHeroBreakPayBack(hero.Quality, hero.breakLevel));
+            rebornParam.Clear();
+            //鍏堣绠楁湁娌℃秷鑰�
+            rebornParam.Add("breakLV", hero.breakLevel);
+            costCnt += (int)JaceCalculator.Calculate(HeroUIManager.Instance.rebornBreakFormula, rebornParam);
+        }
+
+
+
+        //閲嶇敓绛夌骇閲嶇疆鐨勬秷鑰楋紝鍙傛暟 heroLV姝﹀皢绛夌骇锛屾渶缁堟秷鑰椾负鍏紡+瑙夐啋娑堣��
+        if (hero.awakeLevel == 0)
+        {
+            awakeToggle.isOn = false;
+            awakeToggle.SetActive(false);
+            m_Info2.SetActive(false);
+
+        }
+        else
+        {
+
+            awakeToggle.SetActive(true);
+            if (awakeToggle.isOn)
+            {
+                payBack1 = CommonFunc.AddDict(payBack1, HeroUIManager.Instance.GetHeroQualityAwakePayBack(hero.Quality, hero.awakeLevel));
+                costCnt += HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel).RebirthCostMoney;
+            }
+            m_Info2.SetActive(true);
+            m_Info2.text = Language.Get("herocard44", HeroUIManager.Instance.rebornAwakeHeroMaxCount - HeroUIManager.Instance.awakeRebirthCnt);
+        }
+
+        //璁$畻杩旇繕姣斾緥
+        var _list = payBack1.Keys.ToList();
+        foreach (var key in _list)
+        {
+            payBack1[key] = Math.Max((long)(payBack1[key] * HeroUIManager.Instance.rebornPayBackPer / 100.0), 1);
+        }
+
+        items = CommonFunc.ChangeToItemList(payBack1);
+        if (costCnt == 0)
+        {
+            moneyObj.SetActive(false);
+        }
+        else
+        {
+            moneyObj.SetActive(true);
+            moneyText.text = UIHelper.ShowUseMoney(HeroUIManager.Instance.payBackMoneyType, costCnt);
+            moneyIcon.SetIconWithMoneyType(HeroUIManager.Instance.payBackMoneyType);
+        }
+
+        if (!lvToggle.isOn && !breakToggle.isOn && !awakeToggle.isOn)
+        {
+            m_Scroller.SetActive(false);
+        }
+        else
+        {
+            m_Scroller.SetActive(true);
+            m_Scroller.Refresh();
+            for (int i = 0; i < items.Count; i++)
+            {
+                m_Scroller.AddCell(ScrollerDataType.Header, i);
+            }
+            m_Scroller.Restart();
+        }
+
+    }
+
+
+
+    private void ConfirmBtn()
+    {
+        if (HeroUIManager.Instance.awakeRebirthCnt >= HeroUIManager.Instance.rebornAwakeHeroMaxCount)
+        {
+            SysNotifyMgr.Instance.ShowTip("HeroRebornAwakeMax");
+            return;
+        }
+        if (!lvToggle.isOn && !breakToggle.isOn && !awakeToggle.isOn)
+        {
+            SysNotifyMgr.Instance.ShowTip("HeroReborn4");
+            return;
+        }
+
+        if (UIHelper.GetMoneyCnt(HeroUIManager.Instance.payBackMoneyType) < costCnt)
+        {
+            ItemTipUtility.ShowMoneyTip(HeroUIManager.Instance.payBackMoneyType);
+            return;
+        }
+        var hero = HeroManager.Instance.GetHero(HeroUIManager.Instance.selectRebornHeroGuid);
+        if (hero == null)
+        {
+            return;
+        }
+        HeroUIManager.Instance.SendReborn(hero, lvToggle.isOn, breakToggle.isOn, awakeToggle.isOn);
+        CloseWindow();
+    }
+
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as HeroRebornCell;
+        _cell?.Display(cell.index, replaceItemName, items);
+    }
+
+
+}
+
+
+
+
+
diff --git a/Main/System/HeroUI/HeroRebornWin.cs.meta b/Main/System/HeroUI/HeroRebornWin.cs.meta
new file mode 100644
index 0000000..7d9504f
--- /dev/null
+++ b/Main/System/HeroUI/HeroRebornWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 229033777efa2f94099831442f119256
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/HeroUI/HeroUIManager.Reborn.cs b/Main/System/HeroUI/HeroUIManager.Reborn.cs
index 0e0537b..1a9c292 100644
--- a/Main/System/HeroUI/HeroUIManager.Reborn.cs
+++ b/Main/System/HeroUI/HeroUIManager.Reborn.cs
@@ -12,7 +12,8 @@
     public int awakeRebirthCnt { get; private set; }
     public int payBackMoneyType;
     public int rebornAwakeHeroMaxCount; //瑙夐啋姝﹀皢姣忔棩鐨勬渶澶ч噸鐢熸鏁�
-    public string rebornFormula;    //閲嶇敓绛夌骇閲嶇疆鐨勬秷鑰楋紝鍙傛暟 heroLV姝﹀皢绛夌骇锛屾渶缁堟秷鑰椾负鍏紡+瑙夐啋娑堣��
+    public string rebornFormula;    //閲嶇敓绛夌骇閲嶇疆鐨勬秷鑰楋紝鍙傛暟 heroLV姝﹀皢绛夌骇
+    public string rebornBreakFormula;   //閲嶇敓绐佺牬
     public int rebornPayBackPer;    //閲嶇敓杩旇繕鐨勭櫨鍒嗘瘮
     public int deletePayBackPer;    //閬f暎杩旇繕鐨勭櫨鍒嗘瘮
 
@@ -235,7 +236,7 @@
         return heroB.heroId.CompareTo(heroA.heroId);
     }
 
-
+    public string selectRebornHeroGuid = "";
     public void ResetBtnClick(HeroInfo hero)
     {
         //鍗囩骇銆佺獊鐮淬�佽閱�
@@ -258,101 +259,17 @@
             return;
         }
 
-
-        List<Item> items = new List<Item>();
-        var payBack1 = CommonFunc.AddDict(GetHeroLVPayBack(hero.Quality, hero.heroLevel), GetHeroBreakPayBack(hero.Quality, hero.breakLevel));
-
-        Dictionary<string, double> rebornParam = new Dictionary<string, double>();  //閲嶇敓娑堣�楀叕寮忓弬鏁�
-        //鍏堣绠楁湁娌℃秷鑰�
-        rebornParam.Add("heroLV", hero.heroLevel);
-        int costCnt = (int)JaceCalculator.Calculate(rebornFormula, rebornParam);
-
-        //閲嶇敓绛夌骇閲嶇疆鐨勬秷鑰楋紝鍙傛暟 heroLV姝﹀皢绛夌骇锛屾渶缁堟秷鑰椾负鍏紡+瑙夐啋娑堣��
-        if (hero.awakeLevel == 0)
-        {
-            //璁$畻杩旇繕姣斾緥
-            var _list = payBack1.Keys.ToList();
-            foreach (var key in _list)
-            {
-                payBack1[key] = Math.Max((long)(payBack1[key] * rebornPayBackPer / 100.0), 1);
-            }
-
-            items = CommonFunc.ChangeToItemList(payBack1);
-
-            if (costCnt == 0)
-            {
-                //鏃犳秷鑰楁樉绀�
-                ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) =>
-                {
-                    if (isOk)
-                    {
-                        //鍙戝寘
-                        SendReborn(hero);
-                    }
-                }, itemName: $"( {rebornPayBackPer}% )");
-            }
-            else
-            {
-                //鏈夋秷鑰楁樉绀�
-                ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) =>
-                {
-                    if (isOk)
-                    {
-                        if (UIHelper.GetMoneyCnt(payBackMoneyType) < costCnt)
-                        {
-                            ItemTipUtility.ShowMoneyTip(payBackMoneyType);
-                            return;
-                        }
-                        //鍙戝寘
-                        SendReborn(hero);
-                    }
-                }, "", "", costCnt, payBackMoneyType, $"( {rebornPayBackPer}% )");
-            }
-        }
-        else
-        {
-
-            if (awakeRebirthCnt >= rebornAwakeHeroMaxCount)
-            {
-                SysNotifyMgr.Instance.ShowTip("HeroRebornAwakeMax");
-                return;
-            }
-
-            payBack1 = CommonFunc.AddDict(payBack1, GetHeroQualityAwakePayBack(hero.Quality, hero.awakeLevel));
-
-            //璁$畻杩旇繕姣斾緥
-            var _list = payBack1.Keys.ToList();
-            foreach (var key in _list)
-            {
-                payBack1[key] = Math.Max((long)(payBack1[key] * rebornPayBackPer / 100.0), 1);
-            }
-
-
-            items = CommonFunc.ChangeToItemList(payBack1);
-            var info2 = Language.Get("herocard44", rebornAwakeHeroMaxCount - awakeRebirthCnt);
-            var payBackMoney = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel).RebirthCostMoney + costCnt;
-            ConfirmCancel.ShowItemsConfirm(items, Language.Get("herocard42"), Language.Get("herocard43"), (bool isOk) =>
-            {
-                if (isOk)
-                {
-                    if (UIHelper.GetMoneyCnt(payBackMoneyType) < payBackMoney)
-                    {
-                        ItemTipUtility.ShowMoneyTip(payBackMoneyType);
-                        return;
-                    }
-                    //鍙戝寘
-                    SendReborn(hero);
-                }
-            }, info2, "", payBackMoney, payBackMoneyType, $"( {rebornPayBackPer}% )");
-
-        }
-
+        selectRebornHeroGuid = hero.itemHero.guid;
+        UIManager.Instance.OpenWindow<HeroRebornWin>();
     }
 
-    void SendReborn(HeroInfo hero)
+    public void SendReborn(HeroInfo hero, bool islvon, bool isbreakon, bool isawakeon)
     {
         var pack = new CB239_tagCSHeroRebirth();
         pack.ItemIndex = (ushort)hero.itemHero.gridIndex;
+        pack.LVReset = (byte)(islvon ? 1 : 0);
+        pack.BreakReset = (byte)(isbreakon ? 1 : 0);
+        pack.AwakeReset = (byte)(isawakeon ? 1 : 0);
         GameNetSystem.Instance.SendInfo(pack);
 
         lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculateFightPower(false));
diff --git a/Main/System/HeroUI/HeroUIManager.cs b/Main/System/HeroUI/HeroUIManager.cs
index ce083b7..fae06d9 100644
--- a/Main/System/HeroUI/HeroUIManager.cs
+++ b/Main/System/HeroUI/HeroUIManager.cs
@@ -70,6 +70,9 @@
         rebornPayBackPer = int.Parse(config.Numerical4);
         deletePayBackPer = int.Parse(config.Numerical5);
 
+        config = FuncConfigConfig.Get("HeroRebirth2");
+        rebornBreakFormula = config.Numerical1;
+
         ParseGiftConfig();
 
         config = FuncConfigConfig.Get("HeroRedpoint");

--
Gitblit v1.8.0