This commit is contained in:
wh_zcy 2023-06-09 21:55:06 +08:00
parent ff492fe145
commit 73b1ac3cb6
3 changed files with 143 additions and 54 deletions

View File

@ -20,7 +20,9 @@ func (a *apiComp) Tasklist(session comm.IUserSession, req *pb.SmithyTasklistReq)
dt, err := a.module.modelTask.getTaskRecord(session.GetUserId()) dt, err := a.module.modelTask.getTaskRecord(session.GetUserId())
if err != nil { if err != nil {
if err == mongo.ErrNoDocuments { if err == mongo.ErrNoDocuments {
//遍历配置列表
resp.Tasks = []*pb.TujianTask{} resp.Tasks = []*pb.TujianTask{}
} else { } else {
errdata = &pb.ErrorData{ errdata = &pb.ErrorData{
Code: pb.ErrorCode_DBError, Code: pb.ErrorCode_DBError,
@ -30,31 +32,8 @@ func (a *apiComp) Tasklist(session comm.IUserSession, req *pb.SmithyTasklistReq)
return return
} }
} else { } else {
for _, t := range dt.Tasks {
conf, err := a.module.configure.GetSmithyTask(t.TaskId)
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ConfigNoFound,
Title: pb.ErrorCode_ConfigNoFound.ToString(),
Message: err.Error(),
}
return
}
conds, err := a.module.ModuleBuried.CheckCondition(session.GetUserId(), conf.TypeId)
if err != nil {
errdata = &pb.ErrorData{
Code: pb.ErrorCode_ExternalModule,
Title: pb.ErrorCode_ExternalModule.ToString(),
Message: err.Error(),
}
return
}
if len(conds) > 0 {
t.Cond = conds[0]
}
}
resp.Tasks = dt.Tasks resp.Tasks = dt.Tasks
} }
session.SendMsg(string(a.module.GetType()), "tasklist", resp) session.SendMsg(string(a.module.GetType()), "tasklist", resp)

View File

@ -303,6 +303,20 @@ func (this *configureComp) GetSmithyTask(taskId int32) (data *cfg.GameSmithyTask
return return
} }
func (this *configureComp) GetSmithyTasks() (data []*cfg.GameSmithyTaskData, err error) {
var (
v interface{}
)
if v, err = this.GetConfigure(game_smithytask); err == nil {
if configure, ok := v.(*cfg.GameSmithyTask); ok {
if data = configure.GetDataList(); data != nil {
return
}
}
}
return
}
func (this *configureComp) GetSmithyMake(cid int32) (data *cfg.GameSmithyMakeData, err error) { func (this *configureComp) GetSmithyMake(cid int32) (data *cfg.GameSmithyMakeData, err error) {
var ( var (
v interface{} v interface{}

View File

@ -3,6 +3,8 @@ package smithy
import ( import (
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/event"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
@ -22,66 +24,160 @@ func (this *modelTask) Init(service core.IService, module core.IModule, comp cor
this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{
Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}},
}) })
event.Register(comm.EventBuriedComplete, this.TCondFinishNotify)
return return
} }
func (this *modelTask) getTaskRecord(uid string) (*pb.DBTujianTask, error) { func (this *modelTask) getTaskRecord(uid string) (*pb.DBTujianTask, error) {
tt := &pb.DBTujianTask{} tt := &pb.DBTujianTask{Uid: uid}
if err := this.Get(uid, tt); err != nil { if err := this.Get(uid, tt); err != nil {
return tt, err return tt, err
} }
return tt, nil return tt, nil
} }
func (this *modelTask) updateTaskRecord(uid string, taskId int32) error { func (this *modelTask) TCondFinishNotify(uid string, conds []*pb.ConIProgress) {
if !this.checkTaskStatus(uid, taskId) { this.module.Debug("铁匠铺任务通知", log.Field{Key: "uid", Value: uid}, log.Field{Key: "conds", Value: conds})
return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished) confList, err := this.module.configure.GetSmithyTasks()
if err != nil {
this.module.Error(err.Error())
return
} }
condMap := make(map[int32]*pb.ConIProgress)
for _, conf := range confList {
for _, cond := range conds {
if cond.Conid == conf.TypeId {
condMap[conf.Key] = cond
}
}
}
update := make(map[string]interface{})
dt, err := this.getTaskRecord(uid) dt, err := this.getTaskRecord(uid)
if err != nil { if err != nil {
if err == mongo.ErrNoDocuments { if err == mongo.ErrNoDocuments {
tj := &pb.DBTujianTask{Uid: uid} for k, v := range condMap {
tj.Tasks = append(tj.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2}) tt := &pb.TujianTask{
return this.Add(uid, tj) TaskId: k,
Cond: v,
}
if v.State == pb.BuriedItemFinishState_buried_finish {
tt.Received = 1
}
dt.Tasks = append(dt.Tasks, tt)
if err := this.Add(uid, dt); err != nil {
this.module.Error(err.Error())
return
}
return
}
} else {
this.module.Error(err.Error())
return
}
}
if dt.Tasks == nil {
for k, v := range condMap {
tt := &pb.TujianTask{
TaskId: k,
Cond: v,
}
if v.State == pb.BuriedItemFinishState_buried_finish {
tt.Received = 1
}
dt.Tasks = append(dt.Tasks, tt)
update["tasks"] = dt.Tasks
if err := this.Change(uid, update); err != nil {
this.module.Error(err.Error())
return
}
return
}
}
for _, t := range dt.Tasks {
for k, v := range condMap {
// update
if t.TaskId == k {
t.Cond = v
} else {
//add
dt.Tasks = append(dt.Tasks, &pb.TujianTask{
TaskId: k,
Cond: v,
})
}
}
}
update["tasks"] = dt.Tasks
if len(update) > 0 {
if err := this.Change(uid, update); err != nil {
this.module.Error(err.Error())
return
}
}
}
func (this *modelTask) updateTaskRecord(uid string, taskId int32) error {
// if !this.checkTaskStatus(uid, taskId) {
// return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished)
// }
dt, err := this.getTaskRecord(uid)
if err != nil {
if err == mongo.ErrNoDocuments {
// tj := &pb.DBTujianTask{Uid: uid}
// tj.Tasks = append(tj.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2})
// return this.Add(uid, tj)
return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished)
} }
return err return err
} }
taskMap := make(map[int32]int32) // taskMap := make(map[int32]int32)
update := make(map[string]interface{}) update := make(map[string]interface{})
if dt.Uid != "" { if dt.Uid != "" {
for _, v := range dt.Tasks { for _, v := range dt.Tasks {
taskMap[v.TaskId] = v.Received if v.TaskId == taskId {
if v.Cond != nil && v.Cond.State == pb.BuriedItemFinishState_buried_finish {
v.Received = 2
} }
} else {
return comm.NewCustomError(pb.ErrorCode_SmithyTaskNoFinished)
}
// taskMap[v.TaskId] = v.Received
// }
} }
if t, ok := taskMap[taskId]; ok { // if t, ok := taskMap[taskId]; ok {
if t == 2 { // if t == 2 {
return comm.NewCustomError(pb.ErrorCode_SmithyTaskReceived) // return comm.NewCustomError(pb.ErrorCode_SmithyTaskReceived)
} else { // } else {
update["received"] = 2 // update["received"] = 2
} // }
} else { // } else {
dt.Tasks = append(dt.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2}) // dt.Tasks = append(dt.Tasks, &pb.TujianTask{TaskId: taskId, Received: 2})
update["tasks"] = dt.Tasks update["tasks"] = dt.Tasks
} }
if len(update) > 0 {
if err := this.Change(uid, update); err != nil { if err := this.Change(uid, update); err != nil {
return err return err
} }
}
return nil return nil
} }
// 检查任务状态 // 检查任务状态
func (this *modelTask) checkTaskStatus(uid string, taskId int32) bool { // func (this *modelTask) checkTaskStatus(uid string, taskId int32) bool {
conf, _ := this.module.configure.GetSmithyTask(taskId) // conf, _ := this.module.configure.GetSmithyTask(taskId)
if conf == nil { // if conf == nil {
return false // return false
} // }
// if ec := this.module.ModuleRtask.CheckCondi(uid, conf.TypeId); ec != nil { // // if ec := this.module.ModuleRtask.CheckCondi(uid, conf.TypeId); ec != nil {
// return false // // return false
// } // // }
return true // return true
} // }