From c0c4a0880e9a0fc5d1482c1260e02ddd1b554bc9 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 12 十月 2022 14:09:02 +0800
Subject: [PATCH] 9719 【越南】【BT7】【主干】跨服全民充值

---
 ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py                                                        |   73 +++
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActAllRecharge.py                                   |  405 +++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                                     |    7 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py                                                   |    9 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py                                 |  274 +++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                                      |  274 +++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py                      |  171 +++++++
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py                                         |    8 
 ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py                                                           |    2 
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActionControl.py                                    |   24 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py                                 |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py                               |    3 
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                                          |    9 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py                       |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py |   49 ++
 PySysDB/PySysDBG.h                                                                                                     |   27 +
 16 files changed, 1,340 insertions(+), 7 deletions(-)

diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index b10e0d6..6a68711 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -984,6 +984,33 @@
 	list		SuperItemWeightInfo;	//大奖随机权重信息  [[权重,物品ID,个数,是否拍品,价值货币类型,货币值], ...]
 };
 
+//跨服全民充值时间表
+
+struct tagCrossActAllRecharge
+{
+	DWORD		_CfgID;	//配置ID
+	char		ActGroupName;	//活动组名(同组活动的名字需相同)
+	BYTE		ZoneID;		//组内分组编号
+	list		ServerIDRangeList;	//活动的账号服务器ID范围列表 [[serverIDA, serverIDB], ...]
+	char		StartDate;	//开启日期
+	char		EndDate;	//结束日期
+	dict		NotifyInfoStart;	//全服提示信息 - 相对开始时间
+	dict		NotifyInfoEnd;	//全服提示信息 - 相对结束时间
+	list		NotifyInfoLoop;	//全服提示信息 - 循环广播[循环分钟, 广播key, [广播参数列表可选]]
+	list		TemplateIDList;	//模板ID列表
+};
+
+//跨服全民充值模板表
+
+struct tagCrossActAllRechargeTemplate
+{
+	DWORD		_TemplateID;	//模板ID
+	DWORD		CTGNeed;	//全民充值RMB
+	WORD		NeedPlayerCount;	//所需充值达到该档玩家数
+	BYTE		AwardIndex;	//奖励记录索引,从0开始,同个模板不可重复,不可变更
+	list		AwardItemList;	//奖励物品列表[[物品ID,个数,是否拍品], ...]
+};
+
 //跨服充值排行活动时间表
 
 struct tagCrossActCTGBillboard
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 0836f7d..0919513 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -5263,6 +5263,224 @@
 
 
 #------------------------------------------------------
+# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
+
+class  tagGCCrossActAllRechargeItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    # 是否拍品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossActAllRechargeItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedRMB = 0    #(DWORD NeedRMB)// 所需全民充值RMB
+    NeedPlayerCount = 0    #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
+    NowPlayerCount = 0    #(WORD NowPlayerCount)// 当前充值达到该档玩家数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItemList = list()    #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagGCCrossActAllRechargeItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedRMB = 0
+        self.NeedPlayerCount = 0
+        self.NowPlayerCount = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedRMB)
+        data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
+        data = CommFunc.WriteWORD(data, self.NowPlayerCount)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedRMB:%d,
+                                NeedPlayerCount:%d,
+                                NowPlayerCount:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedRMB,
+                                self.NeedPlayerCount,
+                                self.NowPlayerCount,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardList = list()    #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardList = tagGCCrossActAllRechargeAward()
+            _pos = temAwardList.ReadData(_lpData, _pos)
+            self.AwardList.append(temAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AwardCount = 0
+        self.AwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
+        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AwardCount:%d,
+                                AwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
+
+
+#------------------------------------------------------
 # AC 12 跨服运营活动结束 # tagGCCrossActEnd
 
 class  tagGCCrossActEnd(Structure):
@@ -32802,6 +33020,62 @@
 
 
 #------------------------------------------------------
+# AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo
+
+class  tagMCCrossActAllRechargePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CTGRMBTotal", c_int),    # 活动已累计充值RMB
+                  ("AwardRecord", c_int),    # 奖励记录,根据奖励索引位或运算判断是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x34
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x34
+        self.CTGRMBTotal = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossActAllRechargePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CTGRMBTotal:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CTGRMBTotal,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo
+
+
+#------------------------------------------------------
 # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
 
 class  tagMCDailyGiftbagItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActAllRecharge.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActAllRecharge.py
new file mode 100644
index 0000000..4d8af43
--- /dev/null
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActAllRecharge.py
@@ -0,0 +1,405 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package CrossActAllRecharge
+#
+# @todo:跨服全民充值
+# @author hxp
+# @date 2022-10-11
+# @version 1.0
+#
+# 详细描述: 跨服全民充值
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2022-10-11 19:00"""
+#-------------------------------------------------------------------------------
+
+import PyGameData
+import ShareDefine
+import CrossRealmMsg
+import DataRecordPack
+import CrossActionControl
+import ChPyNetSendPack
+import NetPackCommon
+import IpyGameDataPY
+import GameWorld
+
+Def_RecType_CrossActAllRecharge = ShareDefine.Def_UniversalGameRecType_CrossActAllRecharge
+'''
+跨服全民充值活动信息
+ShareDefine.Def_UniversalGameRecType_CrossActAllRecharge
+value1:zoneID            分区ID
+value2:playerID         玩家ID
+value3:totalRMB        总充值
+value4:cfgID            cfgID
+StrValue3:                账号
+'''
+def GetRecZoneID(recData): return recData.GetValue1()
+def SetRecZoneID(recData, zoneID): return recData.SetValue1(zoneID)
+def GetRecPlayerID(recData): return recData.GetValue2()
+def SetRecPlayerID(recData, playerID): return recData.SetValue2(playerID)
+def GetRecTotalRecharge(recData): return recData.GetValue3()
+def SetRecTotalRecharge(recData, totalRMB): return recData.SetValue3(totalRMB)
+def GetRecCfgID(recData): return recData.GetValue4()
+def SetRecCfgID(recData, cfgID): return recData.SetValue4(cfgID)
+def GetRecAccID(recData): return recData.GetStrValue3()
+def SetRecAccID(recData, accID): return recData.SetStrValue3(accID)
+
+
+def OnPlayerLogin(curPlayer):
+    if GameWorld.IsCrossServer():
+        return
+    Sync_CrossActAllRechargeInfo(curPlayer)
+    return
+
+def Sync_AllRechargeDataToClientServer(serverGroupID=0):
+    GameWorld.Log("同步给子服对应的跨服全民充值信息: syncServerGroupID=%s" % (serverGroupID))
+    
+    allRechargeInfo = {} # 全民充值信息
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
+    for index in range(recDataList.Count()):
+        recData = recDataList.At(index)
+        cfgID = GetRecCfgID(recData)
+        zoneID = GetRecZoneID(recData)
+        playerID = GetRecPlayerID(recData)
+        totalRecharge = GetRecTotalRecharge(recData)
+        
+        key = (cfgID, zoneID)
+        if key not in allRechargeInfo:
+            allRechargeInfo[key] = {}
+        zoneInfo = allRechargeInfo[key]
+        zoneInfo[playerID] = totalRecharge
+        
+    dataMsg = {"syncType":"All", "allRechargeInfo":allRechargeInfo}
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ActAllRechargeInfo, dataMsg)
+    return
+
+def OnActIDChange(ipyData, state):
+    ## 活动状态变更
+    
+    cfgID = ipyData.GetCfgID()
+    zoneID = ipyData.GetZoneID()
+    
+    if not state:
+        actDataInfo = {}
+        universalRecMgr = GameWorld.GetUniversalRecMgr()
+        recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
+        for index in range(recDataList.Count()):
+            recData = recDataList.At(index)
+            recCfgID = GetRecCfgID(recData)
+            recZoneID = GetRecZoneID(recData)
+            if recCfgID != cfgID or recZoneID != zoneID:
+                continue
+            
+            playerID = GetRecPlayerID(recData)
+            totalRecharge = GetRecTotalRecharge(recData)
+            accID = GetRecAccID(recData)
+            
+            key = (recCfgID, recZoneID)
+            if key not in actDataInfo:
+                actDataInfo[key] = []
+            zoneDataList = actDataInfo[key]
+            zoneDataList.append([totalRecharge, playerID, accID])
+            
+        # 输出流向
+        for key, zoneDataList in actDataInfo.items():
+            recCfgID, recZoneID = key
+            zoneDataList.sort(reverse=True)
+            GameWorld.Log("跨服全民充值活动结束! CfgID=%s,ZoneID=%s,DataCount=%s" % (recCfgID, recZoneID, len(zoneDataList)))
+            for dataInfo in zoneDataList:
+                totalRecharge, playerID, accID = dataInfo
+                drDataDict = {"CfgID":recCfgID, "ZoneID":recZoneID, "TotalRecharge":totalRecharge, "PlayerID":playerID, "AccID":accID}
+                DataRecordPack.SendEventPack("CrossActAllRecharge", drDataDict)
+                
+        return
+    
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
+    delDataCount = 0
+    for index in range(recDataList.Count())[::-1]:
+        recData = recDataList.At(index)
+        recZoneID = GetRecZoneID(recData)
+        if recZoneID != zoneID:
+            continue
+        recDataList.Delete(index)
+        delDataCount += 1
+        
+    GameWorld.Log("重置跨服全民充值活动信息! cfgID=%s,ZoneID=%s,DataCount=%s" % (cfgID, zoneID, delDataCount))
+    dataMsg = {"syncType":"New", "cfgID":cfgID, "zoneID":zoneID}
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ActAllRechargeInfo, dataMsg)
+    return
+
+def ClientServerMsg_ActAllRechargeValue(serverGroupID, msgData):
+    ## 收到子服同步信息  - 玩家充值额度
+    
+    cfgID = msgData["cfgID"]
+    zoneID = msgData["zoneID"]
+    playerID = msgData["playerID"]
+    totalRMB = msgData["totalRMB"]
+    accID = msgData["accID"]
+    
+    crossActInfoDict = CrossActionControl.GetCrossActInfoDict()
+    curActInfoDict = crossActInfoDict.get(ShareDefine.CrossActName_AllRecharge, {})
+    if cfgID not in curActInfoDict:
+        return
+    actInfo = curActInfoDict[cfgID]
+    if not actInfo[ShareDefine.ActKey_State]:
+        return
+    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+    if not ipyDataDict:
+        return
+    ipyZoneID = ipyDataDict.get("ZoneID", 0)
+    if zoneID != ipyZoneID:
+        return
+    
+    findRec = None
+    universalRecMgr = GameWorld.GetUniversalRecMgr()
+    recDataList = universalRecMgr.GetTypeList(Def_RecType_CrossActAllRecharge)
+    for index in range(recDataList.Count()):
+        recData = recDataList.At(index)
+        recCfgID = GetRecCfgID(recData)
+        recZoneID = GetRecZoneID(recData)
+        recPlayerID = GetRecPlayerID(recData)
+        if recCfgID != cfgID or recZoneID != zoneID or recPlayerID != playerID:
+            continue
+        findRec = recData
+        totalRMBBefore = GetRecTotalRecharge(recData)
+        SetRecTotalRecharge(recData, totalRMB)
+        GameWorld.Log("跨服全民充值玩家充值额度更新: cfgID=%s,zoneID=%s,totalRMBBefore=%s,totalRMB=%s,accID=%s" 
+                      % (cfgID, zoneID, totalRMBBefore, totalRMB, accID), playerID)
+        break
+    
+    if not findRec:
+        recData = recDataList.AddRec()
+        SetRecZoneID(recData, zoneID)
+        SetRecPlayerID(recData, playerID)
+        SetRecTotalRecharge(recData, totalRMB)
+        SetRecCfgID(recData, cfgID)
+        SetRecAccID(recData, accID)
+        GameWorld.Log("跨服全民充值玩家充值额度新增: cfgID=%s,zoneID=%s,totalRMB=%s,accID=%s" 
+                      % (cfgID, zoneID, totalRMB, accID), playerID)
+        
+    dataMsg = {"syncType":"PlayerAllRechargeValue", "cfgID":cfgID, "zoneID":zoneID, "playerID":playerID, 
+               "totalRMB":totalRMB, "accID":accID}
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ActAllRechargeInfo, dataMsg)
+    return
+
+def CrossServerMsg_ActAllRechargeInfo(msgData):
+    
+    syncType = msgData.get("syncType")
+    
+    # 所有数据同步
+    if syncType == "All":
+        allRechargeInfo = msgData["allRechargeInfo"]
+        for key, zoneInfo in allRechargeInfo.items():
+            PyGameData.g_crossActAllRechargeInfo[key] = zoneInfo
+            Sync_CrossActAllRechargeInfo(syncKey=key)
+        return
+    
+    # 新活动
+    if syncType == "New":
+        cfgID = msgData["cfgID"]
+        zoneID = msgData["zoneID"]
+        for key in PyGameData.g_crossActAllRechargeInfo.keys():
+            if zoneID == key[1]:
+                PyGameData.g_crossActAllRechargeInfo.pop(key)
+        newKey = (cfgID, zoneID)
+        PyGameData.g_crossActAllRechargeInfo[newKey] = {}
+        Sync_CrossActAllRechargeInfo(syncKey=newKey)
+        return
+    
+    # 玩家充值总额更新
+    if syncType == "PlayerAllRechargeValue":
+        cfgID = msgData["cfgID"]
+        zoneID = msgData["zoneID"] 
+        playerID = msgData["playerID"]
+        totalRMB = msgData["totalRMB"] 
+        #accID = msgData["accID"]
+        key = (cfgID, zoneID)
+        if key not in PyGameData.g_crossActAllRechargeInfo:
+            PyGameData.g_crossActAllRechargeInfo[key] = {}
+        zoneInfo = PyGameData.g_crossActAllRechargeInfo[key]
+        playerRMB = zoneInfo.get(playerID, 0)
+        zoneInfo[playerID] = totalRMB
+        
+        actInfoDict = PyGameData.g_crossActInfoDict.get(ShareDefine.CrossActName_AllRecharge, {})
+        actInfo = actInfoDict.get(cfgID, {})
+        state = actInfo.get(ShareDefine.ActKey_State, 0)
+        ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+        if not state or zoneID != ipyDataDict.get("ZoneID"):
+            return
+        templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
+        ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActAllRechargeTemplate", templateID)
+        if not ipyDataList:
+            return
+        
+        isSync = False
+        for ipyData in ipyDataList:
+            needRMB = ipyData.GetCTGNeed()
+            if playerRMB < needRMB and totalRMB >= needRMB:
+                isSync = True
+                break
+            
+        if isSync:
+            Sync_CrossActAllRechargeInfo(syncKey=key)
+            
+        return
+    
+    return
+
+
+def MapServer_CrossActAllRecharge(curPlayer, msgList):
+    ## 
+    
+    playerID = curPlayer.GetPlayerID()
+    msgType = msgList[0]
+    msgData = msgList[1]
+    
+    if msgType == "AllRechargeRMB":
+        cfgID, zoneID, totalRMB = msgData
+        actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+        if not actInfo.get(ShareDefine.ActKey_State):
+            return
+        key = (cfgID, zoneID)
+        zoneInfo = PyGameData.g_crossActAllRechargeInfo.get(key, {})
+        playerRMB = zoneInfo.get(playerID, 0)
+        if playerRMB == totalRMB:
+            return
+        
+        # 同步跨服服务器
+        dataMsg = {"cfgID":cfgID, "zoneID":zoneID, "playerID":playerID, "totalRMB":totalRMB, "accID":curPlayer.GetAccID()}
+        CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ActAllRechargeValue, dataMsg)
+        
+    if msgType == "AllRechargeAward":
+        cfgID, zoneID, awardIndex = msgData
+        GameWorld.Log("跨服全民充值玩家领奖: cfgID=%s,zoneID=%s,awardIndex=%s" % (cfgID, zoneID, awardIndex), playerID)
+        actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+        if not actInfo.get(ShareDefine.ActKey_State):
+            return
+        
+        templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
+        ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActAllRechargeTemplate", templateID)
+        if not ipyDataList:
+            return
+        
+        zoneInfo = PyGameData.g_crossActAllRechargeInfo.get((cfgID, zoneID), {})
+        for ipyData in ipyDataList:
+            if awardIndex != ipyData.GetAwardIndex():
+                continue
+            ctgNeed = ipyData.GetCTGNeed()
+            needPlayerCount = ipyData.GetNeedPlayerCount()
+            nowPlayerCount = 0
+            for totalRMB in zoneInfo.values():
+                if totalRMB >= ctgNeed:
+                    nowPlayerCount += 1
+                    
+            if nowPlayerCount < needPlayerCount:
+                GameWorld.Log("所需全民充值玩家数不足,无法领奖: cfgID=%s,zoneID=%s,awardIndex=%s,ctgNeed=%s,nowPlayerCount=%s < %s" 
+                              % (cfgID, zoneID, awardIndex, ctgNeed, nowPlayerCount, needPlayerCount), playerID)
+                return
+            
+            awardItemList = ipyData.GetAwardItemList()
+            sysMsg = str([msgType, awardIndex, awardItemList])
+            curPlayer.MapServer_QueryPlayerResult(0, 0, "CrossActAllRecharge", sysMsg, len(sysMsg))
+            return
+        
+    return
+
+
+def Sync_CrossActAllRechargeInfo(curPlayer=None, syncKey=None):
+    ## 通知活动信息
+    
+    if curPlayer:
+        actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+        # 活动中同步活动信息
+        if not actInfo.get(ShareDefine.ActKey_State):
+            return
+        cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+        ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+        if not ipyDataDict:
+            return
+        zoneID = ipyDataDict.get("ZoneID")
+        if not cfgID or not zoneID:
+            return
+        
+    elif syncKey and len(syncKey) == 2:
+        cfgID, zoneID = syncKey
+        actInfoDict = PyGameData.g_crossActInfoDict.get(ShareDefine.CrossActName_AllRecharge, {})
+        if not actInfoDict:
+            return
+        actInfo = actInfoDict.get(cfgID, {})
+        if not actInfo:
+            return
+        if not actInfo.get(ShareDefine.ActKey_State, 0):
+            return
+        ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+        if not ipyDataDict:
+            return
+        if not cfgID or zoneID != ipyDataDict.get("ZoneID"):
+            return
+    else:
+        return
+    
+    templateID = actInfo.get(ShareDefine.ActKey_TemplateID, 0)
+    ipyDataList = IpyGameDataPY.GetIpyGameDataList("CrossActAllRechargeTemplate", templateID)
+    if not ipyDataList:
+        return
+    
+    zoneInfo = PyGameData.g_crossActAllRechargeInfo.get((cfgID, zoneID), {})
+    
+    actPack = ChPyNetSendPack.tagGCCrossActAllRechargeInfo()
+    actPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, []))
+    actPack.ServerInfoLen = len(actPack.ServerIDRangeInfo)
+    actPack.StartDate = ipyDataDict.get("StartDate", "")
+    actPack.EndtDate = ipyDataDict.get("EndDate", "")
+    actPack.AwardList = []
+    
+    for ipyData in ipyDataList:
+        award = ChPyNetSendPack.tagGCCrossActAllRechargeAward()
+        award.AwardIndex = ipyData.GetAwardIndex()
+        award.NeedRMB = ipyData.GetCTGNeed()
+        award.NeedPlayerCount = ipyData.GetNeedPlayerCount()
+        award.AwardItemList = []
+        for itemID, itemCount, isAuctionItem in ipyData.GetAwardItemList():
+            item = ChPyNetSendPack.tagGCCrossActAllRechargeItem()
+            item.ItemID = itemID
+            item.ItemCount = itemCount
+            item.IsBind = isAuctionItem
+            award.AwardItemList.append(item)
+        award.AwardItemCount = len(award.AwardItemList)
+        
+        nowPlayerCount = 0
+        for totalRMB in zoneInfo.values():
+            if totalRMB >= ipyData.GetCTGNeed():
+                nowPlayerCount += 1
+        award.NowPlayerCount = nowPlayerCount
+        
+        actPack.AwardList.append(award)
+    actPack.AwardCount = len(actPack.AwardList)
+    
+    if curPlayer:
+        NetPackCommon.SendFakePack(curPlayer, actPack)
+    else:
+        playerManager = GameWorld.GetPlayerManager()
+        for i in xrange(playerManager.GetActivePlayerCount()):
+            curPlayer = playerManager.GetActivePlayerAt(i)
+            if curPlayer == None or not curPlayer.GetInitOK():
+                continue
+            
+            actInfo = CrossActionControl.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+            state = actInfo.get(ShareDefine.ActKey_State)
+            pCfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+            ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+            pZoneID = ipyDataDict.get("ZoneID")
+            if not state or pCfgID != cfgID or pZoneID != zoneID:
+                continue
+            
+            NetPackCommon.SendFakePack(curPlayer, actPack)
+            
+    return
+
+
+
+
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActionControl.py
index e972b26..81cee13 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossActionControl.py
@@ -585,6 +585,10 @@
         if actName == ShareDefine.CrossActName_LuckyCloudBuy:
             import CrossLuckyCloudBuy
             CrossLuckyCloudBuy.OnLuckyCloudBuyReset(ipyData, state)
+        elif actName == ShareDefine.CrossActName_AllRecharge:
+            import CrossActAllRecharge
+            CrossActAllRecharge.OnActIDChange(ipyData, state)
+            
     return
 
 def Sync_CrossActInfoToClientServer(serverGroupID=0):
@@ -633,6 +637,26 @@
                 
     return
 
+def GetPlayerCrossActInfo(curPlayer, actName):
+    ## 获取跨服玩家对应的跨服活动信息
+    actInfoDict = PyGameData.g_crossActInfoDict.get(actName, {})
+    if not actInfoDict:
+        return {}
+    playerServerID = GameWorld.GetPlayerServerID(curPlayer)
+    for actInfo in actInfoDict.values():
+        if not actInfo.get(ShareDefine.ActKey_State, 0):
+            continue
+        if ShareDefine.ActKey_ServerIDRangeList not in actInfo:
+            continue
+        serverIDRangeList = actInfo[ShareDefine.ActKey_ServerIDRangeList]
+        if not serverIDRangeList:
+            # 全服开启
+            return actInfo
+        for serverIDA, serverIDB in serverIDRangeList:
+            if serverIDA <= playerServerID <= serverIDB:
+                return actInfo
+    return {}
+
 def SendMapServerCrossActionState():
     # 地图启动成功时通知跨服活动相关状态  - 本服地图,跨服地图不需要通知
     
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
index a6fc4a8..d3fce10 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -24,6 +24,7 @@
 import CrossRealmPlayer
 import PlayerCompensation
 import CrossActionControl
+import CrossActAllRecharge
 import CrossChampionship
 import CrossBattlefield
 import CrossBillboard
@@ -159,6 +160,9 @@
         elif msgType == ShareDefine.ClientServerMsg_ChampionshipWorship:
             CrossChampionship.ClientServerMsg_ChampionshipWorship(serverGroupID, msgData)
             
+        elif msgType == ShareDefine.ClientServerMsg_ActAllRechargeValue:
+            CrossActAllRecharge.ClientServerMsg_ActAllRechargeValue(serverGroupID, msgData)
+            
         # 需要发送到地图服务器处理的
         elif msgType in [ShareDefine.ClientServerMsg_Reborn, ShareDefine.ClientServerMsg_CollectNPC]:
             MapServer_CrossServerReceiveMsg(msgType, msgData, serverGroupID)
@@ -193,6 +197,7 @@
     CrossBoss.Sync_CrossBossInitDataToClientServer(serverGroupID)
     CrossActionControl.Sync_CrossActInfoToClientServer(serverGroupID)
     CrossLuckyCloudBuy.Sync_LuckyCloudBuyDataToClientServer(tick, serverGroupID)
+    CrossActAllRecharge.Sync_AllRechargeDataToClientServer(serverGroupID)
     PlayerCompensation.Sync_CrossMailPlayerIDToClientServer(serverGroupID)
     return
 
@@ -359,6 +364,9 @@
         elif msgType == ShareDefine.CrossServerMsg_ChampionshipDailyOfficial:
             CrossChampionship.CrossServerMsg_ChampionshipDailyOfficial(msgData)
             
+        elif msgType == ShareDefine.CrossServerMsg_ActAllRechargeInfo:
+            CrossActAllRecharge.CrossServerMsg_ActAllRechargeInfo(msgData)
+            
         elif msgType == ShareDefine.CrossServerMsg_SyncBillboard:
             CrossBillboard.CrossServerMsg_SyncBillboard(msgData, tick)
             
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index e0c39da..b86addc 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -800,6 +800,27 @@
                         ("list", "SuperItemWeightInfo", 0),
                         ),
 
+                "CrossActAllRecharge":(
+                        ("DWORD", "CfgID", 1),
+                        ("char", "ActGroupName", 0),
+                        ("BYTE", "ZoneID", 0),
+                        ("list", "ServerIDRangeList", 0),
+                        ("char", "StartDate", 0),
+                        ("char", "EndDate", 0),
+                        ("dict", "NotifyInfoStart", 0),
+                        ("dict", "NotifyInfoEnd", 0),
+                        ("list", "NotifyInfoLoop", 0),
+                        ("list", "TemplateIDList", 0),
+                        ),
+
+                "CrossActAllRechargeTemplate":(
+                        ("DWORD", "TemplateID", 1),
+                        ("DWORD", "CTGNeed", 0),
+                        ("WORD", "NeedPlayerCount", 0),
+                        ("BYTE", "AwardIndex", 0),
+                        ("list", "AwardItemList", 0),
+                        ),
+
                 "CrossActCTGBillboard":(
                         ("DWORD", "CfgID", 1),
                         ("char", "ActGroupName", 0),
@@ -2459,6 +2480,50 @@
     def GetRandAwardWeightInfo(self): return self.RandAwardWeightInfo # 每次购买随机奖励权重信息 [[权重,物品ID,个数,是否拍品], ...]
     def GetSuperItemWeightInfo(self): return self.SuperItemWeightInfo # 大奖随机权重信息  [[权重,物品ID,个数,是否拍品,价值货币类型,货币值], ...]
 
+# 跨服全民充值时间表
+class IPY_CrossActAllRecharge():
+    
+    def __init__(self):
+        self.CfgID = 0
+        self.ActGroupName = ""
+        self.ZoneID = 0
+        self.ServerIDRangeList = []
+        self.StartDate = ""
+        self.EndDate = ""
+        self.NotifyInfoStart = {}
+        self.NotifyInfoEnd = {}
+        self.NotifyInfoLoop = []
+        self.TemplateIDList = []
+        return
+        
+    def GetCfgID(self): return self.CfgID # 配置ID
+    def GetActGroupName(self): return self.ActGroupName # 活动组名(同组活动的名字需相同)
+    def GetZoneID(self): return self.ZoneID # 组内分组编号
+    def GetServerIDRangeList(self): return self.ServerIDRangeList # 活动的账号服务器ID范围列表 [[serverIDA, serverIDB], ...]
+    def GetStartDate(self): return self.StartDate # 开启日期
+    def GetEndDate(self): return self.EndDate # 结束日期
+    def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+    def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+    def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[循环分钟, 广播key, [广播参数列表可选]]
+    def GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表
+
+# 跨服全民充值模板表
+class IPY_CrossActAllRechargeTemplate():
+    
+    def __init__(self):
+        self.TemplateID = 0
+        self.CTGNeed = 0
+        self.NeedPlayerCount = 0
+        self.AwardIndex = 0
+        self.AwardItemList = []
+        return
+        
+    def GetTemplateID(self): return self.TemplateID # 模板ID
+    def GetCTGNeed(self): return self.CTGNeed # 全民充值RMB
+    def GetNeedPlayerCount(self): return self.NeedPlayerCount # 所需充值达到该档玩家数
+    def GetAwardIndex(self): return self.AwardIndex # 奖励记录索引,从0开始,同个模板不可重复,不可变更
+    def GetAwardItemList(self): return self.AwardItemList # 奖励物品列表[[物品ID,个数,是否拍品], ...]
+
 # 跨服充值排行活动时间表
 class IPY_CrossActCTGBillboard():
     
@@ -2731,6 +2796,10 @@
         self.ipyCrossActLuckyCloudBuyLen = len(self.ipyCrossActLuckyCloudBuyCache)
         self.ipyCrossActLuckyCloudBuyTemplateCache = self.__LoadFileData("CrossActLuckyCloudBuyTemplate", IPY_CrossActLuckyCloudBuyTemplate)
         self.ipyCrossActLuckyCloudBuyTemplateLen = len(self.ipyCrossActLuckyCloudBuyTemplateCache)
+        self.ipyCrossActAllRechargeCache = self.__LoadFileData("CrossActAllRecharge", IPY_CrossActAllRecharge)
+        self.ipyCrossActAllRechargeLen = len(self.ipyCrossActAllRechargeCache)
+        self.ipyCrossActAllRechargeTemplateCache = self.__LoadFileData("CrossActAllRechargeTemplate", IPY_CrossActAllRechargeTemplate)
+        self.ipyCrossActAllRechargeTemplateLen = len(self.ipyCrossActAllRechargeTemplateCache)
         self.ipyCrossActCTGBillboardCache = self.__LoadFileData("CrossActCTGBillboard", IPY_CrossActCTGBillboard)
         self.ipyCrossActCTGBillboardLen = len(self.ipyCrossActCTGBillboardCache)
         self.ipyCrossActCTGBillboardOrderCache = self.__LoadFileData("CrossActCTGBillboardOrder", IPY_CrossActCTGBillboardOrder)
@@ -3053,6 +3122,10 @@
     def GetCrossActLuckyCloudBuyByIndex(self, index): return self.ipyCrossActLuckyCloudBuyCache[index]
     def GetCrossActLuckyCloudBuyTemplateCount(self): return self.ipyCrossActLuckyCloudBuyTemplateLen
     def GetCrossActLuckyCloudBuyTemplateByIndex(self, index): return self.ipyCrossActLuckyCloudBuyTemplateCache[index]
+    def GetCrossActAllRechargeCount(self): return self.ipyCrossActAllRechargeLen
+    def GetCrossActAllRechargeByIndex(self, index): return self.ipyCrossActAllRechargeCache[index]
+    def GetCrossActAllRechargeTemplateCount(self): return self.ipyCrossActAllRechargeTemplateLen
+    def GetCrossActAllRechargeTemplateByIndex(self, index): return self.ipyCrossActAllRechargeTemplateCache[index]
     def GetCrossActCTGBillboardCount(self): return self.ipyCrossActCTGBillboardLen
     def GetCrossActCTGBillboardByIndex(self, index): return self.ipyCrossActCTGBillboardCache[index]
     def GetCrossActCTGBillboardOrderCount(self): return self.ipyCrossActCTGBillboardOrderLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
index 1516745..43cad44 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerQuery.py
@@ -72,6 +72,7 @@
 import CrossRealmPK
 import CrossChampionship
 import CrossBattlefield
+import CrossActAllRecharge
 import ChPyNetSendPack
 import NetPackCommon
 import AuctionHouse
@@ -668,6 +669,14 @@
         CrossBattlefield.MapServer_CrossBattlefieldOver(eval(resultName))
         return
     
+    # 跨服全民充值
+    if callName == "CrossActAllRecharge":
+        curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
+        if not curPlayer:
+            return
+        CrossActAllRecharge.MapServer_CrossActAllRecharge(curPlayer, eval(resultName))
+        return
+    
     #py喇叭聊天
     if callName == 'PYSpeaker':
         curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(srcPlayerID)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
index 1790f5f..ad10ecf 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/PyGameData.py
@@ -147,6 +147,8 @@
 
 g_championshipMgr = None # 跨服排位争霸赛管理
 
+g_crossActAllRechargeInfo = {} # 跨服全民充值信息,本服用 {zoneID:{playerID:总充值, ...}, ...}
+
 g_familyTalkCache = {} #{familyID:[[time,content,extras],..]}
 g_worldTalkCache = [] #[[time,name, playerID, content,extras],..]
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 21e3601..a514288 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -330,12 +330,13 @@
 
 #跨服运营活动表名定义
 CrossActName_CTGBillboard = "CrossActCTGBillboard" # 充值排行榜
+CrossActName_AllRecharge = "CrossActAllRecharge" # 全民充值
 CrossActName_LuckyCloudBuy = "CrossActLuckyCloudBuy" # 幸运云购
 
 #跨服运营活动列表
-CrossActNameList = [CrossActName_CTGBillboard, CrossActName_LuckyCloudBuy]
+CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy]
 #需要锁定活动分区分配直到活动结束的跨服运营活动,即使热更分区配置,也不会改变正在活动中的分区设定,直到活动结束
-CrossActLockServerGroupIDList = [CrossActName_CTGBillboard]
+CrossActLockServerGroupIDList = [CrossActName_CTGBillboard, CrossActName_AllRecharge]
 
 #活动信息字典key定义
 ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -1250,7 +1251,7 @@
                                 Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
                                 Def_UniversalGameRecType_CrossChampionshipOfficial, # 跨服排位争霸赛最终排名官职信息 35
                                 Def_UniversalGameRecType_CrossChampionshipOffChallenge, # 跨服排位争霸赛官职挑战信息 36
-                                Def_UniversalGameRecType_37,
+                                Def_UniversalGameRecType_CrossActAllRecharge, # 跨服全服充值活动信息 37
                                 Def_UniversalGameRecType_38,
                                 Def_UniversalGameRecType_39,
                                 Def_UniversalGameRecType_40,
@@ -1448,6 +1449,7 @@
 CrossServerMsg_ChampionshipGuess = "ChampionshipGuess"  # 跨服排位争霸赛竞猜信息
 CrossServerMsg_ChampionshipOfficial = "ChampionshipOfficial"  # 跨服排位争霸赛官职信息
 CrossServerMsg_ChampionshipDailyOfficial = "ChampionshipDailyOfficial"  # 跨服排位争霸赛每日官职信息
+CrossServerMsg_ActAllRechargeInfo = "ActAllRechargeInfo"# 跨服全民充值信息
 
 # 子服发送跨服信息定义
 ClientServerMsg_ServerInitOK = "ServerInitOK"           # 子服启动成功
@@ -1482,6 +1484,7 @@
 ClientServerMsg_ChampionshipOfficialChallenge = "ChampionshipOfficialChallenge" # 跨服排位挑战仙官
 ClientServerMsg_ChampionshipGuess = "ChampionshipGuess" # 跨服排位竞猜
 ClientServerMsg_ChampionshipWorship = "ChampionshipWorship" # 跨服排位膜拜
+ClientServerMsg_ActAllRechargeValue = "ActAllRechargeValue" # 跨服全民充值额度
 
 #跨服广播类型定义
 CrossNotify_CrossAct = "CrossAct"
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 0836f7d..0919513 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -5263,6 +5263,224 @@
 
 
 #------------------------------------------------------
+# AC 13 跨服全民充值活动信息 #tagGCCrossActAllRechargeInfo
+
+class  tagGCCrossActAllRechargeItem(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("ItemID", c_int),    
+                  ("ItemCount", c_ushort),    
+                  ("IsBind", c_ubyte),    # 是否拍品
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.ItemID = 0
+        self.ItemCount = 0
+        self.IsBind = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagGCCrossActAllRechargeItem)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AC 13 跨服全民充值活动信息 //tagGCCrossActAllRechargeInfo:
+                                ItemID:%d,
+                                ItemCount:%d,
+                                IsBind:%d
+                                '''\
+                                %(
+                                self.ItemID,
+                                self.ItemCount,
+                                self.IsBind
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeAward(Structure):
+    AwardIndex = 0    #(BYTE AwardIndex)// 奖励索引 0~31
+    NeedRMB = 0    #(DWORD NeedRMB)// 所需全民充值RMB
+    NeedPlayerCount = 0    #(WORD NeedPlayerCount)// 所需充值达到该档玩家数
+    NowPlayerCount = 0    #(WORD NowPlayerCount)// 当前充值达到该档玩家数
+    AwardItemCount = 0    #(BYTE AwardItemCount)// 奖励物品数
+    AwardItemList = list()    #(vector<tagGCCrossActAllRechargeItem> AwardItemList)// 奖励物品信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.NeedRMB,_pos = CommFunc.ReadDWORD(_lpData, _pos)
+        self.NeedPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.NowPlayerCount,_pos = CommFunc.ReadWORD(_lpData, _pos)
+        self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardItemCount):
+            temAwardItemList = tagGCCrossActAllRechargeItem()
+            _pos = temAwardItemList.ReadData(_lpData, _pos)
+            self.AwardItemList.append(temAwardItemList)
+        return _pos
+
+    def Clear(self):
+        self.AwardIndex = 0
+        self.NeedRMB = 0
+        self.NeedPlayerCount = 0
+        self.NowPlayerCount = 0
+        self.AwardItemCount = 0
+        self.AwardItemList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += 1
+        length += 4
+        length += 2
+        length += 2
+        length += 1
+        for i in range(self.AwardItemCount):
+            length += self.AwardItemList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteBYTE(data, self.AwardIndex)
+        data = CommFunc.WriteDWORD(data, self.NeedRMB)
+        data = CommFunc.WriteWORD(data, self.NeedPlayerCount)
+        data = CommFunc.WriteWORD(data, self.NowPlayerCount)
+        data = CommFunc.WriteBYTE(data, self.AwardItemCount)
+        for i in range(self.AwardItemCount):
+            data = CommFunc.WriteString(data, self.AwardItemList[i].GetLength(), self.AwardItemList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                AwardIndex:%d,
+                                NeedRMB:%d,
+                                NeedPlayerCount:%d,
+                                NowPlayerCount:%d,
+                                AwardItemCount:%d,
+                                AwardItemList:%s
+                                '''\
+                                %(
+                                self.AwardIndex,
+                                self.NeedRMB,
+                                self.NeedPlayerCount,
+                                self.NowPlayerCount,
+                                self.AwardItemCount,
+                                "..."
+                                )
+        return DumpString
+
+
+class  tagGCCrossActAllRechargeInfo(Structure):
+    Head = tagHead()
+    ServerInfoLen = 0    #(BYTE ServerInfoLen)
+    ServerIDRangeInfo = ""    #(String ServerIDRangeInfo)//开放该活动的服务器ID范围列表,json格式 [[IDA, IDB], ...], [] 为全服
+    StartDate = ""    #(char StartDate[10])// 开始日期 y-m-d
+    EndtDate = ""    #(char EndtDate[10])// 结束日期 y-m-d
+    AwardCount = 0    #(BYTE AwardCount)
+    AwardList = list()    #(vector<tagGCCrossActAllRechargeAward> AwardList)// 奖励档次信息
+    data = None
+
+    def __init__(self):
+        self.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        return
+
+    def ReadData(self, _lpData, _pos=0, _Len=0):
+        self.Clear()
+        _pos = self.Head.ReadData(_lpData, _pos)
+        self.ServerInfoLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerIDRangeInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.ServerInfoLen)
+        self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+        self.AwardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        for i in range(self.AwardCount):
+            temAwardList = tagGCCrossActAllRechargeAward()
+            _pos = temAwardList.ReadData(_lpData, _pos)
+            self.AwardList.append(temAwardList)
+        return _pos
+
+    def Clear(self):
+        self.Head = tagHead()
+        self.Head.Clear()
+        self.Head.Cmd = 0xAC
+        self.Head.SubCmd = 0x13
+        self.ServerInfoLen = 0
+        self.ServerIDRangeInfo = ""
+        self.StartDate = ""
+        self.EndtDate = ""
+        self.AwardCount = 0
+        self.AwardList = list()
+        return
+
+    def GetLength(self):
+        length = 0
+        length += self.Head.GetLength()
+        length += 1
+        length += len(self.ServerIDRangeInfo)
+        length += 10
+        length += 10
+        length += 1
+        for i in range(self.AwardCount):
+            length += self.AwardList[i].GetLength()
+
+        return length
+
+    def GetBuffer(self):
+        data = ''
+        data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+        data = CommFunc.WriteBYTE(data, self.ServerInfoLen)
+        data = CommFunc.WriteString(data, self.ServerInfoLen, self.ServerIDRangeInfo)
+        data = CommFunc.WriteString(data, 10, self.StartDate)
+        data = CommFunc.WriteString(data, 10, self.EndtDate)
+        data = CommFunc.WriteBYTE(data, self.AwardCount)
+        for i in range(self.AwardCount):
+            data = CommFunc.WriteString(data, self.AwardList[i].GetLength(), self.AwardList[i].GetBuffer())
+        return data
+
+    def OutputString(self):
+        DumpString = '''
+                                Head:%s,
+                                ServerInfoLen:%d,
+                                ServerIDRangeInfo:%s,
+                                StartDate:%s,
+                                EndtDate:%s,
+                                AwardCount:%d,
+                                AwardList:%s
+                                '''\
+                                %(
+                                self.Head.OutputString(),
+                                self.ServerInfoLen,
+                                self.ServerIDRangeInfo,
+                                self.StartDate,
+                                self.EndtDate,
+                                self.AwardCount,
+                                "..."
+                                )
+        return DumpString
+
+
+m_NAtagGCCrossActAllRechargeInfo=tagGCCrossActAllRechargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCrossActAllRechargeInfo.Head.Cmd,m_NAtagGCCrossActAllRechargeInfo.Head.SubCmd))] = m_NAtagGCCrossActAllRechargeInfo
+
+
+#------------------------------------------------------
 # AC 12 跨服运营活动结束 # tagGCCrossActEnd
 
 class  tagGCCrossActEnd(Structure):
@@ -32802,6 +33020,62 @@
 
 
 #------------------------------------------------------
+# AA 34 跨服全民充值活动玩家信息 #tagMCCrossActAllRechargePlayerInfo
+
+class  tagMCCrossActAllRechargePlayerInfo(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("CTGRMBTotal", c_int),    # 活动已累计充值RMB
+                  ("AwardRecord", c_int),    # 奖励记录,根据奖励索引位或运算判断是否已领取
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x34
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x34
+        self.CTGRMBTotal = 0
+        self.AwardRecord = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagMCCrossActAllRechargePlayerInfo)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 34 跨服全民充值活动玩家信息 //tagMCCrossActAllRechargePlayerInfo:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                CTGRMBTotal:%d,
+                                AwardRecord:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.CTGRMBTotal,
+                                self.AwardRecord
+                                )
+        return DumpString
+
+
+m_NAtagMCCrossActAllRechargePlayerInfo=tagMCCrossActAllRechargePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCCrossActAllRechargePlayerInfo.Cmd,m_NAtagMCCrossActAllRechargePlayerInfo.SubCmd))] = m_NAtagMCCrossActAllRechargePlayerInfo
+
+
+#------------------------------------------------------
 # AA 25 每日礼包活动信息 #tagMCDailyGiftbagInfo
 
 class  tagMCDailyGiftbagItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 9a22f95..8a3bf9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -123,6 +123,7 @@
 import PlayerLuckyTreasure
 import Item_ResetAttrPoint
 import CrossActCTGBillboard
+import CrossActAllRecharge
 import PlayerFuncSysPrivilege
 import PlayerActTurntable
 import PlayerTongTianLing
@@ -737,6 +738,8 @@
     
     #跨服充值排行
     CrossActCTGBillboard.OnPlayerLogin(curPlayer)
+    #跨服全民充值
+    CrossActAllRecharge.OnPlayerLogin(curPlayer)
     #消费返利
     PlayerCostRebate.OnPlayerLogin(curPlayer)
     #累计充值
@@ -5583,6 +5586,9 @@
     # 领取跨服充值排行活动达标奖励
     elif rewardType == ChConfig.Def_RewardType_CACTGBillboardDabiao:
         CrossActCTGBillboard.GetDabiaoAward(curPlayer, dataEx)
+    # 跨服全民充值奖励
+    elif rewardType == ChConfig.Def_RewardType_CAAllRecharge:
+        CrossActAllRecharge.GetCrossActAllRechargeAward(curPlayer, dataEx)
     #缥缈奇遇领取
     elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
         PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py
new file mode 100644
index 0000000..4bbd84b
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossActAllRecharge.py
@@ -0,0 +1,171 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.CrossActAllRecharge
+#
+# @todo:跨服全民充值
+# @author hxp
+# @date 2022-10-11
+# @version 1.0
+#
+# 详细描述: 跨服全民充值
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2022-10-11 19:00"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import ShareDefine
+import PlayerControl
+import NetPackCommon
+import CrossRealmPlayer
+import ChPyNetSendPack
+import ItemControler
+import IPY_GameWorld
+import GameWorld
+
+def OnPlayerLogin(curPlayer):
+    isReset = __CheckPlayerCrossActAllRecharge(curPlayer)
+    if not isReset:
+        actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+        # 活动中同步活动信息
+        if actInfo.get(ShareDefine.ActKey_State):
+            Sync_CrossActAllRechargePlayerInfo(curPlayer)
+            if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB):
+                SendGameServerActRechargeRMB(curPlayer, actInfo)
+    return
+
+def RefreshCrossActAllRechargeInfo():
+    ## 收到GameServer同步的活动信息,刷新活动信息
+    playerManager = GameWorld.GetPlayerManager()
+    for index in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(index)
+        if curPlayer.GetID() == 0:
+            continue
+        __CheckPlayerCrossActAllRecharge(curPlayer)
+        
+    return
+
+def __CheckPlayerCrossActAllRecharge(curPlayer):
+    
+    playerID = curPlayer.GetPlayerID()
+    
+    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
+    dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0)
+    
+    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeID) # 玩家身上的活动ID
+    
+    # 活动ID 相同的话不处理
+    if actID == playerActID:
+        GameWorld.DebugLog("跨服全民充值活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID)   
+        return
+    
+    GameWorld.DebugLog("跨服全民充值活动重置! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID)
+    
+    if not state:
+        CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_AllRecharge)
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeID, actID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, 0)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, 0)
+    
+    Sync_CrossActAllRechargePlayerInfo(curPlayer)
+    return True
+
+def GetCrossActAllRechargeAward(curPlayer, awardIndex):
+    ## 领奖
+    
+    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge)
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
+    if not state:
+        GameWorld.DebugLog("非活动中")
+        return
+    
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+    if not ipyDataDict:
+        return
+    zoneID = ipyDataDict.get("ZoneID", 0)
+    if not zoneID:
+        return
+    
+    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
+    if awardRecord & pow(2, awardIndex):
+        GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
+        return
+    
+    sendMsg = str(["AllRechargeAward", [cfgID, zoneID, awardIndex]])
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg))
+    return
+
+def GameServer_CrossActAllRecharge(curPlayer, msgList):
+    
+    msgType = msgList[0]
+    
+    if msgType == "AllRechargeAward":
+        awardIndex, awardItemList = msgList[1:]
+        
+        awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
+        if awardRecord & pow(2, awardIndex):
+            GameWorld.DebugLog("已领取过该奖励! awardIndex=%s" % awardIndex, curPlayer.GetPlayerID())
+            return
+        
+        if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
+            return
+        
+        updAwardRecord = awardRecord | pow(2, awardIndex)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeAward, updAwardRecord)
+        GameWorld.Log("领取全民充值奖励: awardIndex=%s" % (awardIndex), curPlayer.GetPlayerID())
+        
+        Sync_CrossActAllRechargePlayerInfo(curPlayer)
+        
+        for itemID, itemCount, isAuctionItem in awardItemList:
+            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem], 
+                                         event=["CrossActAllRecharge", False, {}])
+    return
+
+def AddCTGRMB(curPlayer, addRMB):
+    ## 增加活动已累计充值RMB
+    
+    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_AllRecharge) 
+    if not actInfo:
+        return
+    
+    if not actInfo.get(ShareDefine.ActKey_State):
+        GameWorld.DebugLog("跨服全民充值非活动中! playerServerID=%s" % GameWorld.GetPlayerServerID(curPlayer), curPlayer.GetPlayerID())
+        return
+    
+    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB) + addRMB
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_AllRechargeRMB, totalRMB)
+    
+    GameWorld.DebugLog("跨服全民充值活动增加玩家累计充值RMB: addRMB=%s,totalRMB=%s" % (addRMB, totalRMB), curPlayer.GetPlayerID())
+    Sync_CrossActAllRechargePlayerInfo(curPlayer)
+    SendGameServerActRechargeRMB(curPlayer, actInfo)
+    return
+
+def SendGameServerActRechargeRMB(curPlayer, actInfo):
+    cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+    ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {})
+    if not ipyDataDict:
+        return
+    zoneID = ipyDataDict.get("ZoneID", 0)
+    if not zoneID:
+        return
+    totalRMB = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB)
+    sendMsg = str(["AllRechargeRMB", [cfgID, zoneID, totalRMB]])
+    GameWorld.Log("SendGameServerActRechargeRMB: %s" % sendMsg, curPlayer.GetPlayerID())
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "CrossActAllRecharge", sendMsg, len(sendMsg))
+    return
+
+def Sync_CrossActAllRechargePlayerInfo(curPlayer):
+    ## 通知活动玩家数据信息
+    clientPack = ChPyNetSendPack.tagMCCrossActAllRechargePlayerInfo()
+    clientPack.CTGRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeRMB)
+    clientPack.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_AllRechargeAward)
+    NetPackCommon.SendFakePack(curPlayer, clientPack)
+    return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index df1ffa3..3882185 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -55,6 +55,7 @@
 import PlayerActRechargePrize
 import PlayerFamilyRedPacket
 import CrossActCTGBillboard
+import CrossActAllRecharge
 import PlayerActGrowupBuy
 import OpenServerCampaign
 import PlayerFeastTravel
@@ -440,6 +441,8 @@
     if coinType in [CoinType_Gold, CoinType_Buy]:
         #跨服充值排行活动
         CrossActCTGBillboard.AddCTGRMB(curPlayer, orderCoin)
+        #跨服全民充值
+        CrossActAllRecharge.AddCTGRMB(curPlayer, orderCoin)
         PlayerActManyDayRecharge.AddManyDayRechargeValue(curPlayer, orderCoin) # 多日连充
         #红包, 需要真实充值
         PlayerFamilyRedPacket.OnPlayerRecharge(curPlayer, orderCoin)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index c0ab8f2..3dbc8df 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -77,6 +77,7 @@
 import OpenServerCampaign
 import PlayerCostRebate
 import CrossActCTGBillboard
+import CrossActAllRecharge
 import PlayerActCollectWords
 import PlayerActTotalRecharge
 import PlayerActGarbageSorting
@@ -1483,7 +1484,10 @@
             
             if actionName == ShareDefine.CrossActName_CTGBillboard:
                 CrossActCTGBillboard.RefreshCrossActCTGBillboardInfo()
-            
+                
+            elif actionName == ShareDefine.CrossActName_AllRecharge:
+                CrossActAllRecharge.RefreshCrossActAllRechargeInfo()
+                
             return
         
         if key == ShareDefine.Def_Notify_WorldKey_CrossZoneName:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py
new file mode 100644
index 0000000..824405d
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossActAllRecharge.py
@@ -0,0 +1,49 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.RemoteQuery.GY_Query_CrossActAllRecharge
+#
+# @todo:跨服全民充值
+# @author hxp
+# @date 2022-10-11
+# @version 1.0
+#
+# 详细描述: 跨服全民充值
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2022-10-11 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import CrossActAllRecharge
+
+#------------------------------------------------------------------------------ 
+## 跨服赛报名调用接口
+#  @param query_Type 请求类型
+#  @param query_ID 请求的玩家ID
+#  @param packCMDList 发包命令
+#  @param tick 当前时间
+#  @return "True" or "False" or ""
+#  @remarks 函数详细说明.
+def DoLogic(query_Type, query_ID, packCMDList, tick): 
+    return
+
+
+#------------------------------------------------------------------------------ 
+## 执行结果
+#  @param curPlayer 发出请求的玩家
+#  @param callFunName 功能名称
+#  @param funResult 查询的结果
+#  @param tick 当前时间
+#  @return None
+#  @remarks 函数详细说明.
+def DoResult(curPlayer, callFunName, funResult, tick):
+    msgList = eval(funResult)
+    playerID = curPlayer.GetPlayerID()
+    GameWorld.Log("GY_Query_CrossActAllRecharge %s" % (msgList), playerID)
+    CrossActAllRecharge.GameServer_CrossActAllRecharge(curPlayer, msgList)
+    return
+    
+    
+    
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 21e3601..e179ade 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -330,12 +330,13 @@
 
 #跨服运营活动表名定义
 CrossActName_CTGBillboard = "CrossActCTGBillboard" # 充值排行榜
+CrossActName_AllRecharge = "CrossActAllRecharge" # 全民充值
 CrossActName_LuckyCloudBuy = "CrossActLuckyCloudBuy" # 幸运云购
 
 #跨服运营活动列表
-CrossActNameList = [CrossActName_CTGBillboard, CrossActName_LuckyCloudBuy]
+CrossActNameList = [CrossActName_CTGBillboard, CrossActName_AllRecharge, CrossActName_LuckyCloudBuy]
 #需要锁定活动分区分配直到活动结束的跨服运营活动,即使热更分区配置,也不会改变正在活动中的分区设定,直到活动结束
-CrossActLockServerGroupIDList = [CrossActName_CTGBillboard]
+CrossActLockServerGroupIDList = [CrossActName_CTGBillboard, CrossActName_AllRecharge]
 
 #活动信息字典key定义
 ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -1250,7 +1251,7 @@
                                 Def_UniversalGameRecType_CrossChampionshipGuess, # 跨服排位争霸赛竞猜记录信息 34
                                 Def_UniversalGameRecType_CrossChampionshipOfficial, # 跨服排位争霸赛最终排名官职信息 35
                                 Def_UniversalGameRecType_CrossChampionshipOffChallenge, # 跨服排位争霸赛官职挑战信息 36
-                                Def_UniversalGameRecType_37,
+                                Def_UniversalGameRecType_CrossActAllRecharge, # 跨服全服充值活动信息 37
                                 Def_UniversalGameRecType_38,
                                 Def_UniversalGameRecType_39,
                                 Def_UniversalGameRecType_40,

--
Gitblit v1.8.0