技能升级权重配置修改

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