league_report.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package mapLeague
  2. import (
  3. "f1-game/internal/component/redis"
  4. "f1-game/internal/data"
  5. "f1-game/internal/enum"
  6. nameLocal "f1-game/internal/name/local"
  7. nameRemote "f1-game/internal/name/remote"
  8. "f1-game/internal/pb"
  9. "f1-game/nodes/map/internal/db"
  10. dbBattleReport "f1-game/nodes/map/internal/db/data/battle_report"
  11. cproto "github.com/cherry-game/cherry/net/proto"
  12. )
  13. func (p *actorLeague) initReport() {
  14. p.Local().Register(nameLocal.MapLeague_ReportList, p.reportList)
  15. p.Remote().Register(nameRemote.MapLeague_ReportAdd, p.reportAdd)
  16. }
  17. // 获取联盟战报列表
  18. func (p *actorLeague) reportList(session *cproto.Session, req *pb.I32Str) {
  19. var (
  20. mapLeagueReportTable = db.GetMapLeagueReportTable(p.leagueID)
  21. category = enum.ReportCategory(req.Key) // 分类 0:全部 1:开拓 2:交战
  22. groupID = req.Value // 战报组ID
  23. rsp = &pb.ReportGroupList{}
  24. )
  25. // 根据分类和战报组ID来精确获取战报组列表
  26. reportGroups := dbBattleReport.FilterReportGroups(mapLeagueReportTable.BattleReport.Groups, category, groupID, data.Const.MapBattleReportPage)
  27. if len(reportGroups) == 0 {
  28. p.Response(session, rsp)
  29. return
  30. }
  31. var (
  32. groupIDList []string // 战报组ID列表
  33. reportIDList []string // 战报ID列表
  34. )
  35. for _, group := range reportGroups {
  36. groupIDList = append(groupIDList, group.GroupID)
  37. }
  38. // 批量获取战报组ID对应的战报ID列表
  39. reportIDMap := redis.Game.GetReportIDListOfGroup(groupIDList...)
  40. for _, ids := range reportIDMap {
  41. reportIDList = append(reportIDList, ids...)
  42. }
  43. // 从redis批量获取战报集合
  44. reportMap := redis.Game.GetBattleReports(reportIDList...)
  45. for _, group := range reportGroups {
  46. groupProto := group.ToProto(reportIDMap, reportMap, true)
  47. if groupProto == nil {
  48. continue
  49. }
  50. rsp.List = append(rsp.List, groupProto)
  51. }
  52. p.Response(session, rsp)
  53. }
  54. // 增加战报组
  55. func (p *actorLeague) reportAdd(req *pb.ReportGroup) {
  56. var (
  57. mapLeagueReportTable = db.GetMapLeagueReportTable(p.leagueID)
  58. groupID = req.GroupID // 战报组ID
  59. category = enum.ReportCategory(req.Category) // 分类 0:全部 1:开拓 2:交战
  60. )
  61. // 联盟建筑被攻击的战报,需要单独处理加到redis
  62. if enum.IsDurabilityBattle(enum.TileBattleType(req.List[0].BattleType)) {
  63. redis.Game.AddReports(req.GroupID, req.List...)
  64. }
  65. // 添加联盟战报记录
  66. dbBattleReport.AddReportGroup(&mapLeagueReportTable.BattleReport.Groups, groupID, category, req.List[0].Time)
  67. mapLeagueReportTable.Save2Queue()
  68. }