service.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package battle
  2. import (
  3. capp "f1-game/internal/cherry_app"
  4. "f1-game/internal/component/redis"
  5. "f1-game/internal/enum"
  6. "f1-game/internal/event"
  7. "f1-game/internal/facade"
  8. nameRedis "f1-game/internal/name/redis"
  9. nameRoute "f1-game/internal/name/route"
  10. "f1-game/internal/pb"
  11. "f1-game/internal/sessions"
  12. mapCall "f1-game/nodes/map/internal/call"
  13. "f1-game/nodes/map/internal/db"
  14. dbBattleReport "f1-game/nodes/map/internal/db/data/battle_report"
  15. cherryNUID "github.com/cherry-game/cherry/extend/nuid"
  16. ctime "github.com/cherry-game/cherry/extend/time"
  17. )
  18. func Service() *service {
  19. return &service{}
  20. }
  21. type service struct {
  22. facade.PlayerServiceBase[*db.MapPlayerTable]
  23. }
  24. // 增加战报组
  25. func (p *service) AddReport(playerID int64, reportGroup *pb.ReportGroup) {
  26. if len(reportGroup.List) < 1 {
  27. return
  28. }
  29. // 战报放入redis
  30. redis.Game.AddReports(reportGroup.GroupID, reportGroup.List...)
  31. // 添加个人战报记录
  32. mapPlayerReportTable := db.GetMapPlayerReportTable(playerID)
  33. dbBattleReport.AddReportGroup(&mapPlayerReportTable.BattleReport.Groups, reportGroup.GroupID, enum.ReportCategory(reportGroup.Category), reportGroup.List[0].Time)
  34. mapPlayerReportTable.Save2Queue()
  35. // 通知客户端
  36. sessions.PushPlayer(playerID, nameRoute.PushMapPlayer_ReportNew, reportGroup)
  37. playerTable := db.GetMapPlayerTable(playerID)
  38. if playerTable != nil && playerTable.LeagueID > 0 && !enum.IsDurabilityBattle(enum.TileBattleType(reportGroup.List[0].BattleType)) {
  39. // 添加联盟战报
  40. mapCall.League.BattleReportAdd(playerTable.LeagueID, reportGroup)
  41. }
  42. // 发送战斗结果事件
  43. capp.PostEvent(event.NewBattleResult(playerID, reportGroup))
  44. }
  45. // 构建侦察战报
  46. // result 0成功 1
  47. func (p *service) BuildScoutReportGroup(attackerID, defenderID, attackerLeagueID int64,
  48. attackerName, defenderName string, point *pb.Point, rewards *pb.AssetList, result int32) *pb.ReportGroup {
  49. // 战报组
  50. reportGroup := &pb.ReportGroup{
  51. GroupID: cherryNUID.Next(),
  52. Category: int32(enum.ReportCategory_Scout),
  53. }
  54. // 战报
  55. report := &pb.Report{
  56. ReportID: cherryNUID.Next(),
  57. Attacker: p.buildBattleReportTeam(attackerID, attackerName, attackerLeagueID),
  58. Defender: p.buildBattleReportTeam(defenderID, defenderName, 0),
  59. Point: point,
  60. ReportResult: &pb.ReportResult{
  61. Rewards: rewards,
  62. },
  63. // TODO 侦察原因暂时放这里
  64. Result: result,
  65. Time: ctime.Now().ToMillisecond(),
  66. }
  67. reportGroup.List = append(reportGroup.List, report)
  68. return reportGroup
  69. }
  70. func (p *service) buildBattleReportTeam(playerID int64, playerName string, leagueID int64) *pb.BattleReportTeam {
  71. var leagueName string
  72. if leagueID > 0 {
  73. playerData := redis.Game.GetPlayerData(playerID, nameRedis.PlayerLeagueFields...)
  74. if playerData != nil {
  75. leagueName = playerData.LeagueName
  76. }
  77. }
  78. return &pb.BattleReportTeam{
  79. PlayerID: playerID,
  80. PlayerName: playerName,
  81. LeagueID: leagueID,
  82. LeagueName: leagueName,
  83. }
  84. }