多语言邮件

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"
"server/game/mod/item"
"server/gamedata"
"server/msg"
"server/pkg/github.com/name5566/leaf/log"
"strconv"
)
@ -99,10 +100,10 @@ func GetAcitivityRewardItems(ActId int) []*item.Item {
return nil
}
func GetActivityTitle(ActId, Lang int) string {
func GetActivityTitle(ActId int) (string, string) {
data, err := gamedata.GetDataByIntKey(CFG_ACTIVITY, ActId)
if err != nil {
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 (
languageCfg "server/conf/language"
"server/gamedata"
"server/msg"
"server/pkg/github.com/name5566/leaf/log"
"strconv"
"strings"
@ -48,11 +49,11 @@ func GetItemEffectList(Id int) []int {
return res
}
func GetItemName(Id, Lang int) string {
func GetItemName(Id int) (string, string) {
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
if err != nil {
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
import "server/gamedata"
const (
CFG_LANGUAGE = "languageData"
import (
"server/gamedata"
"server/msg"
)
const (
LANGUAGE_EN = 1
LANGUAGE_CN = 2
CFG_LANGUAGE = "languageData"
)
func init() {
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)
if err != nil {
return key
}
switch lang {
case LANGUAGE_EN:
case msg.LANG_TYPE_LANG_EN:
return gamedata.GetStringValue(data, "English")
default:
return key

View File

@ -6,6 +6,7 @@ import (
languageCfg "server/conf/language"
"server/game/mod/item"
"server/gamedata"
"server/msg"
"strings"
)
@ -70,32 +71,38 @@ func GetTriggerMail() []*TriggerMail {
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)
if err != nil {
return "", ""
return "", "", "", ""
}
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, Title), fmt.Sprintf(mc, Title, ItemName)
mt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "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, 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)
if err != nil {
return "", ""
return "", "", "", ""
}
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content"))
return mt, fmt.Sprintf(mc, PlayerName)
mt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "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 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)
if err != nil {
return "", ""
return "", "", "", ""
}
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, PlayerName), fmt.Sprintf(mc, Content)
mt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, gamedata.GetStringValue(data, "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"`
Title string `db:"title"`
Content string `db:"content"`
TitleEn string `db:"title_en"`
ContentEn string `db:"content_en"`
Items string `db:"items"`
Start_time int64 `db:"start_time"`
Register_time int64 `db:"register_time"`

View File

@ -15,12 +15,7 @@ import (
// 活动模块 登录
func ActivityLogin(p *Player) {
ItemMod := p.PlayMod.getItemMod()
MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod()
Lang := BaseMod.GetLang()
// 挖矿
ActivityId := GetActivityId(p, ACT_TYPE_MINING)
MiningMod := p.PlayMod.getMiningMod()
@ -30,11 +25,7 @@ func ActivityLogin(p *Player) {
ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum)
ItemName := itemCfg.GetItemName(ItemId, Lang)
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)
SendActivityMail(p, ItemId, ItemNum, ActivityId)
}
}
// 猜颜色
@ -46,11 +37,7 @@ func ActivityLogin(p *Player) {
ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum)
ItemName := itemCfg.GetItemName(ItemId, Lang)
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)
SendActivityMail(p, ItemId, ItemNum, ActivityId)
}
}
@ -63,15 +50,20 @@ func ActivityLogin(p *Player) {
ItemNum := ItemMod.GetItem(ItemId)
if ItemNum != 0 {
ItemMod.AddItem(ItemId, -ItemNum)
ItemName := itemCfg.GetItemName(ItemId, Lang)
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)
SendActivityMail(p, ItemId, ItemNum, ActivityId)
}
}
}
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)}
MailMod.Send(mt, mc, mt_en, mc_en, Items, mail.MAIL_TYPE_NORMAL)
}
// 活动模块 零点更新
func ActivityZeroUpdate(p *Player) {
ActivityInfo := GetActivityInfo(p, ACT_TYPE_MINING)

View File

@ -27,6 +27,8 @@ type ServerMail struct {
Id int
Title string
Content string
TitleEn string
ContentEn string
Items []*item.Item
Start_time int64
Register_time int64
@ -71,6 +73,8 @@ func (r *MailMgr) LoadMail(msg *msg.Msg) (interface{}, error) {
Id: v.Id,
Title: v.Title,
Content: v.Content,
TitleEn: v.TitleEn,
ContentEn: v.ContentEn,
Items: item.ParseItem(items),
Start_time: v.Start_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)
MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod()
mt, mc := mailCfg.GetChargeSendMail(BaseMod.GetLang(), PlayerSimpleData.Name)
mt, mc, mt_en, mc_en := mailCfg.GetChargeSendMail(PlayerSimpleData.Name)
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.PushClientRes(MailMod.BackData())
case msg.HANDLE_TYPE_CHARGE_RECEIVE: // 收到好友的感谢信
@ -248,9 +247,8 @@ func handle(p *Player, m *msg.Msg) error {
}
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod()
mt, mc := mailCfg.GetChargeReceiveMail(BaseMod.GetLang(), PlayerSimpleData.Name, Content)
MailId := MailMod.Send(mt, mc, nil, mail.MAIL_TYPE_NORMAL)
mt, mc, mt_en, mc_en := mailCfg.GetChargeReceiveMail(PlayerSimpleData.Name, Content)
MailId := MailMod.Send(mt, mc, mt_en, mc_en, nil, mail.MAIL_TYPE_NORMAL)
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", MailId))
p.PushClientRes(MailMod.BackData())
case msg.HANDLE_TYPE_WISHLIST_SEND: // 发送愿望单请求
@ -365,7 +363,7 @@ func SyncMailMsg(p *Player) {
continue
}
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",
`Welcome back to our game!
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)
}
BaseMod.LoginBack = true

View File

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

View File

@ -49,7 +49,9 @@ func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
if checkTriggerCondition(player, v.Trigger) {
Title := languageCfg.GetLanguage(BaseMod.Lang, v.Title)
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)
tr = true
}

View File

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

View File

@ -26,13 +26,15 @@ const (
)
type MailInfo struct {
Title string // 邮件标题
Content string // 邮件内容
Items []*item.Item // 邮件道具
Type int //邮件类型
Send int64 // 发送时间
Del int64 // 删除时间
Status int
Title string // 邮件标题
Content string // 邮件内容
TitleEn string // 邮件标题英文
ContentEn string // 邮件内容英文
Items []*item.Item // 邮件道具
Type int //邮件类型
Send int64 // 发送时间
Del int64 // 删除时间
Status int
}
func (m *MailMod) InitData() {
@ -42,14 +44,16 @@ 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.List[m.AutoId] = &MailInfo{
Title: Title,
Content: Content,
Items: Items,
Send: GoUtil.Now(),
Type: t,
Title: Title,
Content: Content,
TitleEn: TitleEn,
ContentEn: ContentEn,
Items: Items,
Send: GoUtil.Now(),
Type: t,
}
return m.AutoId
}
@ -99,13 +103,15 @@ func (m *MailMod) BackData() *msg.ResMailList {
}
for k, v := range m.List {
res.MailList[int32(k)] = &msg.MailInfo{
Id: int32(k),
Title: v.Title,
Content: v.Content,
Items: item.ItemToMsg(v.Items),
Status: int32(v.Status),
Time: int32(v.Send),
Type: int32(v.Type),
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

File diff suppressed because it is too large Load Diff