diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index aba0ff84..4d96c9d4 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -531,7 +531,7 @@ func (p *Player) CatnipBackData() { func (p *Player) GetChampshipActivityId() (int, int) { var todayActivityId int var yesterdayActivityId int - activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList() + activiyCfgList := G_GameLogicPtr.ActivityMgr.GetChampshipCfgList() now := GoUtil.Now() level := p.GetBaseMod().GetLevel() type sortData struct { diff --git a/src/server/game/activity_mgr.go b/src/server/game/activity_mgr.go index e21c42ac..d3f3d728 100644 --- a/src/server/game/activity_mgr.go +++ b/src/server/game/activity_mgr.go @@ -70,23 +70,55 @@ func (r *ActivityMgr) GetActivityList() []ActivityCfg { list := make([]ActivityCfg, 0, len(data.List)) now := GoUtil.Now() for _, v := range data.List { + info := *v //循环活动,重新计算活动时间 - if v.Interval > 0 { - if now > v.Endtime { + if info.Interval > 0 { + if now >= info.Endtime { //活动已结束,计算下一次活动时间 - interval := (now - v.Startime) / v.Interval - v.Startime += interval * v.Interval - v.Endtime += interval * v.Interval - if now > v.Endtime { - v.Startime += v.Interval - v.Endtime += v.Interval + interval := (now - info.Startime) / info.Interval + info.Startime += interval * info.Interval + info.Endtime += interval * info.Interval + if now > info.Endtime { + info.Startime += info.Interval + info.Endtime += info.Interval } } - v.AId = int(v.Startime) //活动id用开始时间表示,方便客户端排序 + v.AId = int(info.Startime) //活动id用开始时间表示,方便客户端排序 } else { v.AId = v.Id } - list = append(list, *v) + list = append(list, info) + } + return list +} + +func (r *ActivityMgr) GetChampshipCfgList() []ActivityCfg { + // 获取活动列表 + data := r.getData() + data.mu.Lock() + defer data.mu.Unlock() + list := make([]ActivityCfg, 0, len(data.List)) + now := GoUtil.Now() + for _, v := range data.List { + info := *v + if info.Type != activity.ACT_TYPE_CHAMPION { + continue + } + //循环活动,重新计算活动时间 + if info.Interval > 0 { + v.AId = int(info.Startime) + list = append(list, info) + internal := (now - info.Startime) / info.Interval + for i := int64(0); i <= internal; i++ { + v.Startime += info.Interval + v.Endtime += info.Interval + v.AId = int(info.Startime) //活动id用开始时间表示,方便客户端排序 + list = append(list, info) + } + } else { + info.AId = info.Id + list = append(list, info) + } } return list }