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")