From 19f9409784fca3aed8502943ba5a080df6e6b82a Mon Sep 17 00:00:00 2001 From: meixiongfeng <766881921@qq.com> Date: Wed, 29 Jun 2022 11:32:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E8=83=BD=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/hero/api_heroSkillUp.go | 71 ++++++++++++++++++++++++++++----- modules/hero/api_heroStarUp.go | 20 ++++++++++ pb/errorcode.pb.go | 28 +++++++------ pb/proto/errorcode.proto | 1 + 4 files changed, 99 insertions(+), 21 deletions(-) diff --git a/modules/hero/api_heroSkillUp.go b/modules/hero/api_heroSkillUp.go index acbcd719a..d35410b83 100644 --- a/modules/hero/api_heroSkillUp.go +++ b/modules/hero/api_heroSkillUp.go @@ -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 } diff --git a/modules/hero/api_heroStarUp.go b/modules/hero/api_heroStarUp.go index 6a371e3ce..a82a8a7b4 100644 --- a/modules/hero/api_heroStarUp.go +++ b/modules/hero/api_heroStarUp.go @@ -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 } diff --git a/pb/errorcode.pb.go b/pb/errorcode.pb.go index 4281af514..8eb6ac6d0 100644 --- a/pb/errorcode.pb.go +++ b/pb/errorcode.pb.go @@ -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 ( diff --git a/pb/proto/errorcode.proto b/pb/proto/errorcode.proto index 0235c74f8..3b49e7826 100644 --- a/pb/proto/errorcode.proto +++ b/pb/proto/errorcode.proto @@ -55,6 +55,7 @@ enum ErrorCode { HeroMaxLv = 1302; //英雄达到最大等级 HeroInitCreat = 1303; //初始化英雄 HeroColorErr = 1304; // 品质不匹配 + HeroSkillUpErr = 1035;// 技能升级失败 // equipment EquipmentOnFoundEquipment = 1400; // 未找到武器 EquipmentLvlimitReached = 1401; // 武器等级已达上限