123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- package model
- import (
- "fmt"
- "strconv"
- "time"
- "github.com/spf13/cast"
- "xorm.io/xorm"
- )
- // MailStatus 表示邮件状态
- type MailStatus int
- const (
- MailStatusUnread MailStatus = iota
- MailStatusRead
- MailStatusClaimed
- )
- // 邮件文案类型
- const (
- MailTypeRank = 2
- MailTypeChapterLost = 3
- MailTypeEnergy = 4
- MailTypeMonthCardAward = 5
- MailTypeWarOrderAward = 6
- MailTypeShop = 7 //支付购买
- MailType7DayChallenge = 8
- MailTypeInviteeReward = 9 //被邀请奖励
- MailTypeOfflineStamina = 10 //离线体力
- MailTypeFirstCharge = 11 //首充奖励
- MailTypeDailyDeal = 12 //每日特惠
- MailTypeWeekTask = 13 //周任务奖励
- )
- type MailPersonal struct {
- Id int64
- PlayerId int64 `xorm:"BIGINT index 'playerId'"`
- MailType int64 `xorm:"Int 'type'"` //排行奖励
- Title string `xorm:"Varchar(255) 'title'"`
- Content string `xorm:"Varchar(1024) 'content'"`
- Extra []*DropedItem `xorm:"Text json 'extra'"`
- ExtraInfo map[string]string `xorm:"Text 'extraInfo'"`
- Sender string `xorm:"Varchar(255) 'sender'"`
- CreateTime time.Time `xorm:"created"`
- DisplayTime time.Time `xorm:"displayTime"`
- ExpireTime time.Time `xorm:"Varchar(255) 'expireTime'"`
- Status MailStatus `xorm:"Varchar(255) 'status'"`
- // Extra ExtraData `xorm:"Text json 'extra'"`
- // ExtraInfo string `xorm:"Text 'extraInfo'"`
- // DisplayTime time.Time `xorm:"displayTime"`
- // CreateTime time.Time `xorm:"created"`
- // ExpireTime time.Time `xorm:"DateTime 'expireTime'"`
- // ViewState int `xorm:"Int default(0) 'viewState'"` //阅读状态
- // DrawState int `xorm:"Int default(0) 'drawState'"` // 领取状态
- }
- func (m *MailPersonal) TableName() string {
- return "mailpersonal"
- }
- // val只能是string、int等通过 cast.ToString可以转换成string的类型
- func (m *MailPersonal) SetExtraInfo(key string, val any) {
- if m.ExtraInfo == nil {
- m.ExtraInfo = make(map[string]string)
- }
- m.ExtraInfo[key] = cast.ToString(val)
- }
- func (m *MailPersonal) GetExtraInfo(key string) string {
- return m.ExtraInfo[key]
- }
- func NewMailPersonal(playerId int64, mailType int64, lst []*DropedItem) *MailPersonal {
- lettle := new(MailPersonal)
- lettle.PlayerId = playerId
- lettle.MailType = mailType
- if len(lst) > 0 {
- lettle.Extra = append(lettle.Extra, lst...)
- }
- var expire time.Duration
- lettle.CreateTime = time.Now()
- if len(lst) > 0 {
- expire = time.Hour * 24 * 30
- } else {
- expire = time.Hour * 24 * 7
- }
- lettle.ExpireTime = lettle.CreateTime.Add(expire)
- return lettle
- }
- // type LetterExtraInfo struct {
- // Level int `json:"level"`
- // Rank int `json:"rank"`
- // ActName string `json:"functionName"`
- // }
- type DropedItem struct {
- Id int64 `json:"id"`
- Type int64 `json:"type"`
- Num int64 `json:"num"`
- }
- func SumDropedItem2(items map[string]*DropedItem, typ int64, id int64, num int64) {
- key := fmt.Sprintf("%v:%v", id, typ)
- if it, ok := items[key]; ok {
- it.Num += num
- } else {
- it := new(DropedItem)
- it.Id = id
- it.Type = typ
- it.Num = num
- items[key] = it
- }
- }
- func SumDropedMaterial(items map[int64]int64, news map[int64]int64) {
- for k, v := range news {
- items[k] += v
- }
- }
- func GetMapKeys[K comparable, V any](items map[K]V) []K {
- if len(items) == 0 {
- return nil
- }
- lst := make([]K, 0, len(items))
- for k := range items {
- lst = append(lst, k)
- }
- return lst
- }
- func GetMapValues[K comparable, V any](items map[K]V) []V {
- if len(items) == 0 {
- return nil
- }
- lst := make([]V, 0, len(items))
- for _, v := range items {
- lst = append(lst, v)
- }
- return lst
- }
- type LevelReward struct {
- Level int64 `json:"level"`
- Exp int64 `json:"exp"`
- Materials map[int64]int64 `json:"materials"`
- }
- type DropedBundle struct {
- Materials map[int64]int64 `json:"materials"`
- Heros map[int64]*GrowableHero `json:"heros"`
- Treasures map[int64]*GrowableTreasure `json:"treasures"`
- Runes map[int64]*BagRune `json:"runes"`
- Legends map[int64]int64 `json:"legends"`
- EmojisIds []int64 `json:"emojisIds"`
- LevelMaterials LevelReward `json:"levelMaterials"`
- HeroSkins []int64 `json:"heroSkins"`
- Converts map[int64]int64 `json:"-"` // 辅助查看,已统计到Materials
- }
- func NewDropedBundle() *DropedBundle {
- pi := new(DropedBundle)
- pi.Materials = make(map[int64]int64)
- pi.Heros = make(map[int64]*GrowableHero)
- pi.Treasures = make(map[int64]*GrowableTreasure)
- pi.Runes = make(map[int64]*BagRune)
- pi.Legends = make(map[int64]int64)
- pi.LevelMaterials.Materials = make(map[int64]int64)
- pi.Converts = make(map[int64]int64)
- return pi
- }
- func (pi *DropedBundle) SumMaterial(news map[int64]int64) {
- for k, v := range news {
- pi.Materials[k] += v
- }
- }
- func (pi *DropedBundle) SumConvert(news map[int64]int64) {
- for k, v := range news {
- pi.Converts[k] += v
- }
- }
- func (pi *DropedBundle) SumHero(news map[int64]*GrowableHero) {
- for k, v := range news {
- pi.Heros[k] = v
- }
- }
- func (pi *DropedBundle) SumTreasure(news map[int64]*GrowableTreasure) {
- for k, v := range news {
- pi.Treasures[k] = v
- }
- }
- func (pi *DropedBundle) SumRune(news map[int64]*BagRune) {
- for k, v := range news {
- pi.Runes[k] = v
- }
- }
- func (pi *DropedBundle) SumLegend(news map[int64]int64) {
- for k, v := range news {
- pi.Legends[k] += v
- }
- }
- func (pi *DropedBundle) SumLevelMaterial(news map[int64]int64) {
- for k, v := range news {
- pi.LevelMaterials.Materials[k] += v
- }
- }
- func (pi *DropedBundle) SumEmojisId(ids ...int64) {
- pi.EmojisIds = append(pi.EmojisIds, ids...)
- }
- func (pi *DropedBundle) GetMaterialNum(id int64) int64 {
- return pi.Materials[id]
- }
- func (pi *DropedBundle) SumHeroSkin(skinId int64) {
- pi.HeroSkins = append(pi.HeroSkins, skinId)
- }
- // func (pi *DropedBundle) SumHeadId(ids ...int64) {
- // pi.HeadIds = append(pi.HeadIds, ids...)
- // }
- // func (pi *DropedBundle) SumHeadFrameId(ids ...int64) {
- // pi.HeadFrameIds = append(pi.HeadFrameIds, ids...)
- // }
- // func (pi *DropedBundle) SumChatFrameId(ids ...int64) {
- // pi.ChatFrameIds = append(pi.ChatFrameIds, ids...)
- // }
- // func (m *Letter) QueryExist(eng *xorm.Engine) (bool, error) {
- // return false, nil
- // }
- // // 邮件立即插入,不是延迟插入
- // func (m *Letter) UpdateDB(eng *xorm.Engine) (int64, error) {
- // return eng.Where("playerid=?", m.PlayerId).MustCols("materials", "equipments", "calcItems", "startTick", "timeLen").Update(m)
- // }
- // func CopyLetter(old *Letter) *Letter {
- // new1, err := deepcopy.Copy(old)
- // if err != nil {
- // return nil
- // }
- // return new1.(*Letter)
- // }
- type MailGlobal struct {
- Id int64
- MailType int64 `xorm:"Int 'type'"`
- MaxPlayerId int64 `xorm:"BIGINT 'maxPlayerId'"`
- Title string `xorm:"Varchar(255) 'title'"`
- Content string `xorm:"Varchar(1024) 'content'"`
- Extra []*DropedItem `xorm:"Text json 'extra'"`
- ExtraInfo map[string]string `xorm:"Text 'extraInfo'"`
- CreateTime time.Time `xorm:"created"`
- ExpireTime time.Time `xorm:"DateTime 'expireTime'"`
- //
- }
- func (m *MailGlobal) TableName() string {
- return "mailglobal"
- }
- // 邮箱
- type MailPlayer struct {
- Id int64
- PlayerId int64 `xorm:"BIGINT index 'playerId'"`
- LastGlobalId int64 `xorm:"BIGINT 'lastGlobalId'"`
- LastLoadTick int64 `xorm:"-"`
- Letters []*MailPersonal `xorm:"-"`
- }
- func (m *MailPlayer) TableName() string {
- return "mailplayer"
- }
- func (m *MailPlayer) QueryExist(eng *xorm.Engine) (bool, error) {
- q := new(MailPlayer)
- q.PlayerId = m.PlayerId
- return eng.Exist(q)
- }
- func (m *MailPlayer) UpdateDB(eng *xorm.Engine) (int64, error) {
- return eng.Where("playerid=?", m.PlayerId).MustCols("lastGlobalId").Update(m)
- }
- func (m *MailPlayer) GetUniqueKey() string {
- return strconv.FormatInt(m.PlayerId, 10)
- }
- func (m *MailPlayer) IsDirty() bool {
- return (m.LastLoadTick == -1)
- }
- func CopyMailBox(old *MailPlayer) *MailPlayer {
- newIt := new(MailPlayer)
- *newIt = *old
- newIt.Letters = nil
- return newIt
- }
- // 邮件-Mail exported from 邮件.xlsx
- type Mail struct {
- Type int64 `json:"Type"` // 邮件类型 1-后台邮件
- Title string `json:"Title"` // 标题
- Content string `json:"Content"` // 内容
- }
|