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