#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package PlayerMixLoginDayAward # # @todo: ºÏ·þµÇ½½±Àø # @author ljd # @date 2014-12-05 15:30 # @version 1.0 # # ÏêϸÃèÊö: # """Version = 2014-12-05 15:30""" #------------------------------------------------------------------------------ import IPY_GameWorld import ChConfig import GameWorld import ReadChConfig import ItemCommon import PlayerControl import ItemControler import ChPyNetSendPack import NetPackCommon import ShareDefine import DataRecordPack # ½±Àø×´Ì¬ ( Reward_State_Not, Reward_State_Can, Reward_State_Yet, ) = range(3) # ½±ÀøÐÅÏ¢ÅäÖÃλË÷Òý ( Reward_Item_Type, Reward_Item_Id, Reward_Item_Num, Reward_Item_IsBind, ) = range(4) # ¶¨ÒåÎïÆ·ÀàÐÍ ( Item_Type_Common, # Ò»°ãÎïÆ·±í Item_Type_Appoint, # ÌØÊâ¶¨ÖÆÎïÆ· ) = range(2) # ÌØÊâÅäÖÃÏÞÖÆ Special_Ini_Key = -1 ( Special_CampaignDay, # »î¶¯³ÖÐøÊ±¼ä-ºÏ·þÌì Special_WarnDay, # ÌáʾºÏ·þÌì ) = range(2) ## onday ¼Ç¼ºÏ·þµÇ½½±Àø×´Ì¬ # @param curPlayer # @return None def OnDayPlayerMixLoginDay(curPlayer): __UpdateMixLoginDayState(curPlayer) ## µÇ½֪ͨºÏ·þµÇ½½±Àø×´Ì¬ # @param curPlayer # @return None def OnLoginNotifyMixLoginDayAward(curPlayer): __UpdateMixLoginDayState(curPlayer) ## ¸üеǽ״̬ # @param curPlayer # @return None def __UpdateMixLoginDayState(curPlayer): if not __IsPermitMixManage(): return __UpdateAwardCanState(curPlayer) NotifyPlayerAwardState(curPlayer) ## ºÏ·þµÇ½µ±Ìì½±Àø # @param clientPack # @return None def GetMixLoginDayAward(index, clientPack, tick): # ¸ù¾ÝË÷ÒýÈ¡µ½µ±Ç°ÇëÇóÍæ¼ÒµÄÊý¾Ý curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) loginDayState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDayState) stateIndex = clientPack.Index if not __IsPermitMixManage(stateIndex): # ²»ÔÊÐí´¦ÀíºÏ·þ»î¶¯ return GameWorld.DebugLog("GetMixLoginDayAward() stateIndex=%s receive client get reward Info!!!"%stateIndex) mixDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay) curState = GameWorld.GetDataByDigitPlace(loginDayState, stateIndex) if curState != Reward_State_Can or mixDay < stateIndex: # ²»ÊÇ¿ÉÁìȡ״̬ »ò ºÏ·þÌìÊýδµ½ return # »ñÈ¡ÎïÆ·Áбí itemList = __GetRewardItemList(curPlayer, stateIndex) if not __IsPermitGiveReward(curPlayer, itemList): # ²»ÔÊÐí·¢·ÅÎïÆ· return loginDayState = GameWorld.ChangeDataByDigitPlace(loginDayState, stateIndex, Reward_State_Yet) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDayState, loginDayState) __GiveRewardItems(curPlayer, itemList) GameWorld.DebugLog("GetMixLoginDayAward() loginDayState=%s give reward success!!!"%loginDayState) # ¼Ç¼Áìȡʼþ DataRecordPack.DR_MixLoginDayAward(curPlayer, loginDayState) # ֪ͨ½±Àø×´Ì¬ NotifyPlayerAwardState(curPlayer) return ## ֪ͨºÏ·þµÇ½½±Àø # @param curPlayer # @return None def NotifyPlayerAwardState(curPlayer): sendPack = ChPyNetSendPack.tagMCMixLoginDayAwardState() sendPack.Clear() sendPack.State = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDayState) # ֪ͨ¿Í·þ¶ËºÏ·þµÇ½½±ÀøÁìȡ״̬ NetPackCommon.SendFakePack(curPlayer, sendPack) GameWorld.DebugLog("NotifyPlayerAwardState() Notify client merge server login reward state(%s)!!!"%sendPack.State) return ## ¸üн±Àø¿ÉÁìȡ״̬ # @param curPlayer # @return None def __UpdateAwardCanState(curPlayer): if not __IsPermitMixManage(): return mixDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay) rewardInfoDict = ReadChConfig.GetEvalChConfig("MixLoginDayAward") if mixDay >= rewardInfoDict.get(Special_Ini_Key, [len(rewardInfoDict), 0])[Special_CampaignDay]: GameWorld.DebugLog("__UpdateAwardCanState() have merge server %s day, now!!!"%mixDay) # ³¬¹ýÁ˻ʱ¼ä return loginDayState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixLoginDayState) curState = GameWorld.GetDataByDigitPlace(loginDayState, mixDay) if curState in [Reward_State_Can, Reward_State_Yet]: # ¿É¡¢ÒÑÁìȡ״̬²»¸üРreturn # ¸ü¸Äµ±Ç°ºÏ·þÌìΪ¿ÉÁìȡ״̬ loginDayState = GameWorld.ChangeDataByDigitPlace(loginDayState, mixDay, Reward_State_Can) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDayState, loginDayState) ## ÊÇ·ñÔÊÐíºÏ·þ´¦Àí # @param dayIndex Áì½±ºÏ·þÌì # @return None def __IsPermitMixManage(dayIndex=-1): # ÊÇ·ñ´¦ÔںϷþ״̬ isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer) if not isMixServer: GameWorld.DebugLog("__IsPermitMixManage() has not merge server, now!!!") return False # È¡µÃºÏ·þÌì mixDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay) dayIndex = dayIndex if dayIndex >= 0 else mixDay rewardInfoDict = ReadChConfig.GetEvalChConfig("MixLoginDayAward") if dayIndex >= rewardInfoDict.get(Special_Ini_Key, [0, len(rewardInfoDict)])[Special_WarnDay]: # ³¬¹ýÁËÓн±ÌáʾÌìÊý GameWorld.DebugLog("__IsPermitMixManage() have merge server %s day, now!!!"%mixDay) return False return True ## ÊÇ·ñÔÊÐí·¢·ÅÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param itemList ½±ÀøÎïÆ·Áбí # @return ÊÇ·ñ¿ÉÒÔ·¢·ÅÎïÆ· def __IsPermitGiveReward(curPlayer, itemList): if not itemList: GameWorld.ErrLog("__IsPermitGiveReward() Reward item list (%s) Null!!!"%itemList) return False packSpaceNum = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem) needSpaceNum = len(itemList) if needSpaceNum > packSpaceNum: # ֪ͨ±³°ü¿Õ¼ä²»×ã PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371") return False return True ## ·¢·Å½±ÀøÎïÆ· # @param curPlayer µ±Ç°Íæ¼Ò # @param itemList ½±ÀøÎïÆ·Áбí # @return None def __GiveRewardItems(curPlayer, itemList): for itemInfo in itemList: itemType = itemInfo[Reward_Item_Type] itemId = itemInfo[Reward_Item_Id] itemNum = itemInfo[Reward_Item_Num] itemIsBind = itemInfo[Reward_Item_IsBind] if itemNum <= 0: continue # Ò»°ãÎïÆ· if itemType == Item_Type_Common: ItemControler.GivePlayerItem(curPlayer, itemId, itemNum, itemIsBind, [IPY_GameWorld.rptItem], True) # ÌØÊâ¶¨ÖÆÎïÆ· elif itemType == Item_Type_Appoint: ItemControler.GivePlayerAppointItem(curPlayer, itemId, itemIsBind, True) ## »ñÈ¡½±ÀøÁбí # @param curPlayer µ±Ç°Íæ¼Ò # @param stateIndex ½±Àø×´Ì¬Ë÷Òý # @return ½±ÀøÎïÆ·Áбí def __GetRewardItemList(curPlayer, stateIndex): # È¡³ö½±ÀøÅäÖà rewardInfoDict = ReadChConfig.GetEvalChConfig("MixLoginDayAward") rewardInfo = rewardInfoDict.get(stateIndex, {}) heroJob = curPlayer.GetJob() # °´Ö°ÒµÈ¡½±ÀøÎïÆ·Áбí for jobs, items in rewardInfo.items(): if heroJob in jobs: return items[:] GameWorld.DebugLog("__GetRewardItemList() Not find job(%s)"%heroJob) return rewardInfo.get(())