package mapLeague import ( "f1-game/internal/component/redis" "f1-game/internal/data" "f1-game/internal/enum" nameLocal "f1-game/internal/name/local" nameRemote "f1-game/internal/name/remote" "f1-game/internal/pb" "f1-game/nodes/map/internal/db" dbBattleReport "f1-game/nodes/map/internal/db/data/battle_report" cproto "github.com/cherry-game/cherry/net/proto" ) func (p *actorLeague) initReport() { p.Local().Register(nameLocal.MapLeague_ReportList, p.reportList) p.Remote().Register(nameRemote.MapLeague_ReportAdd, p.reportAdd) } // 获取联盟战报列表 func (p *actorLeague) reportList(session *cproto.Session, req *pb.I32Str) { var ( mapLeagueReportTable = db.GetMapLeagueReportTable(p.leagueID) category = enum.ReportCategory(req.Key) // 分类 0:全部 1:开拓 2:交战 groupID = req.Value // 战报组ID rsp = &pb.ReportGroupList{} ) // 根据分类和战报组ID来精确获取战报组列表 reportGroups := dbBattleReport.FilterReportGroups(mapLeagueReportTable.BattleReport.Groups, category, groupID, data.Const.MapBattleReportPage) if len(reportGroups) == 0 { p.Response(session, rsp) return } var ( groupIDList []string // 战报组ID列表 reportIDList []string // 战报ID列表 ) for _, group := range reportGroups { groupIDList = append(groupIDList, group.GroupID) } // 批量获取战报组ID对应的战报ID列表 reportIDMap := redis.Game.GetReportIDListOfGroup(groupIDList...) for _, ids := range reportIDMap { reportIDList = append(reportIDList, ids...) } // 从redis批量获取战报集合 reportMap := redis.Game.GetBattleReports(reportIDList...) for _, group := range reportGroups { groupProto := group.ToProto(reportIDMap, reportMap, true) if groupProto == nil { continue } rsp.List = append(rsp.List, groupProto) } p.Response(session, rsp) } // 增加战报组 func (p *actorLeague) reportAdd(req *pb.ReportGroup) { var ( mapLeagueReportTable = db.GetMapLeagueReportTable(p.leagueID) groupID = req.GroupID // 战报组ID category = enum.ReportCategory(req.Category) // 分类 0:全部 1:开拓 2:交战 ) // 联盟建筑被攻击的战报,需要单独处理加到redis if enum.IsDurabilityBattle(enum.TileBattleType(req.List[0].BattleType)) { redis.Game.AddReports(req.GroupID, req.List...) } // 添加联盟战报记录 dbBattleReport.AddReportGroup(&mapLeagueReportTable.BattleReport.Groups, groupID, category, req.List[0].Time) mapLeagueReportTable.Save2Queue() }