| 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; | 
|         } | 
|   | 
|   | 
|     } | 
|   | 
| } |