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