From 40673d6fac17bdead316b5aae223f7861d8d6eb7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 12 七月 2024 16:23:22 +0800
Subject: [PATCH] 10202 【越南】【香港】【主干】【砍树】聚魂

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py |   83 ++++++++++++++++++++++++++++-------------
 1 files changed, 57 insertions(+), 26 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
index 6e8e5bf..2ba1cad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTreasure.py
+++ b/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)

--
Gitblit v1.8.0