hxp
2024-07-12 8a565fcec631d8ceae589cd2c1764b3629f0fbe7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
@@ -36,6 +36,13 @@
import random
import time
TreasureTypeList = (
TreasureType_Jipin, # 极品寻宝 1
TreasureType_Rune, # 符印寻宝 2
TreasureType_Jueshi, # 绝世君宝 3
TreasureType_GatherTheSoul, # 聚魂猎魔 4
) = range(1, 1 + 4)
def DoTreasureOpen(curPlayer):
    ## 寻宝开启
    
@@ -93,6 +100,8 @@
    packType = ShareDefine.rptTreasure
    #if treasureType == 2:
    #    packType = ShareDefine.rptRune
    if treasureType in [TreasureType_GatherTheSoul]:
        packType = IPY_GameWorld.rptItem
        
    if not ItemCommon.CheckPackHasSpace(curPlayer, packType, True):
        GameWorld.DebugLog("对应寻宝背包没有空格子!packType=%s" % packType, playerID)
@@ -274,37 +283,57 @@
    isBind = 0 # 暂时默认不绑定
    job = curPlayer.GetJob()
    gridItemInfoDict = ipyData.GetGridItemInfo() # 格子对应物品信息 {"格子编号":[物品ID, 数量], ...}
    gridLibInfoDict = ipyData.GetGridLibInfo() # 格子对应物品信息 {"格子编号":[物品ID, 数量], ...}
    jobItemList = ipyData.GetJobItemList()
    treasureResult = []
    randItemIDDict = IpyGameDataPY.GetFuncEvalCfg("TreasureSet", 2)
    
    for gridNum in getGridResult:
        gridNum = str(gridNum)
        if gridNum not in gridItemInfoDict:
        if gridNum in gridItemInfoDict:
            itemID, itemCount = gridItemInfoDict[gridNum]
            itemID = GetJobItem(job, itemID, jobItemList)
            if not itemID:
                GameWorld.ErrLog("寻宝格子物品ID异常!treasureType=%s,gridNum=%s" % (treasureType, gridNum), playerID)
                return
            # 随机产出物品
            if itemID in randItemIDDict:
                canRandItemList = []
                randItemIDList = randItemIDDict[itemID]
                for randItemID in randItemIDList:
                    itemData = GameWorld.GetGameData().GetItemByTypeID(randItemID)
                    if itemData.GetType() == ChConfig.Def_ItemType_Rune and not PlayerRune.GetIsOpenByRuneID(curPlayer, randItemID):
                        GameWorld.DebugLog("未解锁的符印不产出!itemID=%s,randItemID=%s" % (itemID, randItemID), playerID)
                        continue
                    canRandItemList.append(randItemID)
                if not canRandItemList:
                    GameWorld.ErrLog("寻宝随机格子没有可随机的物品!treasureType=%s,treasureIndex=%s,gridNum=%s,itemID=%s"
                                     % (treasureType, treasureIndex, gridNum, itemID), playerID)
                    return
                itemID = random.choice(canRandItemList)
        # 根据物品库来随机
        elif gridNum in gridLibInfoDict:
            libID = gridLibInfoDict[gridNum]
            libItemList = IpyGameDataPY.GetIpyGameDataList("TreasureItemLib", libID)
            if not libItemList:
                return
            itemWeightList = []
            for libItem in libItemList:
                itemWeight, itemID, itemCount = libItem.GetItemWeight(), libItem.GetItemID(), libItem.GetItemCount()
                itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
                if not itemData:
                    continue
                itemWeightList.append([itemWeight, [itemID, itemCount]])
            if not itemWeightList:
                GameWorld.ErrLog("寻宝随机格子没有可随机的物品!treasureType=%s,treasureIndex=%s,gridNum=%s,libID=%s"
                                 % (treasureType, treasureIndex, gridNum, libID), playerID)
                return
            itemID, itemCount = GameWorld.GetResultByWeightList(itemWeightList)
        else:
            GameWorld.ErrLog("寻宝格子不存在!treasureType=%s,gridNum=%s" % (treasureType, gridNum), playerID)
            return
        itemID, itemCount = gridItemInfoDict[gridNum]
        itemID = GetJobItem(job, itemID, jobItemList)
        if not itemID:
            GameWorld.ErrLog("寻宝格子物品ID异常!treasureType=%s,gridNum=%s" % (treasureType, gridNum), playerID)
            return
        
        # 随机产出物品
        if itemID in randItemIDDict:
            canRandItemList = []
            randItemIDList = randItemIDDict[itemID]
            for randItemID in randItemIDList:
                itemData = GameWorld.GetGameData().GetItemByTypeID(randItemID)
                if itemData.GetType() == ChConfig.Def_ItemType_Rune and not PlayerRune.GetIsOpenByRuneID(curPlayer, randItemID):
                    GameWorld.DebugLog("未解锁的符印不产出!itemID=%s,randItemID=%s" % (itemID, randItemID), playerID)
                    continue
                canRandItemList.append(randItemID)
            if not canRandItemList:
                GameWorld.ErrLog("寻宝随机格子没有可随机的物品!treasureType=%s,treasureIndex=%s,gridNum=%s,itemID=%s"
                                 % (treasureType, treasureIndex, gridNum, itemID), playerID)
                return
            itemID = random.choice(canRandItemList)
        treasureResult.append([gridNum, itemID, itemCount, isBind])
        
    # 扣消耗
@@ -329,19 +358,21 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TreasureLuck % (treasureType), updLuck)
    PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_TreasureScore, addScore)
    
    if treasureType == 2:
    if treasureType == TreasureType_Rune:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_RuneTreasure, treasureCount)
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_RuneTreasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_RuneTreasure, treasureCount)
    elif treasureType == 1:
    elif treasureType == TreasureType_Jipin:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Treasure, treasureCount)
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Treasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_Treasure, treasureCount)
    elif treasureType == 3:
    elif treasureType == TreasureType_Jueshi:
        PlayerFairyCeremony.AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_JSTreasure, treasureCount)
        PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_JSTreasure, treasureCount)
        PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_JSTreasure, treasureCount)
    elif treasureType == TreasureType_GatherTheSoul:
        pass
    # 给物品
    mailItemList = []
    itemControl = ItemControler.PlayerItemControler(curPlayer)