using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; //重生 遣散 public partial class HeroUIManager : GameSystemManager { public int awakeRebirthCnt { get; private set; } public int payBackMoneyType; public int rebornAwakeHeroMaxCount; //觉醒武将每日的最大重生次数 public string rebornFormula; //重生等级重置的消耗,参数 heroLV武将等级,最终消耗为公式+觉醒消耗 public int rebornPayBackPer; //重生返还的百分比 public int deletePayBackPer; //遣散返还的百分比 public List heroDeleteSortList { get; private set; } = new List(); public int selectHeroDeleteListJob = 0; //筛选职业 public int selectHeroDeleteListCountry = 0; //筛选国家 public List selectDeleteHeroList { get; private set; } = new List(); public Dictionary GetHeroLVPayBack(int quality, int lv) { //汇总返还总数量 Dictionary itemCounDic = new Dictionary(); for (int i = 1; i < lv; i++) { var config = HeroQualityLVConfig.GetQualityLVConfig(quality, i); var itemID = config.UPCostItem[0]; var count = config.UPCostItem[1]; if (!itemCounDic.ContainsKey(itemID)) { itemCounDic[itemID] = count; } else { itemCounDic[itemID] += count; } } return itemCounDic; } public Dictionary GetHeroBreakPayBack(int quality, int lv) { //汇总返还总数量 Dictionary itemCounDic = new Dictionary(); for (int i = 0; i < lv; i++) { var config = HeroQualityBreakConfig.GetQualityBreakConfig(quality, i); var itemID = config.UPCostItem[0]; var count = config.UPCostItem[1]; if (!itemCounDic.ContainsKey(itemID)) { itemCounDic[itemID] = count; } else { itemCounDic[itemID] += count; } } return itemCounDic; } public Dictionary GetHeroQualityAwakePayBack(int quality, int lv) { //汇总返还总数量 Dictionary itemCounDic = new Dictionary(); for (int i = 0; i < lv; i++) { var config = HeroQualityAwakeConfig.GetQualityAwakeConfig(quality, i); var itemID = config.UPCostItem[0]; var count = config.UPCostItem[1]; if (!itemCounDic.ContainsKey(itemID)) { itemCounDic[itemID] = count; } else { itemCounDic[itemID] = itemCounDic[itemID] + count; } } return itemCounDic; } public void UpdateHeroInfo(HB125_tagSCPlayerHeroInfo netPack) { awakeRebirthCnt = netPack.AwakeRebirthCnt; } public void SortHeroDeleteList() { heroDeleteSortList = HeroManager.Instance.GetHeroGuidList(selectHeroDeleteListJob, selectHeroDeleteListCountry); heroDeleteSortList.Sort(CmpDeleteHero); } int CmpDeleteHero(string guidA, string guidB) { HeroInfo heroA = HeroManager.Instance.GetHero(guidA); HeroInfo heroB = HeroManager.Instance.GetHero(guidB); if (heroA == null || heroB == null) { return 0; } // 排序规则:上阵>武将等级>突破等级>武将觉醒阶级>武将品质>武将吞噬星级>武将ID bool isInTeamA = heroA.IsInAnyTeam(); bool isInTeamB = heroB.IsInAnyTeam(); if (isInTeamA != isInTeamB) { return isInTeamA ? 1 : -1; } if (heroA.heroLevel != heroB.heroLevel) { return heroA.heroLevel < heroB.heroLevel ? -1 : 1; } if (heroA.breakLevel != heroB.breakLevel) { return heroA.breakLevel < heroB.breakLevel ? -1 : 1; } if (heroA.awakeLevel != heroB.awakeLevel) { return heroA.awakeLevel < heroB.awakeLevel ? -1 : 1; } if (heroA.Quality != heroB.Quality) { return heroA.Quality < heroB.Quality ? -1 : 1; } if (heroA.heroStar != heroB.heroStar) { return heroA.heroStar < heroB.heroStar ? -1 : 1; } return heroB.heroId.CompareTo(heroA.heroId); } public void ResetBtnClick(HeroInfo hero) { //升级、突破、觉醒 if (hero.heroLevel == 1 && hero.breakLevel == 0 && hero.awakeLevel == 0) { SysNotifyMgr.Instance.ShowTip("HeroCanNotReset"); return; } //洗炼和觉醒的天赋未处理不可吞噬 if (hero.talentRandomIDList.Count > 0) { SysNotifyMgr.Instance.ShowTip("HeroGift4"); return; } if (hero.talentAwakeRandomIDList.Count > 0) { SysNotifyMgr.Instance.ShowTip("HeroGift5"); return; } List items = new List(); var payBack1 = CommonFunc.AddDict(GetHeroLVPayBack(hero.Quality, hero.heroLevel), GetHeroBreakPayBack(hero.Quality, hero.breakLevel)); Dictionary rebornParam = new Dictionary(); //重生消耗公式参数 //先计算有没消耗 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}% )"); } } void SendReborn(HeroInfo hero) { var pack = new CB239_tagCSHeroRebirth(); pack.ItemIndex = (ushort)hero.itemHero.gridIndex; GameNetSystem.Instance.SendInfo(pack); lastFightPower = new KeyValuePair(hero.itemHero.guid, hero.CalculatePower(false)); } }