yyl
2025-10-31 39001a600fcae2bcf27c225df8752d75fb92fef4
Main/System/Hero/HeroInfo.Talent.cs
@@ -1,12 +1,187 @@
using System;
using System.Collections.Generic;
using System.Linq;
//武将天赋:升星获得天赋,可洗练
public partial class HeroInfo
{
   protected int GetIFByInheritTalentPercent(HeroAttrType attrType)
   public int heroStar
   {
      //   YYL TODO
      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;
      }
   }
}