This commit is contained in:
hahwu 2025-12-22 17:28:50 +08:00
parent 3b02cd1241
commit 728656d23b
5 changed files with 111 additions and 28 deletions

View File

@ -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,
})
}

View File

@ -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 (

View File

@ -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 {

View File

@ -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 {

View File

@ -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)
}