#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
##@package
|
#
|
# @todo: Íæ¼ÒÁÄÌ죬ÓïÒô
|
#
|
# @author: Alee
|
# @date 2018-4-25 ÏÂÎç02:30:25
|
# @version 1.0
|
#
|
# @note:
|
#
|
#---------------------------------------------------------------------
|
import GameWorld
|
import IPY_GameServer
|
import PlayerControl
|
import PyDataManager
|
import ChConfig
|
import EventReport
|
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Ìõ
|
|
|
def ChangeVoiceChat(content):
|
#»ñÈ¡ÓïÒôÎÄ×ֵıêʶ
|
#ÓïÒôĬÈÏ¿ªÍ·±ê¼Ç<v=tick_length>
|
pat = re.compile(r'<v=\d+_\d+>')
|
keyStrList = pat.findall(content)
|
if not keyStrList:
|
return content
|
lIndex = content.index(keyStrList[0])
|
if lIndex !=0: #±ê¼Ç±ØÐëÔÚ¿ªÍ·
|
return content
|
return content[len(keyStrList[0]):]
|
|
|
## ÃÜÆµ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ChatMi(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameServer.IPY_GTalkMi()
|
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(sendPack.GetTargetName())
|
if tagPlayer == None:
|
|
PlayerControl.NotifyCode(curPlayer, "CanootTalk10")
|
return
|
|
# ºÚÃûµ¥¼ì²é
|
if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
|
return
|
|
talkType = sendPack.GetTalkType()
|
content = sendPack.GetContent()
|
extraValue = sendPack.GetExtraValue()
|
extras = sendPack.GetExtras()
|
curPlayer.ChatMi(tagPlayer, talkType, content, extraValue, extras)
|
|
PyDataManager.GetContactsManager().AddContactsBoth(curPlayer.GetID(), tagPlayer.GetID())
|
|
return
|
|
## ÃÜÆµÓÅ»¯(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ChatMiFix(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameServer.IPY_GTalkMiFix()
|
tagPlayerID = sendPack.GetPlayerID()
|
tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(tagPlayerID)
|
curCache = None
|
tagPlayerName = ""
|
if tagPlayer == None:
|
curCache = PlayerViewCache.FindViewCache(tagPlayerID)
|
if not curCache:
|
PlayerControl.NotifyCode(curPlayer, "CanootTalk10")
|
return
|
else:
|
tagPlayerName = tagPlayer.GetName()
|
|
# ºÚÃûµ¥¼ì²é
|
if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayerID, curPlayer):
|
return
|
|
if curCache:
|
cacheDict = PlayerViewCache.GetCachePropDataDict(curCache)
|
tagPlayerName = cacheDict["Name"]
|
|
talkType = sendPack.GetTalkType()
|
content = sendPack.GetContent()
|
extraValue = sendPack.GetExtraValue()
|
extras = sendPack.GetExtras()
|
|
SendChatMi(curPlayer, tagPlayer, tagPlayerName, tagPlayerID, talkType, content, extraValue, extras)
|
#curPlayer.ChatMi(tagPlayer, talkType, content, extraValue, extras)
|
|
PyDataManager.GetContactsManager().AddContactsBoth(curPlayer.GetID(), tagPlayerID)
|
|
return
|
|
def SendChatMi(curPlayer, tagPlayer, tagPlayerName, tagPlayerID, talkType, content, extraValue, extras):
|
global g_ChatMi
|
sendPack = ChNetSendPack.tagTalkMi()
|
sendPack.Clear()
|
sendPack.TalkType = talkType #(BYTE TalkType)//0ΪĬÈÏ, 1Ϊ1¶Ô1ÁÄÌìÓÃ
|
sendPack.SrcName = curPlayer.GetName() #(String SrcName)//size = SrcNameLen
|
sendPack.SrcNameLen = len(sendPack.SrcName) #(BYTE SrcNameLen)
|
sendPack.PlayerID = curPlayer.GetID() #(DWORD PlayerID)
|
sendPack.ToNameLen = len(tagPlayerName) #(BYTE ToNameLen)
|
sendPack.ToName = tagPlayerName #(String ToName)//size = ToNameLen
|
sendPack.ToPlayerID = tagPlayerID #(DWORD ToPlayerID)
|
sendPack.Len = len(content) #(WORD Len)
|
sendPack.Content = content #(String Content)//size = Len
|
sendPack.ExtraValue = extraValue #(DWORD ExtraValue)//¸½¼ÓÖµ
|
sendPack.Extras = extras #(char Extras[256])//¸½¼ÓÖµÁбí
|
|
NetPackCommon.SendFakePack(curPlayer, sendPack)
|
if tagPlayer and not PlayerControl.GetIsTJG(tagPlayer):
|
NetPackCommon.SendFakePack(tagPlayer, sendPack)
|
else:
|
# ÁôÑÔ ÉÏÏß֪ͨ£¬×î¶à8Ìõ,Ö±½Ó´æ´¢½á¹¹Ìå
|
if tagPlayerID not in g_ChatMi:
|
g_ChatMi[tagPlayerID] = [sendPack]
|
else:
|
g_ChatMi[tagPlayerID].append(sendPack)
|
if len(g_ChatMi[tagPlayerID]) > 8:
|
g_ChatMi[tagPlayerID].pop(0)
|
return
|
|
#PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName())
|
|
# µÇ¼ʱ½«ÀëÏßÏûϢϷ¢
|
def LoginChatMi(curPlayer):
|
global g_ChatMi
|
playerID = curPlayer.GetID()
|
if playerID not in g_ChatMi:
|
return
|
|
chatList = g_ChatMi.pop(playerID)
|
|
for chatPack in chatList:
|
if not PyDataManager.GetContactsManager().FindContact(playerID, chatPack.PlayerID):
|
# ÀëÏß˽ÁÄÌ«¶à£¬´ËÍæ¼Ò±»¼·³ö¶ÓÁÐ
|
continue
|
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):
|
## ÊÕµ½×Ó·þ¿ç·þÊÀ½çƵµÀÁÄÌì
|
chatCrossType = IpyGameDataPY.GetFuncCfg("TalkCross", 1) # ¿ç·þÁÄÌ췶ΧÉ趨 0-È«·þ£»1-boss·ÖÇø£»2-¿ç·þ¾º¼¼³¡·ÖÇø
|
if chatCrossType == 0:
|
serverGroupIDList = []
|
else:
|
crossTypeMapDict = {1:ChConfig.Def_FBMapID_CrossPenglai, 2:ChConfig.Def_FBMapID_CrossRealmPK}
|
if chatCrossType not in crossTypeMapDict:
|
GameWorld.ErrLog("¿ç·þÁÄÌ췶ΧÅäÖôíÎó! chatCrossType=%s" % chatCrossType)
|
return
|
zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(crossTypeMapDict[chatCrossType], 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 µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ChatGong(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameServer.IPY_GTalkGong()
|
content = sendPack.GetContent()
|
extraValue = sendPack.GetExtraValue()
|
extras = sendPack.GetExtras()
|
curPlayer.ChatGong(content, extraValue, extras)
|
#»º´æ
|
DoTalkCache(0, curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
|
return
|
|
|
## ¶ÔƵ(·â°ü²ÎÊý)
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ChatTeam(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
sendPack = IPY_GameServer.IPY_GTalkDui()
|
content = sendPack.GetContent()
|
extraValue = sendPack.GetExtraValue()
|
extras = sendPack.GetExtras()
|
curPlayer.ChatTeam(content, extraValue, extras)
|
|
return
|
|
|
## ¼Ò×寵µÀÁÄÌì
|
# @param index Íæ¼ÒË÷Òý
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ChatFamily(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if curPlayer.GetFamilyID() == 0:
|
GameWorld.Log("¼Ò×寵µÀÁÄÌì·â°ü´íÎó,Íæ¼ÒûÓмÒ×å" , curPlayer.GetPlayerID())
|
return
|
|
sendPack = IPY_GameServer.IPY_GTalkBang()
|
content = sendPack.GetContent()
|
extraValue = sendPack.GetExtraValue()
|
extras = sendPack.GetExtras()
|
curPlayer.ChatFamily(content, extraValue, extras)
|
#ÏÉÃËÑç»á´ðÌâ
|
PlayerFamilyParty.OnTalkFamily(curPlayer, content, tick)
|
#»º´æ
|
DoTalkCache(curPlayer.GetFamilyID(), curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras)
|
return
|
|
|
## pyÀ®°È£¬Ö§³Ö¿ç·þ
|
def ChatPYSpeaker(curPlayer, chatInfoList):
|
SpeakerType, Text, extraValue, extras = chatInfoList
|
accID = curPlayer.GetAccID()
|
playerName = curPlayer.GetName()
|
playerID = curPlayer.GetPlayerID()
|
|
# ¿ç·þÀ®°È
|
if SpeakerType == 2:
|
pass
|
|
else:
|
#GameWorld.DebugLog("·¢Ëͱ¾·þÀ®°ÈÁÄÌì: accID=%s,Text=%s" % (accID, Text), playerID)
|
BroadCastPYSpeaker(accID, playerID, playerName, SpeakerType, Text, extraValue, extras)
|
|
return
|
|
## ¹ã²¥À®°ÈÄÚÈÝ£¬Ö§³Ö¿ç·þ
|
def BroadCastPYSpeaker(accID, playerID, playerName, SpeakerType, Text, extraValue, extras):
|
if playerID == 0:
|
player = GameWorld.GetPlayerManager().FindPlayerByAccID(accID)
|
if player:
|
playerID = player.GetPlayerID()
|
|
speakerPack = ChPyNetSendPack.tagGCPYSpeakerContent()
|
speakerPack.Clear()
|
speakerPack.AccIDLen = len(accID)
|
speakerPack.AccID = accID
|
speakerPack.PlayerID = playerID
|
speakerPack.NameLen = len(playerName)
|
speakerPack.Name = playerName
|
speakerPack.SpeakerType = SpeakerType
|
speakerPack.TextLen = len(Text)
|
speakerPack.Text = Text
|
speakerPack.ExtraValue = extraValue
|
speakerPack.Extras = extras
|
|
# È«·þ¹ã²¥ÔÚÏßÍæ¼Ò
|
playerManager = GameWorld.GetPlayerManager()
|
for i in range(playerManager.GetPlayerCount()):
|
player = playerManager.GetPlayerByIndex(i)
|
if player == None or not player.GetInitOK():
|
continue
|
|
if PlayerControl.GetIsTJG(player):
|
continue
|
NetPackCommon.SendFakePack(player, speakerPack)
|
return
|
|
|
|
#----------ÓïÒô´¦Àí------------------------------------------------------
|
# ÔÝ×ö³ÉÍêȫת·¢£¬Èç¹ûºóÐøIOѹÁ¦¹ý´ó¸Ä³Éֻת·¢»ù±¾ÐÅÏ¢ ÈçÓïÒôÀ´Ô´¡¢Ê±³¤ºÍΨһ±êÖ¾
|
# ÓïÒôÊý¾ÝÉÏ´«×¨ÃÅ·þÎñÆ÷£¬½ÓÊÕÓû§¿É¸ù¾ÝΨһ±êÖ¾ÇëÇóÏÂÔØ£¬¿ÉÉ趨Êý¾Ý±£Áôʱ³¤
|
#===============================================================================
|
# //B3 07 ÓïÒôÁÄÌì #tagCGVoiceChat
|
#
|
# struct tagCGVoiceChat
|
# {
|
# tagHead Head;
|
# BYTE ChannelType; // 1 ÊÀ½ç 2 ÏÉÃË 3 ˽ÁÄ(ºÃÓÑ) 4 ¶ÓÎé -------²é¿´·â°ütagCMVoiceChat 5 ÇøÓò
|
# BYTE TargetNameLen;
|
# char TargetName[TargetNameLen]; //size = TargetNameLen
|
# DWORD TargetID; // ˽ÁÄĬÈÏ·¢Íæ¼ÒID£¬Ã»ÓÐID²Å·¢Ãû³Æ
|
# WORD Len;
|
# BYTE Content[Len]; //size = Len
|
# };
|
#===============================================================================
|
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)
|
return
|
|
|
## »ñÈ¡ÁÄÌìÄÚÈݸ½¼ÓÖµ
|
# @param player: ÁÄÌì¶ÔÏó
|
# @return: ÁÄÌìÄÚÈݸ½¼ÓÖµ
|
def GetTalkExtraValue(player):
|
vipLv = player.GetVIPLv() # Íæ¼ÒvipµÈ¼¶
|
GMLevel = player.GetGMLevel()
|
job = player.GetJob()
|
playerID = player.GetID()
|
|
extraValueStr = ""
|
# vipµÈ¼¶
|
extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_VipLv)%vipLv
|
# GM
|
extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_GM)% (GMLevel > 0)
|
# job
|
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
|
|
|
## ¸½¼ÓÐÅÏ¢µÄ³¤¶ÈÆ¥Åä
|
# @param extraValueInfo: ¸½¼ÓÐÅÏ¢µÄ³¤¶È
|
# @return:
|
def GetTalkExtraValueStar(extraValueType):
|
extraValueInfo = ShareDefine.Def_TalkExtraValue_LenDict.get(extraValueType)
|
extraValueLen = extraValueInfo[1] - extraValueInfo[0]
|
|
return "%0" + str(extraValueLen) + "d"
|
|
|
|
def CheckTalk(curPlayer, tick):
|
if PlayerControl.GetGMForbidenTalk(curPlayer):
|
return False
|
|
#¼ä¸ôʱ¼ä
|
if tick - curPlayer.GetDictByKey(ChConfig.Def_TalkTick) < 1000:
|
return False
|
|
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
|