package expedition import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "math" ) // 参数校验 func (this *apiComp) UpHeroCheck(session comm.IUserSession, req *pb.ExpeditionUpHeroReq) (errdata *pb.ErrorData) { return } // 获取工会boos战信息 func (this *apiComp) UpHero(session comm.IUserSession, req *pb.ExpeditionUpHeroReq) (errdata *pb.ErrorData) { var ( conf *cfg.GameExpeditionBossData hconf *cfg.GameHeroData member *pb.DBExpeditionMember info *pb.DBExpedition boos *pb.DBExpeditionBoos heros []*pb.DBHero condition []int32 addpwaer int32 err error ) if errdata = this.UpHeroCheck(session, req); errdata != nil { return } if state := getSysDayTimeState(); state != 1 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Message: "curr no in uptime!", } return } lock, _ := this.module.model.userlock(req.Guildid) err = lock.Lock() if err != nil { this.module.Error("公会战分布式锁 err!", log.Field{Key: "Guildid", Value: req.Guildid}, log.Field{Key: "err", Value: err.Error()}) return } defer lock.Unlock() if info, err = this.module.model.getInfo(req.Guildid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Message: err.Error(), } return } boos = info.Boos[info.Indexboos] if boos == nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_SystemError, Message: fmt.Sprintf("no found currboos:%d", info.Indexboos), } return } if conf, err = this.module.configure.getGameExpeditionBoosData(boos.Boosid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Message: err.Error(), } return } if heros, err = this.module.ModuleHero.QueryCrossMultipleHeroinfo(session.GetUserId(), req.Heros); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Message: err.Error(), } return } member = &pb.DBExpeditionMember{ Uid: session.GetUserId(), Heros: req.Heros, Totalpower: 100, State: 1, } condition = make([]int32, 4) for _, v := range heros { if hconf, err = this.module.ModuleTools.GetHeroConfig(v.HeroID); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Message: err.Error(), } return } if len(conf.Race) == 2 { if hconf.Race == conf.Race[0] { condition[0]++ } } if len(conf.Job) == 2 { if hconf.Job == conf.Job[0] { condition[1]++ } } for _, v := range conf.Hid { if hconf.Hid == v { condition[2]++ } } if len(conf.Color) == 2 { if hconf.Color == conf.Color[0] { condition[3]++ } } member.Totalpower += v.Fightvalue } if condition[0] >= conf.Race[1] { addpwaer += conf.Fight } if condition[1] >= conf.Job[1] { addpwaer += conf.Fight } if condition[2] >= int32(len(conf.Hid)) { addpwaer += conf.Fight } if condition[3] >= conf.Color[1] { addpwaer += conf.Fight } member.Totalpower = member.Totalpower + int32(math.Floor(float64(member.Totalpower)*float64(addpwaer)/float64(1000))) boos.Members[session.GetUserId()] = member if err = this.module.model.updateExpedition(info); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Message: err.Error(), } return } session.SendMsg(string(this.module.GetType()), "uphero", &pb.ExpeditionUpHeroResp{Member: member}) return }