邮件触发
This commit is contained in:
parent
f527918672
commit
496940caa3
@ -25,7 +25,12 @@ type EventObj struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SECRET_KEY = ")VQbB(vpy=U(wcp)"
|
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
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -139,3 +139,18 @@ func ZeroTime(timestamp int64) int64 {
|
|||||||
t := time.Unix(timestamp, 0)
|
t := time.Unix(timestamp, 0)
|
||||||
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()).Unix()
|
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
|
||||||
|
}
|
||||||
|
|||||||
@ -1,13 +1,30 @@
|
|||||||
package mailCfg
|
package mailCfg
|
||||||
|
|
||||||
import "server/gamedata"
|
import (
|
||||||
|
"server/GoUtil"
|
||||||
|
"server/game/mod/item"
|
||||||
|
"server/gamedata"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CFG_LOGIN_BACK = "LoginBack"
|
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() {
|
func init() {
|
||||||
gamedata.InitCfg(CFG_LOGIN_BACK)
|
gamedata.InitCfg(CFG_LOGIN_BACK)
|
||||||
|
gamedata.InitCfg(CFG_MAIL)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetLoginBack(Id string) (int, int) {
|
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")
|
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
|
||||||
|
}
|
||||||
|
|||||||
@ -10,8 +10,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MAIL_TYPE_SERVER = 1
|
MAIL_SEND_TYPE_SERVER = 1
|
||||||
MAIL_TYPE_USER = 2
|
MAIL_SEND_TYPE_USER = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
type MailMgr struct {
|
type MailMgr struct {
|
||||||
@ -31,6 +31,7 @@ type ServerMail struct {
|
|||||||
Start_time int64
|
Start_time int64
|
||||||
Register_time int64
|
Register_time int64
|
||||||
End_time int64
|
End_time int64
|
||||||
|
Send_type int
|
||||||
Mail_type int
|
Mail_type int
|
||||||
To_uids []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 {
|
if v.Register_time > 0 && v.Register_time < Register {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if v.Mail_type == MAIL_TYPE_SERVER { //全服邮件
|
if v.Send_type == MAIL_SEND_TYPE_SERVER { //全服邮件
|
||||||
list = append(list, *v)
|
list = append(list, *v)
|
||||||
} else {
|
} else {
|
||||||
if GoUtil.InArray(Uid, v.To_uids) {
|
if GoUtil.InArray(Uid, v.To_uids) {
|
||||||
|
|||||||
@ -302,6 +302,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
|
|||||||
p.PlayMod.getChampshipMod().ZeroUpdate()
|
p.PlayMod.getChampshipMod().ZeroUpdate()
|
||||||
p.initAcitivity()
|
p.initAcitivity()
|
||||||
ActivityZeroUpdate(p)
|
ActivityZeroUpdate(p)
|
||||||
|
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
|
||||||
p.PlayMod.save()
|
p.PlayMod.save()
|
||||||
}
|
}
|
||||||
// 周更新
|
// 周更新
|
||||||
@ -358,6 +359,7 @@ func (p *Player) Login() {
|
|||||||
AvatarMod.Login(PlayBaseMod.GetRegisterTime())
|
AvatarMod.Login(PlayBaseMod.GetRegisterTime())
|
||||||
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
HandbookItem := p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
|
||||||
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
|
p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
|
||||||
|
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Player) Outline() {
|
func (p *Player) Outline() {
|
||||||
|
|||||||
@ -516,6 +516,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
|
|||||||
// 重载活动
|
// 重载活动
|
||||||
player.initAcitivity()
|
player.initAcitivity()
|
||||||
player.BackDataActivity()
|
player.BackDataActivity()
|
||||||
|
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
|
||||||
p.p.TeLog("level_up", map[string]interface{}{
|
p.p.TeLog("level_up", map[string]interface{}{
|
||||||
"after_level": BaseMod.Level,
|
"after_level": BaseMod.Level,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import (
|
|||||||
"server/game/mod/card"
|
"server/game/mod/card"
|
||||||
"server/game/mod/friend"
|
"server/game/mod/friend"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
|
"server/game/mod/mail"
|
||||||
"server/game/mod/msg"
|
"server/game/mod/msg"
|
||||||
"server/game/mod/order"
|
"server/game/mod/order"
|
||||||
"server/game/mod/playroom"
|
"server/game/mod/playroom"
|
||||||
@ -328,7 +329,7 @@ func SyncMailMsg(p *Player) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
MailMod.ServerMail = append(MailMod.ServerMail, v.Id)
|
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",
|
MailMod.Send("Test Players' Refund",
|
||||||
`Welcome back to our game!
|
`Welcome back to our game!
|
||||||
Here comes your refund for your scene progress and payment in test version!
|
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
|
BaseMod.LoginBack = true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,17 +6,79 @@ import (
|
|||||||
"server/MergeConst"
|
"server/MergeConst"
|
||||||
"server/conf"
|
"server/conf"
|
||||||
champshipCfg "server/conf/champship"
|
champshipCfg "server/conf/champship"
|
||||||
|
mailCfg "server/conf/mail"
|
||||||
mergeDataCfg "server/conf/mergeData"
|
mergeDataCfg "server/conf/mergeData"
|
||||||
"server/db"
|
"server/db"
|
||||||
|
"server/game/mod/base"
|
||||||
"server/game/mod/chess"
|
"server/game/mod/chess"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
|
"server/game/mod/mail"
|
||||||
"server/game/mod/order"
|
"server/game/mod/order"
|
||||||
|
"server/game/mod/quest"
|
||||||
"server/msg"
|
"server/msg"
|
||||||
"server/pkg/github.com/name5566/leaf/log"
|
"server/pkg/github.com/name5566/leaf/log"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"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) {
|
func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||||
OrderSn := req.OrderSn
|
OrderSn := req.OrderSn
|
||||||
Status := int(req.Status)
|
Status := int(req.Status)
|
||||||
|
|||||||
@ -10,6 +10,8 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
ModuleName = "base"
|
ModuleName = "base"
|
||||||
|
LANG_EN = 1 //英文
|
||||||
|
LANG_CN = 2 //中文
|
||||||
)
|
)
|
||||||
|
|
||||||
type Base struct {
|
type Base struct {
|
||||||
@ -36,6 +38,7 @@ type Base struct {
|
|||||||
EnergyAD int // 每日看广告获得的能量次数
|
EnergyAD int // 每日看广告获得的能量次数
|
||||||
Seed bool
|
Seed bool
|
||||||
Source int // 体力资源
|
Source int // 体力资源
|
||||||
|
Lang int // 语言
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Base) InitData(Uid int) {
|
func (b *Base) InitData(Uid int) {
|
||||||
@ -45,6 +48,9 @@ func (b *Base) InitData(Uid int) {
|
|||||||
if b.NickName == "" {
|
if b.NickName == "" {
|
||||||
b.NickName = fmt.Sprintf("Player_%d", Uid)
|
b.NickName = fmt.Sprintf("Player_%d", Uid)
|
||||||
}
|
}
|
||||||
|
if b.Lang == 0 {
|
||||||
|
b.Lang = LANG_EN
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Base) Login() {
|
func (b *Base) Login() {
|
||||||
@ -185,6 +191,14 @@ func (b *Base) SetLogoutTime(LogoutTime int64) {
|
|||||||
b.LogoutTime = LogoutTime
|
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) {
|
func (b *Base) BuyEnergy(Energy int) ([]*item.Item, int, int) {
|
||||||
if !b.IsFirstBuy {
|
if !b.IsFirstBuy {
|
||||||
b.IsFirstBuy = true
|
b.IsFirstBuy = true
|
||||||
@ -207,6 +221,7 @@ func (b *Base) BackData() *msg.BaseInfo {
|
|||||||
IsFirstBuy: b.IsFirstBuy,
|
IsFirstBuy: b.IsFirstBuy,
|
||||||
EnergyBuy: int32(b.EnergyBuy),
|
EnergyBuy: int32(b.EnergyBuy),
|
||||||
EnergyAD: int32(b.EnergyAD),
|
EnergyAD: int32(b.EnergyAD),
|
||||||
|
Lang: int32(b.Lang),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,9 +8,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type MailMod struct {
|
type MailMod struct {
|
||||||
List map[int]*MailInfo // 邮件列表
|
List map[int]*MailInfo // 邮件列表
|
||||||
AutoId int // 自增id
|
AutoId int // 自增id
|
||||||
ServerMail []int
|
ServerMail []int // 后台邮件
|
||||||
|
TriggerMail []int // 触发邮件
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -18,6 +19,9 @@ const (
|
|||||||
MAIL_STATUS_READ = 1
|
MAIL_STATUS_READ = 1
|
||||||
MAIL_STATUS_REWARD = 2
|
MAIL_STATUS_REWARD = 2
|
||||||
MAIL_STATUS_DEL = 3
|
MAIL_STATUS_DEL = 3
|
||||||
|
|
||||||
|
MAIL_TYPE_NORMAL = 1
|
||||||
|
MAIL_TYPE_FESTIVAL = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
type MailInfo struct {
|
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.AutoId++
|
||||||
m.List[m.AutoId] = &MailInfo{
|
m.List[m.AutoId] = &MailInfo{
|
||||||
Title: Title,
|
Title: Title,
|
||||||
Content: Content,
|
Content: Content,
|
||||||
Items: Items,
|
Items: Items,
|
||||||
Send: GoUtil.Now(),
|
Send: GoUtil.Now(),
|
||||||
|
Type: t,
|
||||||
}
|
}
|
||||||
return m.AutoId
|
return m.AutoId
|
||||||
}
|
}
|
||||||
@ -99,6 +104,7 @@ func (m *MailMod) BackData() *msg.ResMailList {
|
|||||||
Items: item.ItemToMsg(v.Items),
|
Items: item.ItemToMsg(v.Items),
|
||||||
Status: int32(v.Status),
|
Status: int32(v.Status),
|
||||||
Time: int32(v.Send),
|
Time: int32(v.Send),
|
||||||
|
Type: int32(v.Type),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res
|
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)
|
||||||
|
}
|
||||||
|
|||||||
@ -24,6 +24,8 @@ const (
|
|||||||
TRIGGER_LABEL_PLAYCAT = "PlayCat"
|
TRIGGER_LABEL_PLAYCAT = "PlayCat"
|
||||||
TRIGGER_LABEL_FEEDCAT = "FeedCat"
|
TRIGGER_LABEL_FEEDCAT = "FeedCat"
|
||||||
TRIGGER_LABEL_CLEANCAT = "CleanCat"
|
TRIGGER_LABEL_CLEANCAT = "CleanCat"
|
||||||
|
TRIGGER_LABEL_UPLV = "UpLv" // 升级
|
||||||
|
TRIGGER_LABEL_LOGIN = "Login" // 登录
|
||||||
)
|
)
|
||||||
|
|
||||||
type QuestProgress struct {
|
type QuestProgress struct {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user