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,77 @@
    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):
    ##上线通知非脱机离线后的聊天缓存
    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
            contentInfo.Name = name
            contentInfo.NameLen = len(name)
            contentInfo.PlayerID = playerID
            contentInfo.Time = curTime
            contentInfo.Content = content
            contentInfo.Len = len(content)
            contentInfo.Extras = extras
            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