| #!/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)  | 
|       | 
|       | 
| ## ºÏ·þµÇ½µ±Ìì½±Àø <AF 01·â°ü>  | 
| #  @param clientPack <Index-½±ÀøË÷Òý>  | 
| #  @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(())  |