8668 【主干】可拍卖道具取消拍卖时间限制并可以叠加后,上架时可选择拍卖的数量
4个文件已修改
149 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChItem.py 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerAuctionHouse.py 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
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:
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)
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: