diff --git a/cmd/robot/hero.go b/cmd/robot/hero.go index fbc3acb1d..88d97c635 100644 --- a/cmd/robot/hero.go +++ b/cmd/robot/hero.go @@ -51,8 +51,8 @@ var ( req: &pb.HeroAwakenReq{ HeroObjID: heroId, }, - rsp: &pb.HeroAwakenResp{}, - enabled: true, + rsp: &pb.HeroAwakenResp{}, + //enabled: true, }, } robot.addBuilders(tcs) diff --git a/cmd/robot/user.go b/cmd/robot/user.go index acf2fe5aa..4fb01ad2a 100644 --- a/cmd/robot/user.go +++ b/cmd/robot/user.go @@ -24,13 +24,27 @@ var user_builders = []*TestCase{ subType: "addres", req: &pb.UserAddResReq{ Res: &pb.UserAssets{ - A: "attr", - T: "10001", - N: 12, + A: "item", + T: "10011", + N: 13, }, }, - rsp: &pb.UserAddResResp{}, - enabled: true, + rsp: &pb.UserAddResResp{}, + //enabled: true, + }, + { + desc: "添加资源", + mainType: string(comm.ModuleUser), + subType: "addres", + req: &pb.UserAddResReq{ + Res: &pb.UserAssets{ + A: "item", + T: "10001", + N: 1, + }, + }, + rsp: &pb.UserAddResResp{}, + //enabled: true, }, } diff --git a/modules/hero/api.go b/modules/hero/api.go index e37b64ef3..00968d8ae 100644 --- a/modules/hero/api.go +++ b/modules/hero/api.go @@ -20,7 +20,7 @@ const ( //消息回复的头名称 Resonance = "resonance" // 英雄共鸣属性 ResonanceReset = "resonancereset" // 共鸣重置 StrengthenUpSkill = "strengthenupskill" // 技能强化 - StrengthenUpStar = "strengthensupstar" // 英雄升星 + StrengthenUpStar = "strengthenupstar" // 英雄升星 Awaken = "awaken" // 英雄觉醒 HeroLock = "lock" // 英雄锁定 ) diff --git a/modules/hero/api_awaken.go b/modules/hero/api_awaken.go index 47aa8488b..3fd2dc0e0 100644 --- a/modules/hero/api_awaken.go +++ b/modules/hero/api_awaken.go @@ -86,6 +86,17 @@ func (this *apiComp) Awaken(session comm.IUserSession, req *pb.HeroAwakenReq) (c property[awakenData.Phasebonus[0]] += int32(value) } this.module.modelHero.mergeMainProperty(session.GetUserId(), _hero.Id, property) + + _heroMap := map[string]interface{}{ + "juexingLv": _hero.JuexingLv + 1, + } + // 保存数据 + err1 = this.module.modelHero.modifyHeroData(session.GetUserId(), _hero.Id, _heroMap) + if err1 != nil { + code = pb.ErrorCode_DBError + this.module.Errorf("update hero skill failed:%v", err1) + return + } } err1 = this.module.modelHero.PushHeroProperty(session, _hero.Id) // 推送属性变化 diff --git a/modules/hero/api_starUp.go b/modules/hero/api_starUp.go index fc961d5a1..5dccd63db 100644 --- a/modules/hero/api_starUp.go +++ b/modules/hero/api_starUp.go @@ -14,18 +14,44 @@ func (this *apiComp) StrengthenUpStarCheck(session comm.IUserSession, req *pb.He code = pb.ErrorCode_ReqParameterError } + for _, v := range req.Hero { + if v.CostCardObj == req.HeroObjID { // 不允许消耗自己 + code = pb.ErrorCode_ReqParameterError + return + } + } + + for _, v := range req.HeroRace { + if v.CostCardObj == req.HeroObjID { + code = pb.ErrorCode_ReqParameterError + return + } + } return } /// 英雄升星 func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStrengthenUpStarReq) (code pb.ErrorCode, data proto.Message) { var ( - target *cfg.Game_heroStarupData // 配置表目标升星英雄信息 - costRaceCount int32 - _hero *pb.DBHero // 目标英雄 - raceHero *pb.DBHero // 消耗阵容的英雄 - tagHero *pb.DBHero // 消耗指定英雄 + target *cfg.Game_heroStarupData // 配置表目标升星英雄信息 + costNeedHeroCount int32 // 消耗指定英雄的数量 + costRaceHeroCount int32 // 消耗种族英雄的数量 + _hero *pb.DBHero // 目标英雄 + tagHero *pb.DBHero // 消耗指定英雄 + mapCostHero map[string]int32 // 所有消耗英雄分类 + bCheckNeedhero bool // 指定英雄校验 + bCheckRacehero bool // 种族英雄校验 ) + mapCostHero = make(map[string]int32, 0) + for _, v := range req.Hero { + mapCostHero[v.CostCardObj] += v.Amount + costNeedHeroCount += v.Amount + } + for _, v := range req.HeroRace { + mapCostHero[v.CostCardObj] += v.Amount + costRaceHeroCount += v.Amount + } + code = this.StrengthenUpStarCheck(session, req) // check if code != pb.ErrorCode_Success { return @@ -43,68 +69,53 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr } for _, value := range tagHeroConfig.GetDataList() { - if _hero.HeroID == value.Id && _hero.Star == value.Star && _hero.Lv == value.Maxlevel { // 找到了 满足升星条件 + if _hero.HeroID == value.Id && _hero.Star == value.Star && _hero.Lv >= value.Maxlevel { // 找到了 满足升星条件 target = value break } } if target == nil { + code = pb.ErrorCode_HeroNoExist + return + } + // 优先校验数量对不对 + if target.Needheronum != costNeedHeroCount || target.Needracenum != costRaceHeroCount { code = pb.ErrorCode_ReqParameterError return } - // 指定英雄消耗校验 - for _, v := range req.Hero { - if tagHero, code = this.module.GetHero(session.GetUserId(), v.CostCardObj); code != pb.ErrorCode_Success { + // 遍历所有消耗英雄 + for k, v := range mapCostHero { + if tagHero, code = this.module.GetHero(session.GetUserId(), k); code != pb.ErrorCode_Success { // 没有这个英雄 return } else { if tagHero.Block { // 锁定的卡不允许被消耗 code = pb.ErrorCode_HeroIsLock return } - if tagHero.SameCount < v.Amount { // 校验数量 + if tagHero.SameCount < v { // 校验数量 code = pb.ErrorCode_ReqParameterError return } - // 校验ID - if tagHero.HeroID != target.Needhero && tagHero.Star != target.Needherostar && tagHero.SameCount < target.Needheronum { - code = pb.ErrorCode_ReqParameterError - return + + if tagHero.HeroID == target.Needhero && tagHero.Star == target.Needherostar && tagHero.SameCount >= target.Needheronum { + bCheckNeedhero = true } - } - } - // 校验阵容英雄消耗 - for _, v := range req.HeroRace { - if raceHero, code = this.module.GetHero(session.GetUserId(), v.CostCardObj); code != pb.ErrorCode_Success { - return - } else { - if raceHero.Block { // 锁定的卡不允许被消耗 - code = pb.ErrorCode_HeroIsLock - return - } - // 校验阵容信息 - if raceHero.Star != target.Needracestar { - code = pb.ErrorCode_ReqParameterError - return - } - bFind := false + for _, value := range target.Needrace { // 阵营校验 - if raceHero.Formation == value { - bFind = true + if tagHero.Formation == value { + bCheckRacehero = true break } } - if !bFind { - code = pb.ErrorCode_ReqParameterError - return - } - } - costRaceCount += v.Amount + this.module.Debugf("指定英雄校验结果:%b,种族英雄校验结果:%b", bCheckNeedhero, bCheckRacehero) + } } - if costRaceCount != target.Needracenum { // 数量不匹配 + if !bCheckRacehero || !bCheckNeedhero { code = pb.ErrorCode_ReqParameterError - return + return // 校验失败 } + // 金币消耗判断 curGold := this.module.ModuleUser.QueryAttributeValue(session.GetUserId(), "gold") if curGold < target.Gold { // 金币不足 @@ -119,24 +130,15 @@ func (this *apiComp) StrengthenUpStar(session comm.IUserSession, req *pb.HeroStr code = pb.ErrorCode_GoldNoEnough return } - // 消耗指定英雄 - for _, v := range req.Hero { - code = this.module.DelCard(session.GetUserId(), v.CostCardObj, v.Amount) + for k, v := range mapCostHero { + code = this.module.DelCard(session.GetUserId(), k, v) if code != pb.ErrorCode_Success { code = pb.ErrorCode_DBError - this.module.Errorf("del hero err card:%s,count = %d", v.CostCardObj, v.Amount) + this.module.Errorf("del hero err card:%s,count = %d", k, v) return } } - //消耗种族英雄 - for _, v := range req.HeroRace { - code = this.module.DelCard(session.GetUserId(), v.CostCardObj, v.Amount) - if code != pb.ErrorCode_Success { - code = pb.ErrorCode_DBError - return - } - } code = this.module.modelHero.HeroStarUp(session, _hero) // 执行升星操作 if code != pb.ErrorCode_Success { return diff --git a/modules/user/api_res.go b/modules/user/api_res.go index 4478273c4..f6f09b5a2 100644 --- a/modules/user/api_res.go +++ b/modules/user/api_res.go @@ -20,15 +20,6 @@ func (this *apiComp) AddRes(session comm.IUserSession, req *pb.UserAddResReq) (c return } - rsp := &pb.UserAddResResp{} - - defer func() { - if err := session.SendMsg(string(this.module.GetType()), UserSubTypeAddRes, rsp); err != nil { - code = pb.ErrorCode_SystemError - return - } - }() - user := this.module.modelUser.GetUser(session.GetUserId()) if user == nil { code = pb.ErrorCode_UserSessionNobeing @@ -42,6 +33,12 @@ func (this *apiComp) AddRes(session comm.IUserSession, req *pb.UserAddResReq) (c } res = append(res, atn) code = this.module.DispenseRes(session.GetUserId(), res, true) - rsp.Res = req.Res + if code == pb.ErrorCode_Success { + rsp := &pb.UserAddResResp{ + Res: req.Res, + } + session.SendMsg(string(this.module.GetType()), UserSubTypeAddRes, rsp) + } + return } diff --git a/modules/user/module.go b/modules/user/module.go index 11f74c78e..74c1d7b98 100644 --- a/modules/user/module.go +++ b/modules/user/module.go @@ -122,6 +122,8 @@ func (this *User) AddAttributeValue(uid string, attr string, add int32, bPush bo } _change.Diamond += add update[comm.ResDiamond] = user.Diamond + add + default: + code = pb.ErrorCode_Unknown } if len(update) == 0 { diff --git a/pb/proto/errorcode.proto b/pb/proto/errorcode.proto index 19ad83a53..a0f0941e2 100644 --- a/pb/proto/errorcode.proto +++ b/pb/proto/errorcode.proto @@ -67,6 +67,7 @@ enum ErrorCode { HeroMaxAwaken = 1312; // 达到最大觉醒等级 HeroIsLock = 1313; // 英雄被锁定不能被消耗 HeroMaxCount = 1314; // 英雄达到最大数量 + HeroCostTypeErr = 1315; // 消耗英雄参数不匹配 // equipment EquipmentOnFoundEquipment = 1400; // 未找到武器