From 4219ea4a594f0d5a1d5c590257b66a239e32a0fd Mon Sep 17 00:00:00 2001 From: meixiongfeng <766881921@qq.com> Date: Mon, 26 Sep 2022 23:34:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=8F=AF=E4=BB=A5=E5=85=B1?= =?UTF-8?q?=E9=B8=A3=E5=A5=BD=E5=87=A0=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/hero/api_resonance.go | 92 +++++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 32 deletions(-) diff --git a/modules/hero/api_resonance.go b/modules/hero/api_resonance.go index 9fba7fe8f..bc0203ee6 100644 --- a/modules/hero/api_resonance.go +++ b/modules/hero/api_resonance.go @@ -3,6 +3,7 @@ package hero import ( "go_dreamfactory/comm" "go_dreamfactory/pb" + cfg "go_dreamfactory/sys/configure/structs" "google.golang.org/protobuf/proto" ) @@ -20,12 +21,13 @@ func (this *apiComp) ResonanceCheck(session comm.IUserSession, req *pb.HeroReson /// 英雄共鸣 func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceReq) (code pb.ErrorCode, data proto.Message) { var ( - szCostHero map[string]int32 // k 消耗卡牌对象 v 数量 + szCostHero map[string]int32 // k 卡牌配置id v 数量 totalCostCard int32 //消耗卡总数量 _hero *pb.DBHero - _costHero *pb.DBHero - ChangeList []*pb.DBHero // 变化的英雄数据 - _costMaphero map[string]*pb.DBHero + + ChangeList []*pb.DBHero // 变化的英雄数据 + _costMaphero map[string]*pb.DBHero + count int32 // 共鸣升级次数 ) ChangeList = make([]*pb.DBHero, 0) szCostHero = make(map[string]int32, 0) @@ -39,47 +41,69 @@ func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceR if code != pb.ErrorCode_Success { return } - for _, v := range req.CostObjID { - szCostHero[v] += 1 - } - // 共鸣次数判断 resonConfig := this.module.configure.GetHeroResonanceConfig(_hero.HeroID, _hero.Star) if resonConfig == nil { code = pb.ErrorCode_ConfigNoFound return } - if resonConfig.Maxnum <= _hero.ResonateNum { + + totalCostCard = resonConfig.Energy + for _, k := range req.CostObjID { + _costHero, c := this.module.GetHeroByObjID(session.GetUserId(), k) // 查询消耗卡是否存在 + if c != pb.ErrorCode_Success { + code = c // 英雄被锁不能消耗 + return + } + if _costHero.Block { + code = pb.ErrorCode_HeroIsLock + } + _costMaphero[k] = _costHero + szCostHero[_costHero.HeroID] += 1 + } + // 一次升级多级 + for _, v := range resonConfig.Heroneed { + for k, v1 := range szCostHero { + if k == v.T { + if v1%v.N == 0 { + if count == 0 { + count = v1 / v.N + } + if count != v1/v.N { + code = pb.ErrorCode_ReqParameterError + return + } + } else { + code = pb.ErrorCode_ReqParameterError + return + } + } + } + } + if count == 0 { + code = pb.ErrorCode_ReqParameterError + return + } + if resonConfig.Maxnum < _hero.ResonateNum+count { code = pb.ErrorCode_HeroMaxResonate // 共鸣次数已满 return } - - for k, v := range szCostHero { - for _, v1 := range resonConfig.Heroneed { - if v1.A == comm.HeroType { - totalCostCard += v - } - - _costHero, code = this.module.GetHeroByObjID(session.GetUserId(), k) // 查询消耗卡是否存在 - if code != pb.ErrorCode_Success { // 英雄被锁不能消耗 - return - } - if _costHero.Block { - code = pb.ErrorCode_HeroIsLock - } - _costMaphero[k] = _costHero - } - } - - for k, v := range szCostHero { - code = this.module.DelCard(session.GetUserId(), _costMaphero[k], v) + for k, v := range _costMaphero { + code = this.module.DelCard(session.GetUserId(), v, szCostHero[v.HeroID]) if code != pb.ErrorCode_Success { return } ChangeList = append(ChangeList, _costMaphero[k]) } - - code = this.module.ConsumeRes(session, resonConfig.Need, true) + sz := make([]*cfg.Gameatn, 0) // 计算升级多次的消耗 + for _, v := range resonConfig.Need { + sz = append(sz, &cfg.Gameatn{ + A: v.A, + T: v.T, + N: v.N * count, + }) + } + code = this.module.ConsumeRes(session, sz, true) if code != pb.ErrorCode_Success { return } @@ -90,13 +114,17 @@ func (this *apiComp) Resonance(session comm.IUserSession, req *pb.HeroResonanceR break } } + if _hero.SameCount == 0 { + code = pb.ErrorCode_ReqParameterError + return + } if _hero.SameCount > 1 { _hero.SameCount -= 1 newHero := this.module.modelHero.CloneNewHero(_hero) ChangeList = append(ChangeList, newHero) } _hero.SameCount = 1 - _hero.ResonateNum += 1 + _hero.ResonateNum += count _hero.DistributionResonate += resonConfig.Energy * totalCostCard _heroMap := map[string]interface{}{ "resonateNum": _hero.ResonateNum,