package mainline import ( "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go.mongodb.org/mongo-driver/bson/primitive" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.MainlineChallengeReq) (code pb.ErrorCode) { if req.MainlineId == 0 { code = pb.ErrorCode_ReqParameterError return } return } ///挑战主线关卡 func (this *apiComp) Challenge(session comm.IUserSession, req *pb.MainlineChallengeReq) (code pb.ErrorCode, data proto.Message) { var ( curChapter *pb.DBMainline // 当前章节信息 bBranch bool // 当前挑战关卡是不是分支 bCheck bool res []*cfg.Game_atn // 小章节奖励 ) res = make([]*cfg.Game_atn, 0) bBranch = false code = this.ChallengeCheck(session, req) if code != pb.ErrorCode_Success { return // 参数校验失败直接返回 } // 校验关卡存不存在 curChapter = this.module.modelMainline.getOneChapterInfo(session.GetUserId(), req.ChapterObj) if curChapter == nil { code = pb.ErrorCode_MainlineNotFound return } // 先校验是不是分支 chaptConfig := this.module.configure.GetMainlineChapter(int32(curChapter.ChapterId)) // 根据配置文件找 if chaptConfig == nil { code = pb.ErrorCode_ConfigNoFound return } for _, v := range chaptConfig.Episode { // 校验是不是当前章节的关卡 if v == int32(req.MainlineId) { bCheck = true break } } if !bCheck { code = pb.ErrorCode_ReqParameterError // 不是该章节的关卡 return } // 根据难度找对应的配置文件 if chaptConfig.Intensity == comm.MailLineEasy { con := this.module.configure.GetMainlineEasyChapter(int32(req.MainlineId)) // 根据配置文件找 if con == nil { code = pb.ErrorCode_ConfigNoFound return } if con.Route == 1 { if curChapter.MainlineId == 0 { // 表示第一小关 } else if con.Previoustage != curChapter.MainlineId { // 前置关卡校验 // 分支关卡也校验一下 for _, v := range curChapter.BranchID { if v == con.Previoustage { break } } code = pb.ErrorCode_MainlinePreNotFound } } else if con.Route == 2 { //分支 bBranch = true // 只需要校验小关ID 是不是大于当前ID就可以 //if curChapter.MainlineId < int32(req.MainlineId) { //必须大于前置关卡才可以挑战 // code = pb.ErrorCode_MainlineIDFailed // return //} } res = append(res, con.Award...) } // TODO 调用战斗逻辑 // 挑战成功 curChapter.MainlineId = int32(req.MainlineId) if bBranch { curChapter.BranchID = append(curChapter.BranchID, int32(req.MainlineId)) // 记录分支关卡 } update := map[string]interface{}{ "mainlineId": req.MainlineId, "ChapterId": curChapter.ChapterId, "branchID": curChapter.BranchID, } err := this.module.modelMainline.modifyMainlineData(session.GetUserId(), curChapter.Id, update) if err != nil { code = pb.ErrorCode_DBError return } newChaptConfig := this.module.configure.GetMainlineChapter(int32(curChapter.ChapterId + 1)) // 查下一章节 if newChaptConfig != nil { if len(newChaptConfig.Episode) <= 0 { return } //mainLineID := newChaptConfig.Episode[0] // 如果本章节打完 则创建新的章节 if chaptConfig.Episode[len(chaptConfig.Episode)-1] == int32(req.MainlineId) { _data := &pb.DBMainline{} _data.Id = primitive.NewObjectID().Hex() _data.ChapterId = curChapter.ChapterId + 1 _data.MainlineId = 0 // 第二章数据默认0 _mData := make(map[string]interface{}, 0) _data.Uid = session.GetUserId() _mData[_data.Id] = _data this.module.modelMainline.addNewChapter(session.GetUserId(), _mData) // 推送新的章节 session.SendMsg(string(this.module.GetType()), MainlineNewChapterPush, &pb.MainlineNewChapterPush{Data: _data}) } } // 发奖 (奖励数据还没配置,后续补充) code = this.module.DispenseRes(session, res, true) if code != pb.ErrorCode_Success { return } session.SendMsg(string(this.module.GetType()), MainlineChallengeResp, &pb.MainlineChallengeResp{Data: curChapter}) return }