| #!/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 IPY_GameWorld  | 
| import GameWorld  | 
| import ChConfig  | 
| import IpyGameDataPY  | 
| import ItemCommon  | 
| import PlayerControl  | 
| import ItemControler  | 
| import ChPyNetSendPack  | 
| 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):  | 
|     Sync_FreeGoodsInfo(curPlayer)  | 
|     return  | 
|   | 
| ## ¹ýÌì  | 
| #  @param curPlayer  | 
| #  @return None  | 
| def OnDay(curPlayer):  | 
|     '''µ±ÇÀ¹ºµ¹¼ÆÊ±½áÊø£¬Íæ¼ÒÓпÉÁìÈ¡·µ»¹µÄÏÉÓñ£¬ÇÒûÓÐÔÚ¿ÉÁìÈ¡µ¹¼ÆÊ±ÖеÄÏÉÓñʱ£¬  | 
|         ÈôÍæ¼ÒÔÚ×îºóÒ»¸ö¿ÉÁìÈ¡·µ»¹ÏÉÓñµ¹¼ÆÊ±½áÊøµÄµ±ÌìδÁìÈ¡ÏÉÓñ£¬ÔòÔÚ¸ôÌìÁ賿5£º00°ïÆä°ÑËùÓÐδÁìÈ¡ÏÉÓñÁìȡͨ¹ýÓʼþ·¢·Å  | 
|     '''  | 
|     openTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FreeGoodsOpenTime)  | 
|     curTimeNum = int(time.time())  | 
|     if curTimeNum - openTime <= IpyGameDataPY.GetFuncCfg('FreeGoodsOpenTime'):  | 
|         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  | 
|         if curTimeNum - goodsState - ipyData.GetReturnTime() < 24*3600:  | 
|             giveMoney = 0  | 
|             giveGoodsIDList = []  | 
|             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:  | 
|         return  | 
|     if goodsState != 0:  | 
|         #ÁìÈ¡·µ»¹  | 
|           | 
|         if curTimeNum - goodsState < ipyData.GetReturnTime():  | 
|             GameWorld.DebugLog(' ¼«Æ·°×Äàδµ½·µ»¹Ê±¼ä£¡freeGoodsID=%s, passTime=%s' % (freeGoodsID, curTimeNum - goodsState), 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()), [])  | 
|         # ¼ì²é±³°ü  | 
|         needSpace = len(awardItemList)  | 
|         packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  | 
|         if needSpace > packSpace:  | 
|             PlayerControl.SendMailByKey('WhiteTakeBagFull', [curPlayer.GetID()], awardItemList, [freeGoodsID])  | 
|         else:  | 
|             # ¸øÎïÆ·  | 
|             for itemID, itemCount, isBind in awardItemList:  | 
|                 ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])  | 
|           | 
|     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  |