Commit 3fe60b4642618456e3e99b79fc01d91f209d8376
1 parent
9bd50719
fix: 英雄升星
Showing
3 changed files
with
10 additions
and
156 deletions
Show diff stats
hero.proto
... | ... | @@ -57,3 +57,12 @@ message HeroSkillUpLevelRsp { |
57 | 57 | int32 skill_level = 3; |
58 | 58 | int32 rein_point = 4; |
59 | 59 | } |
60 | + | |
61 | +message HeroUpStarReq { | |
62 | + string heroId = 1; | |
63 | + string items = 2; // [itemId1=count1, itemId2=count2] | |
64 | +} | |
65 | + | |
66 | +message HeroUpStarRsp { | |
67 | + models.Hero hero = 1; | |
68 | +} | ... | ... |
protocode.proto
战斗力统计.md deleted
... | ... | @@ -1,156 +0,0 @@ |
1 | -## 战斗力统计 | |
2 | -### 战斗力分为总战斗力为英雄队伍战斗力与个体英雄战斗力的累加 | |
3 | - 个体英雄战斗力(2020/11/23截至)根据英雄各个途径累加的攻击力,暴击,爆伤以及陪标的权值修正所得出 | |
4 | - 英雄队伍战斗力(2020/11/23截至)根据各种途径的全局加成的攻击,暴击,爆伤与队伍英雄个数所得出 | |
5 | - | |
6 | -## Part1: 个体英雄计算 | |
7 | -(个体总攻击)×(1+暴击/100.0f × (1+爆伤/100.0f))× 权值修正 | |
8 | -以下是客户端C#代码块 | |
9 | -```C# | |
10 | -public int GetPower() | |
11 | -{ | |
12 | - float asjustCrit = Crit; | |
13 | - if(Crit>=100) | |
14 | - asjustCrit = 100; | |
15 | - else if (Crit<=0) | |
16 | - asjustCrit = 0; | |
17 | - // float AtkSpeed = GetComponent<NumericComponent>().GetAsFloat(NumericType.AtkSpeed); | |
18 | - return (int)(GetHeroAllAtk() * (1 + asjustCrit/100.0f * (1 + CritHurt/100.0f))*Config.CeRevise); | |
19 | -} | |
20 | -``` | |
21 | - | |
22 | -### 数值来源 | |
23 | -数值来源 = 英雄本体+装备本体 | |
24 | - | |
25 | ->因为我们不需要知道具体装备与装备上宝石具体位置,所以理论上全部收集起来一起计算 | |
26 | - | |
27 | -1. 英雄本体 | |
28 | -- 英雄默认初始值 | |
29 | -- 英雄等级成长值 | |
30 | -- 英雄转生修正 | |
31 | -- 英雄位阶修正 | |
32 | -- 英雄位阶阶段奖励 | |
33 | -- 拉取固定词条 | |
34 | - | |
35 | -2. 装备本体 | |
36 | -- 装备数值 | |
37 | -- 装备基础值 | |
38 | - - 装备等级成长值 | |
39 | -3. 宝石属性值 | |
40 | -- 拉取固定词条 | |
41 | - | |
42 | -### 具体计算 | |
43 | -1. 英雄本体 = 英雄默认初始值 + 英雄等级成长值 + 英雄转生修正 + 英雄位阶修正 + 英雄位阶阶段奖励 + 拉取固定词条 | |
44 | -- 英雄默认初始值 = 读表hero | |
45 | -- 英雄等级成长值 | |
46 | -- 英雄转生修正 | |
47 | -- 英雄位阶修正 | |
48 | -- | |
49 | -> 具体类型参考hero表当中的lvUpType字段,其对应表HeroLvUpValue中的lvUpType, | |
50 | -> >>三档分别对应:一档 [1,15] ;二档 [16,30];三档 [31,50] | |
51 | -> | |
52 | ->- 将算好的英雄等级成长攻击值*位阶攻击修正系数 | |
53 | -> 此位阶修正系数来源于表《Advance》 根据英雄的当前位阶找到攻击权值 | |
54 | -> 例如:格迪目前已经被玩家强化到位阶是:资深位阶,**则要把之前算好的(英雄等级成长攻击值)×1.4** | |
55 | -> | |
56 | -> | |
57 | ->**1.3 英雄位阶阶段奖励** | |
58 | -> | |
59 | ->- 根据英雄的位阶的小阶段可以获取到属性加成词条,例如:格迪现在是资深位阶的第6个小阶段 | |
60 | ->则读表《Advance》的Attr字段,字段值意义为:属性ID=数量,以空格为切割,该字段来源于(总字段词条表《AttributesEntry》) | |
61 | -> **所以,最终格迪在该阶段会获得【10(每个小属性所加的攻击)×6(小阶段)】:60点攻击** | |
62 | -> 同时,之前位阶小阶段奖励也都是会有的(与战斗力无关可忽略),相当于之前位阶的每个小阶段属性×10,如:见习位阶加防御,新晋位阶加生命 | |
63 | -> | |
64 | -> *偷懒小技巧:因为目前战斗力公式需要攻击暴击爆伤,而位阶中只有资深位阶的小阶段才加攻击力* | |
65 | -> | |
66 | ->**2.1 装备数值** | |
67 | ->>基础数值读表EquipmentData,成长根据EquipmentData中在对应属性旁附带 | |
68 | ->> | |
69 | ->>(如:Atk,成长属性为AtkLv1,AtkLv2,AtkLv3), | |
70 | ->> | |
71 | ->>三档分别为:一档[1,8],二档[9,12],三档[13,16] | |
72 | -> | |
73 | ->**2.2 宝石属性值** | |
74 | ->- 每个一件装备可能会镶嵌多个宝石,一个宝石可能有多个属性,具体一个宝石需要读宝石合成表《CrystalReinforcement》 的SpecialEffects字段,字段意义: | |
75 | ->属性ID=数量,以空格为切割,该字段来源于(总字段词条表《AttributesEntry》) | |
76 | - | |
77 | - | |
78 | - | |
79 | -## Part2: 英雄队伍计算 | |
80 | -(总收益攻击)×(1+总收益暴击/100.0f × (1+总收益爆伤/100.0f)) | |
81 | - | |
82 | -以下是客户端C#代码块 | |
83 | -**还没写** | |
84 | - | |
85 | -### 数值来源 | |
86 | -英雄队伍战斗力来源为编队阵型(信仰)+ 神秘力量 + 助战英雄buff | |
87 | - | |
88 | -ps:因为阵容所加成属性很多,但是我们只收集与攻击,暴击,爆伤有关的就行了 | |
89 | ->1.编队阵型(信仰) | |
90 | ->>1.1拉取固定词条 | |
91 | -> | |
92 | ->2.神秘力量 | |
93 | ->> 2.1拉取固定词条 | |
94 | -> | |
95 | -> 3.助战英雄加成 | |
96 | -> >***在hero表中找到CoupleTiesID,并在CoupleTiesDatas表中的CoupleTiesID找到对应值即为对应的助战加成;*** | |
97 | -> >>助战加成中CoupleTiesBuffDatas是以加成等级为Key的map,加成等级计算公式:(int)(助战英雄等级 / 10) | |
98 | -> >> | |
99 | -> >>助战加成中CoupleTiesBuffDatas通过key取到的value为CoupleTiesBuffData | |
100 | -> >> | |
101 | -> >>助战加成中CoupleTiesBuffData当中的AttributesEntryID对应AttributesEntry表中的ID | |
102 | -> >> | |
103 | -> >>助战加成中CoupleTiesBuffData当中的Coefficient是一个系数,即从AttributesEntry表中取到实际buff后,buff加成的所有数值都会乘以Coefficient对应的系数 | |
104 | - | |
105 | - ### 具体计算 | |
106 | ->**1.1 编队阵型(信仰)** | |
107 | ->- 编队阵型需要统计编队里所有的英雄,即出战英雄与助战英雄,英雄信仰类型在英雄表 | |
108 | ->《hero》的Faith字段,而获取词条的条件要读编队加成表《TeamBonus》。为此我们需要获取《TeamBonus》的FaithType字段 | |
109 | ->与FaithNum字段来查看是否满足要求,满足要求后则取GetAttributesEntry字段来加属性,原理同上文 加宝石的属性 | |
110 | -- | |
111 | - | |
112 | - //获得该编队具体的有哪几种编队加成(信仰) | |
113 | - public List<TeamBonus> RefreshFaith(List<int> hero) | |
114 | - { | |
115 | - List<TeamBonus> TeamFaith = new List<TeamBonus>(); | |
116 | - Dictionary<int, int> threePower = new Dictionary<int, int>(); | |
117 | - | |
118 | - for (int i = 0; i < ZGame.Scene.GetComponent<LubanComponent>().Tables.TbTeamBonus.DataList.Count; i++) | |
119 | - { | |
120 | - int num = ZGame.Scene.GetComponent<LubanComponent>().Tables.TbTeamBonus.DataList[i].FaithNum; | |
121 | - | |
122 | - for (int j = 0; j < hero.Count; j++) | |
123 | - { | |
124 | - //三相之力 | |
125 | - if (ZGame.Scene.GetComponent<LubanComponent>().Tables.TbTeamBonus.DataList[i].FaithType == -1) | |
126 | - { | |
127 | - if (!threePower.ContainsKey(hero[j])) | |
128 | - { | |
129 | - threePower.Add(hero[j],0); | |
130 | - } | |
131 | - | |
132 | - if (threePower.Count == num) | |
133 | - { | |
134 | - TeamFaith.Add(ZGame.Scene.GetComponent<LubanComponent>().Tables.TbTeamBonus.DataList[i]); | |
135 | - break; | |
136 | - } | |
137 | - } | |
138 | - | |
139 | - if (hero[j] == ZGame.Scene.GetComponent<LubanComponent>().Tables.TbTeamBonus.DataList[i].FaithType) | |
140 | - num--; | |
141 | - | |
142 | - if (num <= 0) | |
143 | - { | |
144 | - TeamFaith.Add(ZGame.Scene.GetComponent<LubanComponent>().Tables.TbTeamBonus.DataList[i]); | |
145 | - break; | |
146 | - } | |
147 | - | |
148 | - } | |
149 | - } | |
150 | - return TeamFaith; | |
151 | - } | |
152 | ->**1.2 神秘力量** | |
153 | ->- 神秘力量BUFF分为buff和debuff,但是他们都能同时影响怪物和英雄,所有我们只需要遍历所有的BUFF,单个BUFF根据 | |
154 | ->神秘力量表《MysticalPowerBUFF》的BaseAttrToPlayer字段(该字段值只表示对英雄的属修改),原理同上文 加宝石的属性 | |
155 | -> | |
156 | ->**1.2 助战英雄加成** | |
157 | 0 | \ No newline at end of file |