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