diff --git a/hero.proto b/hero.proto index 49567f2..cb2a27c 100644 --- a/hero.proto +++ b/hero.proto @@ -57,3 +57,12 @@ message HeroSkillUpLevelRsp { int32 skill_level = 3; int32 rein_point = 4; } + +message HeroUpStarReq { + string heroId = 1; + string items = 2; // [itemId1=count1, itemId2=count2] +} + +message HeroUpStarRsp { + models.Hero hero = 1; +} diff --git a/protocode.proto b/protocode.proto index 7253701..8129581 100644 --- a/protocode.proto +++ b/protocode.proto @@ -32,6 +32,7 @@ enum ProtoCode HeroUpLevelRpc = 203; HeroReinRpc = 204; HeroSkillUpLevelRpc = 205; + HeroUpStarRpc = 206; EmailListRpc = 301; EmailDrawRpc = 302; diff --git a/战斗力统计.md b/战斗力统计.md deleted file mode 100644 index b4b76d0..0000000 --- a/战斗力统计.md +++ /dev/null @@ -1,156 +0,0 @@ -## 战斗力统计 -### 战斗力分为总战斗力为英雄队伍战斗力与个体英雄战斗力的累加 - 个体英雄战斗力(2020/11/23截至)根据英雄各个途径累加的攻击力,暴击,爆伤以及陪标的权值修正所得出 - 英雄队伍战斗力(2020/11/23截至)根据各种途径的全局加成的攻击,暴击,爆伤与队伍英雄个数所得出 - -## Part1: 个体英雄计算 -(个体总攻击)×(1+暴击/100.0f × (1+爆伤/100.0f))× 权值修正 -以下是客户端C#代码块 -```C# -public int GetPower() -{ - float asjustCrit = Crit; - if(Crit>=100) - asjustCrit = 100; - else if (Crit<=0) - asjustCrit = 0; - // float AtkSpeed = GetComponent().GetAsFloat(NumericType.AtkSpeed); - return (int)(GetHeroAllAtk() * (1 + asjustCrit/100.0f * (1 + CritHurt/100.0f))*Config.CeRevise); -} -``` - -### 数值来源 -数值来源 = 英雄本体+装备本体 - ->因为我们不需要知道具体装备与装备上宝石具体位置,所以理论上全部收集起来一起计算 - -1. 英雄本体 -- 英雄默认初始值 -- 英雄等级成长值 -- 英雄转生修正 -- 英雄位阶修正 -- 英雄位阶阶段奖励 -- 拉取固定词条 - -2. 装备本体 -- 装备数值 -- 装备基础值 - - 装备等级成长值 -3. 宝石属性值 -- 拉取固定词条 - -### 具体计算 -1. 英雄本体 = 英雄默认初始值 + 英雄等级成长值 + 英雄转生修正 + 英雄位阶修正 + 英雄位阶阶段奖励 + 拉取固定词条 -- 英雄默认初始值 = 读表hero -- 英雄等级成长值 -- 英雄转生修正 -- 英雄位阶修正 -- -> 具体类型参考hero表当中的lvUpType字段,其对应表HeroLvUpValue中的lvUpType, -> >>三档分别对应:一档 [1,15] ;二档 [16,30];三档 [31,50] -> ->- 将算好的英雄等级成长攻击值*位阶攻击修正系数 -> 此位阶修正系数来源于表《Advance》 根据英雄的当前位阶找到攻击权值 -> 例如:格迪目前已经被玩家强化到位阶是:资深位阶,**则要把之前算好的(英雄等级成长攻击值)×1.4** -> -> ->**1.3 英雄位阶阶段奖励** -> ->- 根据英雄的位阶的小阶段可以获取到属性加成词条,例如:格迪现在是资深位阶的第6个小阶段 ->则读表《Advance》的Attr字段,字段值意义为:属性ID=数量,以空格为切割,该字段来源于(总字段词条表《AttributesEntry》) -> **所以,最终格迪在该阶段会获得【10(每个小属性所加的攻击)×6(小阶段)】:60点攻击** -> 同时,之前位阶小阶段奖励也都是会有的(与战斗力无关可忽略),相当于之前位阶的每个小阶段属性×10,如:见习位阶加防御,新晋位阶加生命 -> -> *偷懒小技巧:因为目前战斗力公式需要攻击暴击爆伤,而位阶中只有资深位阶的小阶段才加攻击力* -> ->**2.1 装备数值** ->>基础数值读表EquipmentData,成长根据EquipmentData中在对应属性旁附带 ->> ->>(如:Atk,成长属性为AtkLv1,AtkLv2,AtkLv3), ->> ->>三档分别为:一档[1,8],二档[9,12],三档[13,16] -> ->**2.2 宝石属性值** ->- 每个一件装备可能会镶嵌多个宝石,一个宝石可能有多个属性,具体一个宝石需要读宝石合成表《CrystalReinforcement》 的SpecialEffects字段,字段意义: ->属性ID=数量,以空格为切割,该字段来源于(总字段词条表《AttributesEntry》) - - - -## Part2: 英雄队伍计算 -(总收益攻击)×(1+总收益暴击/100.0f × (1+总收益爆伤/100.0f)) - -以下是客户端C#代码块 -**还没写** - -### 数值来源 -英雄队伍战斗力来源为编队阵型(信仰)+ 神秘力量 + 助战英雄buff - -ps:因为阵容所加成属性很多,但是我们只收集与攻击,暴击,爆伤有关的就行了 ->1.编队阵型(信仰) ->>1.1拉取固定词条 -> ->2.神秘力量 ->> 2.1拉取固定词条 -> -> 3.助战英雄加成 -> >***在hero表中找到CoupleTiesID,并在CoupleTiesDatas表中的CoupleTiesID找到对应值即为对应的助战加成;*** -> >>助战加成中CoupleTiesBuffDatas是以加成等级为Key的map,加成等级计算公式:(int)(助战英雄等级 / 10) -> >> -> >>助战加成中CoupleTiesBuffDatas通过key取到的value为CoupleTiesBuffData -> >> -> >>助战加成中CoupleTiesBuffData当中的AttributesEntryID对应AttributesEntry表中的ID -> >> -> >>助战加成中CoupleTiesBuffData当中的Coefficient是一个系数,即从AttributesEntry表中取到实际buff后,buff加成的所有数值都会乘以Coefficient对应的系数 - - ### 具体计算 ->**1.1 编队阵型(信仰)** ->- 编队阵型需要统计编队里所有的英雄,即出战英雄与助战英雄,英雄信仰类型在英雄表 ->《hero》的Faith字段,而获取词条的条件要读编队加成表《TeamBonus》。为此我们需要获取《TeamBonus》的FaithType字段 ->与FaithNum字段来查看是否满足要求,满足要求后则取GetAttributesEntry字段来加属性,原理同上文 加宝石的属性 -- - - //获得该编队具体的有哪几种编队加成(信仰) - public List RefreshFaith(List hero) - { - List TeamFaith = new List(); - Dictionary threePower = new Dictionary(); - - for (int i = 0; i < ZGame.Scene.GetComponent().Tables.TbTeamBonus.DataList.Count; i++) - { - int num = ZGame.Scene.GetComponent().Tables.TbTeamBonus.DataList[i].FaithNum; - - for (int j = 0; j < hero.Count; j++) - { - //三相之力 - if (ZGame.Scene.GetComponent().Tables.TbTeamBonus.DataList[i].FaithType == -1) - { - if (!threePower.ContainsKey(hero[j])) - { - threePower.Add(hero[j],0); - } - - if (threePower.Count == num) - { - TeamFaith.Add(ZGame.Scene.GetComponent().Tables.TbTeamBonus.DataList[i]); - break; - } - } - - if (hero[j] == ZGame.Scene.GetComponent().Tables.TbTeamBonus.DataList[i].FaithType) - num--; - - if (num <= 0) - { - TeamFaith.Add(ZGame.Scene.GetComponent().Tables.TbTeamBonus.DataList[i]); - break; - } - - } - } - return TeamFaith; - } ->**1.2 神秘力量** ->- 神秘力量BUFF分为buff和debuff,但是他们都能同时影响怪物和英雄,所有我们只需要遍历所有的BUFF,单个BUFF根据 ->神秘力量表《MysticalPowerBUFF》的BaseAttrToPlayer字段(该字段值只表示对英雄的属修改),原理同上文 加宝石的属性 -> ->**1.2 助战英雄加成** \ No newline at end of file -- libgit2 0.21.2