From 31c49247fe0656416cf5cfc4f5b290d40b919d15 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 26 七月 2019 21:16:50 +0800 Subject: [PATCH] 860312 白蓝装从出售改成分解 --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py | 379 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 356 insertions(+), 23 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py index 302720e..c3ae103 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/AuctionHouse.py @@ -21,13 +21,17 @@ import PyGameDataStruct import PlayerCompensation import ChPyNetSendPack +import PlayerDBGSEvent import IpyGameDataPY import NetPackCommon import PlayerBourse import PlayerFamily import ShareDefine +import PyGameData import ChConfig +import random +import datetime import operator import time import math @@ -214,10 +218,22 @@ def __InitAuctionAttentionAttrEx(attentionData): ## 初始化拍卖关注实例附加属性 - setattr(attentionData, "AttentionItemIDList", [] if not attentionData.AttentionInfo else json.loads(attentionData.AttentionInfo)) + setattr(attentionData, "AttentionItemIDList", []) + if attentionData.AttentionInfo.startswith("[") and attentionData.AttentionInfo.endswith("]"): + attentionData.AttentionItemIDList = json.loads(attentionData.AttentionInfo) return ##------------------------------------------------------------------------------------------------- +def OnGameServerInitOK(): + ## 服务器启动成功 + + allAuctionItemByEndTimeList = PyDataManager.GetAuctionItemManager().allAuctionItemByEndTimeList + # 由于服务器未启动成功时取不到正确的开服天,所以启动成功后刷新一下拍品系统回购时间 + for auctionItem in allAuctionItemByEndTimeList: + __SetAuctionItemSysBuyTime(auctionItem) + + __SortAuctionitem() + return def OnLoadAuctionItemDataEx(dbData): ## 加载拍卖物品表时附加处理 @@ -267,9 +283,73 @@ setattr(auctionItem, "BiddingQueryID", 0) # 当前正在竞价的玩家ID setattr(auctionItem, "BiddingQueryTick", 0) # 当前正在竞价的tick setattr(auctionItem, "EndTime", 0) # 结束竞价time值 + setattr(auctionItem, "SysBuyTime", 0) # 系统一口价时间 + __SetAuctionItemSysBuyTime(auctionItem) __SetAuctionItemEndTime(auctionItem, ipyData) return True + +def __SetAuctionItemSysBuyTime(auctionItem): + ## 更新系统一口价该拍品时间 + if not GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_GameWorldInitOK): + #GameWorld.DebugLog("服务器未启动好,取不到正确的开服天,不处理拍品系统回购时间!") + return + #itemGUID = auctionItem.ItemGUID + itemID = auctionItem.ItemID + itemType = auctionItem.ItemType + playerID = auctionItem.PlayerID + familyID = auctionItem.FamilyID + if not playerID and not familyID: + #GameWorld.DebugLog("该拍品为系统上架的拍品,不设置系统一口价时间! GUID=%s,itemID=%s" % (itemGUID, itemID)) + return + + if familyID: + #GameWorld.DebugLog("该拍品为仙盟拍品,不设置系统一口价时间! GUID=%s,itemID=%s,familyID=%s" % (itemGUID, itemID, familyID)) + return + + # 注意: 因为GameServer没传是否套装,所以暂时按策划的ID规则来处理,最后一位代表是否套装 + if itemID % 10 == 1: + #GameWorld.DebugLog("该拍品为套装拍品,不设置系统一口价时间! itemID=%s" % (itemID)) + return + + if auctionItem.BidderID: + #GameWorld.DebugLog("该拍品已经有人竞价,不设置系统一口价时间! itemID=%s,bidderID=%s" % (itemID, auctionItem.BidderID)) + return + + classLV = auctionItem.ItemClassLV + classSysBuyRateDict = IpyGameDataPY.GetFuncEvalCfg("AuctionItemSystem", 5) + if classLV in classSysBuyRateDict: + sysBuyRate = classSysBuyRateDict[classLV] + if not GameWorld.CanHappen(sysBuyRate, 100): + #GameWorld.DebugLog("该拍品阶概率不回收,不设置系统一口价时间! itemID=%s,classLV=%s,sysBuyRate=%s" % (itemID, classLV, sysBuyRate)) + return + + canSysBuyItemTypeList = IpyGameDataPY.GetFuncEvalCfg("AuctionItemSystem", 2) + if itemType not in canSysBuyItemTypeList: + #GameWorld.DebugLog("该拍品类型不可被系统一口价,不设置系统一口价时间! itemID=%s,itemType=%s" % (itemID, itemType)) + return + + sysBuyTimeRange = {} + openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + oscDaySysBuyTimeRangeDict = IpyGameDataPY.GetFuncEvalCfg("AuctionItemSystem", 1, {}) + openServerDayList = oscDaySysBuyTimeRangeDict.keys() + openServerDayList.sort() + for oscDay in openServerDayList: + if openServerDay <= oscDay: + sysBuyTimeRange = oscDaySysBuyTimeRangeDict[oscDay] + break + if len(sysBuyTimeRange) != 2: + #GameWorld.DebugLog("该开服天没有配置系统中间商回购支持! openServerDay=%s, %s" % (openServerDay, oscDaySysBuyTimeRangeDict)) + return + randMinutes = random.randint(sysBuyTimeRange[0], sysBuyTimeRange[1]) + addTimeStr = auctionItem.AddTime + addTime = GameWorld.ChangeTimeStrToNum(addTimeStr) + auctionItem.SysBuyTime = addTime + randMinutes * 60 + pyAuctionItemMgr = PyDataManager.GetAuctionItemManager() + pyAuctionItemMgr.sysBuyoutItemByTimeList.append(auctionItem) + #GameWorld.DebugLog("更新拍品系统一口价时间: GUID=%s,itemID=%s,addTime=%s(%s),openServerDay=%s,randMinutes=%s(%s),sysBuyTime=%s" + # % (itemGUID, itemID, addTime, addTimeStr, openServerDay, randMinutes, sysBuyTimeRange, auctionItem.SysBuyTime)) + return def __SetAuctionItemEndTime(auctionItem, ipyData): ## 更新拍品结束竞价time值 @@ -326,8 +406,150 @@ return True return False + +def __GetAuctionSystemItemInfo(): + key = "AuctionSystemItem" + openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay) + 1 + AuctionSystemItem = IpyGameDataPY.GetConfigEx(key) + reloadSign = openServerDay + if AuctionSystemItem and AuctionSystemItem[0] == reloadSign: + GameWorld.DebugLog("已经加载过本日系统拍品处理信息!openServerDay=%s" % openServerDay) + return AuctionSystemItem[1] + + # 因为后面的时间判断都是精确到分的,而处理此逻辑的时候可能不是0秒,所以这里的datetime取当前时间精确到分的 + serverTime = GameWorld.GetServerTime() + curDateStr = "%d-%d-%d" % (serverTime.year, serverTime.month, serverTime.day) + curDateTimeStr = "%d-%d-%d %02d:%02d:00" % (serverTime.year, serverTime.month, serverTime.day, serverTime.hour, serverTime.minute) + curDateTime = datetime.datetime.strptime(curDateTimeStr, ChConfig.TYPE_Time_Format) + + GameWorld.Log("===== 加载本日系统拍品信息: %s,openServerDay=%s =====" % (curDateTime, openServerDay)) + addSystemAuctionItemInfo = [] + ipyDataMgr = IpyGameDataPY.IPY_Data() + for index in xrange(ipyDataMgr.GetAuctionSystemItemCount()): + ipyData = ipyDataMgr.GetAuctionSystemItemByIndex(index) + cfgID = ipyData.GetCfgID() + startDateStr = ipyData.GetStartDate() + endDateStr = ipyData.GetEndDate() + startTimeStr = ipyData.GetStartTime() + endTimeStr = ipyData.GetEndTime() + auctionCount = ipyData.GetAuctionCount() + randMinuteRange = ipyData.GetRandMinuteRange() + + GameWorld.DebugLog("cfgID=%s,startDateStr=%s,endDateStr=%s,startTimeStr=%s,endTimeStr=%s,auctionCount=%s,randMinuteRange=%s" + % (cfgID, startDateStr, endDateStr, startTimeStr, endTimeStr, auctionCount, randMinuteRange)) + + if not startDateStr: + startDateStr = curDateStr + elif startDateStr.isdigit(): + startServerDay = int(startDateStr) + openServerDateTime = curDateTime + datetime.timedelta(days=(startServerDay-openServerDay)) + startDateStr = "%d-%d-%d" % (openServerDateTime.year, openServerDateTime.month, openServerDateTime.day) + + if not endDateStr: + endDateStr = curDateStr + elif endDateStr.isdigit(): + endServerDay = int(endDateStr) + endServerDateTime = curDateTime + datetime.timedelta(days=(endServerDay-openServerDay)) + endDateStr = "%d-%d-%d" % (endServerDateTime.year, endServerDateTime.month, endServerDateTime.day) + + startDate = datetime.datetime.strptime("%s 00:00:00" % (startDateStr), ChConfig.TYPE_Time_Format) + endDate = datetime.datetime.strptime("%s 23:59:00" % (endDateStr), ChConfig.TYPE_Time_Format) + if serverTime < startDate or serverTime > endDate: + GameWorld.DebugLog(" 不在上架日期内,不处理!") + continue + + if not startTimeStr: + startTimeStr = "00:00" + if not endTimeStr: + endTimeStr = "23:59" + startDatetime = datetime.datetime.strptime("%s %s:00" % (curDateStr, startTimeStr), ChConfig.TYPE_Time_Format) + endDatetime = datetime.datetime.strptime("%s %s:00" % (curDateStr, endTimeStr), ChConfig.TYPE_Time_Format) + if serverTime >= endDatetime: + GameWorld.DebugLog(" 已超过今日的上架时间段,不处理!") + continue + if serverTime > startDatetime: + startDatetime = curDateTime + + addAuctionItemDatetimeList = [] + nextAddAuctionItemDatetime = startDatetime + for _ in xrange(auctionCount): + if len(randMinuteRange) == 2: + nextAddMinutes = random.randint(randMinuteRange[0], randMinuteRange[1]) + elif len(randMinuteRange) == 1: + nextAddMinutes = randMinuteRange[0] + else: + continue + nextAddAuctionItemDatetime += datetime.timedelta(minutes=nextAddMinutes) + if nextAddAuctionItemDatetime > endDatetime: + break + GameWorld.DebugLog(" 添加上架系统拍品时间: nextAddMinutes=%s %s" % (nextAddMinutes, nextAddAuctionItemDatetime)) + addAuctionItemDatetimeList.append(nextAddAuctionItemDatetime) + + if not addAuctionItemDatetimeList: + continue + GameWorld.DebugLog(" 添加上架系统拍品时间: %s" % addAuctionItemDatetimeList) + addSystemAuctionItemInfo.append([cfgID, ipyData, addAuctionItemDatetimeList]) + + AuctionSystemItem = IpyGameDataPY.SetConfigEx(key, [reloadSign, addSystemAuctionItemInfo]) + GameWorld.Log("本日系统拍品信息加载完毕!reloadSign=%s" % (reloadSign)) + GameWorld.Log("本日系统拍品上架时间信息: %s" % addSystemAuctionItemInfo) + GameWorld.Log("=============================================================") + return AuctionSystemItem[1] + +def OnAuctionItemMinuteProcess(): + ## 拍卖行拍品定时处理,每整分钟触发一次 + + # 这里时间需精确到分钟,不然后面的比较会匹配不到 + curDateTime = GameWorld.GetServerTime() + curDateTime = datetime.datetime.strptime("%d-%d-%d %d:%d:00" % (curDateTime.year, curDateTime.month, curDateTime.day, + curDateTime.hour, curDateTime.minute), ChConfig.TYPE_Time_Format) + + randMailKey = "" + sysAuctionItemList = [] + addSystemAuctionItemInfo = __GetAuctionSystemItemInfo() + for cfgID, ipyData, addAuctionItemDatetimeList in addSystemAuctionItemInfo: + if curDateTime not in addAuctionItemDatetimeList: + continue + #cfgID = ipyData.GetCfgID() + addCountWeightList = ipyData.GetItemCountWeightList() + auctionItemWeightList = ipyData.GetAuctionItemWeightList() + + addCount = GameWorld.GetResultByWeightList(addCountWeightList) + addSysItemList = [] + for _ in xrange(addCount): + itemInfo = GameWorld.GetResultByWeightList(auctionItemWeightList) + if itemInfo != None: + addSysItemList.append(itemInfo) + GameWorld.Log("增加上架系统拍品信息: cfgID=%s,addCount=%s, %s" % (cfgID, addCount, addSysItemList)) + sysAuctionItemList += addSysItemList + + randMailKeyList = ipyData.GetRandMailKeyList() + if randMailKeyList: + randMailKey = random.choice(randMailKeyList) + + # 随机邮件通知 + if randMailKey: + playerIDList = [] + addItemList = [] + playerManager = GameWorld.GetPlayerManager() + for i in xrange(playerManager.GetActivePlayerCount()): + player = playerManager.GetActivePlayerAt(i) + if player == None: + continue + if PlayerControl.GetIsTJG(player): + continue + playerIDList.append(player.GetPlayerID()) + PlayerCompensation.SendMailByKey(randMailKey, playerIDList, addItemList) + + if sysAuctionItemList: + DoAddSystemAuctionItem(sysAuctionItemList) + return + def OnAuctionItemTimeProcess(curTime, tick): ## 拍卖行拍品定时处理,每秒触发一次 + + __DoSysBuyoutItemByTime(curTime) + allAuctionItemByEndTimeList = PyDataManager.GetAuctionItemManager().allAuctionItemByEndTimeList if not allAuctionItemByEndTimeList: return @@ -355,6 +577,88 @@ __EndAuctionItem(endItemList, "ByTime") __MoveFamilyAuctionItemToWorld(moveToWorldItemList) return + +def __DoSysBuyoutItemByTime(curTime): + ## 系统一口价拍品 + + sysBuyoutItemByTimeList = PyDataManager.GetAuctionItemManager().sysBuyoutItemByTimeList + if not sysBuyoutItemByTimeList: + return + + sysAuctionItemList = [] + color = 4 # 固定橙色 + isSuit = 0 # 固定非套装 + star = 0 # 固定0星 + + endItemList = [] # 结束竞价的拍品列表 + doCount = len(sysBuyoutItemByTimeList) + while doCount > 0 and sysBuyoutItemByTimeList: + doCount -= 1 + auctionItem = sysBuyoutItemByTimeList[0] + if curTime <= auctionItem.SysBuyTime: + break + sysBuyoutItemByTimeList.pop(0) + + if auctionItem.BidderPrice or auctionItem.BidderID: + continue + + classLV = auctionItem.ItemClassLV + if not classLV: + continue + + itemID = auctionItem.ItemID + ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID) + if not ipyData: + continue + buyoutPrice = ipyData.GetBuyoutPrice() + if not buyoutPrice: + continue + + buyoutPrice *= auctionItem.Count + auctionItem.BidderPrice = buyoutPrice # 没人竞价的系统直接一口价回收 + endItemList.append(auctionItem) + + # 生成系统补上架的装备信息 + randPlaceList = IpyGameDataPY.GetFuncEvalCfg("AuctionItemSystem", 4) + if not randPlaceList: + curPlace = itemID % 1000 / 10 # 倒数2、3位代表部位 + placeList = [curPlace] + else: + placeList = randPlaceList + + totalPlayerCount = 0 + jobWeightList = [] + openJobList = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1) + for job in openJobList: + jobPlayerCount = len(PyGameData.g_onedayJobPlayerLoginoffTimeDict.get(job, {})) + totalPlayerCount += jobPlayerCount + jobWeightList.append([jobPlayerCount, job]) + GameWorld.DebugLog("职业人数: job=%s,count=%s" % (job, jobPlayerCount)) + + maxJobPer = IpyGameDataPY.GetFuncCfg("AuctionItemSystem", 3) # 单职业最大百分比 + if maxJobPer and maxJobPer < 100 and totalPlayerCount: + minJobPer = 100 - maxJobPer # 单职业至少百分比 + for jobWeightInfo in jobWeightList: + jobPlayerCount = jobWeightInfo[0] + jobPer = int(jobPlayerCount * 100.0 / totalPlayerCount) + jobPer = min(max(minJobPer, jobPer), maxJobPer) + jobWeightInfo[0] = jobPer + GameWorld.DebugLog("随机上架职业装备比重: jobWeightList=%s" % jobWeightList) + job = GameWorld.GetResultByWeightList(jobWeightList) + itemJobList = [job] if job != None else openJobList + sysAuctionItemList.append([classLV, color, placeList, isSuit, star, itemJobList]) + + if not endItemList: + return + + __EndAuctionItem(endItemList, "SysBuyout") + + # 系统回收拍品后立即按规则补上架拍品 + if sysAuctionItemList: + DoAddSystemAuctionItem(sysAuctionItemList) + + return + def __MoveFamilyAuctionItemToWorld(auctionItemList): ## 仙盟拍品转移到全服 @@ -427,6 +731,7 @@ if isSortWorldItem: auctionItemMgr.worldAuctionItemList.sort(key=operator.attrgetter("Sortpriority", "AddTime")) auctionItemMgr.worldAuctionItemQueryDict = {} # 重置全服拍品条件查询,下次有玩家查询时再重新刷新 + auctionItemMgr.sysBuyoutItemByTimeList.sort(key=operator.attrgetter("SysBuyTime")) return def __EndAuctionItem(endItemList, endEvent): @@ -451,15 +756,16 @@ bidderPrice = auctionItem.BidderPrice # 当前竞价,有人竞价的话代表竞拍成功 endType = "" # 有人竞价,成交 - if bidderID and bidderPrice: + if bidderPrice: endType = "OK" # 竞拍成功邮件,发放物品 - paramList = [bidderPrice] - detail = {"ItemGUID":itemGUID} - addItemList = [{"ItemID":itemID, "Count":itemCount, "IsAuctionItem":False, "UserData":auctionItem.UserData}] - PlayerCompensation.SendMailByKey("PaimaiMail3", [bidderID], addItemList, paramList, detail=detail) - AddAuctionRecord(auctionItem, AuctionRecordResult_BidOK) + if bidderID: + paramList = [bidderPrice] + detail = {"ItemGUID":itemGUID} + addItemList = [{"ItemID":itemID, "Count":itemCount, "IsAuctionItem":False, "UserData":auctionItem.UserData}] + PlayerCompensation.SendMailByKey("PaimaiMail3", [bidderID], addItemList, paramList, detail=detail) + AddAuctionRecord(auctionItem, AuctionRecordResult_BidOK) # 拍卖成功收益,都以玩家收益向上取整 if familyID and auctionItem.FamilyPlayerIDInfo: @@ -475,8 +781,8 @@ # 仙盟拍品收益邮件 detail = {"ItemGUID":itemGUID, "ItemID":itemID, "Count":itemCount, "BidderPrice":bidderPrice, "FamilyPlayerIDList":familyPlayerIDList} - paramList = [itemID, itemID, auctionItem.BidderName, bidderPrice, taxRate, giveGoldAverage, personMaxRate] - PlayerCompensation.SendMailByKey("PaimaiMail6", familyPlayerIDList, [], paramList, gold=giveGoldAverage, + paramList = [itemID, itemID, bidderPrice, taxRate, giveGoldAverage, personMaxRate] + PlayerCompensation.SendMailByKey("PaimaiMail8", familyPlayerIDList, [], paramList, gold=giveGoldAverage, detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionGain) else: GameWorld.ErrLog("仙盟拍品没有人获得收益!familyID=%s,itemID=%s,itemGUID=%s" % (familyID, itemID, itemGUID)) @@ -488,31 +794,38 @@ # 个人拍卖收益邮件 detail = {"ItemGUID":itemGUID, "ItemID":itemID, "Count":itemCount, "BidderPrice":bidderPrice} - paramList = [itemID, itemID, auctionItem.BidderName, bidderPrice, taxRate, givePlayerGold] - PlayerCompensation.SendMailByKey("PaimaiMail5", [playerID], [], paramList, gold=givePlayerGold, + paramList = [itemID, itemID, bidderPrice, taxRate, givePlayerGold] + PlayerCompensation.SendMailByKey("PaimaiMail7", [playerID], [], paramList, gold=givePlayerGold, detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionGain) + + else: + GameWorld.Log("系统拍品成交: itemGUID=%s,itemID=%s" % (itemGUID, itemID)) AddAuctionRecord(auctionItem, AuctionRecordResult_SellOK) - ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID) - if ipyData and ipyData.GetNeedWorldNotify(): - PlayerControl.WorldNotify(0, "Paimai6", [auctionItem.BidderName, bidderID, auctionItem.AuctionType, bidderPrice, itemID]) + #策划需求屏蔽掉成交广播 + #ipyData = IpyGameDataPY.GetIpyGameData("AuctionItem", itemID) + #if ipyData and ipyData.GetNeedWorldNotify(): + # PlayerControl.WorldNotify(0, "Paimai6", [auctionItem.BidderName, bidderID, auctionItem.AuctionType, bidderPrice, itemID]) else: # 仙盟拍品回收 if familyID: endType = "Recycle" AddAuctionRecord(auctionItem, AuctionRecordResult_Recycle) # 个人拍品流拍,物品返还 - else: + elif playerID: endType = "Return" # 流拍返还物品邮件 paramList = [] detail = {"ItemGUID":itemGUID} - addItemList = [{"ItemID":itemID, "Count":itemCount, "IsAuctionItem":False, "UserData":auctionItem.UserData}] + addItemList = [{"ItemID":itemID, "Count":itemCount, "IsAuctionItem":True, "UserData":auctionItem.UserData}] PlayerCompensation.SendMailByKey("PaimaiMail4", [playerID], addItemList, paramList, detail=detail) AddAuctionRecord(auctionItem, AuctionRecordResult_SellFail) + else: + endType = "SystemDelete" + GameWorld.Log("系统拍品流拍: itemGUID=%s,itemID=%s" % (itemGUID, itemID)) drDict = {"AuctionItemInfo":__GetAuctionItemDRDict(auctionItem), "EndType":endType, "EndEvent":endEvent} DR_AuctionHouse(None, "EndAuctionItem", drDict) @@ -537,6 +850,9 @@ if auctionItem in familyItemList: familyItemList.remove(auctionItem) + if auctionItem in auctionItemMgr.sysBuyoutItemByTimeList: + auctionItemMgr.sysBuyoutItemByTimeList.remove(auctionItem) + for nowBiddingItemList in auctionItemMgr.nowBiddingAuctionItemDict.values(): if auctionItem in nowBiddingItemList: nowBiddingItemList.remove(auctionItem) @@ -660,8 +976,9 @@ notifyAddItemList = [] # 新增拍品通知 [[itemGUID, itemID, playerID], ...] notifyFamilyAddItemDict = {} # 新增仙盟拍品通知 {familyID:[auctionItem, ...], ...} for playerID, familyID, familyPlayerIDList, itemData in addAuctionItemList: - if not playerID and not familyID: - continue + #系统拍品玩家ID、仙盟ID都为0,可上架,这里不再限制 + #if not playerID and not familyID: + # continue auctionItem = __DoAddAuctionItem(curPlayer, playerID, familyID, familyPlayerIDList, itemData) if not auctionItem: @@ -710,7 +1027,9 @@ auctionItem.UserDataLen = len(auctionItem.UserData) auctionItem.FamilyPlayerIDInfo = str(familyPlayerIDList) auctionItem.FamilyPlayerIDLen = len(auctionItem.FamilyPlayerIDInfo) - + auctionItem.AuctionType = AuctionType_Family if familyID else AuctionType_World + GameWorld.Log("上架拍品: playerID=%s,familyID=%s,itemID=%s,auctionType=%s" % (playerID, familyID, itemID, auctionItem.AuctionType)) + if not __InitAuctionItemAttrEx(auctionItem): return @@ -719,12 +1038,10 @@ auctionItemMgr.allAuctionItemByEndTimeList.append(auctionItem) if familyID: - auctionItem.AuctionType = AuctionType_Family familyItemList = auctionItemMgr.familyAuctionItemDict.get(familyID, []) familyItemList.append(auctionItem) auctionItemMgr.familyAuctionItemDict[familyID] = familyItemList else: - auctionItem.AuctionType = AuctionType_World auctionItemMgr.worldAuctionItemList.append(auctionItem) # 添加进我的拍卖 @@ -927,6 +1244,10 @@ GameWorld.DebugLog("玩家竞价拍品: itemGUID=%s,itemID=%s,isBuyout=%s,lastBidderID=%s,lastBidderPrice=%s,bidderIDInfo=%s" % (itemGUID, itemID, isBuyout, lastBidderID, lastBidderPrice, auctionItem.BidderIDInfo), playerID) + if auctionItem in auctionItemMgr.sysBuyoutItemByTimeList: + auctionItemMgr.sysBuyoutItemByTimeList.remove(auctionItem) + #GameWorld.DebugLog("拍品有人竞价了,移除系统一口价拍品列表!") + if isBuyout: __EndAuctionItem([auctionItem], "Buyout") else: @@ -1002,9 +1323,12 @@ for i, auctionItem in enumerate(allAuctionItemByEndTimeList): GameWorld.DebugLog(" i=%s, %s" % (i, __GetAuctionItemDRDict(auctionItem))) - GameWorld.DebugLog("AllDict总拍品数: =%s" % len(auctionItemMgr.allAuctionItemDict)) + GameWorld.DebugLog("AllDict总拍品数: %s" % len(auctionItemMgr.allAuctionItemDict)) - GameWorld.DebugLog("全服拍品个数: =%s" % len(auctionItemMgr.worldAuctionItemList)) + GameWorld.DebugLog("全服拍品个数: %s" % len(auctionItemMgr.worldAuctionItemList)) + + GameWorld.DebugLog("系统一口价拍品个数: %s" % len(auctionItemMgr.sysBuyoutItemByTimeList)) + for familyID, familyItemList in auctionItemMgr.familyAuctionItemDict.items(): GameWorld.DebugLog("仙盟拍品个数: familyID=%s, %s" % (familyID, len(familyItemList))) @@ -1393,3 +1717,12 @@ GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AddFamilyAuctionItem, [mapID, familyAuctionItemDict]) return +def DoAddSystemAuctionItem(sysAuctionItemList): + ''' 上架系统拍品 + @param sysAuctionItemList: [物品ID, [阶,颜色,[部位, ...],是否套装,星级,[可选参数职业, ...]], ...] + ''' + mapID = ChConfig.Def_FBMapID_MainCity + GameWorld.Log("发送地图上架系统拍品: mapID=%s, %s" % (mapID, sysAuctionItemList)) + GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_AddSystemAuctionItem, [mapID, sysAuctionItemList]) + return + -- Gitblit v1.8.0