package herotask import ( "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" ) // 参数校验 func (this *apiComp) ReceiveCheck(session comm.IUserSession, req *pb.HeroTaskReceiveReq) (errdata *pb.ErrorData) { return } // /获取自己的排行榜信息 func (this *apiComp) Receive(session comm.IUserSession, req *pb.HeroTaskReceiveReq) (errdata *pb.ErrorData) { var ( dtask *pb.DBHeroTask tasks []int32 conf *cfg.GameFategiftrewardData progress []*pb.ConIProgress award []*pb.UserAssets ok bool err error ) if errdata = this.ReceiveCheck(session, req); errdata != nil { return } if tasks, err = this.module.configure.getgrouptask(req.Hero, req.Stage); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if conf, err = this.module.configure.getgroupreward(req.Hero, req.Stage); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if dtask, err = this.module.modeltask.getUserDTasks(session.GetUserId()); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if _, ok = dtask.Heros[req.Hero]; ok { if dtask.Heros[req.Hero].Stage[req.Stage] == 1 { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: fmt.Sprintf("hero:%d stage%d received", req.Hero, req.Stage), } return } } else { dtask.Heros[req.Hero] = &pb.DBHeroItem{ Heroid: req.Hero, Stage: make(map[int32]int32), } } if progress, err = this.module.ModuleBuried.CheckCondition(session.GetUserId(), tasks...); err != nil { return } for _, v := range progress { if v.State == pb.BuriedItemFinishState_buried_unfinish { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ReqParameterError, Title: pb.ErrorCode_ReqParameterError.ToString(), Message: "task no finish", } return } } if errdata = this.module.DispenseRes(session, []*cfg.Gameatn{conf.Stagereward}, true); errdata != nil { return } award = make([]*pb.UserAssets, 0) for _, v := range []*cfg.Gameatn{conf.Stagereward} { award = append(award, &pb.UserAssets{ A: v.A, T: v.T, N: v.N, }) } dtask.Heros[req.Hero].Stage[req.Stage] = 1 if err = this.module.modeltask.Change(session.GetUserId(), map[string]interface{}{ "heros": dtask.Heros, }); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } session.SendMsg(string(this.module.GetType()), "receive", &pb.HeroTaskReceiveResp{Hero: req.Hero, Stage: req.Stage, Award: award}) go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.module.WriteUserLog(session.GetUserId(), comm.GMResAddType, "HeroTaskReceiveReq", award) }) return }