hxp
2019-09-09 ea99ae4d08b7475560dceb9b8fd9a370daab0cbb
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
#
##@package PlayerOnlinePrize
#
# @todo: ´´½Ç7ÌìÔÚÏß½±Àø
# @author xdh
# @date 2018-03-06 17:00
# @version 1.0
#
#---------------------------------------------------------------------
#"""Version = 2018-03-06 17:00"""
#---------------------------------------------------------------------
 
import ChPyNetSendPack
import ChConfig
import GameWorld
import ItemControler
import IPY_GameWorld
import ItemCommon
import NetPackCommon
import PlayerControl
import IpyGameDataPY
import PlayerTJG
 
import time
 
##ÁìÈ¡ÔÚÏß½±Àø
# @param None
# @return None
def GetOnlinePrize(index, clientPack, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    creatRoleDay = GameWorld.GetCreateRoleDays(curPlayer)#GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
    dayID = creatRoleDay
    prizeIndex = clientPack.Index
    if not __GetOnlineIsOpen(curPlayer):
        return
    ipyData = IpyGameDataPY.GetIpyGameData('OnlineAward', dayID)
    if not ipyData:
        return
    #ÏȾÀÕýÒ»´Îʱ¼ä
    onlineTime = GetOnlineTime(curPlayer)
    
    #ÒÑÁì
    awardInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlinePrizeNote % dayID)
    awardMark = pow(2, prizeIndex - 1)
    if awardInfo & awardMark:
        #ÒÑÁìÈ¡
        GameWorld.DebugLog("ÒÑÁìÈ¡½±Àø£¡dayID=%s,prizeIndex=%s" % (dayID, prizeIndex))
        return
    stageTimeList = ipyData.GetStageTime()
    
    if prizeIndex - 1 >= len(stageTimeList):
        return
    needTime = stageTimeList[prizeIndex - 1]
    if needTime * 60 > onlineTime:
        GameWorld.DebugLog("ÔÚÏßʱ¼ä²»×㣡dayID=%s,prizeIndex=%s,needTime=%s" % (dayID, prizeIndex, needTime))
        return
    
    awardDict = ipyData.GetReward()
    if str(prizeIndex) not in awardDict:
        return
    itemList = awardDict[str(prizeIndex)]
    
    # ¼ì²é±³°ü
    needSpace = len(itemList)
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
    if needSpace > packSpace:
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
        return
    
    
    # ¸øÎïÆ·
    for itemID, itemCount in itemList:
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])
    
   
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnlinePrizeNote % dayID, awardInfo | awardMark)
    
    #·¢°ü
    SendOnlinePrizeInfo(curPlayer)
    return
 
 
##²éѯÔÚÏß½±Àø
# @param None
# @return None
def QueryOnlinePrize(index, clientPack, tick):
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
#    # ¼ÆËãʱ³¤
#    CalcOnlineTime(curPlayer, tick, True)
    return
 
def GetOnlineTime(curPlayer):
    onlineTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DayOnlineTime)
    markTick = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlineStartTick)
    if not markTick:
        return onlineTime
    curTime = int(time.time())
    passTick = curTime - markTick
    if passTick <= 0:
        return onlineTime
    return onlineTime + passTick
 
##ÀëÏ߸üмǼÔÚÏßʱ³¤
# @param notify ÊÇ·ñ֪ͨ¿Í»§¶Ë
# @return None
def CalcOnlineTime(curPlayer):
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    onlineTime = GetOnlineTime(curPlayer)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DayOnlineTime, onlineTime)
    SetStartCalcOnlineTick(curPlayer, 0)
    return
 
def __GetOnlineIsOpen(curPlayer):
    dayCnt = IpyGameDataPY.IPY_Data().GetOnlineAwardCount()
    creatRoleDay = GameWorld.GetCreateRoleDays(curPlayer)#GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
    return creatRoleDay <= dayCnt
 
    
##·¢Ëͽ±ÀøÐÅÏ¢°ü
# @param None
# @return None
def SendOnlinePrizeInfo(curPlayer):
    if not __GetOnlineIsOpen(curPlayer):
        return
    sendPack = ChPyNetSendPack.tagMCOnlinePrize()
    sendPack.Clear()
    sendPack.OnlineTime = GetOnlineTime(curPlayer) * 1000#curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DayOnlineTime)
    sendPack.PrizeInfo = []
    for i in xrange(IpyGameDataPY.IPY_Data().GetOnlineAwardCount()):
        dayID = i+1
        sendPack.PrizeInfo.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlinePrizeNote % dayID))
    sendPack.Len = len(sendPack.PrizeInfo)
    #֪ͨ¿Í»§¶Ëʱ¼ä
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    return
 
 
##ÉèÖÿªÊ¼¼ÆÊ±Ê±¼ä
# @param None
# @return None
def SetStartCalcOnlineTick(curPlayer, newTime=-1):
    if newTime == -1:
        newTime=int(time.time())
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnlineStartTick, newTime)
    return
 
## µÇ¼
#  @param curPlayer
#  @return None
def OnPlayerLogin(curPlayer):
    SetStartCalcOnlineTick(curPlayer)
    SendOnlinePrizeInfo(curPlayer)
    return
 
##ONDAYÖØÖÃ, Í¨Öª¿Í»§¶Ë
# @param None
# @return None
def ResetPrizeInfoOnDay(curPlayer):
    __OnlineMailPrize(curPlayer)
    
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DayOnlineTime, 0)
   
    if PlayerTJG.GetIsTJG(curPlayer):
        return
    SetStartCalcOnlineTick(curPlayer)
    
    SendOnlinePrizeInfo(curPlayer)
    return
    
       
            
def __OnlineMailPrize(curPlayer):
    #Óʼþ²¹·¢½±Àø
    creatRoleDay = GameWorld.GetCreateRoleDays(curPlayer)-1#GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay)
    if not creatRoleDay:
        return
    
    ipyData = IpyGameDataPY.GetIpyGameDataNotLog('OnlineAward', creatRoleDay)
    if not ipyData:
        return
    prizeInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OnlinePrizeNote % creatRoleDay)
    onlineTime = GetOnlineTime(curPlayer)
    GameWorld.DebugLog('creatRoleDay=%s,onlineTime=%s' % (creatRoleDay, onlineTime))
    needTimeList = ipyData.GetStageTime()
    awardDict = ipyData.GetReward()
    itemList = []
    for i, needTime in enumerate(needTimeList):
        if onlineTime >= needTime * 60 and not prizeInfo & pow(2, i):
            for itemID, itemCnt in awardDict[str(i + 1)]:
                itemList.append([itemID, itemCnt, 1])
            prizeInfo|=pow(2, i)
    
    if not itemList:
        return
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OnlinePrizeNote % creatRoleDay, prizeInfo)
    PlayerControl.SendMailByKey('OnLineAward1', [curPlayer.GetID()], itemList)
    return