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 talentIDList { get { if (itemHero == null) return new List(); return itemHero.GetUseData(71); } } // 73 # 英雄天赋ID等级列表,对应71天赋ID的等级 public List talentLvList { get { if (itemHero == null) return new List(); return itemHero.GetUseData(73); } } // 75 # 英雄天赋洗炼锁定索引列表,对应71天赋ID索引 // 洗炼锁定客户端缓存为准,重登会清除,如果需要重登显示锁定则再处理 // 存储的是索引不是 是否锁定 public List talentLockList = new List(); // 77 # 英雄天赋洗炼随机ID列表 public List talentRandomIDList { get { if (itemHero == null) return new List(); return itemHero.GetUseData(77); } } // 79 # 英雄觉醒时随机天赋选项ID列表 public List talentAwakeRandomIDList { get { if (itemHero == null) return new List(); return itemHero.GetUseData(79); } } Dictionary talentAttrDic = new Dictionary(); //属性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; } } }