package mapLeague import ( "f1-game/internal/code" "f1-game/internal/enum" nameRemote "f1-game/internal/name/remote" "f1-game/internal/pb" "f1-game/nodes/map/internal/db" leagueQuest "f1-game/nodes/map/league/quest" cfacade "github.com/cherry-game/cherry/facade" ) func (p *actorLeague) initQuest() { p.Remote().Register(nameRemote.MapLeague_QuestCheck, p.questCheck) p.Event().Registers(leagueQuest.Service().LeagueEventNames(), p.onLeagueEvent) p.Event().Registers(leagueQuest.Service().PlayerEventNames(), p.onPlayerEvent) } // 检测联盟任务是否已完成 func (p *actorLeague) questCheck(req *pb.I32) int32 { questID := req.Value quest, found := p.leagueTable.Quests.GetQuest(questID) if !found { return code.QuestNotFound } // 判断任务是否完成 if quest.Status == enum.QuestStatus_Running { return code.QuestNotFinished } return code.OK } func (p *actorLeague) onLeagueEvent(e cfacade.IEventData) { leagueID := e.UniqueID() if leagueID <= 0 { return } // 不是同联盟不执行 if e.UniqueID() != p.leagueID { return } leagueQuest.Service().DoEvent(p.leagueID, p.leagueTable, e) } func (p *actorLeague) onPlayerEvent(e cfacade.IEventData) { playerID := e.UniqueID() if playerID <= 0 { return } leagueMemberTable, found := db.GetMapLeagueMemberTable(p.leagueID) if !found { p.Warn("[onPlayerEvent] league member table not found. leagueID:%d, playerID:%d", p.leagueID, playerID) return } // 不是该联盟成员 跳过 if !leagueMemberTable.CheckMemberExist(playerID) { return } leagueQuest.Service().DoEvent(p.leagueID, p.leagueTable, e) }