diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 4d96c9d4..aba0ff84 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.GetChampshipCfgList() + activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList() 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 d3f3d728..4e13ff45 100644 --- a/src/server/game/activity_mgr.go +++ b/src/server/game/activity_mgr.go @@ -44,6 +44,23 @@ func (ac *ActivityCfg) String() string { ac.Id, ac.Type, ac.Startime, ac.Endtime, ac.Level, ac.Title, ac.MailTitle, ac.MailContent, ac.cfg, ac.Extra) } +func (ac *ActivityCfg) Copy() ActivityCfg { + return ActivityCfg{ + Id: ac.Id, + AId: ac.AId, + Type: ac.Type, + Startime: ac.Startime, + Endtime: ac.Endtime, + Level: ac.Level, + Title: ac.Title, + MailTitle: ac.MailTitle, + MailContent: ac.MailContent, + cfg: ac.cfg, + Interval: ac.Interval, + Extra: ac.Extra, + } +} + const () func (r *ActivityMgr) Init() { @@ -70,53 +87,20 @@ func (r *ActivityMgr) GetActivityList() []ActivityCfg { list := make([]ActivityCfg, 0, len(data.List)) now := GoUtil.Now() for _, v := range data.List { - info := *v + info := v.Copy() //循环活动,重新计算活动时间 if info.Interval > 0 { - if now >= info.Endtime { - //活动已结束,计算下一次活动时间 - 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(info.Startime) //活动id用开始时间表示,方便客户端排序 - } else { - v.AId = v.Id - } - 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) + info.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) + newInfo := info.Copy() + newInfo.Startime += info.Interval + newInfo.Endtime += info.Interval + newInfo.AId = int(newInfo.Startime) //活动id用开始时间表示,方便客户端排序 + list = append(list, newInfo) } } else { - info.AId = info.Id list = append(list, info) } }