hch
2025-09-04 62188b271cce5e3aec5ca40d58c30f08643e2f60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using System;
using System.Collections.Generic;
using System.Linq;
 
//武将天赋:升星获得天赋,可洗练
public partial class HeroInfo
{
 
    public int heroStar
    {
        get
        {
            if (itemHero == null)
                return 0;
            return itemHero.GetUseDataFirstValue(72);
        }
    }
 
    // 75 # 英雄天赋洗炼锁定索引列表,对应71天赋ID索引
    // 77 # 英雄天赋洗炼随机ID列表
    // 79 # 英雄觉醒时随机天赋选项ID列表
    // 71 # 英雄天赋ID列表
    public List<int> talentIDList
    {
        get
        {
            if (itemHero == null)
                return null;
            return itemHero.GetUseData(71);
        }
    }
 
    // 73 # 英雄天赋ID等级列表,对应71天赋ID的等级
    public List<int> talentLvList
    {
        get
        {
            if (itemHero == null)
                return null;
            return itemHero.GetUseData(73);
        }
    }
 
    // 75 # 英雄天赋洗炼锁定索引列表,对应71天赋ID索引
    public List<int> talentLockList
    {
        get
        {
            if (itemHero == null)
                return null;
            return itemHero.GetUseData(75);
        }
    }
 
 
    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()
    {
        if (HeroAwakeConfig.GetHeroAwakeConfig(heroId, 1) == null)
        {
            return heroStar >= HeroQualityConfig.Get(Quality).InitStarUpper;
        }
 
        //根据觉醒累计提升星上限
        int addStarCount = 0;
        for (int i = 1; i <= awakeLevel; i++)
        {
            addStarCount += HeroAwakeConfig.GetHeroAwakeConfig(heroId, i).AddStarUpper;
        }
        return heroStar >= HeroQualityConfig.Get(Quality).InitStarUpper + addStarCount;
    }
 
    public bool IsFullGift()
    {
        //检查talentLvList 所有元素都大于等于10
        return talentLvList.All(x => x >= HeroUIManager.Instance.maxGiftLevel);
    }
 
 
 
    public int GetTalentLockCount()
    {
        //talentLockList里的元素全部相加 1代表锁定 0代表未锁定
        return talentLockList.Sum();
    }
 
}