#!/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, isBind, [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