diff --git a/src/server/db/SqlStruct.go b/src/server/db/SqlStruct.go index 9b641642..5ec60d02 100644 --- a/src/server/db/SqlStruct.go +++ b/src/server/db/SqlStruct.go @@ -481,6 +481,7 @@ type SqlServerMailStruct struct { End_time int64 `db:"end_time"` Mail_type int `db:"mail_type"` To_uids string `db:"to_uids"` + CreateTime int64 `db:"create_time"` } type SqlChargeOrderStruct struct { diff --git a/src/server/game/MailMgr.go b/src/server/game/MailMgr.go index 10fb83a8..c36d50af 100644 --- a/src/server/game/MailMgr.go +++ b/src/server/game/MailMgr.go @@ -9,6 +9,11 @@ import ( "strings" ) +const ( + MAIL_TYPE_SERVER = 1 + MAIL_TYPE_USER = 2 +) + type MailMgr struct { *ServerMod list map[int]*ServerMail @@ -39,6 +44,13 @@ func (m *MailMgr) Init() { // 注册处理函数 m.init() m.LoadMail() + m.RegisterHandler(msg.HANDLE_TYPE_MAIL_ADD, m.AddMail) +} + +func (m *MailMgr) AddMail(msg *msg.Msg) error { + ServerMail := msg.Extra.(*ServerMail) + m.list[ServerMail.Id] = ServerMail + return nil } func (r *MailMgr) LoadMail() { @@ -67,6 +79,27 @@ func (r *MailMgr) LoadMail() { } } -func (r *MailMgr) Sync() { - G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL, Extra: r.list[1]}) +func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail { + // 同步邮件 + Now := GoUtil.Now() + list := make([]ServerMail, 0) + for _, v := range r.list { + if v.Start_time > 0 && v.Start_time > Now { + continue + } + if v.End_time > 0 && v.End_time < Now { + continue + } + if v.Register_time > 0 && v.Register_time < Register { + continue + } + if v.Mail_type == MAIL_TYPE_SERVER { //全服邮件 + list = append(list, *v) + } else { + if GoUtil.InArray(Uid, v.To_uids) { + list = append(list, *v) + } + } + } + return list } diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index d800553f..357e3c85 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -426,6 +426,10 @@ func (p *PlayerBaseData) ClearData() bool { return true } +func (p *PlayerBaseData) GetRegisterTime() int64 { + return int64(p.Data.Rolecreatetime) +} + // 增加减少体力 func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error { BaseMod := p.p.PlayMod.getBaseMod() diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 90ee80da..603b9dda 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -322,6 +322,18 @@ func SyncFriendMsg(p *Player) { p.PlayMod.save() } +func SyncMailMsg(p *Player) { + ServerMailList := G_GameLogicPtr.MailMgr.Sync(int(p.M_DwUin), p.GetPlayerBaseMod().GetRegisterTime()) + MailMod := p.PlayMod.getMailMod() + for _, v := range ServerMailList { + if GoUtil.InArray(v.Id, MailMod.ServerMail) { + continue + } + MailMod.ServerMail = append(MailMod.ServerMail, v.Id) + MailMod.Send(v.Title, v.Content, v.Items) + } +} + // 返回好友信息 func FriendListBackData(p *Player) { FriendMod := p.PlayMod.getFriendMod() diff --git a/src/server/game/mod/mail/Mail.go b/src/server/game/mod/mail/Mail.go index 3e2b81de..0b97b468 100644 --- a/src/server/game/mod/mail/Mail.go +++ b/src/server/game/mod/mail/Mail.go @@ -8,8 +8,9 @@ import ( ) type MailMod struct { - List map[int]*MailInfo // 邮件列表 - AutoId int // 自增id + List map[int]*MailInfo // 邮件列表 + AutoId int // 自增id + ServerMail []int } const ( diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index d0684016..93e27d46 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -67,6 +67,8 @@ const ( SERVER_NOON_UPDATE // 12点更新 FRIEND_TREASURE_HANDLE //好友宝藏操作 + HANDLE_TYPE_MAIL_ADD //添加邮件 + ) const (