锦标赛优化

This commit is contained in:
hahwu 2026-04-16 10:53:21 +08:00
parent 49a551daba
commit a80dc792e4
3 changed files with 48 additions and 0 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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))