修复好友卡牌消息bug

This commit is contained in:
hahwu 2026-04-10 11:48:19 +08:00
parent 91f6d8d9a1
commit 00321f9016
8 changed files with 64 additions and 25 deletions

View File

@ -18,6 +18,10 @@ const (
onehour = 3600
oneday = 24 * onehour
sevendays = 7 * oneday
month = 30 * oneday
halfyear = 6 * month
oneyear = 365 * oneday
tenyear = 10 * oneyear
)
// 解析参数

View File

@ -119,16 +119,22 @@ func (p *Player) LimitedTimeCardTrigger() {
case card.STATUS_CARD_EX_1:
delete(FriendMod.Card, k)
FriendMgrSend(&MsgMod.Msg{
From: v.BUid,
To: v.AUid,
Type: MsgMod.HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT,
From: v.BUid,
To: v.AUid,
Type: MsgMod.HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT,
SendT: GoUtil.Now(),
End: GoUtil.Now() + tenyear,
Extra: *v,
})
case card.STATUS_CARD_EX_2:
delete(FriendMod.Card, k)
FriendMgrSend(&MsgMod.Msg{
From: v.AUid,
To: v.BUid,
Type: MsgMod.HANDLE_TYPE_EX_CARD_TIMEOUT,
From: v.AUid,
To: v.BUid,
Type: MsgMod.HANDLE_TYPE_EX_CARD_TIMEOUT,
SendT: GoUtil.Now(),
End: GoUtil.Now() + tenyear,
Extra: *v,
})
p.AddCard(v.CardId)
CardMod.DelExCard(v)

View File

@ -98,7 +98,7 @@ func (p *Player) handle(m *msg.Msg) error {
case msg.HANDLE_TYPE_DEL: // 删除好友
FriendMod := p.PlayMod.getFriendMod()
FriendMod.DelFriend(m.From)
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
//p.AddLog(m.From, friend.LOG_TYPE_FRIEND_DELETE, "", m.SendT)
playerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
p.PushClientRes(&proto.ResFriendApplyNotify{
Player: playerSimpleData,
@ -156,7 +156,11 @@ func (p *Player) handle(m *msg.Msg) error {
p.PlayMod.save()
p.PushClientRes(InviteMod.NotifySuccess())
case msg.HANDLE_TYPE_SEND_CARD: // B收到A赠送的卡牌
cardInfo := m.Extra.(card.CardInfo)
cardInfo, ok := m.Extra.(card.CardInfo)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
return nil
}
FriendMod := p.PlayMod.getFriendMod()
FriendMod.SetCardInfo(&cardInfo)
FriendMod.Interact(cardInfo.AUid, friend.INTERACT_TYPE_CARD, m.SendT)
@ -167,7 +171,11 @@ func (p *Player) handle(m *msg.Msg) error {
)
p.PlayMod.save()
case msg.HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT: // A收到B置换卡牌选择超时
cardInfo := m.Extra.(card.CardInfo)
cardInfo, ok := m.Extra.(card.CardInfo)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
return nil
}
CardMod := p.PlayMod.getCardMod()
p.AddCard(cardInfo.CardId)
CardMod.DelExCard(&cardInfo)
@ -176,6 +184,7 @@ func (p *Player) handle(m *msg.Msg) error {
case msg.HANDLE_TYPE_EX_CARD_TIMEOUT: // B收到A同意置换卡牌超时
cardInfo, ok := m.Extra.(card.CardInfo)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
return nil
}
CardMod := p.PlayMod.getCardMod()
@ -185,6 +194,7 @@ func (p *Player) handle(m *msg.Msg) error {
case msg.HANDLE_TYPE_REG_CARD_FINISH, msg.HANDLE_TYPE_AGREE_CARD_FAIL: // B收到A的请求已结束
cardInfo, ok := m.Extra.(card.CardInfo)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
return nil
}
FriendMod := p.PlayMod.getFriendMod()

View File

@ -46,6 +46,22 @@ const (
HANDBOOK_STATUS_GET = 2 // 已领取
)
/*
请求卡牌
AUid: 请求者
BUid: 被请求者
cardId: 请求的卡牌id
赠送卡牌
AUid: 赠送者
BUid: 接收者
CardId: 卡牌id
卡牌交换
AUid: 发起者
BUid: 接收者
CardId: 发起者提供的卡牌id
ExId: 接收者提供的卡牌id
*/
const (
TYPE_CARD_GIVE = 1 // 请求卡牌
TYPE_CARD_SEND = 2 // 赠送卡牌

View File

@ -225,16 +225,6 @@ func (f *FriendMod) InitData(m_DwUin int64) {
if f.NewApplyList == nil {
f.NewApplyList = make(map[int]*ApplyInfo)
}
for k, v := range f.Card {
if v.AUid != 0 && !f.CheckFriend(v.AUid) && v.AUid != int(m_DwUin) {
delete(f.Card, k)
continue
}
if v.BUid != 0 && !f.CheckFriend(v.BUid) && v.BUid != int(m_DwUin) {
delete(f.Card, k)
continue
}
}
if len(f.ReplyList) > 0 {
validReplyList := make([]*ReplyInfo, 0, len(f.ReplyList))
@ -387,6 +377,12 @@ func (f *FriendMod) DelFriend(id int) {
v.Status = 1
}
}
// 删除好友后清除卡牌交换
for k, v := range f.Card {
if v.Type == card.TYPE_CARD_GIVE && id == v.AUid {
delete(f.Card, k)
}
}
}
// 检查是否好友
@ -760,3 +756,7 @@ func (f *FriendMod) CheckGreeting(uid int) bool {
}
return false
}
func (f *FriendMod) GetCardList() map[string]*card.CardInfo {
return f.Card
}

View File

@ -461,6 +461,7 @@ func (p *Player) Login() {
// 添加定时器
// 限时事件触发
p.LimitedTimeEventTrigger(0)
p.LimitedTimeCardTrigger()
// 猪猪银行触发
p.LimitedTimePiggyBankTrigger()
BaseMod := p.PlayMod.getBaseMod()

View File

@ -1659,7 +1659,7 @@ func ReqGetGoldCard(player *Player, req *msg.ReqGetGoldCard) error {
// 向好友请求卡牌
func ReqCardGive(player *Player, req *msg.ReqCardGive) error {
CardMod := player.PlayMod.getCardMod()
endTime := GoUtil.Now() + 86400
endTime := GoUtil.Now() + oneday
FriendMod := player.PlayMod.getFriendMod()
err := CardMod.RequestCard()
if err != nil {
@ -1764,6 +1764,7 @@ func ReqAgreeCardGive(player *Player, req *msg.ReqAgreeCardGive) error {
From: int(player.M_DwUin),
To: cardInfo.AUid,
SendT: GoUtil.Now(),
End: GoUtil.Now() + tenyear,
Extra: *cardInfo,
}
FriendMgrSend(m)
@ -1808,7 +1809,7 @@ func ReqRefuseCardGive(player *Player, req *msg.ReqRefuseCardGive) error {
From: int(player.M_DwUin),
To: cardInfo.AUid,
SendT: now,
End: now + 86400,
End: now + oneday,
Extra: *cardInfo,
}
FriendMgrSend(m)
@ -1833,7 +1834,7 @@ func ReqCardSend(player *Player, req *msg.ReqCardSend) error {
From: int(player.M_DwUin),
To: int(req.Uid),
SendT: GoUtil.Now(),
End: GoUtil.Now() + 86400,
End: GoUtil.Now() + tenyear,
Extra: *cardInfo,
}
player.AddLog(int(req.Uid), friend.LOG_TYPE_CARD_SEND, strconv.Itoa(cardId), GoUtil.Now())
@ -1871,11 +1872,10 @@ func ReqCardExchange(player *Player, req *msg.ReqCardExchange) error {
From: int(player.M_DwUin),
To: int(req.Uid),
SendT: GoUtil.Now(),
End: GoUtil.Now() + 86400,
End: GoUtil.Now() + oneday,
Extra: *cardInfo,
}
player.AddLog(int(req.Uid), friend.LOG_TYPE_CARD_EX_SEND, fmt.Sprintf("%d", cardId), GoUtil.Now())
player.PushClientRes(&msg.ResCardExchange{
Code: msg.RES_CODE_SUCCESS,
})
@ -1945,6 +1945,7 @@ func ReqSelectCardExchange(player *Player, req *msg.ReqSelectCardExchange) error
From: int(player.M_DwUin),
To: cardInfo.AUid,
SendT: GoUtil.Now(),
End: GoUtil.Now() + oneday,
Extra: *cardInfo,
}
FriendMgrSend(m)
@ -1998,6 +1999,7 @@ func ReqAgreeCardExchange(player *Player, req *msg.ReqAgreeCardExchange) error {
To: cardInfo.BUid,
Extra: *cardInfo,
SendT: GoUtil.Now(),
End: GoUtil.Now() + tenyear,
}
player.PushClientRes(CardMod.NotifyCard())
player.PushClientRes(CardMod.NotifyTimes())

View File

@ -4,6 +4,6 @@ import "server/game"
func getTestPlayer() *game.Player {
p := new(game.Player)
p.InitPlayer("mwh035")
p.InitPlayerByUid(100100162)
return p
}