This commit is contained in:
liwei1dao 2022-07-22 23:18:15 +08:00
commit 33dbbbdebf
4 changed files with 89 additions and 89 deletions

View File

@ -24,7 +24,7 @@ var (
fmt.Printf("%d- %v\n", (i + 1), v) fmt.Printf("%d- %v\n", (i + 1), v)
} }
}, },
// enabled: true, enabled: true,
next: func(robot *Robot, rsp proto.Message) { next: func(robot *Robot, rsp proto.Message) {
tcs := []*TestCase{} tcs := []*TestCase{}
if _, ok := rsp.(*pb.HeroListResp); ok { if _, ok := rsp.(*pb.HeroListResp); ok {
@ -33,9 +33,9 @@ var (
mainType: string(comm.ModuleHero), mainType: string(comm.ModuleHero),
subType: hero.StrengthenUplv, subType: hero.StrengthenUplv,
req: &pb.HeroStrengthenUplvReq{ req: &pb.HeroStrengthenUplvReq{
HeroObjID: "62da4e1ecd19e620141eed75", HeroObjID: "62dabaacd8c5789e2cc8b95e",
ExpCards: map[string]int32{ ExpCards: map[string]int32{
"62da4e40cd19e620141eedeb": 1, "62dabac1d8c5789e2cc8b9d3": 1,
}, },
}, },
rsp: &pb.HeroStrengthenUplvResp{}, rsp: &pb.HeroStrengthenUplvResp{},

View File

@ -17,7 +17,7 @@ var (
subType: task.TaskSubTypeList, subType: task.TaskSubTypeList,
req: &pb.TaskListReq{ req: &pb.TaskListReq{
//设置任务类型 //设置任务类型
// TaskTag: int32(comm.TASK_DAILY), //每天任务 TaskTag: int32(comm.TASK_DAILY), //每天任务
// TaskTag: int32(comm.TASK_WEEKLY), //周任务 // TaskTag: int32(comm.TASK_WEEKLY), //周任务
// TaskTag: int32(comm.TASK_ACHIEVE), // TaskTag: int32(comm.TASK_ACHIEVE),
// TaskTag: int32(comm.TASK_STRATEGY), // TaskTag: int32(comm.TASK_STRATEGY),
@ -40,7 +40,7 @@ var (
subType: task.TaskSubTypeReceive, subType: task.TaskSubTypeReceive,
req: &pb.TaskReceiveReq{ req: &pb.TaskReceiveReq{
TaskTag: int32(comm.TASK_DAILY), TaskTag: int32(comm.TASK_DAILY),
Id: "62da4e20cd19e620141eed7b", Id: "62dab21d9efd6536b1cc1bb9",
}, },
rsp: &pb.TaskReceiveResp{}, rsp: &pb.TaskReceiveResp{},
// enabled: true, // enabled: true,
@ -64,7 +64,7 @@ var (
fmt.Printf("%v 活跃值:%v\n", v, out.Active) fmt.Printf("%v 活跃值:%v\n", v, out.Active)
} }
}, },
enabled: true, // enabled: true,
}, { }, {
desc: "活跃度领取", desc: "活跃度领取",
mainType: string(comm.ModuleTask), mainType: string(comm.ModuleTask),

View File

@ -6,7 +6,6 @@ import (
"go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
) )
@ -43,7 +42,8 @@ func (this *ModelTask) getTaskList(uid string, taskTag comm.TaskTag) (newlist []
return return
} }
func (this *ModelTask) getTaskTypeList(uid string, taskType comm.TaskType) (newlist []*pb.DBTask) { // 获取用户任务
func (this *ModelTask) getTaskById(uid string, taskId int32) (newlist []*pb.DBTask) {
list := []*pb.DBTask{} list := []*pb.DBTask{}
if err := this.GetList(uid, &list); err != nil { if err := this.GetList(uid, &list); err != nil {
log.Errorf("getTaskList err %v", err) log.Errorf("getTaskList err %v", err)
@ -51,7 +51,7 @@ func (this *ModelTask) getTaskTypeList(uid string, taskType comm.TaskType) (newl
} }
for _, v := range list { for _, v := range list {
if v.TypeId == int32(taskType) { if v.TaskId == taskId {
newlist = append(newlist, v) newlist = append(newlist, v)
} }
} }
@ -62,7 +62,6 @@ func (this *ModelTask) getTaskTypeList(uid string, taskType comm.TaskType) (newl
func (this *ModelTask) initTask(uid string) error { func (this *ModelTask) initTask(uid string) error {
if data, err := this.moduleTask.configure.getTaskList(); err == nil { if data, err := this.moduleTask.configure.getTaskList(); err == nil {
for _, cnf := range data { for _, cnf := range data {
//初始玩家任务数据
objId := primitive.NewObjectID().Hex() objId := primitive.NewObjectID().Hex()
task := &pb.DBTask{ task := &pb.DBTask{
Id: objId, Id: objId,
@ -92,9 +91,9 @@ func (this *ModelTask) getUserTask(uid string, taskId string) *pb.DBTask {
return userTask return userTask
} }
//获取未完成的任务列表 // 获取待处理的任务
func (this *ModelTask) getUnFinishTaskList(uid string, taskType comm.TaskType) (list []*pb.DBTask) { func (this *ModelTask) getUnFinishTasks(uid string, taskId int32) (list []*pb.DBTask) {
taskList := this.getTaskTypeList(uid, taskType) taskList := this.getTaskById(uid, taskId)
for _, v := range taskList { for _, v := range taskList {
if v.Status == 0 { if v.Status == 0 {
list = append(list, v) list = append(list, v)
@ -114,15 +113,14 @@ func (this *ModelTask) countActive(uid string, taskTag comm.TaskTag) (total int3
return return
} }
//检查任务进度 返回未完成的 //检查任务状态 返回等待处理的任务
func (this *ModelTask) checkTaskProgress(uid string, config *cfg.Game_taskRoundData) (*pb.DBTask, bool) { func (this *ModelTask) checkTask(uid string, taskId int32) (*pb.DBTask, bool) {
taskList := this.getUnFinishTaskList(uid, comm.TaskType(config.TypeId)) taskList := this.getUnFinishTasks(uid, taskId)
for _, v := range taskList { for _, v := range taskList {
if config.Key == v.TaskId && v.Status == 0 { if taskId == v.TaskId && v.Status == 0 {
return v, true return v, true
} }
} }
return nil, false return nil, false
} }
@ -135,62 +133,6 @@ func (this *ModelTask) modifyUserTask(uid string, taskId string, data map[string
return nil return nil
} }
//任务处理
func (this *ModelTask) taskHandle(uid string, taskType comm.TaskType, taskParam *pb.TaskParam) (tasks []*pb.DBTask, err error) {
data, err := this.moduleTask.configure.getTasks(int32(taskType))
if err != nil {
log.Errorf("taskHandle err %v", err)
return nil, err
}
for _, conf := range data {
if conf.RestrictiveCondition != 0 {
//不满足限定条件
if taskParam.First < conf.RestrictiveCondition {
continue
}
}
if taskParam.Second < conf.ConditionSecond {
continue
}
//检查进度,执行处理器
if v, ok := this.checkTaskProgress(uid, conf); ok {
if tt, err := this.finishHandle(v, conf, taskParam.Second); err != nil {
return nil, err
} else {
tasks = append(tasks, tt)
}
}
}
return tasks, nil
}
//任务完成处理
func (this *ModelTask) finishHandle(userTask *pb.DBTask, config *cfg.Game_taskRoundData, count int32) (*pb.DBTask, error) {
var progress int32
if count >= userTask.Progress {
progress = 0
}
if progress == 0 {
//修改玩家任务状态和进度
update := map[string]interface{}{
"progress": progress,
}
update["status"] = 1
if err := this.modifyUserTask(userTask.Uid, userTask.Id, update); err != nil {
log.Errorf("err %v", err)
return nil, err
}
userTask.Progress = progress
userTask.Status = 1
}
return userTask, nil
}
//清空任务 //清空任务
func (this *ModelTask) clearTask(uid string, taskTag comm.TaskTag) error { func (this *ModelTask) clearTask(uid string, taskTag comm.TaskTag) error {
taskList := this.getTaskList(uid, taskTag) taskList := this.getTaskList(uid, taskTag)
@ -241,14 +183,67 @@ func (this *ModelTask) inStrategy(uid string, heroCfgId int32) (taskIds []int32,
return return
} }
func (this *ModelTask) UpEquip() { // 任务类型-装备升级
func (this *ModelTask) UpEquip(uid string, taskId int32, tp *pb.TaskParam) *pb.DBTask {
return nil
} }
func (this *ModelTask) UpHeroStar() { // 任务类型-英雄星级升级
func (this *ModelTask) UpHeroStar(uid string, taskId int32, tp *pb.TaskParam) *pb.DBTask {
return nil
} }
func (this *ModelTask) UpHeroLevel() { // 任务类型-英雄等级升级
func (this *ModelTask) UpHeroLevel(uid string, taskId int32, tp *pb.TaskParam) *pb.DBTask {
if task, ok := this.checkTask(uid, taskId); ok {
var progress int32
if tp.Second >= task.Progress {
progress = 0
//修改玩家任务状态和进度
update := map[string]interface{}{
"progress": progress,
}
update["status"] = 1
if err := this.modifyUserTask(task.Uid, task.Id, update); err != nil {
log.Errorf("err %v", err)
return nil
}
task.Progress = progress
task.Status = 1
return task
} else {
progress = task.Progress - tp.Second
if progress <= 0 {
progress = 0
}
update := map[string]interface{}{
"progress": progress,
}
if err := this.modifyUserTask(task.Uid, task.Id, update); err != nil {
log.Errorf("err %v", err)
return nil
}
task.Progress = progress
return task
}
}
return nil
}
// 任务处理
func (this *ModelTask) doTaskHandle(uid string, taskType comm.TaskType, taskParam *pb.TaskParam) (tasks []*pb.DBTask, err error) {
data, err := this.moduleTask.configure.getTasks(int32(taskType))
if err != nil {
log.Errorf("taskHandle err %v", err)
return nil, err
}
for _, conf := range data {
if handle, ok := this.moduleTask.taskHandleMap[conf.TypeId]; ok {
if task := handle(uid, conf.Key, taskParam); task != nil {
tasks = append(tasks, task)
}
}
}
return
} }

View File

@ -15,10 +15,14 @@ type ModuleTask struct {
modelTaskActive *ModelTaskActive modelTaskActive *ModelTaskActive
api *apiComp api *apiComp
configure *configureComp configure *configureComp
taskHandleMap map[int32]taskHandle //任务处理器
} }
func NewModule() core.IModule { func NewModule() core.IModule {
return &ModuleTask{} return &ModuleTask{
taskHandleMap: make(map[int32]taskHandle),
}
} }
func (this *ModuleTask) GetType() core.M_Modules { func (this *ModuleTask) GetType() core.M_Modules {
@ -27,7 +31,7 @@ func (this *ModuleTask) GetType() core.M_Modules {
func (this *ModuleTask) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { func (this *ModuleTask) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) {
err = this.ModuleBase.Init(service, module, options) err = this.ModuleBase.Init(service, module, options)
// this.initTaskHandle() this.initTaskHandle()
return return
} }
@ -68,7 +72,7 @@ func (this *ModuleTask) ResetTask(uid string, taskTag comm.TaskTag) {
//任务处理 //任务处理
func (this *ModuleTask) SendToTask(session comm.IUserSession, taskType comm.TaskType, taskPram *pb.TaskParam) (code pb.ErrorCode) { func (this *ModuleTask) SendToTask(session comm.IUserSession, taskType comm.TaskType, taskPram *pb.TaskParam) (code pb.ErrorCode) {
if tasks, err := this.modelTask.taskHandle(session.GetUserId(), taskType, taskPram); err != nil { if tasks, err := this.modelTask.doTaskHandle(session.GetUserId(), taskType, taskPram); err != nil {
code = pb.ErrorCode_TaskHandle code = pb.ErrorCode_TaskHandle
} else { } else {
for _, t := range tasks { for _, t := range tasks {
@ -102,10 +106,12 @@ func (this *ModuleTask) CleanData(uid string) {
} }
//任务处理器注册 //任务处理器注册
type taskHandle func() type taskHandle func(uid string, taskId int32, tp *pb.TaskParam) *pb.DBTask
func (this *ModuleTask) register(taskType comm.TaskType, fn taskHandle) { 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() { func (this *ModuleTask) initTaskHandle() {
@ -115,13 +121,12 @@ func (this *ModuleTask) initTaskHandle() {
case int32(comm.TaskTypeUpEquip): case int32(comm.TaskTypeUpEquip):
this.register(comm.TaskTypeUpEquip, this.modelTask.UpEquip) this.register(comm.TaskTypeUpEquip, this.modelTask.UpEquip)
case int32(comm.TaskTypeUpHeroStar): case int32(comm.TaskTypeUpHeroStar):
this.register(comm.TaskTypeUpEquip, this.modelTask.UpHeroStar) this.register(comm.TaskTypeUpHeroStar, this.modelTask.UpHeroStar)
case int32(comm.TaskTypeUpHeroLevel): case int32(comm.TaskTypeUpHeroLevel):
this.register(comm.TaskTypeUpEquip, this.modelTask.UpHeroLevel) this.register(comm.TaskTypeUpHeroLevel, this.modelTask.UpHeroLevel)
default: default:
log.Error("no ") log.Errorf("%v task type not supported", v.TypeId)
} }
} }
} }
} }