技能升级

This commit is contained in:
meixiongfeng 2022-06-29 11:32:49 +08:00
parent 22559d61f8
commit 19f9409784
4 changed files with 99 additions and 21 deletions

View File

@ -1,9 +1,11 @@
package hero
import (
"crypto/rand"
"go_dreamfactory/comm"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/pb"
"math/big"
)
//参数校验
@ -58,12 +60,15 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, agrs map[strin
}
}()
var (
tagHero int32 // 操作的英雄configid
tmpUpSkillID []int32 // 即将要升级的技能id
//probability []int32 // 即将升级技能的权重
tagHero int32 // 操作的英雄configid
tmpUpSkillID map[int32]*pb.SkillData // 即将要升级的技能id
probability map[int32]int32 // 即将升级技能的权重
upSkillPos int32 // 升级的技能位置
totalprobability int32 // 所有技能总权重
tmpValue int32 // 临时对象 存放累加权重
)
tmpUpSkillID = make([]int32, 0)
//probability = make([]int32, 0)
tmpUpSkillID = make(map[int32]*pb.SkillData, 0)
probability = make(map[int32]int32, 0)
tagHero = agrs["heroid"].(int32)
log.Debugf("英雄:%d 技能升级", tagHero)
config, err := this.moduleHero.configure.GetHeroSkillUpConfig()
@ -77,16 +82,64 @@ func (this *apiComp) StrengthenUpSkill(session comm.IUserSession, agrs map[strin
_hero, errr := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在
if errr != 0 {
code = pb.ErrorCode_HeroNoExist
log.Errorf("not find card:%s,%v", req.HeroObjID, errr)
return
}
for _, skill := range _hero.NormalSkill {
for index, skill := range _hero.NormalSkill {
skillMaxLv := this.moduleHero.configure.GetHeroSkillMaxLvConfig(uint32(skill.SkillID))
if skill.SkillLv >= skillMaxLv { // 找到没有满级的技能id
tmpUpSkillID = append(tmpUpSkillID, skill.SkillID)
if skill.SkillLv < skillMaxLv { // 找到没有满级的技能id
tmpUpSkillID[int32(index)] = skill
}
}
skillconfig, err := this.moduleHero.configure.GetHeroSkillUpConfig()
if err != nil {
return
}
// 获取权重
for k, v := range tmpUpSkillID {
for _, v2 := range skillconfig.GetDataList() {
if v2.Hid == tagHero && k == v2.Skillpos && v.SkillLv == v2.Skilllevel {
probability[k] = v2.Probability // 设置权重
}
}
}
// 根据权重升级对应的技能
for _, v := range probability {
totalprobability += v
}
if totalprobability == 0 {
code = pb.ErrorCode_HeroSkillUpErr //技能升级失败
return
}
n, _ := rand.Int(rand.Reader, big.NewInt(int64(totalprobability)))
for k, v := range probability {
tmpValue += v
if int32(n.Int64()) <= tmpValue { // 找到了
upSkillPos = k
break
}
}
for index, skill := range _hero.NormalSkill {
if int32(index) == upSkillPos { // 找到指定位置技能并升级
skill.SkillLv += 1
break
}
}
_heroMap := map[string]interface{}{
"normalSkill": _hero.NormalSkill,
}
err = this.moduleHero.modelHero.modifyHero(session.GetUserId(), req.HeroObjID, _heroMap) // 修改英雄信息
if err != nil {
log.Errorf("update hero skill failed:%v", err)
}
// 扣除材料
code = this.moduleHero.DelCard(req.CostCardObj, 1)
if code != 0 {
code = pb.ErrorCode_DBError
return
}
return
}

View File

@ -114,12 +114,16 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string
// 消耗道具
code = this.user.AddAttributeValue(session.GetUserId(), "gold", -costGold) // 减少金币
if code != pb.ErrorCode_Success {
log.Errorf("cost gold failed ,count = %d", costGold)
code = pb.ErrorCode_GoldNoEnough
return
}
// 消耗指定英雄
for _, v := range req.Hero {
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
if code != 0 {
code = pb.ErrorCode_DBError
log.Errorf("del hero err card:%s,count = %d", v.CostCardObj, v.Amount)
return
}
}
@ -128,8 +132,24 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string
for _, v := range req.HeroRace {
code = this.moduleHero.DelCard(v.CostCardObj, v.Amount)
if code != 0 {
code = pb.ErrorCode_DBError
return
}
}
_hero, errr := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) // 查询目标卡是否存在
if errr != 0 {
code = pb.ErrorCode_HeroNoExist
log.Errorf("not find card:%s,%v", req.HeroObjID, errr)
return
}
_heroMap := map[string]interface{}{
"star": _hero.Star,
}
// 保存数据
err := this.moduleHero.modelHero.modifyHero(session.GetUserId(), req.HeroObjID, _heroMap)
if err != nil {
code = pb.ErrorCode_DBError
log.Errorf("update hero skill failed:%v", err)
}
return
}

View File

@ -67,11 +67,12 @@ const (
ErrorCode_ItemsGridNumUpper ErrorCode = 1202 //背包格子数量已达上限
ErrorCode_ItemsGirdAmountUpper ErrorCode = 1203 //背包格子容量已达上限
// hero
ErrorCode_HeroNoExist ErrorCode = 1300 //英雄不存在
ErrorCode_HeroNoEnough ErrorCode = 1301 //英雄数量不足
ErrorCode_HeroMaxLv ErrorCode = 1302 //英雄达到最大等级
ErrorCode_HeroInitCreat ErrorCode = 1303 //初始化英雄
ErrorCode_HeroColorErr ErrorCode = 1304 // 品质不匹配
ErrorCode_HeroNoExist ErrorCode = 1300 //英雄不存在
ErrorCode_HeroNoEnough ErrorCode = 1301 //英雄数量不足
ErrorCode_HeroMaxLv ErrorCode = 1302 //英雄达到最大等级
ErrorCode_HeroInitCreat ErrorCode = 1303 //初始化英雄
ErrorCode_HeroColorErr ErrorCode = 1304 // 品质不匹配
ErrorCode_HeroSkillUpErr ErrorCode = 1035 // 技能升级失败
// equipment
ErrorCode_EquipmentOnFoundEquipment ErrorCode = 1400 // 未找到武器
ErrorCode_EquipmentLvlimitReached ErrorCode = 1401 // 武器等级已达上限
@ -125,6 +126,7 @@ var (
1302: "HeroMaxLv",
1303: "HeroInitCreat",
1304: "HeroColorErr",
1035: "HeroSkillUpErr",
1400: "EquipmentOnFoundEquipment",
1401: "EquipmentLvlimitReached",
}
@ -174,6 +176,7 @@ var (
"HeroMaxLv": 1302,
"HeroInitCreat": 1303,
"HeroColorErr": 1304,
"HeroSkillUpErr": 1035,
"EquipmentOnFoundEquipment": 1400,
"EquipmentLvlimitReached": 1401,
}
@ -210,7 +213,7 @@ var File_errorcode_proto protoreflect.FileDescriptor
var file_errorcode_proto_rawDesc = []byte{
0x0a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2a, 0xe2, 0x07, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x6f, 0x2a, 0xf7, 0x07, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d,
0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x10, 0x0a, 0x12,
0x1b, 0x0a, 0x17, 0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
@ -268,12 +271,13 @@ var file_errorcode_proto_rawDesc = []byte{
0x0a, 0x12, 0x0e, 0x0a, 0x09, 0x48, 0x65, 0x72, 0x6f, 0x4d, 0x61, 0x78, 0x4c, 0x76, 0x10, 0x96,
0x0a, 0x12, 0x12, 0x0a, 0x0d, 0x48, 0x65, 0x72, 0x6f, 0x49, 0x6e, 0x69, 0x74, 0x43, 0x72, 0x65,
0x61, 0x74, 0x10, 0x97, 0x0a, 0x12, 0x11, 0x0a, 0x0c, 0x48, 0x65, 0x72, 0x6f, 0x43, 0x6f, 0x6c,
0x6f, 0x72, 0x45, 0x72, 0x72, 0x10, 0x98, 0x0a, 0x12, 0x1e, 0x0a, 0x19, 0x45, 0x71, 0x75, 0x69,
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x6e, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x71, 0x75, 0x69,
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xf8, 0x0a, 0x12, 0x1c, 0x0a, 0x17, 0x45, 0x71, 0x75, 0x69,
0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x76, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x61, 0x63,
0x68, 0x65, 0x64, 0x10, 0xf9, 0x0a, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6f, 0x72, 0x45, 0x72, 0x72, 0x10, 0x98, 0x0a, 0x12, 0x13, 0x0a, 0x0e, 0x48, 0x65, 0x72, 0x6f,
0x53, 0x6b, 0x69, 0x6c, 0x6c, 0x55, 0x70, 0x45, 0x72, 0x72, 0x10, 0x8b, 0x08, 0x12, 0x1e, 0x0a,
0x19, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x6e, 0x46, 0x6f, 0x75, 0x6e,
0x64, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x10, 0xf8, 0x0a, 0x12, 0x1c, 0x0a,
0x17, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x76, 0x6c, 0x69, 0x6d, 0x69,
0x74, 0x52, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x10, 0xf9, 0x0a, 0x42, 0x06, 0x5a, 0x04, 0x2e,
0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -55,6 +55,7 @@ enum ErrorCode {
HeroMaxLv = 1302; //
HeroInitCreat = 1303; //
HeroColorErr = 1304; //
HeroSkillUpErr = 1035;//
// equipment
EquipmentOnFoundEquipment = 1400; //
EquipmentLvlimitReached = 1401; //