package library import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/log" "go_dreamfactory/modules" "go_dreamfactory/pb" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/x/bsonx" ) type modelFetterstory struct { modules.MCompModel module *Library service core.IService } func (this *modelFetterstory) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = comm.TableFetterstory err = this.MCompModel.Init(service, module, comp, options) this.module = module.(*Library) this.service = service this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) return } func (this *modelFetterstory) getFetterstory(uid string) *pb.DBFetterstory { ls := &pb.DBFetterstory{ Uid: uid, } if err := this.Get(uid, ls); err != nil { if err == mongo.ErrNoDocuments { ls.Id = primitive.NewObjectID().Hex() if err := this.Add(uid, ls); err != nil { log.Errorf("save fetterstory err:%v", err) return ls } return ls } else { log.Errorf("getFetterstory err:%v", err) return ls } } return ls } // 获取羁绊节点任务信息 func (this *modelFetterstory) getFetterTasks(uid string, fetterId int32) *pb.FetterTasks { ls := this.getFetterstory(uid) return ls.FeeterTask[fetterId] } // 校验前置任务是否完成 // true完成 false未完成 func (this *modelFetterstory) isPreFinished(finishTasks []int32, taskId int32) bool { // maintaskConf, ok := this.module.confComplot.GetDataMap()[taskId] // if !ok { // return false // } // if maintaskConf.SubTask == 0 { // return true // } // if _, ok := utils.Findx(finishTasks, maintaskConf.SubTask); ok { // return true // } return false } // 获取玩家羁绊剧情-主线任务 func (this *modelFetterstory) getMaintasks(uid string, fetterId int32) (list []*pb.FetterTask) { // 调用世界任务接口groupId & taskId if module, err := this.service.GetModule(comm.ModuleWtask); err == nil { if iwt, ok := module.(comm.IWtask); ok { // 获取玩家世界任务 completes := iwt.InquireCompletes(uid) this.module.Debug("获取玩家世界任务", log.Field{Key: "uid", Value: uid}, log.Field{Key: "fetterId", Value: fetterId}, log.Field{Key: "completes", Value: completes}, ) if completes != nil { mainTasks := this.getFetterTasks(uid, fetterId) if mainTasks == nil { return } for _, taskId := range mainTasks.Tasks { // 遍历已完成的世界任务 for _, task := range completes { if taskId == task { list = append(list, &pb.FetterTask{ TaskId: taskId, Status: 1, }) } } } } } } return }