| | |
| | | AuctionRecordResult_BidOK, # 竞价成功
|
| | | AuctionRecordResult_BidFail, # 竞价失败
|
| | | AuctionRecordResult_MoveToWorld, # 仙盟拍品转移到全服拍品
|
| | | ) = range(6)
|
| | | AuctionRecordResult_Unsell, # 下架
|
| | | ) = range(7)
|
| | |
|
| | | # 当前拍品归类 0-全服拍品 1-仙盟私有拍品
|
| | | AuctionType_World = 0
|
| | |
| | |
|
| | | 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
|
| | |
|
| | | ##-------------------------------------------------------------------------------------------------
|
| | |
| | | GameWorld.Log("=============================================================")
|
| | | return AuctionSystemItem[1]
|
| | |
|
| | | def OnAuctionItemMinuteProcess():
|
| | | def OnAuctionItemMinuteProcess(tick):
|
| | | ## 拍卖行拍品定时处理,每整分钟触发一次
|
| | |
|
| | | # 这里时间需精确到分钟,不然后面的比较会匹配不到
|
| | |
| | | curDateTime.hour, curDateTime.minute), ChConfig.TYPE_Time_Format)
|
| | |
|
| | | randMailKey = ""
|
| | | sysAuctionItemList = []
|
| | | addItemTick = tick
|
| | | sysAuctionItemList = IpyGameDataPY.GetConfigEx("SysWaitAuctionItemList") # 系统等待上架的拍品列表
|
| | | if not sysAuctionItemList:
|
| | | sysAuctionItemList = []
|
| | | addSystemAuctionItemInfo = __GetAuctionSystemItemInfo()
|
| | | for cfgID, ipyData, addAuctionItemDatetimeList in addSystemAuctionItemInfo:
|
| | | if curDateTime not in addAuctionItemDatetimeList:
|
| | |
| | | #cfgID = ipyData.GetCfgID()
|
| | | addCountWeightList = ipyData.GetItemCountWeightList()
|
| | | auctionItemWeightList = ipyData.GetAuctionItemWeightList()
|
| | | randSecondRange = ipyData.GetAddRandSecondRange()
|
| | |
|
| | | addCount = GameWorld.GetResultByWeightList(addCountWeightList)
|
| | | addSysItemList = []
|
| | | GameWorld.Log("增加等待上架的系统拍品信息: cfgID=%s,addCount=%s,addItemTick=%s" % (cfgID, addCount, addItemTick))
|
| | | 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
|
| | | |
| | | randSeconds = 0
|
| | | if len(randSecondRange) == 2:
|
| | | randSeconds = random.randint(randSecondRange[0], randSecondRange[1])
|
| | | elif len(randSecondRange) == 1:
|
| | | randSeconds = randSecondRange[0]
|
| | | addItemTick = addItemTick + randSeconds * 1000
|
| | | sysAuctionItemList.append([addItemTick, itemInfo])
|
| | | GameWorld.Log(" 增加等待上架的系统拍品: randSeconds=%s,addItemTick=%s,itemInfo=%s" % (randSeconds, addItemTick, itemInfo))
|
| | | |
| | | randMailKeyList = ipyData.GetRandMailKeyList()
|
| | | if randMailKeyList:
|
| | | randMailKey = random.choice(randMailKeyList)
|
| | |
|
| | | IpyGameDataPY.SetConfigEx("SysWaitAuctionItemList", sysAuctionItemList)
|
| | | #GameWorld.DebugLog("等待系统上架的拍品列表: %s" % sysAuctionItemList)
|
| | | |
| | | # 随机邮件通知
|
| | | if randMailKey:
|
| | | playerIDList = []
|
| | |
| | | continue
|
| | | playerIDList.append(player.GetPlayerID())
|
| | | PlayerCompensation.SendMailByKey(randMailKey, playerIDList, addItemList)
|
| | | |
| | | return
|
| | |
|
| | | def __DoSysWaitAddAuctionItem(tick):
|
| | | sysAuctionItemList = IpyGameDataPY.GetConfigEx("SysWaitAuctionItemList") # 系统等待上架的拍品列表
|
| | | if not sysAuctionItemList:
|
| | | return
|
| | | |
| | | doCount = len(sysAuctionItemList)
|
| | | while doCount > 0 and sysAuctionItemList:
|
| | | doCount -= 1
|
| | | addItemTick, itemInfo = sysAuctionItemList[0]
|
| | | if tick < addItemTick:
|
| | | #GameWorld.DebugLog("未到系统等待上架的拍品tick,不处理! tick=%s,sysAuctionItemList=%s" % (tick, sysAuctionItemList))
|
| | | break
|
| | | sysAuctionItemList.pop(0)
|
| | | GameWorld.DebugLog("系统等待上架的拍品tick已到,可上架! tick=%s >= addItemTick=%s,itemInfo=%s,sysAuctionItemList=%s" % (tick, addItemTick, itemInfo, sysAuctionItemList))
|
| | | DoAddSystemAuctionItem([itemInfo])
|
| | |
|
| | | if sysAuctionItemList:
|
| | | DoAddSystemAuctionItem(sysAuctionItemList) |
| | | return
|
| | |
|
| | | def OnAuctionItemTimeProcess(curTime, tick):
|
| | | ## 拍卖行拍品定时处理,每秒触发一次
|
| | |
|
| | | __DoSysBuyoutItemByTime(curTime)
|
| | | |
| | | __DoSysWaitAddAuctionItem(tick)
|
| | |
|
| | | allAuctionItemByEndTimeList = PyDataManager.GetAuctionItemManager().allAuctionItemByEndTimeList
|
| | | if not allAuctionItemByEndTimeList:
|
| | |
| | | openJobList = IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1)
|
| | | for job in openJobList:
|
| | | jobPlayerCount = len(PyGameData.g_onedayJobPlayerLoginoffTimeDict.get(job, {}))
|
| | | jobPlayerCount = max(1, jobPlayerCount) # 人数默认至少1个
|
| | | totalPlayerCount += jobPlayerCount
|
| | | jobWeightList.append([jobPlayerCount, job])
|
| | | GameWorld.DebugLog("职业人数: job=%s,count=%s" % (job, jobPlayerCount))
|
| | |
| | | # 仙盟拍品收益邮件
|
| | | detail = {"ItemGUID":itemGUID, "ItemID":itemID, "Count":itemCount, "BidderPrice":bidderPrice, "FamilyPlayerIDList":familyPlayerIDList}
|
| | | paramList = [itemID, itemID, bidderPrice, taxRate, giveGoldAverage, personMaxRate]
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail8", familyPlayerIDList, [], paramList, gold=giveGoldAverage, |
| | | PlayerCompensation.SendMailByKey("PaimaiMail8", familyPlayerIDList, [], paramList, goldPaper=giveGoldAverage, |
| | | detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionGain)
|
| | | else:
|
| | | GameWorld.ErrLog("仙盟拍品没有人获得收益!familyID=%s,itemID=%s,itemGUID=%s" % (familyID, itemID, itemGUID))
|
| | |
| | | # 个人拍卖收益邮件
|
| | | detail = {"ItemGUID":itemGUID, "ItemID":itemID, "Count":itemCount, "BidderPrice":bidderPrice}
|
| | | paramList = [itemID, itemID, bidderPrice, taxRate, givePlayerGold]
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail7", [playerID], [], paramList, gold=givePlayerGold, |
| | | PlayerCompensation.SendMailByKey("PaimaiMail7", [playerID], [], paramList, goldPaper=givePlayerGold, |
| | | detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionGain)
|
| | |
|
| | | else:
|
| | |
| | | elif playerID:
|
| | | endType = "Return"
|
| | |
|
| | | # 流拍返还物品邮件
|
| | | # 返还物品邮件
|
| | | paramList = []
|
| | | detail = {"ItemGUID":itemGUID}
|
| | | addItemList = [{"ItemID":itemID, "Count":itemCount, "IsAuctionItem":True, "UserData":auctionItem.UserData}]
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail4", [playerID], addItemList, paramList, detail=detail)
|
| | | |
| | | AddAuctionRecord(auctionItem, AuctionRecordResult_SellFail)
|
| | | # 下架
|
| | | if endEvent == "Unsell":
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail9", [playerID], addItemList, paramList, detail=detail)
|
| | | AddAuctionRecord(auctionItem, AuctionRecordResult_Unsell)
|
| | | else:
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail4", [playerID], addItemList, paramList, detail=detail)
|
| | | AddAuctionRecord(auctionItem, AuctionRecordResult_SellFail)
|
| | | else:
|
| | | endType = "SystemDelete"
|
| | | GameWorld.Log("系统拍品流拍: itemGUID=%s,itemID=%s" % (itemGUID, itemID))
|
| | |
| | |
|
| | | return
|
| | |
|
| | | # 下架拍品
|
| | | elif queryType == "UnsellAuctionItem":
|
| | | itemGUID = queryData[0]
|
| | | __DoUnsellAuctionItem(curPlayer, itemGUID)
|
| | | return
|
| | | |
| | | elif queryType == "ClearAuctionItem":
|
| | | __DoGMClearAuctionItem(curPlayer)
|
| | | return
|
| | |
| | | NetPackCommon.SendFakePack(player, infoPack)
|
| | | return
|
| | |
|
| | | def __DoUnsellAuctionItem(curPlayer, itemGUID):
|
| | | ## 下架拍品
|
| | | auctionItem = GetAuctionItem(itemGUID)
|
| | | if not auctionItem:
|
| | | # 拍品不存在
|
| | | PlayerControl.NotifyCode(curPlayer, "Paimai3")
|
| | | return
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | itemID = auctionItem.ItemID
|
| | | if auctionItem.FamilyID:
|
| | | GameWorld.ErrLog("仙盟拍品无法下架!itemGUID=%s,itemID=%s,itemFamilyID=%s" |
| | | % (itemGUID, itemID, auctionItem.FamilyID), playerID)
|
| | | return
|
| | | if auctionItem.PlayerID != playerID:
|
| | | GameWorld.ErrLog("不是玩家自己的拍品无法下架!itemGUID=%s,itemID=%s,itemPlayerID=%s" |
| | | % (itemGUID, itemID, auctionItem.PlayerID), playerID)
|
| | | return
|
| | | if auctionItem.BidderPrice:
|
| | | # 竞价中的拍品不能下架
|
| | | PlayerControl.NotifyCode(curPlayer, "Paimai9")
|
| | | return
|
| | | |
| | | __EndAuctionItem([auctionItem], "Unsell")
|
| | | return
|
| | |
|
| | | def __DoPlayerBidAuctionItem(curPlayer, itemGUID, biddingPrice, tick, isOnlyCheck):
|
| | | ''' 玩家竞价物品
|
| | | @param curPlayer: 竞价的玩家
|
| | |
| | | if isBuyout:
|
| | | # 竞拍失败,仅通知
|
| | | paramList = [itemID, itemID, lastBidderPrice]
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail2", [lastBidderID], [], paramList, gold=lastBidderPrice, |
| | | PlayerCompensation.SendMailByKey("PaimaiMail2", [lastBidderID], [], paramList, goldPaper=lastBidderPrice, |
| | | detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionBidReturn)
|
| | | else:
|
| | | # 竞拍失败,可继续竞价邮件
|
| | | paramList = [itemID, itemID, lastBidderPrice, itemGUID]
|
| | | PlayerCompensation.SendMailByKey("PaimaiMail1", [lastBidderID], [], paramList, gold=lastBidderPrice, |
| | | PlayerCompensation.SendMailByKey("PaimaiMail1", [lastBidderID], [], paramList, goldPaper=lastBidderPrice, |
| | | detail=detail, moneySource=ChConfig.Def_GiveMoney_AuctionBidReturn)
|
| | | AddAuctionRecord(auctionItem, AuctionRecordResult_BidFail)
|
| | |
|