技能升级权重配置修改

This commit is contained in:
meixiongfeng 2022-09-14 20:18:26 +08:00
parent c665e6e0ae
commit 690ec7a5d4

View File

@ -1,11 +1,9 @@
package hero
import (
"crypto/rand"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
"go_dreamfactory/utils"
"math/big"
"google.golang.org/protobuf/proto"
)
@ -23,10 +21,7 @@ func (this *apiComp) StrengthenUpSkillCheck(session comm.IUserSession, req *pb.H
/// 英雄技能升级
func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, req *pb.HeroStrengthenUpSkillReq) (code pb.ErrorCode, data proto.Message) {
var (
probability map[int32]int32 // 即将升级技能的权重
upSkillPos int32 // 升级的技能位置
totalprobability int32 // 所有技能总权重
upSkillPos int32 // 升级的技能位置
_hero *pb.DBHero // 操作的英雄
ChangeList []*pb.DBHero // 推送 改变的英雄
mapCostHero map[string]int32 // 消耗的技能卡
@ -96,50 +91,35 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, req *pb.HeroSt
return
}
tmpUpSkillID := make(map[int32]bool, 0)
for i := 0; i < int(lvUpCount); i++ { // 升级技能
probability = make(map[int32]int32, 0)
for index, skill := range _hero.NormalSkill {
sz := make([]int32, 0)
for _, skill := range _hero.NormalSkill {
skillMaxLv := this.module.configure.GetHeroSkillMaxLvConfig(uint32(skill.SkillID))
if skill.SkillLv < skillMaxLv { // 找到没有满级的技能id
tmpUpSkillID[int32(index)] = true
skillData := this.module.configure.GetHeroSkillUpConfig(skill.SkillID)
if skillData == nil {
code = pb.ErrorCode_ConfigNoFound
return
}
probability[skill.SkillID] = skillData.Probability[skill.SkillLv] // 获取权重
sz = append(sz, skillData.Probability[skill.SkillLv])
}
}
if len(tmpUpSkillID) == 0 {
if len(sz) == 0 {
code = pb.ErrorCode_HeroMaxSkillLv
return
}
totalprobability = 0
// 根据权重升级对应的技能
for _, v := range probability {
totalprobability += v
}
if totalprobability == 0 {
code = pb.ErrorCode_HeroMaxLv // 升满了
return
}
n, _ := rand.Int(rand.Reader, big.NewInt(int64(totalprobability)))
tmp := 0
for k, v := range probability {
tmp += int(v)
if int32(n.Int64()) < v { // 找到了
upSkillPos = k
break
}
}
for index, skill := range _hero.NormalSkill {
if int32(index) == upSkillPos { // 找到指定位置技能并升级
skill.SkillLv += 1
break
upSkillPos = comm.GetRandW(sz)
if upSkillPos > 0 {
for index, skill := range _hero.NormalSkill {
if int32(index) == upSkillPos { // 找到指定位置技能并升级
skill.SkillLv += 1
break
}
}
} else {
this.module.Errorf("技能升级失败:uid:%s,oid:%s", session.GetUserId(), _hero.Id)
}
}