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