From 66741b9971e49d7c99f998c3ea65945d55a81c63 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 23 十二月 2020 17:02:32 +0800
Subject: [PATCH] 8668 【主干】可拍卖道具取消拍卖时间限制并可以叠加后,上架时可选择拍卖的数量

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py            |   22 ++++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py                   |   43 +++++++-------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py     |   45 +++++++++-----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py |   39 ++++++------
 4 files changed, 84 insertions(+), 65 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
index 7baaa44..b13575a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py
@@ -2049,27 +2049,28 @@
         return
     
     if isAll:
-        # 目前仅针对拍品
-        GameWorld.DebugLog("=== 一键处理所有过期物品 ===")
-        curTime = int(time.time())
-        auctionItemTimeout = IpyGameDataPY.GetFuncCfg("AuctionItem", 1)
-        for i in xrange(backPack.GetCount()):
-            curItem = backPack.GetAt(i)
-            if not ItemCommon.CheckItemCanUse(curItem):
-                continue
-            if not ItemControler.GetIsAuctionItem(curItem):
-                continue
-            auctionItemCreateTime = curItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
-            if not auctionItemCreateTime:
-                continue
-            if curTime - auctionItemCreateTime < auctionItemTimeout * 3600:
-                # 未过期
-                continue
-            GameWorld.DebugLog("玩家拍品过期: i=%s,itemID=%s" % (i, curItem.GetItemTypeID()), curPlayer.GetPlayerID())
-            ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
-            
-        # 整理背包
-        ItemControler.ResetItem(curPlayer, packType, 0, 0, tick)
+        # 20201223 主干取消拍品有效时长设定
+#        # 目前仅针对拍品
+#        GameWorld.DebugLog("=== 一键处理所有过期物品 ===")
+#        curTime = int(time.time())
+#        auctionItemTimeout = IpyGameDataPY.GetFuncCfg("AuctionItem", 1)
+#        for i in xrange(backPack.GetCount()):
+#            curItem = backPack.GetAt(i)
+#            if not ItemCommon.CheckItemCanUse(curItem):
+#                continue
+#            if not ItemControler.GetIsAuctionItem(curItem):
+#                continue
+#            auctionItemCreateTime = curItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
+#            if not auctionItemCreateTime:
+#                continue
+#            if curTime - auctionItemCreateTime < auctionItemTimeout * 3600:
+#                # 未过期
+#                continue
+#            GameWorld.DebugLog("玩家拍品过期: i=%s,itemID=%s" % (i, curItem.GetItemTypeID()), curPlayer.GetPlayerID())
+#            ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
+#            
+#        # 整理背包
+#        ItemControler.ResetItem(curPlayer, packType, 0, 0, tick)
         return
     
     curItem = backPack.GetAt(itemIndex)
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 6647255..2b24dc6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -324,7 +324,9 @@
 #  @remarks 函数详细说明.
 def CanPackItemByItemType(srcItemID, srcItemIsBind, destItemID, destItemIsBind):
     ## 拍品项目,只有非拍品可堆叠,即绑定物品
-    if srcItemID == destItemID and srcItemIsBind == destItemIsBind and not srcItemIsBind:
+    # 20201223 主干取消拍品有效时长设定
+    #if srcItemID == destItemID and srcItemIsBind == destItemIsBind and not srcItemIsBind:
+    if srcItemID == destItemID and srcItemIsBind == destItemIsBind:
         return True
     return False
 
@@ -1112,11 +1114,12 @@
                 return True
             defaultPile = True
             maxPackCount = ChConfig.Def_UpperLimit_DWord # 转化物品叠加上限不取物品表的, 暂定堆叠上限20亿
-        elif isAuctionItem:
-            maxPackCount = tagItemCount
-            defaultPile = False # 新放入的拍品只能放空位置,所以不判断堆叠
-            #isBind = False
-            isNeedRecord = True # 拍品要记录
+        # 20201223 主干取消拍品有效时长设定
+#        elif isAuctionItem:
+#            maxPackCount = tagItemCount
+#            defaultPile = False # 新放入的拍品只能放空位置,所以不判断堆叠
+#            #isBind = False
+#            isNeedRecord = True # 拍品要记录
         else:
             maxPackCount = curItemData.GetPackCount()
             
@@ -2255,9 +2258,10 @@
     return item.GetCount()
 
 def GetItemNeedPackCount(packType, itemData, itemCount, isAuctionItem=0):
-    if isAuctionItem:
-        if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemData.GetItemTypeID()):
-            return 1
+    # 20201223 主干取消拍品有效时长设定
+#    if isAuctionItem:
+#        if IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemData.GetItemTypeID()):
+#            return 1
     if itemData.GetItemTypeID() in ChConfig.Def_TransformItemIDList:
         # 货币直接转换的物品如果是放入背包的则不需要暂用格子,放入其他的背包的则按物品叠加上限算
         if packType == IPY_GameWorld.rptItem:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
index 7e448fd..4c21baa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py
@@ -30,6 +30,7 @@
 
 import random
 import time
+import uuid
 
 #// B5 13 拍卖行上架拍品 #tagCMSellAuctionItem
 #
@@ -37,11 +38,13 @@
 #{
 #    tagHead Head;
 #    BYTE        ItemIndex;    //物品在背包中索引
+#    WORD        SellCount;    //上架个数,0代表全部上架
 #};
 def OnSellAuctionItem(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     playerID = curPlayer.GetPlayerID()
     itemIndex = clientData.ItemIndex
+    sellCount = clientData.SellCount if hasattr(clientData, "SellCount") else 0 # 后面加的,仅为测试时做下兼容
     GameWorld.DebugLog("玩家上架拍品: itemIndex=%s" % (itemIndex), playerID)
     playerPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
     curItem = playerPack.GetAt(itemIndex)
@@ -55,17 +58,18 @@
     ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID)
     if not ipyData:
         return
-    auctionItemCreateTime = curItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
-    if not auctionItemCreateTime:
-        GameWorld.DebugLog("没有拍品创建时间,无法上架!", playerID)
-        return
-    curTime = int(time.time())
-    if curTime - auctionItemCreateTime > IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600:
-        GameWorld.DebugLog("拍品已过期,无法上架!auctionItemCreateTime=%s" % (GameWorld.ChangeTimeNumToStr(auctionItemCreateTime)), playerID)
-        ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
-        return
+    # 20201223 主干取消拍品有效时长设定
+#    auctionItemCreateTime = curItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)
+#    if not auctionItemCreateTime:
+#        GameWorld.DebugLog("没有拍品创建时间,无法上架!", playerID)
+#        return
+#    curTime = int(time.time())
+#    if curTime - auctionItemCreateTime > IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600:
+#        GameWorld.DebugLog("拍品已过期,无法上架!auctionItemCreateTime=%s" % (GameWorld.ChangeTimeNumToStr(auctionItemCreateTime)), playerID)
+#        ItemControler.SetIsAuctionItem(curItem, False, curPlayer)
+#        return
     
-    QueryGameServer_AuctionHouse(playerID, "AddAuctionItemQuery", [itemIndex, itemGUID, itemID])
+    QueryGameServer_AuctionHouse(playerID, "AddAuctionItemQuery", [itemIndex, itemGUID, itemID, sellCount])
     return
 
 #// B5 14 拍卖行竞价物品 #tagCMBiddingAuctionItem
@@ -98,10 +102,10 @@
         return
     queryType, queryData, result = resultList
     if queryType == "AddAuctionItemQuery":
-        itemIndex, itemGUID, itemID = queryData
+        itemIndex, itemGUID, itemID, sellCount = queryData
         if not result or not result[0]:
             return
-        __DoPlayerSellAuctionItem(curPlayer, itemIndex, itemGUID, itemID)
+        __DoPlayerSellAuctionItem(curPlayer, itemIndex, itemGUID, itemID, sellCount)
         
     elif queryType == "BidAuctionItemQuery":
         itemGUID, biddingPrice = queryData
@@ -130,7 +134,7 @@
     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_AuctionItem, 1)
     return
 
-def __DoPlayerSellAuctionItem(curPlayer, itemIndex, itemGUID, itemID):
+def __DoPlayerSellAuctionItem(curPlayer, itemIndex, itemGUID, itemID, sellCount):
     ## 玩家上架拍品
     playerID = curPlayer.GetPlayerID()
     playerPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
@@ -145,7 +149,7 @@
     if itemGUID != curItemGUID or itemID != curItemID:
         GameWorld.Log("请求上架的拍品已变化,无法上架!", playerID)
         return
-    __DoAddAuctionItem(curPlayer, [[curItem]])
+    __DoAddAuctionItem(curPlayer, [[curItem, sellCount]])
     return
 
 def DoAddFamilyAuctionItem(familyAuctionItemDict):
@@ -175,7 +179,7 @@
 def __DoAddAuctionItem(curPlayer, auctionItemList):
     ''' 上架拍品,支持批量上架
     @param curPlayer: 非个人拍品时为None
-    @param auctionItemList: [[curItem], [curItem, familyID, familyPlayerIDList], ...]
+    @param auctionItemList: [[curItem], [curItem, sellCount], [curItem, familyID, familyPlayerIDList], ...]
     '''
     playerID = 0 if not curPlayer else curPlayer.GetPlayerID()
     addAuctionItemList = []
@@ -194,7 +198,16 @@
         if curPlayer and not familyID:
             if ItemCommon.CheckItemIsEquip(curItem):
                 EventShell.EventRespons_AddAuctionEquip(curPlayer, curItem.GetItemColor())
-            ItemCommon.DelItem(curPlayer, curItem, curItem.GetCount())
+            sellCount = itemInfo[1] if len(itemInfo) == 2 else 0
+            if sellCount <= 0:
+                sellCount = curItem.GetCount()
+            else:
+                sellCount = min(sellCount, curItem.GetCount())
+            itemData["ItemCount"] = sellCount
+            if sellCount != curItem.GetCount():
+                itemData["GUIDSrc"] = curItem.GetGUID()
+                itemData["GUID"] = str(uuid.uuid1()).upper() # 不是全部卖掉的,生成新的GUID
+            ItemCommon.DelItem(curPlayer, curItem, sellCount)
         else:
             if not ItemControler.GetIsAuctionItem(curItem):
                 GameWorld.Log("非拍品,绑定无法上架!", playerID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py
index 472748a..ab5bef3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py
@@ -98,25 +98,26 @@
         
     auctionItemTimeout = False
     auctionItemCreateTime = 0
-    if hasAuctionItem:
-        auctionItemValidTimesMax = IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600 # 拍品有效时长
-        auctionItemValidTimesMail = IpyGameDataPY.GetFuncCfg("AuctionItem", 2) * 3600 # 邮件拍品附加有效时长
-        auctionItemValidTimesTotal = auctionItemValidTimesMail + auctionItemValidTimesMax
-        mailCreateTimeStr = curPackData.CreateTime
-        mailCreateTime = GameWorld.ChangeTimeStrToNum(mailCreateTimeStr)
-        curTime = int(time.time())
-        passTime = curTime - mailCreateTime
-        if passTime <= auctionItemValidTimesMail:
-            GameWorld.DebugLog("邮件拍品领取时间在附加保护时长内,拍品创建时间即领取邮件时间开始算!passTime(%s) <= auctionItemValidTimesMail(%s)" % (passTime, auctionItemValidTimesMail))
-            pass
-        elif auctionItemValidTimesMail < passTime < auctionItemValidTimesTotal:
-            auctionItemCreateTime = curTime - (passTime - auctionItemValidTimesMail)
-            GameWorld.DebugLog("邮件拍品领取时间超过邮件保护时间,拍品创建时间需扣除领取时的溢出时间!auctionItemValidTimesMail(%s) < passTime(%s) < auctionItemValidTimesTotal(%s), auctionItemCreateTime=%s" 
-                               % (auctionItemValidTimesMail, passTime, auctionItemValidTimesTotal, GameWorld.ChangeTimeNumToStr(auctionItemCreateTime)))
-        elif passTime >= auctionItemValidTimesMax:
-            auctionItemTimeout = True
-            GameWorld.DebugLog("邮件中的拍品已过期,将自动转为非拍品!passTime(%s) >= auctionItemValidTimesMax(%s)" 
-                               % (passTime, auctionItemValidTimesMax))
+    # 20201223 主干取消拍品有效时长设定
+#    if hasAuctionItem:
+#        auctionItemValidTimesMax = IpyGameDataPY.GetFuncCfg("AuctionItem", 1) * 3600 # 拍品有效时长
+#        auctionItemValidTimesMail = IpyGameDataPY.GetFuncCfg("AuctionItem", 2) * 3600 # 邮件拍品附加有效时长
+#        auctionItemValidTimesTotal = auctionItemValidTimesMail + auctionItemValidTimesMax
+#        mailCreateTimeStr = curPackData.CreateTime
+#        mailCreateTime = GameWorld.ChangeTimeStrToNum(mailCreateTimeStr)
+#        curTime = int(time.time())
+#        passTime = curTime - mailCreateTime
+#        if passTime <= auctionItemValidTimesMail:
+#            GameWorld.DebugLog("邮件拍品领取时间在附加保护时长内,拍品创建时间即领取邮件时间开始算!passTime(%s) <= auctionItemValidTimesMail(%s)" % (passTime, auctionItemValidTimesMail))
+#            pass
+#        elif auctionItemValidTimesMail < passTime < auctionItemValidTimesTotal:
+#            auctionItemCreateTime = curTime - (passTime - auctionItemValidTimesMail)
+#            GameWorld.DebugLog("邮件拍品领取时间超过邮件保护时间,拍品创建时间需扣除领取时的溢出时间!auctionItemValidTimesMail(%s) < passTime(%s) < auctionItemValidTimesTotal(%s), auctionItemCreateTime=%s" 
+#                               % (auctionItemValidTimesMail, passTime, auctionItemValidTimesTotal, GameWorld.ChangeTimeNumToStr(auctionItemCreateTime)))
+#        elif passTime >= auctionItemValidTimesMax:
+#            auctionItemTimeout = True
+#            GameWorld.DebugLog("邮件中的拍品已过期,将自动转为非拍品!passTime(%s) >= auctionItemValidTimesMax(%s)" 
+#                               % (passTime, auctionItemValidTimesMax))
             
     #背包空间不足
     if not isPackSpaceEnough:

--
Gitblit v1.8.0