using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
//武将天赋:升星获得天赋,可洗练
|
public partial class HeroInfo
|
{
|
|
public int heroStar
|
{
|
get
|
{
|
// 因为觉醒降低了星级,客户端自己降低星级
|
if (itemHero == null)
|
return 0;
|
|
return Math.Min(GetCurMaxStar(), heroStarMaxBefore);
|
}
|
}
|
|
// 因为觉醒降低了星级,保留历史最大星级
|
public int heroStarMaxBefore
|
{
|
get
|
{
|
if (itemHero == null)
|
return 0;
|
return itemHero.GetUseDataFirstValue(72);
|
}
|
}
|
|
// 71 # 英雄天赋ID列表
|
public List<int> talentIDList
|
{
|
get
|
{
|
if (itemHero == null)
|
return new List<int>();
|
return itemHero.GetUseData(71);
|
}
|
}
|
|
// 73 # 英雄天赋ID等级列表,对应71天赋ID的等级
|
public List<int> talentLvList
|
{
|
get
|
{
|
if (itemHero == null)
|
return new List<int>();
|
return itemHero.GetUseData(73);
|
}
|
}
|
|
// 75 # 英雄天赋洗炼锁定索引列表,对应71天赋ID索引
|
// 洗炼锁定客户端缓存为准,重登会清除,如果需要重登显示锁定则再处理
|
// 存储的是索引不是 是否锁定
|
public List<int> talentLockList = new List<int>();
|
|
// 77 # 英雄天赋洗炼随机ID列表
|
public List<int> talentRandomIDList
|
{
|
get
|
{
|
if (itemHero == null)
|
return new List<int>();
|
return itemHero.GetUseData(77);
|
}
|
}
|
|
// 79 # 英雄觉醒时随机天赋选项ID列表
|
public List<int> talentAwakeRandomIDList
|
{
|
get
|
{
|
if (itemHero == null)
|
return new List<int>();
|
return itemHero.GetUseData(79);
|
}
|
}
|
|
Dictionary<int, int> talentAttrDic = new Dictionary<int, int>(); //属性ID : 天赋属性值
|
|
protected void RefreshTalentAttr()
|
{
|
talentAttrDic.Clear();
|
|
for (int i = 0; i < talentIDList.Count; i++)
|
{
|
if (talentIDList[i] == 0)
|
{
|
continue;
|
}
|
var config = HeroTalentConfig.Get(talentIDList[i]);
|
if (!talentAttrDic.ContainsKey(config.AttrID))
|
{
|
//天赋属性,值*天赋等级
|
talentAttrDic[config.AttrID] = config.AttrValue * talentLvList[i];
|
}
|
else
|
{
|
talentAttrDic[config.AttrID] += config.AttrValue * talentLvList[i];
|
}
|
}
|
|
}
|
|
public int GetTalentAttrValue(int attrType)
|
{
|
int value = 0;
|
talentAttrDic.TryGetValue(attrType, out value);
|
return value;
|
}
|
|
public int GetTalentAttrPer(int attrType)
|
{
|
if (PlayerPropertyConfig.baseAttr2perDict.ContainsKey(attrType))
|
{
|
var pertype = PlayerPropertyConfig.baseAttr2perDict[attrType];
|
return talentAttrDic.ContainsKey(pertype) ? talentAttrDic[pertype] : 0;
|
}
|
return 0;
|
}
|
|
|
//天赋会更快到达满级;觉醒可以提升星上限,如初始时40满星,觉醒X级后50满星
|
//判断当前是否满星
|
public bool IsFullStar()
|
{
|
return heroStar >= GetCurMaxStar();
|
}
|
|
//当前能达到的最大星级
|
public int GetCurMaxStar()
|
{
|
if (HeroAwakeConfig.GetHeroAwakeConfig(heroId, 1) == null)
|
{
|
return HeroQualityConfig.Get(Quality).InitStarUpper;
|
}
|
//根据觉醒累计提升星上限
|
int addStarCount = 0;
|
for (int i = 1; i <= awakeLevel; i++)
|
{
|
addStarCount += HeroAwakeConfig.GetHeroAwakeConfig(heroId, i).AddStarUpper;
|
}
|
return HeroQualityConfig.Get(Quality).InitStarUpper + addStarCount;
|
}
|
|
public bool IsFullGift()
|
{
|
//检查talentLvList 所有元素都大于等于10
|
return talentLvList.All(x => x >= HeroUIManager.Instance.maxGiftLevel);
|
}
|
|
|
|
public int GetTalentLockCount()
|
{
|
return talentLockList.Count;
|
}
|
|
//设置是否锁定,只存储锁定的索引
|
public void SetTalentLockState(int lockIndex, int state)
|
{
|
var index = talentLockList.IndexOf(lockIndex);
|
|
if (state == 1)
|
{
|
if (index < 0)
|
{
|
talentLockList.Add(lockIndex);
|
}
|
return;
|
}
|
|
if (state == 0)
|
{
|
if (index >= 0)
|
{
|
talentLockList.RemoveAt(index);
|
}
|
return;
|
}
|
|
|
}
|
|
}
|