From eac35e3198172e41ead54274e292f8d711698ef0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 09 三月 2021 15:59:28 +0800
Subject: [PATCH] 8650 【主干】【BT2】活动规则优化(限时特惠支持多活动编号同时开启);

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py |   54 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
index 811a4f3..3b2a542 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSpringSale.py
@@ -36,57 +36,80 @@
     return todayShopType
 
 def OnPlayerLogin(curPlayer):
-    __CheckPlayerSpringSaleAction(curPlayer)
+    
+    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {}).values():
+        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+        __CheckPlayerSpringSaleAction(curPlayer, actNum)
+        
     return
 
-def RefreshSpringSaleActionInfo():
+def RefreshSpringSaleActionInfo(actNum):
     ## 收到GameServer同步的活动信息,刷新活动信息
     playerManager = GameWorld.GetPlayerManager()
     for index in xrange(playerManager.GetPlayerCount()):
         curPlayer = playerManager.GetPlayerByIndex(index)
         if curPlayer.GetID() == 0:
             continue
-        __CheckPlayerSpringSaleAction(curPlayer)
+        __CheckPlayerSpringSaleAction(curPlayer, actNum)
     return
 
-def __CheckPlayerSpringSaleAction(curPlayer):
+def __CheckPlayerSpringSaleAction(curPlayer, actNum):
     ## 检查玩家限时特惠活动数据信息
     
     playerID = curPlayer.GetPlayerID()
     
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {})
+    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_SpringSale, actNum)
     actID = actInfo.get(ShareDefine.ActKey_ID, 0)
     state = actInfo.get(ShareDefine.ActKey_State, 0)
     cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0)
     woldLV = actInfo.get(ShareDefine.ActKey_WorldLV, 0)
-    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleID) # 玩家身上的活动ID
+    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleID % actNum) # 玩家身上的活动ID
     isReset = False
     if actID != playerActID:
         isReset = True
         shopTypeList = GetShopTypeList(cfgID, actInfo.get(ShareDefine.ActKey_DayIndex, 0), woldLV)
         FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, shopTypeList)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID, actID)
-        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, 0)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleID % actNum, actID)
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState % actNum, 0)
         #Sync_SpringSaleActionInfo(curPlayer)
-        GameWorld.DebugLog("限时特惠重置! actID=%s,playerActID=%s,state=%s,shopTypeList=%s" % (actID, playerActID, state, shopTypeList), playerID)
+        GameWorld.DebugLog("限时特惠重置! actNum=%s,actID=%s,playerActID=%s,state=%s,shopTypeList=%s" % (actNum, actID, playerActID, state, shopTypeList), playerID)
     else:
-        GameWorld.DebugLog("限时特惠活动ID不变,不处理!", playerID)
+        GameWorld.DebugLog("限时特惠活动ID不变,不处理!actNum=%s,actID=%s" % (actNum, actID), playerID)
         
-    playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleMailState) # 玩家身上的活动提醒邮件状态
+    playerMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_SpringSaleMailState % actNum) # 玩家身上的活动提醒邮件状态
     if actID and state and state != playerMailState:
         springSaleIpyData = IpyGameDataPY.GetIpyGameData("ActSpringSale", cfgID)
         if springSaleIpyData and springSaleIpyData.GetMailKey() and curPlayer.GetLV() >= springSaleIpyData.GetLVLimit():
             PlayerControl.SendMailByKey(springSaleIpyData.GetMailKey(), [playerID], springSaleIpyData.GetMailItemPrize())
-            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState, state)
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SpringSaleMailState % actNum, state)
             GameWorld.DebugLog("    发送新限时特惠邮件提醒! state=%s,playerMailState=%s" % (state, playerMailState), playerID)
             
     if cfgID:
-        Sync_SpringSaleActionInfo(curPlayer)
+        Sync_SpringSaleActionInfo(curPlayer, actNum)
     return isReset
 
-def Sync_SpringSaleActionInfo(curPlayer):
+def IsSpringSaleShopType(shopType):
+    ## 判断是否活动中的商店
+    for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {}).values():
+        actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0)
+        
+        state = actInfo.get(ShareDefine.ActKey_State, 0)
+        if not state:
+            continue
+        shopTypeList = GetShopTypeList(actInfo.get(ShareDefine.ActKey_CfgID, 0), actInfo.get(ShareDefine.ActKey_DayIndex, 0), actInfo.get(ShareDefine.ActKey_WorldLV, 0))
+        if not shopTypeList:
+            continue
+        actShopType = shopTypeList[-1] if state > len(shopTypeList) else shopTypeList[state - 1]
+        if shopType == actShopType:
+            GameWorld.DebugLog("限时特惠活动中的商店类型: actNum=%s,shopType=%s" % (actNum, shopType))
+            return True
+        
+    GameWorld.DebugLog("限时特惠非活动中或非活动中的商店类型!shopType=%s" % (shopType))
+    return False
+
+def Sync_SpringSaleActionInfo(curPlayer, actNum):
     ## 通知限时特惠活动信息
-    actInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_SpringSale, {})
+    actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_SpringSale, actNum)
     if not actInfo:
         return
     
@@ -113,6 +136,7 @@
     job = curPlayer.GetJob()
     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
     packInfo = ChPyNetSendPack.tagMCSpringSaleInfo()
+    packInfo.ActNum = actNum
     packInfo.StartDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetStartDate(), openServerDay)
     packInfo.EndtDate = GameWorld.GetOperationActionDateStr(springSaleIpyData.GetEndDate(), openServerDay)
     packInfo.AdvanceMinutes = springSaleIpyData.GetAdvanceMinutes()

--
Gitblit v1.8.0