From f01af25de39a7fa7c62d795989b80a324cb0cc9f Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Fri, 3 Mar 2023 16:29:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BE=E9=81=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/v2/ui/views/dispatch.go | 4 +- modules/dispatch/api_autoreceive.go | 15 ++- modules/dispatch/api_notice.go | 7 +- modules/dispatch/api_receive.go | 6 +- modules/dispatch/api_refresh.go | 9 +- modules/dispatch/api_week.go | 30 +++++- modules/dispatch/model_dispatch.go | 158 ++++++++++++---------------- 7 files changed, 127 insertions(+), 102 deletions(-) diff --git a/cmd/v2/ui/views/dispatch.go b/cmd/v2/ui/views/dispatch.go index 576bea811..ad8768d45 100644 --- a/cmd/v2/ui/views/dispatch.go +++ b/cmd/v2/ui/views/dispatch.go @@ -138,7 +138,9 @@ func (d *DispatchView) CreateView(t *model.TestCase) fyne.CanvasObject { if err := service.GetPttService().SendToClient( t.MainType, "weekreceive", - &pb.DispatchWeekReciveReq{}, + &pb.DispatchWeekReciveReq{ + Idx: 1, + }, ); err != nil { logrus.Error(err) return diff --git a/modules/dispatch/api_autoreceive.go b/modules/dispatch/api_autoreceive.go index 474dc6087..b5a59cf45 100644 --- a/modules/dispatch/api_autoreceive.go +++ b/modules/dispatch/api_autoreceive.go @@ -21,7 +21,7 @@ func (a *apiComp) Autoreceive(session comm.IUserSession, req *pb.DispatchAutoRec return } - tasks := a.module.modelDispatch.replaceFinishedTask(session.GetUserId(), d) + tasks, oldTasks := a.module.modelDispatch.replaceFinishedTask(session.GetUserId(), d) //更新公告任务 if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, tasks); err != nil { @@ -29,6 +29,19 @@ func (a *apiComp) Autoreceive(session comm.IUserSession, req *pb.DispatchAutoRec return } + //奖励 + for _, t := range oldTasks { + gd, err := a.module.configure.getDispatchTaskConf(t.TaskId) + if err != nil { + break + } + a.module.DispenseRes(session, gd.Reward, true) + + if t.Exaward { + a.module.DispenseRes(session, gd.Rewardex, true) + } + } + session.SendMsg(string(a.module.GetType()), "autoreceive", rsp) return } diff --git a/modules/dispatch/api_notice.go b/modules/dispatch/api_notice.go index cdcb234a4..4ce6907da 100644 --- a/modules/dispatch/api_notice.go +++ b/modules/dispatch/api_notice.go @@ -15,13 +15,16 @@ func (a *apiComp) NoticeCheck(session comm.IUserSession, req *pb.DispatchNoticeR func (a *apiComp) Notice(session comm.IUserSession, req *pb.DispatchNoticeReq) (code pb.ErrorCode, data proto.Message) { d := a.module.modelDispatch.getDBDispatch(session.GetUserId()) - + if d == nil { + code = pb.ErrorCode_DataNotFound + return + } rsp := &pb.DispatchNoticeResp{} if len(d.Nb.Tasks) == 0 { rsp.Dispatch = a.module.modelDispatch.initDispatch(session.GetUserId(), d) } else { - a.module.modelDispatch.updateNotice(session.GetUserId(),d) + a.module.modelDispatch.updateNotice(session.GetUserId(), d) rsp.Dispatch = d.Nb } diff --git a/modules/dispatch/api_receive.go b/modules/dispatch/api_receive.go index 5ac134f3b..f3ae8982d 100644 --- a/modules/dispatch/api_receive.go +++ b/modules/dispatch/api_receive.go @@ -23,11 +23,11 @@ func (a *apiComp) Receive(session comm.IUserSession, req *pb.DispatchReceiveReq) } d := a.module.modelDispatch.getDBDispatch(session.GetUserId()) if d == nil { - code = pb.ErrorCode_DBError + code = pb.ErrorCode_DataNotFound return } - tasks := a.module.modelDispatch.replaceTask(session.GetUserId(), req.TaskId, d) + tasks, oldTaskIds := a.module.modelDispatch.replaceTask(session.GetUserId(), req.TaskId, d) //更新公告任务 if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, tasks); err != nil { @@ -36,7 +36,7 @@ func (a *apiComp) Receive(session comm.IUserSession, req *pb.DispatchReceiveReq) } //奖励 - for _, t := range d.Nb.Tasks { + for _, t := range oldTaskIds { if t.TaskId == req.TaskId { gd, err := a.module.configure.getDispatchTaskConf(t.TaskId) if err != nil { diff --git a/modules/dispatch/api_refresh.go b/modules/dispatch/api_refresh.go index 6e926bdb7..de6977dc7 100644 --- a/modules/dispatch/api_refresh.go +++ b/modules/dispatch/api_refresh.go @@ -36,12 +36,18 @@ func (a *apiComp) Refresh(session comm.IUserSession, req *pb.DispatchRefreshReq) return } } else { + refreshCount := a.module.configure.GetGlobalConf().DispatchRefreshtimes + if d.Nb.RefreshCount >= refreshCount { + code = pb.ErrorCode_DispatchRefreshMax + return + } //消耗金币 money := a.module.configure.GetGlobalConf().DispatchCheckmoney if code = a.module.CheckRes(session, []*cfg.Gameatn{money}); code != pb.ErrorCode_Success { return } - if code = a.module.DispenseRes(session, []*cfg.Gameatn{money}, true); code != pb.ErrorCode_Success { + + if code = a.module.ConsumeRes(session, []*cfg.Gameatn{money}, true); code != pb.ErrorCode_Success { return } if err := a.module.modelDispatch.updateRefreshCount(session.GetUserId(), d.Nb); err != nil { @@ -57,6 +63,7 @@ func (a *apiComp) Refresh(session comm.IUserSession, req *pb.DispatchRefreshReq) return } + a.module.Debug("刷新", log.Field{Key: "taskIds", Value: taskIds}) //更新公告任务 if err := a.module.modelDispatch.updateTasks(session.GetUserId(), d.Nb, taskIds); err != nil { a.module.Debug("更新公告失败", log.Field{Key: "uid", Value: session.GetUserId()}) diff --git a/modules/dispatch/api_week.go b/modules/dispatch/api_week.go index df0392281..1edece735 100644 --- a/modules/dispatch/api_week.go +++ b/modules/dispatch/api_week.go @@ -8,13 +8,41 @@ import ( ) func (a *apiComp) WeekreceiveCheck(session comm.IUserSession, req *pb.DispatchWeekReciveReq) (code pb.ErrorCode) { + if req.Idx == 0 { + code = pb.ErrorCode_ReqParameterError + } return } func (a *apiComp) Weekreceive(session comm.IUserSession, req *pb.DispatchWeekReciveReq) (code pb.ErrorCode, data proto.Message) { - + if code = a.WeekreceiveCheck(session, req); code != pb.ErrorCode_Success { + return + } rsp := &pb.DispatchWeekReciveResp{} + d := a.module.modelDispatch.getDBDispatch(session.GetUserId()) + if d == nil { + code = pb.ErrorCode_DataNotFound + return + } + + //派发奖励 + wr := a.module.configure.GetGlobalConf().DispatchWeektaskreward + for i, v := range wr { + if req.Idx == int32(i+1) { + if d.Nb.WeekCount >= v.N { + //更新周任务状态 + if err := a.module.modelDispatch.updateWeekstatus(session.GetUserId(), req.Idx, d.Nb); err != nil { + code = pb.ErrorCode_DBError + return + } + a.module.DispenseRes(session, v.G, true) + rsp.Idx = req.Idx + break + } + + } + } session.SendMsg(string(a.module.GetType()), "weekreceive", rsp) return } diff --git a/modules/dispatch/model_dispatch.go b/modules/dispatch/model_dispatch.go index a74ed7641..e10aabf7d 100644 --- a/modules/dispatch/model_dispatch.go +++ b/modules/dispatch/model_dispatch.go @@ -3,6 +3,7 @@ package dispatch import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/log" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" @@ -42,15 +43,13 @@ func (this *modelDispatch) initDispatch(uid string, dispatch *pb.DBDispatch) *pb freeCount := this.module.configure.GetGlobalConf().DispatchFreecheck ticketCount := this.module.configure.GetGlobalConf().DispatchNumoftimes - refreshCount := this.module.configure.GetGlobalConf().DispatchRefreshtimes dis := &pb.DBDispatch{ Uid: uid, Ticket: ticketCount, Nb: &pb.Noticeboard{ - Lv: 1, //公告初始升级 - FreeCount: freeCount, - Tasks: tasks, - RefreshCount: refreshCount, + Lv: 1, //公告初始升级 + FreeCount: freeCount, + Tasks: tasks, }, } @@ -120,14 +119,6 @@ func (this *modelDispatch) getTasksWeight(uid string, noticeLv int32) []int32 { // 随机任务 func (this *modelDispatch) taskRandom(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, err error) { - // dispatch := this.getDBDispatch(uid) - // if dispatch == nil { - // return nil, errors.New("no data") - // } - - // if dispatch.Nb == nil { - // return nil, errors.New("notice is nil") - // } if dispatch.Nb.Lv == 0 { dispatch.Nb.Lv = 1 } @@ -178,33 +169,21 @@ func (this *modelDispatch) taskRandom(uid string, dispatch *pb.DBDispatch) (task } } else { tasks = dispatch.Nb.Tasks - for i, v := range tasks { + var randCount int + for i := 0; i < len(tasks); i++ { //只随机未接取的任务 - if v.Status == 0 { + if tasks[i].Status == 0 { //删除 tasks = append(tasks[:i], tasks[i+1:]...) - - //追加一条随机任务 - ids := utils.RandomNumbers(1, len(tIds), 1) - if len(ids) <= 0 { - continue - } - taskId := ids[0] - taskConf, err := this.module.configure.getDispatchTaskConf(v.TaskId) - if err != nil { - continue - } - - //公告持续截至时间 - duration := configure.Now().Unix() + int64(taskConf.Taskcd) - tasks = append(tasks, &pb.DispatchTask{ - TaskId: int32(taskId), - Duration: duration, - }) + i-- + randCount++ } else { - tasks = append(tasks, v) + tasks = append(tasks, tasks[i]) } - i-- + } + //追加随机 + for i := 0; i < randCount; i++ { + tasks = append(tasks, this.addRandomTask(uid, dispatch)) } } @@ -226,76 +205,56 @@ func (this *modelDispatch) addRandomTask(uid string, dispatch *pb.DBDispatch) *p //公告持续截至时间 duration := configure.Now().Unix() + int64(taskConf.Taskcd) - // 任务截至时间 - leftTime := configure.Now().Unix() + int64(taskConf.Tasktime) - return &pb.DispatchTask{ TaskId: int32(taskId), Duration: duration, - LeftTime: leftTime, } } // 替换指定的已完成任务 -func (this *modelDispatch) replaceTask(uid string, taskId int32, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask) { +func (this *modelDispatch) replaceTask(uid string, taskId int32, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, oldTaskIds []*pb.DispatchTask) { tasks = dispatch.Nb.Tasks - for i, v := range tasks { + var randCount int + for i := 0; i < len(tasks); i++ { //替换状态是完成的任务 - if v.Status == 2 { - if taskId != v.TaskId { + if tasks[i].Status == 2 { + if taskId != tasks[i].TaskId { continue } + oldTaskIds = append(oldTaskIds, tasks[i]) //删除 tasks = append(tasks[:i], tasks[i+1:]...) i-- - - tasks = append(tasks, this.addRandomTask(uid, dispatch)) - } else { - tasks = append(tasks, v) + randCount++ } } + for i := 0; i < randCount; i++ { + tasks = append(tasks, this.addRandomTask(uid, dispatch)) + } return } // 替换所有完成的任务 -func (this *modelDispatch) replaceFinishedTask(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask) { - - randomTaskIds := this.getTasksWeight(uid, dispatch.Nb.Lv) - +func (this *modelDispatch) replaceFinishedTask(uid string, dispatch *pb.DBDispatch) (tasks []*pb.DispatchTask, oldtasks []*pb.DispatchTask) { + var randCount int for i, v := range dispatch.Nb.Tasks { //替换状态是完成的任务 if v.Status == 2 { //删除 + oldtasks = append(oldtasks, v) dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...) i-- - - //追加一条随机任务 - ids := utils.RandomNumbers(1, len(randomTaskIds), 1) - if len(ids) <= 0 { - continue - } - taskId := ids[0] - taskConf, err := this.module.configure.getDispatchTaskConf(v.TaskId) - if err != nil { - continue - } - - //公告持续截至时间 - duration := configure.Now().Unix() + int64(taskConf.Taskcd) - // 任务截至时间 - leftTime := configure.Now().Unix() + int64(taskConf.Tasktime) - - tasks = append(tasks, &pb.DispatchTask{ - TaskId: int32(taskId), - Duration: duration, - LeftTime: leftTime, - }) + randCount++ } else { tasks = append(tasks, v) } } + + for i := 0; i < randCount; i++ { + tasks = append(tasks, this.addRandomTask(uid, dispatch)) + } return } @@ -384,9 +343,6 @@ func (this *modelDispatch) dispatch(uid string, taskId int32, heroIds []string, } } - //周任务数累加 - disp.Nb.WeekCount++ - update := map[string]interface{}{ "nb": disp.Nb, "ticket": disp.Ticket - 1, @@ -429,24 +385,14 @@ func (this *modelDispatch) updateTasks(uid string, noticeboard *pb.Noticeboard, // 更新公告栏任务 func (this *modelDispatch) updateNotice(uid string, dispatch *pb.DBDispatch) error { - for i, v := range dispatch.Nb.Tasks { - if v.Status == 0 { - //判断到期时间 - if v.Duration != 0 && v.Duration <= configure.Now().Unix() { - //替换到期任务 - // dispatch.Nb.Tasks = this.replaceTask(uid, v.TaskId, dispatch) - dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...) - i-- - //补一条 - dispatch.Nb.Tasks = append(dispatch.Nb.Tasks, this.addRandomTask(uid, dispatch)) - } - } - - if v.Status == 1 { - if v.LeftTime != 0 && v.LeftTime <= configure.Now().Unix() { + var randCount int + for i := 0; i < len(dispatch.Nb.Tasks); i++ { + if dispatch.Nb.Tasks[i].Status == 1 { + if dispatch.Nb.Tasks[i].LeftTime != 0 && + dispatch.Nb.Tasks[i].LeftTime <= configure.Now().Unix() { //更改次任务状态为 - v.Status = 2 //任务结束 - v.LeftTime = 0 + dispatch.Nb.Tasks[i].Status = 2 //任务结束 + dispatch.Nb.Tasks[i].LeftTime = 0 //升级 conf, err := this.module.configure.getDispatchLvConf(dispatch.Nb.Lv) if err != nil { @@ -460,7 +406,33 @@ func (this *modelDispatch) updateNotice(uid string, dispatch *pb.DBDispatch) err dispatch.Nb.WeekCount++ } } + + if dispatch.Nb.Tasks[i].Status == 0 { + this.module.Debug("uid", log.Field{Key: "duration", Value: dispatch.Nb.Tasks[i].Duration}, + log.Field{Key: "now", Value: configure.Now().Unix()}) + //判断到期时间 + if dispatch.Nb.Tasks[i].Duration != 0 && + dispatch.Nb.Tasks[i].Duration <= configure.Now().Unix() { + //替换到期任务 + dispatch.Nb.Tasks = append(dispatch.Nb.Tasks[:i], dispatch.Nb.Tasks[i+1:]...) + i-- + randCount++ + } + } + } + + for i := 0; i < randCount; i++ { + dispatch.Nb.Tasks = append(dispatch.Nb.Tasks, this.addRandomTask(uid, dispatch)) } return this.updateTasks(uid, dispatch.Nb, dispatch.Nb.Tasks) } + +// 更新周任务状态 +func (this *modelDispatch) updateWeekstatus(uid string, idx int32, noticeboard *pb.Noticeboard) error { + noticeboard.WeekReceived = append(noticeboard.WeekReceived, idx) + update := map[string]interface{}{ + "nb": noticeboard, + } + return this.Change(uid, update) +}