using System; 
 | 
using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
  
 | 
using UnityEngine; 
 | 
  
 | 
//重生 遣散 
 | 
public partial class HeroUIManager : GameSystemManager<HeroUIManager> 
 | 
{ 
 | 
  
 | 
    public int awakeRebirthCnt { get; private set; } 
 | 
    public int payBackMoneyType; 
 | 
    public int rebornAwakeHeroMaxCount; //觉醒武将每日的最大重生次数 
 | 
    public string rebornFormula;    //重生等级重置的消耗,参数 heroLV武将等级,最终消耗为公式+觉醒消耗 
 | 
    public int rebornPayBackPer;    //重生返还的百分比 
 | 
    public int deletePayBackPer;    //遣散返还的百分比 
 | 
  
 | 
    public List<string> heroDeleteSortList { get; private set; } = new List<string>(); 
 | 
    public int selectHeroDeleteListJob = 0;    //筛选职业 
 | 
    public int selectHeroDeleteListCountry = 0;    //筛选国家 
 | 
  
 | 
    public List<string> selectDeleteHeroList { get; private set; } = new List<string>(); 
 | 
  
 | 
  
 | 
    public Dictionary<int, long> GetHeroLVPayBack(int quality, int lv) 
 | 
    { 
 | 
        //汇总返还总数量 
 | 
        Dictionary<int, long> itemCounDic = new Dictionary<int, long>(); 
 | 
        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<int, long> GetHeroBreakPayBack(int quality, int lv) 
 | 
    { 
 | 
        //汇总返还总数量 
 | 
        Dictionary<int, long> itemCounDic = new Dictionary<int, long>(); 
 | 
        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<int, long> GetHeroQualityAwakePayBack(int quality, int lv) 
 | 
    { 
 | 
        //汇总返还总数量 
 | 
        Dictionary<int, long> itemCounDic = new Dictionary<int, long>(); 
 | 
        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<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}% )"); 
 | 
  
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    void SendReborn(HeroInfo hero) 
 | 
    { 
 | 
        var pack = new CB239_tagCSHeroRebirth(); 
 | 
        pack.ItemIndex = (ushort)hero.itemHero.gridIndex; 
 | 
        GameNetSystem.Instance.SendInfo(pack); 
 | 
  
 | 
        lastFightPower = new KeyValuePair<string, long>(hero.itemHero.guid, hero.CalculateFightPower(false)); 
 | 
  
 | 
    } 
 | 
} 
 |