| | |
| | | import ShareDefine
|
| | | import IPY_GameWorld
|
| | | import ChPyNetSendPack
|
| | | import CrossRealmPlayer
|
| | | import PlayerViewCache
|
| | | import NetPackCommon
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | | import PlayerFamily
|
| | | import CrossPlayer
|
| | | import DBDataMgr
|
| | |
|
| | | import math
|
| | |
| | | #需要记录聊天缓存的频道对应限制最大条数
|
| | | ChannelCacheMax = {IPY_GameWorld.tcFamily:30,
|
| | | IPY_GameWorld.tcWorld:100,
|
| | | IPY_GameWorld.tcCountry:200,
|
| | | }
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | NotifyTalkCache(curPlayer)
|
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
|
| | | NotifyTalkCache(crossPlayer, [IPY_GameWorld.tcWorld])
|
| | | return
|
| | |
|
| | | #// B3 20 聊天 #tagCSTalk
|
| | |
| | | elif channelType == IPY_GameWorld.tcCountry:
|
| | | if GameWorld.IsCrossServer():
|
| | | return
|
| | | if not CrossRealmPlayer.IsCrossServerOpen():
|
| | | PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
|
| | | return
|
| | |
|
| | | if not __CheckTalk(curPlayer, channelType, content, tick):
|
| | | return
|
| | |
|
| | | curPlayer.SetLastChatTick(tick)
|
| | | curPlayer.SetDict(ChConfig.Def_ChannelTalkTick % channelType, tick)
|
| | | |
| | | if channelType == IPY_GameWorld.tcCountry:
|
| | | #发送到跨服,待扩展
|
| | | return
|
| | |
|
| | | bubbleBox = PlayerControl.GetChatBox(curPlayer) # 气泡框
|
| | |
|
| | |
| | |
|
| | | if channelType == IPY_GameWorld.tcWorld:
|
| | | NetPackCommon.SendFackPackOnline(clientPack)
|
| | | DoTalkCache(channelType, playerID, content, bubbleBox, familyID)
|
| | | elif channelType == IPY_GameWorld.tcFamily:
|
| | | PlayerFamily.Broadcast_FamilyPack(familyID, clientPack)
|
| | | PlayerFamily.OnFamilyTalk(curPlayer, familyID, clientPack, tick)
|
| | | elif channelType == IPY_GameWorld.tcCountry:
|
| | | PlayerFamily.OnCrossFamilyTalk(curPlayer, clientPack, tick)
|
| | |
|
| | | DoTalkCache(channelType, playerID, content, bubbleBox, familyID)
|
| | | return
|
| | |
|
| | | def __CheckTalk(curPlayer, channelType, content, tick, checkGMForbidenTalk=True):
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def NotifyTalkCache(curPlayer):
|
| | | def NotifyTalkCache(crossPlayer, channelTypeList):
|
| | | ##上线通知聊天缓存
|
| | | |
| | | # @param channelTypeList: 指定需要通知聊天缓存频道列表,不同频道的缓存可能存储在不同的服务器,如公会在公会数据所在服等
|
| | | if not crossPlayer:
|
| | | return
|
| | | for channelType in ChannelCacheMax.keys():
|
| | | if channelType not in channelTypeList:
|
| | | continue
|
| | | cacheList = []
|
| | | if channelType == IPY_GameWorld.tcFamily:
|
| | | familyID = curPlayer.GetFamilyID()
|
| | | familyID = crossPlayer.GetFamilyID()
|
| | | if not familyID:
|
| | | continue
|
| | | familyActonMgr = DBDataMgr.GetFamilyActionMgr().GetFamilyAction(familyID, ShareDefine.Def_ActionType_TalkCache)
|
| | |
| | | clientPack.ChannelType = channelType
|
| | | clientPack.InfoList = packCacheList
|
| | | clientPack.Count = len(clientPack.InfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | CrossPlayer.SendFakePack(crossPlayer, clientPack)
|
| | |
|
| | | return
|