package mapPlayer import ( actorRemote "f1-game/internal/actor_remote" "f1-game/internal/code" "f1-game/internal/data" nameActor "f1-game/internal/name/actor" nameLocal "f1-game/internal/name/local" nameRemote "f1-game/internal/name/remote" "f1-game/internal/pb" ao "f1-game/nodes/game/player/asset/origin" "f1-game/nodes/map/internal/db" "f1-game/nodes/map/player/season" cfacade "github.com/cherry-game/cherry/facade" cproto "github.com/cherry-game/cherry/net/proto" ) func (p *actorPlayer) initSeason() { p.Local().Register(nameLocal.MapPlayer_SeasonQuestInfo, p.seasonQuestInfo) p.Local().Register(nameLocal.MapPlayer_SeasonQuestReward, p.seasonQuestReward) } // 获取赛季霸业任务信息 func (p *actorPlayer) seasonQuestInfo(session *cproto.Session, _ *pb.None) { var ( playerTable = db.GetMapPlayerTable(p.playerID) rsp = &pb.SeasonQuestInfo{} ) req := season.Service().GetSeasonQuestLeagueIDMap(playerTable) errCode := p.CallWait(cfacade.NewPath("", nameActor.Map_Season), nameRemote.MapSeason_QuestInfo, req, rsp) if code.IsFail(errCode) { p.ResponseCode(session, code.SeasonQuestInfoError) return } // 标记已领取的任务 for id, quest := range rsp.Quests { if playerTable.Season.RewardedQuests.Contains(id) { quest.IsRewarded = true } } p.Response(session, rsp) } // 领取赛季霸业任务奖励 func (p *actorPlayer) seasonQuestReward(session *cproto.Session, req *pb.I32) { if req.Value < 1 { p.ResponseCode(session, code.IllegalArgument) return } seasonQuestRow, ok := data.SeasonQuest.GetByID(req.Value) if !ok { p.ResponseCode(session, code.ConfigNotFound_SeasonQuest) return } var ( questID = req.Value playerTable = db.GetMapPlayerTable(p.playerID) ) if playerTable.Season.RewardedQuests.Contains(questID) { p.ResponseCode(session, code.SeasonQuestRewardRepeat) return } checkReq := &pb.I32I64{ Key: questID, Value: season.Service().GetSeasonQuestLeagueID(playerTable, questID), } errCode := p.CallWait(cfacade.NewPath("", nameActor.Map_Season), nameRemote.MapSeason_QuestCheck, checkReq, nil) if code.IsFail(errCode) { p.ResponseCode(session, errCode) return } // 标记任务为已领取 playerTable.Season.RewardedQuests.Add(req.Value) playerTable.Save2Queue() // 发放奖励 actorRemote.GamePlayer.AssetAddAsync(playerTable.GameNodeID, p.playerID, seasonQuestRow.Rewards, ao.None) p.ResponseCode(session, code.OK) }