From f355e99a5f181ca869bdddf79fec1a27f237d194 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 10 九月 2024 11:13:47 +0800 Subject: [PATCH] 10264 【越南】【砍树】BOSS凭证掉落新增个人BOSS --- ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 106 insertions(+), 11 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py index 1d267d8..0a3d524 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 @@ -28,8 +26,12 @@ import CrossRealmMsg import ChNetSendPack import NetPackCommon -import PlayerGeTui +import PyGameData + import re +import time +import IpyGameDataPY + g_ChatMi = {} # 离线聊天记录 {玩家ID:[信息]} 一个玩家最多8条 @@ -143,8 +145,6 @@ if len(g_ChatMi[tagPlayerID]) > 8: g_ChatMi[tagPlayerID].pop(0) return - - PlayerGeTui.ChatMiGeTui(tagPlayerID, tagPlayerName, curPlayer.GetName()) # 登录时将离线消息下发 def LoginChatMi(curPlayer): @@ -184,10 +184,18 @@ def ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick): ## 收到子服跨服世界频道聊天 - zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(0, serverGroupID) - if not zoneIpyData: - return - serverGroupIDList = zoneIpyData.GetServerGroupIDList() + 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 @@ -234,7 +242,8 @@ extraValue = sendPack.GetExtraValue() extras = sendPack.GetExtras() curPlayer.ChatGong(content, extraValue, extras) - + #缓存 + DoTalkCache(0, curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras) return @@ -272,6 +281,8 @@ curPlayer.ChatFamily(content, extraValue, extras) #仙盟宴会答题 PlayerFamilyParty.OnTalkFamily(curPlayer, content, tick) + #缓存 + DoTalkCache(curPlayer.GetFamilyID(), curPlayer.GetName(), curPlayer.GetPlayerID(), content, extras) return @@ -431,7 +442,8 @@ vipLv = player.GetVIPLv() # 玩家vip等级 GMLevel = player.GetGMLevel() job = player.GetJob() - + playerID = player.GetID() + extraValueStr = "" # vip等级 extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_VipLv)%vipLv @@ -445,6 +457,15 @@ 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 + face = player.GetFace() + extraValueStr = "%s|%s|%s|%s|%s" % (extraValueStr, coupleName, coupleJob, bridePriceMaxID, face) return extraValueStr @@ -469,3 +490,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