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