hch
2019-05-25 dbf4ab83f90d9119141d5a80bebe25fedec4384f
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCompensationTube.py
@@ -29,6 +29,9 @@
import EventReport
import ChConfig
import PlayerControl
import IpyGameDataPY
import time
##A5 3B 请求领取补偿#tagCMRequestCompensation
#  @param index, clientPack, tick
@@ -68,6 +71,7 @@
        GameWorld.DebugLog("    PlayerID %s no found "%curPackData.PlayerID)
        return
    
    hasAuctionItem = False
    needPackSpaceDict = {}
    isPackSpaceEnough = True
    # 先汇总物品所属背包
@@ -78,9 +82,12 @@
        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():
@@ -88,6 +95,28 @@
            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:
@@ -108,13 +137,11 @@
    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
@@ -125,19 +152,23 @@
            #设置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()