From 388823edfe6308cba6f76ca6dc4f20022c5cb2be Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 30 六月 2025 19:03:50 +0800
Subject: [PATCH] 10431 【英文】看广告获得限时代金券

---
 ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py |   68 +++++++++++++++++++++++++++++----
 1 files changed, 59 insertions(+), 9 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py b/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py
index c57ad42..e354686 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/NetPackCommon.py
@@ -17,7 +17,7 @@
 # @change: "2014-12-23 15:30" xmnathan GameServer增加根据LineNO发送Py自定义包接口
 # @change: "2015-10-22 23:00" hxp 增加Recv_MergerChildToCenter
 #-------------------------------------------------------------------------------
-"""Version = 2015-10-22 23:00"""
+#"""Version = 2015-10-22 23:00"""
 #-------------------------------------------------------------------------------
 #---导入---
 import IPY_GameServer
@@ -29,7 +29,10 @@
 import ChPyNetSendPack
 import traceback
 import ChMapToGamePyPack
-import MergeChildMsg
+import CrossRealmMsg
+import PlayerControl
+import ChPlayer
+import ShareDefine
 #-------------------------------------------------------------------------------
 #---全局变量---
 
@@ -95,9 +98,13 @@
 #        Log("ReadPyPackTable: moudle: %s"%dir(moudle))
         
         for index in range(regCnt):
+            if not config.get(section, "PacketCMD_%s"%(index + 1)):
+                continue
             cmd = config.get(section, "PacketCMD_%s"%(index + 1))
             subCmd = config.get(section, "PacketSubCMD_%s"%(index + 1))
             callFunc = config.get(section, "PacketCallFunc_%s"%(index + 1))
+            if not cmd or not subCmd or not callFunc:
+                continue
             
             cmd = int(cmd, 16)
             subCmd = int(subCmd, 16)
@@ -204,8 +211,7 @@
         curPackHeadRegDict["CallFunc"](index, curPackData, tick)
         
     except Exception:
-        Log("python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
-        #raise Exception("python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
+        GameWorld.RaiseException("python自定义封包解析失败\r\n%s" % traceback.format_exc())
         return 
     
     
@@ -219,7 +225,52 @@
     innerPackData = clientPack.GetBuffer()
     curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData)
     
+def SendPackByPlayer(clientPack, curPlayer=None):
+    ## 发送封包,当curPlayer为None时则发送全服玩家
+    if not curPlayer:
+        # 全服广播在线玩家
+        playerManager = GameWorld.GetPlayerManager()
+        for i in xrange(playerManager.GetActivePlayerCount()):
+            curPlayer = playerManager.GetActivePlayerAt(i)
+            if curPlayer == None:
+                continue
+            if PlayerControl.GetIsTJG(curPlayer):
+                continue
+            SendFakePack(curPlayer, clientPack)
+    else:
+        if PlayerControl.GetIsTJG(curPlayer):
+            return
+        SendFakePack(curPlayer, clientPack)
+    return
 
+def SendFakePackByCross(onlinePlayerIDDict, clientPack):
+    '''由跨服服务器直接给子服在线玩家发送封包,适用于接受的玩家封包数据一致的
+    @param onlinePlayerIDDict: 在线玩家GroupID字典 {playerID:groupID, ...}
+        功能自行通过 onlineMgr = ChPlayer.GetOnlinePlayerMgr() 过滤
+     onlineMgr.GetOLPlayerServerGroupID(playerID) 获取ServerGroupID
+    '''
+    if not onlinePlayerIDDict:
+        return
+    innerPackData = clientPack.GetBuffer()
+    dataMsg = {"playerIDList":onlinePlayerIDDict.keys(), "innerPackData":innerPackData}
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_SendFakePack, dataMsg, onlinePlayerIDDict.values())
+    return
+
+def CrossServerMsg_SendFakePack(msgData):
+    ## 子服收到由跨服直接发送给玩家的封包
+    playerIDList = msgData["playerIDList"]
+    innerPackData = msgData["innerPackData"]
+    
+    playerManager = GameWorld.GetPlayerManager()
+    for playerID in playerIDList:
+        curPlayer = playerManager.FindPlayerByID(playerID)
+        if curPlayer == None:
+            continue
+        if PlayerControl.GetIsTJG(curPlayer):
+            continue
+        curPlayer.Sync_GeneralPack(len(innerPackData), innerPackData)
+            
+    return
 #-------------------------------------------------------------------------------
 #---Py封包注册信息
 PyPackTable = ReadPyPackTable("PyNetPack")
@@ -276,9 +327,7 @@
         curPackHeadRegDict["CallFunc"](routeIndex, mapID, curPackData, tick)
         #Log("RecvMapPyPack: CallFunc curPackHead = %s"%curPackHead)
     except Exception:
-        Log("RecvMapPyPack python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
-        if GameWorld.GetGameWorld().GetDebugLevel():
-            raise Exception("RecGamePyPack python自定义封包解析失败~~~~~\r\n%s" % traceback.format_exc())
+        GameWorld.RaiseException("RecvMapPyPack python自定义封包解析失败\r\n%s" % traceback.format_exc())
         return 
     
 #-------------------------------------------------------------------------------
@@ -297,11 +346,12 @@
 def Recv_MergerChildToCenter(index, tick):
     try:
         packData = IPY_GameServer.IPY_MGMergerChildToCenter().GetData()
-        Log("收到跨服子服自定义封包消息:\r\n%s" % packData)
+        # 不要输出具体封包内容,可能会因为内容导致日志输出报错
+        Log("收到跨服子服自定义封包消息:长度=%s" % len(packData))
         #以下添加后续处理函数
         #...
         #...
-        MergeChildMsg.Recv_MergerChildToCenterProcess(packData, tick)
+        CrossRealmMsg.OnCrossServerReceiveMsg(packData, tick)
     except Exception:
         Log("跨服子服自定义封包消息处理失败")
     return

--
Gitblit v1.8.0