From 01a0e539b786ae0f1c46646874502367f5410aca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 04 二月 2026 18:18:51 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(优化游戏服及跨服启动、通讯逻辑;服务器类型增加跨服中心、跨服事件、时间管理;跨服玩家在线状态、基础信息、玩家资源增减管理、发送跨服个人邮件等;跨服公会初版,修复公会成员审核、成员战力刷新等bug,增加公会名次同步;跨服公会暂未测试;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py |   66 +++++++++++++++++++++++++++------
 1 files changed, 54 insertions(+), 12 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
index 834ad62..2150f31 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NetPackCommon.py
@@ -18,7 +18,7 @@
 # @change: "2014-12-09 17:30" xmnathan 修改玩家M->S自定义封包发送
 # @change: "2014-12-19 19:30" hxp Debug下封包错误抛出异常
 #-------------------------------------------------------------------------------
-"""Version = 2014-12-19 19:30"""
+#"""Version = 2014-12-19 19:30"""
 #-------------------------------------------------------------------------------
 #---导入---
 import IPY_GameWorld
@@ -33,6 +33,10 @@
 from PyMongoDB.DBCommon import CommonDefine
 import ChServerToServerPyPack
 from PyMongoDB.Protocol import MergeServerRecvProtocol
+import ShareDefine
+import CrossPlayer
+import DBDataMgr
+import CrossMsg
 #-------------------------------------------------------------------------------
 #---全局变量---
 
@@ -155,6 +159,28 @@
     return SendPackDict[head]
 
 #-------------------------------------------------------------------------------
+
+def ReadRecPyPackData(packBuff):
+    ## 根据收到的py包buff读取对应的包结构实例
+    try:
+        if len(packBuff) <= 1:
+            return
+        headData = packBuff[1] + packBuff[0]
+        curPackHead = CommFunc.ReadWORD(headData, 0)[0]
+        clientPack = RecievePackDict.get(curPackHead)
+        if not clientPack:
+            return
+        clientPack.ReadData(packBuff)
+        # 截断字符串
+        for key in dir(clientPack):
+            value = getattr(clientPack, key)
+            if isinstance(value, str):
+                setattr(clientPack, key, value.rstrip(chr(0x0)))
+        return clientPack
+    except Exception:
+        GameWorld.RaiseException("!!!python自定义封包解包失败\r\n%s" % traceback.format_exc())
+        return
+    
 ## 接收万能封包
 #  @param index 玩家索引
 #  @param tick 时间戳
@@ -383,23 +409,39 @@
         
     except Exception:
         GameWorld.RaiseException("!!!python自定义跨服封包解析失败\r\n%s" % traceback.format_exc())
-        return 
+        return
     
-    
-## 发送跨服包:服务器与服务器间的通信
-#  @param DirType  0全广播,1通知主服务器排除合服子服,2通知服务器包含合服子服, 3通知跨服服务器 
-#  @param serverList 服务器列表 格式如 [(1,10),50,(55,100)] 约定内部必须用元组 同其他跨服配表规则一致
-#  @param packBuffer 自定义封包字节字符串
-def SendCrossServerToServerPack(dirType, serverList, packBuffer):
+def GetSSPackDirType(serverType):
+    ## 根据服务器类型获取发送的目标类型
+    if serverType in [ShareDefine.serverType_Cross, ShareDefine.serverType_CrossCenter]:
+        return ShareDefine.dirType_Cross
+    if serverType in [ShareDefine.serverType_Main, ShareDefine.serverType_Child]:
+        return ShareDefine.dirType_Main
+    if serverType == ShareDefine.serverType_Battle:
+        return ShareDefine.dirType_Battle
+    return ShareDefine.dirType_All
+
+def SendCrossServerToServerPack(pack, serverList=None, dirType=None, serverType=None):
+    '''发送跨服包:服务器与服务器间的通信
+    @param pack 自定义封包实例
+    @param serverList 服务器列表 格式如 [(1,10),50,(55,100)] 约定内部必须用元组 同其他跨服配表规则一致
+    @param DirType  0全广播,1通知主服务器排除合服子服,2通知服务器包含合服子服, 3通知跨服服务器 
+    @param serverType  可只传入来源的服务器类型,适用于一对一通讯的回包
+    '''
+    if dirType == None and serverType == None:
+        return
+    if dirType == None:
+        dirType = GetSSPackDirType(serverType)
+    if serverList == None:
+        serverList = []
     recvPack = MergeServerRecvProtocol.tagLPStringData()
     recvPack.Type = CommonDefine.gstCrossServerToServerPack
     recvPack.DirType = dirType
     recvPack.ServerList = str(serverList)
     recvPack.ServerLen = len(recvPack.ServerList)
-    recvPack.Data = packBuffer
-    recvPack.DataLen = len(packBuffer)
-
+    recvPack.Data = pack.GetBuffer()
+    recvPack.DataLen = len(recvPack.Data)
     SendPyPackToServersRoute(recvPack.GetBuffer(), recvPack.GetLength())
-
+    return
 
 

--
Gitblit v1.8.0