hxp
2024-07-04 eda1c4429db2e7a3b1b79eee0cba0fc7abec7290
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