diff --git a/cmd/v2/ui/protocol.go b/cmd/v2/ui/protocol.go index 4dbf9509d..952eae2ca 100644 --- a/cmd/v2/ui/protocol.go +++ b/cmd/v2/ui/protocol.go @@ -41,6 +41,8 @@ var ( viewRegister = map[string]MyCaseView{ // gm ff(comm.ModuleGM, "cmd"): &formview.BingoView{}, + // reddot + ff(comm.ModuleReddot, "get"): &formview.ReddotView{}, //sys ff(comm.ModuleSys, "funclist"): &formview.SysFuncListView{}, //user @@ -150,11 +152,13 @@ var ( string(comm.ModuleTroll), string(comm.ModuleGrowtask), string(comm.ModuleWorldtask), + string(comm.ModuleReddot), }, "gm": {ff(comm.ModuleGM, "cmd")}, "sys": { ff(comm.ModuleSys, "funclist"), }, + "reddot": {ff(comm.ModuleReddot, "get")}, "user": { ff(comm.ModuleUser, user.UserSubTypeModifyAvatar), ff(comm.ModuleUser, user.UserSubTypeModifyName), @@ -273,6 +277,18 @@ var ( Rsp: &pb.GMCmdResp{}, Enabled: true, }, + "reddot": { + NavLabel: "红点", + MainType: string(comm.ModuleReddot), + Enabled: true, + }, + ff(comm.ModuleReddot, "get"): { + Desc: "红点", + NavLabel: "红点", + MainType: string(comm.ModuleReddot), + SubType: "get", + Enabled: true, + }, "sys": { NavLabel: "系统", MainType: string(comm.ModuleSys), diff --git a/cmd/v2/ui/views/reddot.go b/cmd/v2/ui/views/reddot.go new file mode 100644 index 000000000..45b84cdc5 --- /dev/null +++ b/cmd/v2/ui/views/reddot.go @@ -0,0 +1,37 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + "strings" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" + "github.com/spf13/cast" +) + +type ReddotView struct { + BaseformView +} + +func (this *ReddotView) CreateView(t *model.TestCase) fyne.CanvasObject { + reddotTypeEntry := widget.NewEntry() + + this.form.AppendItem(widget.NewFormItem("红点类型", reddotTypeEntry)) + this.form.OnSubmit = func() { + typesStr := strings.Split(reddotTypeEntry.Text, ",") + var rids []int32 + for _, s := range typesStr { + rids = append(rids, cast.ToInt32(s)) + } + if err := service.GetPttService().SendToClient(t.MainType, "get", + &pb.ReddotGetReq{ + Rids: rids, + }); err != nil { + logrus.Error(err) + } + } + return this.form +} diff --git a/comm/imodule.go b/comm/imodule.go index 24be2b0da..3ea653f1f 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -137,6 +137,8 @@ type ( GetTaskById(uid string, taskId int32) *pb.DBTask // 获取已完成的任务列表 GetTaskFinished(uid string, taskType TaskTag) []*pb.DBTask + // 红点 + Reddot(uid string, rid ...ReddotType) map[ReddotType]bool } // 随机任务 diff --git a/modules/reddot/api_get.go b/modules/reddot/api_get.go index 490103ab5..f32c7ab64 100644 --- a/modules/reddot/api_get.go +++ b/modules/reddot/api_get.go @@ -21,8 +21,23 @@ func (this *apiComp) Get(session comm.IUserSession, req *pb.ReddotGetReq) (code if code = this.GetCheck(session, req); code != pb.ErrorCode_Success { return } - for _, v := range req.Rids { - reddot[v] = false + for _, rid := range req.Rids { + // reddot[v] = false + switch rid { + case int32(comm.Reddot1): + for k, v := range this.module.ModuleTask.Reddot(session.GetUserId(), comm.Reddot1) { + reddot[int32(k)] = v + } + case int32(comm.Reddot2): + for k, v := range this.module.ModuleTask.Reddot(session.GetUserId(), comm.Reddot2) { + reddot[int32(k)] = v + } + case int32(comm.Reddot4): + for k, v := range this.module.ModuleTask.Reddot(session.GetUserId(), comm.Reddot2) { + reddot[int32(k)] = v + } + } + } // for k, v := range this.module.martialhall.Reddot(session.GetUserId(), comm.Reddot1) { // reddot[int32(k)] = v diff --git a/modules/rtask/model_record.go b/modules/rtask/model_record.go index 1317c3eb9..b7787a3fd 100644 --- a/modules/rtask/model_record.go +++ b/modules/rtask/model_record.go @@ -53,17 +53,17 @@ func (this *ModelRtaskRecord) getRecord(uid string) *pb.DBRtaskRecord { // 玩家登录时调用 func (this *ModelRtaskRecord) initCondiData(uid string) error { dr := this.getRecord(uid) - // 获取rdtask_condi配置表数据 - grc, err := this.moduleRtask.configure.getRtaskCondiCfg() - if err != nil { - return err - } - if grc == nil { - return errors.New("配置空[rdtaskcondi] err") - } - // 判断是否有记录 if dr.Vals == nil || len(dr.Vals) == 0 { + // 获取rdtask_condi配置表数据 + grc, err := this.moduleRtask.configure.getRtaskCondiCfg() + if err != nil { + return err + } + if grc == nil { + return errors.New("配置空[rdtaskcondi] err") + } + record := &pb.DBRtaskRecord{Uid: uid} record.Id = primitive.NewObjectID().Hex() record.Vals = make(map[int32]*pb.RtaskData) diff --git a/modules/rtask/updateHandle.go b/modules/rtask/updateHandle.go index 59ecb374f..daefae308 100644 --- a/modules/rtask/updateHandle.go +++ b/modules/rtask/updateHandle.go @@ -9,7 +9,6 @@ import ( cfg "go_dreamfactory/sys/configure/structs" "github.com/pkg/errors" - "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" ) @@ -30,42 +29,29 @@ func (this *ModelRtaskRecord) overrideUpdate(uid string, cfg *cfg.GameRdtaskCond } if record.Vals == nil { + record.Vals = make(map[int32]*pb.RtaskData) + } + + if v, ok := record.Vals[cfg.Id]; ok { + m := hasUpdateData(paramLen, v, vals...) + if len(m) > 0 { + update := map[string]interface{}{ + "vals": m, + } + err = this.Change(uid, update) + } + } else { data := &pb.RtaskData{ Rtype: cfg.Type, Data: toMap(vals...), Timestamp: configure.Now().Unix(), } - record.Vals = map[int32]*pb.RtaskData{ - cfg.Id: data, - } - record.Id = primitive.NewObjectID().Hex() - record.Uid = uid + record.Vals[cfg.Id] = data - if err := this.Add(uid, record); err != nil { - return errors.Wrapf(err, "添加玩家任务记录 err: %v rtype[%v]", uid, cfg.Id) - } - } else { - if v, ok := record.Vals[cfg.Id]; ok { - m := hasUpdateData(paramLen, v, vals...) - if len(m) > 0 { - update := map[string]interface{}{ - "vals": m, - } - err = this.Change(uid, update) - } - } else { - data := &pb.RtaskData{ - Rtype: cfg.Type, - Data: toMap(vals...), - Timestamp: configure.Now().Unix(), - } - record.Vals[cfg.Id] = data - - update := map[string]interface{}{ - "vals": record.Vals, - } - err = this.Change(uid, update) + update := map[string]interface{}{ + "vals": record.Vals, } + err = this.Change(uid, update) } this.listenTask(uid, cfg.Id) @@ -74,10 +60,6 @@ func (this *ModelRtaskRecord) overrideUpdate(uid string, cfg *cfg.GameRdtaskCond // 累计更新 - 招募等 func (this *ModelRtaskRecord) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) (err error) { - // t := configure.Now() - // defer func() { - // log.Debugf("add update耗时:%v", time.Since(t)) - // }() record := &pb.DBRtaskRecord{Uid: uid} err = this.Get(uid, record) if err != nil { @@ -87,44 +69,32 @@ func (this *ModelRtaskRecord) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData } if record.Vals == nil { - record.Id = primitive.NewObjectID().Hex() - data := &pb.RtaskData{ + record.Vals = make(map[int32]*pb.RtaskData) + } + //查找任务数据 + if v, ok := record.Vals[cfg.Id]; ok { + newCount := make([]int32, len(vals)) + srcCount := v.Data[0] + newCount[0] = srcCount + vals[0] + v.Data = toMap(newCount...) + v.Timestamp = configure.Now().Unix() + + update := map[string]interface{}{ + "vals": record.Vals, + } + err = this.Change(uid, update) + } else { + record.Vals[cfg.Id] = &pb.RtaskData{ Data: toMap(vals...), Rtype: cfg.Type, Timestamp: configure.Now().Unix(), } - - record.Vals = map[int32]*pb.RtaskData{ - cfg.Id: data, - } - if err := this.Add(uid, record); err != nil { - return errors.Wrapf(err, "添加玩家任务记录 err: %v rtype[%v]", uid, cfg.Id) - } - } else { - //查找任务数据 - if v, ok := record.Vals[cfg.Id]; ok { - newCount := make([]int32, len(vals)) - srcCount := v.Data[0] - newCount[0] = srcCount + vals[0] - v.Data = toMap(newCount...) - v.Timestamp = configure.Now().Unix() - - update := map[string]interface{}{ - "vals": record.Vals, - } - err = this.Change(uid, update) - } else { - record.Vals[cfg.Id] = &pb.RtaskData{ - Data: toMap(vals...), - Rtype: cfg.Type, - Timestamp: configure.Now().Unix(), - } - update := map[string]interface{}{ - "vals": record.Vals, - } - err = this.Change(uid, update) + update := map[string]interface{}{ + "vals": record.Vals, } + err = this.Change(uid, update) } + this.listenTask(uid, cfg.Id) return } diff --git a/modules/task/model_task.go b/modules/task/model_task.go index fce8500de..196452434 100644 --- a/modules/task/model_task.go +++ b/modules/task/model_task.go @@ -29,6 +29,21 @@ func (this *ModelTask) Init(service core.IService, module core.IModule, comp cor return } +// 查询完成的且未领取的任务 发现未领取返回true +func (this *ModelTask) noReceiveTask(uid string, taskTag comm.TaskTag) (bool, error) { + list := []*pb.DBTask{} + if err := this.GetList(uid, &list); err != nil { + this.moduleTask.Errorf("getTaskList err %v", err) + return false, err + } + for _, v := range list { + if v.Tag == int32(taskTag) && v.Status == 1 && v.Received == 0 { + return true, nil + } + } + return false, nil +} + //获取玩家任务列表 func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) (newlist []*pb.DBTask) { list := []*pb.DBTask{} @@ -42,7 +57,6 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) (newli return list[i].Sort < list[j].Sort }) - // dr := this.moduleTask.ModuleRtask.GetCondiData(uid) if dr == nil { return @@ -71,7 +85,7 @@ func (this *ModelTask) getTaskListByTag(uid string, taskTag comm.TaskTag) (newli return nil } - // 判断上个任务领取了才显示最后一个任务 + // 判断上个成就任务领取了才显示最后一个任务 isReceived := func(taskId int32) bool { if preCnf := this.moduleTask.configure.getPreTask(taskId); preCnf != nil { if preTask := getCurTask(preCnf.Key); preTask != nil { diff --git a/modules/task/module.go b/modules/task/module.go index 52cd8e23e..ead189415 100644 --- a/modules/task/module.go +++ b/modules/task/module.go @@ -1,7 +1,6 @@ package task import ( - "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/event" @@ -128,25 +127,6 @@ func (this *ModuleTask) ResetTask(uid string, taskTag comm.TaskTag) { this.modelTaskActive.clearTask(uid, taskTag) } -//任务处理 -// func (this *ModuleTask) SendToTask(session comm.IUserSession, condiId int32, params ...int32) (code pb.ErrorCode) { -// tl := new(TaskListen) -// tl.Uid = session.GetUserId() -// tl.TaskType = comm.TaskType(condiId) -// this.modelTask.EventApp.Dispatch(comm.EventTaskChanged, tl) -// return -// } - -//创建玩家攻略任务 -func (this *ModuleTask) CreateTaskForStrategy(uid string, heroCfgId int32) { - // - ids := make(map[string]string) - ids, _ = this.modelTask.Redis.HGetAllToMapString(fmt.Sprintf("task:%v_%v", uid, comm.TASK_STRATEGY)) - fmt.Println(ids) - // - -} - // 清理任务数据 func (this *ModuleTask) CleanData(uid string) { this.modelTask.clearTask(uid) @@ -156,30 +136,31 @@ func (this *ModuleTask) CleanData(uid string) { //任务处理器注册 type taskHandle func(uid string, taskId int32, tp *pb.TaskParam) *pb.DBTask -// func (this *ModuleTask) register(taskType comm.TaskType, fn taskHandle) { -// if _, ok := this.taskHandleMap[int32(taskType)]; !ok { -// this.taskHandleMap[int32(taskType)] = fn -// } -// } - -// 初始任务事件处理类 -// func (this *ModuleTask) initTaskHandle() { -// if data, err := this.configure.getTaskList(); err == nil { -// for _, v := range data { -// switch v.TypeId { -// case int32(comm.TaskTypeUpEquip): -// this.register(comm.TaskTypeUpEquip, this.modelTask.UpEquip) -// case int32(comm.TaskTypeUpHeroStar): -// this.register(comm.TaskTypeUpHeroStar, this.modelTask.UpHeroStar) -// case int32(comm.TaskTypeUpHeroLevel): -// this.register(comm.TaskTypeUpHeroLevel, this.modelTask.UpHeroLevel) -// default: -// log.Warnf("%v task type not supported", v.TypeId) -// } -// } -// } -// } - func (this *ModuleTask) GetTaskFinished(uid string, taskTage comm.TaskTag) []*pb.DBTask { return this.modelTask.getFinishTasks(uid, taskTage) } + +func (this *ModuleTask) Reddot(uid string, rid ...comm.ReddotType) (reddot map[comm.ReddotType]bool) { + reddot = make(map[comm.ReddotType]bool) + + for _, v := range rid { + switch v { + case comm.Reddot1: + if ok, _ := this.modelTask.noReceiveTask(uid, comm.TASK_DAILY); ok { + reddot[comm.Reddot1] = ok + break + } + case comm.Reddot2: + if ok, _ := this.modelTask.noReceiveTask(uid, comm.TASK_WEEKLY); ok { + reddot[comm.Reddot2] = ok + break + } + case comm.Reddot4: + if ok, _ := this.modelTask.noReceiveTask(uid, comm.TASK_ACHIEVE); ok { + reddot[comm.Reddot4] = ok + break + } + } + } + return +}