hxp
2023-10-07 65d8c41c3e62313deb9ff6a3b9b701a55b662d5b
9905 【BT0.1】【主干】新增每周、每月限购(累充支持线下活动)

# Conflicts:
# ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
4个文件已修改
81 ■■■■ 已修改文件
PySysDB/PySysDBPY.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActTotalRecharge.py 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PySysDB/PySysDBPY.h
@@ -1961,6 +1961,8 @@
    char        EndDate;    //结束日期
    WORD        LVLimit;    //限制等级
    BYTE        IsDayReset;    //是否每天重置
    BYTE        CTGTypeEffValue;    //充值有效类型值
    BYTE        IsOfflineAct;    //是否线下活动
    list        TemplateIDList;    //模板ID列表
};
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)
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列表
# 累计充值模板表
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