go_dreamfactory/modules/worldtask/api_completetask.go

115 lines
3.0 KiB
Go

package worldtask
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
)
// 任务完成条件
func (this *apiComp) CompleteCondiCheck(session comm.IUserSession, req *pb.WorldtaskCompleteCondiReq) (errdata *pb.ErrorData) {
if req.TaskId <= 0 || req.CondiId <= 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ReqParameterError,
Title: pb.ErrorCode_ReqParameterError.ToString(),
}
}
return
}
func (this *apiComp) CompleteCondi(session comm.IUserSession, req *pb.WorldtaskCompleteCondiReq) (errdata *pb.ErrorData) {
if errdata = this.CompleteCondiCheck(session, req); errdata != nil {
return
}
rsp := &pb.WorldtaskCompleteCondiResp{}
uid := session.GetUserId()
// 当前任务配置
curTaskConf, err := this.module.configure.getWorldtaskById(req.TaskId)
if err != nil || curTaskConf == nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: err.Error(),
}
return
}
if (len(curTaskConf.Completetask) == 1 && curTaskConf.Completetask[0] == 0) ||
len(curTaskConf.Completetask) == 0 {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_WorldtaskNoProcess,
Title: pb.ErrorCode_WorldtaskNoProcess.ToString(),
Message: "无完成条件",
}
return
}
myWorldtask, err := this.module.modelWorldtask.getWorldtask(uid)
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
myWorldtask.Uid = uid
// 校验任务条件
conds, err := this.module.ModuleBuried.CheckCondition(uid, req.CondiId)
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ExternalModule,
Title: pb.ErrorCode_ExternalModule.ToString(),
Message: comm.NewExternalModuleErr("buried", "CheckCondition", uid, req.CondiId).Error(),
}
}
// 设置当前任务的完成条件
for _, tasks := range myWorldtask.CurrentTasks {
if task, ok := tasks.TaskMap[req.TaskId]; ok {
for _, cond := range conds {
for _, exist_cond := range task.Conds {
if cond.Conid == exist_cond.Conid {
continue
}
task.Conds = append(task.Conds, cond)
}
}
break
}
}
// for _, cond := range conds {
// for _, exist_cond := range wt.Tasks {
// if cond.Conid == exist_cond.Conid {
// continue
// }
// wt.Conds = append(wt.Conds, cond)
// }
// }
// myWorldtask.CurrentTaskMap[curTaskConf.Group] = wt
update := map[string]interface{}{
"currentTasks": myWorldtask.CurrentTasks,
}
if err := this.module.modelWorldtask.Change(uid, update); err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError,
Title: pb.ErrorCode_DBError.ToString(),
Message: err.Error(),
}
return
}
this.sendMsg(session, WorldtaskComplete, rsp)
//结束任务
if curTaskConf.DeliverNpc == 0 {
this.module.modelWorldtask.taskFinish(session, req.TaskId, myWorldtask, curTaskConf)
this.module.modelWorldtask.taskFinishPush(session, myWorldtask, curTaskConf)
}
return
}