diff --git a/modules/hero/api_strengthenUpSkill.go b/modules/hero/api_strengthenUpSkill.go index f786019e1..7f4761da1 100644 --- a/modules/hero/api_strengthenUpSkill.go +++ b/modules/hero/api_strengthenUpSkill.go @@ -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) } }