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
}
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() {
todayActivityId, _ := p.GetChampshipActivityId()
ChampionshipMod := p.PlayMod.getChampshipMod()
@ -662,17 +696,26 @@ func (p *Player) CatReturnGiftBackData() {
if activityInfo == nil {
return
}
_, YestdayAid := p.GetTodayAndYesterdayActivityId(activity.ACT_TYPE_CAT_RETURN_GIFT)
cfg := G_GameLogicPtr.ActivityMgr.GetCatReturnGiftCfg(activityInfo.Id)
if cfg == nil {
return
}
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{
StartTime: activityInfo.StartT,
EndTime: activityInfo.EndT,
Cfg: cfg,
Score: int32(CatReturnGiftMod.GetScore()),
Reward: int32(CatReturnGiftMod.GetReward()),
Score: int32(score),
Reward: int32(reward),
}
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)
}
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 ()
func (r *ActivityMgr) Init() {
@ -70,23 +87,22 @@ func (r *ActivityMgr) GetActivityList() []ActivityCfg {
list := make([]ActivityCfg, 0, len(data.List))
now := GoUtil.Now()
for _, v := range data.List {
info := v.Copy()
//循环活动,重新计算活动时间
if v.Interval > 0 {
if now > v.Endtime {
//活动已结束,计算下一次活动时间
interval := (now - v.Startime) / v.Interval
v.Startime += interval * v.Interval
v.Endtime += interval * v.Interval
if now > v.Endtime {
v.Startime += v.Interval
v.Endtime += v.Interval
}
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)
}
v.AId = int(v.Startime) //活动id用开始时间表示方便客户端排序
} else {
v.AId = v.Id
list = append(list, info)
}
list = append(list, *v)
}
return list
}

View File

@ -529,7 +529,11 @@ func ReqGmCommand_(player *Player, Command string) error {
case "copyUser":
p1 := new(Player)
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.Uid = player.M_DwUin
BaseMod.NickName = player.PlayMod.getBaseMod().NickName

View File

@ -1,10 +1,12 @@
package catreturngift
type CatReturnGiftMod struct {
Id int
AId int
Score int
Reward int
Id int
AId int
Score int
Reward int
LastScore int
LastReward int
}
func (c *CatReturnGiftMod) InitData() {}
@ -24,6 +26,8 @@ func (c *CatReturnGiftMod) Login(id, aid int) (int, int, int) {
}
score := c.Score
reward := c.Reward
c.LastScore = score
c.LastReward = reward
c.AId = aid
c.Id = id
c.Score = 0
@ -46,3 +50,11 @@ func (c *CatReturnGiftMod) AddScore(score int) {
func (c *CatReturnGiftMod) SetReward(reward int) {
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()
}
func (p *Player) InitPlayerOnly() {
func (p *Player) InitPlayerOnly() error {
p.lock.Lock()
defer p.lock.Unlock()
p.Msg = make([]PlayerMsg, 0)
@ -1068,7 +1068,7 @@ func (p *Player) InitPlayerOnly() {
// 玩家基础数据
ok := Base.GetDataByUid(p.M_DwUin)
if !ok {
return
return errors.New("player base data load failed")
}
p.PlayerBaseMod = Base
p.M_DwUin = Base.Data.DwUin
@ -1077,10 +1077,11 @@ func (p *Player) InitPlayerOnly() {
modData := &PlayerModData{PlayerData: NewPlayerData("PlayerModData", p)}
ok = modData.LoadDataFromDB(Base.Data.DwUin)
if !ok {
return
return errors.New("player mod data load failed")
}
modData.InitMod(p)
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_buf` BLOB COMMENT '活动配置buf',
`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 = '系统活动表';