#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.PlayerFreeGoods  
 | 
#  
 | 
# @todo:¼«Æ·°×Äà  
 | 
# @author xdh  
 | 
# @date 2018-07-10 16:50  
 | 
# @version 1.0  
 | 
#  
 | 
#  
 | 
# ÏêϸÃèÊö: ¼«Æ·°×Äà  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2018-07-10 16:50"""  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import IPY_GameWorld  
 | 
import IpyGameDataPY  
 | 
import ChPyNetSendPack  
 | 
import PlayerControl  
 | 
import ItemControler  
 | 
import NetPackCommon  
 | 
  
 | 
import time  
 | 
  
 | 
  
 | 
  
 | 
def DoFreeGoodsOpen(curPlayer):  
 | 
    ## ¼«Æ·°×ÄÿªÆô  ¼Ç¼¿ªÆôʱ¼ä  
 | 
      
 | 
    FreeGoodsOpenTime = IpyGameDataPY.GetFuncCfg("FreeGoodsOpenTime")  
 | 
    if not FreeGoodsOpenTime:  
 | 
        return  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FreeGoodsOpenTime, int(time.time()))  
 | 
      
 | 
    Sync_FreeGoodsInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
## µÇ½֪ͨ  
 | 
#  @param curPlayer  
 | 
#  @return None  
 | 
def OnLogin(curPlayer):  
 | 
    openTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)  
 | 
    if not openTime:  
 | 
        return  
 | 
    Sync_FreeGoodsInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
## ¹ýÌì  
 | 
#  @param curPlayer  
 | 
#  @return None  
 | 
def OnDay(curPlayer):  
 | 
    '''µ±ÇÀ¹ºµ¹¼ÆÊ±½áÊø£¬Íæ¼ÒÓпÉÁìÈ¡·µ»¹µÄÏÉÓñ£¬ÇÒûÓÐÔÚ¿ÉÁìÈ¡µ¹¼ÆÊ±ÖеÄÏÉÓñʱ£¬  
 | 
        ÈôÍæ¼ÒÔÚ×îºóÒ»¸ö¿ÉÁìÈ¡·µ»¹ÏÉÓñµ¹¼ÆÊ±½áÊøµÄµ±ÌìδÁìÈ¡ÏÉÓñ£¬ÔòÔÚ¸ôÌìÁ賿5£º00°ïÆä°ÑËùÓÐδÁìÈ¡ÏÉÓñÁìȡͨ¹ýÓʼþ·¢·Å  
 | 
    '''  
 | 
    openTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)  
 | 
    if not openTime:  
 | 
        return  
 | 
    curTimeNum = int(time.time())  
 | 
    if curTimeNum - openTime <= IpyGameDataPY.GetFuncCfg('FreeGoodsOpenTime'):  
 | 
        #GameWorld.DebugLog("¼«Æ·°×ÄùºÂòʱ¼äδµ½ÆÚ£¬²»´¦Àí!")  
 | 
        return  
 | 
    giveMoney = 0  
 | 
    giveGoodsIDList = []  
 | 
    for i in xrange(IpyGameDataPY.IPY_Data().GetFreeGoodsCount()):  
 | 
        ipyData = IpyGameDataPY.IPY_Data().GetFreeGoodsByIndex(i)  
 | 
        goodsID = ipyData.GetID()  
 | 
        goodsState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsBuyState % goodsID)  
 | 
        if goodsState in [0, 1]:  
 | 
            continue  
 | 
        buyTime = goodsState  
 | 
        passDays = GameWorld.GetDiff_Day(curTimeNum, buyTime)  
 | 
        if passDays <= ipyData.GetReturnDays():  
 | 
            giveMoney = 0  
 | 
            giveGoodsIDList = []  
 | 
            #GameWorld.DebugLog("    »¹Óа×Äý±ÀøÁ콱ʱ¼äδԤÆÚ£¬²»´¦Àí! goodsID=%s,passDays=%s" % (goodsID, passDays))  
 | 
            break  
 | 
        giveMoney += ipyData.GetNeedMoney()  
 | 
        giveGoodsIDList.append(goodsID)  
 | 
    if giveMoney:  
 | 
        GameWorld.DebugLog('    ¼«Æ·°×ÄÃÓʼþ·µ»¹ giveMoney=%s,giveGoodsIDList=%s' % (giveMoney, giveGoodsIDList), curPlayer.GetID())  
 | 
        for goodsID in giveGoodsIDList:  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FreeGoodsBuyState % goodsID, 1)  
 | 
        PlayerControl.SendMailByKey('WhiteTakeJade', [curPlayer.GetID()], [], [], giveMoney)  
 | 
          
 | 
        Sync_FreeGoodsInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
def OnGetFreeGoods(curPlayer, freeGoodsID):  
 | 
    #¹ºÂòorÁìÈ¡·µ»¹  
 | 
    openTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)  
 | 
    if not openTime:  
 | 
        GameWorld.DebugLog(' ¼«Æ·°×Äû먦Æô£¡', curPlayer.GetID())  
 | 
        return  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('FreeGoods', freeGoodsID)  
 | 
    if not ipyData:  
 | 
        return  
 | 
    curTimeNum = int(time.time())  
 | 
    goodsState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsBuyState % freeGoodsID)  
 | 
    addDataDict = {"freeGoodsID":freeGoodsID}  
 | 
    if goodsState == 1:  
 | 
        GameWorld.DebugLog(' ¼«Æ·°×ÄÃÒÑÁìÈ¡¸Ã½±Àø£¡', curPlayer.GetID())  
 | 
        return  
 | 
    if goodsState != 0:  
 | 
        #ÁìÈ¡·µ»¹  
 | 
        buyTime = goodsState  
 | 
        passDays = GameWorld.GetDiff_Day(curTimeNum, buyTime)  
 | 
        if passDays < ipyData.GetReturnDays():  
 | 
            GameWorld.DebugLog(' ¼«Æ·°×Äàδµ½·µ»¹Ê±¼ä£¡freeGoodsID=%s, buyTime=%s, passDays=%s < %s'   
 | 
                               % (freeGoodsID, GameWorld.ChangeTimeNumToStr(buyTime), passDays, ipyData.GetReturnDays()), curPlayer.GetID())  
 | 
            return  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FreeGoodsBuyState % freeGoodsID, 1)  
 | 
        returnMoney = ipyData.GetNeedMoney()  
 | 
          
 | 
        PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, returnMoney, ChConfig.Def_GiveMoney_FreeGoods, addDataDict)  
 | 
          
 | 
    else:  
 | 
        #¹ºÂò  
 | 
        if curTimeNum - openTime > IpyGameDataPY.GetFuncCfg('FreeGoodsOpenTime'):  
 | 
            GameWorld.DebugLog(' ¼«Æ·°×ÄûÒѹýÆÚ£¡', curPlayer.GetID())  
 | 
            return  
 | 
        needMoney = ipyData.GetNeedMoney()  
 | 
        if not PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, needMoney, ChConfig.Def_Cost_FreeGoods, addDataDict):  
 | 
            return  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FreeGoodsBuyState % freeGoodsID, curTimeNum)  
 | 
        #¸øÎïÆ·  
 | 
        awardItemDict = ipyData.GetAwardItem()  
 | 
        awardItemList = awardItemDict.get(str(curPlayer.GetJob()), [])  
 | 
        ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, "WhiteTakeBagFull", event=["FreeGoods", False, addDataDict])  
 | 
          
 | 
    Sync_FreeGoodsInfo(curPlayer, [freeGoodsID])  
 | 
    return  
 | 
  
 | 
def Sync_FreeGoodsInfo(curPlayer, freeGoodsIDList=[]):  
 | 
    #֪ͨ¼«Æ·°×ÄÃÐÅÏ¢  
 | 
    sendPack = ChPyNetSendPack.tagMCFreeGoodsInfo()  
 | 
    sendPack.Clear()  
 | 
    sendPack.OpenTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)  
 | 
    sendPack.FreeGoodsList = []  
 | 
    for i in xrange(IpyGameDataPY.IPY_Data().GetFreeGoodsCount()):  
 | 
        ipyData = IpyGameDataPY.IPY_Data().GetFreeGoodsByIndex(i)  
 | 
        goodsID = ipyData.GetID()  
 | 
        if freeGoodsIDList and goodsID not in freeGoodsIDList:  
 | 
            continue  
 | 
        goodsInfo = ChPyNetSendPack.tagMCFreeGoods()  
 | 
        goodsInfo.ID = goodsID  
 | 
        goodsInfo.BuyState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsBuyState % goodsID)  
 | 
        sendPack.FreeGoodsList.append(goodsInfo)  
 | 
      
 | 
    sendPack.Count = len(sendPack.FreeGoodsList)  
 | 
    NetPackCommon.SendFakePack(curPlayer, sendPack)  
 | 
    return  
 |