From c624e7f0f46ed633a911d36e4bf724ae944850e7 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:41:24 +0800 Subject: [PATCH] 1 --- src/server/game/activity_func.go | 52 ++++++++++++++++++++-- src/server/game/activity_mgr.go | 14 ++++++ src/server/game/mod/champship/Champship.go | 17 ++++++- src/server/game/player_back.go | 5 ++- src/server/game/player_data.go | 9 +--- src/server/game/register_network_func.go | 5 +-- 6 files changed, 85 insertions(+), 17 deletions(-) diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 88fa1381..3be97301 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -4,7 +4,6 @@ import ( "fmt" activityCfg "server/conf/activity" catnipCfg "server/conf/catnip" - champshipCfg "server/conf/champship" dailyTaskCfg "server/conf/daily_task" guesscolorCfg "server/conf/guess_color" languageCfg "server/conf/language" @@ -523,9 +522,8 @@ func (p *Player) GetChampshipActivityId() (int, int) { now := GoUtil.Now() yesterday := GoUtil.ZeroTimestamp() - 1 level := p.GetBaseMod().GetLevel() - champshipActivityIds := champshipCfg.GetChampshipActivityId() for _, v := range activiyCfgList { - if !GoUtil.InArray(v.Id, champshipActivityIds) { + if v.Type != activity.ACT_TYPE_CHAMPION { continue } if v.Level > level { @@ -541,6 +539,54 @@ func (p *Player) GetChampshipActivityId() (int, int) { return todayActivityId, yesterdayActivityId } +func (p *Player) ChampionshipZeroUpdate() { + todayActivityId, _ := p.GetChampshipActivityId() + ChampionshipMod := p.PlayMod.getChampshipMod() + aid := ChampionshipMod.AId + cfg := G_GameLogicPtr.ActivityMgr.GetChampshipCfg(aid) + if cfg == nil { + return + } + items := p.GetChampshipReward(aid) + if len(items) > 0 { + p.SendActivityMail2(items, "backend_championship_mail_title", "backend_championship_mail_content") + } + p.PlayMod.getChampshipMod().ZeroUpdate(todayActivityId) +} + +func (p *Player) GetChampshipReward(id int) []*item.Item { + ChampionshipMod := p.PlayMod.getChampshipMod() + if id == 0 { // 兼容旧数据,之前没有活动id的只要发放一次奖励 + DecorateMod := p.PlayMod.getDecorateMod() + orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + return ChampionshipMod.GetReward(0, orderFactor) + } + if ChampionshipMod == nil { + return nil + } + cfg := G_GameLogicPtr.ActivityMgr.GetChampshipCfg(id) + if cfg == nil { + return nil + } + DecorateMod := p.PlayMod.getDecorateMod() + orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + var maxRewardId int + var items []*item.Item + for _, v := range cfg.GetJackpotList() { + if ChampionshipMod.GetScore() >= int(v.Score) && int(v.Id) > ChampionshipMod.GetRewardId() { + maxRewardId = int(v.Id) + items = append(items, item.MsgToItem(v.Items)...) + if v.StarReward > 0 { + itemNum := GoUtil.FormatStarItemNum(int(v.StarReward), orderFactor) + starItem := item.NewItem(item.ITEM_STAR_ID, itemNum) + items = append(items, starItem) + } + } + } + ChampionshipMod.SetRewardId(maxRewardId) + return items +} + func (p *Player) GetDailyTaskActivityId() int { var activityId int activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList() diff --git a/src/server/game/activity_mgr.go b/src/server/game/activity_mgr.go index 4306a490..2c14ebf5 100644 --- a/src/server/game/activity_mgr.go +++ b/src/server/game/activity_mgr.go @@ -184,3 +184,17 @@ func (r *ActivityMgr) GetCatReturnGiftCfg(id int) *protoMsg.CatReturnGiftCfg { } return nil } + +func (r *ActivityMgr) GetChampshipCfg(id int) *protoMsg.ChampionshipCfg { + data := r.getData() + data.mu.Lock() + defer data.mu.Unlock() + for _, v := range data.List { + if v.Type == activity.ACT_TYPE_CHAMPION && v.Id == id { + if cfg, ok := v.cfg.(*protoMsg.ChampionshipCfg); ok { + return cfg + } + } + } + return nil +} diff --git a/src/server/game/mod/champship/Champship.go b/src/server/game/mod/champship/Champship.go index 9f2be749..4f961b76 100644 --- a/src/server/game/mod/champship/Champship.go +++ b/src/server/game/mod/champship/Champship.go @@ -15,6 +15,8 @@ type ChampshipMod struct { RankReward bool PreMax int // 昨日最高档 Max int // 历史最高档 + AId int // 活动id + LastAId int // 上次活动id } func (c *ChampshipMod) InitData() {} @@ -24,11 +26,13 @@ func (c *ChampshipMod) isActive() bool { return GoUtil.Now()-GoUtil.ZeroTimestamp() >= 300 } -func (c *ChampshipMod) ZeroUpdate() { +func (c *ChampshipMod) ZeroUpdate(aid int) { c.PreMax = c.Reward c.Score = 0 c.Reward = 0 c.RankReward = false + c.LastAId = c.AId + c.AId = aid } func (c *ChampshipMod) GetScore() int { @@ -63,6 +67,13 @@ func (c *ChampshipMod) GetReward(activityId, orderFactor int) []*item.Item { return items } +func (c *ChampshipMod) GetRewardId() int { + return c.Reward +} + +func (c *ChampshipMod) SetRewardId(rewardId int) { + c.Reward = rewardId +} func (c *ChampshipMod) BackData(myRank, myPreRank, todayActivityId, yesterdayActivityId int) *msg.ResChampship { rankReward := 0 if c.RankReward { @@ -94,3 +105,7 @@ func (c *ChampshipMod) GetH() int { func (c *ChampshipMod) GetN() int { return c.Max } + +func (c *ChampshipMod) GetAId() int { + return c.AId +} diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index bcabde79..84a000d9 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -310,7 +310,10 @@ func (p *Player) BackChampship() { ChampshipMod := p.PlayMod.getChampshipMod() rank, preRank := p.GetChampshipRank() todayActivityId, yesterdayActivityId := p.GetChampshipActivityId() - p.PushClientRes(ChampshipMod.BackData(rank, preRank, todayActivityId, yesterdayActivityId)) + res := ChampshipMod.BackData(rank, preRank, todayActivityId, yesterdayActivityId) + cfg := G_GameLogicPtr.ActivityMgr.GetChampshipCfg(todayActivityId) + res.Cfg = cfg + p.PushClientRes(res) } // 获取冠军赛排名 redis缓存 diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 7004122a..7a5ace1b 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -414,14 +414,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { PlayroomMod.ResetWeeklyDiscount() } p.PlayroomBackData() - todayActivityId, _ := p.GetChampshipActivityId() - DecorateMod := p.PlayMod.getDecorateMod() - orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) - items := p.PlayMod.getChampshipMod().GetReward(todayActivityId, orderFactor) - if len(items) > 0 { - p.SendActivityMail2(items, "backend_championship_mail_title", "backend_championship_mail_content") - } - p.PlayMod.getChampshipMod().ZeroUpdate() + p.ChampionshipZeroUpdate() p.BackChampship() p.InitActivity() p.ActivityZeroUpdate() diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index fb684316..f896bae6 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -2529,11 +2529,8 @@ func ReqChampship(player *Player, req *msg.ReqChampship) error { } func ReqChampshipReward(player *Player, req *msg.ReqChampshipReward) error { ChampshipMod := player.PlayMod.getChampshipMod() - todayActivityId, _ := player.GetChampshipActivityId() - DecorateMod := player.PlayMod.getDecorateMod() - orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) rewardId := ChampshipMod.Reward - itemList := ChampshipMod.GetReward(todayActivityId, orderFactor) + itemList := player.GetChampshipReward(ChampshipMod.GetAId()) err := player.HandleItem(itemList, msg.ITEM_POP_LABEL_ChampshipReward.String()) if err != nil { player.SendErrClienRes(&msg.ResChampshipReward{