技能升级权重配置修改
This commit is contained in:
parent
c665e6e0ae
commit
690ec7a5d4
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user