This commit is contained in:
hahwu 2025-12-22 16:45:11 +08:00
parent 408bd4df5b
commit 3b02cd1241
4 changed files with 51 additions and 89 deletions

View File

@ -1,7 +1,6 @@
package game
import (
"fmt"
activityCfg "server/conf/activity"
catnipCfg "server/conf/catnip"
guesscolorCfg "server/conf/guess_color"
@ -360,34 +359,33 @@ func (p *Player) CatnipBackData() {
}
tmpData := make(map[int]*msg.CatnipInvite)
InviteList := make([]*msg.CatnipInvite, 0)
for Uid, Info := range CatnipMod.InviteList {
tmpData[Uid] = &msg.CatnipInvite{
Uid: int64(Uid),
Time: Info.Time,
for uid, info := range CatnipMod.InviteList {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Time: info.Time,
Type: 1,
}
}
for Uid, Info := range CatnipMod.BeInvitedList {
tmpData[Uid] = &msg.CatnipInvite{
Uid: int64(Uid),
Time: Info.Time,
for uid, info := range CatnipMod.BeInvitedList {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Time: info.Time,
Type: 2,
}
}
for Uid := range FriendMod.NewFriendList {
key := fmt.Sprintf("catnip_partner_%d", Uid)
Var := G_GameLogicPtr.VarMgr.GetExpireVar(key)
if len(GoUtil.IntSlice(Var.D)) >= 4 {
tmpData[Uid] = &msg.CatnipInvite{
Uid: int64(Uid),
for uid := range FriendMod.NewFriendList {
partnerList := p.GetCatnipPartner(uid)
if len(GoUtil.IntSlice(partnerList)) >= 4 {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Type: 3,
}
continue
}
if _, ok := tmpData[Uid]; !ok {
tmpData[Uid] = &msg.CatnipInvite{
Uid: int64(Uid),
if _, ok := tmpData[uid]; !ok {
tmpData[uid] = &msg.CatnipInvite{
Uid: int64(uid),
Type: 0,
}
}

View File

@ -3,7 +3,6 @@ package game
import (
"encoding/gob"
"fmt"
"server/MergeConst"
mergeCluster "server/cluster"
"server/conf"
"server/game/mod/card"
@ -86,9 +85,6 @@ func (f *FriendMgr) Init() {
f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline)
f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayer)
f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_GET, f.GetVarUserData)
f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_SET, f.SetVarUserData)
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter)
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter)
}
@ -141,37 +137,6 @@ func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) {
return data, nil
}
func (f *FriendMgr) GetVarUserData(m *msg.Msg) (interface{}, error) {
Key := GoUtil.GetUserKey(int64(m.To))
data := G_GameLogicPtr.VarMgr.GetUserVar(Key)
if data == nil {
data = &VarUserData{
Upvote: 0,
}
}
return data, nil
}
func (f *FriendMgr) SetVarUserData(m *msg.Msg) (interface{}, error) {
VarOp := m.Extra.(VarOpration)
Key := GoUtil.GetUserKey(int64(m.To))
data := G_GameLogicPtr.VarMgr.GetUserVar(Key)
switch VarOp.Type {
case VAR_OP_UPVOTE:
data.Upvote++
case VAR_OP_CHIP:
data.Chip += VarOp.Data.(int)
case VAR_OP_CHIP_SET:
data.Chip = VarOp.Data.(int)
case VAR_OP_KISS:
data.Kiss = VarOp.Data.(int)
}
return &VarOpration{
Data: data,
Code: MergeConst.SUCCESS,
}, nil
}
// 发送消息给玩家
func sendToPlayer(m *msg.Msg) error {
p := G_GameLogicPtr.GetPlayer(int64(m.To))

View File

@ -13,6 +13,7 @@ const (
VAR_PLAYROOM_CHIP = "playroom_chip"
VAR_PLAYROOM_KISS = "playroom_kiss"
VAR_USER_DATA = "user_data"
VAR_CATNIP_PARTNER = "catnip_partner"
)
func (p *Player) GetVarData(key string) interface{} {
@ -71,3 +72,12 @@ func (p *Player) GetGoldCard() *VarGoldCard {
}
return data.(*VarGoldCard)
}
func (p *Player) GetCatnipPartner(Uid int) []int {
data, err := GetUserData(p.M_DwUin, VAR_CATNIP_PARTNER)
if err != nil {
log.Error("GetVarData err : %s", err)
return nil
}
return GoUtil.IntSlice(data.Extra)
}

View File

@ -16,12 +16,14 @@ type VarMgr struct {
}
type VarData struct {
Var map[string]*VarExpireData
Var map[string]interface{}
VarExpire map[string]*VarExpireData
UserVar map[string]*VarUserData
ZeroTime int64
Version int64
mu sync.Mutex
NewVar map[string]*VarExpireData
ZeroTime int64
Version int64
mu sync.Mutex
}
const (
@ -36,14 +38,14 @@ func (f *VarMgr) Init() {
gob.Register(&VarGoldCard{})
f.key = VAR_MGR_KEY
f.data = &VarData{
Var: map[string]*VarExpireData{},
NewVar: map[string]*VarExpireData{},
}
// 注册处理函数
f.init()
// 版本更新 重构
f.version()
if f.data.(*VarData).Var == nil {
f.data.(*VarData).Var = make(map[string]*VarExpireData)
if f.data.(*VarData).NewVar == nil {
f.data.(*VarData).NewVar = make(map[string]*VarExpireData)
}
if f.data.(*VarData).UserVar == nil {
f.data.(*VarData).UserVar = make(map[string]*VarUserData)
@ -90,7 +92,7 @@ func (f *VarMgr) ZeroUpdate() {
Four: Card1,
Five: Card2,
})
for k, v := range f.getData().Var {
for k, v := range f.getData().NewVar {
if v.T < GoUtil.ZeroTimestamp() {
delete(f.getData().Var, k)
}
@ -101,20 +103,23 @@ func (f *VarMgr) ZeroUpdate() {
}
func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (interface{}, error) {
myKey := fmt.Sprintf("catnip_partner_%d", Uid)
key := fmt.Sprintf("catnip_partner_%d", Partner)
OtherPartnerInfo := f.GetExpireVar(key)
MyPartnerInfo := f.GetExpireVar(myKey)
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)
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(key, &VarExpireData{
f.SetVar(Partnerkey, &VarExpireData{
D: append(OtherOfPartnerList, Uid),
T: EndTime,
})
f.SetVar(myKey, &VarExpireData{
f.SetVar(MyKey, &VarExpireData{
D: append(MyOfPartnerList, Partner),
T: EndTime,
})
@ -122,33 +127,17 @@ func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (i
}
func (f *VarMgr) SetVar(key string, value interface{}) {
f.getData().Var[key] = &VarExpireData{
f.getData().NewVar[key] = &VarExpireData{
D: value,
}
}
// TODO: 弃用
func (f *VarMgr) GetExpireVar(key string) *VarExpireData {
if v, ok := f.getData().VarExpire[key]; ok {
func (f *VarMgr) GetVar(key string) *VarExpireData {
if v, ok := f.getData().NewVar[key]; ok {
return v
}
data := &VarExpireData{}
f.getData().VarExpire[key] = data
return data
}
// TODO: 弃用
func (f *VarMgr) SetUserVar(key string, value *VarUserData) {
f.getData().UserVar[key] = value
}
// TODO: 弃用
func (f *VarMgr) GetUserVar(key string) *VarUserData {
if v, ok := f.getData().UserVar[key]; ok {
return v
}
data := &VarUserData{}
f.getData().UserVar[key] = data
f.getData().NewVar[key] = data
return data
}
@ -169,7 +158,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) {
data.mu.Lock()
defer data.mu.Unlock()
if v, ok := m.Extra.(*msg.VarData); ok {
ved, ok := data.Var[v.Key]
ved, ok := data.NewVar[v.Key]
if !ok {
ved = &VarExpireData{}
}
@ -205,7 +194,7 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) {
func GetVarDataHandler(m *msg.Msg) (interface{}, error) {
data := getVarData()
if v, ok := m.Extra.(*msg.VarData); ok {
if varData, ok := data.Var[v.Key]; ok {
if varData, ok := data.NewVar[v.Key]; ok {
return varData.D, nil
}
return nil, fmt.Errorf("var data not found for key %s", v.Key)