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