From 65d8c41c3e62313deb9ff6a3b9b701a55b662d5b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 十月 2023 01:38:11 +0800
Subject: [PATCH] 9905 【BT0.1】【主干】新增每周、每月限购(累充支持线下活动)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py | 65 ++++++++++++++++++++++++--------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 6 +++
PySysDB/PySysDBPY.h | 2 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 ++++
4 files changed, 64 insertions(+), 17 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 3be9fa4..ade19ea 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1961,6 +1961,8 @@
char EndDate; //结束日期
WORD LVLimit; //限制等级
BYTE IsDayReset; //是否每天重置
+ BYTE CTGTypeEffValue; //充值有效类型值
+ BYTE IsOfflineAct; //是否线下活动
list TemplateIDList; //模板ID列表
};
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 06e446a..3cd2686 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -5955,3 +5955,11 @@
TTLTaskType_FamilyPartyAnswerRight, # 仙盟答题答对x次 17
TTLTaskType_CrossBoss, # 跨服boss击杀x次 18
) = range(1, 1 + 18)
+
+# 充值点券处理类型
+(
+CoinType_Gold, # 直接充仙玉 0
+CoinType_Buy, # 直购,非直接充仙玉的,如RMB直接购买某个物品或激活某个功能 1
+CoinType_ItemSuper, # 使用超级现金卡物品,类充值仙玉效果,但是有某些功能上的限制,一般是bt版本赠送 2
+CoinType_ItemCash, # 使用现金卡物品,类充值仙玉效果,但是有某些功能上的限制,一般是bt版本赠送 3
+) = range(4)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 9e0d17f..db7dd13 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1544,6 +1544,8 @@
("char", "EndDate", 0),
("WORD", "LVLimit", 0),
("BYTE", "IsDayReset", 0),
+ ("BYTE", "CTGTypeEffValue", 0),
+ ("BYTE", "IsOfflineAct", 0),
("list", "TemplateIDList", 0),
),
@@ -5302,6 +5304,8 @@
self.EndDate = ""
self.LVLimit = 0
self.IsDayReset = 0
+ self.CTGTypeEffValue = 0
+ self.IsOfflineAct = 0
self.TemplateIDList = []
return
@@ -5310,6 +5314,8 @@
def GetEndDate(self): return self.EndDate # 结束日期
def GetLVLimit(self): return self.LVLimit # 限制等级
def GetIsDayReset(self): return self.IsDayReset # 是否每天重置
+ def GetCTGTypeEffValue(self): return self.CTGTypeEffValue # 充值有效类型值
+ def GetIsOfflineAct(self): return self.IsOfflineAct # 是否线下活动
def GetTemplateIDList(self): return self.TemplateIDList # 模板ID列表
# 累计充值模板表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py
index a6eca4e..208725e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py
@@ -39,14 +39,6 @@
templateID = templateIDList[-1] if dayIndex >= len(templateIDList) else templateIDList[dayIndex]
return templateID
-def GetActInfo(actNum):
- if ShareDefine.OperationActionName_TotalRecharge not in PyGameData.g_operationActionDict:
- return {}
- actNumDict = PyGameData.g_operationActionDict[ShareDefine.OperationActionName_TotalRecharge]
- if actNum not in actNumDict:
- return {}
- return actNumDict[actNum]
-
def OnPlayerLogin(curPlayer):
for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}).values():
@@ -74,7 +66,7 @@
## 检查玩家累计充值活动数据信息
playerID = curPlayer.GetPlayerID()
- actInfo = GetActInfo(actNum)
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_TotalRecharge, actNum)
TotalRechargeID = actInfo.get(ShareDefine.ActKey_ID, 0)
state = actInfo.get(ShareDefine.ActKey_State, 0)
@@ -106,7 +98,7 @@
return True
def __SendTotalRechargeMail(curPlayer, playerTemplateID, playerWorldLV, actNum):
- # 未领取的奖励邮件发放
+ # 邮件发放奖励,适用于活动结束后补发未领取奖励 或 线下活动自动发放满足领取条件的奖励
if not playerTemplateID:
return
@@ -140,8 +132,7 @@
if batchPlayerIDList:
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalRechargeAwardRecord % actNum, awardRecord)
- actType = actNum / 10
- PlayerControl.SendMailBatch("TotalRechargeMail%s" % actType, batchPlayerIDList, batchAddItemList, batchParamList)
+ PlayerControl.SendMailBatch("TotalRechargeMail%s" % actNum, batchPlayerIDList, batchAddItemList, batchParamList)
return
@@ -155,14 +146,29 @@
return itemInfoDict[str(job)]
-def AddTotalRechargeGold(curPlayer, addGold):
+def AddTotalRechargeGold(curPlayer, addGold, coinType):
if addGold <= 0:
return
for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_TotalRecharge, {}).values():
actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+
if not actInfo.get(ShareDefine.ActKey_State):
GameWorld.DebugLog("累计充值活动当前未开启! actNum=%s" % actNum)
+ continue
+
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
+ if not cfgID:
+ continue
+
+ ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID)
+ if not ipyData:
+ continue
+
+ ctgTypeEffValue = ipyData.GetCTGTypeEffValue()
+ if not ctgTypeEffValue & pow(2, coinType):
+ GameWorld.DebugLog("玩家累计充值活动,充值类型对该活动无效! actNum=%s,coinType=%s,ctgTypeEffValue=%s"
+ % (actNum, coinType, ctgTypeEffValue), curPlayer.GetPlayerID())
continue
actID = actInfo.get(ShareDefine.ActKey_ID)
@@ -179,10 +185,17 @@
Sync_TotalRechargeInfo(curPlayer, actNum)
GameWorld.DebugLog("玩家累计充值活动: actNum=%s,actID=%s,templateID=%s,curRechargeGold=%s,addGold=%s,updRechargeGold=%s"
% (actNum, actID, templateID, curRechargeGold, addGold, updRechargeGold), curPlayer.GetPlayerID())
+
+ # 线下活动,检查发放奖励
+ if ipyData.GetIsOfflineAct():
+ playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeWorldLV % actNum)
+ __SendTotalRechargeMail(curPlayer, templateID, playerWorldLV, actNum)
+
return
-
+
+
def OnGetTotalRechargeAward(curPlayer, awardIndex, actNum):
- '''OnGetTotalRechargeAward
+ '''领取累计充值奖励
@param awardIndex: 奖励索引
@param actNum: 活动编号,如11 或 12 代表不同的活动
'''
@@ -191,7 +204,7 @@
GameWorld.DebugLog("没有指定领取的累充活动编号! actNum=%s" % actNum)
return
playerID = curPlayer.GetPlayerID()
- actInfo = GetActInfo(actNum)
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_TotalRecharge, actNum)
TotalRechargeID = actInfo.get(ShareDefine.ActKey_ID, 0)
state = actInfo.get(ShareDefine.ActKey_State, 0)
@@ -255,6 +268,20 @@
def Sync_TotalRechargeInfo(curPlayer, actNum):
## 通知累计充值玩家数据信息
+
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_TotalRecharge, actNum)
+ if not actInfo.get(ShareDefine.ActKey_State):
+ return
+
+ cfgID = actInfo.get(ShareDefine.ActKey_CfgID)
+ ipyData = IpyGameDataPY.GetIpyGameData("ActTotalRecharge", cfgID)
+ if not ipyData:
+ return
+
+ if ipyData.GetIsOfflineAct():
+ #线下活动不下发
+ return
+
playerActInfo = ChPyNetSendPack.tagMCTotalRechargePlayerInfo()
playerActInfo.ActNum = actNum
playerActInfo.GoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalRechargeGold % actNum)
@@ -265,7 +292,7 @@
def Sync_TotalRechargeActionInfo(curPlayer, actNum):
## 通知累计充值活动信息
- actInfo = GetActInfo(actNum)
+ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_TotalRecharge, actNum)
if not actInfo.get(ShareDefine.ActKey_State):
return
@@ -274,6 +301,10 @@
if not ipyData:
return
+ if ipyData.GetIsOfflineAct():
+ #线下活动不下发
+ return
+
templateIDList = ipyData.GetTemplateIDList()
if not templateIDList:
return
--
Gitblit v1.8.0