From 12392320a13113f580f75c314e74c952b7a9ab7d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 14 十一月 2019 10:31:05 +0800 Subject: [PATCH] 8338 【主干】【后端】女娲的祝福等buff物品的类型分配(新增类型18效果与类型9相同) --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py | 109 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 92 insertions(+), 17 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py index a3dfaf7..b911b61 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py +++ b/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 \ No newline at end of file -- Gitblit v1.8.0