赠送礼物

This commit is contained in:
hahwu 2025-04-01 11:18:22 +08:00
parent df19eaaf9f
commit 29fa052ae9
12 changed files with 941 additions and 850 deletions

View File

@ -12,6 +12,9 @@ import (
const ( const (
CFG_LOGIN_BACK = "LoginBack" CFG_LOGIN_BACK = "LoginBack"
CFG_MAIL = "Mail" CFG_MAIL = "Mail"
MAIL_RECALL_ID = 12
MAIL_CHARGE_SEND_ID = 13
) )
type TriggerMail struct { type TriggerMail struct {
@ -75,3 +78,13 @@ func GetRecallMail(Lang int, Title, ItemName string) (string, string) {
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content")) mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content"))
return fmt.Sprintf(mt, Title), fmt.Sprintf(mc, Title, ItemName) return fmt.Sprintf(mt, Title), fmt.Sprintf(mc, Title, ItemName)
} }
func GetChargeSendMail(Lang int, PlayerName string) (string, string) {
data, err := gamedata.GetDataByIntKey(CFG_MAIL, 12)
if err != nil {
return "", ""
}
mt := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content"))
return mt, fmt.Sprintf(mc, PlayerName)
}

View File

@ -56,18 +56,17 @@ type Parser struct {
// //
// Examples // Examples
// //
// // Standard parser without descriptors // // Standard parser without descriptors
// specParser := NewParser(Minute | Hour | Dom | Month | Dow) // specParser := NewParser(Minute | Hour | Dom | Month | Dow)
// sched, err := specParser.Parse("0 0 15 */3 *") // sched, err := specParser.Parse("0 0 15 */3 *")
// //
// // Same as above, just excludes time fields // // Same as above, just excludes time fields
// subsParser := NewParser(Dom | Month | Dow) // subsParser := NewParser(Dom | Month | Dow)
// sched, err := specParser.Parse("15 */3 *") // sched, err := specParser.Parse("15 */3 *")
//
// // Same as above, just makes Dow optional
// subsParser := NewParser(Dom | Month | DowOptional)
// sched, err := specParser.Parse("15 */3")
// //
// // Same as above, just makes Dow optional
// subsParser := NewParser(Dom | Month | DowOptional)
// sched, err := specParser.Parse("15 */3")
func NewParser(options ParseOption) Parser { func NewParser(options ParseOption) Parser {
optionals := 0 optionals := 0
if options&DowOptional > 0 { if options&DowOptional > 0 {
@ -193,7 +192,7 @@ func normalizeFields(fields []string, options ParseOption) ([]string, error) {
if min < max && len(fields) == min { if min < max && len(fields) == min {
switch { switch {
case options&DowOptional > 0: case options&DowOptional > 0:
fields = append(fields, defaults[5]) // TODO: improve access to default fields = append(fields, defaults[5])
case options&SecondOptional > 0: case options&SecondOptional > 0:
fields = append([]string{defaults[0]}, fields...) fields = append([]string{defaults[0]}, fields...)
default: default:
@ -247,7 +246,9 @@ func getField(field string, r bounds) (uint64, error) {
} }
// getRange returns the bits indicated by the given expression: // getRange returns the bits indicated by the given expression:
// number | number "-" number [ "/" number ] //
// number | number "-" number [ "/" number ]
//
// or error parsing range. // or error parsing range.
func getRange(expr string, r bounds) (uint64, error) { func getRange(expr string, r bounds) (uint64, error) {
var ( var (

View File

@ -434,10 +434,10 @@ func GetServerMailData(data *[]*SqlServerMailStruct) error {
return err return err
} }
func CreateOrderSn(Uid, ChargeId int, OrderSn, Platform, Channel string, Price float64, Currency string) error { func CreateOrderSn(Uid, ChargeId int, OrderSn, Platform, Channel string, Price float64, Currency, Extra string) error {
sql := "insert into t_player_charge (`Uid`,`OrderId`, `ProductId`, `Price`,`Currency`, `CreateTime`, `PayPlatform`, `PayChannel`) Values (?,?,?,?,?,?,?,?)" sql := "insert into t_player_charge (`Uid`,`OrderId`, `ProductId`, `Price`,`Currency`, `CreateTime`, `PayPlatform`, `PayChannel`, `PayChannelExtra`) Values (?,?,?,?,?,?,?,?,?)"
Now := GoUtil.Now() Now := GoUtil.Now()
_, err := SqlDb.Exec(sql, Uid, OrderSn, ChargeId, Price, Currency, Now, Platform, Channel) _, err := SqlDb.Exec(sql, Uid, OrderSn, ChargeId, Price, Currency, Now, Platform, Channel, Extra)
return err return err
} }

View File

@ -1,7 +1,10 @@
package game package game
import ( import (
"server/GoUtil"
activityCfg "server/conf/activity" activityCfg "server/conf/activity"
"server/game/mod/item"
MsgMod "server/game/mod/msg"
"server/game/mod/piggyBank" "server/game/mod/piggyBank"
"server/msg" "server/msg"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
@ -15,6 +18,15 @@ func Charge(p *Player, ChargeId int) {
ActivityFire(p, ChargeId) // 活动礼包 ActivityFire(p, ChargeId) // 活动礼包
} }
func SendCharge(p *Player, d *ChargeExtra) {
G_GameLogicPtr.FriendMgrSend(&MsgMod.Msg{
Type: MsgMod.HANDLE_TYPE_SEND_CHARGE,
To: int(d.Uid),
SendT: GoUtil.Now(),
Extra: d,
})
}
func ActivityFire(p *Player, ChargeId int) { func ActivityFire(p *Player, ChargeId int) {
ActivityMod := p.PlayMod.getActivityMod() ActivityMod := p.PlayMod.getActivityMod()
ActivityId := activityCfg.GetActivityGiftId(ChargeId) ActivityId := activityCfg.GetActivityGiftId(ChargeId)
@ -77,6 +89,12 @@ func ChargeFire(p *Player, ChargeId int) {
p.PushClientRes(ChargeMod.BackData()) p.PushClientRes(ChargeMod.BackData())
} }
func ChargeItem(p *Player, ChargeId int) []*item.Item {
ChargeMod := p.PlayMod.getChargeMod()
Item := ChargeMod.Fire(ChargeId)
return Item
}
// 处理玩家充值 // 处理玩家充值
func EndlessFire(p *Player, ChargeId int) { func EndlessFire(p *Player, ChargeId int) {
EndlessMod := p.PlayMod.getEndlessMod() EndlessMod := p.PlayMod.getEndlessMod()

View File

@ -793,6 +793,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqFriendTreasureFilp", ReqFriendTreasureFilp) // 翻牌 RegisterMsgProcessFunc("ReqFriendTreasureFilp", ReqFriendTreasureFilp) // 翻牌
RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 结束游戏 RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 结束游戏
// #region 充值
RegisterMsgProcessFunc("ReqKafkaLog", ReqKafkaLog) // 客户端日志 RegisterMsgProcessFunc("ReqKafkaLog", ReqKafkaLog) // 客户端日志
RegisterMsgProcessFunc("ReqCreateOrderSn", ReqCreateOrderSn) // 创建订单号 RegisterMsgProcessFunc("ReqCreateOrderSn", ReqCreateOrderSn) // 创建订单号
RegisterMsgProcessFunc("ReqShippingOrder", ReqShippingOrder) // 获取订单号 RegisterMsgProcessFunc("ReqShippingOrder", ReqShippingOrder) // 获取订单号

View File

@ -132,7 +132,6 @@ func handle(p *Player, m *msg.Msg) error {
}, },
) )
p.PushClientRes(CardMod.NotifyTimes()) p.PushClientRes(CardMod.NotifyTimes())
// p.PushClientRes(CardMod.NotifyCard())
case msg.HANDLE_TYPE_REG_CARD_REFUSE: // A收到B拒绝索要卡牌 case msg.HANDLE_TYPE_REG_CARD_REFUSE: // A收到B拒绝索要卡牌
CardInfo := m.Extra.(card.CardInfo) CardInfo := m.Extra.(card.CardInfo)
CardMod := p.PlayMod.getCardMod() CardMod := p.PlayMod.getCardMod()
@ -229,6 +228,18 @@ func handle(p *Player, m *msg.Msg) error {
p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK, data.Type) p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK, data.Type)
case msg.HANDLE_TYPE_HANDBOOK_UPVOTE: // 图鉴点赞 case msg.HANDLE_TYPE_HANDBOOK_UPVOTE: // 图鉴点赞
p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK_UPVOTE, "") p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK_UPVOTE, "")
case msg.HANDLE_TYPE_SEND_CHARGE:
C := &ChargeExtra{}
if m.Extra != nil {
C = m.Extra.(*ChargeExtra)
}
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, "")
MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod()
mt, mc := mailCfg.GetChargeSendMail(BaseMod.GetLang(), PlayerSimpleData.Name)
Items := ChargeItem(p, C.ChargeId)
MailMod.Send(mt, mc, Items, mail.MAIL_TYPE_NORMAL)
default: default:
log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type) log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type)
} }
@ -412,12 +423,17 @@ func ClusterSendMsg(ServerId int, m *msg.Msg) {
} }
// 创建订单 // 创建订单
func CreateOrderSn(p *Player, ChargeId int, Platform, Channel string) (string, error) { func CreateOrderSn(p *Player, req *proto.ReqCreateOrderSn) (string, error) {
Uid := int(p.M_DwUin) Uid := int(p.M_DwUin)
OrderSn := GoUtil.CreateOrderSn(Uid) OrderSn := GoUtil.CreateOrderSn(Uid)
Price, Currency := chargeCfg.GetChargeInfo(ChargeId) Price, Currency := chargeCfg.GetChargeInfo(int(req.ChargeId))
err := db.CreateOrderSn(Uid, ChargeId, OrderSn, Platform, Channel, Price, Currency) Extra := &ChargeExtra{
Type: int(req.Type),
Uid: req.Uid,
}
ExtraData, _ := json.Marshal(Extra)
err := db.CreateOrderSn(Uid, int(req.ChargeId), OrderSn, req.PlatForm, req.Channel, Price, Currency, string(ExtraData))
if err != nil { if err != nil {
return "", err return "", err
} }

View File

@ -2376,7 +2376,7 @@ func ReqPiggyBankReward(player *Player, buf []byte) error {
func ReqCreateOrderSn(player *Player, buf []byte) error { func ReqCreateOrderSn(player *Player, buf []byte) error {
req := &msg.ReqCreateOrderSn{} req := &msg.ReqCreateOrderSn{}
proto.Unmarshal(buf, req) proto.Unmarshal(buf, req)
OrderSn, err := CreateOrderSn(player, int(req.ChargeId), req.PlatForm, req.Channel) OrderSn, err := CreateOrderSn(player, req)
if err != nil { if err != nil {
return err return err
} }

View File

@ -1,6 +1,7 @@
package game package game
import ( import (
"encoding/json"
"math" "math"
"server/GoUtil" "server/GoUtil"
"server/MergeConst" "server/MergeConst"
@ -115,7 +116,20 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId) log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId)
player.lock.Lock() player.lock.Lock()
defer player.lock.Unlock() defer player.lock.Unlock()
Charge(player, int(OrderData.ProductId)) OrderExtraData := &ChargeExtra{}
if OrderData.PayChannelExtra != "" {
err = json.Unmarshal([]byte(OrderData.PayChannelExtra), OrderExtraData)
if err != nil {
log.Debug("GoogleVerify err:%v", err)
return
}
OrderExtraData.ChargeId = OrderData.ProductId
}
if OrderExtraData.Type == 0 {
Charge(player, int(OrderData.ProductId))
} else {
SendCharge(player, OrderExtraData)
}
OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP
db.UpdatePlayerChargeData(OrderData) db.UpdatePlayerChargeData(OrderData)
player.PlayMod.save() player.PlayMod.save()

View File

@ -54,6 +54,12 @@ type ActivityInfo struct {
Info interface{} Info interface{}
} }
type ChargeExtra struct {
Type int // 充值类型
Uid int64 // 充值用户
ChargeId int // 充值id
}
func init() { func init() {
gob.Register(&limitedTimeEvent.MoneyCat{}) gob.Register(&limitedTimeEvent.MoneyCat{})
gob.Register(&limitedTimeEvent.LuckyCat{}) gob.Register(&limitedTimeEvent.LuckyCat{})

View File

@ -40,6 +40,7 @@ const (
LOG_TYPE_PLAYROOM_VISIT = 15 // 拜访玩家 LOG_TYPE_PLAYROOM_VISIT = 15 // 拜访玩家
LOG_TYPE_HANDBOOK = 16 // 图鉴收集 LOG_TYPE_HANDBOOK = 16 // 图鉴收集
LOG_TYPE_HANDBOOK_UPVOTE = 17 // 图鉴点赞 LOG_TYPE_HANDBOOK_UPVOTE = 17 // 图鉴点赞
LOG_TYPE_CHARGE_SEND = 18 // 赠送充值礼物
) )
const ( const (

View File

@ -74,6 +74,8 @@ const (
HANDLE_TYPE_HANDBOOK_COLLECTION //图鉴收集 HANDLE_TYPE_HANDBOOK_COLLECTION //图鉴收集
HANDLE_TYPE_HANDBOOK_UPVOTE //图鉴收集时间线点赞 HANDLE_TYPE_HANDBOOK_UPVOTE //图鉴收集时间线点赞
HANDLE_TYPE_SEND_CHARGE //赠送充值
) )
const ( const (

File diff suppressed because it is too large Load Diff