From 728656d23b59959fa689ecd483c4abd75e54836d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 22 Dec 2025 17:28:50 +0800 Subject: [PATCH] 2 --- src/server/game/message_mgr.go | 6 +- src/server/game/mod/msg/Msg.go | 2 + src/server/game/var.go | 10 +-- src/server/game/var_mgr.go | 113 +++++++++++++++++++++++++++++---- src/server/game_util/GoUtil.go | 8 --- 5 files changed, 111 insertions(+), 28 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 368737a0..1ebdead8 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -79,6 +79,10 @@ func (m *MessageMgr) MessageMgrInit() { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_VAR_SET, MessageHandlerFunc(SetVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_VAR_GET, MessageHandlerFunc(GetVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_SET, MessageHandlerFunc(SetUserVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_GET, MessageHandlerFunc(GetUserVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler)) } else { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) @@ -540,7 +544,7 @@ func saveMessage(m *msg.Msg) error { func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) { return SendMsgToCenterSync(&msg.Msg{ From: int(PlayerId), - HandleType: msg.HANDLE_MOD_VAR_GET, + HandleType: msg.HANDLE_MOD_USER_VAR_GET, Extra: Key, }) } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 533172d4..79831422 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -41,6 +41,8 @@ const ( HANDLE_MOD_VAR_GET = 20007 // 获取变量 HANDLE_MOD_VAR_SET = 20008 // 设置变量 HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 + HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 + HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 ) const ( diff --git a/src/server/game/var.go b/src/server/game/var.go index a2edefb1..0726e3b7 100644 --- a/src/server/game/var.go +++ b/src/server/game/var.go @@ -28,7 +28,7 @@ func (p *Player) GetVarData(key string) interface{} { func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { SendMsgToCenterAsync(&msg.Msg{ From: int(p.M_DwUin), - HandleType: msg.HANDLE_MOD_VAR_SET, + HandleType: msg.HANDLE_MOD_USER_VAR_SET, Extra: &msg.VarData{ Key: key, Value: value, @@ -50,19 +50,19 @@ func (p *Player) SubVarDataAsync(key string) { } func (p *Player) AddPlayroomUpvote(PlayerId int) { - p.AddVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_UPVOTE)) + p.AddVarDataAsync(VAR_PLAYROOM_UPVOTE) } func (p *Player) AddPlayroomChip(PlayerId int) { - p.AddVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_CHIP)) + p.AddVarDataAsync(VAR_PLAYROOM_CHIP) } func (p *Player) SubPlayroomChip(PlayerId int) { - p.SubVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_CHIP)) + p.SubVarDataAsync(VAR_PLAYROOM_CHIP) } func (p *Player) SetPlayroomKiss(PlayerId int) { - p.SetVarDataAsync(GoUtil.GetUserVarKey(PlayerId, VAR_PLAYROOM_KISS), 1) + p.SetVarDataAsync(VAR_PLAYROOM_KISS, 1) } func (p *Player) GetGoldCard() *VarGoldCard { diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index 25a6f253..82f5eccb 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -20,10 +20,11 @@ type VarData struct { VarExpire map[string]*VarExpireData UserVar map[string]*VarUserData - NewVar map[string]*VarExpireData - ZeroTime int64 - Version int64 - mu sync.Mutex + NewVar map[string]*VarExpireData + NewUseVar map[int]map[string]*VarExpireData + ZeroTime int64 + Version int64 + mu sync.Mutex } const ( @@ -38,7 +39,8 @@ func (f *VarMgr) Init() { gob.Register(&VarGoldCard{}) f.key = VAR_MGR_KEY f.data = &VarData{ - NewVar: map[string]*VarExpireData{}, + NewVar: map[string]*VarExpireData{}, + NewUseVar: map[int]map[string]*VarExpireData{}, } // 注册处理函数 f.init() @@ -74,9 +76,9 @@ func (f *VarMgr) version() { if v != nil { uidStr := strings.Split(k, "_")[2] uid := GoUtil.Int(uidStr) - f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_UPVOTE), v.Upvote) - f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_CHIP), v.Chip) - f.SetVar(GoUtil.GetUserVarKey(uid, VAR_PLAYROOM_KISS), v.Kiss) + f.SetUserVar(uid, VAR_PLAYROOM_UPVOTE, v.Upvote) + f.SetUserVar(uid, VAR_PLAYROOM_CHIP, v.Chip) + f.SetUserVar(uid, VAR_PLAYROOM_KISS, v.Kiss) delete(data.UserVar, k) } } @@ -106,26 +108,53 @@ func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (i data := f.getData() data.mu.Lock() defer data.mu.Unlock() - MyKey := GoUtil.GetUserVarKey(Uid, VAR_CATNIP_PARTNER) - Partnerkey := GoUtil.GetUserVarKey(Partner, VAR_CATNIP_PARTNER) - OtherPartnerInfo := f.GetVar(MyKey) - MyPartnerInfo := f.GetVar(Partnerkey) + + OtherPartnerInfo := f.GetUserVar(Uid, VAR_CATNIP_PARTNER) + MyPartnerInfo := f.GetUserVar(Partner, VAR_CATNIP_PARTNER) MyOfPartnerList := GoUtil.IntSlice(MyPartnerInfo.D) OtherOfPartnerList := GoUtil.IntSlice(OtherPartnerInfo.D) if len(MyOfPartnerList) > 4 || len(OtherOfPartnerList) > 4 { return nil, fmt.Errorf("catnip partner already full for uid %d in game %d", Partner, GameId) } - f.SetVar(Partnerkey, &VarExpireData{ + f.SetUserVar(Partner, VAR_CATNIP_PARTNER, &VarExpireData{ D: append(OtherOfPartnerList, Uid), T: EndTime, }) - f.SetVar(MyKey, &VarExpireData{ + f.SetUserVar(Uid, VAR_CATNIP_PARTNER, &VarExpireData{ D: append(MyOfPartnerList, Partner), T: EndTime, }) return nil, nil } +func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) { + varData := f.getData().NewUseVar[uid] + if varData == nil { + varData = make(map[string]*VarExpireData) + f.getData().NewUseVar[uid] = varData + } + ved, ok := varData[key] + if !ok { + ved = &VarExpireData{} + } + ved.D = value + varData[key] = ved +} + +func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData { + varData := f.getData().NewUseVar[uid] + if varData == nil { + varData = make(map[string]*VarExpireData) + f.getData().NewUseVar[uid] = varData + } + ved, ok := varData[key] + if !ok { + ved = &VarExpireData{} + varData[key] = ved + } + return ved +} + func (f *VarMgr) SetVar(key string, value interface{}) { f.getData().NewVar[key] = &VarExpireData{ D: value, @@ -191,6 +220,62 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { return nil, nil } +func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + if v, ok := m.Extra.(*msg.VarData); ok { + if varData, ok := data.NewUseVar[m.From]; ok { + if userVar, ok := varData[v.Key]; ok { + return userVar, nil + } + } + return nil, fmt.Errorf("var data not found for key %s", v.Key) + } + return nil, fmt.Errorf("invalid parameters for getting var data") +} + +func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + data.mu.Lock() + defer data.mu.Unlock() + if v, ok := m.Extra.(*msg.VarData); ok { + varData := data.NewUseVar[m.From] + if varData == nil { + varData = make(map[string]*VarExpireData) + data.NewUseVar[m.From] = varData + } + ved, ok := varData[v.Key] + if !ok { + ved = &VarExpireData{} + } + switch v.SetType { + case msg.VAR_OP_SET: + ved.D = v.Value + case msg.VAR_OP_ADD: + if num, ok := ved.D.(int); ok { + ved.D = num + 1 + } else { + ved.D = 1 + } + case msg.VAR_OP_SUB: + if num, ok := ved.D.(int); ok { + if num > 0 { + ved.D = num - 1 + } else { + ved.D = 0 + } + } else { + ved.D = 0 + } + } + ved.U = time.Now().Unix() + if m.End > 0 { + ved.T = m.End + } + data.Var[v.Key] = ved + } + return nil, nil +} + func GetVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() if v, ok := m.Extra.(*msg.VarData); ok { diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index 197f81e1..a57553fa 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -300,14 +300,6 @@ func UniKey(seed string) string { return fmt.Sprintf("%x", hash.Sum(nil)) } -func GetUserKey(Uid int64) string { - return fmt.Sprintf("user_data_%d", Uid) -} - -func GetUserVarKey(Uid int, key string) string { - return fmt.Sprintf("%s_%d", key, Uid) -} - func GetCatnipLockKey(Uid, GameId int) string { return fmt.Sprintf("catnip_lock_%d_%d", Uid, GameId) }