From 602fe4f9eaf193ed5437b91206e02704fd298ce9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 二月 2021 18:26:09 +0800
Subject: [PATCH] 4929 【主干】同步机器人封包

---
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py |   37 ++++++++++++++++++++++++++++++++++---
 1 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
index fc99fab..992828b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerControl.py
@@ -71,16 +71,47 @@
     CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_Notify, crossNotifyList, serverGroupIDList)
     return
 
+def CrossNotifyEx(serverGroupIDList, crossNotifyList):
+    ''' 跨服广播信息提示,支持同步多条,同时也建议多条一起同步
+    @param serverGroupIDList: 需要同步到的目标服务器组ID列表
+    @param crossNotifyList: 信息提示列表,[[notifyType, paramsList, 自定义扩展信息], ...]  notifyType 如 ShareDefine.CrossNotify_CrossAct
+    '''
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_Notify, crossNotifyList, serverGroupIDList)
+    return
+
 def CrossServerMsg_Notify(crossNotifyList):
     GameWorld.DebugLog("收到跨服同步的广播提示内容: count=%s" % len(crossNotifyList))
     for notifyInfo in crossNotifyList:
-        if "Type" not in notifyInfo or "Params" not in notifyInfo:
+        if isinstance(notifyInfo, dict):
+            if "Type" not in notifyInfo or "Params" not in notifyInfo:
+                continue
+            notifyType = notifyInfo["Type"]
+            params = notifyInfo["Params"]
+        elif isinstance(notifyInfo, list) and len(notifyInfo) >= 2:
+            notifyType, params = notifyInfo[:2]
+        else:
             continue
-        notifyType = notifyInfo["Type"]
-        params = notifyInfo["Params"]
+        
         if notifyType == ShareDefine.CrossNotify_World:
             country, msgMark, msgParamList = params
             WorldNotify(country, msgMark, msgParamList)
+        elif notifyType == ShareDefine.CrossNotify_CrossAct:
+            country, msgMark, msgParamList = params
+            serverIDRangeList = notifyInfo[2]
+            playerManager = GameWorld.GetPlayerManager()
+            for i in xrange(playerManager.GetPlayerCount()):
+                curPlayer = playerManager.GetPlayerByIndex(i)
+                if curPlayer == None or not curPlayer.GetInitOK() or GetIsTJG(curPlayer):
+                    continue
+                if not serverIDRangeList:
+                    NotifyCode(curPlayer, msgMark, msgParamList)
+                    return
+                playerServerID = GameWorld.GetPlayerServerID(curPlayer)
+                for serverIDA, serverIDB in serverIDRangeList:
+                    if serverIDA <= playerServerID <= serverIDB:
+                        NotifyCode(curPlayer, msgMark, msgParamList)
+                        break
+                    
         elif notifyType == ShareDefine.CrossNotify_Family:
             familyID, msgMark, msgParamList = params
             FamilyNotify(familyID, msgMark, msgParamList)

--
Gitblit v1.8.0