8668 【主干】可拍卖道具取消拍卖时间限制并可以叠加后,上架时可选择拍卖的数量
| | |
| | | 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)
|
| | |
| | | # @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
|
| | |
|
| | |
| | | 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()
|
| | |
|
| | |
| | | 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:
|
| | |
| | |
|
| | | import random
|
| | | import time
|
| | | import uuid
|
| | |
|
| | | #// B5 13 拍卖行上架拍品 #tagCMSellAuctionItem
|
| | | #
|
| | |
| | | #{
|
| | | # 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)
|
| | |
| | | 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
|
| | |
| | | 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
|
| | |
| | | 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)
|
| | |
| | | if itemGUID != curItemGUID or itemID != curItemID:
|
| | | GameWorld.Log("请求上架的拍品已变化,无法上架!", playerID)
|
| | | return
|
| | | __DoAddAuctionItem(curPlayer, [[curItem]])
|
| | | __DoAddAuctionItem(curPlayer, [[curItem, sellCount]])
|
| | | return
|
| | |
|
| | | def DoAddFamilyAuctionItem(familyAuctionItemDict):
|
| | |
| | | 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 = []
|
| | |
| | | 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)
|
| | |
| | |
|
| | | 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:
|