| | |
| | | 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()
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | 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()
|
| | | 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 |