From 00321f901690e9c282403b6dabe207a8432b5e4b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 10 Apr 2026 11:48:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A5=BD=E5=8F=8B=E5=8D=A1?= =?UTF-8?q?=E7=89=8C=E6=B6=88=E6=81=AFbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/common.go | 4 ++++ src/server/game/limited_time_trigger.go | 18 ++++++++++++------ src/server/game/message_handler.go | 16 +++++++++++++--- src/server/game/mod/card/Card.go | 16 ++++++++++++++++ src/server/game/mod/friend/Friend.go | 20 ++++++++++---------- src/server/game/player_data.go | 1 + src/server/game/register_network_func.go | 12 +++++++----- src/server/unit_test/common.go | 2 +- 8 files changed, 64 insertions(+), 25 deletions(-) diff --git a/src/server/game/common.go b/src/server/game/common.go index dc83dff4..230960be 100644 --- a/src/server/game/common.go +++ b/src/server/game/common.go @@ -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 ) // 解析参数 diff --git a/src/server/game/limited_time_trigger.go b/src/server/game/limited_time_trigger.go index 43b7e824..2b9de489 100644 --- a/src/server/game/limited_time_trigger.go +++ b/src/server/game/limited_time_trigger.go @@ -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) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 873c7ec3..b02d26c8 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -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() diff --git a/src/server/game/mod/card/Card.go b/src/server/game/mod/card/Card.go index 7f9f5c51..cf856d48 100644 --- a/src/server/game/mod/card/Card.go +++ b/src/server/game/mod/card/Card.go @@ -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 // 赠送卡牌 diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 23955cf1..367756e1 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -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 +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index abfc26ab..4dba3fd2 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -461,6 +461,7 @@ func (p *Player) Login() { // 添加定时器 // 限时事件触发 p.LimitedTimeEventTrigger(0) + p.LimitedTimeCardTrigger() // 猪猪银行触发 p.LimitedTimePiggyBankTrigger() BaseMod := p.PlayMod.getBaseMod() diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index ff98f330..798fefd1 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -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()) diff --git a/src/server/unit_test/common.go b/src/server/unit_test/common.go index c37c5abe..e9ebef3c 100644 --- a/src/server/unit_test/common.go +++ b/src/server/unit_test/common.go @@ -4,6 +4,6 @@ import "server/game" func getTestPlayer() *game.Player { p := new(game.Player) - p.InitPlayer("mwh035") + p.InitPlayerByUid(100100162) return p }