| | |
| | | import EventReport
|
| | | import ChConfig
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | |
|
| | | import time
|
| | |
|
| | | ##A5 3B 请求领取补偿#tagCMRequestCompensation
|
| | | # @param index, clientPack, tick
|
| | |
| | | GameWorld.DebugLog(" PlayerID %s no found "%curPackData.PlayerID)
|
| | | return
|
| | |
|
| | | hasAuctionItem = False
|
| | | needPackSpaceDict = {}
|
| | | isPackSpaceEnough = True
|
| | | # 先汇总物品所属背包
|
| | |
| | | if not curItemData:
|
| | | continue
|
| | |
|
| | | isAuctionItem = curPackItem.IsBind
|
| | | packType = ChConfig.GetItemPackType(curItemData.GetType())
|
| | | needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count)
|
| | | needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count, isAuctionItem)
|
| | | needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace
|
| | | if isAuctionItem:
|
| | | hasAuctionItem = True
|
| | |
|
| | | GameWorld.DebugLog(" needPackSpaceDict=%s" % str(needPackSpaceDict))
|
| | | for packType, needSpace in needPackSpaceDict.items():
|
| | |
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_676165", [packType])
|
| | | isPackSpaceEnough = False
|
| | | break
|
| | | |
| | | 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))
|
| | |
|
| | | #背包空间不足
|
| | | if not isPackSpaceEnough:
|
| | |
| | | for i in xrange(curPackData.Count):
|
| | | curPackItem = curPackData.Items[i]
|
| | | itemID = curPackItem.ItemID
|
| | | isAuctionItem = curPackItem.IsBind and not auctionItemTimeout
|
| | | if ItemControler.GetAppointItemRealID(itemID):
|
| | | #定制物品
|
| | | ItemControler.GivePlayerItem(curPlayer, itemID, curPackItem.Count, curPackItem.IsBind, [IPY_GameWorld.rptItem], |
| | | False, showSysInfo=False, event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}])
|
| | | continue
|
| | | |
| | | curCreateItem = ItemCommon.CreateSingleItem(itemID, curPackItem.Count, curPackItem.IsBind)
|
| | | curCreateItem = ItemControler.GetItemByData(ItemControler.GetAppointItemDictData(itemID, isAuctionItem))
|
| | | else:
|
| | | curCreateItem = ItemCommon.CreateSingleItem(itemID, curPackItem.Count, isAuctionItem)
|
| | | if not curCreateItem:
|
| | | GameWorld.ErrLog("OnGMRequestCompensationResult CreateSingleItem %s Err "%itemID)
|
| | | continue
|
| | |
| | | #设置UserData
|
| | | UserData = "%s"%UserDataDict
|
| | | curCreateItem.SetUserData(UserData, len(UserData))
|
| | | |
| | | if isAuctionItem and auctionItemCreateTime:
|
| | | curCreateItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, auctionItemCreateTime)
|
| | | |
| | | ItemCommon.MakeEquipGS(curCreateItem)
|
| | | #放入玩家背包
|
| | | ItemControler.PlayerItemControler(curPlayer).PutInItem(IPY_GameWorld.rptItem, curCreateItem,
|
| | | event=[ChConfig.ItemGive_Mail, False, {"MailGUID":curPackData.GUID}])
|
| | | |
| | | moneySource = curPackData.MoneySource + ChConfig.Def_GiveMoney_Unknown # 存值时为byte类型,使用时需还原回来
|
| | | if curPackData.Gold != 0:
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, ChConfig.Def_GiveMoney_Mail)
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, curPackData.Gold, moneySource)
|
| | |
|
| | | if curPackData.GoldPaper != 0:
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, ChConfig.Def_GiveMoney_Mail)
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, curPackData.GoldPaper, moneySource)
|
| | |
|
| | | if curPackData.Silver != 0:
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, ChConfig.Def_GiveMoney_Mail)
|
| | | PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, curPackData.Silver, moneySource)
|
| | |
|
| | | #发送相关数据 回报补偿发放结果
|
| | | sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()
|