pet_home_server/src/server/game/notification.go
2026-02-26 10:25:15 +08:00

85 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package game
import (
"fmt"
languageCfg "server/conf/language"
notification_cfg "server/conf/notification"
GoUtil "server/game_util"
"server/msg"
)
const (
NOTIFY_TYPE_FRIEND_APPLY = 1
NOTIFY_TYPE_PETROOM_GAME = 2
)
/*
对方来petroom游戏的通知
每天最多通知3次
*/
func NotifyPetroomGame(PlayerId int) {
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(PlayerId)
if !checkLogout(PlayerSimpleData) {
return
}
count, last := GetPetroomGameNotification(PlayerId)
cooldown, dailyLimit := notification_cfg.GetPetroomGameNotificationCooldown()
if count >= dailyLimit {
return
}
if GoUtil.Now()-last < int64(cooldown*onehour) {
return
}
titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg()
title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey)
info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey)
GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, title, fmt.Sprintf(info, PlayerSimpleData.PetName))
SetPetroomGameNotification(PlayerId, count+1)
}
/*
好友申请通知
好友申请累计两次
*/
func NotifyFriendApply(PlayerId, FriendId int) {
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(PlayerId)
if !checkLogout(PlayerSimpleData) {
return
}
FriendSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(FriendId)
if FriendSimpleData == nil {
return
}
count := GetFriendApplyNotification(PlayerId)
if count > 0 {
return
}
titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg()
title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey)
info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey)
GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_FRIEND_APPLY, title, fmt.Sprintf(info, FriendSimpleData.Name))
SetFriendApplyNotification(PlayerId, count+1)
}
/*
玩家需处于离线状态
玩家离线时间少于10分钟时不发送消息
若用户已连续7天未登入游戏不再发送通知
*/
func checkLogout(PlayerSimpleData *PlayerSimpleData) bool {
if PlayerSimpleData == nil {
return false
}
if PlayerSimpleData.Loginout == 0 {
return false
}
now := GoUtil.Now()
if now-PlayerSimpleData.Loginout > 7*24*3600 {
return false
}
if now-PlayerSimpleData.Loginout < 600 {
return false
}
return true
}