From 274da001f56cd650d57f35ae2f65aa58f969a8e7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 28 八月 2019 18:20:54 +0800
Subject: [PATCH] 8247 【主干】【400】【后端】聊天离线消息通知优化

---
 ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py        |    4 +
 ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py   |    5 ++
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py |   59 +++++++++++++++++++----------
 3 files changed, 47 insertions(+), 21 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
index 57b01ad..0d71834 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -544,6 +544,11 @@
     AuctionHouse.OnPlayerLeaveServer(curPlayer)
     #------------镖车逻辑
     #TruckPlayerDisconnectProcess(curPlayer, tick)
+    
+    if not PlayerControl.GetIsTJG(curPlayer):
+        playerID = curPlayer.GetPlayerID()
+        PyGameData.g_unTJLogoffTime[playerID] = int(time.time())
+        
     return
 
 ## 设置玩家离线时间
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
index 8bd9d39..b911b61 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
@@ -496,13 +496,18 @@
     return
 
 def NotifyTalkCache(curPlayer):
-    ##上线通知聊天缓存
-    sendPack = ChPyNetSendPack.tagGCTalkCache()
-    sendPack.Clear()
-    sendPack.InfoList = []
+    ##上线通知非脱机离线后的聊天缓存
+    if PlayerControl.GetIsTJG(curPlayer):
+        return
+    playerID = curPlayer.GetPlayerID()
+    unTJLogoffTime = PyGameData.g_unTJLogoffTime.get(playerID, 0)
+    
+    familyCacheList, worldCacheList = [], []
     familyID = curPlayer.GetFamilyID()
     if familyID and familyID in PyGameData.g_familyTalkCache:
         for curTime, name, playerID, content, extras in PyGameData.g_familyTalkCache[familyID]:
+            if curTime < unTJLogoffTime:
+                continue
             contentInfo = ChPyNetSendPack.tagGCTalkCacheInfo()
             contentInfo.Clear()
             contentInfo.ChannelType = 2
@@ -513,20 +518,34 @@
             contentInfo.Content = content
             contentInfo.Len = len(content)
             contentInfo.Extras = extras
-            sendPack.InfoList.append(contentInfo)
-    elif PyGameData.g_worldTalkCache:
-        for curTime, name, playerID, content, extras in PyGameData.g_worldTalkCache:
-            contentInfo = ChPyNetSendPack.tagGCTalkCacheInfo()
-            contentInfo.Clear()
-            contentInfo.ChannelType = 1
-            contentInfo.Name = name
-            contentInfo.NameLen = len(name)
-            contentInfo.PlayerID = playerID
-            contentInfo.Time = curTime
-            contentInfo.Content = content
-            contentInfo.Len = len(content)
-            contentInfo.Extras = extras
-            sendPack.InfoList.append(contentInfo)
-    sendPack.Count = len(sendPack.InfoList)
-    NetPackCommon.SendFakePack(curPlayer, sendPack)
+            familyCacheList.append(contentInfo)
+            
+    for curTime, name, playerID, content, extras in PyGameData.g_worldTalkCache:
+        if curTime < unTJLogoffTime:
+            continue
+        contentInfo = ChPyNetSendPack.tagGCTalkCacheInfo()
+        contentInfo.Clear()
+        contentInfo.ChannelType = 1
+        contentInfo.Name = name
+        contentInfo.NameLen = len(name)
+        contentInfo.PlayerID = playerID
+        contentInfo.Time = curTime
+        contentInfo.Content = content
+        contentInfo.Len = len(content)
+        contentInfo.Extras = extras
+        worldCacheList.append(contentInfo)
+        
+    if familyCacheList:
+        sendPack = ChPyNetSendPack.tagGCTalkCache()
+        sendPack.Clear()
+        sendPack.InfoList = familyCacheList
+        sendPack.Count = len(sendPack.InfoList)
+        NetPackCommon.SendFakePack(curPlayer, sendPack)
+        
+    if worldCacheList:
+        sendPack = ChPyNetSendPack.tagGCTalkCache()
+        sendPack.Clear()
+        sendPack.InfoList = worldCacheList
+        sendPack.Count = len(sendPack.InfoList)
+        NetPackCommon.SendFakePack(curPlayer, sendPack)
     return
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index a330db4..74a775a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -109,4 +109,6 @@
 g_crossFBFuncLinePlayerCountInfo = {} # 跨服副本功能线路人数信息,本服缓存 {mapID:{funcLineID:[playerCount], ...}, ...}
 
 g_familyTalkCache = {} #{familyID:[[time,content,extras],..]}
-g_worldTalkCache = [] #[[time,name, playerID, content,extras],..]
\ No newline at end of file
+g_worldTalkCache = [] #[[time,name, playerID, content,extras],..]
+
+g_unTJLogoffTime = {} #非脱机离线时间 {playerID:time, ...}

--
Gitblit v1.8.0