From 71b4124bef7ec706c3d926adce5ed443f9d96e3e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 12 八月 2024 14:14:52 +0800
Subject: [PATCH] 10245 【越南】【砍树】【主干】【港台】古宝升星修改(支持额外扣除品质碎片数量)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py |   52 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 46 insertions(+), 6 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index 2c30d14..6329808 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -162,10 +162,18 @@
 
 #// B2 17 古宝升星 #tagCMGubaoStarUp
 #
+#struct    tagCMGubaoPieceUse
+#{
+#    WORD        GubaoID;        // 通用碎片古宝ID
+#    WORD        PieceCount;    // 使用碎片个数
+#};
+#
 #struct    tagCMGubaoStarUp
 #{
 #    tagHead         Head;
 #    WORD        GubaoID;    
+#    BYTE        PieceSelectCount;
+#    tagCMGubaoPieceUse    CommPieceUseList[PieceSelectCount];    // 通用古宝碎片使用列表
 #};
 def OnGubaoStarUp(index, curPackData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
@@ -185,7 +193,8 @@
     if not ipyData:
         return
     needItemList = ipyData.GetStarUPNeedItemInfo()
-    if not needItemList:
+    needQualityPiece = ipyData.GetStarUPNeedQualityPiece()
+    if not needItemList and not needQualityPiece:
         return
     
     needPieceInfo, realNeedItemList = ParseGubaoNeedItem(curPlayer, needItemList)
@@ -195,15 +204,46 @@
         if lackItemDict:
             GameWorld.DebugLog("古宝升星所需物品不足! star=%s,realNeedItemList=%s,lackItemDict=%s" % (star, realNeedItemList, lackItemDict), playerID)
             return
-    for gID, needPieceCount in needPieceInfo.items():
-        curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % gID)
+        
+    if needQualityPiece:
+        commPieceUseLimitInfo = IpyGameDataPY.GetFuncEvalCfg("GubaoPiece", 1, {})
+        selectPieceDict = {}
+        for pieceUse in curPackData.CommPieceUseList:
+            useGubaoID = pieceUse.GubaoID
+            usePieceCnt = pieceUse.PieceCount
+            useIpyData = IpyGameDataPY.GetIpyGameData("Gubao", useGubaoID)
+            if not useIpyData:
+                return
+            quality = useIpyData.GetGubaoQuality()
+            if str(quality) not in commPieceUseLimitInfo:
+                GameWorld.DebugLog("该古宝品质没有配置可作为通用碎片使用的最低星级! useGubaoID=%s" % (useGubaoID), playerID)
+                return
+            needStar = commPieceUseLimitInfo[str(quality)]
+            _, usePieceStar = GetGubaoLVInfo(curPlayer, useGubaoID)
+            if usePieceStar < needStar:
+                GameWorld.DebugLog("该古宝品质星级不足,无法作为通用碎片! useGubaoID=%s,usePieceStar=%s < %s" % (useGubaoID, usePieceStar, needStar), playerID)
+                return
+            selectPieceDict[quality] = selectPieceDict.get(quality, 0) + usePieceCnt
+            needPieceInfo[useGubaoID] = needPieceInfo.get(useGubaoID, 0) + usePieceCnt
+            
+        for quality, needCount in needQualityPiece:
+            selectCount = selectPieceDict.get(quality, 0)
+            if selectCount != needCount: # 需精确匹配个数,多或少都不允许升星,防止多扣或者少扣
+                GameWorld.ErrLog("选择使用的品质通用碎片个数不匹配,无法升星!  gubaoID=%s,star=%s,quality=%s,selectCount=%s != %s" 
+                                 % (gubaoID, star, quality, selectCount, needCount), playerID)
+                return
+            
+        GameWorld.DebugLog("所需古宝碎片汇总: %s" % needPieceInfo, playerID)
+        
+    for costGubaoID, needPieceCount in needPieceInfo.items():
+        curCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoPiece % costGubaoID)
         if curCount < needPieceCount:
-            GameWorld.DebugLog("古宝升星所需古宝碎片不足! gubaoID=%s,curCount=%s < needPieceCount=%s" % (gubaoID, curCount, needPieceCount), playerID)
+            GameWorld.DebugLog("古宝升星所需古宝碎片不足! gubaoID=%s,costGubaoID=%s,curCount=%s < needPieceCount=%s" % (gubaoID, costGubaoID, curCount, needPieceCount), playerID)
             return
         
     #扣消耗
-    for gID, needPieceCount in needPieceInfo.items():
-        DelGubaoPiece(curPlayer, gID, needPieceCount, "StarUp")
+    for costGubaoID, needPieceCount in needPieceInfo.items():
+        DelGubaoPiece(curPlayer, costGubaoID, needPieceCount, "StarUp")
     if realNeedItemList:
         ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "Gubao")
         

--
Gitblit v1.8.0