From 5a3bb2e53454800a55bca0d911050e8dd9a69c27 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 13 三月 2026 10:45:08 +0800
Subject: [PATCH] 556 【付费功能】时装商店-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py |   38 ++++++++++++++++++++++++++++----------
 1 files changed, 28 insertions(+), 10 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
index c117e62..cba53e5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/FunctionNPCCommon.py
@@ -55,7 +55,6 @@
 import PlayerControl
 import IpyGameDataPY
 import ItemCommon
-import ObjPool
 
 # 重置类型
 ResetType_Day = 1
@@ -118,16 +117,25 @@
         SyncShopItemBuyCntInfo(curPlayer, syncIDList)
     return
 
-def ResetShopItemBuyCountByShopType(curPlayer, shopTypeList):
+def ResetShopItemBuyCountByShopType(curPlayer, shopTypeList, recycleItemMail=""):
     ##根据商店类型重置商店限购物品次数
+    # @param recycleItemMail: 商店消耗物品回收通知邮件,为空时不回收
     if not shopTypeList:
         return
+    recycleCostItemIDList = []
     syncIDList = []
     for shopType in shopTypeList:
         ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("Store", {"ShopType":shopType}, True, True)
         if not ipyDataList:
             continue
         for ipyData in ipyDataList:
+            
+            # 消耗道具回收
+            costItemID = ipyData.GetCostItemID()
+            if recycleItemMail and costItemID and costItemID not in recycleCostItemIDList:
+                recycleCostItemIDList.append(costItemID)
+                ItemControler.RecycleItem(curPlayer, costItemID, recycleItemMail)
+                
             if not ipyData.GetLimitCnt():
                 continue
             shopID = ipyData.GetID()
@@ -259,6 +267,7 @@
         GameWorld.Log("Store shop item lock! shopID=%s,shopID=%s" % (shopType, shopID), curPlayer.GetPlayerID())
         return
     
+    costItemID = ipyData.GetCostItemID()
     priceType, itemPrice = ipyData.GetMoneyType(), ipyData.GetMoneyNum()
     itemPrice *= clientBuyCount
     #if not PlayerControl.HaveMoney(curPlayer, priceType, itemPrice):
@@ -266,9 +275,19 @@
     
     infoDict = {"TotalItemList":totalItemList, "ClientBuyCount":clientBuyCount, "ShopType":shopType,
                 "ShopID":shopID, ChConfig.Def_Cost_Reason_SonKey:mainItemID}
-    if priceType and itemPrice and not PlayerControl.PayMoney(curPlayer, priceType, itemPrice, ChConfig.Def_Cost_BuyStoreItem, infoDict, clientBuyCount):
-        return
-    
+    # 支持消耗货币或道具二选一
+    if priceType:
+        if itemPrice and not PlayerControl.PayMoney(curPlayer, priceType, itemPrice, ChConfig.Def_Cost_BuyStoreItem, infoDict, clientBuyCount):
+            return
+    elif costItemID and itemPrice:
+        needItemCnt = itemPrice
+        costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, needItemCnt)
+        lackCnt = needItemCnt - bindCnt - unBindCnt
+        if lackCnt > 0:
+            GameWorld.DebugLog("所需消耗道具不足! costItemID=%s,needItemCnt=%s,lackCnt=%s" % (costItemID, needItemCnt, lackCnt))
+            return
+        ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, needItemCnt, "BuyItem")
+        
     # 今日购买次数+1
     if limitBuyCnt > 0:
         updBuyCnt = min(curBuyCnt + clientBuyCount, ChConfig.Def_UpperLimit_DWord)
@@ -407,7 +426,7 @@
             syncIDList.append(shopID)
     if not syncIDList:
         return
-    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCShopRefreshItemInfo)
+    clientPack = ChPyNetSendPack.tagSCShopRefreshItemInfo()
     clientPack.ShopType = shopType
     clientPack.RefreshCnt = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopRefreshCnt % shopType), 250)
     clientPack.ShopIDList = syncIDList
@@ -418,11 +437,10 @@
 def SyncShopItemBuyCntInfo(curPlayer, syncIDList=[]):
     ##同步商品购买次数
     
-    objPool = ObjPool.GetPoolMgr()
     buyCntList = []
     if syncIDList:
         for shopID in syncIDList:
-            buyInfo = objPool.acquire(ChPyNetSendPack.tagSCShopItemBuyCnt)
+            buyInfo = ChPyNetSendPack.tagSCShopItemBuyCnt()
             buyInfo.ShopID = shopID
             buyInfo.BuyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopBuyCnt % shopID)
             buyCntList.append(buyInfo)
@@ -436,7 +454,7 @@
             buyCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ShopBuyCnt % shopID)
             if buyCnt <= 0:
                 continue
-            buyInfo = objPool.acquire(ChPyNetSendPack.tagSCShopItemBuyCnt)
+            buyInfo = ChPyNetSendPack.tagSCShopItemBuyCnt()
             buyInfo.ShopID = shopID
             buyInfo.BuyCnt = buyCnt
             buyCntList.append(buyInfo)
@@ -444,7 +462,7 @@
     if not buyCntList:
         return
     
-    clientPack = objPool.acquire(ChPyNetSendPack.tagSCShopItemBuyCntInfo)
+    clientPack = ChPyNetSendPack.tagSCShopItemBuyCntInfo()
     clientPack.BuyCntList = buyCntList
     clientPack.Count = len(clientPack.BuyCntList)
     NetPackCommon.SendFakePack(curPlayer, clientPack)

--
Gitblit v1.8.0