#!/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  
 | 
  
 | 
(  
 | 
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))  
 | 
        return False  
 | 
      
 | 
    endMailState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_EndMailState)  
 | 
    if endMailState:  
 | 
        GameWorld.DebugLog("ÒѾ´¦Àí¹ý¿ª·þ»î¶¯½±Àø²¹·¢£¡")  
 | 
        return True  
 | 
      
 | 
    for campType in ShareDefine.Def_Campaign_Type_List:  
 | 
        tagAwardIpyList = GetOSCTagAwardIpyList(campType)  
 | 
        for index, tagAwardIpyData in enumerate(tagAwardIpyList):  
 | 
            DoGiveOSCTagAward(curPlayer, campType, index, tagAwardIpyData, True)  
 | 
              
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_EndMailState, 1)  
 | 
    return True  
 | 
  
 | 
#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:  
 | 
        # ×Ô¶¯·¢·Å£¬²»¿ÉÊÖ¶¯ÁìÈ¡  
 | 
        return  
 | 
      
 | 
    # Ä¿±ê½±Àø  
 | 
    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):  
 | 
    ## ¸øÅÅÐн±Àø  
 | 
    return  
 | 
#    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  
 | 
  
 |