go_dreamfactory/modules/growtask/model_growtask.go
2022-11-07 21:24:14 +08:00

163 lines
3.7 KiB
Go

package growtask
import (
"errors"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/mongo"
)
type ModelGrowtask struct {
modules.MCompModel
moduleGrowtask *Growtask
}
func (this *ModelGrowtask) 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.TableGrowtask
this.moduleGrowtask = module.(*Growtask)
return
}
// 初始化成长任务
func (this *ModelGrowtask) initGrowtask(uid string) (*pb.DBGrowtask, error) {
ggt, err := this.moduleGrowtask.configure.getGrowtaskCfg()
if err != nil {
return nil, err
}
if ggt == nil {
return nil, errors.New("growtask config is nil")
}
data := &pb.DBGrowtask{
Uid: uid,
}
for _, v := range ggt.GetDataList() {
if v.Type == 1 { //初级任务 默认状态:锁定
task := &pb.Growtask{
Id: v.Id,
TaskType: v.Type,
Fstask: v.Fstask,
PreTask: v.Onetask,
}
data.TaskList = append(data.TaskList, task)
}
}
if err = this.Add(uid, data); err != nil {
return nil, err
}
return data, nil
}
// 获取玩家成长任务
func (this *ModelGrowtask) getUserGrowtask(uid string) (*pb.DBGrowtask, error) {
gt := &pb.DBGrowtask{}
if err := this.Get(uid, gt); err != nil {
if err == mongo.ErrNoDocuments {
return this.initGrowtask(uid)
}
return nil, err
}
return gt, nil
}
// 任务列表
func (this *ModelGrowtask) list(uid string) []*pb.Growtask {
gt, err := this.getUserGrowtask(uid)
if err != nil {
return nil
}
if gt.Uid != "" {
taskStatusMap := make(map[int32]pb.GrowtaskStatus) //任务状态
for _, v := range gt.TaskList {
//已完成
if v.Status == pb.GrowtaskStatus_Finish {
continue
}
taskStatusMap[v.Id] = v.Status
//任务完成
if code := this.moduleGrowtask.ModuleRtask.CheckCondi(uid, v.Fstask); code == pb.ErrorCode_Success {
if v.PreTask == 0 {
v.Status = pb.GrowtaskStatus_Wait //待领奖状态
} else {
if s, ok := taskStatusMap[v.PreTask]; ok {
// 上个任务是领取状态
if s == pb.GrowtaskStatus_Wait {
continue
}
}
}
} else {
if v.PreTask == 0 {
v.Status = pb.GrowtaskStatus_Ongoing //进行中
} else {
if s, ok := taskStatusMap[v.PreTask]; ok {
// 上个任务是领取状态
if s == pb.GrowtaskStatus_Ongoing {
v.Status = pb.GrowtaskStatus_Lock
continue
}
}
}
}
}
}
//更新
update := map[string]interface{}{
"taskList": gt.TaskList,
}
if err := this.Change(uid, update); err != nil {
log.Errorf("更新任务列表 err:%v", err)
return nil
}
return gt.TaskList
}
// 领取子任务奖励
func (this *ModelGrowtask) receive(uid string, taskId int32) error {
gt, err := this.getUserGrowtask(uid)
if err != nil {
return err
}
for _, v := range gt.TaskList {
if v.Id == taskId {
if v.Status == pb.GrowtaskStatus_Wait {
v.Status = pb.GrowtaskStatus_Finish
} else {
return errors.New("不能领取")
}
break
}
}
//更新
update := map[string]interface{}{
"taskList": gt.TaskList,
}
if err := this.Change(uid, update); err != nil {
log.Errorf("更新任务列表 err:%v", err)
return err
}
return nil
}
// 进阶奖励领取
func (this *ModelGrowtask) advReceive(uid string, taskType int32) error {
gt, err := this.getUserGrowtask(uid)
if err != nil {
return err
}
//判断当前等级的任务是否都完成
for _, v := range gt.TaskList {
if v.Status != pb.GrowtaskStatus_Finish {
return errors.New("任务未全部完成")
}
}
return nil
}