From d2cdc79341e8e9dbec7d7c6c49a953b584ea70c2 Mon Sep 17 00:00:00 2001 From: meixiongfeng <766881921@qq.com> Date: Wed, 26 Jul 2023 19:51:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=BD=E5=90=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/stonehenge/api_challenge.go | 60 ++++++++++++++++++ modules/stonehenge/api_challengeover.go | 84 +++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 modules/stonehenge/api_challenge.go create mode 100644 modules/stonehenge/api_challengeover.go diff --git a/modules/stonehenge/api_challenge.go b/modules/stonehenge/api_challenge.go new file mode 100644 index 000000000..b238966fe --- /dev/null +++ b/modules/stonehenge/api_challenge.go @@ -0,0 +1,60 @@ +package stonehenge + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" + cfg "go_dreamfactory/sys/configure/structs" +) + +//参数校验 +func (this *apiComp) ChallengeCheck(session comm.IUserSession, req *pb.StonehengeBattleReq) (errdata *pb.ErrorData) { + if req.Eventid == 0 { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ReqParameterError, + Title: pb.ErrorCode_ReqParameterError.ToString(), + } + } + return +} + +///挑战主线关卡 +func (this *apiComp) Challenge(session comm.IUserSession, req *pb.StonehengeBattleReq) (errdata *pb.ErrorData) { + var ( + conf *cfg.GameStoneEventData + err error + battleConf *cfg.GameStoneBattleData + ) + if conf, err = this.module.configure.GetStoneEventDataById(req.Eventid); err != nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ConfigNoFound, + Title: pb.ErrorCode_ConfigNoFound.ToString(), + Message: err.Error(), + } + return + } + if battleConf, err = this.module.configure.GetBattleConfById(conf.Value1); err != nil { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ConfigNoFound, + Title: pb.ErrorCode_ConfigNoFound.ToString(), + Message: err.Error(), + } + return + } + if errdata = this.ChallengeCheck(session, req); errdata != nil { + return // 参数校验失败直接返回 + } + errdata, record := this.module.battle.CreatePveBattle(session, &pb.BattlePVEReq{ + Ptype: pb.PlayType_mainline, + Title: "", + Format: req.Battle, + Mformat: battleConf.FormatList, + }) + if errdata != nil { + return + } + session.SendMsg(string(this.module.GetType()), "battle", &pb.StonehengeBattleResp{ + Eventid: req.Eventid, + Info: &pb.BattleInfo{Id: record.Id, Title: record.Title, Rulesid: battleConf.BattleReadyID, Btype: record.Btype, Ptype: record.Ptype, RedCompId: record.RedCompId, Redflist: record.Redflist, BlueCompId: record.BlueCompId, Buleflist: record.Buleflist}, + }) + return +} diff --git a/modules/stonehenge/api_challengeover.go b/modules/stonehenge/api_challengeover.go new file mode 100644 index 000000000..7907d754c --- /dev/null +++ b/modules/stonehenge/api_challengeover.go @@ -0,0 +1,84 @@ +package stonehenge + +import ( + "fmt" + "go_dreamfactory/comm" + "go_dreamfactory/pb" + cfg "go_dreamfactory/sys/configure/structs" +) + +// 参数校验 +func (this *apiComp) BattleOverCheck(session comm.IUserSession, req *pb.StonehengeBattleOverReq) (errdata *pb.ErrorData) { + if req.Eventid == 0 { + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ReqParameterError, + Title: pb.ErrorCode_ReqParameterError.ToString(), + } + return + } + return +} + +// /挑战主线关卡 +func (this *apiComp) BattleOver(session comm.IUserSession, req *pb.StonehengeBattleOverReq) (errdata *pb.ErrorData) { + var ( + isWin bool + update map[string]interface{} + roomConf *cfg.GameStoneRoomData + eventConf *cfg.GameStoneEventData + newEvent int32 // 是否有新的事件 + err error + ) + errdata, isWin = this.module.battle.CheckBattleReport(session, req.Report) + if errdata != nil { + return + } + if !isWin { + return + } + update = make(map[string]interface{}) + stone := this.module.modelStonehenge.GetStonehengeData(session.GetUserId()) + if _, ok := stone.Rooms.Eventid[req.Eventid]; !ok { // 不存在该事件 + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_ReqParameterError, + Title: pb.ErrorCode_ReqParameterError.ToString(), + Message: fmt.Sprintf("req.Eventid err :%d", req.Eventid), + } + return + } + if stone.Rooms.Eventid[req.Eventid] { // 重复完成 + errdata = &pb.ErrorData{ + Code: pb.ErrorCode_StonehengeRepeatedReward, + Title: pb.ErrorCode_StonehengeRepeatedReward.ToString(), + Message: fmt.Sprintf("req.Eventid err :%d", req.Eventid), + } + return + } + update["stageID"] = stone.StageID + if roomConf, err = this.module.configure.GetStoneRoomDataById(stone.Rooms.Roomid); err != nil { + return + } + + if eventConf, err = this.module.configure.GetStoneEventDataById(req.Eventid); err != nil { + return + } + // 校验事件有后续事件 + if eventConf.Probability >= comm.GetRandNum(0, 1000) { // 命中 + newEvent = eventConf.PostEvent + stone.Rooms.Eventid[newEvent] = false // + stone.Rooms.Eventid[req.Eventid] = true // + } + + // 校验是否通关 + for _, v := range roomConf.Condition { + if v == eventConf.EventType { + stone.Rooms.Complete = true + } + } + + update["rooms"] = stone.Rooms + this.module.modelStonehenge.ChangeStonehengeData(session.GetUserId(), update) + session.SendMsg(string(this.module.GetType()), "battleover", &pb.StonehengeBattleOverResp{}) // 数据推送 + + return +}