From 7081f1b83e14d451677f5e5525404983f3ac4eeb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 24 九月 2020 15:37:43 +0800
Subject: [PATCH] 8503 【长尾】【后端】充值多倍仙玉返利
---
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 44 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py | 10
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py | 195 +++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 291 +++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 7
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 5
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 291 +++++++++++++++++++
PySysDB/PySysDBG.h | 16 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4
12 files changed, 869 insertions(+), 3 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index 9cc9204..5e0a83e 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -515,6 +515,22 @@
WORD LVLimit; //限制等级
};
+//充值返利活动表
+
+struct tagActRechargePrize
+{
+ DWORD _CfgID; //配置ID
+ char ActMark; //活动组标记
+ list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有
+ list ServerIDList; //服务器ID列表
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ dict NotifyInfoStart; //全服提示信息 - 相对开始时间
+ dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
+ list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
+ BYTE IsDayReset; //是否每天重置
+};
+
//累计充值活动表
struct tagActTotalRecharge
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index cf09baf..2f15975 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -23872,6 +23872,189 @@
#------------------------------------------------------
+# AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
+
+class tagMCActRechargePrize(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("CTGID", c_ushort), # 对应充值表充值ID
+ ("GoldPrize", c_ushort), #返利仙玉数
+ ("PrizeCountLimit", 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.CTGID = 0
+ self.GoldPrize = 0
+ self.PrizeCountLimit = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActRechargePrize)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo:
+ CTGID:%d,
+ GoldPrize:%d,
+ PrizeCountLimit:%d
+ '''\
+ %(
+ self.CTGID,
+ self.GoldPrize,
+ self.PrizeCountLimit
+ )
+ return DumpString
+
+
+class tagMCActRechargePrizeDay(Structure):
+ Prizes = 0 #(BYTE Prizes)// 返利档数
+ PrizeInfo = list() #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Prizes):
+ temPrizeInfo = tagMCActRechargePrize()
+ _pos = temPrizeInfo.ReadData(_lpData, _pos)
+ self.PrizeInfo.append(temPrizeInfo)
+ return _pos
+
+ def Clear(self):
+ self.Prizes = 0
+ self.PrizeInfo = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ for i in range(self.Prizes):
+ length += self.PrizeInfo[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.Prizes)
+ for i in range(self.Prizes):
+ data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Prizes:%d,
+ PrizeInfo:%s
+ '''\
+ %(
+ self.Prizes,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActRechargePrizeInfo(Structure):
+ Head = tagHead()
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
+ PrizeDays = 0 #(BYTE PrizeDays)
+ PrizeDayInfo = list() #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x27
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.PrizeDays):
+ temPrizeDayInfo = tagMCActRechargePrizeDay()
+ _pos = temPrizeDayInfo.ReadData(_lpData, _pos)
+ self.PrizeDayInfo.append(temPrizeDayInfo)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x27
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.IsDayReset = 0
+ self.PrizeDays = 0
+ self.PrizeDayInfo = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 10
+ length += 10
+ length += 1
+ length += 1
+ for i in range(self.PrizeDays):
+ length += self.PrizeDayInfo[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndtDate)
+ data = CommFunc.WriteBYTE(data, self.IsDayReset)
+ data = CommFunc.WriteBYTE(data, self.PrizeDays)
+ for i in range(self.PrizeDays):
+ data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ StartDate:%s,
+ EndtDate:%s,
+ IsDayReset:%d,
+ PrizeDays:%d,
+ PrizeDayInfo:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.StartDate,
+ self.EndtDate,
+ self.IsDayReset,
+ self.PrizeDays,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo
+
+
+#------------------------------------------------------
# AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
class tagMCTotalRechargeAwardItem(Structure):
@@ -27250,6 +27433,114 @@
#------------------------------------------------------
+# AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
+
+class tagMCRechargePrizeInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("CTGID", c_ushort), # 对应充值表充值ID
+ ("PrizeCount", 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.CTGID = 0
+ self.PrizeCount = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCRechargePrizeInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo:
+ CTGID:%d,
+ PrizeCount:%d
+ '''\
+ %(
+ self.CTGID,
+ self.PrizeCount
+ )
+ return DumpString
+
+
+class tagMCRechargePrizePlayerInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ PlayerInfoList = list() #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x28
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temPlayerInfoList = tagMCRechargePrizeInfo()
+ _pos = temPlayerInfoList.ReadData(_lpData, _pos)
+ self.PlayerInfoList.append(temPlayerInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x28
+ self.Count = 0
+ self.PlayerInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.PlayerInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ PlayerInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo
+
+
+#------------------------------------------------------
# AA 11 限时特惠活动信息 #tagMCSpringSaleInfo
class tagMCSpringSaleItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 9c95488..1484ce7 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -433,6 +433,19 @@
("WORD", "LVLimit", 0),
),
+ "ActRechargePrize":(
+ ("DWORD", "CfgID", 1),
+ ("char", "ActMark", 0),
+ ("list", "PlatformList", 0),
+ ("list", "ServerIDList", 0),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("dict", "NotifyInfoStart", 0),
+ ("dict", "NotifyInfoEnd", 0),
+ ("list", "NotifyInfoLoop", 0),
+ ("BYTE", "IsDayReset", 0),
+ ),
+
"ActTotalRecharge":(
("DWORD", "CfgID", 1),
("char", "ActMark", 0),
@@ -1431,6 +1444,33 @@
def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
def GetLVLimit(self): return self.LVLimit # 限制等级
+# 充值返利活动表
+class IPY_ActRechargePrize():
+
+ def __init__(self):
+ self.CfgID = 0
+ self.ActMark = ""
+ self.PlatformList = []
+ self.ServerIDList = []
+ self.StartDate = ""
+ self.EndDate = ""
+ self.NotifyInfoStart = {}
+ self.NotifyInfoEnd = {}
+ self.NotifyInfoLoop = []
+ self.IsDayReset = 0
+ return
+
+ def GetCfgID(self): return self.CfgID # 配置ID
+ def GetActMark(self): return self.ActMark # 活动组标记
+ def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+ def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+ 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 GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+
# 累计充值活动表
class IPY_ActTotalRecharge():
@@ -1859,6 +1899,8 @@
self.ipyStoreLen = len(self.ipyStoreCache)
self.ipyActWishingWellCache = self.__LoadFileData("ActWishingWell", IPY_ActWishingWell)
self.ipyActWishingWellLen = len(self.ipyActWishingWellCache)
+ self.ipyActRechargePrizeCache = self.__LoadFileData("ActRechargePrize", IPY_ActRechargePrize)
+ self.ipyActRechargePrizeLen = len(self.ipyActRechargePrizeCache)
self.ipyActTotalRechargeCache = self.__LoadFileData("ActTotalRecharge", IPY_ActTotalRecharge)
self.ipyActTotalRechargeLen = len(self.ipyActTotalRechargeCache)
self.ipyCrossZoneCommCache = self.__LoadFileData("CrossZoneComm", IPY_CrossZoneComm)
@@ -2133,6 +2175,8 @@
def GetStoreByIndex(self, index): return self.ipyStoreCache[index]
def GetActWishingWellCount(self): return self.ipyActWishingWellLen
def GetActWishingWellByIndex(self, index): return self.ipyActWishingWellCache[index]
+ def GetActRechargePrizeCount(self): return self.ipyActRechargePrizeLen
+ def GetActRechargePrizeByIndex(self, index): return self.ipyActRechargePrizeCache[index]
def GetActTotalRechargeCount(self): return self.ipyActTotalRechargeLen
def GetActTotalRechargeByIndex(self, index): return self.ipyActTotalRechargeCache[index]
def GetCrossZoneCommCount(self): return self.ipyCrossZoneCommLen
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 9ca39b5..29e074b 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -218,6 +218,7 @@
OperationActionName_FeastRedPacket = "ActFeastRedPacket" # 节日红包活动
OperationActionName_FeastCollectWords = "ActFeastCollectWords" # 节日集字活动
OperationActionName_LuckyTreasure = "ActLuckyTreasure" # 幸运鉴宝活动
+OperationActionName_RechargePrize = "ActRechargePrize" # 充值返利活动
#节日活动类型列表 - 该类型无视开服天,日期到了就开启
FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_FeastCollectWords]
#所有的运营活动列表,含节日活动
@@ -228,7 +229,7 @@
OperationActionName_WishingWell, OperationActionName_TotalRecharge,
OperationActionName_WeekParty, OperationActionName_LoginAward,
OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
- OperationActionName_DailyGiftbag] \
+ OperationActionName_DailyGiftbag, OperationActionName_RechargePrize] \
+ FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7e41140..a770ea6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3691,6 +3691,10 @@
Def_PDict_TotalRechargeAwardRecord = "TotalRechargeAwardRecord" # 累计充值领奖记录
Def_PDict_TotalRechargeWorldLV = "TotalRechargeWorldLV" #累计充值活动开启时世界等级
+#充值返利活动
+Def_PDict_RechargePrizeID = "RechargePrizeID" # 玩家身上的重置返利活动ID,唯一标识,取活动开始日期time值
+Def_PDict_RechargePrizeCount = "RechargePrizeCount_%s" # 返利奖励次数,参数(充值表充值ID)
+
#限时特惠活动
Def_PDict_SpringSaleID = "SpringSaleID" # 玩家身上的限时特惠活动ID,唯一标识,取活动开始日期time
Def_PDict_SpringSaleMailState = "SpringSaleMailState" # 玩家身上的活动更新提醒邮件状态
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index cf09baf..2f15975 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -23872,6 +23872,189 @@
#------------------------------------------------------
+# AA 27 充值返利活动信息 #tagMCActRechargePrizeInfo
+
+class tagMCActRechargePrize(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("CTGID", c_ushort), # 对应充值表充值ID
+ ("GoldPrize", c_ushort), #返利仙玉数
+ ("PrizeCountLimit", 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.CTGID = 0
+ self.GoldPrize = 0
+ self.PrizeCountLimit = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCActRechargePrize)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 27 充值返利活动信息 //tagMCActRechargePrizeInfo:
+ CTGID:%d,
+ GoldPrize:%d,
+ PrizeCountLimit:%d
+ '''\
+ %(
+ self.CTGID,
+ self.GoldPrize,
+ self.PrizeCountLimit
+ )
+ return DumpString
+
+
+class tagMCActRechargePrizeDay(Structure):
+ Prizes = 0 #(BYTE Prizes)// 返利档数
+ PrizeInfo = list() #(vector<tagMCActRechargePrize> PrizeInfo)// 返利档信息
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ self.Prizes,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Prizes):
+ temPrizeInfo = tagMCActRechargePrize()
+ _pos = temPrizeInfo.ReadData(_lpData, _pos)
+ self.PrizeInfo.append(temPrizeInfo)
+ return _pos
+
+ def Clear(self):
+ self.Prizes = 0
+ self.PrizeInfo = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += 1
+ for i in range(self.Prizes):
+ length += self.PrizeInfo[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteBYTE(data, self.Prizes)
+ for i in range(self.Prizes):
+ data = CommFunc.WriteString(data, self.PrizeInfo[i].GetLength(), self.PrizeInfo[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Prizes:%d,
+ PrizeInfo:%s
+ '''\
+ %(
+ self.Prizes,
+ "..."
+ )
+ return DumpString
+
+
+class tagMCActRechargePrizeInfo(Structure):
+ Head = tagHead()
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ IsDayReset = 0 #(BYTE IsDayReset)//是否每天重置
+ PrizeDays = 0 #(BYTE PrizeDays)
+ PrizeDayInfo = list() #(vector<tagMCActRechargePrizeDay> PrizeDayInfo)//每天对应信息; 如果只有一天,但是活动有多天,则代表每天奖励都一样
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x27
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.IsDayReset,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.PrizeDays,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.PrizeDays):
+ temPrizeDayInfo = tagMCActRechargePrizeDay()
+ _pos = temPrizeDayInfo.ReadData(_lpData, _pos)
+ self.PrizeDayInfo.append(temPrizeDayInfo)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x27
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.IsDayReset = 0
+ self.PrizeDays = 0
+ self.PrizeDayInfo = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 10
+ length += 10
+ length += 1
+ length += 1
+ for i in range(self.PrizeDays):
+ length += self.PrizeDayInfo[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndtDate)
+ data = CommFunc.WriteBYTE(data, self.IsDayReset)
+ data = CommFunc.WriteBYTE(data, self.PrizeDays)
+ for i in range(self.PrizeDays):
+ data = CommFunc.WriteString(data, self.PrizeDayInfo[i].GetLength(), self.PrizeDayInfo[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ StartDate:%s,
+ EndtDate:%s,
+ IsDayReset:%d,
+ PrizeDays:%d,
+ PrizeDayInfo:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.StartDate,
+ self.EndtDate,
+ self.IsDayReset,
+ self.PrizeDays,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCActRechargePrizeInfo=tagMCActRechargePrizeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActRechargePrizeInfo.Head.Cmd,m_NAtagMCActRechargePrizeInfo.Head.SubCmd))] = m_NAtagMCActRechargePrizeInfo
+
+
+#------------------------------------------------------
# AA 1D 累计充值活动信息 #tagMCActTotalRechargeInfo
class tagMCTotalRechargeAwardItem(Structure):
@@ -27250,6 +27433,114 @@
#------------------------------------------------------
+# AA 28 充值返利玩家活动信息 #tagMCRechargePrizePlayerInfo
+
+class tagMCRechargePrizeInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("CTGID", c_ushort), # 对应充值表充值ID
+ ("PrizeCount", 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.CTGID = 0
+ self.PrizeCount = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCRechargePrizeInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 28 充值返利玩家活动信息 //tagMCRechargePrizePlayerInfo:
+ CTGID:%d,
+ PrizeCount:%d
+ '''\
+ %(
+ self.CTGID,
+ self.PrizeCount
+ )
+ return DumpString
+
+
+class tagMCRechargePrizePlayerInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ PlayerInfoList = list() #(vector<tagMCRechargePrizeInfo> PlayerInfoList)//玩家返利信息列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x28
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temPlayerInfoList = tagMCRechargePrizeInfo()
+ _pos = temPlayerInfoList.ReadData(_lpData, _pos)
+ self.PlayerInfoList.append(temPlayerInfoList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x28
+ self.Count = 0
+ self.PlayerInfoList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.PlayerInfoList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.PlayerInfoList[i].GetLength(), self.PlayerInfoList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ PlayerInfoList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCRechargePrizePlayerInfo=tagMCRechargePrizePlayerInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCRechargePrizePlayerInfo.Head.Cmd,m_NAtagMCRechargePrizePlayerInfo.Head.SubCmd))] = m_NAtagMCRechargePrizePlayerInfo
+
+
+#------------------------------------------------------
# AA 11 限时特惠活动信息 #tagMCSpringSaleInfo
class tagMCSpringSaleItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
index c22f282..891fbb5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
@@ -20,6 +20,9 @@
import PlayerControl
import IpyGameDataPY
import PlayerCoin
+import PlayerActRechargePrize
+import PyGameData
+import ShareDefine
#逻辑实现
@@ -50,5 +53,12 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0)
if syncRecordIDList:
PlayerCoin.Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList)
+
+ # 重置充值返利活动
+ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
+ if actInfo.get(ShareDefine.ActKey_State, 0):
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeID, 0)
+ PlayerActRechargePrize.__CheckPlayerRechargePrizeAction(curPlayer)
+
return
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 9b51065..2db78bf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -100,6 +100,7 @@
import PlayerDailyGiftbag
import PlayerCostRebate
import PlayerActTotalRecharge
+import PlayerActRechargePrize
import PlayerSpringSale
import PlayerFairyCeremony
import PlayerNewFairyCeremony
@@ -634,6 +635,8 @@
PlayerCostRebate.OnPlayerLogin(curPlayer)
#累计充值
PlayerActTotalRecharge.OnPlayerLogin(curPlayer)
+ #充值返利
+ PlayerActRechargePrize.OnPlayerLogin(curPlayer)
#限时特惠
PlayerSpringSale.OnPlayerLogin(curPlayer)
#限时礼包
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py
new file mode 100644
index 0000000..71aa4e0
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActRechargePrize.py
@@ -0,0 +1,195 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerActRechargePrize
+#
+# @todo:充值返利活动
+# @author hxp
+# @date 2020-09-23
+# @version 1.0
+#
+# 详细描述: 充值返利活动
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2020-09-23 12:00"""
+#-------------------------------------------------------------------------------
+
+import PyGameData
+import ShareDefine
+import PlayerControl
+import IpyGameDataPY
+import ChPyNetSendPack
+import NetPackCommon
+import GameWorld
+import ChConfig
+
+def __GetActTemplateID(cfgID, dayIndex):
+ if cfgID == None or dayIndex == None:
+ return 0
+ ipyData = IpyGameDataPY.GetIpyGameData("ActRechargePrize", cfgID)
+ if not ipyData:
+ return 0
+ templateIDList = ipyData.GetTemplateIDList()
+ templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
+ return templateID
+
+def OnPlayerLogin(curPlayer):
+ isReset = __CheckPlayerRechargePrizeAction(curPlayer)
+ if not isReset:
+ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
+ # 活动中同步活动信息
+ if actInfo.get(ShareDefine.ActKey_State):
+ Sync_RechargePrizeActionInfo(curPlayer)
+ Sync_RechargePrizeInfo(curPlayer)
+ return
+
+def RefreshRechargePrizeActionInfo():
+ ## 收到GameServer同步的活动信息,刷新活动信息
+ playerManager = GameWorld.GetPlayerManager()
+ for index in xrange(playerManager.GetPlayerCount()):
+ curPlayer = playerManager.GetPlayerByIndex(index)
+ if curPlayer.GetID() == 0:
+ continue
+ __CheckPlayerRechargePrizeAction(curPlayer)
+ return
+
+def __CheckPlayerRechargePrizeAction(curPlayer):
+ ## 检查玩家充值返利活动数据信息
+
+ playerID = curPlayer.GetPlayerID()
+
+ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
+ actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+ state = actInfo.get(ShareDefine.ActKey_State, 0)
+
+ playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeID) # 玩家身上的活动ID
+
+ # 活动ID 相同的话不处理
+ if actID == playerActID:
+ GameWorld.DebugLog("充值返利活动ID不变,不处理!", curPlayer.GetPlayerID())
+ return
+ GameWorld.DebugLog("充值返利重置! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID)
+
+ templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeID, actID)
+
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
+ if ipyDataList:
+ for ipyData in ipyDataList:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeCount % ipyData.GetCTGID(), 0)
+
+ Sync_RechargePrizeActionInfo(curPlayer)
+ Sync_RechargePrizeInfo(curPlayer)
+ return True
+
+def DoAddPlayerActRechargePrizeCount(curPlayer, ctgID):
+ ## 执行增加玩家充值返利活动返利次数
+ # @return: 返利仙玉 数
+ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
+ if not actInfo:
+ GameWorld.DebugLog("无充值返利活动")
+ return
+ if not actInfo.get(ShareDefine.ActKey_State):
+ GameWorld.DebugLog("充值返利活动未开启")
+ return
+ templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ actIpyData = None
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
+ if ipyDataList:
+ for ipyData in ipyDataList:
+ if ctgID == ipyData.GetCTGID():
+ actIpyData = ipyData
+ break
+ if not actIpyData:
+ GameWorld.DebugLog("该充值ID无充值返利! ctgID=%s,templateID=%s" % (ctgID, templateID))
+ return
+
+ prizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeCount % ctgID)
+ prizeCountLimit = actIpyData.GetPrizeCountLimit()
+ if prizeCount >= prizeCountLimit:
+ GameWorld.DebugLog("已达充值返利最大次数: ctgID=%s,prizeCount=%s" % (ctgID, prizeCount))
+ return
+ prizeCount += 1
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RechargePrizeCount % ctgID, prizeCount)
+ goldPrize = actIpyData.GetGoldPrize()
+
+ Sync_RechargePrizeInfo(curPlayer, ctgID)
+ GameWorld.DebugLog("充值返利: ctgID=%s,goldPrize=%s,prizeCount=%s" % (ctgID, goldPrize, prizeCount))
+ return goldPrize
+
+def Sync_RechargePrizeInfo(curPlayer, ctgID=0):
+ ## 通知充值返利玩家数据信息
+ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
+ if not actInfo:
+ return
+ if not actInfo.get(ShareDefine.ActKey_State):
+ return
+ templateID = __GetActTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+
+ if ctgID > 0:
+ syncCTGIDList = [ctgID]
+ else:
+ syncCTGIDList = []
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
+ if ipyDataList:
+ for ipyData in ipyDataList:
+ syncCTGIDList.append(ipyData.GetCTGID())
+
+ playerActInfo = ChPyNetSendPack.tagMCRechargePrizePlayerInfo()
+ playerActInfo.PlayerInfoList = []
+ for syncCTGID in syncCTGIDList:
+ prizeInfo = ChPyNetSendPack.tagMCRechargePrizeInfo()
+ prizeInfo.CTGID = syncCTGID
+ prizeInfo.PrizeCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RechargePrizeCount % syncCTGID)
+ playerActInfo.PlayerInfoList.append(prizeInfo)
+ playerActInfo.Count = len(playerActInfo.PlayerInfoList)
+ NetPackCommon.SendFakePack(curPlayer, playerActInfo)
+ return
+
+def Sync_RechargePrizeActionInfo(curPlayer):
+ ## 通知充值返利活动信息
+ actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_RechargePrize, {})
+ if not actInfo:
+ return
+
+ if not actInfo.get(ShareDefine.ActKey_State):
+ return
+
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActRechargePrize", cfgID)
+ if not ipyData:
+ return
+
+ templateIDList = ipyData.GetTemplateIDList()
+ if not templateIDList:
+ return
+ openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
+ actInfo = ChPyNetSendPack.tagMCActRechargePrizeInfo()
+ actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
+ actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
+ actInfo.IsDayReset = ipyData.GetIsDayReset()
+ actInfo.PrizeDayInfo = []
+ for templateID in templateIDList:
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("RechargePrizeTemplate", templateID)
+ if not ipyDataList:
+ continue
+
+ dayInfo = ChPyNetSendPack.tagMCActRechargePrizeDay()
+ dayInfo.PrizeInfo = []
+ for prizeData in ipyDataList:
+ prize = ChPyNetSendPack.tagMCActRechargePrize()
+ prize.CTGID = prizeData.GetCTGID()
+ prize.GoldPrize = prizeData.GetGoldPrize()
+ prize.PrizeCountLimit = prizeData.GetPrizeCountLimit()
+ dayInfo.PrizeInfo.append(prize)
+
+ dayInfo.Prizes = len(dayInfo.PrizeInfo)
+ actInfo.PrizeDayInfo.append(dayInfo)
+
+ actInfo.PrizeDays = len(actInfo.PrizeDayInfo)
+ NetPackCommon.SendFakePack(curPlayer, actInfo)
+ 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 4f0b7c3..852ad66 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -48,6 +48,7 @@
import PlayerNewFairyCeremony
import PlayerGoldGift
import PlayerActTotalRecharge
+import PlayerActRechargePrize
import OpenServerCampaign
import PlayerWeekParty
import PlayerGoldInvest
@@ -280,7 +281,11 @@
firstGoldPrize = ipyData.GetFirstGoldPrize() # 首次充值赠送的仙玉
notifyMark = ipyData.GetNotifyMark()
prizeGold = firstGoldPrize if (not totalBuyCount and firstGoldPrize) else gainGoldPrize
-
+ actPrizeGold = PlayerActRechargePrize.DoAddPlayerActRechargePrizeCount(curPlayer, recordID)
+ if actPrizeGold:
+ prizeGold = actPrizeGold
+ addDRDict.update({"actRechargePrize":1})
+
Sync_CoinToGoldCountInfo(curPlayer, [recordID])
return addGold, prizeGold, giveItemList, notifyMark
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 e4ded96..740a060 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -75,6 +75,7 @@
import OpenServerCampaign
import PlayerCostRebate
import PlayerActTotalRecharge
+import PlayerActRechargePrize
import PlayerSpringSale
import PlayerBossReborn
import PlayerWeekParty
@@ -1367,6 +1368,10 @@
elif actionName == ShareDefine.OperationActionName_LuckyTreasure:
PlayerLuckyTreasure.RefreshLuckyTreasureAction()
+
+ elif actionName == ShareDefine.OperationActionName_RechargePrize:
+ PlayerActRechargePrize.RefreshRechargePrizeActionInfo()
+
return
if key == ShareDefine.Def_Notify_WorldKey_CrossZoneName:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 9ca39b5..29e074b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -218,6 +218,7 @@
OperationActionName_FeastRedPacket = "ActFeastRedPacket" # 节日红包活动
OperationActionName_FeastCollectWords = "ActFeastCollectWords" # 节日集字活动
OperationActionName_LuckyTreasure = "ActLuckyTreasure" # 幸运鉴宝活动
+OperationActionName_RechargePrize = "ActRechargePrize" # 充值返利活动
#节日活动类型列表 - 该类型无视开服天,日期到了就开启
FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_FeastCollectWords]
#所有的运营活动列表,含节日活动
@@ -228,7 +229,7 @@
OperationActionName_WishingWell, OperationActionName_TotalRecharge,
OperationActionName_WeekParty, OperationActionName_LoginAward,
OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure,
- OperationActionName_DailyGiftbag] \
+ OperationActionName_DailyGiftbag, OperationActionName_RechargePrize] \
+ FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
--
Gitblit v1.8.0