#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.MixServerCampaign  
 | 
#  
 | 
# @todo:ºÏ·þ»î¶¯  
 | 
# @author hxp  
 | 
# @date 2014-12-03  
 | 
# @version 1.1  
 | 
#  
 | 
# ÏêϸÃèÊö: ºÏ·þ»î¶¯  
 | 
# @change: "2016-11-21 10:30" xdh Ôö¼ÓÓʼþ²¹·¢ºÏ·þ½±Àø,Ôö¼ÓÕ½ÃË»÷ɱboss»î¶¯  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2016-11-21 10:30"""  
 | 
  
 | 
import ShareDefine  
 | 
import NetPackCommon  
 | 
import ItemControler  
 | 
import IPY_GameWorld  
 | 
import PlayerControl  
 | 
import DataRecordPack  
 | 
import ChPyNetSendPack  
 | 
import PlayerBillboard  
 | 
import ReadChConfig  
 | 
import PyMapTable  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
  
 | 
# ¶¨ÒåÎïÆ·ÀàÐÍ  
 | 
(  
 | 
Def_ItemType_CommonItem, # Ò»°ãÎïÆ·  
 | 
Def_ItemType_AppointItem, # ÌØÊâ¶¨ÖÆÎïÆ·  
 | 
) = range(2)  
 | 
  
 | 
Def_AwardState_Not = 0 # ²»ÄÜÁì  
 | 
Def_AwardState_Can = 1 # ¿ÉÁì  
 | 
Def_AwardState_Got = 2 # ÒÑÁì  
 | 
  
 | 
## ºÏ·þ»î¶¯µÇ¼´¦Àí  
 | 
def OnMixServerCampaignLogin(curPlayer):  
 | 
    isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)  
 | 
    if not isMixServer:  
 | 
        return  
 | 
    isSycnClientData = False  
 | 
    mixMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_MailState, 0,  
 | 
                                                  ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
    sendGameServerMailTypeList = [] # ²¹·¢ÓʼþÐèÒªµ½GameServerÇëÇóÊý¾ÝµÄ»î¶¯ÀàÐÍ  
 | 
    for campType in ShareDefine.Def_MixCampaign_Type_List:  
 | 
        getAwardState = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerCampaignGetAward % campType)  
 | 
        if getAwardState == ShareDefine.Def_CampaignAwardState_Over: # Áì½±ÒѽáÊø, ÅжÏÊÇ·ñͨ¹ýÓʼþ²¹·¢Î´ÁìÈ¡µÄ½±Àø  
 | 
            if mixMailState & pow(2, campType): # ÓʼþÒÑ´¦Àí¹ý  
 | 
                continue  
 | 
              
 | 
            if campType in ShareDefine.DoOnMapServerMixCampaignTypeList:  
 | 
                DoSendMSCAwardMail(curPlayer, campType)  
 | 
            else:  
 | 
                sendGameServerMailTypeList.append(campType)  
 | 
        else:  
 | 
            isSycnClientData = True  
 | 
              
 | 
    # ÇëÇó²¹·¢½±ÀøÓʼþËùÐèµÄÊý¾Ý  
 | 
    if sendGameServerMailTypeList:  
 | 
        #[ÇëÇó²Ù×÷ÀàÐÍ, ÇëÇó²¹·¢½±ÀøÓʼþ»î¶¯ÀàÐÍÁбí]  
 | 
        msgList = [ShareDefine.Def_MSCGameServerQuery_MailAward, sendGameServerMailTypeList]  
 | 
        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'MixServerCampaignAward', \  
 | 
                '%s' % (msgList), len(str(msgList)))  
 | 
  
 | 
    # Ö»ÒªÓÐδ½áÊøµÄºÏ·þ»î¶¯£¬ÔòÐèҪ֪ͨ  
 | 
#    if isSycnClientData:  
 | 
#        Sync_OpenServerCampaignAward(curPlayer)  
 | 
          
 | 
    return  
 | 
  
 | 
  
 | 
## ´¦ÀíºÏ·þ»î¶¯²éѯ/ÁìÈ¡·â°üÂß¼  
 | 
#  @param curPlayer: Íæ¼Ò¶ÔÏó  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @param queryType: ²éѯÀàÐÍ1:Áì½±, 0:²éѯ¿É·ñÁì½±  
 | 
#  @param awardIndex: //½±ÀøÎ»£¬ÁìȡʱÓà  
 | 
#  @return: True-ÒÑÔÚmapServer´¦Àí£¬·´Ö®False  
 | 
def DoMixServerCampaignOnMapServer(curPlayer, campaignType, queryType, awardIndex):  
 | 
  
 | 
    if campaignType not in ShareDefine.DoOnMapServerMixCampaignTypeList:  
 | 
        return False  
 | 
      
 | 
    if queryType == ShareDefine.Def_MSCGameServerQuery_GetAward:  
 | 
        DoGetMixServerCampaignAward(curPlayer, campaignType, awardIndex, 0, 0, 0)  
 | 
    else:  
 | 
        __DoQueryMixServerCampaign(curPlayer, campaignType)  
 | 
          
 | 
    return True  
 | 
  
 | 
## ºÏ·þ»î¶¯²éѯ  
 | 
#  @param curPlayer: Íæ¼Ò¶ÔÏó  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @return: None  
 | 
def __DoQueryMixServerCampaign(curPlayer, campaignType):  
 | 
      
 | 
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \  
 | 
                                % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
    recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \  
 | 
                                % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
      
 | 
    # Í¨Öª¿Í»§¶Ë  
 | 
    Sync_MixServerCampaignAward(curPlayer, campaignType, awardRecord, recordData)  
 | 
    return  
 | 
  
 | 
## ÊÇ·ñÐèÒª±£´æºÏ·þ»î¶¯Êý¾Ý¼Ç¼  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @return: None  
 | 
def IsNeedSaveMixServerCampaignRecordData(campaignType):  
 | 
    key = ShareDefine.Def_Notify_WorldKey_MixServerCampaignSaveData % campaignType  
 | 
    gameWorldMgr = GameWorld.GetGameWorld()  
 | 
    return gameWorldMgr.GetGameWorldDictByKey(key) == ShareDefine.Def_CampaignDataState_Save  
 | 
  
 | 
  
 | 
## ¸üкϷþ»î¶¯Êý¾Ý¼Ç¼(Íâµ÷º¯Êý)  
 | 
#  @param curPlayer: Íæ¼Ò¶ÔÏó  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @param value: ¸üÐÂÖµ  
 | 
#  @param updType: ¸üз½Ê½1-ÀÛ¼Ó£»Ä¬ÈÏ0-Ìæ»»  
 | 
#  @return: None  
 | 
def UpdMixServerCampaignRecordData(curPlayer, campaignType, value, updType=0):  
 | 
    isMixServer = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_IsMixServer)  
 | 
    if not isMixServer:  
 | 
        return  
 | 
      
 | 
    GameWorld.DebugLog("ºÏ·þ»î¶¯Êý¾Ý¼Ç¼ campaignType=%s,value=%s,updType=%s" % (campaignType, value, updType))  
 | 
    # ·Ç¼Ç¼Êý¾Ýʱ»ú  
 | 
    if not IsNeedSaveMixServerCampaignRecordData(campaignType):  
 | 
        GameWorld.DebugLog("    ·Ç¼Ç¼Êý¾Ýʱ»ú")  
 | 
        return  
 | 
      
 | 
    # Èç¹ûÊÇÀÛ¼ÓµÄ  
 | 
    if updType == 1:  
 | 
        recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \  
 | 
                            % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
          
 | 
        value += recordData  
 | 
        GameWorld.DebugLog("    ÀÛ¼ÓÀàÐÍ£¬¸üÐÂÖµ=%s" % value)  
 | 
          
 | 
    __UpdateMixServerCampaignRecordData(curPlayer, campaignType, value)  
 | 
    return  
 | 
  
 | 
## ¸üкϷþ»î¶¯Êý¾Ý¼Ç¼  
 | 
#  @param curPlayer: Íæ¼Ò¶ÔÏó  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @param value: ¼Ç¼ֵ  
 | 
#  @return: None  
 | 
def __UpdateMixServerCampaignRecordData(curPlayer, campaignType, value):  
 | 
      
 | 
    recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_RecordData \  
 | 
                                % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
      
 | 
    # Öµ²»±ä²»´¦Àí  
 | 
    if recordData == value:  
 | 
        return  
 | 
      
 | 
    # ¸üкϷþ»î¶¯Ê±µÄ¼Ç¼ÊýÖµ  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_RecordData \  
 | 
                                % campaignType, value, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
      
 | 
    # µ±Ç°Á콱״̬¼Ç¼  
 | 
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \  
 | 
                                % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
    # ½±ÀøÅä±íÖеĸñʽ£ºÎ»:[Âú×ãÌõ¼þÊýÖµ, ½±ÀøÐÅÏ¢],  
 | 
    awardInfoDict = __GetMixAwardInfoDict(campaignType)  
 | 
    for bit, awardInfo in awardInfoDict.items():  
 | 
        awardState = GameWorld.GetDataByDigitPlace(awardRecord, bit)  
 | 
          
 | 
        # Èç¹ûÒÑÁ죬²»´¦Àí  
 | 
        if awardState == Def_AwardState_Got:  
 | 
            continue  
 | 
          
 | 
        # Èç¹û¸üеÄÊýÖµÂú×ã¹æ¶¨Áì½±ÊýÖµ£¬ÇÒµ±Ç°²»Îª¿ÉÁì״̬£¬Ôò¸üÐÂΪ¿ÉÁì½±  
 | 
        if value >= awardInfo[0] and awardState != Def_AwardState_Can:  
 | 
            awardRecord = GameWorld.ChangeDataByDigitPlace(awardRecord, bit, Def_AwardState_Can)  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_AwardRecord \  
 | 
                        % campaignType, awardRecord, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
            GameWorld.DebugLog("    ¸üн±Àø×´Ì¬ type=%s,awardRecord=%s" % (campaignType, awardRecord))  
 | 
      
 | 
    # ºÏ·þ³äÖµ»î¶¯µÄ£¬¸üгäÖµÅÅÐÐ  
 | 
    if campaignType == ShareDefine.Def_MixCampaign_Type_RechargeCnt:  
 | 
        # ÒòΪÓÐ×öÉϰñÏÞÖÆ£¬ËùÒԾͲ»×ö¿½±´  
 | 
        PlayerBillboard.UpdateMixServerRechargeRankBillboard(curPlayer, value)  
 | 
          
 | 
    if campaignType == ShareDefine.Def_MixCampaign_Type_PlayerKillBoss:  
 | 
        # ÒòΪÓÐ×öÉϰñÏÞÖÆ£¬ËùÒԾͲ»×ö¿½±´   
 | 
        PlayerBillboard.UpdateMixServerFamilyKillBossBillboard(curPlayer, 1) #ĬÈÏ1Ö»  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
## ºÏ·þ»î¶¯¸ø½±Àø  
 | 
#  @param curPlayer: Íæ¼Ò¶ÔÏó  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @param awardIndex: ½±ÀøË÷Òýλ  
 | 
#  @param order: ËùÔÚÅÅÐаñÅÅÃû  
 | 
#  @param familyLV: ËùÔÚÕ½Ã˵ȼ¶  
 | 
#  @param memberFamilyLV: ËùÔÚÕ½Ã˳ÉÔ±µÈ¼¶  
 | 
#  @return: None  
 | 
def DoGetMixServerCampaignAward(curPlayer, campaignType, awardIndex, order, familyLV, memberFamilyLV, isUseMail=False):  
 | 
    GameWorld.Log("ºÏ·þ»î¶¯¸ø½±Àø campaignType=%s,index=%s,order=%s,familyLV=%s,memberFamilyLV=%s,isUseMail=%s"   
 | 
                      % (campaignType, awardIndex, order, familyLV, memberFamilyLV, isUseMail))  
 | 
    gameWorldMgr = GameWorld.GetGameWorld()  
 | 
      
 | 
    if not isUseMail: #Óʼþ½±ÀøµÄ²»ÅÐ¶Ï  
 | 
        key = ShareDefine.Def_Notify_WorldKey_MixServerCampaignGetAward % campaignType  
 | 
        canGetAward = gameWorldMgr.GetGameWorldDictByKey(key)  
 | 
        # Èç¹ûµ±Ç°²»¿ÉÁ콱ʱ»ú  
 | 
        if canGetAward != ShareDefine.Def_CampaignAwardState_Allow:  
 | 
            GameWorld.Log("    µ±Ç°²»¿ÉÁ콱ʱ»ú type=%s,canGetAward=%s" % (campaignType, canGetAward))  
 | 
            return  
 | 
      
 | 
    # µ±Ç°Á콱״̬¼Ç¼  
 | 
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_AwardRecord \  
 | 
                                % campaignType, 0, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
      
 | 
    awardState = GameWorld.GetDataByDigitPlace(awardRecord, awardIndex)  
 | 
    GameWorld.DebugLog('ºÏ·þ»î¶¯¸ø½±Àø awardState=%s' % awardState)  
 | 
    #Ö÷ÒªÔÚMapServer´¦ÀíµÄÊýÖµÅжÏÀàÐÍ£¬ÐèÒª¼ì²éÁìȡ״̬  
 | 
    if campaignType in ShareDefine.DoOnMapServerMixCampaignTypeList:  
 | 
        # ¼ì²éÊÇ·ñÒÑÁìÈ¡  
 | 
        if awardState != Def_AwardState_Can:  
 | 
            GameWorld.Log("    ²»¿ÉÁì½± type=%s,index=%s,awardRecord=%s,awardState=%s"   
 | 
                          % (campaignType, awardIndex, awardRecord, awardState))  
 | 
            return  
 | 
          
 | 
    #GameServer´¦ÀíµÄÅÅÐаñÀàÐÍ£¬ÔÚ¿Í»§¶Ë²»ÐèÒª¼Ç¼£¬³ý·ÇÁìÈ¡¹ý£¬ËùÒÔÕâÀïÐèÒªÅж¨ÊÇ·ñÁìÈ¡¹ý  
 | 
    else:  
 | 
        if awardState == Def_AwardState_Got:  
 | 
            GameWorld.Log("    ÒÑÁì¹ý type=%s,index=%s,awardRecord=%s,awardState=%s"   
 | 
                          % (campaignType, awardIndex, awardRecord, awardState))  
 | 
            return  
 | 
      
 | 
    #»ñÈ¡½±ÀøÐÅÏ¢  
 | 
    awardInfoList, condition = __GetMixAwardInfoList(curPlayer, campaignType, awardIndex, order,  
 | 
                                          familyLV, memberFamilyLV)  
 | 
    if awardInfoList == []:  
 | 
        GameWorld.ErrLog("    ÕÒ²»µ½½±ÀøÐÅÏ¢, type=%s,index=%s" % (campaignType, awardIndex))  
 | 
        return  
 | 
      
 | 
    if len(awardInfoList) < 2:  
 | 
        #½±ÀøÐÅÏ¢³¤¶È´íÎó  
 | 
        GameWorld.ErrLog("    ½±ÀøÐÅÏ¢len error! type=%s,index=%s" % (campaignType, awardIndex))  
 | 
        return  
 | 
    if not isUseMail:  
 | 
        needPackCount = awardInfoList[0]  # Õ¼Óøñ×ÓÊý  
 | 
        packSpaceCnt = max((ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem)), \  
 | 
                       ItemControler.GetItemPackSpace(curPlayer, IPY_GameWorld.rptAnyWhere))  
 | 
          
 | 
        if needPackCount > packSpaceCnt:  
 | 
            #±³°ü¿Õ¼äÒÑÂú  
 | 
            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  
 | 
            return  
 | 
      
 | 
    #¸ù¾ÝÖ°Òµ»ñÈ¡½±ÀøÎïÆ·ÐÅÏ¢  
 | 
    playerJob = curPlayer.GetJob()  
 | 
    jobItemInfoDict = awardInfoList[1]  
 | 
    jobItemInfoDictEx = awardInfoList[2] if len(awardInfoList) > 2 else {} # ¶îÍâ½±Àø  
 | 
      
 | 
    itemInfoListBase = __GetAwardItemListByJob(playerJob, jobItemInfoDict)  
 | 
    itemInfoListEx = __GetAwardItemListByJob(playerJob, jobItemInfoDictEx)  
 | 
    itemInfoList = itemInfoListBase + itemInfoListEx  
 | 
    GameWorld.DebugLog("    itemInfoListBase=%s,itemInfoListEx=%s,itemInfoList=%s"   
 | 
                       % (str(itemInfoListBase), str(itemInfoListEx), str(itemInfoList)))  
 | 
    #Èç¹û¶¼È¡²»µ½£¬±¨Åä±í´íÎó  
 | 
    if itemInfoList == []:  
 | 
        GameWorld.ErrLog("    ½±ÀøÈ¡²»µ½ campaignType=%s,awardIndex=%s,playerJob=%s not data"   
 | 
                         % (campaignType, awardIndex, playerJob))  
 | 
        return  
 | 
      
 | 
    #oss¼Ç¼Áì½±ÐÅÏ¢  
 | 
    awardMixDay = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_MixServerDay)  
 | 
    dataDict = {"AwardMixDay":awardMixDay, "CampaignType":campaignType, "awardIndex":awardIndex,  
 | 
                "PlayerOrder":order, "FamilyLV":familyLV, "MemberFamilyLV":memberFamilyLV}  
 | 
    if not isUseMail:  
 | 
        #¸øÓè½±ÀøÎïÆ·  
 | 
        for index in range(0, len(itemInfoList)):  
 | 
            itemType, itemID, itemCount, isBind = itemInfoList[index]  
 | 
              
 | 
            #¸øÓèÎïÆ·          
 | 
            # Ò»°ãÎïÆ·  
 | 
            if itemType == Def_ItemType_CommonItem:  
 | 
                if not ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind,  
 | 
                                                    [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere], True, showSysInfo=True):  
 | 
                    continue  
 | 
            # ÌØÊâ¶¨ÖÆÎïÆ·  
 | 
            elif itemType == Def_ItemType_AppointItem:  
 | 
                ItemControler.GivePlayerAppointItem(curPlayer, itemID, isBind, True, True)  
 | 
        #ϵͳ¹ã²¥  
 | 
        if campaignType == ShareDefine.Def_MixCampaign_Type_RechargeFirst:  
 | 
            PlayerControl.WorldNotify(0, 'GeRen_wjr_162625', [curPlayer.GetPlayerName()])  
 | 
    else:  
 | 
        playerID = curPlayer.GetPlayerID()  
 | 
        MixServerCampaignMail = ReadChConfig.GetEvalChConfig("MixServerCampaignMail")  
 | 
        content, getDays, mailNumDict = MixServerCampaignMail  
 | 
        if campaignType not in mailNumDict:  
 | 
            GameWorld.ErrLog("    Î´ÅäÖúϷþ»î¶¯ÀàÐͶÔÓ¦ÓʼþÄ£°å±àºÅ! campaignType=%s,mailItemList=%s" % (campaignType, itemInfoList), playerID)  
 | 
            return  
 | 
        GameWorld.DebugLog('    ºÏ·þ½±ÀøÓʼþ campaignType=%s, condition=%s'%(campaignType, condition))  
 | 
        mailContent = content % (mailNumDict[campaignType], condition)  
 | 
        mailItemList = []  
 | 
        for itemType, itemID, itemCount, isBind in itemInfoList:  
 | 
            mailItemList.append([itemID, itemCount, isBind, itemType])  
 | 
        sendOK = PlayerControl.SendMail("", mailContent, getDays, [playerID], mailItemList)  
 | 
        dataDict["sendOK"] = sendOK  
 | 
      
 | 
    DataRecordPack.DR_MixServerAward(curPlayer, dataDict)  
 | 
      
 | 
    # ¸üÐÂÒÑÁìÈ¡  
 | 
    awardRecord = GameWorld.ChangeDataByDigitPlace(awardRecord, awardIndex, Def_AwardState_Got)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_AwardRecord \  
 | 
                        % campaignType, awardRecord, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
      
 | 
    # ¸üлÊý¾Ý  
 | 
    updRecordData = -1  
 | 
    if campaignType == ShareDefine.Def_MixCampaign_Type_FamilyWar:  
 | 
        updRecordData = memberFamilyLV  
 | 
      
 | 
    if updRecordData != -1:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_RecordData \  
 | 
                            % campaignType, updRecordData, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
      
 | 
    # Í¨Öª¿Í»§¶Ë  
 | 
    __DoQueryMixServerCampaign(curPlayer, campaignType)  
 | 
    return  
 | 
  
 | 
  
 | 
## ºÏ·þ»î¶¯Óʼþ·¢·Å½±Àø  
 | 
def DoSendMSCAwardMail(curPlayer, campaignType, gameServerAwardInfo=[]):  
 | 
    campaignAwardDict = ReadChConfig.GetEvalChConfig("MixServerCampaignAward")  
 | 
    if campaignType not in campaignAwardDict:  
 | 
        return  
 | 
    order = gameServerAwardInfo[0] if gameServerAwardInfo else 0  
 | 
    memberLV = gameServerAwardInfo[1] if len(gameServerAwardInfo) > 1 else 0  
 | 
    if campaignType in ShareDefine.Def_MixCampaign_Billboard_Dict:  
 | 
        billboardType = ShareDefine.Def_MixCampaign_Billboard_Dict[campaignType]  
 | 
        if not gameServerAwardInfo or not order:  
 | 
            GameWorld.DebugLog("    ÎÞ°ñµ¥Êý¾Ý!campaignType=%s,billboardType=%s" % (campaignType, billboardType))  
 | 
            return  
 | 
        DoGetMixServerCampaignAward(curPlayer, campaignType, 0, order, 0, memberLV, True)  
 | 
    else:      
 | 
        awardInfoList = campaignAwardDict[campaignType]  
 | 
        for awardIndex in xrange(len(awardInfoList)):  
 | 
            DoGetMixServerCampaignAward(curPlayer, campaignType, awardIndex, order, 0, memberLV, True)  
 | 
              
 | 
    # ¸üÐÂÓʼþÒÑ´¦Àí¹ý  
 | 
    mixMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MixServerCampaign_MailState, 0,  
 | 
                                                  ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
    updMailState = mixMailState | pow(2, campaignType)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixServerCampaign_MailState,  
 | 
                                       updMailState, ChConfig.Def_PDictType_OpenServerCampaign)  
 | 
    GameWorld.Log("    ºÏ·þ»î¶¯Óʼþ·¢·Å½±Àø³É¹¦! campaignType=%s,mixMailState=%s,updMailState=%s"   
 | 
                  % (campaignType, mixMailState, updMailState), curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
## ¸ù¾ÝÖ°Òµ»ñÈ¡½±ÀøÁÐ±í  
 | 
#  @param playerJob: Ö°Òµ  
 | 
#  @param jobItemInfoDict: Ö°Òµ¶ÔÓ¦½±ÀøÎïÆ·ÐÅÏ¢×Öµä  
 | 
#  @return: ½±ÀøÐÅÏ¢ÁÐ±í  
 | 
def __GetAwardItemListByJob(playerJob, jobItemInfoDict):  
 | 
    itemInfoList = jobItemInfoDict.get(playerJob, [])  
 | 
    #Èç¹ûÈ¡²»µ½µ±Ç°Ö°ÒµµÄ½±Àø£¬¾Íȡְҵ0µÄÊý¾Ý  
 | 
    if itemInfoList == []:  
 | 
        itemInfoList = jobItemInfoDict.get(0, [])  
 | 
    return itemInfoList  
 | 
  
 | 
## »ñÈ¡½±ÀøÎïÆ·ÐÅÏ¢  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @param awardIndex: ½±ÀøÎ»  
 | 
#  @param order: Ãû´Î  
 | 
#  @param familyLV: ¼Ò×åµÈ¼¶  
 | 
#  @param memberFamilyLV: ¼Ò×åְλ  
 | 
#  @return: ½±ÀøÐÅÏ¢,Ìõ¼þ  
 | 
def __GetMixAwardInfoList(curPlayer, campaignType, awardIndex, order, familyLV, memberFamilyLV):  
 | 
    condition = 0 #ÓʼþÏÔʾÓòÎÊý  
 | 
    awardInfoDict = __GetMixAwardInfoDict(campaignType)  
 | 
    if awardInfoDict == {}:  
 | 
        return [], condition  
 | 
      
 | 
    awardList = []  
 | 
  
 | 
    # Í¨Óñ£µ×  
 | 
    if campaignType in [ShareDefine.Def_MixCampaign_Type_RechargeFirst,  
 | 
                        ShareDefine.Def_MixCampaign_Type_RechargeCnt,  
 | 
                        ShareDefine.Def_MixCampaign_Type_FamilyWarEnter,  
 | 
                        ShareDefine.Def_MixCampaign_Type_PlayerKillBoss  
 | 
                        ]:  
 | 
        awardList = awardInfoDict.get(awardIndex, [])  
 | 
        condition = 0 if len(awardList) != 2 else awardList[0]  
 | 
        awardList = [] if len(awardList) != 2 else awardList[1]  
 | 
        if campaignType in [ShareDefine.Def_MixCampaign_Type_RechargeFirst]:  
 | 
            condition = ''  
 | 
      
 | 
    #ÅÅÐаñÀàÐÍ  
 | 
    else:  
 | 
        condition = order  
 | 
        orderList = awardInfoDict.keys()  
 | 
        orderList.sort()  
 | 
        for minOrder in orderList:  
 | 
            if order > minOrder:  
 | 
                continue  
 | 
            awardList = awardInfoDict.get(minOrder)  
 | 
            break  
 | 
        if campaignType == ShareDefine.Def_MixCampaign_Type_FamilyWar:  
 | 
            #±ù·âÍõ×ù¼Ò×åÕ½»ñʤ¼Ò×å³ÉÔ±½±ÀøÌØÊâ´¦Àí  
 | 
            condition = memberFamilyLV  
 | 
            awardList = awardInfoDict.get(memberFamilyLV, [])  
 | 
          
 | 
    extendComValue = 0 # À©Õ¹½±Àø±È½ÏÖµ  
 | 
      
 | 
    # ÌØÊâÀ©Õ¹½±Àø±È½ÏÖµ´¦Àí  
 | 
    # ...  
 | 
      
 | 
    awardList = __ExtendAwardItem(curPlayer, awardList, extendComValue)  
 | 
          
 | 
    return awardList, condition  
 | 
  
 | 
## À©Õ¹½±ÀøÎïÆ·  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param awardList: ½±ÀøÐÅÏ¢ÁÐ±í  
 | 
#  @param extendComValue: À©Õ¹½±Àø±È½ÏÖµ  
 | 
#  @return: ×îÖÕ½±ÀøÎïÆ·ÁÐ±í  
 | 
def __ExtendAwardItem(curPlayer, awardList, extendComValue):  
 | 
    if len(awardList) < 4:  
 | 
        return awardList  
 | 
      
 | 
    # awardList[ÐèÇó¸ñ×ÓÊý, »ù´¡½±Àø×Öµä, ¶îÍâ½±ÀøÐèÇó, ¶îÍâ½±Àø×Öµä]  
 | 
    needSpace = awardList[0]  
 | 
    awardDict = awardList[1]  
 | 
    limitData = awardList[2]  
 | 
    awardDictEx = awardList[3]  
 | 
      
 | 
    # Èç¹ûÓжîÍâ½±Àø  
 | 
    GameWorld.DebugLog("    __ExtendAwardItem extendComValue=%s,limitData=%s"   
 | 
                       % (extendComValue, limitData))  
 | 
    # 0Ϊ²»ÏÞÖÆ  
 | 
    if not limitData or extendComValue >= limitData:  
 | 
        awardList = [needSpace, awardDict, awardDictEx]  
 | 
    else:  
 | 
        awardList = [needSpace, awardDict]  
 | 
          
 | 
    return awardList  
 | 
  
 | 
## »ñÈ¡½±ÀøÐÅÏ¢  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param campaignType: »î¶¯ÀàÐÍ  
 | 
#  @param order: Ãû´Î  
 | 
#  @param familyLV: ¼Ò×åµÈ¼¶  
 | 
#  @param memberFamilyLV: ¼Ò×åְλ  
 | 
#  @return: ½±ÀøÐÅÏ¢  
 | 
def __GetMixAwardInfoDict(campaignType):  
 | 
    campaignAwardDict = ReadChConfig.GetEvalChConfig("MixServerCampaignAward")  
 | 
    awardInfoDict = campaignAwardDict.get(campaignType, {})  
 | 
    if awardInfoDict == {}:  
 | 
        GameWorld.ErrLog("MixServerCampaignAward.txt campaignType:%s not info" % (campaignType))  
 | 
    return awardInfoDict  
 | 
  
 | 
  
 | 
## Í¨ÖªºÏ·þ»î¶¯½±Àø  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param campaignType: »î¶¯½±Àø  
 | 
#  @param record: ´ÓµÍλµ½¸ßλ£¬Ã¿Î»±íʾ£º0-²»¿ÉÁ죻1-ÁìÈ¡£»2-ÒÑÁì  
 | 
#  @param recordData: »î¶¯Ê±µÄ¼Ç¼ֵ  
 | 
#  @return: None  
 | 
def Sync_MixServerCampaignAward(curPlayer, campaignType, record, recordData):  
 | 
    mixAwardRecord = ChPyNetSendPack.tagMCMixCampaignAwardRecord()  
 | 
    mixAwardRecord.CampaignType = campaignType  
 | 
    mixAwardRecord.Record = record  
 | 
    mixAwardRecord.RecordData = recordData  
 | 
    NetPackCommon.SendFakePack(curPlayer, mixAwardRecord)  
 | 
    return  
 | 
  
 |