From 1ff3e77b9f3398c3c0c057091b17a11d3040228a Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 19 二月 2019 16:05:21 +0800
Subject: [PATCH] 6253 【主干】【1.6】守卫人皇添加怪物波数日志输出
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py | 63 ++++++++++++++++++++++++-------
1 files changed, 49 insertions(+), 14 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
index 145e62b..b67d031 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -23,6 +23,7 @@
import GameWorldBoss
import CrossRealmPK
import PlayerQuery
+import PlayerTalk
import CrossBoss
import ChConfig
import GMShell
@@ -37,6 +38,9 @@
if not dataMsg:
return
sendMsg = str({"MsgType":msgType, "Data":dataMsg, "ServerGroupID":GameWorld.GetServerGroupID()})
+ if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
+ GameWorld.ErrLog("服务器未启动好,不允许向跨服服务器发送数据! %s" % (sendMsg))
+ return
GameWorld.Log("SendMsgToCrossServer => %s" % (sendMsg))
GameWorld.GetGameWorld().SendMergerChildToCenterStringData(sendMsg, len(sendMsg))
return
@@ -44,7 +48,10 @@
def OnCrossServerReceiveMsg(recvMsg, tick):
## 跨服服务器收到信息处理
try:
- #GameWorld.Log("OnCrossServerReceiveMsg: %s" % recvMsg)
+ GameWorld.Log("OnCrossServerReceiveMsg: %s" % recvMsg)
+ if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
+ GameWorld.Log("服务器未启动好,不处理子服信息!")
+ return
msgDict = eval(recvMsg)
msgType = msgDict.get("MsgType", -1)
@@ -63,11 +70,14 @@
elif msgType == ShareDefine.ClientServerMsg_PKBillboard:
CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData)
+ elif msgType == ShareDefine.ClientServerMsg_ChatCrossWorld:
+ PlayerTalk.ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick)
+
elif msgType == ShareDefine.ClientServerMsg_GMCMD:
GMShell.ClientServerMsg_GMCMD(msgData, tick)
elif msgType == ShareDefine.ClientServerMsg_ServerInitOK:
- ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick)
+ ClientServerMsg_ServerInitOK(serverGroupID, tick)
elif msgType == ShareDefine.ClientServerMsg_ViewPlayerCache:
CrossRealmPlayer.ClientServerMsg_ViewPlayerCache(serverGroupID, msgData)
@@ -79,7 +89,7 @@
MapServer_CrossSetPlayerAttrValue(msgData)
# 需要发送到地图服务器处理的
- elif msgType in [ShareDefine.ClientServerMsg_Reborn]:
+ elif msgType in [ShareDefine.ClientServerMsg_Reborn, ShareDefine.ClientServerMsg_CollectNPC]:
MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID)
else:
@@ -91,14 +101,25 @@
raise BaseException(str(traceback.format_exc()))
return
-def ClientServerMsg_ServerInitOK(serverGroupID, msgData, tick):
+def ClientServerMsg_ServerInitOK(serverGroupID, tick):
''' 收到子服连接成功通知
当子服启动成功后,可同步一次跨服服务器活动状态及活动数据给子服
'''
- GameWorld.Log("收到跨服子服连接成功通知!")
- CrossRealmPlayer.ClientServerMsg_ServerInitOK(serverGroupID)
- CrossRealmPK.ClientServerMsg_ServerInitOK(serverGroupID, tick)
- CrossBoss.ClientServerMsg_ServerInitOK(serverGroupID)
+ GameWorld.Log("收到跨服子服连接成功通知! serverGroupID=%s" % serverGroupID)
+ Sync_CrossServerInitDataToClientServer(tick, serverGroupID)
+ return
+
+def Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0):
+ ''' 同步跨服功能数据到子服服务器
+ 本函数调用时机:
+ 1.跨服服务器启动成功,主动广播同步所有子服,此时设置 serverGroupID 为 0
+ 2.子服启动成功,由子服主动发起请求同步最新数据,此时有指定子服 serverGroupID
+ 3.子服重新连接跨服服务器成功,逻辑同2
+ @param serverGroupID: 子服服务器组ID,为0时为全部子服务器组
+ '''
+ CrossRealmPlayer.Sync_CrossCommInitDataToClientServer(serverGroupID)
+ CrossRealmPK.Sync_CrossPKInitDataToClientServer(tick, serverGroupID)
+ CrossBoss.Sync_CrossBossInitDataToClientServer(serverGroupID)
return
def MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID):
@@ -137,6 +158,9 @@
if not dataMsg:
return
sendMsg = str({"MsgType":msgType, "Data":dataMsg})
+ if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
+ GameWorld.ErrLog("跨服服务器未启动好,不允许向子服发送数据! serverGroupIDList=%s, sendMsg=%s" % (serverGroupIDList, sendMsg))
+ return
GameWorld.Log("SendMsgToClientServer => serverGroupIDList=%s, sendMsg=%s" % (serverGroupIDList, sendMsg))
if not serverGroupIDList:
GameWorld.GetGameWorld().SendBroadcastMergeClient(sendMsg)
@@ -152,9 +176,13 @@
## 子服收到跨服服务器信息
dataPack = IPY_GameServer.IPY_MGBroadcastMergeClient()
dataMsg = dataPack.GetData()
- #GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg)
try:
+ GameWorld.Log("OnClientServerReceiveMsg: %s" % dataMsg)
+ if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
+ GameWorld.Log("服务器未启动好,不处理跨服信息!")
+ return
+
msgDict = eval(dataMsg)
msgType = msgDict.get("MsgType", -1)
msgData = msgDict.get("Data", "")
@@ -164,6 +192,9 @@
elif msgType == ShareDefine.CrossServerMsg_Notify:
PlayerControl.CrossServerMsg_Notify(msgData)
+
+ elif msgType == ShareDefine.CrossServerMsg_ChatCrossWorld:
+ PlayerTalk.CrossServerMsg_ChatCrossWorld(msgData)
elif msgType == ShareDefine.CrossServerMsg_ViewPlayerCacheRet:
CrossRealmPlayer.CrossServerMsg_ViewPlayerCacheRet(msgData, tick)
@@ -208,7 +239,7 @@
PlayerQuery.CrossServerMsg_NPCInfoRet(msgData, tick)
# 需要发送到地图服务器处理的
- elif msgType in [ShareDefine.CrossServerMsg_RebornRet]:
+ elif msgType in [ShareDefine.CrossServerMsg_RebornRet, ShareDefine.CrossServerMsg_CollectNPCOK]:
MapServer_ClientServerReceiveMsg(msgType, msgData)
elif msgType == ShareDefine.CrossServerMsg_CrossServerState:
@@ -249,12 +280,12 @@
GameWorld.GetGameWorld().SetDict(ShareDefine.Def_Notify_WorldKey_CrossServerConnState, connState)
if result != 1:
- GameWorld.Log("--OnClientServerReceiveMsg disconn")
+ GameWorld.Log("===与跨服服务器断开连接!")
CrossRealmPlayer.CrossServerMsg_CrossServerState({"isOpen":0})
return
- GameWorld.Log("OnConnCorossServer conn success!!!")
- if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_IsGameWorldInit):
+ GameWorld.Log("===与跨服服务器连接成功!")
+ if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK):
GameWorld.Log(" 服务器还未启动好,暂不处理! 等服务器启动好后再处理!")
return
@@ -267,8 +298,12 @@
return
def OnGameServerInitOK():
- ## 子服启动成功
+ ## 服务器启动成功
+
+ tick = GameWorld.GetGameWorld().GetTick()
+
if GameWorld.IsCrossServer():
+ Sync_CrossServerInitDataToClientServer(tick, serverGroupID=0) # 这里设置为0,广播所有子服务器组
return
serverGroupID = GameWorld.GetServerGroupID()
--
Gitblit v1.8.0