Merge branch 'develop' into sdk

This commit is contained in:
hahwu 2026-04-14 17:15:38 +08:00
commit 27c48071da
6 changed files with 101 additions and 24 deletions

View File

@ -562,6 +562,40 @@ func (p *Player) GetChampshipActivityId() (int, int) {
return todayActivityId, yesterdayActivityId return todayActivityId, yesterdayActivityId
} }
func (p *Player) GetTodayAndYesterdayActivityId(atype int) (int, int) {
var todayActivityId int
var yesterdayActivityId int
activiyCfgList := G_GameLogicPtr.ActivityMgr.GetActivityList()
now := GoUtil.Now()
level := p.GetBaseMod().GetLevel()
type sortData struct {
Id int
EndTime int64
}
var sortList []sortData
for _, v := range activiyCfgList {
if v.Type != atype {
continue
}
if v.Level > level {
continue
}
if v.Startime <= now && v.Endtime >= now {
todayActivityId = v.Id
}
if v.Endtime < now {
sortList = append(sortList, sortData{Id: v.Id, EndTime: v.Endtime})
}
}
if len(sortList) > 0 {
sort.Slice(sortList, func(i, j int) bool {
return sortList[i].EndTime > sortList[j].EndTime
})
yesterdayActivityId = sortList[0].Id
}
return todayActivityId, yesterdayActivityId
}
func (p *Player) ChampionshipZeroUpdate() { func (p *Player) ChampionshipZeroUpdate() {
todayActivityId, _ := p.GetChampshipActivityId() todayActivityId, _ := p.GetChampshipActivityId()
ChampionshipMod := p.PlayMod.getChampshipMod() ChampionshipMod := p.PlayMod.getChampshipMod()
@ -662,17 +696,26 @@ func (p *Player) CatReturnGiftBackData() {
if activityInfo == nil { if activityInfo == nil {
return return
} }
_, YestdayAid := p.GetTodayAndYesterdayActivityId(activity.ACT_TYPE_CAT_RETURN_GIFT)
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(activityInfo.Id) cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(activityInfo.Id)
if cfg == nil { if cfg == nil {
return return
} }
CatReturnGiftMod := p.GetCatReturnGiftMod() CatReturnGiftMod := p.GetCatReturnGiftMod()
score := CatReturnGiftMod.GetScore()
reward := CatReturnGiftMod.GetReward()
// 清理期展示旧活动配置
if GoUtil.Now()-activityInfo.StartT < int64(cfg.ClearTime) {
cfg = G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(YestdayAid)
score = CatReturnGiftMod.GetLastScore()
reward = CatReturnGiftMod.GetLastReward()
}
res := &msg.ResCatReturnGift{ res := &msg.ResCatReturnGift{
StartTime: activityInfo.StartT, StartTime: activityInfo.StartT,
EndTime: activityInfo.EndT, EndTime: activityInfo.EndT,
Cfg: cfg, Cfg: cfg,
Score: int32(CatReturnGiftMod.GetScore()), Score: int32(score),
Reward: int32(CatReturnGiftMod.GetReward()), Reward: int32(reward),
} }
p.PushClientRes(res) p.PushClientRes(res)
} }

View File

@ -44,6 +44,23 @@ func (ac *ActivityCfg) String() string {
ac.Id, ac.Type, ac.Startime, ac.Endtime, ac.Level, ac.Title, ac.MailTitle, ac.MailContent, ac.cfg, ac.Extra) ac.Id, ac.Type, ac.Startime, ac.Endtime, ac.Level, ac.Title, ac.MailTitle, ac.MailContent, ac.cfg, ac.Extra)
} }
func (ac *ActivityCfg) Copy() ActivityCfg {
return ActivityCfg{
Id: ac.Id,
AId: ac.AId,
Type: ac.Type,
Startime: ac.Startime,
Endtime: ac.Endtime,
Level: ac.Level,
Title: ac.Title,
MailTitle: ac.MailTitle,
MailContent: ac.MailContent,
cfg: ac.cfg,
Interval: ac.Interval,
Extra: ac.Extra,
}
}
const () const ()
func (r *ActivityMgr) Init() { func (r *ActivityMgr) Init() {
@ -70,23 +87,22 @@ func (r *ActivityMgr) GetActivityList() []ActivityCfg {
list := make([]ActivityCfg, 0, len(data.List)) list := make([]ActivityCfg, 0, len(data.List))
now := GoUtil.Now() now := GoUtil.Now()
for _, v := range data.List { for _, v := range data.List {
info := v.Copy()
//循环活动,重新计算活动时间 //循环活动,重新计算活动时间
if v.Interval > 0 { if info.Interval > 0 {
if now > v.Endtime { info.AId = int(info.Startime)
//活动已结束,计算下一次活动时间 list = append(list, info)
interval := (now - v.Startime) / v.Interval internal := (now - info.Startime) / info.Interval
v.Startime += interval * v.Interval for i := int64(0); i <= internal; i++ {
v.Endtime += interval * v.Interval newInfo := info.Copy()
if now > v.Endtime { newInfo.Startime += info.Interval
v.Startime += v.Interval newInfo.Endtime += info.Interval
v.Endtime += v.Interval newInfo.AId = int(newInfo.Startime) //活动id用开始时间表示方便客户端排序
list = append(list, newInfo)
} }
}
v.AId = int(v.Startime) //活动id用开始时间表示方便客户端排序
} else { } else {
v.AId = v.Id list = append(list, info)
} }
list = append(list, *v)
} }
return list return list
} }

View File

@ -529,7 +529,11 @@ func ReqGmCommand_(player *Player, Command string) error {
case "copyUser": case "copyUser":
p1 := new(Player) p1 := new(Player)
p1.M_DwUin = int64(GoUtil.Int(arg[1])) p1.M_DwUin = int64(GoUtil.Int(arg[1]))
p1.InitPlayerOnly() err := p1.InitPlayerOnly()
if err != nil {
log.Error("failed to initialize player: %v", err)
return err
}
BaseMod := p1.PlayMod.getBaseMod() BaseMod := p1.PlayMod.getBaseMod()
BaseMod.Uid = player.M_DwUin BaseMod.Uid = player.M_DwUin
BaseMod.NickName = player.PlayMod.getBaseMod().NickName BaseMod.NickName = player.PlayMod.getBaseMod().NickName

View File

@ -5,6 +5,8 @@ type CatReturnGiftMod struct {
AId int AId int
Score int Score int
Reward int Reward int
LastScore int
LastReward int
} }
func (c *CatReturnGiftMod) InitData() {} func (c *CatReturnGiftMod) InitData() {}
@ -24,6 +26,8 @@ func (c *CatReturnGiftMod) Login(id, aid int) (int, int, int) {
} }
score := c.Score score := c.Score
reward := c.Reward reward := c.Reward
c.LastScore = score
c.LastReward = reward
c.AId = aid c.AId = aid
c.Id = id c.Id = id
c.Score = 0 c.Score = 0
@ -46,3 +50,11 @@ func (c *CatReturnGiftMod) AddScore(score int) {
func (c *CatReturnGiftMod) SetReward(reward int) { func (c *CatReturnGiftMod) SetReward(reward int) {
c.Reward = reward c.Reward = reward
} }
func (c *CatReturnGiftMod) GetLastReward() int {
return c.LastReward
}
func (c *CatReturnGiftMod) GetLastScore() int {
return c.LastScore
}

View File

@ -1052,7 +1052,7 @@ func (p *Player) LoginBackData() {
p.BackUserInfo() p.BackUserInfo()
} }
func (p *Player) InitPlayerOnly() { func (p *Player) InitPlayerOnly() error {
p.lock.Lock() p.lock.Lock()
defer p.lock.Unlock() defer p.lock.Unlock()
p.Msg = make([]PlayerMsg, 0) p.Msg = make([]PlayerMsg, 0)
@ -1068,7 +1068,7 @@ func (p *Player) InitPlayerOnly() {
// 玩家基础数据 // 玩家基础数据
ok := Base.GetDataByUid(p.M_DwUin) ok := Base.GetDataByUid(p.M_DwUin)
if !ok { if !ok {
return return errors.New("player base data load failed")
} }
p.PlayerBaseMod = Base p.PlayerBaseMod = Base
p.M_DwUin = Base.Data.DwUin p.M_DwUin = Base.Data.DwUin
@ -1077,10 +1077,11 @@ func (p *Player) InitPlayerOnly() {
modData := &PlayerModData{PlayerData: NewPlayerData("PlayerModData", p)} modData := &PlayerModData{PlayerData: NewPlayerData("PlayerModData", p)}
ok = modData.LoadDataFromDB(Base.Data.DwUin) ok = modData.LoadDataFromDB(Base.Data.DwUin)
if !ok { if !ok {
return return errors.New("player mod data load failed")
} }
modData.InitMod(p) modData.InitMod(p)
p.PlayMod.mod_list = modData.ModList p.PlayMod.mod_list = modData.ModList
return nil
} }
// 获取玩家简单数据 // 获取玩家简单数据

View File

@ -165,5 +165,6 @@ CREATE TABLE IF NOT EXISTS t_activity_mod (
`cfg` TEXT COMMENT '活动配置', `cfg` TEXT COMMENT '活动配置',
`cfg_buf` BLOB COMMENT '活动配置buf', `cfg_buf` BLOB COMMENT '活动配置buf',
`extra` TEXT COMMENT '活动额外数据', `extra` TEXT COMMENT '活动额外数据',
`updateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间' `updateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
`interval` int unsigned NOT NULL DEFAULT '0' COMMENT '活动开始间隔时间单位秒0表示不循环'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '系统活动表'; ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '系统活动表';