go_dreamfactory/modules/worldtask/api_completetask.go

99 lines
2.7 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.GroupId <= 0 || 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
wt := myWorldtask.CurrentTask[req.GroupId]
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 _, cond := range conds {
for _, exist_cond := range wt.Conds {
if cond.Conid == exist_cond.Conid {
continue
}
wt.Conds = append(wt.Conds, cond)
}
}
myWorldtask.CurrentTask[req.GroupId] = wt
update := map[string]interface{}{
"currentTask": myWorldtask.CurrentTask,
}
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.GroupId, req.TaskId, myWorldtask, curTaskConf)
this.module.modelWorldtask.taskFinishPush(session, req.GroupId, myWorldtask, curTaskConf)
}
return
}