service.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package season
  2. import (
  3. capp "f1-game/internal/cherry_app"
  4. "f1-game/internal/code"
  5. "f1-game/internal/data"
  6. "f1-game/internal/facade"
  7. nameActor "f1-game/internal/name/actor"
  8. nameRemote "f1-game/internal/name/remote"
  9. "f1-game/internal/pb"
  10. "f1-game/nodes/map/internal/db"
  11. ctime "github.com/cherry-game/cherry/extend/time"
  12. cfacade "github.com/cherry-game/cherry/facade"
  13. clog "github.com/cherry-game/cherry/logger"
  14. )
  15. func Service() *service {
  16. return &service{}
  17. }
  18. type service struct {
  19. facade.PlayerServiceBase[*db.MapPlayerTable]
  20. }
  21. // 退出联盟记录已经结算的霸业任务状态
  22. func (p *service) LeagueQuitSeasonQuestRecord(playerID, leagueID int64) {
  23. var (
  24. playerTable = db.GetMapPlayerTable(playerID)
  25. rsp = &pb.SeasonQuestInfo{}
  26. )
  27. req := p.GetSeasonQuestLeagueIDMap(playerTable)
  28. errCode := capp.CallWait(cfacade.NewPath("", nameActor.Map_Season), nameRemote.MapSeason_QuestInfo, req, rsp)
  29. if code.IsFail(errCode) {
  30. clog.Warnf("[leagueQuitSeasonQuestRecord] CallWait failed, leagueID: %d, errCode: %d", leagueID, errCode)
  31. return
  32. }
  33. now := ctime.Now().ToMillisecond()
  34. // 标记任务为已领取
  35. for _, quest := range rsp.Quests {
  36. // 跳过未结算的
  37. if quest.EndTime == 0 || quest.EndTime > now {
  38. continue
  39. }
  40. seasonQuestRow, ok := data.SeasonQuest.GetByID(quest.QuestID)
  41. if !ok {
  42. continue
  43. }
  44. if !seasonQuestRow.QuestType.IsLeague() {
  45. continue
  46. }
  47. if playerTable.Season.LeagueQuestMap.Contains(quest.QuestID) {
  48. continue
  49. }
  50. // 只处理新的已结算的霸业任务
  51. playerTable.Season.LeagueQuestMap.Put(quest.QuestID, leagueID)
  52. playerTable.SetChangeData()
  53. }
  54. if playerTable.IsChangeData() {
  55. playerTable.Save2Queue()
  56. }
  57. clog.Infof("[leagueQuitSeasonQuestRecord] success. playerID: %d, leagueID: %d, leagueQuestMapSize: %d",
  58. playerID, leagueID, playerTable.Season.LeagueQuestMap.Size())
  59. }
  60. func (*service) GetSeasonQuestLeagueID(playerTable *db.MapPlayerTable, questID int32) int64 {
  61. // 优先取记录中的联盟ID,退盟的时候记录之前完成的状态
  62. leagueID := playerTable.Season.LeagueQuestMap.GetValue(questID)
  63. if leagueID == 0 {
  64. leagueID = playerTable.LeagueID
  65. }
  66. return leagueID
  67. }
  68. // 获取赛季霸业任务结算状态
  69. func (*service) GetSeasonQuestLeagueIDMap(playerTable *db.MapPlayerTable) *pb.I32I64Map {
  70. rsp := &pb.I32I64Map{
  71. Value: map[int32]int64{},
  72. }
  73. for _, quest := range data.SeasonQuest.List() {
  74. if !quest.QuestType.IsLeague() {
  75. continue
  76. }
  77. // 优先取记录中的联盟ID,退盟的时候记录之前完成的状态
  78. leagueID := playerTable.Season.LeagueQuestMap.GetValue(quest.ID)
  79. if leagueID == 0 {
  80. leagueID = playerTable.LeagueID
  81. }
  82. rsp.Value[quest.ID] = leagueID
  83. }
  84. return rsp
  85. }