diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index a29735d5..1c594833 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -594,6 +594,9 @@ func (p *Player) GetTodayAndYesterdayActivityId(atype int) (int, int) { func (p *Player) ChampionshipZeroUpdate() { todayActivityId, _ := p.GetChampshipActivityId() ChampionshipMod := p.PlayMod.getChampshipMod() + if todayActivityId == ChampionshipMod.AId { + return + } aid := ChampionshipMod.AId var items []*item.Item items = p.GetChampshipReward(aid) diff --git a/src/server/game/activity_mgr.go b/src/server/game/activity_mgr.go index 4e13ff45..9120aafb 100644 --- a/src/server/game/activity_mgr.go +++ b/src/server/game/activity_mgr.go @@ -107,6 +107,41 @@ func (r *ActivityMgr) GetActivityList() []ActivityCfg { return list } +func (r *ActivityMgr) GetActivityListByType(atype int) 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 { + if v.Type == atype { + info := v.Copy() + //循环活动,重新计算活动时间 + if info.Interval > 0 { + info.AId = int(info.Startime) + list = append(list, info) + internal := (now - info.Startime) / info.Interval + for i := int64(0); i <= internal; i++ { + newInfo := info.Copy() + newInfo.Startime += info.Interval + newInfo.Endtime += info.Interval + newInfo.AId = int(newInfo.Startime) //活动id用开始时间表示,方便客户端排序 + list = append(list, newInfo) + } + } else { + list = append(list, info) + } + } + } + for _, v := range list { + if v.Startime <= GoUtil.Now() && v.Endtime > GoUtil.Now() { + return v + } + } + return ActivityCfg{} +} + func (r *ActivityMgr) GetActivityCfg(Id int) ActivityCfg { // 获取活动配置 data := r.getData() diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 7d8acff2..50db70d0 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -10,6 +10,7 @@ import ( faceCfg "server/conf/face" randnameCfg "server/conf/randname" "server/db" + "server/game/mod/activity" "server/game/mod/friend" "server/game/mod/msg" GoUtil "server/game_util" @@ -42,6 +43,7 @@ type ChampshipData struct { PreRobot map[int]*ChampshipRobot // 机器人 备份 ZeroTime int64 Version int + Aid int // 当前活动ID } type ChampshipRank struct { @@ -176,6 +178,14 @@ func (c *ChampshipMgr) ZeroUpdate() (interface{}, error) { log.Debug("ChampshipMgr ZeroUpdate") data := c.getData() data.mu.Lock() + activityCfg := G_GameLogicPtr.ActivityMgr.GetActivityListByType(activity.ACT_TYPE_CHAMPION) + // 如果活动ID没有变化,说明没有新的活动,不需要重置数据 + if activityCfg.AId == data.Aid { + log.Debug("championship zero update not init by aid %d", data.Aid) + return nil, nil + } + log.Debug("championship zero update by aid %d", activityCfg.AId) + data.Aid = activityCfg.AId data.ZeroTime = GoUtil.ZeroTimestamp() // 深拷贝 map,避免多个协程持有同一个 map 引用导致并发读写 oldRank := make(map[int][]*ChampshipRank, len(data.Rank))