league_quest.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package mapLeague
  2. import (
  3. "f1-game/internal/code"
  4. "f1-game/internal/enum"
  5. nameRemote "f1-game/internal/name/remote"
  6. "f1-game/internal/pb"
  7. "f1-game/nodes/map/internal/db"
  8. leagueQuest "f1-game/nodes/map/league/quest"
  9. cfacade "github.com/cherry-game/cherry/facade"
  10. )
  11. func (p *actorLeague) initQuest() {
  12. p.Remote().Register(nameRemote.MapLeague_QuestCheck, p.questCheck)
  13. p.Event().Registers(leagueQuest.Service().LeagueEventNames(), p.onLeagueEvent)
  14. p.Event().Registers(leagueQuest.Service().PlayerEventNames(), p.onPlayerEvent)
  15. }
  16. // 检测联盟任务是否已完成
  17. func (p *actorLeague) questCheck(req *pb.I32) int32 {
  18. questID := req.Value
  19. quest, found := p.leagueTable.Quests.GetQuest(questID)
  20. if !found {
  21. return code.QuestNotFound
  22. }
  23. // 判断任务是否完成
  24. if quest.Status == enum.QuestStatus_Running {
  25. return code.QuestNotFinished
  26. }
  27. return code.OK
  28. }
  29. func (p *actorLeague) onLeagueEvent(e cfacade.IEventData) {
  30. leagueID := e.UniqueID()
  31. if leagueID <= 0 {
  32. return
  33. }
  34. // 不是同联盟不执行
  35. if e.UniqueID() != p.leagueID {
  36. return
  37. }
  38. leagueQuest.Service().DoEvent(p.leagueID, p.leagueTable, e)
  39. }
  40. func (p *actorLeague) onPlayerEvent(e cfacade.IEventData) {
  41. playerID := e.UniqueID()
  42. if playerID <= 0 {
  43. return
  44. }
  45. leagueMemberTable, found := db.GetMapLeagueMemberTable(p.leagueID)
  46. if !found {
  47. p.Warn("[onPlayerEvent] league member table not found. leagueID:%d, playerID:%d", p.leagueID, playerID)
  48. return
  49. }
  50. // 不是该联盟成员 跳过
  51. if found := leagueMemberTable.CheckMemberExist(playerID); !found {
  52. return
  53. }
  54. leagueQuest.Service().DoEvent(p.leagueID, p.leagueTable, e)
  55. }