|  |  | 
 |  |  | import PyDataManager
 | 
 |  |  | import ChConfig
 | 
 |  |  | import EventReport
 | 
 |  |  | import ChPyNetSendPack
 | 
 |  |  | import NetPackCommon
 | 
 |  |  | import PlayerFamilyParty
 | 
 |  |  | import ChPyNetSendPack
 | 
 |  |  | import ShareDefine
 | 
 |  |  | import PlayerViewCache
 | 
 |  |  | import CrossRealmPlayer
 | 
 |  |  | import CrossRealmMsg
 | 
 |  |  | import ChNetSendPack
 | 
 |  |  | import NetPackCommon
 | 
 |  |  | import PlayerGeTui
 | 
 |  |  | import PyGameData
 | 
 |  |  | 
 | 
 |  |  | import re
 | 
 |  |  | import time
 | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | g_ChatMi = {}   # 离线聊天记录 {玩家ID:[信息]} 一个玩家最多8条
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     curCache = None
 | 
 |  |  |     tagPlayerName = ""
 | 
 |  |  |     if tagPlayer == None:
 | 
 |  |  |         curCache = PlayerViewCache.ViewCacheMgr.FindCache(tagPlayerID)
 | 
 |  |  |         curCache = PlayerViewCache.FindViewCache(tagPlayerID)
 | 
 |  |  |         if not curCache:
 | 
 |  |  |             PlayerControl.NotifyCode(curPlayer, "CanootTalk10")
 | 
 |  |  |             return
 | 
 |  |  | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     if curCache:
 | 
 |  |  |         cacheDict = eval(curCache.GetPropData())
 | 
 |  |  |         cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
 | 
 |  |  |         tagPlayerName = cacheDict["Name"]
 | 
 |  |  |         
 | 
 |  |  |     talkType = sendPack.GetTalkType()
 | 
 |  |  | 
 |  |  |                 g_ChatMi[tagPlayerID].pop(0)
 | 
 |  |  |                 return
 | 
 |  |  |         
 | 
 |  |  |         PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName())
 | 
 |  |  |         #PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName())
 | 
 |  |  | 
 | 
 |  |  | # 登录时将离线消息下发
 | 
 |  |  | def LoginChatMi(curPlayer):
 | 
 |  |  | 
 |  |  |         NetPackCommon.SendFakePack(curPlayer, chatPack)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 国家频(封包参数)
 | 
 |  |  | #  @param index 玩家索引  | 
 |  |  | #  @param tick 当前时间
 | 
 |  |  | #  @return None
 | 
 |  |  | #  @remarks 函数详细说明.
 | 
 |  |  | def ChatCountry(index, tick):
 | 
 |  |  |     ## 跨服频道
 | 
 |  |  |     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  |     playerID = curPlayer.GetPlayerID()
 | 
 |  |  |     sendPack = IPY_GameServer.IPY_GTalkCountry()
 | 
 |  |  |     content = sendPack.GetContent()
 | 
 |  |  |     extraValue = sendPack.GetExtraValue()
 | 
 |  |  |     extras = sendPack.GetExtras()
 | 
 |  |  |     crossPlayerName = CrossRealmPlayer.GetCrossPlayerName(curPlayer)
 | 
 |  |  |      | 
 |  |  |     ## 发送到跨服服务器,直接使用跨服boss的分区配置
 | 
 |  |  |     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.GetCrossZoneIpyDataByServerGroupID(0, serverGroupID)
 | 
 |  |  |     if not zoneIpyData:
 | 
 |  |  |         return
 | 
 |  |  |     serverGroupIDList = zoneIpyData.GetServerGroupIDList()
 | 
 |  |  |     CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ChatCrossWorld, msgData, serverGroupIDList)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | def CrossServerMsg_ChatCrossWorld(msgData):
 | 
 |  |  |     ## 收到跨服世界频道聊天
 | 
 |  |  |      | 
 |  |  |     playerID = msgData["PlayerID"]
 | 
 |  |  |     crossPlayerName = msgData["Name"]
 | 
 |  |  |     content = msgData["Content"]
 | 
 |  |  |     extraValue = msgData["ExtraValue"]
 | 
 |  |  |     extras = msgData["Extras"]
 | 
 |  |  |      | 
 |  |  |     sendPack = ChNetSendPack.tagTalkCountry()
 | 
 |  |  |     sendPack.Clear()
 | 
 |  |  |     sendPack.Name = crossPlayerName
 | 
 |  |  |     sendPack.NameLen = len(sendPack.Name)
 | 
 |  |  |     sendPack.PlayerID = playerID
 | 
 |  |  |     sendPack.Content = content
 | 
 |  |  |     sendPack.Len = len(sendPack.Content)
 | 
 |  |  |     sendPack.ExtraValue = extraValue
 | 
 |  |  |     sendPack.Extras = extras
 | 
 |  |  |      | 
 |  |  |     # 全服广播在线玩家
 | 
 |  |  |     playerManager = GameWorld.GetPlayerManager()
 | 
 |  |  |     for i in xrange(playerManager.GetActivePlayerCount()):
 | 
 |  |  |         player = playerManager.GetActivePlayerAt(i)
 | 
 |  |  |         if player == None:
 | 
 |  |  |             continue
 | 
 |  |  |         if PlayerControl.GetIsTJG(player):
 | 
 |  |  |             continue
 | 
 |  |  |         NetPackCommon.SendFakePack(player, sendPack)
 | 
 |  |  |     #curPlayer.ChatCountry(content, extraValue, extras)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 公频(封包参数)
 | 
 |  |  | #  @param index 玩家索引 
 | 
 |  |  | #  @param tick 当前时间
 | 
 |  |  | 
 |  |  |     extraValue = sendPack.GetExtraValue()
 | 
 |  |  |     extras = sendPack.GetExtras()
 | 
 |  |  |     curPlayer.ChatGong(content, extraValue, extras)
 | 
 |  |  |      | 
 |  |  |     #缓存
 | 
 |  |  |     DoTalkCache(0, curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     curPlayer.ChatFamily(content, extraValue, extras)
 | 
 |  |  |     #仙盟宴会答题
 | 
 |  |  |     PlayerFamilyParty.OnTalkFamily(curPlayer, content, tick)
 | 
 |  |  |     #缓存
 | 
 |  |  |     DoTalkCache(curPlayer.GetFamilyID(), curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     # 跨服喇叭
 | 
 |  |  |     if SpeakerType == 2:
 | 
 |  |  |         pass
 | 
 |  |  |         #=======================================================================
 | 
 |  |  |         # playerName = PlayerControl.GetMergePlayerName(accID, playerName) # 转化为跨服的名字
 | 
 |  |  |         # dataMsg = [accID, 0, playerName, SpeakerType, Text, extraValue, extras]
 | 
 |  |  |         # MergeChildMsg.SendMergerChildToCenterStringData(ChConfig.Def_SendMergeLoudspeaker, dataMsg)
 | 
 |  |  |         # GameWorld.Log("发送跨服喇叭聊天: accID=%s,Text=%s" % (accID, Text), playerID)
 | 
 |  |  |         #=======================================================================
 | 
 |  |  |         
 | 
 |  |  |     else:
 | 
 |  |  |         #GameWorld.DebugLog("发送本服喇叭聊天: accID=%s,Text=%s" % (accID, Text), playerID)
 | 
 |  |  | 
 |  |  | # };
 | 
 |  |  | #===============================================================================
 | 
 |  |  | def OnVoiceChat(index, clientPack, tick):
 | 
 |  |  |     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  |     if not CheckTalk(curPlayer, tick):
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     sendPack = ChPyNetSendPack.tagGCVoiceChat()
 | 
 |  |  |     sendPack.Clear()
 | 
 |  |  |     sendPack.ChannelType = clientPack.ChannelType
 | 
 |  |  |     sendPack.SrcName = curPlayer.GetName()
 | 
 |  |  |     sendPack.SrcNameLen = len(curPlayer.GetName())
 | 
 |  |  |     sendPack.PlayerID = curPlayer.GetID()
 | 
 |  |  |     sendPack.Len = clientPack.Len
 | 
 |  |  |     sendPack.Content = clientPack.Content
 | 
 |  |  |     sendPack.Extras = GetTalkExtraValue(curPlayer)
 | 
 |  |  |     sendPack.ExtraValue = len(sendPack.Extras)
 | 
 |  |  |      | 
 |  |  |     playerManager = GameWorld.GetPlayerManager()
 | 
 |  |  |     if clientPack.ChannelType == ShareDefine.Def_ChannelChat_World:
 | 
 |  |  |         # 世界频道
 | 
 |  |  |         curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
 | 
 |  |  |     elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Family:
 | 
 |  |  |         # 家族频道
 | 
 |  |  |         curFamily = curPlayer.GetFamily()
 | 
 |  |  |         if curFamily == None:
 | 
 |  |  |             return
 | 
 |  |  |         for i in range(0, curFamily.GetCount()):
 | 
 |  |  |             notifyMember = curFamily.GetAt(i)
 | 
 |  |  |             notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
 | 
 |  |  |              | 
 |  |  |             if notifyPlayer == None or not notifyPlayer.GetInitOK():
 | 
 |  |  |                 continue
 | 
 |  |  |              | 
 |  |  |             if PlayerControl.GetIsTJG(notifyPlayer):
 | 
 |  |  |                 continue
 | 
 |  |  |             #===================================================================
 | 
 |  |  |             # if notifyPlayer.GetPlayerID() == curPlayer.GetPlayerID():
 | 
 |  |  |             #    #不包括自己
 | 
 |  |  |             #    continue
 | 
 |  |  |             #===================================================================
 | 
 |  |  | 
 | 
 |  |  |             NetPackCommon.SendFakePack(notifyPlayer, sendPack)
 | 
 |  |  |     elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Team:
 | 
 |  |  |         # 队伍
 | 
 |  |  |         curTeam = curPlayer.GetTeam()
 | 
 |  |  |         if curTeam == None:
 | 
 |  |  |             return
 | 
 |  |  |         for index in xrange(curTeam.GetMemberCount()):
 | 
 |  |  |             curMember = curTeam.GetMemberPlayer(index)
 | 
 |  |  |             if not curMember or not curMember.GetPlayerID():
 | 
 |  |  |                 continue
 | 
 |  |  | 
 | 
 |  |  |             #===================================================================
 | 
 |  |  |             # if curMember.GetPlayerID() == curPlayer.GetPlayerID():
 | 
 |  |  |             #    #不包括自己
 | 
 |  |  |             #    continue
 | 
 |  |  |             #===================================================================
 | 
 |  |  | 
 | 
 |  |  |             if PlayerControl.GetIsTJG(curMember):
 | 
 |  |  |                 continue
 | 
 |  |  |             NetPackCommon.SendFakePack(curMember, sendPack)
 | 
 |  |  |              | 
 |  |  |     elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Private:
 | 
 |  |  |         # 私聊
 | 
 |  |  |         tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(clientPack.TargetID)
 | 
 |  |  |         if not tagPlayer:
 | 
 |  |  |             tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(clientPack.TargetName)
 | 
 |  |  |         if tagPlayer == None:
 | 
 |  |  |             return
 | 
 |  |  |          | 
 |  |  |         # 黑名单检查
 | 
 |  |  |         if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
 | 
 |  |  |             return
 | 
 |  |  |          | 
 |  |  |         sendPack.ToName = tagPlayer.GetName()
 | 
 |  |  |         sendPack.ToNameLen = len(tagPlayer.GetName())
 | 
 |  |  |         sendPack.ToPlayerID = tagPlayer.GetID()
 | 
 |  |  |         NetPackCommon.SendFakePack(tagPlayer, sendPack)
 | 
 |  |  |         NetPackCommon.SendFakePack(curPlayer, sendPack)
 | 
 |  |  | #    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  | #    if not CheckTalk(curPlayer, tick):
 | 
 |  |  | #        return
 | 
 |  |  | #     | 
 |  |  | #    sendPack = ChPyNetSendPack.tagGCVoiceChat()
 | 
 |  |  | #    sendPack.Clear()
 | 
 |  |  | #    sendPack.ChannelType = clientPack.ChannelType
 | 
 |  |  | #    sendPack.SrcName = curPlayer.GetName()
 | 
 |  |  | #    sendPack.SrcNameLen = len(curPlayer.GetName())
 | 
 |  |  | #    sendPack.PlayerID = curPlayer.GetID()
 | 
 |  |  | #    sendPack.Len = clientPack.Len
 | 
 |  |  | #    sendPack.Content = clientPack.Content
 | 
 |  |  | #    sendPack.Extras = GetTalkExtraValue(curPlayer)
 | 
 |  |  | #    sendPack.ExtraValue = len(sendPack.Extras)
 | 
 |  |  | #     | 
 |  |  | #    playerManager = GameWorld.GetPlayerManager()
 | 
 |  |  | #    if clientPack.ChannelType == ShareDefine.Def_ChannelChat_World:
 | 
 |  |  | #        # 世界频道
 | 
 |  |  | #        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
 | 
 |  |  | #    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Family:
 | 
 |  |  | #        # 家族频道
 | 
 |  |  | #        curFamily = curPlayer.GetFamily()
 | 
 |  |  | #        if curFamily == None:
 | 
 |  |  | #            return
 | 
 |  |  | #        for i in range(0, curFamily.GetCount()):
 | 
 |  |  | #            notifyMember = curFamily.GetAt(i)
 | 
 |  |  | #            notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
 | 
 |  |  | #             | 
 |  |  | #            if notifyPlayer == None or not notifyPlayer.GetInitOK():
 | 
 |  |  | #                continue
 | 
 |  |  | #             | 
 |  |  | #            if PlayerControl.GetIsTJG(notifyPlayer):
 | 
 |  |  | #                continue
 | 
 |  |  | #            #===================================================================
 | 
 |  |  | #            # if notifyPlayer.GetPlayerID() == curPlayer.GetPlayerID():
 | 
 |  |  | #            #    #不包括自己
 | 
 |  |  | #            #    continue
 | 
 |  |  | #            #===================================================================
 | 
 |  |  | #
 | 
 |  |  | #            NetPackCommon.SendFakePack(notifyPlayer, sendPack)
 | 
 |  |  | #    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Team:
 | 
 |  |  | #        # 队伍
 | 
 |  |  | #        curTeam = curPlayer.GetTeam()
 | 
 |  |  | #        if curTeam == None:
 | 
 |  |  | #            return
 | 
 |  |  | #        for index in xrange(curTeam.GetMemberCount()):
 | 
 |  |  | #            curMember = curTeam.GetMemberPlayer(index)
 | 
 |  |  | #            if not curMember or not curMember.GetPlayerID():
 | 
 |  |  | #                continue
 | 
 |  |  | #
 | 
 |  |  | #            #===================================================================
 | 
 |  |  | #            # if curMember.GetPlayerID() == curPlayer.GetPlayerID():
 | 
 |  |  | #            #    #不包括自己
 | 
 |  |  | #            #    continue
 | 
 |  |  | #            #===================================================================
 | 
 |  |  | #
 | 
 |  |  | #            if PlayerControl.GetIsTJG(curMember):
 | 
 |  |  | #                continue
 | 
 |  |  | #            NetPackCommon.SendFakePack(curMember, sendPack)
 | 
 |  |  | #             | 
 |  |  | #    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Private:
 | 
 |  |  | #        # 私聊
 | 
 |  |  | #        tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(clientPack.TargetID)
 | 
 |  |  | #        if not tagPlayer:
 | 
 |  |  | #            tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(clientPack.TargetName)
 | 
 |  |  | #        if tagPlayer == None:
 | 
 |  |  | #            return
 | 
 |  |  | #         | 
 |  |  | #        # 黑名单检查
 | 
 |  |  | #        if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
 | 
 |  |  | #            return
 | 
 |  |  | #         | 
 |  |  | #        sendPack.ToName = tagPlayer.GetName()
 | 
 |  |  | #        sendPack.ToNameLen = len(tagPlayer.GetName())
 | 
 |  |  | #        sendPack.ToPlayerID = tagPlayer.GetID()
 | 
 |  |  | #        NetPackCommon.SendFakePack(tagPlayer, sendPack)
 | 
 |  |  | #        NetPackCommon.SendFakePack(curPlayer, sendPack)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |     vipLv = player.GetVIPLv()  # 玩家vip等级
 | 
 |  |  |     GMLevel = player.GetGMLevel()
 | 
 |  |  |     job = player.GetJob()
 | 
 |  |  | 
 | 
 |  |  |     playerID = player.GetID()
 | 
 |  |  |      | 
 |  |  |     extraValueStr = ""
 | 
 |  |  |     # vip等级
 | 
 |  |  |     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_VipLv)%vipLv
 | 
 |  |  | 
 |  |  |     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_JOB)% job
 | 
 |  |  |     # 气泡框
 | 
 |  |  |     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(player)
 | 
 |  |  |     # 服务器组ID
 | 
 |  |  |     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_ServerGroupID) % PlayerControl.GetPlayerServerGroupID(player)
 | 
 |  |  |     # 等级
 | 
 |  |  |     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_LV) % player.GetLV()
 | 
 |  |  |     # 伴侣信息
 | 
 |  |  |     coupleName, coupleJob, bridePriceMaxID = "", 1, 0
 | 
 |  |  |     couple = PyDataManager.GetDBPyCoupleManager().GetCouple(playerID)
 | 
 |  |  |     if couple:
 | 
 |  |  |         coupleName = couple.GetCoupleName(playerID)
 | 
 |  |  |         coupleJob = couple.GetCoupleJob(playerID)
 | 
 |  |  |         bridePriceMaxID = couple.BridePriceMaxID
 | 
 |  |  |     extraValueStr = "%s|%s|%s|%s" % (extraValueStr, coupleName, coupleJob, bridePriceMaxID)
 | 
 |  |  |     return extraValueStr
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  |     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 |