邮件触发
This commit is contained in:
parent
f527918672
commit
496940caa3
@ -25,7 +25,12 @@ type EventObj struct {
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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)
|
||||
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
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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,
|
||||
})
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -8,9 +8,10 @@ import (
|
||||
)
|
||||
|
||||
type MailMod struct {
|
||||
List map[int]*MailInfo // 邮件列表
|
||||
AutoId int // 自增id
|
||||
ServerMail []int
|
||||
List map[int]*MailInfo // 邮件列表
|
||||
AutoId int // 自增id
|
||||
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)
|
||||
}
|
||||
|
||||
@ -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
Loading…
Reference in New Issue
Block a user