| | |
| | | import random
|
| | | import time
|
| | |
|
| | | TreasureTypeList = (
|
| | | TreasureType_Jipin, # 极品寻宝 1
|
| | | TreasureType_Rune, # 符印寻宝 2
|
| | | TreasureType_Jueshi, # 绝世君宝 3
|
| | | TreasureType_GatherTheSoul, # 聚魂猎魔 4
|
| | | ) = range(1, 1 + 4)
|
| | |
|
| | | def DoTreasureOpen(curPlayer):
|
| | | ## 寻宝开启
|
| | |
|
| | |
| | | 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)
|
| | |
| | | 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])
|
| | |
|
| | | # 扣消耗
|
| | |
| | | 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)
|