| Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB239_tagCSHeroRebirth.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroRebornCell.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroRebornCell.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroRebornWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroRebornWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroUIManager.Reborn.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/HeroUI/HeroUIManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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); } } Main/System/HeroUI/HeroRebornCell.cs
New file @@ -0,0 +1,20 @@ using 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; } } Main/System/HeroUI/HeroRebornCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 1057fbe6aa0422f45b5540032f6baa5b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/HeroUI/HeroRebornWin.cs
New file @@ -0,0 +1,238 @@ using 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); } } Main/System/HeroUI/HeroRebornWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 229033777efa2f94099831442f119256 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: 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; //遣散返还的百分比 @@ -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)); 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");