package game import ( "encoding/gob" "server/GoUtil" "server/game/mod/card" "server/game/mod/msg" "time" ) type VarMgr struct { *ServerMod } type VarData struct { Var map[string]interface{} VarExpire map[string]*VarExpireData UserVar map[string]*VarUserData ZeroTime int64 } const ( VAR_GOLD_CARD = "gold_card" VAR_PLAYROOM_UPVOTE = "playroom_upvote" VAR_USER_DATA = "user_data" ) const ( VAR_OP_UPVOTE = 1 VAR_OP_CHIP = 2 VAR_OP_KISS = 3 VAR_OP_CHIP_SET = 4 VAR_OP_CATNIP_LOCK = 5 ) func (f *VarMgr) Init() { gob.Register(&VarGoldCard{}) f.key = VAR_MGR_KEY f.data = &VarData{ Var: map[string]interface{}{}, } // 注册处理函数 f.init() if f.data.(*VarData).Var == nil { f.data.(*VarData).Var = make(map[string]interface{}) } if f.data.(*VarData).UserVar == nil { f.data.(*VarData).UserVar = make(map[string]*VarUserData) } if f.getData().ZeroTime == GoUtil.ZeroTimestamp() { f.ZeroUpdate(&msg.Msg{}) } f.RegisterHandler(msg.SERVER_ZERO_UPDATE, f.ZeroUpdate) f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { f.Send(&msg.Msg{ Type: msg.SERVER_ZERO_UPDATE, }) }) } func (f *VarMgr) SetGlobalData(m *msg.Msg) (interface{}, error) { return nil, nil } func (f *VarMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { f.getData().ZeroTime = GoUtil.ZeroTimestamp() // 随机生成两个金卡 Card1, Card2 := card.RankGoldCard() f.SetVar(VAR_GOLD_CARD, &VarGoldCard{ Four: Card1, Five: Card2, }) for k, v := range f.getData().VarExpire { if v.T < GoUtil.ZeroTimestamp() { delete(f.getData().VarExpire, k) } } return nil, nil } func (f *VarMgr) SetVar(key string, value interface{}) { f.getData().Var[key] = value } func (f *VarMgr) GetVar(key string) interface{} { return f.getData().Var[key] } func (f *VarMgr) SetExpireVar(key string, value *VarExpireData) { f.getData().VarExpire[key] = value } func (f *VarMgr) GetExpireVar(key string) *VarExpireData { if v, ok := f.getData().VarExpire[key]; ok { return v } data := &VarExpireData{} f.getData().VarExpire[key] = data return data } func (f *VarMgr) SetUserVar(key string, value *VarUserData) { f.getData().UserVar[key] = value } func (f *VarMgr) GetUserVar(key string) *VarUserData { if v, ok := f.getData().UserVar[key]; ok { return v } data := &VarUserData{} f.getData().UserVar[key] = data return data } func (f *VarMgr) DelVar(key string) { delete(f.getData().Var, key) } func (f *VarMgr) getData() *VarData { return f.data.(*VarData) }