From 78ad2ba94e205bc05882289ff82441987e681141 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 16 十一月 2023 14:46:00 +0800
Subject: [PATCH] 10009 【后端】【BT0.1】【主干】【港台】单笔充值活动增加每日可领取次数,每个档位每日20次
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 116 +++++++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActSingleRecharge.py | 165 +++++++++++------------
PySysDB/PySysDBPY.h | 3
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 116 +++++++++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 3
6 files changed, 267 insertions(+), 141 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index d917d22..204ad62 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -2152,7 +2152,8 @@
{
DWORD _TemplateID; //模板ID
float SingleRechargeValue; //单笔充值额度
- BYTE AwardIndex; //返利奖励索引0~31,同个模板中不重复
+ BYTE AwardIndex; //同个模板中不重复
+ WORD AwardCountMax; //最大领奖次数,最大999次
dict AwardItem; //返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]}
char NotifyKey; //全服广播key,默认两个参数(玩家名, 档位额度)
};
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 71137b8..c9a1d79 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -34216,7 +34216,8 @@
class tagMCActSingleRechargeAward(Structure):
- AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31
+ AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引
+ AwardCountMax = 0 #(WORD AwardCountMax)// 最大领奖次数
SingleRechargeValue = 0 #(DWORD SingleRechargeValue)// 单笔所需充值额度
AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
AwardItem = list() #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息
@@ -34229,6 +34230,7 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.AwardItemCount):
@@ -34239,6 +34241,7 @@
def Clear(self):
self.AwardIndex = 0
+ self.AwardCountMax = 0
self.SingleRechargeValue = 0
self.AwardItemCount = 0
self.AwardItem = list()
@@ -34247,6 +34250,7 @@
def GetLength(self):
length = 0
length += 1
+ length += 2
length += 4
length += 1
for i in range(self.AwardItemCount):
@@ -34257,6 +34261,7 @@
def GetBuffer(self):
data = ''
data = CommFunc.WriteBYTE(data, self.AwardIndex)
+ data = CommFunc.WriteWORD(data, self.AwardCountMax)
data = CommFunc.WriteDWORD(data, self.SingleRechargeValue)
data = CommFunc.WriteBYTE(data, self.AwardItemCount)
for i in range(self.AwardItemCount):
@@ -34266,12 +34271,14 @@
def OutputString(self):
DumpString = '''
AwardIndex:%d,
+ AwardCountMax:%d,
SingleRechargeValue:%d,
AwardItemCount:%d,
AwardItem:%s
'''\
%(
self.AwardIndex,
+ self.AwardCountMax,
self.SingleRechargeValue,
self.AwardItemCount,
"..."
@@ -34390,20 +34397,16 @@
#------------------------------------------------------
# AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo
-class tagMCActSingleRechargePlayerInfo(Structure):
+class tagMCActSingleRechargePlayerAward(Structure):
_pack_ = 1
_fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ActNum", c_ubyte), #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
- ("CanAwardValue", c_int), #可否领奖记录,按奖励索引二进制位存储是否可领取
- ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取
+ ("AwardIndex", c_ubyte), # 奖励索引
+ ("CanGetCount", c_ushort), # 可领奖次数
+ ("GetCount", c_ushort), # 已领奖次数
]
def __init__(self):
self.Clear()
- self.Cmd = 0xAA
- self.SubCmd = 0x51
return
def ReadData(self, stringData, _pos=0, _len=0):
@@ -34412,39 +34415,102 @@
return _pos + self.GetLength()
def Clear(self):
- self.Cmd = 0xAA
- self.SubCmd = 0x51
- self.ActNum = 0
- self.CanAwardValue = 0
- self.AwardRecord = 0
+ self.AwardIndex = 0
+ self.CanGetCount = 0
+ self.GetCount = 0
return
def GetLength(self):
- return sizeof(tagMCActSingleRechargePlayerInfo)
+ return sizeof(tagMCActSingleRechargePlayerAward)
def GetBuffer(self):
return string_at(addressof(self), self.GetLength())
def OutputString(self):
DumpString = '''// AA 51 单笔累充活动玩家信息 //tagMCActSingleRechargePlayerInfo:
- Cmd:%s,
- SubCmd:%s,
- ActNum:%d,
- CanAwardValue:%d,
- AwardRecord:%d
+ AwardIndex:%d,
+ CanGetCount:%d,
+ GetCount:%d
'''\
%(
- self.Cmd,
- self.SubCmd,
+ self.AwardIndex,
+ self.CanGetCount,
+ self.GetCount
+ )
+ return DumpString
+
+
+class tagMCActSingleRechargePlayerInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
+ RecordCount = 0 #(BYTE RecordCount)
+ AwardRecordList = list() #(vector<tagMCActSingleRechargePlayerAward> AwardRecordList)// 领奖次数记录列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x51
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.RecordCount):
+ temAwardRecordList = tagMCActSingleRechargePlayerAward()
+ _pos = temAwardRecordList.ReadData(_lpData, _pos)
+ self.AwardRecordList.append(temAwardRecordList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x51
+ self.ActNum = 0
+ self.RecordCount = 0
+ self.AwardRecordList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ for i in range(self.RecordCount):
+ length += self.AwardRecordList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteBYTE(data, self.RecordCount)
+ for i in range(self.RecordCount):
+ data = CommFunc.WriteString(data, self.AwardRecordList[i].GetLength(), self.AwardRecordList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ RecordCount:%d,
+ AwardRecordList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
self.ActNum,
- self.CanAwardValue,
- self.AwardRecord
+ self.RecordCount,
+ "..."
)
return DumpString
m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Cmd,m_NAtagMCActSingleRechargePlayerInfo.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Head.Cmd,m_NAtagMCActSingleRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 8f0af4f..0317678 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4008,8 +4008,7 @@
Def_PDict_SingleRechargeID = "SingleRechargeID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
Def_PDict_SingleRechargeTemplateID = "SingleRechargeTempID_%s" # 玩家身上的活动模板ID,参数:(活动编号)
Def_PDict_SingleRechargeWorldLV = "SingleRechargeWorldLV_%s" #玩家身上的活动世界等级,参数:(活动编号)
-Def_PDict_SingleRechargeValue = "SingleRechargeValue_%s" # 领奖奖励值,按奖励索引二进制位代表是否可领奖,参数:(活动编号)
-Def_PDict_SingleRechargeAward = "SingleRechargeAward_%s" # 领奖记录值,按奖励索引二进制位代表是否已领奖,参数:(活动编号)
+Def_PDict_SingleRechargeValue = "SingleRechargeValue_%s_%s" # 领奖值,已领奖次数*1000+可领奖次数,参数:(活动编号,档位索引)
#转盘活动
Def_PDict_TurntableID = "TurntableID_%s" # 玩家身上的活动ID,唯一标识,取活动开始日期time值,参数:(活动编号)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 71137b8..c9a1d79 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -34216,7 +34216,8 @@
class tagMCActSingleRechargeAward(Structure):
- AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引 0~31
+ AwardIndex = 0 #(BYTE AwardIndex)// 奖励索引
+ AwardCountMax = 0 #(WORD AwardCountMax)// 最大领奖次数
SingleRechargeValue = 0 #(DWORD SingleRechargeValue)// 单笔所需充值额度
AwardItemCount = 0 #(BYTE AwardItemCount)// 奖励物品数
AwardItem = list() #(vector<tagMCActSingleRechargeAwardItem> AwardItem)// 奖励物品信息
@@ -34229,6 +34230,7 @@
def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
self.AwardIndex,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.AwardCountMax,_pos = CommFunc.ReadWORD(_lpData, _pos)
self.SingleRechargeValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
self.AwardItemCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
for i in range(self.AwardItemCount):
@@ -34239,6 +34241,7 @@
def Clear(self):
self.AwardIndex = 0
+ self.AwardCountMax = 0
self.SingleRechargeValue = 0
self.AwardItemCount = 0
self.AwardItem = list()
@@ -34247,6 +34250,7 @@
def GetLength(self):
length = 0
length += 1
+ length += 2
length += 4
length += 1
for i in range(self.AwardItemCount):
@@ -34257,6 +34261,7 @@
def GetBuffer(self):
data = ''
data = CommFunc.WriteBYTE(data, self.AwardIndex)
+ data = CommFunc.WriteWORD(data, self.AwardCountMax)
data = CommFunc.WriteDWORD(data, self.SingleRechargeValue)
data = CommFunc.WriteBYTE(data, self.AwardItemCount)
for i in range(self.AwardItemCount):
@@ -34266,12 +34271,14 @@
def OutputString(self):
DumpString = '''
AwardIndex:%d,
+ AwardCountMax:%d,
SingleRechargeValue:%d,
AwardItemCount:%d,
AwardItem:%s
'''\
%(
self.AwardIndex,
+ self.AwardCountMax,
self.SingleRechargeValue,
self.AwardItemCount,
"..."
@@ -34390,20 +34397,16 @@
#------------------------------------------------------
# AA 51 单笔累充活动玩家信息 #tagMCActSingleRechargePlayerInfo
-class tagMCActSingleRechargePlayerInfo(Structure):
+class tagMCActSingleRechargePlayerAward(Structure):
_pack_ = 1
_fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("ActNum", c_ubyte), #活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
- ("CanAwardValue", c_int), #可否领奖记录,按奖励索引二进制位存储是否可领取
- ("AwardRecord", c_int), #奖励领奖记录,按奖励索引二进制位存储是否已领取
+ ("AwardIndex", c_ubyte), # 奖励索引
+ ("CanGetCount", c_ushort), # 可领奖次数
+ ("GetCount", c_ushort), # 已领奖次数
]
def __init__(self):
self.Clear()
- self.Cmd = 0xAA
- self.SubCmd = 0x51
return
def ReadData(self, stringData, _pos=0, _len=0):
@@ -34412,39 +34415,102 @@
return _pos + self.GetLength()
def Clear(self):
- self.Cmd = 0xAA
- self.SubCmd = 0x51
- self.ActNum = 0
- self.CanAwardValue = 0
- self.AwardRecord = 0
+ self.AwardIndex = 0
+ self.CanGetCount = 0
+ self.GetCount = 0
return
def GetLength(self):
- return sizeof(tagMCActSingleRechargePlayerInfo)
+ return sizeof(tagMCActSingleRechargePlayerAward)
def GetBuffer(self):
return string_at(addressof(self), self.GetLength())
def OutputString(self):
DumpString = '''// AA 51 单笔累充活动玩家信息 //tagMCActSingleRechargePlayerInfo:
- Cmd:%s,
- SubCmd:%s,
- ActNum:%d,
- CanAwardValue:%d,
- AwardRecord:%d
+ AwardIndex:%d,
+ CanGetCount:%d,
+ GetCount:%d
'''\
%(
- self.Cmd,
- self.SubCmd,
+ self.AwardIndex,
+ self.CanGetCount,
+ self.GetCount
+ )
+ return DumpString
+
+
+class tagMCActSingleRechargePlayerInfo(Structure):
+ Head = tagHead()
+ ActNum = 0 #(BYTE ActNum)//活动编号从1开始,目前支持两个累充活动同时存在且相互独立 1或2
+ RecordCount = 0 #(BYTE RecordCount)
+ AwardRecordList = list() #(vector<tagMCActSingleRechargePlayerAward> AwardRecordList)// 领奖次数记录列表
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x51
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.ActNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.RecordCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.RecordCount):
+ temAwardRecordList = tagMCActSingleRechargePlayerAward()
+ _pos = temAwardRecordList.ReadData(_lpData, _pos)
+ self.AwardRecordList.append(temAwardRecordList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x51
+ self.ActNum = 0
+ self.RecordCount = 0
+ self.AwardRecordList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ length += 1
+ for i in range(self.RecordCount):
+ length += self.AwardRecordList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.ActNum)
+ data = CommFunc.WriteBYTE(data, self.RecordCount)
+ for i in range(self.RecordCount):
+ data = CommFunc.WriteString(data, self.AwardRecordList[i].GetLength(), self.AwardRecordList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ ActNum:%d,
+ RecordCount:%d,
+ AwardRecordList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
self.ActNum,
- self.CanAwardValue,
- self.AwardRecord
+ self.RecordCount,
+ "..."
)
return DumpString
m_NAtagMCActSingleRechargePlayerInfo=tagMCActSingleRechargePlayerInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Cmd,m_NAtagMCActSingleRechargePlayerInfo.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActSingleRechargePlayerInfo.Head.Cmd,m_NAtagMCActSingleRechargePlayerInfo.Head.SubCmd))] = m_NAtagMCActSingleRechargePlayerInfo
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 07a7a6e..e5ac6f5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1691,6 +1691,7 @@
("DWORD", "TemplateID", 1),
("float", "SingleRechargeValue", 0),
("BYTE", "AwardIndex", 0),
+ ("WORD", "AwardCountMax", 0),
("dict", "AwardItem", 0),
("char", "NotifyKey", 0),
),
@@ -5682,13 +5683,15 @@
self.TemplateID = 0
self.SingleRechargeValue = 0.0
self.AwardIndex = 0
+ self.AwardCountMax = 0
self.AwardItem = {}
self.NotifyKey = ""
return
def GetTemplateID(self): return self.TemplateID # 模板ID
def GetSingleRechargeValue(self): return self.SingleRechargeValue # 单笔充值额度
- def GetAwardIndex(self): return self.AwardIndex # 返利奖励索引0~31,同个模板中不重复
+ def GetAwardIndex(self): return self.AwardIndex # 同个模板中不重复
+ def GetAwardCountMax(self): return self.AwardCountMax # 最大领奖次数,最大999次
def GetAwardItem(self): return self.AwardItem # 返利物品信息列表 {职业:[(物品ID,个数,是否绑定),...]}
def GetNotifyKey(self): return self.NotifyKey # 全服广播key,默认两个参数(玩家名, 档位额度)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActSingleRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActSingleRecharge.py
index ee58b80..9be0a44 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActSingleRecharge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActSingleRecharge.py
@@ -96,21 +96,31 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeID % actNum, actID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeTemplateID % actNum, templateID)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeWorldLV % actNum, actWorldLV)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeValue % actNum, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeAward % actNum, 0)
-
+ if actID and templateID:
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActSingleRechargeAward", templateID)
+ if ipyDataList:
+ for ipyData in ipyDataList:
+ awardIndex = ipyData.GetAwardIndex()
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeValue % (actNum, awardIndex), 0)
+
Sync_SingleRechargeActionInfo(curPlayer, actNum)
Sync_SingleRechargePlayerInfo(curPlayer, actNum)
return True
+
+def GetAwardCountInfo(curPlayer, actNum, awardIndex):
+ valueInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeValue % (actNum, awardIndex))
+ getCount = valueInfo / 1000
+ canGetCount = valueInfo % 1000
+ return getCount, canGetCount
+def SetAwardCountInfo(curPlayer, actNum, awardIndex, getCount, canGetCount):
+ valueInfo = getCount * 1000 + canGetCount
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeValue % (actNum, awardIndex), valueInfo)
+ return valueInfo
def __SendSingleRechargeMail(curPlayer, playerTemplateID, playerWorldLV, actNum):
# 未领取的奖励邮件发放
if not playerTemplateID:
- return
-
- canAwardValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeValue % actNum)
- if not canAwardValue:
return
ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActSingleRechargeAward", playerTemplateID)
@@ -119,27 +129,24 @@
playerID = curPlayer.GetPlayerID()
batchPlayerIDList, batchAddItemList, batchParamList = [], [], []
- awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeAward % actNum)
for ipyData in ipyDataList:
awardIndex = ipyData.GetAwardIndex()
- if awardRecord & pow(2, awardIndex):
- #GameWorld.DebugLog("单笔累充已发放过奖励!awardIndex=%s" % awardIndex)
+ getCount, canGetCount = GetAwardCountInfo(curPlayer, actNum, awardIndex)
+ if getCount >= canGetCount:
+ #GameWorld.DebugLog("单笔累充已经全部领奖!awardIndex=%s" % awardIndex)
continue
+ SetAwardCountInfo(curPlayer, actNum, awardIndex, canGetCount, canGetCount)
+ unGetCount = canGetCount - getCount
singleValue = ipyData.GetSingleRechargeValue()
- if not canAwardValue & pow(2, awardIndex):
- #GameWorld.DebugLog("单笔累充不能领奖!awardIndex=%s" % awardIndex)
- continue
- awardRecord |= pow(2, awardIndex)
-
awardItemList = GameWorld.GetDictValueByRangeKey(ipyData.GetAwardItem(), playerWorldLV, [])
- batchPlayerIDList.append([playerID])
- batchAddItemList.append(awardItemList)
- batchParamList.append([singleValue])
-
+ for _ in range(unGetCount):
+ batchPlayerIDList.append([playerID])
+ batchAddItemList.append(awardItemList)
+ batchParamList.append([singleValue])
+
if batchPlayerIDList:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeAward % actNum, awardRecord)
PlayerControl.SendMailBatch("SingleRechargeMail%s" % actNum, batchPlayerIDList, batchAddItemList, batchParamList)
return
@@ -177,50 +184,15 @@
if not awardIpyDataList:
continue
- canAwardChange = False
- canAwardValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeValue % actNum)
+ awardIndexList = []
awardRuleType = ipyData.GetAwardRuleType()
- GameWorld.DebugLog("单笔累充充值活动,actNum=%s,awardRuleType=%s,canAwardValue=%s,curRechargeValue=%s"
- % (actNum, awardRuleType, canAwardValue, curRechargeValue))
+ GameWorld.DebugLog("单笔累充充值活动,actNum=%s,awardRuleType=%s,curRechargeValue=%s" % (actNum, awardRuleType, curRechargeValue))
# 向下兼容所有档次
if awardRuleType == 0:
- for awardIpyData in awardIpyDataList:
- awardIndex = awardIpyData.GetAwardIndex()
- singleValue = CommFunc.RMBToCoin(awardIpyData.GetSingleRechargeValue())
- if canAwardValue & pow(2, awardIndex):
- #GameWorld.DebugLog(" 已经可领奖,不处理!awardRuleType=%s,awardIndex=%s" % (awardRuleType, awardIndex))
- continue
- if curRechargeValue < singleValue:
- #GameWorld.DebugLog(" 未达到档次额度,不处理!awardRuleType=%s,awardIndex=%s,singleValue=%s"
- # % (awardRuleType, awardIndex, singleValue))
- continue
-
- canAwardChange = True
- canAwardValue |= pow(2, awardIndex)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeValue % actNum, canAwardValue)
- GameWorld.DebugLog(" 设置档次可领取!awardRuleType=%s,awardIndex=%s,singleValue=%s,canAwardValue=%s"
- % (awardRuleType, awardIndex, singleValue, canAwardValue))
-
+ pass
# 匹配最高档次
elif awardRuleType == 1:
- for awardIpyData in awardIpyDataList[::-1]:
- awardIndex = awardIpyData.GetAwardIndex()
- singleValue = CommFunc.RMBToCoin(awardIpyData.GetSingleRechargeValue())
- if canAwardValue & pow(2, awardIndex):
- #GameWorld.DebugLog(" 已经可领奖,不处理!awardRuleType=%s,awardIndex=%s" % (awardRuleType, awardIndex))
- continue
- if curRechargeValue < singleValue:
- #GameWorld.DebugLog(" 未达到档次额度,不处理!awardRuleType=%s,awardIndex=%s,singleValue=%s"
- # % (awardRuleType, awardIndex, singleValue))
- continue
-
- canAwardChange = True
- canAwardValue |= pow(2, awardIndex)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeValue % actNum, canAwardValue)
- GameWorld.DebugLog(" 设置最高档次可领取!awardRuleType=%s,awardIndex=%s,singleValue=%s,canAwardValue=%s"
- % (awardRuleType, awardIndex, singleValue, canAwardValue))
- break
-
+ pass
# 精确匹配对应档次
elif awardRuleType == 2:
for awardIpyData in awardIpyDataList:
@@ -230,24 +202,26 @@
#GameWorld.DebugLog(" 不等于档次额度,不处理!awardRuleType=%s,awardIndex=%s,singleValue=%s"
# % (awardRuleType, awardIndex, singleValue))
continue
- if canAwardValue & pow(2, awardIndex):
- #GameWorld.DebugLog(" 已经可领奖,不处理!awardRuleType=%s,awardIndex=%s" % (awardRuleType, awardIndex))
+ awardCountMax = awardIpyData.GetAwardCountMax()
+ getCount, canGetCount = GetAwardCountInfo(curPlayer, actNum, awardIndex)
+ if canGetCount >= awardCountMax:
+ GameWorld.DebugLog(" 已达最大可领奖次数,不处理!awardRuleType=%s,awardIndex=%s,awardCountMax=%s" % (awardRuleType, awardIndex, awardCountMax))
break
- canAwardChange = True
- canAwardValue |= pow(2, awardIndex)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeValue % actNum, canAwardValue)
- GameWorld.DebugLog(" 设置精确档次可领取!awardRuleType=%s,awardIndex=%s,singleValue=%s,canAwardValue=%s"
- % (awardRuleType, awardIndex, singleValue, canAwardValue))
+ awardIndexList.append(awardIndex)
+ canGetCount += 1
+ SetAwardCountInfo(curPlayer, actNum, awardIndex, getCount, canGetCount)
+ GameWorld.DebugLog(" 设置精确档次可领取!awardRuleType=%s,awardIndex=%s,singleValue=%s,canGetCount=%s"
+ % (awardRuleType, awardIndex, singleValue, canGetCount))
break
else:
continue
- if not canAwardChange:
+ if not awardIndexList:
continue
- Sync_SingleRechargePlayerInfo(curPlayer, actNum)
+ Sync_SingleRechargePlayerInfo(curPlayer, actNum, awardIndexList)
# 线下活动,检查发放奖励
if ipyData.GetIsOfflineAct():
@@ -275,11 +249,6 @@
GameWorld.DebugLog("该单笔累充活动非活动中,无法领奖!actNum=%s,state=%s,templateID=%s" % (actNum, state, templateID), playerID)
return
- awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeAward % actNum)
- if awardRecord & pow(2, awardIndex):
- GameWorld.DebugLog("已经领取过该单笔累充活动奖励! actNum=%s,awardIndex=%s" % (actNum, awardIndex), playerID)
- return
-
ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActSingleRechargeAward", templateID)
if not ipyDataList:
return
@@ -294,13 +263,12 @@
GameWorld.DebugLog("找不到该单笔累充活动档位索引奖励!actNum=%s,templateID=%s,awardIndex=%s" % (actNum, templateID, awardIndex), playerID)
return
- singleValue = awardIpyData.GetSingleRechargeValue()
- canAwardValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeValue % actNum)
-
- if not canAwardValue & pow(2, awardIndex):
- GameWorld.DebugLog("该档次奖励无法领取! templateID=%s,awardIndex=%s,singleValue=%s,canAwardValue%s"
- % (templateID, awardIndex, singleValue, canAwardValue), playerID)
+ getCount, canGetCount = GetAwardCountInfo(curPlayer, actNum, awardIndex)
+ if getCount >= canGetCount:
+ GameWorld.DebugLog("该单笔累充活动奖励已达最大可领奖次数! actNum=%s,awardIndex=%s,getCount(%s) >= canGetCount(%s)" % (actNum, awardIndex, getCount, canGetCount), playerID)
return
+
+ singleValue = awardIpyData.GetSingleRechargeValue()
actWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeWorldLV % actNum)
awardItemList = GameWorld.GetDictValueByRangeKey(ipyData.GetAwardItem(), actWorldLV, [])
@@ -308,12 +276,12 @@
if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
return
- awardRecord |= pow(2, awardIndex)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SingleRechargeAward % actNum, awardRecord)
- Sync_SingleRechargePlayerInfo(curPlayer, actNum)
+ getCount += 1
+ SetAwardCountInfo(curPlayer, actNum, awardIndex, getCount, canGetCount)
+ Sync_SingleRechargePlayerInfo(curPlayer, actNum, [awardIndex])
- GameWorld.DebugLog(" 领取成功! actNum=%s,templateID=%s,awardIndex=%s,singleValue=%s,awardRecord=%s"
- % (actNum, templateID, awardIndex, singleValue, awardRecord))
+ GameWorld.DebugLog(" 领取成功! actNum=%s,templateID=%s,awardIndex=%s,singleValue=%s,getCount=%s,canGetCount=%s"
+ % (actNum, templateID, awardIndex, singleValue, getCount, canGetCount))
notifyKey = awardIpyData.GetNotifyKey()
if notifyKey:
@@ -324,7 +292,7 @@
return
-def Sync_SingleRechargePlayerInfo(curPlayer, actNum):
+def Sync_SingleRechargePlayerInfo(curPlayer, actNum, awardIndexList=None):
## 通知玩家数据信息
actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_SingleRecharge, actNum)
@@ -343,10 +311,32 @@
#线下活动不下发
return
+ if awardIndexList == None:
+ awardIndexList = []
+ templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+ if not templateID:
+ return
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList("ActSingleRechargeAward", templateID)
+ if not ipyDataList:
+ return
+ for awardIpyData in ipyDataList:
+ awardIndexList.append(awardIpyData.GetAwardIndex())
+
+ if not awardIndexList:
+ return
+
playerActInfo = ChPyNetSendPack.tagMCActSingleRechargePlayerInfo()
playerActInfo.ActNum = actNum
- playerActInfo.CanAwardValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeValue % actNum)
- playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SingleRechargeAward % actNum)
+ playerActInfo.AwardRecordList = []
+ for awardIndex in awardIndexList:
+ getCount, canGetCount = GetAwardCountInfo(curPlayer, actNum, awardIndex)
+ awardRecord = ChPyNetSendPack.tagMCActSingleRechargePlayerAward()
+ awardRecord.Clear()
+ awardRecord.AwardIndex = awardIndex
+ awardRecord.CanGetCount = canGetCount
+ awardRecord.GetCount = getCount
+ playerActInfo.AwardRecordList.append(awardRecord)
+ playerActInfo.RecordCount = len(playerActInfo.AwardRecordList)
NetPackCommon.SendFakePack(curPlayer, playerActInfo)
return
@@ -390,6 +380,7 @@
for awardIpyData in ipyDataList:
awardInfo = ChPyNetSendPack.tagMCActSingleRechargeAward()
awardInfo.AwardIndex = awardIpyData.GetAwardIndex()
+ awardInfo.AwardCountMax = awardIpyData.GetAwardCountMax()
awardInfo.SingleRechargeValue = CommFunc.RMBToCoin(awardIpyData.GetSingleRechargeValue())
awardInfo.AwardItem = []
awardItemList = GameWorld.GetDictValueByRangeKey(awardIpyData.GetAwardItem(), actWorldLV, [])
--
Gitblit v1.8.0