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