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.CalculatePower(false));
|
|
}
|
}
|