From a515aa2d1043e20dba19ae0124f7777227c12753 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 11 七月 2025 11:17:39 +0800 Subject: [PATCH] 80 【常规】背包-服务端(优化背包格子初始化,屏蔽无用背包;支持绑定货币数量展示的背包物品;背包物品优化叠加上限20亿支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 50 +++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 39 insertions(+), 11 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py index b519ecf..3d0c00b 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py @@ -1069,7 +1069,7 @@ def DoTransformItem(self, curPlayer, tagItem, event=["", False, {}]): ## 将特殊物品转化为对应数值 itemID = tagItem.GetItemTypeID() - itemCount = max(tagItem.GetUserAttr(ShareDefine.Def_IudetItemCount), tagItem.GetCount()) + itemCount = tagItem.GetCount() eventName, isForceEvent, addDict = event if isForceEvent: pass @@ -2264,6 +2264,40 @@ return +def CheckGiveBindMoneyTypeItem(curPlayer, checkMoneyType=None): + ## 检查给绑定货币的展示物品 + bindMoneyItemInfo = IpyGameDataPY.GetFuncEvalCfg("PutInItemPack", 2, {}) + + needMoneyItemDict = {} + for itemIDStr, moneyType in bindMoneyItemInfo.items(): + if checkMoneyType != None and moneyType != checkMoneyType: + continue + if PlayerControl.GetMoney(curPlayer, moneyType): # 有货币时才需要 + needMoneyItemDict[int(itemIDStr)] = moneyType + + if not needMoneyItemDict: + #GameWorld.DebugLog("绑定货币显示物品已经都有了") + return + + curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + for i in xrange(curPack.GetCount()): + curItem = curPack.GetAt(i) + if not curItem or curItem.IsEmpty(): + continue + itemID = curItem.GetItemTypeID() + if itemID in needMoneyItemDict: + needMoneyItemDict.pop(itemID) + if not needMoneyItemDict: + break + + # 还有没给的物品补给,后端只负责给物品,不处理个数,前端对该类物品默认绑定货币对应的值来显示个数 + for itemID, moneyType in needMoneyItemDict.items(): + if not GivePlayerItem(curPlayer, itemID, 1, False, [IPY_GameWorld.rptItem]): + break + GameWorld.DebugLog("给绑定货币显示物品: moneyType=%s,itemID=%s" % (moneyType, itemID)) + + return + def GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, packIndexList=None, event=["", False, {}], setAttrDict=None): '''给玩家物品 @param isAuctionItem: 是否拍品 @@ -2312,7 +2346,7 @@ #常规物品 isOK = False - for _ in range(itemCount/65535 + 1): + for _ in range(itemCount/ChConfig.Def_ItemCount_Max + 1): if itemCount <= 0: break giveItem = GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer, setAttrDict=setAttrDict) @@ -2331,7 +2365,7 @@ # @return: 给成功总数,0代表给失败了 giveOKCount = 0 - for _ in range(itemCount/65535 + 1): + for _ in range(itemCount/ChConfig.Def_ItemCount_Max + 1): if giveOKCount >= itemCount: break giveItem = GetOutPutItemObj(itemID, itemCount - giveOKCount, isAuctionItem, curPlayer=curPlayer) @@ -2444,10 +2478,7 @@ # @return None def SetItemCount(item, cnt, playerID=0, accID=0, playerName=""): if not item.IsEmpty(): - if cnt > 0 and IsPutinAutoTransformItem(item): - item.SetUserAttr(ShareDefine.Def_IudetItemCount, min(cnt, ChConfig.Def_UpperLimit_DWord)) - else: - item.SetCount(min(cnt, 65535)) + item.SetCount(min(cnt, ChConfig.Def_ItemCount_Max)) else: try: 1 / 0 @@ -2456,10 +2487,7 @@ GameWorld.ErrLog(errorInfo + str(traceback.extract_stack()) + "\n" + traceback.format_exc()) raise -def GetItemCount(item): - if IsPutinAutoTransformItem(item): - return item.GetUserAttr(ShareDefine.Def_IudetItemCount) - return item.GetCount() +def GetItemCount(item): return item.GetCount() def GetItemNeedPackCount(packType, itemData, itemCount, isAuctionItem=0): # 20201223 主干取消拍品有效时长设定 -- Gitblit v1.8.0