心愿单

This commit is contained in:
hahwu 2025-04-01 16:21:43 +08:00
parent 0084b32f0f
commit 80d0aa0996
12 changed files with 2547 additions and 1935 deletions

View File

@ -177,6 +177,15 @@ func InArray(Id int, s []int) bool {
return false return false
} }
func InArray64(Id int64, s []int64) bool {
for _, v := range s {
if v == Id {
return true
}
}
return false
}
func InStringArray(Id string, s []string) bool { func InStringArray(Id string, s []string) bool {
for _, v := range s { for _, v := range s {
if v == Id { if v == Id {

View File

@ -206,6 +206,14 @@ func GetPiggyBankChargeId() int {
return gamedata.GetIntValue(data, "Value") return gamedata.GetIntValue(data, "Value")
} }
func GetWishCount() int {
data, err := gamedata.GetDataByKey(CFG_CHARGE_CONST, "wish_count")
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "Value")
}
func GetGiftReward(ChargeId int) []*item.Item { func GetGiftReward(ChargeId int) []*item.Item {
data, err := gamedata.GetData(CFG_CHARGE_GIFT) data, err := gamedata.GetData(CFG_CHARGE_GIFT)
if err != nil { if err != nil {

View File

@ -90,12 +90,12 @@ func GetChargeSendMail(Lang int, PlayerName string) (string, string) {
return mt, fmt.Sprintf(mc, PlayerName) return mt, fmt.Sprintf(mc, PlayerName)
} }
func GetChargeReceiveMail(Lang int, PlayerName string) (string, string) { func GetChargeReceiveMail(Lang int, PlayerName string, Content 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(Lang, gamedata.GetStringValue(data, "Title"))
mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content")) mc := languageCfg.GetLanguage(Lang, gamedata.GetStringValue(data, "Content"))
return mt, fmt.Sprintf(mc, PlayerName) return fmt.Sprintf(mt, PlayerName), fmt.Sprintf(mc, Content)
} }

View File

@ -67,6 +67,8 @@ func (f *FriendMgr) Init() {
f.RegisterHandler(msg.HANDLE_TYPE_HANDBOOK_UPVOTE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_HANDBOOK_UPVOTE, f.sendToPlayer)
f.RegisterHandler(msg.HANDLE_TYPE_SEND_CHARGE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_SEND_CHARGE, f.sendToPlayer)
f.RegisterHandler(msg.HANDLE_TYPE_CHARGE_RECEIVE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_CHARGE_RECEIVE, f.sendToPlayer)
f.RegisterHandler(msg.HANDLE_TYPE_WISHLIST_SEND, f.sendToPlayer)
f.RegisterHandler(msg.HANDLE_TYPE_WISHLIST_AGREE, f.sendToPlayer)
} }
func (f *FriendMgr) getData() *FirendData { func (f *FriendMgr) getData() *FirendData {

View File

@ -737,7 +737,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqBuyChessShop", ReqBuyChessShop) // 购买商店棋子 RegisterMsgProcessFunc("ReqBuyChessShop", ReqBuyChessShop) // 购买商店棋子
RegisterMsgProcessFunc("ReqBuyChessShop2", ReqBuyChessShop2) // 购买商店棋子直接加入棋盘 RegisterMsgProcessFunc("ReqBuyChessShop2", ReqBuyChessShop2) // 购买商店棋子直接加入棋盘
RegisterMsgProcessFunc("ReqRefreshChessShop", ReqRefreshChessShop) // 刷新棋子商店 RegisterMsgProcessFunc("ReqRefreshChessShop", ReqRefreshChessShop) // 刷新棋子商店
RegisterMsgProcessFunc("ReqAddWish", ReqAddWish) // 添加心愿单
RegisterMsgProcessFunc("ReqGetWish", ReqGetWish) // 领取心愿单奖励
RegisterMsgProcessFunc("ReqSendWishBeg", ReqSendWishBeg) // 发送心愿单请求
// 无尽礼包 // 无尽礼包
RegisterMsgProcessFunc("ReqEndless", ReqEndless) // 请求无尽礼包数据 RegisterMsgProcessFunc("ReqEndless", ReqEndless) // 请求无尽礼包数据
RegisterMsgProcessFunc("ReqEndlessReward", ReqEndlessReward) // 领取无尽礼包免费奖励 RegisterMsgProcessFunc("ReqEndlessReward", ReqEndlessReward) // 领取无尽礼包免费奖励

View File

@ -234,7 +234,6 @@ func handle(p *Player, m *msg.Msg) error {
C = m.Extra.(*ChargeExtra) C = m.Extra.(*ChargeExtra)
} }
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
MailMod := p.PlayMod.getMailMod() MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod() BaseMod := p.PlayMod.getBaseMod()
mt, mc := mailCfg.GetChargeSendMail(BaseMod.GetLang(), PlayerSimpleData.Name) mt, mc := mailCfg.GetChargeSendMail(BaseMod.GetLang(), PlayerSimpleData.Name)
@ -247,12 +246,16 @@ func handle(p *Player, m *msg.Msg) error {
if m.Extra != nil { if m.Extra != nil {
Content = m.Extra.(string) Content = m.Extra.(string)
} }
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
MailMod := p.PlayMod.getMailMod() MailMod := p.PlayMod.getMailMod()
BaseMod := p.PlayMod.getBaseMod() BaseMod := p.PlayMod.getBaseMod()
mt, mc := mailCfg.GetChargeSendMail(BaseMod.GetLang(), Content) mt, mc := mailCfg.GetChargeReceiveMail(BaseMod.GetLang(), PlayerSimpleData.Name, Content)
MailId := MailMod.Send(mt, mc, 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: // 发送愿望单请求
FriendMod := p.PlayMod.getFriendMod()
FriendMod.AddWishApply(int64(m.From))
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)
} }
@ -365,12 +368,13 @@ func SyncMailMsg(p *Player) {
func FriendListBackData(p *Player) { func FriendListBackData(p *Player) {
FriendMod := p.PlayMod.getFriendMod() FriendMod := p.PlayMod.getFriendMod()
var fl []*proto.ResPlayerSimple var fl []*proto.ResPlayerSimple
for k := range FriendMod.GetFriendList() { for k, v := range FriendMod.GetFriendList() {
if k == int(p.M_DwUin) { if k == int(p.M_DwUin) {
continue continue
} }
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k) ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
if ps != nil { if ps != nil {
ps.AddTime = v.AddTime
fl = append(fl, ps) fl = append(fl, ps)
} }
} }
@ -638,14 +642,14 @@ func PlayroomBackData(p *Player) {
} }
} }
Friend := FriendMod.GetFriendList() Friend := FriendMod.GetFriendList()
for _, v := range Friend { for k := range Friend {
ps := G_GameLogicPtr.GetSimplePlayerByUid(v) ps := G_GameLogicPtr.GetSimplePlayerByUid(k)
if ps == nil { if ps == nil {
continue continue
} }
Times, _ := PlayroomMod.GetVisitorInfo(v) Times, _ := PlayroomMod.GetVisitorInfo(k)
FriendList = append(FriendList, &proto.FriendRoom{ FriendList = append(FriendList, &proto.FriendRoom{
Uid: int64(v), Uid: int64(k),
Name: ps.Name, Name: ps.Name,
Face: int32(ps.Face), Face: int32(ps.Face),
Avatar: int32(ps.Avatar), Avatar: int32(ps.Avatar),

View File

@ -4005,3 +4005,88 @@ func ReqChargeReceive(player *Player, buf []byte) error {
}) })
return nil return nil
} }
func ReqAddWish(player *Player, buf []byte) error {
req := &msg.ReqAddWish{}
proto.Unmarshal(buf, req)
ChargeMod := player.PlayMod.getChargeMod()
Items, err := ChargeMod.AddWish(int(req.Id))
if err != nil {
player.SendErrClienRes(&msg.ResAddWish{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
if Items != nil {
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_AddWish.String())
if err != nil {
player.SendErrClienRes(&msg.ResAddWish{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
}
player.PlayMod.save()
player.PushClientRes(&msg.ResAddWish{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}
func ReqGetWish(player *Player, buf []byte) error {
req := &msg.ReqGetWish{}
proto.Unmarshal(buf, req)
ChargeMod := player.PlayMod.getChargeMod()
Items, err := ChargeMod.GetWish()
if err != nil {
player.SendErrClienRes(&msg.ResGetWish{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
if Items != nil {
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_GetWish.String())
if err != nil {
player.SendErrClienRes(&msg.ResGetWish{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
}
player.PlayMod.save()
player.PushClientRes(&msg.ResGetWish{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}
func ReqSendWishBeg(player *Player, buf []byte) error {
req := &msg.ReqSendWishBeg{}
proto.Unmarshal(buf, req)
ChargeMod := player.PlayMod.getChargeMod()
err := ChargeMod.SendWishBeg(req.Uid)
if err != nil {
player.SendErrClienRes(&msg.ResSendWishBeg{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
for _, v := range req.Uid {
FriendMgrSend(&MsqMod.Msg{
From: int(player.M_DwUin),
To: int(v),
Type: MsqMod.HANDLE_TYPE_WISHLIST_SEND,
SendT: GoUtil.Now(),
})
}
player.PlayMod.save()
player.PushClientRes(&msg.ResSendWishBeg{
Code: msg.RES_CODE_SUCCESS,
})
return nil
}

View File

@ -111,7 +111,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
} }
if OrderData == nil { if OrderData == nil {
log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s; OrderStatus:%d;", player.M_DwUin, OrderSn, req.ProduceId, OrderData.PayStatus) log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId)
return return
} }
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)

View File

@ -5,6 +5,7 @@ import (
"server/GoUtil" "server/GoUtil"
chargeCfg "server/conf/charge" chargeCfg "server/conf/charge"
mergeDataCfg "server/conf/mergeData" mergeDataCfg "server/conf/mergeData"
playroomCfg "server/conf/playroom"
"server/game/mod/item" "server/game/mod/item"
"server/msg" "server/msg"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
@ -27,6 +28,14 @@ type ChargeMod struct {
Gift map[int]int // 礼包 Gift map[int]int // 礼包
Ad bool // 是否购买免广告 Ad bool // 是否购买免广告
WishList *WishList
}
type WishList struct {
Count int
ItemId int
SendList []int64
} }
type Rand struct { type Rand struct {
ChessId int ChessId int
@ -66,6 +75,13 @@ func (c *ChargeMod) InitData() {
if c.Gift == nil { if c.Gift == nil {
c.Gift = make(map[int]int) c.Gift = make(map[int]int)
} }
if c.WishList == nil {
c.WishList = &WishList{
Count: 0,
ItemId: 0,
SendList: make([]int64, 0),
}
}
} }
func (c *ChargeMod) GetMaxCharge() float64 { func (c *ChargeMod) GetMaxCharge() float64 {
@ -93,6 +109,7 @@ func (c *ChargeMod) ZeroUpdate(Emit []int) {
SpecialGrade = max(1, M-a) SpecialGrade = max(1, M-a)
c.SpecialShop[i] = &SepcialShop{Grade: SpecialGrade, Count: SpecialShopCount} c.SpecialShop[i] = &SepcialShop{Grade: SpecialGrade, Count: SpecialShopCount}
} }
c.WishList.SendList = make([]int64, 0)
c.InitChessShop(Emit) c.InitChessShop(Emit)
} }
@ -230,6 +247,11 @@ func (c *ChargeMod) BackData() *msg.ResCharge {
ChessShop: ChessShop, ChessShop: ChessShop,
Gift: GoUtil.MapIntToInt32(c.Gift), Gift: GoUtil.MapIntToInt32(c.Gift),
Ad: c.Ad, Ad: c.Ad,
Wish: &msg.WishList{
Id: int32(c.WishList.ItemId),
Count: int32(c.WishList.Count),
Uid: c.WishList.SendList,
},
} }
} }
@ -293,3 +315,43 @@ func (c *ChargeMod) TriggerChargeUnlock(Lv int, Emit []int) {
} }
c.InitChessShop(Emit) c.InitChessShop(Emit)
} }
func (c *ChargeMod) AddWish(Id int) ([]*item.Item, error) {
ItemId, _ := playroomCfg.GetShopItem(Id)
if ItemId == 0 {
return nil, fmt.Errorf("AddWish itemid not exist id:%d", Id)
}
Items := []*item.Item{}
if c.WishList.ItemId != 0 {
if c.WishList.ItemId == ItemId {
return nil, fmt.Errorf("AddWish itemid already exist id:%d", Id)
}
Items = append(Items, item.NewItem(item.ITEM_ENERGY_ID, c.WishList.Count))
c.WishList.Count = 0
}
c.WishList.ItemId = ItemId
return Items, nil
}
func (c *ChargeMod) GetWish() ([]*item.Item, error) {
if c.WishList.ItemId == 0 {
return nil, fmt.Errorf("AddWishCount itemid not exist")
}
Max := chargeCfg.GetWishCount()
if c.WishList.Count < Max {
return nil, fmt.Errorf("AddWishCount count max")
}
c.WishList.Count = 0
c.WishList.ItemId = 0
return []*item.Item{item.NewItem(c.WishList.ItemId, 1)}, nil
}
func (c *ChargeMod) SendWishBeg(Uids []int64) error {
for _, v := range Uids {
if GoUtil.InArray64(v, c.WishList.SendList) {
return fmt.Errorf("SendWishBeg uid already exist uid:%d", v)
}
}
c.WishList.SendList = append(c.WishList.SendList, Uids...)
return nil
}

View File

@ -11,8 +11,9 @@ import (
type FriendMod struct { type FriendMod struct {
FriendList map[int]struct{} // 好友列表 FriendList map[int]struct{} // 好友列表
NewFriendList map[int]*FriendInfo // 好友列表 NewFriendList map[int]*FriendInfo // 好友列表
ApplyList map[int]int64 // 请求列表 ApplyList map[int]int64 // 好友请求列表
SendApply map[int]int64 // 发送的申请 SendApply map[int]int64 // 发送的申请
Apply []*ApplyInfo // 其他请求列表
Card map[string]*card.CardInfo // 收到的申请交换 Card map[string]*card.CardInfo // 收到的申请交换
Log []*LogInfo // 日志 Log []*LogInfo // 日志
AutoId int AutoId int
@ -24,6 +25,12 @@ type FriendInfo struct {
AddTime int64 AddTime int64
} }
type ApplyInfo struct {
Type int // 1:申请 2:同意 3:拒绝 4:删除
Time int64
Uid int64
}
const ( const (
LOG_TYPE_FRIEND_APPLY = 1 // 收到申请好友 LOG_TYPE_FRIEND_APPLY = 1 // 收到申请好友
LOG_TYPE_FRIEND_BECOME = 2 // 成为好友 LOG_TYPE_FRIEND_BECOME = 2 // 成为好友
@ -51,6 +58,10 @@ const (
FRIEND_NOTIFY_DEL = 4 FRIEND_NOTIFY_DEL = 4
) )
const (
APPLY_TYPE_WISH = 1 // 心愿单请求
)
type LogInfo struct { type LogInfo struct {
Id int Id int
Uid int Uid int
@ -144,12 +155,8 @@ func (f *FriendMod) CheckApply(id int) bool {
func (f *FriendMod) GetFriendNum() int { func (f *FriendMod) GetFriendNum() int {
return len(f.NewFriendList) return len(f.NewFriendList)
} }
func (f *FriendMod) GetFriendList() []int { func (f *FriendMod) GetFriendList() map[int]*FriendInfo {
var list []int return f.NewFriendList
for k := range f.NewFriendList {
list = append(list, k)
}
return list
} }
// 收到申请 // 收到申请
@ -214,3 +221,17 @@ func (f *FriendMod) Upvote(Id int) ([]*item.Item, int, error) {
info.Upvote = true info.Upvote = true
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 1)}, info.Uid, nil return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 1)}, info.Uid, nil
} }
func (f *FriendMod) AddWishApply(Uid int64) error {
for _, v := range f.Apply {
if v.Type == APPLY_TYPE_WISH && v.Uid == Uid {
return fmt.Errorf("wish apply already exist")
}
}
f.Apply = append(f.Apply, &ApplyInfo{
Type: APPLY_TYPE_WISH,
Uid: Uid,
Time: GoUtil.Now(),
})
return nil
}

View File

@ -77,6 +77,9 @@ const (
HANDLE_TYPE_SEND_CHARGE //赠送充值礼包 HANDLE_TYPE_SEND_CHARGE //赠送充值礼包
HANDLE_TYPE_CHARGE_RECEIVE //充值礼包领取 HANDLE_TYPE_CHARGE_RECEIVE //充值礼包领取
HANDLE_TYPE_WISHLIST_SEND // 发送愿望单请求
HANDLE_TYPE_WISHLIST_AGREE // 收到愿望单请求同意
) )
const ( const (

File diff suppressed because it is too large Load Diff