pet_home_server/src/server/game/mod/mail/Mail.go
2025-04-10 11:38:53 +08:00

141 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 {
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)
}