144 lines
3.0 KiB
Go
144 lines
3.0 KiB
Go
package mail
|
|
|
|
import (
|
|
"fmt"
|
|
"server/GoUtil"
|
|
"server/game/mod/item"
|
|
"server/msg"
|
|
)
|
|
|
|
type MailMod struct {
|
|
List map[int]*MailInfo // 邮件列表
|
|
AutoId int // 自增id
|
|
ServerMail []int // 后台邮件
|
|
TriggerMail []int // 触发邮件
|
|
}
|
|
|
|
const (
|
|
MAIL_STATUS_IDLE = 0
|
|
MAIL_STATUS_READ = 1
|
|
MAIL_STATUS_REWARD = 2
|
|
MAIL_STATUS_DEL = 3
|
|
|
|
MAIL_TYPE_NORMAL = 1
|
|
MAIL_TYPE_FESTIVAL = 2
|
|
MAIL_TYPE_GIFT = 3
|
|
)
|
|
|
|
type MailInfo struct {
|
|
Title string // 邮件标题
|
|
Content string // 邮件内容
|
|
TitleEn string // 邮件标题英文
|
|
ContentEn string // 邮件内容英文
|
|
Items []*item.Item // 邮件道具
|
|
Type int //邮件类型
|
|
Send int64 // 发送时间
|
|
Del int64 // 删除时间
|
|
Status int
|
|
}
|
|
|
|
func (m *MailMod) InitData() {
|
|
if m.List == nil {
|
|
m.List = make(map[int]*MailInfo)
|
|
}
|
|
}
|
|
|
|
// 发送邮件
|
|
func (m *MailMod) Send(Title, Content, TitleEn, ContentEn string, Items []*item.Item, t int) int {
|
|
m.AutoId++
|
|
m.List[m.AutoId] = &MailInfo{
|
|
Title: Title,
|
|
Content: Content,
|
|
TitleEn: TitleEn,
|
|
ContentEn: ContentEn,
|
|
Items: Items,
|
|
Send: GoUtil.Now(),
|
|
Type: t,
|
|
}
|
|
return m.AutoId
|
|
}
|
|
|
|
// 阅读邮件
|
|
func (m *MailMod) Read(id int) error {
|
|
v, ok := m.List[id]
|
|
if !ok {
|
|
return fmt.Errorf("mail id %d not exist", id)
|
|
}
|
|
if v.Status == MAIL_STATUS_IDLE {
|
|
v.Status = MAIL_STATUS_READ
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// 领取邮件奖励
|
|
func (m *MailMod) Reward(id int) ([]*item.Item, error) {
|
|
v, ok := m.List[id]
|
|
if !ok {
|
|
return nil, fmt.Errorf("mail id %d not exist", id)
|
|
}
|
|
if v.Status != MAIL_STATUS_IDLE {
|
|
return nil, fmt.Errorf("mail not readed")
|
|
}
|
|
v.Status = MAIL_STATUS_REWARD
|
|
return v.Items, nil
|
|
}
|
|
|
|
// 删除邮件
|
|
func (m *MailMod) Del(id int) error {
|
|
v, ok := m.List[id]
|
|
if !ok {
|
|
return fmt.Errorf("mail id %d not exist", id)
|
|
}
|
|
if v.Status == MAIL_STATUS_DEL {
|
|
return fmt.Errorf("mail have readed")
|
|
}
|
|
v.Status = MAIL_STATUS_DEL
|
|
v.Del = GoUtil.Now()
|
|
return nil
|
|
}
|
|
|
|
func (m *MailMod) BackData() *msg.ResMailList {
|
|
res := &msg.ResMailList{
|
|
MailList: make(map[int32]*msg.MailInfo),
|
|
}
|
|
for k, v := range m.List {
|
|
if v.Status == MAIL_STATUS_DEL {
|
|
continue
|
|
}
|
|
res.MailList[int32(k)] = &msg.MailInfo{
|
|
Id: int32(k),
|
|
Title: v.Title,
|
|
Content: v.Content,
|
|
TitleEn: v.TitleEn,
|
|
ContentEn: v.ContentEn,
|
|
Items: item.ItemToMsg(v.Items),
|
|
Status: int32(v.Status),
|
|
Time: int32(v.Send),
|
|
Type: int32(v.Type),
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func (m *MailMod) NotifyMail(Id int) *msg.MailNotify {
|
|
mailInfo := m.List[Id]
|
|
return &msg.MailNotify{
|
|
Info: &msg.MailInfo{
|
|
Id: int32(Id),
|
|
Title: mailInfo.Title,
|
|
Content: mailInfo.Content,
|
|
Items: item.ItemToMsg(mailInfo.Items),
|
|
Status: int32(mailInfo.Status),
|
|
Time: int32(mailInfo.Send),
|
|
},
|
|
}
|
|
}
|
|
|
|
func (m *MailMod) GetTriggerMail() []int {
|
|
return m.TriggerMail
|
|
}
|
|
|
|
func (m *MailMod) AddTriggerMail(i int) {
|
|
m.TriggerMail = append(m.TriggerMail, i)
|
|
}
|