From eda1c4429db2e7a3b1b79eee0cba0fc7abec7290 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 04 七月 2024 19:12:34 +0800
Subject: [PATCH] 10198 【香港】【越南】【主干】【砍树】【后端】BOSS凭证优化

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
index 1a49c82..1fb9c3a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
@@ -106,6 +106,7 @@
     
     playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialID % actNum) # 玩家身上的活动ID
     
+    __CheckActItemRecycle(curPlayer) # 必须在活动ID更新之前处理
     # 活动ID 相同的话不处理
     if actID == playerActID:
         GameWorld.DebugLog("Boss历练活动ID不变,不处理! actID=%s" % actID, curPlayer.GetPlayerID())
@@ -150,6 +151,7 @@
     
     playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_BossTrialID) # 玩家身上的活动ID
     
+    __CheckActItemRecycle(curPlayer) # 必须在活动ID更新之前处理
     # 活动ID 相同的话不处理
     if actID == playerActID:
         GameWorld.DebugLog("跨服Boss历练活动ID不变,不处理!cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID)   
@@ -163,7 +165,54 @@
     Sync_CrossActBossTrialActionInfo(curPlayer)
     return True
 
+def __CheckActItemRecycle(curPlayer):
+    ## 检查活动物品回收,玩家所有参与过的活动ID都结束后才处理
+    
+    if IsInActBossTrial(curPlayer):
+        # 还有活动中,标记待回收,如果一直有交替的活动开启中,则该状态一直为等待回收状态
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialRecycleState, 1)
+        return
+    
+    playerID = curPlayer.GetPlayerID()
+    recycleState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialRecycleState)
+    if not recycleState:
+        # 这样可以兼容回收功能上线后,确保老玩家之前屯的活动物品不会被回收,至少可以参与一次
+        GameWorld.DebugLog("Boss历练活动玩家没有标记过等待回收活动物品,不处理!", playerID)
+        return
+    
+    if recycleState == 2:
+        # 因为结束参与及活动结束都会触发检查,所以需要标记已处理过,防止一次活动多次回收
+        GameWorld.DebugLog("Boss历练活动已回收过活动物品!", playerID)
+        return
+    
+    actItemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1)
+    clearCountDict = ItemControler.ClearItemID(curPlayer, [actItemID])
+    clearCount = clearCountDict.get(actItemID, 0)
+    GameWorld.Log("Boss历练活动回收活动物品! actItemID=%s,clearCount=%s" % (actItemID, clearCount), playerID)
+    if clearCount > 0:
+        addMoney = clearCount
+        PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, addMoney, "BossTrialRecycle")
+        paramList = [clearCount, actItemID, actItemID, addMoney]
+        PlayerControl.SendMailByKey("BossTrialRecycle", [playerID], [], paramList)
+        
+    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialRecycleState, 2)
+    return
 
+def CheckActItemAutoTransform(curPlayer, tagItem, itemID, tagItemCount):
+    ## 检查活动物品自动转化为对应积分,物品实例外部统一清理
+    if itemID != IpyGameDataPY.GetFuncCfg("BossTrial", 1):
+        return False
+    if IsInActBossTrial(curPlayer):
+        return False
+    GameWorld.DebugLog("Boss历练活动非参与中,自动回收获得的活动物品! itemID=%s,itemCount=%s" % (itemID, tagItemCount))
+    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, tagItemCount, "BossTrialRecycle")
+    return True
+
+def IsInActBossTrial(curPlayer):
+    ## 是否有正在参与中的进行中活动
+    return PlayerControl.IsInOperationAction(curPlayer, ShareDefine.OperationActionName_BossTrial, ChConfig.Def_PDict_BossTrialID, 
+                                             ShareDefine.CrossActName_BossTrial, ChConfig.Def_PDict_CA_BossTrialID)
+    
 def SendToGameServer_BossTrial(curPlayer, msgType, dataMsg=""):
     playerID = curPlayer.GetPlayerID()
     msgList = str([msgType, dataMsg])
@@ -192,11 +241,11 @@
     
     crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
     if crossActInfo.get(ShareDefine.ActKey_State, 0):
-        if not crossActInfo.get(ShareDefine.ActKey_StateJoin):
+        if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
             GameWorld.Log("跨服Boss历练非参与活动中: actNum=%s" % actNum, playerID)
             return
     else:
-        if not actInfo.get(ShareDefine.ActKey_StateJoin):
+        if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start:
             GameWorld.Log("Boss历练非参与活动中: actNum=%s" % actNum, playerID)
             return
         

--
Gitblit v1.8.0