From d292f7fe02cfbb9365850c69bf2aa90708c3ccb4 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 26 十二月 2018 15:32:09 +0800
Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(增加查看跨服玩家)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py | 6 +++
ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py | 2 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 2 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 2 +
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py | 83 +++++++++++++++++++++++++++++++++++++++++
5 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
index 101d467..43bc593 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -65,6 +65,9 @@
elif msgType == ShareDefine.ClientServerMsg_ServerInitOK:
ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick)
+ elif msgType == ShareDefine.ClientServerMsg_ViewPlayerCache:
+ CrossRealmPlayer.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData)
+
else:
GameWorld.ErrLog("没有该信息类型逻辑处理!")
@@ -122,6 +125,9 @@
elif msgType == ShareDefine.CrossServerMsg_Notify:
PlayerControl.CrossServerMsg_Notify(msgData)
+ elif msgType == ShareDefine.CrossServerMsg_ViewPlayerCacheRet:
+ CrossRealmPlayer.CrossServerMsg_ViewPlayerCacheRet(msgData, tick)
+
elif msgType == ShareDefine.CrossServerMsg_PKMatchReqRet:
CrossRealmPK.CrossServerMsg_PKMatchReqRet(msgData)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
index 37cf805..7d9c53d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
@@ -21,6 +21,10 @@
import ReadChConfig
import ChConfig
import PlayerControl
+import PlayerViewCache
+import ChPyNetSendPack
+import NetPackCommon
+import PyGameData
# 获取玩家跨服服务器上的名字
def GetCrossPlayerName(curPlayer):
@@ -104,9 +108,88 @@
# DWORD PlayerID; // 跨服玩家ID
#};
def OnViewCrossPlayerInfo(index, clientData, tick):
+ if GameWorld.IsCrossServer():
+ return
+
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ tagPlayerID = clientData.PlayerID
+ curCache = PlayerViewCache.ViewCacheMgr.FindCache(tagPlayerID)
+ ## 本服有,直接回客户端
+ if curCache:
+ GameWorld.DebugLog("查看跨服玩家,是本服玩家,直接回复!tagPlayerID=%s" % (tagPlayerID), playerID)
+ sendPack = ChPyNetSendPack.tagSCQueryPlayerCacheResult()
+ sendPack.PlayerID = tagPlayerID
+ sendPack.PropData = curCache.GetPropData()
+ sendPack.PropDataSize = len(sendPack.PropData)
+ sendPack.ItemData = PlayerViewCache.GetItemData(curCache)
+ sendPack.ItemDataSize = len(sendPack.ItemData)
+ sendPack.PlusData = PlayerViewCache.GetPlusData(curCache)
+ sendPack.PlusDataSize = len(sendPack.PlusData)
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
+ return
+ if tagPlayerID in PyGameData.g_crossPlayerViewCache:
+ validChaheTime = 5 * 60 * 1000
+ cacheInfo, updTick = PyGameData.g_crossPlayerViewCache[tagPlayerID]
+ if tick - updTick <= validChaheTime:
+ GameWorld.DebugLog("查看跨服玩家数据同步CD中,直接用缓存数据回复!tagPlayerID=%s" % (tagPlayerID), playerID)
+ SyncPlayerViewCrossPlayerInfo(curPlayer, tagPlayerID, cacheInfo)
+ return
+
+ for crossPlayerID, cacheInfoList in PyGameData.g_crossPlayerViewCache.items():
+ if tick - cacheInfoList[1] > validChaheTime:
+ PyGameData.g_crossPlayerViewCache.pop(crossPlayerID)
+
+ # 发送跨服服务器查询
+ dataMsg = {"tagPlayerID":tagPlayerID, "playerID":playerID}
+ CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ViewPlayerCache, dataMsg)
return
+
+def ClientServerMsg_ViewPlayerCache(serverGroupID, msgData):
+ tagPlayerID = msgData["tagPlayerID"]
+ playerID = msgData["playerID"]
+ GameWorld.Log("收到子服查看跨服玩家信息: serverGroupID=%s,playerID=%s,tagPlayerID=%s" % (serverGroupID, playerID, tagPlayerID))
+
+ cacheInfo = []
+ curCache = PlayerViewCache.ViewCacheMgr.FindCache(tagPlayerID)
+ if curCache:
+ cacheInfo = [curCache.GetPropData(), PlayerViewCache.GetItemData(curCache), PlayerViewCache.GetPlusData(curCache)]
+
+ viewPlayerCacheRet = [playerID, tagPlayerID, cacheInfo]
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ViewPlayerCacheRet, viewPlayerCacheRet, [serverGroupID])
+ return
+
+def CrossServerMsg_ViewPlayerCacheRet(msgData, tick):
+
+ playerID, tagPlayerID, cacheInfo = msgData
+ GameWorld.Log("收到跨服服务器回复的查看玩家信息: playerID=%s,tagPlayerID=%s" % (playerID, tagPlayerID))
+
+ PyGameData.g_crossPlayerViewCache[tagPlayerID] = [cacheInfo, tick] # 更新信息
+
+ curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+ if curPlayer:
+ SyncPlayerViewCrossPlayerInfo(curPlayer, tagPlayerID, cacheInfo)
+
+ return
+
+def SyncPlayerViewCrossPlayerInfo(curPlayer, tagPlayerID, cacheInfo):
+ if not cacheInfo:
+ PlayerControl.NotifyCode(curPlayer, "ViewPlayer_OffLine")
+ return
+ PropData, ItemData, PlusData = cacheInfo
+ sendPack = ChPyNetSendPack.tagSCQueryPlayerCacheResult()
+ sendPack.PlayerID = tagPlayerID
+ sendPack.PropData = PropData
+ sendPack.PropDataSize = len(sendPack.PropData)
+ sendPack.ItemData = ItemData
+ sendPack.ItemDataSize = len(sendPack.ItemData)
+ sendPack.PlusData = PlusData
+ sendPack.PlusDataSize = len(sendPack.PlusData)
+ NetPackCommon.SendFakePack(curPlayer, sendPack)
+ return
+
+
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index 7a1d26a..594be37 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -86,6 +86,8 @@
g_autoViceleaderDict = {}#自动安排副盟主的玩家记录{familyID:[]}
g_forbidAutoViceleaderFamily = [] #禁止自动安排副盟主的仙盟[familyID,..]
+g_crossPlayerViewCache = {} # 查看跨服玩家信息 {playerID:[cacheInfo, updTick], ...}
+
g_crossPKPlayerDict = {} # 跨服PK玩家字典 {playerID:PKPlayer, ...}
g_crossPKZoneMatchPlayerDict = {} # 跨服PK匹配中的玩家字典 {zoneID:[playerID, ...], ...}
g_crossPKRoomDict = {} # 跨服PK房间字典 {roomID:PKRoom, ...}
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index b677221..cfd7eb2 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1182,6 +1182,7 @@
# 跨服服务器发送子服信息定义
CrossServerMsg_ExitCrossServer = "ExitCrossServer" # 退出跨服服务器
CrossServerMsg_Notify = "Notify" # 提示信息
+CrossServerMsg_ViewPlayerCacheRet = "ViewPlayerCacheRet"# 查看跨服玩家信息结果
CrossServerMsg_PKMatchReqRet = "PKMatchReqRet" # 跨服PK匹配请求结果
CrossServerMsg_PKMatchResult = "PKMatchResult" # 跨服PK匹配结果
CrossServerMsg_PKReadyOKRoomList = "PKReadyOKRoomList" # 跨服PK已准备好的房间列表
@@ -1193,6 +1194,7 @@
# 子服发送跨服信息定义
ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
ClientServerMsg_GMCMD = "GMCMD" # GM命令
+ClientServerMsg_ViewPlayerCache = "ViewPlayerCache" # 查看跨服玩家信息
ClientServerMsg_PKMatch = "PKMatch" # 跨服PK匹配
ClientServerMsg_PKCancel = "PKCancel" # 跨服PK取消匹配
ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index b677221..cfd7eb2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1182,6 +1182,7 @@
# 跨服服务器发送子服信息定义
CrossServerMsg_ExitCrossServer = "ExitCrossServer" # 退出跨服服务器
CrossServerMsg_Notify = "Notify" # 提示信息
+CrossServerMsg_ViewPlayerCacheRet = "ViewPlayerCacheRet"# 查看跨服玩家信息结果
CrossServerMsg_PKMatchReqRet = "PKMatchReqRet" # 跨服PK匹配请求结果
CrossServerMsg_PKMatchResult = "PKMatchResult" # 跨服PK匹配结果
CrossServerMsg_PKReadyOKRoomList = "PKReadyOKRoomList" # 跨服PK已准备好的房间列表
@@ -1193,6 +1194,7 @@
# 子服发送跨服信息定义
ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
ClientServerMsg_GMCMD = "GMCMD" # GM命令
+ClientServerMsg_ViewPlayerCache = "ViewPlayerCache" # 查看跨服玩家信息
ClientServerMsg_PKMatch = "PKMatch" # 跨服PK匹配
ClientServerMsg_PKCancel = "PKCancel" # 跨服PK取消匹配
ClientServerMsg_PKPrepareOK = "PKPrepareOK" # 跨服PK准备完毕
--
Gitblit v1.8.0