邮件触发

This commit is contained in:
hahwu 2025-03-25 17:15:37 +08:00
parent f527918672
commit 496940caa3
12 changed files with 3585 additions and 3280 deletions

View File

@ -26,6 +26,11 @@ type EventObj struct {
const (
SECRET_KEY = ")VQbB(vpy=U(wcp)"
CONDITION_EQ = "=" // 等于
CONDITION_GT = ">" // 大于
CONDITION_LT = "<" // 小于
CONDITION_GE = ">=" // 大于等于
CONDITION_LE = "<=" // 小于等于
)
// 加密字符串
@ -242,3 +247,20 @@ func SplitInt(str, sep string) []int {
}
return ret
}
func Compare(x int, condition string, y int) bool {
switch condition {
case CONDITION_EQ:
return x == y
case CONDITION_GT:
return x > y
case CONDITION_LT:
return x < y
case CONDITION_GE:
return x >= y
case CONDITION_LE:
return x <= y
default:
return false
}
}

View File

@ -139,3 +139,18 @@ func ZeroTime(timestamp int64) int64 {
t := time.Unix(timestamp, 0)
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()).Unix()
}
// 计算给定时间戳所在的 0 点到现在的 0 点过了几天
func DaysSince(timestamp int64) int {
// 获取给定时间戳的 0 点时间
t := time.Unix(timestamp, 0)
startOfDay := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
// 获取当前时间的 0 点时间
now := time.Now()
startOfToday := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
// 计算两个时间之间的天数差
days := int(startOfToday.Sub(startOfDay).Hours() / 24)
return days
}

View File

@ -1,13 +1,30 @@
package mailCfg
import "server/gamedata"
import (
"server/GoUtil"
"server/game/mod/item"
"server/gamedata"
"strings"
)
const (
CFG_LOGIN_BACK = "LoginBack"
CFG_MAIL = "Mail"
)
type TriggerMail struct {
Id int
Title string
Content string
EnglistTitle string
EnglistContent string
Items []*item.Item
Trigger []string
}
func init() {
gamedata.InitCfg(CFG_LOGIN_BACK)
gamedata.InitCfg(CFG_MAIL)
}
func GetLoginBack(Id string) (int, int) {
@ -17,3 +34,28 @@ func GetLoginBack(Id string) (int, int) {
}
return gamedata.GetIntValue(data, "Num1"), gamedata.GetIntValue(data, "Num2")
}
func GetTriggerMail() []*TriggerMail {
data, err := gamedata.GetData(CFG_MAIL)
if err != nil {
return nil
}
ret := make([]*TriggerMail, 0)
for k, v := range data {
T := gamedata.GetStringValue(v, "Trigger")
if T != "" {
continue
}
data := &TriggerMail{
Id: GoUtil.Int(k),
Title: gamedata.GetStringValue(v, "Title"),
Content: gamedata.GetStringValue(v, "Content"),
EnglistTitle: gamedata.GetStringValue(v, "EnglistTitle"),
EnglistContent: gamedata.GetStringValue(v, "EnglistContent"),
Items: gamedata.GetItemList(v, "Items"),
Trigger: strings.Split(T, "|"),
}
ret = append(ret, data)
}
return ret
}

View File

@ -10,8 +10,8 @@ import (
)
const (
MAIL_TYPE_SERVER = 1
MAIL_TYPE_USER = 2
MAIL_SEND_TYPE_SERVER = 1
MAIL_SEND_TYPE_USER = 2
)
type MailMgr struct {
@ -31,6 +31,7 @@ type ServerMail struct {
Start_time int64
Register_time int64
End_time int64
Send_type int
Mail_type int
To_uids []int
}
@ -95,7 +96,7 @@ func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail {
if v.Register_time > 0 && v.Register_time < Register {
continue
}
if v.Mail_type == MAIL_TYPE_SERVER { //全服邮件
if v.Send_type == MAIL_SEND_TYPE_SERVER { //全服邮件
list = append(list, *v)
} else {
if GoUtil.InArray(Uid, v.To_uids) {

View File

@ -302,6 +302,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
p.PlayMod.getChampshipMod().ZeroUpdate()
p.initAcitivity()
ActivityZeroUpdate(p)
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
p.PlayMod.save()
}
// 周更新
@ -358,6 +359,7 @@ func (p *Player) Login() {
AvatarMod.Login(PlayBaseMod.GetRegisterTime())
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
}
func (p *Player) Outline() {

View File

@ -516,6 +516,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
// 重载活动
player.initAcitivity()
player.BackDataActivity()
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
p.p.TeLog("level_up", map[string]interface{}{
"after_level": BaseMod.Level,
})

View File

@ -17,6 +17,7 @@ import (
"server/game/mod/card"
"server/game/mod/friend"
"server/game/mod/item"
"server/game/mod/mail"
"server/game/mod/msg"
"server/game/mod/order"
"server/game/mod/playroom"
@ -328,7 +329,7 @@ func SyncMailMsg(p *Player) {
continue
}
MailMod.ServerMail = append(MailMod.ServerMail, v.Id)
MailMod.Send(v.Title, v.Content, v.Items)
MailMod.Send(v.Title, v.Content, v.Items, v.Mail_type)
}
}
@ -864,7 +865,7 @@ func LoignBack(p *Player) {
MailMod.Send("Test Players' Refund",
`Welcome back to our game!
Here comes your refund for your scene progress and payment in test version!
Have fun in new version!`, Items)
Have fun in new version!`, Items, mail.MAIL_TYPE_NORMAL)
}
BaseMod.LoginBack = true
}

View File

@ -6,17 +6,79 @@ import (
"server/MergeConst"
"server/conf"
champshipCfg "server/conf/champship"
mailCfg "server/conf/mail"
mergeDataCfg "server/conf/mergeData"
"server/db"
"server/game/mod/base"
"server/game/mod/chess"
"server/game/mod/item"
"server/game/mod/mail"
"server/game/mod/order"
"server/game/mod/quest"
"server/msg"
"server/pkg/github.com/name5566/leaf/log"
"sort"
"time"
)
const (
TRIGGER_PARAM_LV = "lv" // 等级
TRIGGER_PARAM_REQ = "reg" // 注册天数
)
func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
MailMod := player.PlayMod.getMailMod()
BaseMod := player.PlayMod.getBaseMod()
TriggerMail := mailCfg.GetTriggerMail()
t := make([]*mailCfg.TriggerMail, 0)
for _, v := range TriggerMail {
if GoUtil.InArray(v.Id, MailMod.TriggerMail) {
continue
}
if Tr.Label != v.Trigger[0] {
continue
}
t = append(t, v)
}
if len(t) == 0 {
return false
}
for _, v := range t {
if checkTriggerCondition(player, v.Trigger) {
Title := ""
Content := ""
if BaseMod.GetLang() == base.LANG_CN {
Title = v.Title
Content = v.Content
} else {
Title = v.EnglistTitle
Content = v.EnglistContent
}
MailMod.Send(Title, Content, v.Items, mail.MAIL_TYPE_NORMAL)
MailMod.AddTriggerMail(v.Id)
}
}
player.PushClientRes(MailMod.BackData())
return true
}
func checkTriggerCondition(player *Player, Trigger []string) bool {
if len(Trigger) < 4 {
return false
}
switch Trigger[1] {
case TRIGGER_PARAM_LV:
lv := player.PlayMod.getBaseMod().GetLevel()
return GoUtil.Compare(lv, Trigger[2], GoUtil.Int(Trigger[3]))
case TRIGGER_PARAM_REQ:
reg := player.GetPlayerBaseMod().GetRegisterTime()
Day := GoUtil.DaysSince(reg)
return GoUtil.Compare(Day, Trigger[2], GoUtil.Int(Trigger[3]))
default:
return false
}
}
func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
OrderSn := req.OrderSn
Status := int(req.Status)

View File

@ -10,6 +10,8 @@ import (
const (
ModuleName = "base"
LANG_EN = 1 //英文
LANG_CN = 2 //中文
)
type Base struct {
@ -36,6 +38,7 @@ type Base struct {
EnergyAD int // 每日看广告获得的能量次数
Seed bool
Source int // 体力资源
Lang int // 语言
}
func (b *Base) InitData(Uid int) {
@ -45,6 +48,9 @@ func (b *Base) InitData(Uid int) {
if b.NickName == "" {
b.NickName = fmt.Sprintf("Player_%d", Uid)
}
if b.Lang == 0 {
b.Lang = LANG_EN
}
}
func (b *Base) Login() {
@ -185,6 +191,14 @@ func (b *Base) SetLogoutTime(LogoutTime int64) {
b.LogoutTime = LogoutTime
}
func (b *Base) GetLang() int {
return b.Lang
}
func (b *Base) SetLang(lang int) {
b.Lang = lang
}
func (b *Base) BuyEnergy(Energy int) ([]*item.Item, int, int) {
if !b.IsFirstBuy {
b.IsFirstBuy = true
@ -207,6 +221,7 @@ func (b *Base) BackData() *msg.BaseInfo {
IsFirstBuy: b.IsFirstBuy,
EnergyBuy: int32(b.EnergyBuy),
EnergyAD: int32(b.EnergyAD),
Lang: int32(b.Lang),
}
}

View File

@ -10,7 +10,8 @@ import (
type MailMod struct {
List map[int]*MailInfo // 邮件列表
AutoId int // 自增id
ServerMail []int
ServerMail []int // 后台邮件
TriggerMail []int // 触发邮件
}
const (
@ -18,6 +19,9 @@ const (
MAIL_STATUS_READ = 1
MAIL_STATUS_REWARD = 2
MAIL_STATUS_DEL = 3
MAIL_TYPE_NORMAL = 1
MAIL_TYPE_FESTIVAL = 2
)
type MailInfo struct {
@ -37,13 +41,14 @@ func (m *MailMod) InitData() {
}
// 发送邮件
func (m *MailMod) Send(Title, Content string, Items []*item.Item) int {
func (m *MailMod) Send(Title, Content string, Items []*item.Item, t int) int {
m.AutoId++
m.List[m.AutoId] = &MailInfo{
Title: Title,
Content: Content,
Items: Items,
Send: GoUtil.Now(),
Type: t,
}
return m.AutoId
}
@ -99,6 +104,7 @@ func (m *MailMod) BackData() *msg.ResMailList {
Items: item.ItemToMsg(v.Items),
Status: int32(v.Status),
Time: int32(v.Send),
Type: int32(v.Type),
}
}
return res
@ -117,3 +123,11 @@ func (m *MailMod) NotifyMail(Id int) *msg.MailNotify {
},
}
}
func (m *MailMod) GetTriggerMail() []int {
return m.TriggerMail
}
func (m *MailMod) AddTriggerMail(i int) {
m.TriggerMail = append(m.TriggerMail, i)
}

View File

@ -24,6 +24,8 @@ const (
TRIGGER_LABEL_PLAYCAT = "PlayCat"
TRIGGER_LABEL_FEEDCAT = "FeedCat"
TRIGGER_LABEL_CLEANCAT = "CleanCat"
TRIGGER_LABEL_UPLV = "UpLv" // 升级
TRIGGER_LABEL_LOGIN = "Login" // 登录
)
type QuestProgress struct {

File diff suppressed because it is too large Load Diff