#!/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