多语言邮件

This commit is contained in:
hahwu 2025-04-10 11:38:53 +08:00
parent 6c33c83033
commit 8ffd149d12
13 changed files with 2745 additions and 2662 deletions

View File

@ -5,6 +5,7 @@ import (
languageCfg "server/conf/language" languageCfg "server/conf/language"
"server/game/mod/item" "server/game/mod/item"
"server/gamedata" "server/gamedata"
"server/msg"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"strconv" "strconv"
) )
@ -99,10 +100,10 @@ func GetAcitivityRewardItems(ActId int) []*item.Item {
return nil return nil
} }
func GetActivityTitle(ActId, Lang int) string { func GetActivityTitle(ActId int) (string, string) {
data, err := gamedata.GetDataByIntKey(CFG_ACTIVITY, ActId) data, err := gamedata.GetDataByIntKey(CFG_ACTIVITY, ActId)
if err != nil { if err != nil {
log.Debug("GetActivityTitle err:%v", err) log.Debug("GetActivityTitle err:%v", err)
} }
return languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title")) return languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title")), languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Title"))
} }

View File

@ -3,6 +3,7 @@ package itemCfg
import ( import (
languageCfg "server/conf/language" languageCfg "server/conf/language"
"server/gamedata" "server/gamedata"
"server/msg"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"strconv" "strconv"
"strings" "strings"
@ -48,11 +49,11 @@ func GetItemEffectList(Id int) []int {
return res return res
} }
func GetItemName(Id, Lang int) string { func GetItemName(Id int) (string, string) {
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id) data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
if err != nil { if err != nil {
log.Debug("ItemCfg GetItemName Id:%v not found", Id) log.Debug("ItemCfg GetItemName Id:%v not found", Id)
return "" return "", ""
} }
return languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Name")) return languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Name")), languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Name"))
} }

View File

@ -1,27 +1,25 @@
package languageCfg package languageCfg
import "server/gamedata" import (
"server/gamedata"
const ( "server/msg"
CFG_LANGUAGE = "languageData"
) )
const ( const (
LANGUAGE_EN = 1 CFG_LANGUAGE = "languageData"
LANGUAGE_CN = 2
) )
func init() { func init() {
gamedata.InitCfg(CFG_LANGUAGE) gamedata.InitCfg(CFG_LANGUAGE)
} }
func GetLanguage(lang int, key string) string { func GetLanguage(lang msg.LANG_TYPE, key string) string {
data, err := gamedata.GetDataByKey(CFG_LANGUAGE, key) data, err := gamedata.GetDataByKey(CFG_LANGUAGE, key)
if err != nil { if err != nil {
return key return key
} }
switch lang { switch lang {
case LANGUAGE_EN: case msg.LANG_TYPE_LANG_EN:
return gamedata.GetStringValue(data, "English") return gamedata.GetStringValue(data, "English")
default: default:
return key return key

View File

@ -6,6 +6,7 @@ import (
languageCfg "server/conf/language" languageCfg "server/conf/language"
"server/game/mod/item" "server/game/mod/item"
"server/gamedata" "server/gamedata"
"server/msg"
"strings" "strings"
) )
@ -70,32 +71,38 @@ func GetTriggerMail() []*TriggerMail {
return ret return ret
} }
func GetRecallMail(Lang int, Title, ItemName string) (string, string) { func GetRecallMail(Title, ItemName, TitleEn, ItemNameEn string) (string, string, string, string) {
data, err := gamedata.GetDataByIntKey(CFG_MAIL, 12) data, err := gamedata.GetDataByIntKey(CFG_MAIL, 12)
if err != nil { if err != nil {
return "", "" return "", "", "", ""
} }
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title")) mt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content")) mc := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, Title), fmt.Sprintf(mc, Title, ItemName) mt_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Title"))
mc_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, Title), fmt.Sprintf(mc, Title, ItemName), fmt.Sprintf(mt_en, TitleEn), fmt.Sprintf(mc_en, Title, ItemNameEn)
} }
func GetChargeSendMail(Lang int, PlayerName string) (string, string) { func GetChargeSendMail(PlayerName string) (string, string, string, string) {
data, err := gamedata.GetDataByIntKey(CFG_MAIL, MAIL_CHARGE_SEND_ID) data, err := gamedata.GetDataByIntKey(CFG_MAIL, MAIL_CHARGE_SEND_ID)
if err != nil { if err != nil {
return "", "" return "", "", "", ""
} }
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title")) mt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content")) mc := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Content"))
return mt, fmt.Sprintf(mc, PlayerName) mt_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Title"))
mc_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Content"))
return mt, fmt.Sprintf(mc, PlayerName), mt_en, fmt.Sprintf(mc_en, PlayerName)
} }
func GetChargeReceiveMail(Lang int, PlayerName string, Content string) (string, string) { func GetChargeReceiveMail(PlayerName string, Content string) (string, string, string, string) {
data, err := gamedata.GetDataByIntKey(CFG_MAIL, MAIL_CHARGE_RECEIVE_ID) data, err := gamedata.GetDataByIntKey(CFG_MAIL, MAIL_CHARGE_RECEIVE_ID)
if err != nil { if err != nil {
return "", "" return "", "", "", ""
} }
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title")) mt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content")) mc := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, PlayerName), fmt.Sprintf(mc, Content) mt_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Title"))
mc_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, PlayerName), fmt.Sprintf(mc, Content), fmt.Sprintf(mt_en, PlayerName), fmt.Sprintf(mc_en, Content)
} }

View File

@ -475,6 +475,8 @@ type SqlServerMailStruct struct {
Id int `db:"mail_id"` Id int `db:"mail_id"`
Title string `db:"title"` Title string `db:"title"`
Content string `db:"content"` Content string `db:"content"`
TitleEn string `db:"title_en"`
ContentEn string `db:"content_en"`
Items string `db:"items"` Items string `db:"items"`
Start_time int64 `db:"start_time"` Start_time int64 `db:"start_time"`
Register_time int64 `db:"register_time"` Register_time int64 `db:"register_time"`

View File

@ -15,12 +15,7 @@ import (
// 活动模块 登录 // 活动模块 登录
func ActivityLogin(p *Player) { func ActivityLogin(p *Player) {
ItemMod := p.PlayMod.getItemMod() ItemMod := p.PlayMod.getItemMod()
MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod()
Lang := BaseMod.GetLang()
// 挖矿 // 挖矿
ActivityId := GetActivityId(p, ACT_TYPE_MINING) ActivityId := GetActivityId(p, ACT_TYPE_MINING)
MiningMod := p.PlayMod.getMiningMod() MiningMod := p.PlayMod.getMiningMod()
@ -30,11 +25,7 @@ func ActivityLogin(p *Player) {
ItemNum := ItemMod.GetItem(ItemId) ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 { if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum) ItemMod.AddItem(ItemId, -ItemNum)
ItemName := itemCfg.GetItemName(ItemId, Lang) SendActivityMail(p, ItemId, ItemNum, ActivityId)
ActivityTitle := activityCfg.GetActivityTitle(ActivityId, Lang)
mt, mc := mailCfg.GetRecallMail(Lang, ActivityTitle, ItemName)
Items := []*item.Item{item.NewItem(ItemId, ItemNum)}
MailMod.Send(mt, mc, Items, mail.MAIL_TYPE_NORMAL)
} }
} }
// 猜颜色 // 猜颜色
@ -46,11 +37,7 @@ func ActivityLogin(p *Player) {
ItemNum := ItemMod.GetItem(ItemId) ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 { if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum) ItemMod.AddItem(ItemId, -ItemNum)
ItemName := itemCfg.GetItemName(ItemId, Lang) SendActivityMail(p, ItemId, ItemNum, ActivityId)
ActivityTitle := activityCfg.GetActivityTitle(ActivityId, Lang)
mt, mc := mailCfg.GetRecallMail(Lang, ActivityTitle, ItemName)
Items := []*item.Item{item.NewItem(ItemId, ItemNum)}
MailMod.Send(mt, mc, Items, mail.MAIL_TYPE_NORMAL)
} }
} }
@ -63,13 +50,18 @@ func ActivityLogin(p *Player) {
ItemNum := ItemMod.GetItem(ItemId) ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 { if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum) ItemMod.AddItem(ItemId, -ItemNum)
ItemName := itemCfg.GetItemName(ItemId, Lang) SendActivityMail(p, ItemId, ItemNum, ActivityId)
ActivityTitle := activityCfg.GetActivityTitle(ActivityId, Lang) }
mt, mc := mailCfg.GetRecallMail(Lang, ActivityTitle, ItemName) }
}
func SendActivityMail(p *Player, ItemId, ItemNum, ActivityId int) {
MailMod := p.PlayMod.getMailMod()
ItemName, ItemNameEn := itemCfg.GetItemName(ItemId)
ActivityTitle, ActivityTitleEn := activityCfg.GetActivityTitle(ActivityId)
mt, mc, mt_en, mc_en := mailCfg.GetRecallMail(ActivityTitle, ActivityTitleEn, ItemName, ItemNameEn)
Items := []*item.Item{item.NewItem(ItemId, ItemNum)} Items := []*item.Item{item.NewItem(ItemId, ItemNum)}
MailMod.Send(mt, mc, Items, mail.MAIL_TYPE_NORMAL) MailMod.Send(mt, mc, mt_en, mc_en, Items, mail.MAIL_TYPE_NORMAL)
}
}
} }
// 活动模块 零点更新 // 活动模块 零点更新

View File

@ -27,6 +27,8 @@ type ServerMail struct {
Id int Id int
Title string Title string
Content string Content string
TitleEn string
ContentEn string
Items []*item.Item Items []*item.Item
Start_time int64 Start_time int64
Register_time int64 Register_time int64
@ -71,6 +73,8 @@ func (r *MailMgr) LoadMail(msg *msg.Msg) (interface{}, error) {
Id: v.Id, Id: v.Id,
Title: v.Title, Title: v.Title,
Content: v.Content, Content: v.Content,
TitleEn: v.TitleEn,
ContentEn: v.ContentEn,
Items: item.ParseItem(items), Items: item.ParseItem(items),
Start_time: v.Start_time, Start_time: v.Start_time,
Register_time: v.Register_time, Register_time: v.Register_time,

View File

@ -235,10 +235,9 @@ func handle(p *Player, m *msg.Msg) error {
} }
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
MailMod := p.PlayMod.getMailMod() MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod() mt, mc, mt_en, mc_en := mailCfg.GetChargeSendMail(PlayerSimpleData.Name)
mt, mc := mailCfg.GetChargeSendMail(BaseMod.GetLang(), PlayerSimpleData.Name)
Items := ChargeItem(p, C.ChargeId) Items := ChargeItem(p, C.ChargeId)
MailId := MailMod.Send(mt, mc, Items, mail.MAIL_TYPE_GIFT) MailId := MailMod.Send(mt, mc, mt_en, mc_en, Items, mail.MAIL_TYPE_GIFT)
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", MailId)) p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", MailId))
p.PushClientRes(MailMod.BackData()) p.PushClientRes(MailMod.BackData())
case msg.HANDLE_TYPE_CHARGE_RECEIVE: // 收到好友的感谢信 case msg.HANDLE_TYPE_CHARGE_RECEIVE: // 收到好友的感谢信
@ -248,9 +247,8 @@ func handle(p *Player, m *msg.Msg) error {
} }
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
MailMod := p.PlayMod.getMailMod() MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod() mt, mc, mt_en, mc_en := mailCfg.GetChargeReceiveMail(PlayerSimpleData.Name, Content)
mt, mc := mailCfg.GetChargeReceiveMail(BaseMod.GetLang(), PlayerSimpleData.Name, Content) MailId := MailMod.Send(mt, mc, mt_en, mc_en, nil, mail.MAIL_TYPE_NORMAL)
MailId := MailMod.Send(mt, mc, nil, mail.MAIL_TYPE_NORMAL)
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", MailId)) p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", MailId))
p.PushClientRes(MailMod.BackData()) p.PushClientRes(MailMod.BackData())
case msg.HANDLE_TYPE_WISHLIST_SEND: // 发送愿望单请求 case msg.HANDLE_TYPE_WISHLIST_SEND: // 发送愿望单请求
@ -365,7 +363,7 @@ func SyncMailMsg(p *Player) {
continue continue
} }
MailMod.ServerMail = append(MailMod.ServerMail, v.Id) MailMod.ServerMail = append(MailMod.ServerMail, v.Id)
MailMod.Send(v.Title, v.Content, v.Items, v.Mail_type) MailMod.Send(v.Title, v.Content, v.TitleEn, v.ContentEn, v.Items, v.Mail_type)
} }
} }
@ -911,6 +909,9 @@ func LoignBack(p *Player) {
MailMod.Send("Test Players' Refund", MailMod.Send("Test Players' Refund",
`Welcome back to our game! `Welcome back to our game!
Here comes your refund for your scene progress and payment in test version! Here comes your refund for your scene progress and payment in test version!
Have fun in new version!`, "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, mail.MAIL_TYPE_NORMAL) Have fun in new version!`, Items, mail.MAIL_TYPE_NORMAL)
} }
BaseMod.LoginBack = true BaseMod.LoginBack = true

View File

@ -3942,7 +3942,7 @@ func ReqLang(player *Player, buf []byte) error {
req := &msg.ReqLang{} req := &msg.ReqLang{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
BaseMod := player.PlayMod.getBaseMod() BaseMod := player.PlayMod.getBaseMod()
BaseMod.SetLang(int(req.Lang)) BaseMod.SetLang(req.Lang)
player.PushClientRes(&msg.ResLang{ player.PushClientRes(&msg.ResLang{
ResultCode: msg.RES_CODE_SUCCESS, ResultCode: msg.RES_CODE_SUCCESS,
}) })

View File

@ -49,7 +49,9 @@ func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
if checkTriggerCondition(player, v.Trigger) { if checkTriggerCondition(player, v.Trigger) {
Title := languageCfg.GetLanguage(BaseMod.Lang, v.Title) Title := languageCfg.GetLanguage(BaseMod.Lang, v.Title)
Content := languageCfg.GetLanguage(BaseMod.Lang, v.Content) Content := languageCfg.GetLanguage(BaseMod.Lang, v.Content)
MailMod.Send(Title, Content, v.Items, mail.MAIL_TYPE_NORMAL) TitleEn := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, v.Title)
ContentEn := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, v.Content)
MailMod.Send(Title, Content, TitleEn, ContentEn, v.Items, mail.MAIL_TYPE_NORMAL)
MailMod.AddTriggerMail(v.Id) MailMod.AddTriggerMail(v.Id)
tr = true tr = true
} }

View File

@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"server/GoUtil" "server/GoUtil"
baseCfg "server/conf/base" baseCfg "server/conf/base"
languageCfg "server/conf/language"
"server/game/mod/item" "server/game/mod/item"
"server/msg" "server/msg"
) )
@ -37,7 +36,7 @@ type Base struct {
EnergyAD int // 每日看广告获得的能量次数 EnergyAD int // 每日看广告获得的能量次数
Seed bool Seed bool
Source int // 体力资源 Source int // 体力资源
Lang int // 语言 Lang msg.LANG_TYPE // 语言
} }
func (b *Base) InitData(Uid int) { func (b *Base) InitData(Uid int) {
@ -47,9 +46,6 @@ func (b *Base) InitData(Uid int) {
if b.NickName == "" { if b.NickName == "" {
b.NickName = fmt.Sprintf("Player_%d", Uid) b.NickName = fmt.Sprintf("Player_%d", Uid)
} }
if b.Lang == 0 {
b.Lang = languageCfg.LANGUAGE_EN
}
} }
func (b *Base) Login() { func (b *Base) Login() {
@ -190,11 +186,11 @@ func (b *Base) SetLogoutTime(LogoutTime int64) {
b.LogoutTime = LogoutTime b.LogoutTime = LogoutTime
} }
func (b *Base) GetLang() int { func (b *Base) GetLang() msg.LANG_TYPE {
return b.Lang return b.Lang
} }
func (b *Base) SetLang(lang int) { func (b *Base) SetLang(lang msg.LANG_TYPE) {
b.Lang = lang b.Lang = lang
} }
@ -220,7 +216,7 @@ func (b *Base) BackData() *msg.BaseInfo {
IsFirstBuy: b.IsFirstBuy, IsFirstBuy: b.IsFirstBuy,
EnergyBuy: int32(b.EnergyBuy), EnergyBuy: int32(b.EnergyBuy),
EnergyAD: int32(b.EnergyAD), EnergyAD: int32(b.EnergyAD),
Lang: int32(b.Lang), Lang: b.Lang,
} }
} }

View File

@ -28,6 +28,8 @@ const (
type MailInfo struct { type MailInfo struct {
Title string // 邮件标题 Title string // 邮件标题
Content string // 邮件内容 Content string // 邮件内容
TitleEn string // 邮件标题英文
ContentEn string // 邮件内容英文
Items []*item.Item // 邮件道具 Items []*item.Item // 邮件道具
Type int //邮件类型 Type int //邮件类型
Send int64 // 发送时间 Send int64 // 发送时间
@ -42,11 +44,13 @@ func (m *MailMod) InitData() {
} }
// 发送邮件 // 发送邮件
func (m *MailMod) Send(Title, Content string, Items []*item.Item, t int) int { func (m *MailMod) Send(Title, Content, TitleEn, ContentEn string, Items []*item.Item, t int) int {
m.AutoId++ m.AutoId++
m.List[m.AutoId] = &MailInfo{ m.List[m.AutoId] = &MailInfo{
Title: Title, Title: Title,
Content: Content, Content: Content,
TitleEn: TitleEn,
ContentEn: ContentEn,
Items: Items, Items: Items,
Send: GoUtil.Now(), Send: GoUtil.Now(),
Type: t, Type: t,
@ -102,6 +106,8 @@ func (m *MailMod) BackData() *msg.ResMailList {
Id: int32(k), Id: int32(k),
Title: v.Title, Title: v.Title,
Content: v.Content, Content: v.Content,
TitleEn: v.TitleEn,
ContentEn: v.ContentEn,
Items: item.ItemToMsg(v.Items), Items: item.ItemToMsg(v.Items),
Status: int32(v.Status), Status: int32(v.Status),
Time: int32(v.Send), Time: int32(v.Send),

File diff suppressed because it is too large Load Diff