| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Player.OpenServerCampaign  | 
| #  | 
| # @todo:¿ª·þ»î¶¯  | 
| # @author hxp  | 
| # @date 2018-03-06  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¿ª·þ»î¶¯  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2018-03-06 11:00"""  | 
| #-------------------------------------------------------------------------------  | 
| import ShareDefine  | 
| import ChPyNetSendPack  | 
| import NetPackCommon  | 
| import ChConfig  | 
| import GameWorld  | 
| import ItemControler  | 
| import IPY_GameWorld  | 
| import PlayerControl  | 
| import IpyGameDataPY  | 
| import PlayerBillboard  | 
| import PlayerFamilyRedPacket  | 
| import ItemCommon  | 
|   | 
| OSCBillAward_IsAutoMail = True # ÅÅÃû½±ÀøÊÇ·ñ¹ýÌìÖ±½Óϵͳ×Ô¶¯·¢·Å£¬Èç¹û²»ÊÇÔòÍæ¼Ò¿ÉÊÖ¶¯ÁìÈ¡  | 
|   | 
| (  | 
| OSC_BillLimitValue, # ÉϰñÏÞÖÆÖµ  | 
| OSC_StartDay, # ¿ªÆô¿ª·þÌì  | 
| OSC_EndDay, # ½áÊø¿ª·þÌì  | 
| ) = range(3)  | 
|   | 
| def DoBillboardOpen(curPlayer):  | 
|     for campaignType, billBoardType in ShareDefine.Def_Campaign_Billboard_Dict.items():  | 
|         value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)  | 
|         GameWorld.DebugLog("ÅÅÐаñ¿ªÆô,ͬ²½¿ª·þ»î¶¯¼Ç¼!campaignType=%s,billBoardType=%s,value=%s" % (campaignType, billBoardType, value))  | 
|         if CanUpdOSCBillboard(curPlayer, campaignType, value):  | 
|             PlayerBillboard.UpdatePlayerBillboard(curPlayer, billBoardType, value)  | 
|     return  | 
|   | 
| def __CanUpdOSCRecordData(campaignType, curValue=None):  | 
|     ## ¿É·ñ¸üпª·þ»î¶¯Êý¾Ý  | 
|     OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1)  | 
|     campTypeS = str(campaignType)  | 
|     if campTypeS not in OSCBillboardDataLimitDict:  | 
|         GameWorld.DebugLog("²»´æÔڸÿª·þ»î¶¯ÀàÐÍ: %s" % campaignType)  | 
|         return False  | 
|     limitValue = OSCBillboardDataLimitDict[campTypeS][OSC_BillLimitValue]  | 
|     endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay]  | 
|       | 
|     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  | 
|     if openServerDay > endOpenServerDay:  | 
|         GameWorld.DebugLog("¸Ã¿ª·þ»î¶¯ÒѽáÊø£¬ÎÞ·¨Éϰñ£¡campaignType=%s,openServerDay=%s > endOpenServerDay=%s" % (campaignType, openServerDay, endOpenServerDay))  | 
|         return False  | 
|       | 
|     if curValue != None and curValue < limitValue:  | 
|         GameWorld.DebugLog("¸Ã¿ª·þ»î¶¯ÊýÖµ²»×㣬ÎÞ·¨Éϰñ£¡campaignType=%s,curValue=%s < limitValue=%s" % (campaignType, curValue, limitValue))  | 
|         return False  | 
|     return True  | 
|   | 
| def CanUpdOSCBillboard(curPlayer, campaignType, curValue): return __CanUpdOSCRecordData(campaignType, curValue)  | 
| def IsNeedSaveOpenServerCampaignRecordData(campaignType): return __CanUpdOSCRecordData(campaignType)  | 
|   | 
| def AddOpenServerCampaignRecordData(curPlayer, campaignType, addValue):  | 
|     ## Ôö¼Ó¿ª·þ»î¶¯Êý¾Ý¼Ç¼(Íâµ÷º¯Êý)  | 
|     recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)  | 
|       | 
|     recordData += addValue  | 
|     UpdOpenServerCampaignRecordData(curPlayer, campaignType, recordData)  | 
|     return  | 
|   | 
| def UpdOpenServerCampaignRecordData(curPlayer, campaignType, value):  | 
|     ## ¸üпª·þ»î¶¯Êý¾Ý¼Ç¼(Íâµ÷º¯Êý)  | 
|     if not IsNeedSaveOpenServerCampaignRecordData(campaignType):  | 
|         #GameWorld.DebugLog("    ·Ç¿ª·þ»î¶¯¼Ç¼Êý¾Ýʱ»ú, campaignType=%s" % campaignType)  | 
|         return  | 
|       | 
|     recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)  | 
|       | 
|     if value == recordData:  | 
|         GameWorld.DebugLog("    ¿ª·þ»î¶¯Êý¾ÝµÈÓÚÀúÊ·¼Ç¼, ²»¸üРcampaignType=%s,recordData=%s,updValue=%s"   | 
|                            % (campaignType, recordData, value), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     if campaignType not in [ShareDefine.Def_Campaign_Type_StoneLV, ShareDefine.Def_Campaign_Type_FightPower,   | 
|                             ShareDefine.Def_Campaign_Type_RuneLV, ShareDefine.Def_Campaign_Type_LingGen, ShareDefine.Def_Campaign_Type_StarLV] and value < recordData:  | 
|         GameWorld.DebugLog("    ¿ª·þ»î¶¯Êý¾ÝСÓÚÀúÊ·¼Ç¼, ²»¸üРcampaignType=%s,recordData=%s,updValue=%s"   | 
|                            % (campaignType, recordData, value), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     # ¸üпª·þ»î¶¯Ê±µÄ¼Ç¼ÊýÖµ  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordData % campaignType, value)  | 
|     Sync_OpenServerCampaignAward(curPlayer, campaignType)  | 
|     GameWorld.DebugLog("    ¸üпª·þ»î¶¯Êý¾Ý¼Ç¼ campaignType=%s,recordData=%s,updValue=%s"   | 
|                        % (campaignType, recordData, value), curPlayer.GetPlayerID())  | 
|       | 
|     canUpdOSCBill = CanUpdOSCBillboard(curPlayer, campaignType, value)  | 
|     if campaignType in ShareDefine.Def_Campaign_Billboard_Dict and (value <= recordData or canUpdOSCBill):  | 
|         if not canUpdOSCBill:  | 
|             value = -1  | 
|             GameWorld.DebugLog("    ²»ÄÜÉϰñ½µÊý¾ÝµÄ£¬ÉèÖøðñµ¥Êý¾ÝΪ-1£¬É¾³ý¸ÃÊý¾Ý£¡", curPlayer.GetPlayerID())  | 
|         billBoardType = ShareDefine.Def_Campaign_Billboard_Dict[campaignType]  | 
|         PlayerBillboard.UpdatePlayerBillboard(curPlayer, billBoardType, value)  | 
|     return  | 
|   | 
| ##==================================================================================================  | 
|   | 
| def GetOSCTagAwardIpyList(campType):  | 
|     tagAwardList = IpyGameDataPY.GetIpyGameDataListNotLog("OSCBillTagAward", campType)  | 
|     if not tagAwardList:  | 
|         return []  | 
|       | 
|     tagAwardIpyList = []  | 
|     for ipyData in tagAwardList:  | 
|         tagAwardIpyList.append([ipyData.GetTagCondition(), ipyData])  | 
|     tagAwardIpyList.sort()  | 
|     return [info[1] for info in tagAwardIpyList]  | 
|   | 
| def OnOpenServerCampaignLogin(curPlayer):  | 
|     ## ¿ª·þ»î¶¯µÇ¼´¦Àí  | 
|     if not __DoSendOSCAwardMail(curPlayer):  | 
|         Sync_OpenServerCampaignAward(curPlayer)  | 
|     return  | 
|   | 
| def OnOpenServerCampaignDay(curPlayer):  | 
|     ## ¿ª·þ»î¶¯¹ýÌì´¦Àí  | 
|     __DoSendOSCAwardMail(curPlayer)  | 
|     return  | 
|   | 
| def __DoSendOSCAwardMail(curPlayer):  | 
|     ## Ö´Ðпª·þ»î¶¯²¹·¢½±ÀøÓʼþÂß¼  | 
|     # @return: ÊÇ·ñ´¦Àí²¹·¢  | 
|       | 
|     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  | 
|     awardEndOpenServerDay = IpyGameDataPY.GetFuncCfg("OSCBillboardOpen", 2)  | 
|     if openServerDay <= awardEndOpenServerDay:  | 
|         GameWorld.DebugLog("¿ª·þ»î¶¯ÖУ¬¹ýÌì²»´¦Àí!openServerDay=%s,awardEndOpenServerDay=%s" % (openServerDay, awardEndOpenServerDay))  | 
|         if OSCBillAward_IsAutoMail:  | 
|             __DoOSCBillAward_OnDayAutoGet(curPlayer, openServerDay)  | 
|         return False  | 
|       | 
|     endMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_EndMailState)  | 
|     if endMailState:  | 
|         GameWorld.DebugLog("ÒѾ´¦Àí¹ý¿ª·þ»î¶¯½±Àø²¹·¢£¡")  | 
|         return True  | 
|       | 
|     billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)  | 
|     GameWorld.DebugLog("´¦Àí¿ª·þ»î¶¯²¹·¢Óʼþ, billAwardRecord=%s" % billAwardRecord, curPlayer.GetPlayerID())  | 
|       | 
|     sendMailCampTypeList = []  | 
|     for campType in ShareDefine.Def_Campaign_Type_List:  | 
|         if not billAwardRecord & pow(2, campType):  | 
|             sendMailCampTypeList.append(campType)  | 
|               | 
|         tagAwardIpyList = GetOSCTagAwardIpyList(campType)  | 
|         for index, tagAwardIpyData in enumerate(tagAwardIpyList):  | 
|             DoGiveOSCTagAward(curPlayer, campType, index, tagAwardIpyData, True)  | 
|               | 
|     GameWorld.DebugLog("    Î´ÁìÈ¡½±ÀøµÄ»î¶¯°ñµ¥Áбí: %s" % sendMailCampTypeList)  | 
|     if sendMailCampTypeList:  | 
|         __SendOSCGameServerQuery(curPlayer, sendMailCampTypeList, True)  | 
|           | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_EndMailState, 1)  | 
|     return True  | 
|   | 
| def __DoOSCBillAward_OnDayAutoGet(curPlayer, openServerDay):  | 
|     ## ÅÅÐн±Àø¹ýÌì×Ô¶¯ÁìÈ¡´¦Àí  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)  | 
|     #GameWorld.DebugLog("¹ýÌìϵͳ×Ô¶¯°ïÍæ¼ÒÁìÈ¡¿ª·þ»î¶¯ÅÅÐн±Àø! billAwardRecord=%s" % billAwardRecord, playerID)  | 
|       | 
|     sendMailCampTypeList = []  | 
|     OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1)  | 
|     for campType in ShareDefine.Def_Campaign_Type_List:  | 
|         campTypeS = str(campType)  | 
|         if campTypeS not in OSCBillboardDataLimitDict:  | 
|             continue  | 
|         endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay]  | 
|         if openServerDay <= endOpenServerDay:  | 
|             #GameWorld.DebugLog("    ¸Ã¿ª·þ»î¶¯»¹Î´½áÊø£¬ÎÞÐè½áË㣡campType=%s,openServerDay=%s <= endOpenServerDay=%s"   | 
|             #                   % (campType, openServerDay, endOpenServerDay), playerID)  | 
|             continue  | 
|         if billAwardRecord & pow(2, campType):  | 
|             #GameWorld.DebugLog("    ¸Ã¿ª·þ»î¶¯ÅÅÐн±ÀøÒѾÁìÈ¡¹ý£¡campType=%s" % (campType), playerID)  | 
|             continue  | 
|         sendMailCampTypeList.append(campType)  | 
|               | 
|     #GameWorld.DebugLog("    Î´ÁìÈ¡½±ÀøµÄ»î¶¯°ñµ¥Áбí: %s" % sendMailCampTypeList, playerID)  | 
|     if sendMailCampTypeList:  | 
|         __SendOSCGameServerQuery(curPlayer, sendMailCampTypeList, True)  | 
|           | 
|     return  | 
|   | 
| def __SendOSCGameServerQuery(curPlayer, campTypeList, isEndMail=False):  | 
|     # ÒÔÏÂΪÐèÒªÏòGameServerÇëÇóÁìÈ¡½±ÀøËùÐèÐÅÏ¢  | 
|     # @param isEndMail: ÊÇ·ñʹÓÃÓʼþ·¢·Å  | 
|     if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_QueryOpenServerAwardState) == 1:  | 
|         #ÒѾÔÚ²éѯÖÐ  | 
|         GameWorld.DebugLog("    ÒѾÔÚ²éѯÖÐ...")  | 
|         return  | 
|     curPlayer.SetDict(ChConfig.Def_PlayerKey_QueryOpenServerAwardState, 1)  | 
|       | 
|     msgListStr = str([campTypeList, isEndMail])  | 
|     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'OpenServerCampaignAward', msgListStr, len(msgListStr))  | 
|     GameWorld.DebugLog("    __SendOSCGameServerQuery campTypeList=%s, isEndMail=%s" % (campTypeList, isEndMail), curPlayer.GetPlayerID())  | 
|     return  | 
|   | 
|   | 
| #// AB 11 ¿ª·þ»î¶¯½±Àø #tagCMOpenServerCampaignAward  | 
| #  | 
| #struct    tagCMOpenServerCampaignAward  | 
| #  | 
| #{  | 
| #    tagHead         Head;  | 
| #    DWORD        CampaignType;        //»î¶¯ÀàÐÍ  | 
| #    BYTE        AwardType;    //½±ÀøÀàÐÍ£¬1-ÅÅÐУ¬2-Ä¿±ê  | 
| #    BYTE        AwardIndex;    //Ä¿±ê½±ÀøË÷Òý£¬ÁìȡĿ±ê½±ÀøÊ±Óã¬Ä¿±êÌõ¼þÔÚÄ¿±ê½±ÀøÁбíÖÐË÷Òý  | 
| #};  | 
| def OnQueryOpenServerCampaignAward(index, clientData, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     campaignType = clientData.CampaignType  | 
|     awardType = clientData.AwardType  | 
|     awardIndex = clientData.AwardIndex # ½±ÀøÎ»  | 
|       | 
|     GameWorld.DebugLog("¿ª·þ»î¶¯Áì½± campaignType=%s,awardType=%s,index=%s" % (campaignType, awardType, awardIndex), curPlayer.GetPlayerID())  | 
|       | 
|     OSCBillboardDataLimitDict = IpyGameDataPY.GetFuncEvalCfg("OSCBillboardOpen", 1)  | 
|     campTypeS = str(campaignType)  | 
|     if campTypeS not in OSCBillboardDataLimitDict:  | 
|         GameWorld.ErrLog("²»´æÔڸÿª·þ»î¶¯ÀàÐÍ,²»¿ÉÁì½±£¡campaignType=%s" % campaignType)  | 
|         return  | 
|     endOpenServerDay = OSCBillboardDataLimitDict[campTypeS][OSC_EndDay]  | 
|     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  | 
|     # Ö»ÏÞÖÆÅÅÐаñ£»Ä¿±ê½±ÀøËæÊ±¿ÉÁìÈ¡  | 
|     if awardType == 1 and openServerDay <= endOpenServerDay:  | 
|         GameWorld.DebugLog("¸Ã¿ª·þ»î¶¯Î´½áÊø£¬ÎÞ·¨Áì½±£¡campaignType=%s,openServerDay=%s <= endOpenServerDay=%s" % (campaignType, openServerDay, endOpenServerDay))  | 
|         return  | 
|       | 
|     awardEndOpenServerDay = IpyGameDataPY.GetFuncCfg("OSCBillboardOpen", 2)  | 
|     if openServerDay > awardEndOpenServerDay:  | 
|         GameWorld.DebugLog("¸Ã¿ª·þ»î¶¯Áì½±ÒѽáÊø£¡campaignType=%s,openServerDay=%s > awardEndOpenServerDay=%s" % (campaignType, openServerDay, awardEndOpenServerDay))  | 
|         return  | 
|       | 
|     # ÅÅÐн±Àø  | 
|     if awardType == 1:  | 
|         if OSCBillAward_IsAutoMail:  | 
|             GameWorld.DebugLog("¿ª·þÅÅÃû½±ÀøÍæ¼Ò²»¿ÉÊÖ¶¯ÁìÈ¡£¡")  | 
|             return  | 
|         __SendOSCGameServerQuery(curPlayer, [campaignType])  | 
|           | 
|     # Ä¿±ê½±Àø  | 
|     elif awardType == 2:  | 
|         tagAwardIpyList = GetOSCTagAwardIpyList(campaignType)  | 
|         if not tagAwardIpyList or awardIndex < 0 or awardIndex >= len(tagAwardIpyList):  | 
|             GameWorld.DebugLog("²»´æÔÚ¸ÃÄ¿±ê½±Àø£¡awardIndex=%s" % (awardIndex))  | 
|             return  | 
|         DoGiveOSCTagAward(curPlayer, campaignType, awardIndex, tagAwardIpyList[awardIndex], False)  | 
|     else:  | 
|         GameWorld.ErrLog("¿ª·þ»î¶¯Áì½±½±ÀøÀàÐÍ´íÎó!²»´æÔÚ:awardType=%s" % awardType)  | 
|         return  | 
|       | 
|     return  | 
|   | 
| def DoGiveOSCTagAward(curPlayer, campaignType, index, tagAwardIpyData, isEndMail=False):  | 
|     ## ¸øÄ¿±ê½±Àø  | 
|       | 
|     tagAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_TagAwardRecord % campaignType)  | 
|     if tagAwardRecord & pow(2, index):  | 
|         GameWorld.DebugLog("    ÒѾÁìÈ¡¹ý¸ÃÄ¿±ê½±Àø, campaignType=%s,awardIndex=%s" % (campaignType, index), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     condition = tagAwardIpyData.GetTagCondition()  | 
|     recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)  | 
|     if recordData < condition:  | 
|         GameWorld.DebugLog("    Î´´ïµ½¸Ã¿ª·þ»î¶¯Ä¿±êÌõ¼þ½±Àø£¡campaignType=%s,index=%s,recordData=%s < condition=%s"   | 
|                            % (campaignType, index, recordData, condition), curPlayer.GetPlayerID())  | 
|         return  | 
|       | 
|     tagAwardDict = tagAwardIpyData.GetTagAward()  | 
|     job = str(curPlayer.GetJob())  | 
|     if job not in tagAwardDict:  | 
|         GameWorld.ErrLog("ûÓÐÅäÖøÃÖ°Òµ¶ÔÓ¦µÄ¿ª·þ»î¶¯Ä¿±ê½±Àø!campaignType=%s,job=%s" % (campaignType, job))  | 
|         return  | 
|     giveItemList = tagAwardDict[job]  | 
|       | 
|     updAwardRecord = tagAwardRecord|pow(2, index)  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_TagAwardRecord % campaignType, updAwardRecord)  | 
|       | 
|     GameWorld.DebugLog("    ·¢·Å»î¶¯Ä¿±ê½±Àø, campaignType=%s,index=%s,condition=%s,recordData=%s,updAwardRecord=%s,giveItemList=%s"   | 
|                        % (campaignType, index, condition, recordData, updAwardRecord, giveItemList), curPlayer.GetPlayerID())  | 
|       | 
|     drDict = {"CampaignType":campaignType, "Index":index}  | 
|     mailTypeKey = "OSCTagAward%s" % campaignType  | 
|     mailParamList = [condition]  | 
|     __DoGiveOSCAwardItem(curPlayer, giveItemList, drDict, isEndMail, mailTypeKey, mailParamList)  | 
|       | 
|     if not isEndMail:  | 
|         Sync_OpenServerCampaignAward(curPlayer, campaignType)  | 
|           | 
|     return  | 
|   | 
| def DoGiveOSCBillAward(curPlayer, awardResultList):  | 
|     ## ¸øÅÅÐн±Àø  | 
|     campTypeList, isEndMail, queryResultList = awardResultList  | 
|     if len(campTypeList) != len(queryResultList):  | 
|         return  | 
|       | 
|     job = str(curPlayer.GetJob())  | 
|     for i, campaignType in enumerate(campTypeList):  | 
|         billAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord)  | 
|         if billAwardRecord & pow(2, campaignType):  | 
|             GameWorld.DebugLog("    ÒѾÁìÈ¡¹ý¸ÃÅÅÐл½±Àø, campaignType=%s" % (campaignType), curPlayer.GetPlayerID())  | 
|             continue  | 
|           | 
|         order = queryResultList[i]  | 
|         billAwardInfo = None  | 
|         billRankAwardIpyList = IpyGameDataPY.GetIpyGameDataList("OSCBillRankAward", campaignType)  | 
|         if not billRankAwardIpyList:  | 
|             continue  | 
|         for billRankIpyData in billRankAwardIpyList:  | 
|             if (billRankIpyData.GetRankA() <= order <= billRankIpyData.GetRankB()) \  | 
|                 or (not billRankIpyData.GetRankB() and billRankIpyData.GetRankA() == order):  | 
|                 billAwardInfo = billRankIpyData.GetRankAward()  | 
|                 break  | 
|               | 
|         if not billAwardInfo:  | 
|             GameWorld.DebugLog("    Íæ¼ÒÃû´ÎûÓн±Àø£¡campaignType=%s,order=%s" % (campaignType, order), curPlayer.GetPlayerID())  | 
|             continue  | 
|           | 
|         billAwardDict = billAwardInfo  | 
|         if job not in billAwardDict:  | 
|             GameWorld.ErrLog("ûÓÐÅäÖøÃÖ°Òµ¶ÔÓ¦µÄ¿ª·þ»î¶¯°ñµ¥½±Àø!campaignType=%s,job=%s" % (campaignType, job))  | 
|             continue  | 
|         awardItemList = billAwardDict[job]  | 
|           | 
|         updBillAwardRecord = billAwardRecord|pow(2, campaignType)  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_BillAwardRecord, updBillAwardRecord)  | 
|         GameWorld.DebugLog("    ·¢·Å»î¶¯°ñµ¥½±Àø,campaignType=%s,order=%s,awardItemList=%s,updBillAwardRecord=%s"   | 
|                            % (campaignType, order, awardItemList, updBillAwardRecord), curPlayer.GetPlayerID())  | 
|           | 
|         drDict = {"CampaignType":campaignType, "Order":order}  | 
|         mailTypeKey = "OSCBillAward%s" % campaignType  | 
|         mailParamList = [order]  | 
|         __DoGiveOSCAwardItem(curPlayer, awardItemList, drDict, isEndMail, mailTypeKey, mailParamList)  | 
|         #ºì°ü½±Àø  | 
|         redPacketIDDict = IpyGameDataPY.GetFuncEvalCfg('OSCRankRedpackAward', 1, {})  | 
|         redPacketID = GameWorld.GetDictValueByRangeKey(redPacketIDDict, order, 0)  | 
|         if redPacketID:  | 
|             PlayerFamilyRedPacket.CreatRedPacketByID(curPlayer, redPacketID)  | 
|         #if not isEndMail:  | 
|         Sync_OpenServerCampaignAward(curPlayer, campaignType)  | 
|     return  | 
|   | 
| def __DoGiveOSCAwardItem(curPlayer, giveItemList, drDict, isEndMail, mailTypeKey, mailParamList):  | 
|     ## ¸ø¿ª·þ»î¶¯½±Àø [[itemID, itemCount], ...], Ä¬ÈÏ°ó¶¨  | 
|     if not giveItemList:  | 
|         return  | 
|       | 
|     isMail = False  | 
|     needSpace = len(giveItemList)  | 
|     if isEndMail or ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) < needSpace:  | 
|         isMail = True  | 
|           | 
|     if isMail:  | 
|         mailItemList = []  | 
|         for itemInfo in giveItemList:  | 
|             itemID, itemCount = itemInfo[:2]  | 
|             isBind = itemInfo[2] if len(itemInfo) > 2 else 1  | 
|             mailItemList.append([itemID, itemCount, isBind])  | 
|         PlayerControl.SendMailByKey(mailTypeKey, [curPlayer.GetPlayerID()], mailItemList, mailParamList)  | 
|           | 
|     else:  | 
|         for itemInfo in giveItemList:  | 
|             itemID, itemCount = itemInfo[:2]  | 
|             isBind = itemInfo[2] if len(itemInfo) > 2 else 1  | 
|             ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem],   | 
|                                          event=[ChConfig.ItemGive_OpenServerCampaign, True, drDict])  | 
|     return  | 
|   | 
|   | 
| def Sync_OpenServerCampaignAward(curPlayer, campaignType=None):  | 
|     ## Í¨Öª¿ª·þ»î¶¯½±ÀøÐÅÏ¢  | 
|       | 
|     syncOSCTypeList = [campaignType] if campaignType != None else ShareDefine.Def_Campaign_Type_List  | 
|       | 
|     oscAwardListPack = ChPyNetSendPack.tagMCOpenServerCampaignAwardList()  | 
|     oscAwardListPack.Clear()  | 
|     oscAwardListPack.OSCAwardList = []  | 
|       | 
|     for syncOSCType in syncOSCTypeList:  | 
|         oscAward = ChPyNetSendPack.tagMCOpenServerCampaignAward()  | 
|         oscAward.Clear()  | 
|         oscAward.CampaignType = syncOSCType  | 
|         oscAward.BillAwardRecord = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord) & pow(2, syncOSCType) else 0  | 
|         oscAward.TagAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_TagAwardRecord % syncOSCType)  | 
|         oscAward.RecordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % syncOSCType)  | 
|         oscAwardListPack.OSCAwardList.append(oscAward)  | 
|           | 
|     oscAwardListPack.OSCAwardCnt = len(oscAwardListPack.OSCAwardList)  | 
|     NetPackCommon.SendFakePack(curPlayer, oscAwardListPack)  | 
|     return  | 
|   | 
| def UpdOpenServerCampaignLingGenData(curPlayer):  | 
|     # ¼Ç¼¿ª·þ»î¶¯Êý¾Ý  | 
|     totalLingGen = curPlayer.GetFreePoint() + PlayerControl.GetMetal(curPlayer) + PlayerControl.GetWood(curPlayer) + \  | 
|                     PlayerControl.GetWater(curPlayer) + PlayerControl.GetFire(curPlayer) + PlayerControl.GetEarth(curPlayer)  | 
|     #GameWorld.DebugLog("×ÜÁé¸ù: %s" % totalLingGen)  | 
|     UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_LingGen, totalLingGen)  | 
|     return  | 
|   |