diff --git a/.gitignore b/.gitignore index 623c746c..ab614cb0 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/src/server/db/Mysql.go b/src/server/db/Mysql.go index fb37d20d..81e8a3fb 100644 --- a/src/server/db/Mysql.go +++ b/src/server/db/Mysql.go @@ -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 } diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 78569f8a..08862a37 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -296,9 +296,7 @@ func (ad *GameLogic) CreateMailMgr() { // 活动管理器 func (ad *GameLogic) CreateActivityMgr() { - ad.ActivityMgr = &ActivityMgr{ - ServerMod: new(ServerMod), - } + ad.ActivityMgr = &ActivityMgr{} ad.ActivityMgr.Init() } diff --git a/src/server/game/activity_mgr.go b/src/server/game/activity_mgr.go index 2adcea32..a108e185 100644 --- a/src/server/game/activity_mgr.go +++ b/src/server/game/activity_mgr.go @@ -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,14 +83,10 @@ 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) - if err != nil { - log.Error("Unmarshal extra error: %v", err) - continue - } + activityCfg, err := unmarshalActivityCfg(v.Type, []byte(v.Cfg)) + if err != nil { + log.Error("Unmarshal activity cfg error: %v", err) + continue } cfg := &ActivityCfg{ Id: v.Id, @@ -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) + +}