活动初始化增加定时器

This commit is contained in:
hahwu 2026-03-11 22:03:17 +08:00
parent fac56917a9
commit 631944f2be
8 changed files with 77 additions and 32 deletions

View File

@ -57,7 +57,6 @@ func GetActivityList() []*gamedata.ActivityData {
log.Debug("GetActivityList err:%v", err) log.Debug("GetActivityList err:%v", err)
return nil return nil
} }
Now := GoUtil.Now()
List := make([]*gamedata.ActivityData, 0, len(data)) List := make([]*gamedata.ActivityData, 0, len(data))
for k, v := range data { for k, v := range data {
@ -65,28 +64,21 @@ func GetActivityList() []*gamedata.ActivityData {
EndTimeStr := gamedata.GetStringValue(v, "EndTime") EndTimeStr := gamedata.GetStringValue(v, "EndTime")
StartTime := GoUtil.ParseTime(StartTimeStr) StartTime := GoUtil.ParseTime(StartTimeStr)
EndTime := GoUtil.ParseTime(EndTimeStr) EndTime := GoUtil.ParseTime(EndTimeStr)
if Now >= StartTime && Now <= EndTime { Type := gamedata.GetIntValue(v, "Type")
Id, err := strconv.Atoi(k) Name := gamedata.GetStringValue(v, "Name")
if err != nil { Title := gamedata.GetStringValue(v, "Title")
log.Debug("GetActivityList parse id err:%v, key:%s", err, k) Level := gamedata.GetIntValue(v, "Level")
continue ActivityData := &gamedata.ActivityData{
} Id: GoUtil.Int(k),
Type := gamedata.GetIntValue(v, "Type") Type: Type,
Name := gamedata.GetStringValue(v, "Name") AType: gamedata.GetIntValue(v, "AType"),
Title := gamedata.GetStringValue(v, "Title") Name: Name,
Level := gamedata.GetIntValue(v, "Level") Title: Title,
ActivityData := &gamedata.ActivityData{ Level: Level,
Id: Id, StartTime: StartTime,
Type: Type, EndTime: EndTime,
AType: gamedata.GetIntValue(v, "AType"),
Name: Name,
Title: Title,
Level: Level,
StartTime: StartTime,
EndTime: EndTime,
}
List = append(List, ActivityData)
} }
List = append(List, ActivityData)
} }
return List return List
} }

View File

@ -31,7 +31,19 @@ func (p *Player) ActivityLogin() {
if OldId == 0 { if OldId == 0 {
return 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) ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 { if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum) ItemMod.AddItem(ItemId, -ItemNum)

View File

@ -90,7 +90,7 @@ func (p *Player) ActivityFire(ChargeId int) {
} }
} }
p.PlayMod.save() p.PlayMod.save()
p.initActivity() p.InitActivity()
p.BackDataActivity() p.BackDataActivity()
} }

View File

@ -101,7 +101,7 @@ func ReqGmCommand_(player *Player, Command string) error {
player.PlayMod.getBaseMod().Level = num player.PlayMod.getBaseMod().Level = num
player.PlayMod.getBaseMod().Exp = 0 player.PlayMod.getBaseMod().Exp = 0
player.PushClientRes(player.PlayerBaseMod.BackAsset()) player.PushClientRes(player.PlayerBaseMod.BackAsset())
player.initActivity() player.InitActivity()
player.PlayMod.getGuideTaskMod().Unlock(num) player.PlayMod.getGuideTaskMod().Unlock(num)
player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV, nil, 1) player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV, nil, 1)
player.PushClientRes(player.PlayMod.getOrderMod().BackData()) player.PushClientRes(player.PlayMod.getOrderMod().BackData())
@ -124,7 +124,7 @@ func ReqGmCommand_(player *Player, Command string) error {
ActivityMod.Var = nil ActivityMod.Var = nil
ActivityMod.InitData() ActivityMod.InitData()
player.PlayMod.save() player.PlayMod.save()
player.initActivity() player.InitActivity()
player.BackDataActivity() player.BackDataActivity()
case "weekUpdate": case "weekUpdate":
VarMod := player.PlayMod.getVarMod() VarMod := player.PlayMod.getVarMod()

View File

@ -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.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul())
player.PushClientRes(OrderMod.BackData()) player.PushClientRes(OrderMod.BackData())
// 重载活动 // 重载活动
player.initActivity() player.InitActivity()
player.BackDataActivity() player.BackDataActivity()
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV}) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
player.TeLog("level_up", map[string]interface{}{ player.TeLog("level_up", map[string]interface{}{

View File

@ -248,7 +248,7 @@ func (p *Player) InitPlayer(UserName string) error {
log.Debug("AddFunc failed:", err) log.Debug("AddFunc failed:", err)
} }
p.McronSave.Start() p.McronSave.Start()
p.initActivity() p.InitActivity()
p.ZeroUpdate(nil) p.ZeroUpdate(nil)
p.NoonUpdate(nil) p.NoonUpdate(nil)
p.Login() p.Login()
@ -307,7 +307,7 @@ func (p *Player) InitPlayerByUid(Uid int) error {
log.Debug("AddFunc failed:", err) log.Debug("AddFunc failed:", err)
} }
p.McronSave.Start() p.McronSave.Start()
p.initActivity() p.InitActivity()
p.ZeroUpdate(nil) p.ZeroUpdate(nil)
p.NoonUpdate(nil) p.NoonUpdate(nil)
p.Login() p.Login()
@ -384,7 +384,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
} }
p.PlayroomBackData() p.PlayroomBackData()
p.PlayMod.getChampshipMod().ZeroUpdate() p.PlayMod.getChampshipMod().ZeroUpdate()
p.initActivity() p.InitActivity()
p.ActivityZeroUpdate() 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) p.activity = make(map[int]*ActivityInfo)
ActivityList := activityCfg.GetActivityList() ActivityList := activityCfg.GetActivityList()
Level := p.GetPlayerBaseMod().GetLevel() Level := p.GetPlayerBaseMod().GetLevel()
ActivityMod := p.PlayMod.getActivityMod() ActivityMod := p.PlayMod.getActivityMod()
now := GoUtil.Now()
var startduration int64
var minduration int64
var endduration int64
for _, v := range ActivityList { for _, v := range ActivityList {
if v.Level > Level { if v.Level > Level {
continue continue
@ -1184,6 +1188,17 @@ func (p *Player) initActivity() {
if Status == 0 { if Status == 0 {
continue 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{ p.activity[v.Id] = &ActivityInfo{
StartT: v.StartTime, StartT: v.StartTime,
EndT: v.EndTime, EndT: v.EndTime,
@ -1193,10 +1208,23 @@ func (p *Player) initActivity() {
Title: v.Title, Title: v.Title,
} }
} }
if minduration > 0 {
p.CallEvent(time.Duration(minduration)*time.Second, p.TickActivity, "init_activity")
}
p.TeLog("activity_ids", map[string]interface{}{ p.TeLog("activity_ids", map[string]interface{}{
"info": p.activity, "info": p.activity,
}) })
p.ActivityLogin() 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() { func (p *Player) BackDataActivity() {

View File

@ -4646,7 +4646,7 @@ func ReqActivityReward(player *Player, buf []byte) error {
"Items": Items, "Items": Items,
}) })
player.PlayMod.save() player.PlayMod.save()
player.initActivity() player.InitActivity()
player.BackDataActivity() player.BackDataActivity()
player.PushClientRes(&msg.ResActivityReward{ player.PushClientRes(&msg.ResActivityReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,

View File

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