| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package mapSeason
- import (
- capp "f1-game/internal/cherry_app"
- "f1-game/internal/code"
- "f1-game/internal/data"
- "f1-game/internal/extend/times"
- nameActor "f1-game/internal/name/actor"
- nameRemote "f1-game/internal/name/remote"
- "f1-game/internal/pb"
- "f1-game/nodes/map/internal/db"
- "f1-game/nodes/map/season/seasonQuest"
- "time"
- ctime "github.com/cherry-game/cherry/extend/time"
- clog "github.com/cherry-game/cherry/logger"
- "github.com/cherry-game/cherry/net/parser/pomelo"
- )
- type (
- actor struct {
- pomelo.ActorBase
- }
- )
- func NewActor() *actor {
- actor := &actor{}
- return actor
- }
- func (p *actor) AliasID() string {
- return nameActor.Map_Season
- }
- func (p *actor) OnInit() {
- p.initSeason()
- seasonQuest.Service().InitEvents(p.Event())
- p.Remote().Register(nameRemote.MapSeason_QuestInfo, p.QuestInfo)
- p.Remote().Register(nameRemote.MapSeason_QuestCheck, p.QuestCheck)
- p.Timer().Add(3*time.Second, p.every3STimer)
- }
- func (p *actor) initSeason() {
- seasonTable := db.GetSeasonTable(capp.NodeID())
- if seasonTable.StartTime > 0 {
- return
- }
- openTimeStr := data.Const.MapSeasonOpenTime
- if openTimeStr == "" {
- clog.Warn("[initSeason] MapSeasonOpenTime is empty")
- return
- }
- openTime, err := times.ParseDateFormat(openTimeStr)
- if err != nil {
- clog.Warnf("[initSeason] parse MapSeasonOpenTime failed. time = %s, err = %v", openTimeStr, err)
- return
- }
- seasonOpenTime := ctime.NewSecond(openTime.Unix())
- // TODO 赛季匹配还没有做,暂时用常量配置赛季开启时间
- seasonTable.StartTime = seasonOpenTime.ToMillisecond()
- seasonTable.SeasonID = 0
- seasonQuest.Service().OnInit(seasonTable)
- seasonTable.SetChangeData()
- seasonTable.Save2Queue()
- clog.Infof("[initSeason] season initialized. nodeID = %s, startTime = %s, seasonID = %d, curQuestID = %d",
- seasonTable.NodeID,
- seasonOpenTime.ToDateTimeFormat(),
- seasonTable.SeasonID,
- seasonTable.SeasonQuest.CurQuestID,
- )
- }
- // every3STimer
- func (p *actor) every3STimer() {
- seasonTable := db.GetSeasonTable(capp.NodeID())
- // 检查下一个赛季任务ID
- seasonQuest.Service().OnCheckNextID(seasonTable)
- // 定时保存
- seasonTable.Save2Queue()
- }
- func (p *actor) QuestInfo(req *pb.I32I64Map) (*pb.SeasonQuestInfo, int32) {
- var (
- questLeagueIDMap = req.Value // 霸业任务和对应的联盟ID
- seasonTable = db.GetSeasonTable(capp.NodeID())
- )
- seasonQuestInfo := seasonTable.SeasonQuest.ToProto(questLeagueIDMap)
- for _, quest := range seasonQuestInfo.Quests {
- quest.TargetProgress = seasonQuest.Service().GetTargetProgress(quest.QuestID)
- // 防止进度超过目标进度
- if quest.Progress > quest.TargetProgress {
- quest.Progress = quest.TargetProgress
- }
- }
- return seasonQuestInfo, code.OK
- }
- func (p *actor) QuestCheck(req *pb.I32I64) int32 {
- var (
- questID = req.Key // 霸业任务ID
- leagueID = req.Value // 联盟ID
- seasonTable = db.GetSeasonTable(capp.NodeID())
- nowMillis = ctime.Now().ToMillisecond()
- )
- if !data.SeasonQuest.ContainID(questID) {
- return code.ConfigNotFound_SeasonQuest
- }
- quest, found := seasonTable.SeasonQuest.Quests.Get(questID)
- if !found {
- return code.IllegalArgument
- }
- if !quest.IsEnded(nowMillis) {
- return code.SeasonQuest_NotEnded
- }
- // 获取目标进度
- targetProgress := seasonQuest.Service().GetTargetProgress(quest.QuestID)
- if quest.GetProgress(leagueID) < targetProgress {
- return code.SeasonQuestNotComplete
- }
- return code.OK
- }
|