package worldtask import ( "errors" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "go.mongodb.org/mongo-driver/mongo" ) type ModelWorldtask struct { modules.MCompModel moduleWorldtask *Worldtask service core.IService } func (this *ModelWorldtask) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { err = this.MCompModel.Init(service, module, comp, options) this.TableName = comm.TableWorldtask this.moduleWorldtask = module.(*Worldtask) this.service = service return } // 获取玩家世界任务 func (this *ModelWorldtask) getWorldtask(uid string) (*pb.DBWorldtask, error) { d := &pb.DBWorldtask{} if err := this.Get(uid, d); err != nil { if err != mongo.ErrNoDocuments { return d, err } } return d, nil } //判断前置任务是否完成 func(this *ModelWorldtask) IsPreFinished(userTask *pb.DBWorldtask, curTaskConf *cfg.GameWorldTaskData)bool{ var ( lastTaskId int32 preTaskFinished bool ) if curTaskConf.Ontxe == 0 { preTaskFinished = true } else { lastTaskId = curTaskConf.Ontxe } for _, t := range userTask.TaskList { if lastTaskId == t.TaskId && t.Status == 1 { preTaskFinished = true } } return preTaskFinished } // 完成任务 func (this *ModelWorldtask) finishTask(groupId, taskId int32, task *pb.DBWorldtask) error { if task == nil { return errors.New("worldtask is nil") } update := map[string]interface{}{} if task.LastTaskIds == nil { task.LastTaskIds = make(map[int32]int32) } update["uid"] = task.Uid task.TaskList = append(task.TaskList, &pb.Worldtask{ TaskId: taskId, Status: 1, //完成 }) task.LastTaskIds[groupId] = taskId update["taskList"] = task.TaskList update["lastTaskIds"] = task.LastTaskIds return this.Change(task.Uid, update) }