163 lines
3.7 KiB
Go
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
|
|
}
|