From 631944f2bea0434ec6906573f607794052d137f7 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 11 Mar 2026 22:03:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/activity/activity_cfg.go | 36 +++++++++--------------- src/server/game/activity_func.go | 14 ++++++++- src/server/game/charge_func.go | 2 +- src/server/game/gm_handler.go | 4 +-- src/server/game/player_base_mod.go | 2 +- src/server/game/player_data.go | 36 +++++++++++++++++++++--- src/server/game/register_network_func.go | 2 +- src/server/test/activity_test.go | 13 +++++++++ 8 files changed, 77 insertions(+), 32 deletions(-) create mode 100644 src/server/test/activity_test.go diff --git a/src/server/conf/activity/activity_cfg.go b/src/server/conf/activity/activity_cfg.go index 71a50cf5..b1cac0ea 100644 --- a/src/server/conf/activity/activity_cfg.go +++ b/src/server/conf/activity/activity_cfg.go @@ -57,7 +57,6 @@ func GetActivityList() []*gamedata.ActivityData { log.Debug("GetActivityList err:%v", err) return nil } - Now := GoUtil.Now() List := make([]*gamedata.ActivityData, 0, len(data)) for k, v := range data { @@ -65,28 +64,21 @@ func GetActivityList() []*gamedata.ActivityData { EndTimeStr := gamedata.GetStringValue(v, "EndTime") StartTime := GoUtil.ParseTime(StartTimeStr) EndTime := GoUtil.ParseTime(EndTimeStr) - if Now >= StartTime && Now <= EndTime { - Id, err := strconv.Atoi(k) - if err != nil { - log.Debug("GetActivityList parse id err:%v, key:%s", err, k) - continue - } - Type := gamedata.GetIntValue(v, "Type") - Name := gamedata.GetStringValue(v, "Name") - Title := gamedata.GetStringValue(v, "Title") - Level := gamedata.GetIntValue(v, "Level") - ActivityData := &gamedata.ActivityData{ - Id: Id, - Type: Type, - AType: gamedata.GetIntValue(v, "AType"), - Name: Name, - Title: Title, - Level: Level, - StartTime: StartTime, - EndTime: EndTime, - } - List = append(List, ActivityData) + Type := gamedata.GetIntValue(v, "Type") + Name := gamedata.GetStringValue(v, "Name") + Title := gamedata.GetStringValue(v, "Title") + Level := gamedata.GetIntValue(v, "Level") + ActivityData := &gamedata.ActivityData{ + Id: GoUtil.Int(k), + Type: Type, + AType: gamedata.GetIntValue(v, "AType"), + Name: Name, + Title: Title, + Level: Level, + StartTime: StartTime, + EndTime: EndTime, } + List = append(List, ActivityData) } return List } diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index cfce0658..14e8a79f 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -31,7 +31,19 @@ func (p *Player) ActivityLogin() { if OldId == 0 { return } - ItemId := guesscolorCfg.GetActivityItemId(OldId) + var ItemId int + switch actType { + case activity.ACT_TYPE_MINING: + ItemId = miningCfg.GetActivityItemId(OldId) + case activity.ACT_TYPE_GUESS_COLOR: + ItemId = guesscolorCfg.GetActivityItemId(OldId) + case activity.ACT_TYPE_RACE: + ItemId = raceCfg.GetCoin(OldId) + case activity.ACT_TYPE_PASS: + ItemId = passCfg.GetActivityItemId(OldId) + default: + return + } ItemNum := ItemMod.GetItem(ItemId) if ItemNum != 0 { ItemMod.AddItem(ItemId, -ItemNum) diff --git a/src/server/game/charge_func.go b/src/server/game/charge_func.go index 193523ae..c892db7c 100644 --- a/src/server/game/charge_func.go +++ b/src/server/game/charge_func.go @@ -90,7 +90,7 @@ func (p *Player) ActivityFire(ChargeId int) { } } p.PlayMod.save() - p.initActivity() + p.InitActivity() p.BackDataActivity() } diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 990c1aaf..77bf594b 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -101,7 +101,7 @@ func ReqGmCommand_(player *Player, Command string) error { player.PlayMod.getBaseMod().Level = num player.PlayMod.getBaseMod().Exp = 0 player.PushClientRes(player.PlayerBaseMod.BackAsset()) - player.initActivity() + player.InitActivity() player.PlayMod.getGuideTaskMod().Unlock(num) player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV, nil, 1) player.PushClientRes(player.PlayMod.getOrderMod().BackData()) @@ -124,7 +124,7 @@ func ReqGmCommand_(player *Player, Command string) error { ActivityMod.Var = nil ActivityMod.InitData() player.PlayMod.save() - player.initActivity() + player.InitActivity() player.BackDataActivity() case "weekUpdate": VarMod := player.PlayMod.getVarMod() diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index 8f0628f7..b4d4cbbc 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -561,7 +561,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) player.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul()) player.PushClientRes(OrderMod.BackData()) // 重载活动 - player.initActivity() + player.InitActivity() player.BackDataActivity() player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV}) player.TeLog("level_up", map[string]interface{}{ diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 38ab33d5..b8dfac74 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -248,7 +248,7 @@ func (p *Player) InitPlayer(UserName string) error { log.Debug("AddFunc failed:", err) } p.McronSave.Start() - p.initActivity() + p.InitActivity() p.ZeroUpdate(nil) p.NoonUpdate(nil) p.Login() @@ -307,7 +307,7 @@ func (p *Player) InitPlayerByUid(Uid int) error { log.Debug("AddFunc failed:", err) } p.McronSave.Start() - p.initActivity() + p.InitActivity() p.ZeroUpdate(nil) p.NoonUpdate(nil) p.Login() @@ -384,7 +384,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { } p.PlayroomBackData() p.PlayMod.getChampshipMod().ZeroUpdate() - p.initActivity() + p.InitActivity() p.ActivityZeroUpdate() // 每日任务 @@ -1171,11 +1171,15 @@ func (p *Player) TeLog(Type string, Param map[string]interface{}) { } // 初始化活动 -func (p *Player) initActivity() { +func (p *Player) InitActivity() { p.activity = make(map[int]*ActivityInfo) ActivityList := activityCfg.GetActivityList() Level := p.GetPlayerBaseMod().GetLevel() ActivityMod := p.PlayMod.getActivityMod() + now := GoUtil.Now() + var startduration int64 + var minduration int64 + var endduration int64 for _, v := range ActivityList { if v.Level > Level { continue @@ -1184,6 +1188,17 @@ func (p *Player) initActivity() { if Status == 0 { continue } + startduration = v.StartTime - now + endduration = v.EndTime - now + 1 + if startduration > 0 && (minduration == 0 || minduration > startduration) { + minduration = startduration + } + if endduration > 0 && (minduration == 0 || minduration > endduration) { + minduration = endduration + } + if v.StartTime > now || v.EndTime < now { + continue + } p.activity[v.Id] = &ActivityInfo{ StartT: v.StartTime, EndT: v.EndTime, @@ -1193,10 +1208,23 @@ func (p *Player) initActivity() { Title: v.Title, } } + if minduration > 0 { + p.CallEvent(time.Duration(minduration)*time.Second, p.TickActivity, "init_activity") + } p.TeLog("activity_ids", map[string]interface{}{ "info": p.activity, }) p.ActivityLogin() + +} + +func (p *Player) TickActivity() { + p.lock.Lock() + defer p.lock.Unlock() + p.InitActivity() + p.ActivityZeroUpdate() + p.BackDataActivity() + p.SendClientRes() } func (p *Player) BackDataActivity() { diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index d9194431..35304f11 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4646,7 +4646,7 @@ func ReqActivityReward(player *Player, buf []byte) error { "Items": Items, }) player.PlayMod.save() - player.initActivity() + player.InitActivity() player.BackDataActivity() player.PushClientRes(&msg.ResActivityReward{ Code: msg.RES_CODE_SUCCESS, diff --git a/src/server/test/activity_test.go b/src/server/test/activity_test.go new file mode 100644 index 00000000..03dd8307 --- /dev/null +++ b/src/server/test/activity_test.go @@ -0,0 +1,13 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestActivityOpenEnd(t *testing.T) { + p := new(game.Player) + p.InitPlayer("3625212") + p.InitActivity() + p.ActivityLogin() +}