player_season.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package mapPlayer
  2. import (
  3. actorRemote "f1-game/internal/actor_remote"
  4. "f1-game/internal/code"
  5. "f1-game/internal/data"
  6. nameActor "f1-game/internal/name/actor"
  7. nameLocal "f1-game/internal/name/local"
  8. nameRemote "f1-game/internal/name/remote"
  9. "f1-game/internal/pb"
  10. ao "f1-game/nodes/game/player/asset/origin"
  11. "f1-game/nodes/map/internal/db"
  12. "f1-game/nodes/map/player/season"
  13. cfacade "github.com/cherry-game/cherry/facade"
  14. cproto "github.com/cherry-game/cherry/net/proto"
  15. )
  16. func (p *actorPlayer) initSeason() {
  17. p.Local().Register(nameLocal.MapPlayer_SeasonQuestInfo, p.seasonQuestInfo)
  18. p.Local().Register(nameLocal.MapPlayer_SeasonQuestReward, p.seasonQuestReward)
  19. }
  20. // 获取赛季霸业任务信息
  21. func (p *actorPlayer) seasonQuestInfo(session *cproto.Session, _ *pb.None) {
  22. var (
  23. playerTable = db.GetMapPlayerTable(p.playerID)
  24. rsp = &pb.SeasonQuestInfo{}
  25. )
  26. req := season.Service().GetSeasonQuestLeagueIDMap(playerTable)
  27. errCode := p.CallWait(cfacade.NewPath("", nameActor.Map_Season), nameRemote.MapSeason_QuestInfo, req, rsp)
  28. if code.IsFail(errCode) {
  29. p.ResponseCode(session, code.SeasonQuestInfoError)
  30. return
  31. }
  32. // 标记已领取的任务
  33. for id, quest := range rsp.Quests {
  34. if playerTable.Season.RewardedQuests.Contains(id) {
  35. quest.IsRewarded = true
  36. }
  37. }
  38. p.Response(session, rsp)
  39. }
  40. // 领取赛季霸业任务奖励
  41. func (p *actorPlayer) seasonQuestReward(session *cproto.Session, req *pb.I32) {
  42. if req.Value < 1 {
  43. p.ResponseCode(session, code.IllegalArgument)
  44. return
  45. }
  46. seasonQuestRow, ok := data.SeasonQuest.GetByID(req.Value)
  47. if !ok {
  48. p.ResponseCode(session, code.ConfigNotFound_SeasonQuest)
  49. return
  50. }
  51. var (
  52. questID = req.Value
  53. playerTable = db.GetMapPlayerTable(p.playerID)
  54. )
  55. if playerTable.Season.RewardedQuests.Contains(questID) {
  56. p.ResponseCode(session, code.SeasonQuestRewardRepeat)
  57. return
  58. }
  59. checkReq := &pb.I32I64{
  60. Key: questID,
  61. Value: season.Service().GetSeasonQuestLeagueID(playerTable, questID),
  62. }
  63. errCode := p.CallWait(cfacade.NewPath("", nameActor.Map_Season), nameRemote.MapSeason_QuestCheck, checkReq, nil)
  64. if code.IsFail(errCode) {
  65. p.ResponseCode(session, errCode)
  66. return
  67. }
  68. // 标记任务为已领取
  69. playerTable.Season.RewardedQuests.Add(req.Value)
  70. playerTable.Save2Queue()
  71. // 发放奖励
  72. actorRemote.GamePlayer.AssetAddAsync(playerTable.GameNodeID, p.playerID, seasonQuestRow.Rewards, ao.None)
  73. p.ResponseCode(session, code.OK)
  74. }