卡牌类型断言bug修复

This commit is contained in:
hahwu 2026-05-21 12:05:09 +08:00
parent 1a4015c176
commit 5f26f31e39
2 changed files with 38 additions and 17 deletions

View File

@ -59,6 +59,25 @@ func (p *Player) HandleMsg(m *msg.Msg) {
}
}
func getCardInfoFromExtra(extra interface{}) (card.CardInfo, bool) {
switch v := extra.(type) {
case card.CardInfo:
return v, true
case *card.CardInfo:
if v == nil {
return card.CardInfo{}, false
}
return *v, true
case **card.CardInfo:
if v == nil || *v == nil {
return card.CardInfo{}, false
}
return **v, true
default:
return card.CardInfo{}, false
}
}
// 消息处理
func (p *Player) handle(m *msg.Msg) error {
switch m.Type {
@ -116,7 +135,7 @@ func (p *Player) handle(m *msg.Msg) error {
})
case msg.HANDLE_TYPE_REQ_CARD: // 卡牌申请
FriendMod := p.PlayMod.getFriendMod()
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}
@ -156,9 +175,9 @@ func (p *Player) handle(m *msg.Msg) error {
p.PlayMod.save()
p.PushClientRes(InviteMod.NotifySuccess())
case msg.HANDLE_TYPE_SEND_CARD: // B收到A赠送的卡牌
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
log.Error("handle type send card,Failed to cast m.Extra to card.CardInfo")
return nil
}
FriendMod := p.PlayMod.getFriendMod()
@ -171,9 +190,9 @@ func (p *Player) handle(m *msg.Msg) error {
)
p.PlayMod.save()
case msg.HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT: // A收到B置换卡牌选择超时
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
log.Error("handle type ex card select timeout,Failed to cast m.Extra to card.CardInfo")
return nil
}
CardMod := p.PlayMod.getCardMod()
@ -182,9 +201,9 @@ func (p *Player) handle(m *msg.Msg) error {
p.PushClientRes(CardMod.NotifyCard())
p.PushClientRes(CardMod.NotifyTimes())
case msg.HANDLE_TYPE_EX_CARD_TIMEOUT: // B收到A同意置换卡牌超时
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
log.Error("handle type ex card timeout,Failed to cast m.Extra to card.CardInfo")
return nil
}
CardMod := p.PlayMod.getCardMod()
@ -192,9 +211,9 @@ func (p *Player) handle(m *msg.Msg) error {
p.PushClientRes(CardMod.NotifyCard())
p.PushClientRes(CardMod.NotifyTimes())
case msg.HANDLE_TYPE_REG_CARD_FINISH, msg.HANDLE_TYPE_AGREE_CARD_FAIL: // B收到A的请求已结束
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
log.Error("Failed to cast m.Extra to card.CardInfo")
log.Error("handle type reg card finish or agree card fail,Failed to cast m.Extra to card.CardInfo")
return nil
}
FriendMod := p.PlayMod.getFriendMod()
@ -206,8 +225,9 @@ func (p *Player) handle(m *msg.Msg) error {
)
p.PlayMod.save()
case msg.HANDLE_TYPE_AGREE_CARD: // A收到B同意卡牌
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
log.Error("handle type agree card,Failed to cast m.Extra to card.CardInfo")
return nil
}
CardMod := p.PlayMod.getCardMod()
@ -221,7 +241,7 @@ func (p *Player) handle(m *msg.Msg) error {
}
for k, v := range otherUid { // 通知好友请求已结束
v.Status = card.STATUS_CARD_GIVE_3
FriendMgrSend(&msg.Msg{Type: msg.HANDLE_TYPE_REG_CARD_FINISH, From: k, Extra: &v})
FriendMgrSend(&msg.Msg{Type: msg.HANDLE_TYPE_REG_CARD_FINISH, From: k, Extra: *v})
CardMod.DelRequestCard(k)
}
p.PlayMod.save()
@ -232,7 +252,7 @@ func (p *Player) handle(m *msg.Msg) error {
)
p.PushClientRes(CardMod.NotifyTimes())
case msg.HANDLE_TYPE_REG_CARD_REFUSE: // A收到B拒绝索要卡牌
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}
@ -244,7 +264,7 @@ func (p *Player) handle(m *msg.Msg) error {
p.PushClientRes(CardMod.NotifyCard())
case msg.HANDLE_TYPE_EX_CARD: // B收到A置换卡牌
FriendMod := p.PlayMod.getFriendMod()
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}
@ -258,7 +278,7 @@ func (p *Player) handle(m *msg.Msg) error {
)
case msg.HANDLE_TYPE_SELECT_EX_CARD: // A收到B选择卡牌进行置换
FriendMod := p.PlayMod.getFriendMod()
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}
@ -270,7 +290,7 @@ func (p *Player) handle(m *msg.Msg) error {
},
)
case msg.HANDLE_TYPE_ARGREE_EX_CARD: // B收到A同意置换卡牌
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}
@ -284,7 +304,7 @@ func (p *Player) handle(m *msg.Msg) error {
p.PlayMod.save()
case msg.HANDLE_TYPE_REFUSE_SELECT_CARD: // A收到B拒绝置换卡牌
CardMod := p.PlayMod.getCardMod()
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}
@ -296,7 +316,7 @@ func (p *Player) handle(m *msg.Msg) error {
p.PlayMod.save()
case msg.HANDLE_TYPE_REFUSE_EX_CARD: // B收到A拒绝置换卡牌
CardMod := p.PlayMod.getCardMod()
cardInfo, ok := m.Extra.(card.CardInfo)
cardInfo, ok := getCardInfoFromExtra(m.Extra)
if !ok {
return nil
}

View File

@ -280,6 +280,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
"chess_name": mergeDataCfg.GetNameById(chessId),
})
ChessMod.RemoveChess(chessId)
}
}