pet_home_server/src/server/game/var.go
2026-04-01 10:21:16 +08:00

251 lines
5.8 KiB
Go

package game
import (
"fmt"
"server/db"
"server/game/mod/msg"
GoUtil "server/game_util"
"gitea.bywaystudios.com/pet_home/leaf/log"
)
const (
VAR_KEY_FRIEND_MSG = "friend_msg" // 好友消息
VAR_GOLD_CARD = "gold_card"
VAR_PLAYROOM_UPVOTE = "playroom_upvote"
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{} {
cache := &VarExpireData{}
err := LoadCacheVarData(key, cache)
if err != nil {
// log.Error("GetVarData err : %s, key: %s", err, key)
return nil
}
return cache.D
}
func GetDailyVarData(key string) interface{} {
cache := &VarExpireData{}
err := LoadCacheVarData(key, cache)
if err != nil {
return nil
}
return cache.D
}
func GetUserVarData(key string, PlayerId int) interface{} {
cache := map[string]*VarExpireData{}
err := LoadCacheVarData(GoUtil.GetVarKey(int(PlayerId)), &cache)
if err != nil {
// log.Error("GetUserVarData err : %s, key: %s", err, key)
return nil
}
data, ok := cache[key]
if !ok {
return nil
}
if data.T > 0 && data.T < GoUtil.Now() {
return nil
}
return data.D
}
func OpDailyVarDataAsync(PlayerId int, key string, value interface{}, opType int) {
SendMsgToCenterAsync(&msg.Msg{
From: 0,
To: PlayerId,
SendT: GoUtil.Now(),
HandleType: msg.HANDLE_MOD_DAILY_VAR_SET,
Extra: msg.VarData{
Key: key,
Value: value,
SetType: opType,
},
})
}
func (p *Player) OpVarDataAsync(PlayerId int, key string, value interface{}, opType int, end int64) {
SendMsgToCenterAsync(&msg.Msg{
From: int(p.M_DwUin),
To: PlayerId,
SendT: GoUtil.Now(),
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
End: end,
Extra: msg.VarData{
Key: key,
Value: value,
SetType: opType,
},
})
}
func (p *Player) OpVarDataSync(PlayerId int, key string, value interface{}, opType int, end int64) (*msg.Msg, error) {
return SendMsgToCenterSync(&msg.Msg{
From: int(p.M_DwUin),
To: PlayerId,
SendT: GoUtil.Now(),
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
End: end,
Extra: msg.VarData{
Key: key,
Value: value,
SetType: opType,
},
})
}
func (p *Player) OpServerVarDataAsync(key string, Value interface{}, opType int) {
SendMsgToCenterSync(&msg.Msg{
HandleType: msg.HANDLE_MOD_VAR_SET,
Extra: msg.VarData{Key: key, Value: Value, SetType: opType},
})
}
func (p *Player) OpServerVarDataSync(key string, Value interface{}, opType int) (*msg.Msg, error) {
return SendMsgToCenterSync(&msg.Msg{
HandleType: msg.HANDLE_MOD_VAR_SET,
Extra: msg.VarData{Key: key, Value: Value, SetType: opType},
})
}
func (p *Player) SetVarDataAsync(key string, value interface{}, PlayerId int, end int64) {
p.OpVarDataAsync(PlayerId, key, value, msg.VAR_OP_SET, end)
}
func (p *Player) AddVarDataAsync(key string, PlayerId int, end int64) {
p.OpVarDataAsync(PlayerId, key, nil, msg.VAR_OP_ADD, end)
}
func (p *Player) SubVarDataAsync(key string, PlayerId int, end int64) {
p.OpVarDataAsync(PlayerId, key, nil, msg.VAR_OP_SUB, end)
}
func (p *Player) AddPlayroomUpvote(PlayerId int) {
p.AddVarDataAsync(VAR_PLAYROOM_UPVOTE, PlayerId, 0)
}
func (p *Player) AddPlayroomChip(PlayerId int) {
p.AddVarDataAsync(VAR_PLAYROOM_CHIP, PlayerId, 0)
}
func (p *Player) SubPlayroomChip(PlayerId int) {
p.SubVarDataAsync(VAR_PLAYROOM_CHIP, PlayerId, 0)
}
func (p *Player) GetPlayroomUpvote(PlayerId int) int {
data := GetUserVarData(VAR_PLAYROOM_UPVOTE, PlayerId)
if data == nil {
return 0
}
return GoUtil.Int(data)
}
func (p *Player) GetPlayroomChip(PlayerId int) int {
data := GetUserVarData(VAR_PLAYROOM_CHIP, PlayerId)
if data == nil {
return 0
}
return GoUtil.Int(data)
}
func (p *Player) SetPlayroomKiss(Kiss int, PlayerId int) {
p.SetVarDataAsync(VAR_PLAYROOM_KISS, Kiss, PlayerId, 0)
}
func (p *Player) GetPlayroomKiss(PlayerId int) int {
data := GetUserVarData(VAR_PLAYROOM_KISS, PlayerId)
if data == nil {
return 0
}
return GoUtil.Int(data)
}
func (p *Player) GetGoldCard() *VarGoldCard {
data := p.GetVarData(VAR_GOLD_CARD)
if data == nil {
return &VarGoldCard{}
}
i, ok := data.(*VarGoldCard)
if !ok {
return &VarGoldCard{}
}
return i
}
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
}
if data == nil {
return nil
}
return GoUtil.IntSlice(data.Extra)
}
func SaveCacheVarData(key string, value interface{}) {
data, err := GoUtil.GobMarshal(value)
if err != nil {
log.Error("SaveCacheVarData GobMarshal err : %s", err)
return
}
db.RedisSetKeyBytes(key, data, 0)
}
func LoadCacheVarData(key string, value interface{}) error {
data, err := db.RedisGetKeyBytes(key)
if err != nil {
return err
}
if data == nil {
return fmt.Errorf("no data")
}
return GoUtil.GobUnmarshal(data, value)
}
const (
notifyKeyFriendApply = "friend_apply_n"
notifyKeyPetroomGame = "petroom_game_n"
)
func GetFriendApplyNotification(PlayerId int) int {
data := GetUserVarData(notifyKeyFriendApply, PlayerId)
if data == nil {
return 0
}
return GoUtil.Int(data)
}
func SetFriendApplyNotification(PlayerId int, Count int) {
p := new(Player)
p.SetVarDataAsync(notifyKeyFriendApply, Count, PlayerId, 0)
}
func GetPetroomGameNotification(PlayerId int) (int, int64) {
data := GetUserVarData(notifyKeyPetroomGame, PlayerId)
if data == nil {
return 0, 0
}
info, ok := data.(map[string]interface{})
if !ok {
return 0, 0
}
return GoUtil.Int(info["count"]), GoUtil.Int64(info["send"])
}
func SetPetroomGameNotification(PlayerId int, Count int) {
p := new(Player)
end := GoUtil.ZeroTimestamp() + oneday
value := map[string]interface{}{
"count": Count,
"send": GoUtil.Now(),
}
p.SetVarDataAsync(notifyKeyPetroomGame, value, PlayerId, end)
}