package smithy import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/x/bsonx" ) type modelAtlas struct { modules.MCompModel module *Smithy } func (this *modelAtlas) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = string(comm.TableAtlas) err = this.MCompModel.Init(service, module, comp, options) this.module = module.(*Smithy) // uid 创建索引 this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) return } func (this *modelAtlas) getSmithyAtlasList(uid string) (result *pb.DBAtlas, err error) { result = &pb.DBAtlas{ Id: "", Uid: uid, Atlas: map[string]*pb.ForgeList{}, Collect: map[string]*pb.CollectData{}, Score: 0, Award: 0, } if err = this.Get(uid, result); err != nil { if mongo.ErrNoDocuments == err { result.Id = primitive.NewObjectID().Hex() result.Uid = uid result.Atlas = make(map[string]*pb.ForgeList, 0) result.Collect = make(map[string]*pb.CollectData, 0) result.Award = 1 // 初始1级 this.Add(uid, result) err = nil } return } return } func (this *modelAtlas) modifySmithyAtlasList(uid string, data map[string]interface{}) error { return this.Change(uid, data) } func (this *modelAtlas) CheckActivateEquipAtlas(uid string, Equip []*pb.DB_Equipment, forgeCount int32) bool { var ( list *pb.DBAtlas ) bChange := false update := make(map[string]interface{}, 0) for _, v := range Equip { forgeCount += 1 if equipConf := this.module.configure.GetEquipmentConfigureById(v.CId); equipConf != nil { // 获取装备等级 var ( atlasConf *cfg.GameSmithyAtlasData err error ) id := v.CId lv := equipConf.Color quality := int32(len(v.AdverbEntry)) // 装备id 转图鉴id if conf := this.module.configure.GetEquipmentConfigureById(id); conf != nil { if atlasConf, err = this.module.configure.GetSmithyAtlasConf(conf.AtlasId); err != nil { return false } else { id = conf.AtlasId } } if list == nil { if list, err = this.module.modelAtlas.getSmithyAtlasList(uid); err != nil { return false } } if atlasConf.TypeId == 1 { // 装备收藏图鉴信息 atlasScore := this.module.configure.GetSmithyAtlasScoreConf(lv, quality) if v, ok := list.Atlas[id]; ok { // 找到相同的 if v.Activate { // 已经激活的 if v.Data1.Score < atlasScore { if v.Data2 == nil { v.Data2 = &pb.ForgeData{ ForgeCount: forgeCount, Lv: lv, Quality: quality, Score: atlasScore, Time: configure.Now().Unix(), } } else { if v.Data2.Score < atlasScore { v.Data2.ForgeCount = forgeCount v.Data2.Lv = lv v.Data2.Quality = quality v.Data2.Score = atlasScore v.Data2.Time = configure.Now().Unix() } } } } else { // 没有激活的 if v.Data1.Score < atlasScore { v.Data1.ForgeCount = forgeCount v.Data1.Lv = lv v.Data1.Quality = quality v.Data1.Score = atlasScore v.Data1.Time = configure.Now().Unix() } v.Data2 = nil } } else { data := &pb.ForgeList{ Data1: &pb.ForgeData{ ForgeCount: forgeCount, Lv: lv, Quality: quality, Score: atlasScore, Time: configure.Now().Unix(), }, Data2: nil, Activate: false, } list.Atlas[id] = data } update["atlas"] = list.Atlas bChange = true } } } if bChange { this.module.modelAtlas.modifySmithyAtlasList(uid, update) // 更新分数信息 } return true } // 红点检测 func (this *modelAtlas) checkReddot17102(uid string) bool { var ( list *pb.DBAtlas err error ) if list, err = this.module.modelAtlas.getSmithyAtlasList(uid); err != nil { return false } for _, v := range list.Atlas { if v.Activate == false { return true } else { if v.Data2 != nil { return true } } } listCollect, _ := this.module.modelAtlas.getSmithyAtlasList(uid) if err != nil { return false } for _, v := range listCollect.Collect { if v.Activate == false { return true } } return false }