This commit is contained in:
hahwu 2026-03-18 16:26:05 +08:00
parent 66f985f758
commit 1e7fac37b8
4 changed files with 29 additions and 22 deletions

1
.gitignore vendored
View File

@ -22,3 +22,4 @@ src/server/msg/Gameapi.pb.go
src/server/gen-go
src/server/GeoLite2-Country
src/server/test/GeoLite2-Country
src/server/msg/Gameapi_grpc.pb.go

View File

@ -414,7 +414,7 @@ func GetServerMailData(data *[]*SqlServerMailStruct) error {
}
func GetActivityData(data *[]*SqlActivityCfgStruct) error {
sql := "select `id`, `type`, `title`, `mail_title`, `mail_content`, `level_limit`, `start_time`, `end_time`, `cfg`, `extra` from t_activity_mod"
sql := "select `id`, `type`, `title`, `mail_title`, `mail_content`, `level_limit`, `start_time`, `end_time`, `cfg_buf`, `extra` from t_activity_mod"
err := SqlDb.Select(data, sql)
return err
}

View File

@ -296,9 +296,7 @@ func (ad *GameLogic) CreateMailMgr() {
// 活动管理器
func (ad *GameLogic) CreateActivityMgr() {
ad.ActivityMgr = &ActivityMgr{
ServerMod: new(ServerMod),
}
ad.ActivityMgr = &ActivityMgr{}
ad.ActivityMgr.Init()
}

View File

@ -1,16 +1,18 @@
package game
import (
"encoding/json"
"fmt"
"server/db"
"server/game/mod/msg"
protoMsg "server/msg"
"server/pkg/github.com/name5566/leaf/log"
"sync"
"google.golang.org/protobuf/proto"
)
type ActivityMgr struct {
*ServerMod
data *ActivityData
}
type ActivityData struct {
@ -27,7 +29,7 @@ type ActivityCfg struct {
Title string
MailTitle string
MailContent string
cfg map[string]interface{}
cfg interface{}
Extra map[string]interface{}
}
@ -39,17 +41,14 @@ func (ac *ActivityCfg) String() string {
const ()
func (r *ActivityMgr) Init() {
r.key = ACTIVITY_MGR_KEY
r.data = &ActivityData{
List: make(map[int]*ActivityCfg, 0),
}
// 注册处理函数
r.init()
r.Reload()
}
func (r *ActivityMgr) getData() *ActivityData {
return r.data.(*ActivityData)
return r.data
}
// 零点更新 重置榜单
@ -57,7 +56,7 @@ func (r *ActivityMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
return nil, nil
}
func (r ActivityMgr) GetActivityCfg(Id int) ActivityCfg {
func (r *ActivityMgr) GetActivityCfg(Id int) ActivityCfg {
// 获取活动配置
data := r.getData()
data.mu.Lock()
@ -84,15 +83,11 @@ func (r *ActivityMgr) Reload() error {
}
data.List = make(map[int]*ActivityCfg, 0)
for _, v := range cfgList {
reward := make(map[string]interface{})
extra := make(map[string]interface{})
if v.Extra != "" {
err := json.Unmarshal([]byte(v.Extra), &extra)
activityCfg, err := unmarshalActivityCfg(v.Type, []byte(v.Cfg))
if err != nil {
log.Error("Unmarshal extra error: %v", err)
log.Error("Unmarshal activity cfg error: %v", err)
continue
}
}
cfg := &ActivityCfg{
Id: v.Id,
Type: v.Type,
@ -102,11 +97,24 @@ func (r *ActivityMgr) Reload() error {
Title: v.Title,
MailTitle: v.MailTitle,
MailContent: v.MailContent,
cfg: reward,
Extra: extra,
cfg: activityCfg,
}
log.Debug("load activity cfg: %v", cfg)
data.List[v.Id] = cfg
}
return nil
}
func unmarshalActivityCfg(atype int, buf []byte) (interface{}, error) {
switch atype {
case 1:
cfg := &protoMsg.MiningCfg{}
err := proto.Unmarshal(buf, cfg)
if err != nil {
return nil, err
}
return cfg, nil
}
return nil, fmt.Errorf("unknown activity type: %d", atype)
}