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