From f9d33219f599c210424feacffb226ed119e66f14 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:05:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=A1=E7=AE=B1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_mgr.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index d74b7308..ba7453e4 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -136,16 +136,21 @@ func FixBug() { defer messageMgrData.mu.Unlock() now := GoUtil.Now() for k, v := range messageMgrData.MessageList { - if k < 100000 || CheckPlayerLose(int(k)) { + if k < 100000 { delete(messageMgrData.MessageList, k) continue } + isLose := CheckPlayerLose(int(k)) // 反向遍历以安全删除元素 for i := len(v.Messages) - 1; i >= 0; i-- { if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) { // 删除消息 v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) } + if isLose && v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_RESULT { + // 删除消息 + v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) + } } if len(v.Messages) == 0 { delete(messageMgrData.MessageList, k) @@ -886,9 +891,6 @@ func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) { // 保存消息到本地 func saveMessage(m *msg.Msg) error { - if CheckPlayerLose(m.To) { - return nil - } data := getMessageData() data.mu.Lock() defer data.mu.Unlock() @@ -896,6 +898,7 @@ func saveMessage(m *msg.Msg) error { messages := getMessgeUnsafe(int64(m.To)) messages.mu.Lock() defer messages.mu.Unlock() + now := GoUtil.Now() for _, msgItem := range messages.Messages { if msgItem == nil { continue @@ -904,11 +907,13 @@ func saveMessage(m *msg.Msg) error { // 已存在相同消息,直接返回 return nil } + if msgItem.End != 0 && msgItem.End < now { + // 删除过期消息 + messages.Messages = append(messages.Messages[:0], messages.Messages[1:]...) + } } // 添加消息 messages.Messages = append(messages.Messages, m) - // 添加消息 - messages.Messages = append(messages.Messages, m) // 设置上限为2000条,超过则丢弃最早的消息 if len(messages.Messages) > 2000 { excess := len(messages.Messages) - 2000