package hero import ( "go_dreamfactory/comm" "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) //参数校验 func (this *apiComp) StrengthenUpStarCheck(session comm.IUserSession, req *pb.HeroStrengthenUpStarReq) (result map[string]interface{}, code comm.ErrorCode) { if req.HeroObjID == "" { code.Code = pb.ErrorCode_ReqParameterError return } var ( curLv int32 target *cfg.Game_heroStarupData // 配置表目标升星英雄信息 raceHero *pb.DBHero // 消耗的阵容英雄 costRaceCount int32 curGold int32 ) tagHero, err := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), req.HeroObjID) if err != 0 { code.Code = pb.ErrorCode_HeroNoExist return } curLv = tagHero.Lv log.Debugf("curLv:%d", curLv) // 校验指定英雄 tagHeroConfig, err1 := this.moduleHero.configure.GetHeroStarupConfig() if err1 != nil { code.Code = pb.ErrorCode_ReqParameterError return } for _, value := range tagHeroConfig.GetDataList() { if tagHero.HeroID == value.Id && tagHero.Star == value.Star && tagHero.Lv == value.Maxlevel { // 找到了 满足升星条件 target = value break } } // 指定英雄消耗校验 for _, v := range req.Hero { if tagHero, err := this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), v.CostCardObj); err != 0 { code.Code = pb.ErrorCode_ReqParameterError return } else { if tagHero.Count < v.Amount { // 校验数量 code.Code = pb.ErrorCode_ReqParameterError return } // 校验ID if tagHero.HeroID != target.Needhero && tagHero.Star != target.Needherostar && tagHero.Count < target.Needheronum { code.Code = pb.ErrorCode_ReqParameterError return } } } // 校验阵容英雄消耗 for _, v := range req.HeroRace { if raceHero, err = this.moduleHero.modelHero.moduleHero.GetHero(session.GetUserId(), v.CostCardObj); err != 0 { code.Code = pb.ErrorCode_ReqParameterError return } else { // 校验阵容信息 if raceHero.Star != target.Needracestar { code.Code = pb.ErrorCode_ReqParameterError return } bFind := false for _, value := range target.Needrace { // 阵营校验 if raceHero.Formation == value { bFind = true break } } if !bFind { code.Code = pb.ErrorCode_ReqParameterError return } } costRaceCount += v.Amount } if costRaceCount != target.Needracenum { // 数量不匹配 code.Code = pb.ErrorCode_ReqParameterError return } // 金币消耗判断 curGold = this.user.QueryAttributeValue(session.GetUserId(), "gold") if curGold < target.Gold { // 金币不足 code.Code = pb.ErrorCode_GoldNoEnough return } result = map[string]interface{}{ "costGold": target.Gold, } return } /// 英雄升星 func (this *apiComp) StrengthenUpStar(session comm.IUserSession, agrs map[string]interface{}, req *pb.HeroStrengthenUpStarReq) (code pb.ErrorCode) { var ( costGold int32 // 当前需要消耗金币的数量 ) defer func() { if code == pb.ErrorCode_Success { session.SendMsg(string(this.moduleHero.GetType()), StrengthenUplv, &pb.HeroStrengthenUpStarResp{}) } }() costGold = agrs["costGold"].(int32) // 消耗道具 code = this.user.AddAttributeValue(session.GetUserId(), "gold", -costGold) // 减少金币 if code != pb.ErrorCode_Success { return } // 消耗指定英雄 for _, v := range req.Hero { code = this.moduleHero.DelCard(v.CostCardObj, v.Amount) if code != 0 { return } } //消耗种族英雄 for _, v := range req.HeroRace { code = this.moduleHero.DelCard(v.CostCardObj, v.Amount) if code != 0 { return } } return }