From 8bfa5768bc81e3d8a3838527b22170b3fe95460e Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 26 七月 2019 21:16:57 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/SnxxServerCode

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py |   90 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 73 insertions(+), 17 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
index a3dfaf7..8bd9d39 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
@@ -18,8 +18,6 @@
 import PyDataManager
 import ChConfig
 import EventReport
-import ChPyNetSendPack
-import NetPackCommon
 import PlayerFamilyParty
 import ChPyNetSendPack
 import ShareDefine
@@ -29,7 +27,12 @@
 import ChNetSendPack
 import NetPackCommon
 import PlayerGeTui
+import PyGameData
+
 import re
+import time
+import IpyGameDataPY
+
 
 g_ChatMi = {}   # 离线聊天记录 {玩家ID:[信息]} 一个玩家最多8条
 
@@ -88,7 +91,7 @@
     curCache = None
     tagPlayerName = ""
     if tagPlayer == None:
-        curCache = PlayerViewCache.ViewCacheMgr.FindCache(tagPlayerID)
+        curCache = PlayerViewCache.FindViewCache(tagPlayerID)
         if not curCache:
             PlayerControl.NotifyCode(curPlayer, "CanootTalk10")
             return
@@ -100,7 +103,7 @@
         return
     
     if curCache:
-        cacheDict = eval(curCache.GetPropData())
+        cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
         tagPlayerName = cacheDict["Name"]
         
     talkType = sendPack.GetTalkType()
@@ -175,15 +178,16 @@
     content = sendPack.GetContent()
     extraValue = sendPack.GetExtraValue()
     extras = sendPack.GetExtras()
+    crossPlayerName = CrossRealmPlayer.GetCrossPlayerName(curPlayer)
     
     ## 发送到跨服服务器,直接使用跨服boss的分区配置
-    dataMsg = {"PlayerID":playerID, "Content":content, "ExtraValue":extraValue, "Extras":extras}
+    dataMsg = {"PlayerID":playerID, "Name":crossPlayerName, "Content":content, "ExtraValue":extraValue, "Extras":extras}
     CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChatCrossWorld, dataMsg)
     return
 
 def ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick):
     ## 收到子服跨服世界频道聊天
-    zoneIpyData = CrossRealmPlayer.GetServerCrossZoneIpyData(ChConfig.Def_FBMapID_CrossPenglai, serverGroupID)
+    zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(0, serverGroupID)
     if not zoneIpyData:
         return
     serverGroupIDList = zoneIpyData.GetServerGroupIDList()
@@ -194,22 +198,16 @@
     ## 收到跨服世界频道聊天
     
     playerID = msgData["PlayerID"]
+    crossPlayerName = msgData["Name"]
     content = msgData["Content"]
     extraValue = msgData["ExtraValue"]
     extras = msgData["Extras"]
     
-    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
-    if curPlayer:
-        PlayerChatCountry(curPlayer, content, extraValue, extras)
-        #curPlayer.ChatCountry(content, extraValue, extras)
-    return
-
-def PlayerChatCountry(curPlayer, content, extraValue, extras):
     sendPack = ChNetSendPack.tagTalkCountry()
     sendPack.Clear()
-    sendPack.Name = CrossRealmPlayer.GetCrossPlayerName(curPlayer)
+    sendPack.Name = crossPlayerName
     sendPack.NameLen = len(sendPack.Name)
-    sendPack.PlayerID = curPlayer.GetPlayerID()
+    sendPack.PlayerID = playerID
     sendPack.Content = content
     sendPack.Len = len(sendPack.Content)
     sendPack.ExtraValue = extraValue
@@ -224,7 +222,7 @@
         if PlayerControl.GetIsTJG(player):
             continue
         NetPackCommon.SendFakePack(player, sendPack)
-        
+    #curPlayer.ChatCountry(content, extraValue, extras)
     return
 
 ## 公频(封包参数)
@@ -239,7 +237,8 @@
     extraValue = sendPack.GetExtraValue()
     extras = sendPack.GetExtras()
     curPlayer.ChatGong(content, extraValue, extras)
-    
+    #缓存
+    DoTalkCache(0, curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
     return
 
 
@@ -277,6 +276,8 @@
     curPlayer.ChatFamily(content, extraValue, extras)
     #仙盟宴会答题
     PlayerFamilyParty.OnTalkFamily(curPlayer, content, tick)
+    #缓存
+    DoTalkCache(curPlayer.GetFamilyID(), curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
     return
 
 
@@ -474,3 +475,58 @@
 
     return True
 
+
+def DoTalkCache(familyID, name, playerID, content, extras):
+    #仙盟、世界频道聊天缓存
+    curTime = int(time.time())
+    saveInfo = [curTime, name, playerID, content, extras]
+    if familyID:
+        if familyID not in PyGameData.g_familyTalkCache:
+            PyGameData.g_familyTalkCache[familyID] = []
+        else:
+            maxCnt = IpyGameDataPY.GetFuncCfg('TalkCache', 2)
+            if maxCnt and len(PyGameData.g_familyTalkCache[familyID]) >= maxCnt:
+                del PyGameData.g_familyTalkCache[familyID][0]
+        PyGameData.g_familyTalkCache[familyID].append(saveInfo)
+    else:
+        maxCnt = IpyGameDataPY.GetFuncCfg('TalkCache', 1)
+        if maxCnt and len(PyGameData.g_worldTalkCache) >= maxCnt:
+            del PyGameData.g_worldTalkCache[0]
+        PyGameData.g_worldTalkCache.append(saveInfo)
+    return
+
+def NotifyTalkCache(curPlayer):
+    ##上线通知聊天缓存
+    sendPack = ChPyNetSendPack.tagGCTalkCache()
+    sendPack.Clear()
+    sendPack.InfoList = []
+    familyID = curPlayer.GetFamilyID()
+    if familyID and familyID in PyGameData.g_familyTalkCache:
+        for curTime, name, playerID, content, extras in PyGameData.g_familyTalkCache[familyID]:
+            contentInfo = ChPyNetSendPack.tagGCTalkCacheInfo()
+            contentInfo.Clear()
+            contentInfo.ChannelType = 2
+            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)
+    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)
+    return
\ No newline at end of file

--
Gitblit v1.8.0