From 12db44928bd0bdab4baaeef731eb572efd0ea869 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 09 三月 2021 14:44:01 +0800
Subject: [PATCH] 8650 【主干】【BT2】活动规则优化(消费返利支持多活动编号同时开启);

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py |  169 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 89 insertions(+), 80 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
index 5044233..ceb1cbe 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCostRebate.py
@@ -24,7 +24,6 @@
 import DataRecordPack
 import IPY_GameWorld
 import NetPackCommon
-import ItemCommon
 import GameWorld
 import ChConfig
 
@@ -39,68 +38,70 @@
     return templateID
 
 def OnPlayerLogin(curPlayer):
-    isReset = __CheckPlayerCostRebateAction(curPlayer)
-    if not isReset:
-        actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
-        # 活动中同步活动信息
-        if actCostRebateInfo.get(ShareDefine.ActKey_State):
-            Sync_CostRebateActionInfo(curPlayer)
-            Sync_CostRebateInfo(curPlayer)
+    
+    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}).values():
+        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+        isReset = __CheckPlayerCostRebateAction(curPlayer, actNum)
+        if not isReset:
+            # 活动中同步活动信息
+            if actInfo.get(ShareDefine.ActKey_State):
+                Sync_CostRebateActionInfo(curPlayer, actNum)
+                Sync_CostRebateInfo(curPlayer, actNum)
     return
 
-def RefreshCostRebateActionInfo():
+def RefreshCostRebateActionInfo(actNum):
     ## 收到GameServer同步的活动信息,刷新活动信息
     playerManager = GameWorld.GetPlayerManager()
     for index in xrange(playerManager.GetPlayerCount()):
         curPlayer = playerManager.GetPlayerByIndex(index)
         if curPlayer.GetID() == 0:
             continue
-        __CheckPlayerCostRebateAction(curPlayer)
+        __CheckPlayerCostRebateAction(curPlayer, actNum)
     return
 
-def __CheckPlayerCostRebateAction(curPlayer):
+def __CheckPlayerCostRebateAction(curPlayer, actNum):
     ## 检查玩家消费返利活动数据信息
     
     playerID = curPlayer.GetPlayerID()
     
-    actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
-    costRebateID = actCostRebateInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actCostRebateInfo.get(ShareDefine.ActKey_State, 0)
+    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
+    actID = actInfo.get(ShareDefine.ActKey_ID, 0)
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
     
-    playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID) # 玩家身上的活动ID
+    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID % actNum) # 玩家身上的活动ID
     
     # 活动ID 相同的话不处理
-    if costRebateID == playerCostRebateID:
-        #GameWorld.DebugLog("消费返利活动ID不变,不处理!", curPlayer.GetPlayerID())
+    if actID == playerActID:
+        GameWorld.DebugLog("消费返利活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), curPlayer.GetPlayerID())
         return
-    actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV)
-    templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateTemplateID)
+    actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
+    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateWorldLV % actNum)
+    templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+    playerTemplateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateTemplateID % actNum)
     
-    GameWorld.DebugLog("消费返利重置! costRebateID=%s,playerCostRebateID=%s,state=%s,templateID=%s,playerTemplateID=%s" 
-                       % (costRebateID, playerCostRebateID, state, templateID, playerTemplateID), playerID)
+    GameWorld.DebugLog("消费返利重置! actNum=%s,actID=%s,playerActID=%s,state=%s,templateID=%s,playerTemplateID=%s" 
+                       % (actNum, actID, playerActID, state, templateID, playerTemplateID), playerID)
     
     # 未领取的奖励邮件发放
-    __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV)
+    __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV, actNum)
     
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID, costRebateID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID, templateID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateWorldLV, actWorldLV)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold, 0)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, 0)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID % actNum, actID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID % actNum, templateID)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateWorldLV % actNum, actWorldLV)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold % actNum, 0)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, 0)
     
-    Sync_CostRebateActionInfo(curPlayer)
-    Sync_CostRebateInfo(curPlayer)
+    Sync_CostRebateActionInfo(curPlayer, actNum)
+    Sync_CostRebateInfo(curPlayer, actNum)
     return True
 
-def __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV):
+def __SendCostRebateMail(curPlayer, playerTemplateID, playerWorldLV, actNum):
     # 未领取的奖励邮件发放
     
     if not playerTemplateID:
         return
     
-    costGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
+    costGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
     if not costGold:
         return
     
@@ -110,7 +111,7 @@
     job = curPlayer.GetJob()
     playerID = curPlayer.GetPlayerID()
     batchPlayerIDList, batchAddItemList, batchParamList = [], [], []
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord)
+    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
     
     for ipyData in ipyDataList:
         awardIndex = ipyData.GetAwardIndex()
@@ -128,7 +129,7 @@
         batchParamList.append([needCostGold])
         
     if batchPlayerIDList:
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, awardRecord)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, awardRecord)
         PlayerControl.SendMailBatch("ConsumptionRebateMail", batchPlayerIDList, batchAddItemList, batchParamList)
         
     return
@@ -157,47 +158,54 @@
         GameWorld.DebugLog("不计入消费返利的消费类型!costType=%s" % costType, curPlayer.GetPlayerID())
         return
     
-    actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
-    if not actCostRebateInfo.get(ShareDefine.ActKey_State):
-        GameWorld.DebugLog("消费返利活动当前未开启!")
-        return
-    
-    actID = actCostRebateInfo.get(ShareDefine.ActKey_ID)
-    templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    if not actID or not templateID:
-        GameWorld.ErrLog("消费返利活动数据异常!actID=%s,templateID=%s" % (actID, templateID), curPlayer.GetPlayerID())
-        return
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID, actID)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID, templateID)
-    
-    curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
-    updCostGold = curCostGold + costGold
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold, updCostGold)
-    Sync_CostRebateInfo(curPlayer)
-    GameWorld.DebugLog("玩家消费返利活动: actID=%s,templateID=%s,curCostGold=%s,costGold=%s,updCostGold=%s" 
-                       % (actID, templateID, curCostGold, costGold, updCostGold), curPlayer.GetPlayerID())
+    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {}).values():
+        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+        
+        if not actInfo.get(ShareDefine.ActKey_State):
+            GameWorld.DebugLog("消费返利活动当前未开启!actNum=%s" % actNum)
+            continue
+        
+        actID = actInfo.get(ShareDefine.ActKey_ID)
+        templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+        if not actID or not templateID:
+            GameWorld.ErrLog("消费返利活动数据异常!actNum=%s,actID=%s,templateID=%s" % (actNum, actID, templateID), curPlayer.GetPlayerID())
+            continue
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateID % actNum, actID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateTemplateID % actNum, templateID)
+        
+        curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
+        updCostGold = curCostGold + costGold
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateGold % actNum, updCostGold)
+        Sync_CostRebateInfo(curPlayer, actNum)
+        GameWorld.DebugLog("玩家消费返利活动: actNum=%s,actID=%s,templateID=%s,curCostGold=%s,costGold=%s,updCostGold=%s" 
+                           % (actNum, actID, templateID, curCostGold, costGold, updCostGold), curPlayer.GetPlayerID())
     return
 
-def OnGetCostRebateAward(curPlayer, awardIndex):
+def OnGetCostRebateAward(curPlayer, awardIndex, actNum):
     ## 领取消费返利奖励
-
-    playerID = curPlayer.GetPlayerID()
     
-    actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
-    costRebateID = actCostRebateInfo.get(ShareDefine.ActKey_ID, 0)
-    state = actCostRebateInfo.get(ShareDefine.ActKey_State, 0)
-    templateID = GetTemplateID(actCostRebateInfo.get(ShareDefine.ActKey_CfgID, 0), actCostRebateInfo.get(ShareDefine.ActKey_DayIndex, 0))
-    if not state or not templateID:
-        GameWorld.DebugLog("没有消费返利活动,无法领奖!state=%s,templateID=%s" % (state, templateID), playerID)
+    actNum = GameWorld.ToIntDef(actNum, 0)
+    if actNum <= 0:
+        GameWorld.DebugLog("没有该活动编号! actNum=%s" % actNum)
         return
     
-    playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID) # 玩家身上的活动ID
+    playerID = curPlayer.GetPlayerID()
+    
+    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
+    costRebateID = actInfo.get(ShareDefine.ActKey_ID, 0)
+    state = actInfo.get(ShareDefine.ActKey_State, 0)
+    templateID = GetTemplateID(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0))
+    if not state or not templateID:
+        GameWorld.DebugLog("没有消费返利活动,无法领奖!actNum=%s,state=%s,templateID=%s" % (actNum, state, templateID), playerID)
+        return
+    
+    playerCostRebateID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateID % actNum) # 玩家身上的活动ID
     if costRebateID != playerCostRebateID:
         return
     
-    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord)
+    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
     if awardRecord & pow(2, awardIndex):
-        GameWorld.DebugLog("已经领取过该消费返利活动奖励!awardIndex=%s" % awardIndex, playerID)
+        GameWorld.DebugLog("已经领取过该消费返利活动奖励!actNum=%s,awardIndex=%s,awardRecord=%s" % (actNum, awardIndex, awardRecord), playerID)
         return
     
     ipyDataList = IpyGameDataPY.GetIpyGameDataList("CostRebateTemplate", templateID)
@@ -215,47 +223,47 @@
         return
     
     needCostGold = awardIpyData.GetNeedCostGold()
-    actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0)
+    actWorldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
     awardItemList = __GetItemList(awardIpyData.GetAwardItemList(), curPlayer.GetJob(), actWorldLV)
     
-    curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
+    curCostGold = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
     if curCostGold < needCostGold:
         GameWorld.DebugLog("所需消费仙玉数不足,无法领取!templateID=%s,awardIndex=%s,needCostGold=%s,curCostGold=%s" 
                            % (templateID, awardIndex, needCostGold, curCostGold), playerID)
         return
     
-    needSpace = len(awardItemList)
-    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
-    if packSpace < needSpace:
+    if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
         return
     
     awardRecord |= pow(2, awardIndex)
-    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord, awardRecord)
-    Sync_CostRebateInfo(curPlayer)
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CostRebateAwardRecord % actNum, awardRecord)
+    Sync_CostRebateInfo(curPlayer, actNum)
     
     notifyKey = awardIpyData.GetNotifyKey()
     if notifyKey:
         PlayerControl.WorldNotify(0, notifyKey, [curPlayer.GetPlayerName(), needCostGold])
         
-    for itemID, itemCount, isBind in awardItemList:
+    for itemID, itemCount, _ in awardItemList:
         ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
         
     addDataDict = {"TemplateID":templateID, "NeedCostGold":needCostGold, "AwardIndex":awardIndex,
-                   "ItemList":str(awardItemList)}
+                   "ItemList":str(awardItemList), "ActNum":actNum}
     DataRecordPack.DR_FuncGiveItem(curPlayer, "CostRebateAward", addDataDict)
     return
 
-def Sync_CostRebateInfo(curPlayer):
+def Sync_CostRebateInfo(curPlayer, actNum):
     ## 通知消费返利玩家数据信息
     playerActInfo = ChPyNetSendPack.tagMCCostRebatePlayerInfo()
-    playerActInfo.CostGoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold)
-    playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord)
+    playerActInfo.ActNum = actNum
+    playerActInfo.CostGoldTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateGold % actNum)
+    playerActInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CostRebateAwardRecord % actNum)
     NetPackCommon.SendFakePack(curPlayer, playerActInfo)
     return
 
-def Sync_CostRebateActionInfo(curPlayer):
+def Sync_CostRebateActionInfo(curPlayer, actNum):
     ## 通知消费返利活动信息
-    actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_CostRebate, {})
+    
+    actCostRebateInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_CostRebate, actNum)
     if not actCostRebateInfo:
         return
     
@@ -274,6 +282,7 @@
     actWorldLV = actCostRebateInfo.get(ShareDefine.ActKey_WorldLV, 0)
     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     actInfo = ChPyNetSendPack.tagMCCostRebateInfo()
+    actInfo.ActNum = actNum
     actInfo.StartDate = GameWorld.GetOperationActionDateStr(ipyData.GetStartDate(), openServerDay)
     actInfo.EndtDate = GameWorld.GetOperationActionDateStr(ipyData.GetEndDate(), openServerDay)
     actInfo.LimitLV = ipyData.GetLVLimit()

--
Gitblit v1.8.0