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