#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#  
 | 
#  
 | 
##@package PlayerCompensationTube.py  
 | 
#  
 | 
# @todo:GM²¹³¥¹ÜÀí µØÍ¼´¦Àí  
 | 
#  
 | 
# @author xmnathan  
 | 
# @date 2010-01-01 10:00  
 | 
# @version 1.4  
 | 
# @note:  
 | 
# @change: "2014-09-29 13:00" xmnathan GM²¹³¥¹ÜÀí  
 | 
# @change: "2014-11-05 10:50" xmnathan Áìȡʧ°ÜÒ²»Ø°üGameServer£¬ÓÃÓÚÖØÖÃÁìȡ״̬  
 | 
# @change: "2016-07-25 22:00" hxp Ôö¼ÓÁìÈ¡Óʼþʼþ»ã±¨  
 | 
# @change: "2017-05-04 12:00" hxp Ôö¼Ó·ûÓ¡ÐéÄâ±³°üÖ§³Ö  
 | 
#------------------------------------------------------------------------------   
 | 
#"""Version = 2017-05-04 12:00"""  
 | 
#------------------------------------------------------------------------------   
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import ShareDefine  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import ItemCommon  
 | 
import ItemControler  
 | 
import ChMapToGamePyPack  
 | 
import ReadChConfig  
 | 
import EventReport  
 | 
import ChConfig  
 | 
import PlayerControl  
 | 
import IpyGameDataPY  
 | 
  
 | 
import time  
 | 
  
 | 
##A5 3B ÇëÇóÁìÈ¡²¹³¥#tagCMRequestCompensation  
 | 
#  @param index, clientPack, tick  
 | 
#  @return None  
 | 
def OnCMRequestCompensation(index, clientPack, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    if not curPlayer:  
 | 
        return  
 | 
    GameWorld.DebugLog("#OnCMRequestCompensation in, PlayerID %s GUID %s"%(curPlayer.GetPlayerID(), clientPack.GUID))  
 | 
    #±³°üûλÖà  
 | 
    itemPackSpace = ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)  
 | 
  
 | 
    #·¢ËÍÏà¹ØÊý¾Ý  
 | 
    sendPack = ChMapToGamePyPack.tagMGRequestCompensation()  
 | 
    sendPack.GUID = clientPack.GUID  
 | 
    sendPack.PlayerID = curPlayer.GetPlayerID()  
 | 
    sendPack.PackSpaceCount = itemPackSpace  
 | 
    NetPackCommon.SendPyPackToGameServer(sendPack)  
 | 
    return  
 | 
  
 | 
  
 | 
##03 02 Íæ¼ÒÁìÈ¡²¹³¥½á¹û#tagGMRequestCompensationResult  
 | 
#  @param curPackData, tick  
 | 
#  @return None  
 | 
def OnGMRequestCompensationResult(curPackData, tick):  
 | 
    GameWorld.DebugLog("OnGMRequestCompensationResult in")  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curPackData.PlayerID)  
 | 
    if not curPlayer:  
 | 
        #·¢ËÍÏà¹ØÊý¾Ý  »Ø±¨²¹³¥·¢·Å½á¹û  
 | 
        sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()  
 | 
        sendPack.GUID = curPackData.GUID  
 | 
        sendPack.PlayerID = curPackData.PlayerID  
 | 
        sendPack.CompensationType = curPackData.CompensationType  
 | 
        sendPack.Result = 0  
 | 
        NetPackCommon.SendPyPackToGameServer(sendPack)  
 | 
        GameWorld.DebugLog("    PlayerID %s no found "%curPackData.PlayerID)  
 | 
        return  
 | 
      
 | 
    hasAuctionItem = False  
 | 
    needPackSpaceDict = {}  
 | 
    isPackSpaceEnough = True  
 | 
    # ÏÈ»ã×ÜÎïÆ·ËùÊô±³°ü  
 | 
    for i in xrange(curPackData.Count):  
 | 
        curPackItem = curPackData.Items[i]  
 | 
        itemID = curPackItem.ItemID  
 | 
        curItemData = GameWorld.GetGameData().GetItemByTypeID(itemID)  
 | 
        if not curItemData:  
 | 
            continue  
 | 
          
 | 
        isAuctionItem = curPackItem.IsBind  
 | 
        packType = ChConfig.GetItemPackType(curItemData.GetType())  
 | 
        needSpace = ItemControler.GetItemNeedPackCount(packType, curItemData, curPackItem.Count, isAuctionItem)  
 | 
        needPackSpaceDict[packType] = needPackSpaceDict.get(packType, 0) + needSpace  
 | 
        if isAuctionItem:  
 | 
            hasAuctionItem = True  
 | 
              
 | 
    GameWorld.DebugLog("    hasAuctionItem=%s,needPackSpaceDict=%s" % (hasAuctionItem, needPackSpaceDict))  
 | 
    for packType, needSpace in needPackSpaceDict.items():  
 | 
        if needSpace > ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace):  
 | 
            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:  
 | 
        GameWorld.DebugLog("    itemPack no space")  
 | 
        sendMCPack = ChPyNetSendPack.tagMCGiveCompensationResult()  
 | 
        sendMCPack.GUID = curPackData.GUID  
 | 
        sendMCPack.Result = 0  
 | 
        NetPackCommon.SendFakePack(curPlayer, sendMCPack)  
 | 
        #·¢ËÍÏà¹ØÊý¾Ý  »Ø±¨²¹³¥·¢·Å½á¹û  
 | 
        sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()  
 | 
        sendPack.GUID = curPackData.GUID  
 | 
        sendPack.PlayerID = curPackData.PlayerID  
 | 
        sendPack.CompensationType = curPackData.CompensationType  
 | 
        sendPack.Result = 0  
 | 
        NetPackCommon.SendPyPackToGameServer(sendPack)  
 | 
        return  
 | 
  
 | 
    for i in xrange(curPackData.Count):  
 | 
        curPackItem = curPackData.Items[i]  
 | 
        itemID = curPackItem.ItemID  
 | 
        isAuctionItem = curPackItem.IsBind and not auctionItemTimeout  
 | 
        if ItemControler.GetAppointItemRealID(itemID):  
 | 
            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°üº¬ÁË×·¼ÓÊôÐÔ²»ÍêÕû£¬ÕâÀïÐèÒª²¹Æë  
 | 
        userDataCreateTime = 0  
 | 
        if curPackItem.UserDataLen:   
 | 
            UserDataDict = eval(curPackItem.UserData)  
 | 
            #ÉèÖÃUserData  
 | 
            UserData = "%s"%UserDataDict  
 | 
            curCreateItem.SetUserData(UserData, len(UserData))  
 | 
            userDataCreateTime = curCreateItem.GetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime)  
 | 
              
 | 
        if isAuctionItem and auctionItemCreateTime and not userDataCreateTime:  
 | 
            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, moneySource)  
 | 
      
 | 
    if curPackData.GoldPaper != 0:  
 | 
        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, moneySource)  
 | 
      
 | 
    #·¢ËÍÏà¹ØÊý¾Ý  »Ø±¨²¹³¥·¢·Å½á¹û  
 | 
    sendPack = ChMapToGamePyPack.tagMGGiveCompensationResult()  
 | 
    sendPack.GUID = curPackData.GUID  
 | 
    sendPack.PlayerID = curPackData.PlayerID  
 | 
    sendPack.CompensationType = curPackData.CompensationType  
 | 
    sendPack.Result = 1  
 | 
    NetPackCommon.SendPyPackToGameServer(sendPack)  
 | 
    #¸æË߿ͻ§¶Ë²¹³¥ÒÑÁìÈ¡  
 | 
    sendMCPack = ChPyNetSendPack.tagMCGiveCompensationResult()  
 | 
    sendMCPack.GUID = curPackData.GUID  
 | 
    sendMCPack.Result = 1  
 | 
    NetPackCommon.SendFakePack(curPlayer, sendMCPack)  
 | 
      
 | 
    #===========================================================================  
 | 
    # #ÁìÈ¡²¹³¥Ê¼þ¼Ç¼  
 | 
    # Text = curPackData.Text  
 | 
    # #%s<$_$>%s  
 | 
    # sender, title, content = Text.split("<$_$>")  
 | 
    # #<MailTemplate>Ä£°å±àºÅ</MailTemplate>[%s,%s]  
 | 
    # if "</MailTemplate>" in content:  
 | 
    #    mailContentList = content.split("</MailTemplate>")  
 | 
    #    mailTemplateNO = GameWorld.ToIntDef(mailContentList[0][14:], None)  
 | 
    #    EventMailInfo = ReadChConfig.GetEvalChConfig("EventMailInfo")  
 | 
    #    if mailTemplateNO not in EventMailInfo:  
 | 
    #        return  
 | 
    #    title, content = EventMailInfo[mailTemplateNO]  
 | 
    #      
 | 
    #    mailParamStr = mailContentList[1]  
 | 
    #    mailParamStr = mailParamStr.replace(" ", "")  
 | 
    #    if mailParamStr.startswith("[") and mailParamStr.endswith("]") and len(mailParamStr) > 2:  
 | 
    #        content = content % tuple(eval(mailParamStr))  
 | 
    #      
 | 
    # comments = "%s: %s, %s; %s" % (title, curPackData.GUID, eventItemInfo, content)  
 | 
    # EventReport.WriteEvent_custom_events(curPlayer, EventReport.Def_Custom_Events_GetMail, comments)  
 | 
    #===========================================================================  
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
  
 |