Commit 3fe60b4642618456e3e99b79fc01d91f209d8376

Authored by zhangqijia
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
... ... @@ -32,6 +32,7 @@ enum ProtoCode
32 32 HeroUpLevelRpc = 203;
33 33 HeroReinRpc = 204;
34 34 HeroSkillUpLevelRpc = 205;
  35 + HeroUpStarRpc = 206;
35 36  
36 37 EmailListRpc = 301;
37 38 EmailDrawRpc = 302;
... ...
战斗力统计.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