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