#!/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, 1, [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  
 | 
              
 | 
              
 | 
      
 |