hxp
2021-02-20 71a5b8c236d7538053a3a893adccaa0d59798521
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/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