pet_home_server/src/server/game/mod/activity/activity.go
2025-07-18 18:07:36 +08:00

121 lines
2.2 KiB
Go

package activity
import (
"encoding/gob"
"fmt"
"server/GoUtil"
activityCfg "server/conf/activity"
"server/game/mod/item"
"server/gamedata"
)
const (
ACT_STATUS_NOT_START = 0
ACT_STATUS_START = 1
ACT_STATUS_END = 2
)
const (
ACT_TYPE_MINING = 1 // 挖矿
ACT_TYPE_GUESS_COLOR = 2 // 猜颜色
ACT_TYPE_RACE = 3 // 赛跑
ACT_TYPE_DISCOUNT_GIFT = 4 // 折扣礼包
ACT_TYPE_ADD_GIFT = 5 // 加送礼包
ACT_TYPE_SUPER_GIFT = 6 // 超值加购礼包
ACT_TYPE_CATNIP = 7 // 猫草大作战
)
const (
ACT_ATYPE_NORMAL = 1 // 普通活动
ACT_ATYPE_LIMIT_GIFT = 2 // 限时礼包活动
)
type Activity struct {
Var map[int]interface{}
// 活动数据
}
type Gift struct {
Buy bool
Reward bool
Time int64
RewardTime int64
}
func init() {
gob.Register(&Gift{})
}
func (a *Activity) InitData() {
if a.Var == nil {
a.Var = make(map[int]interface{})
}
}
func (a *Activity) GetVar(key int) interface{} {
return a.Var[key]
}
func (a *Activity) SetVar(key int, value interface{}) {
a.Var[key] = value
}
func (a *Activity) getGIftVar(key int) *Gift {
Var := a.GetVar(key)
if Var == nil {
Var = &Gift{}
a.SetVar(key, Var)
}
return Var.(*Gift)
}
func (a *Activity) setGiftVar(key int, Var *Gift) {
a.SetVar(key, Var)
}
func (a *Activity) GetActivityStatus(data *gamedata.ActivityData) int {
switch data.AType {
case ACT_ATYPE_NORMAL:
return ACT_STATUS_START
case ACT_ATYPE_LIMIT_GIFT:
switch data.Type {
case ACT_TYPE_ADD_GIFT:
Var := a.getGIftVar(data.Id)
if Var.Reward {
return ACT_STATUS_NOT_START
}
if Var.Buy {
return ACT_STATUS_END
}
case ACT_TYPE_SUPER_GIFT:
Var := a.getGIftVar(data.Id)
if Var.Reward {
return ACT_STATUS_NOT_START
}
if Var.Buy {
return ACT_STATUS_END
}
default:
Var := a.getGIftVar(data.Id)
if Var.Buy {
return ACT_STATUS_NOT_START
}
}
}
return ACT_STATUS_START
}
func (a *Activity) GetReward(ActId int) ([]*item.Item, error) {
Var := a.getGIftVar(ActId)
if !Var.Buy {
return nil, fmt.Errorf("not buy")
}
if Var.Reward {
return nil, fmt.Errorf("reward already get")
}
Var.Reward = true
Var.RewardTime = GoUtil.Now()
return activityCfg.GetAcitivityRewardItems(ActId), nil
}