#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.PlayerWeekParty  
 | 
#  
 | 
# @todo:ÖÜ¿ñ»¶  
 | 
# @author xdh  
 | 
# @date 2018-07-12 16:50  
 | 
# @version 1.0  
 | 
#  
 | 
#  
 | 
# ÏêϸÃèÊö: ÖÜ¿ñ»¶  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2018-07-12 16:50"""  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import IpyGameDataPY  
 | 
import PlayerControl  
 | 
import ItemControler  
 | 
import ChPyNetSendPack  
 | 
import Operate_EquipStone  
 | 
import PlayerFeastWeekParty  
 | 
import DataRecordPack  
 | 
import PlayerGodWeapon  
 | 
import NetPackCommon  
 | 
import ShareDefine  
 | 
import PyGameData  
 | 
import ItemCommon  
 | 
  
 | 
  
 | 
def OnLogin(curPlayer):  
 | 
    isReset = __CheckPlayerWeekPartyAction(curPlayer)  
 | 
    if not isReset:  
 | 
        actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
        # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢  
 | 
        SyncWeekPartyInfo(curPlayer)  
 | 
        if actCostRebateInfo.get(ShareDefine.ActKey_State):  
 | 
            AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, False)  
 | 
            SyncWeekPartyPlayerInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
def RefreshOperationAction_WeekParty():  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    for i in xrange(playerManager.GetPlayerCount()):  
 | 
        curPlayer = playerManager.GetPlayerByIndex(i)  
 | 
        if curPlayer == None or not curPlayer.GetInitOK():  
 | 
            continue  
 | 
        __CheckPlayerWeekPartyAction(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
def __CheckPlayerWeekPartyAction(curPlayer):  
 | 
    ## ¼ì²éÍæ¼ÒÖÜ¿ñ»¶»î¶¯Êý¾ÝÐÅÏ¢  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
      
 | 
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    actID = actWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)  
 | 
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  
 | 
    playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyActID, 0, ChConfig.Def_PDictType_WeekParty)  # Íæ¼ÒÉíÉϵĻID  
 | 
    playerWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyID, 0, ChConfig.Def_PDictType_WeekParty)  # Íæ¼ÒÉíÉϵĻÅäÖÃID  
 | 
    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)  # Íæ¼ÒÉíÉϵĻÊÀ½çµÈ¼¶  
 | 
    # »î¶¯ID ÏàͬµÄ»°²»´¦Àí  
 | 
    if actID == playerActID:  
 | 
        GameWorld.DebugLog("ÖÜ¿ñ»¶»î¶¯ID²»±ä£¬²»´¦Àí£¡playerActID=%s" % playerActID, curPlayer.GetPlayerID())  
 | 
        if state:  
 | 
            CheckWeekPartyActionCnt(curPlayer, True)  
 | 
        return  
 | 
    # Î´ÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å  
 | 
    if playerWeekPartyID:  
 | 
        __SendWeekPartyMail(curPlayer, playerWeekPartyID, playerWorldLV)  
 | 
          
 | 
    GameWorld.DebugLog('ÖÜ¿ñ»¶»î¶¯ÖØÖÃ!')  
 | 
    curPlayer.ClearNomalDict(ChConfig.Def_PDictType_WeekParty)  
 | 
      
 | 
    worldLV = actWeekPartyInfo.get(ShareDefine.ActKey_WorldLV, 0)  
 | 
    GameWorld.DebugLog("ÖÜ¿ñ»¶±ä¸ü! state=%s,actID=%s,cfgID=%s,playerWeekPartyID=%s,worldLV=%s" % (state, actID, cfgID, playerWeekPartyID, worldLV), playerID)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyActID, actID, ChConfig.Def_PDictType_WeekParty)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyID, cfgID, ChConfig.Def_PDictType_WeekParty)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyWorldLV, worldLV, ChConfig.Def_PDictType_WeekParty)  
 | 
    if state:  
 | 
        CheckWeekPartyActionCnt(curPlayer,  False)  
 | 
        SyncWeekPartyInfo(curPlayer)  
 | 
        SyncWeekPartyPlayerInfo(curPlayer)  
 | 
          
 | 
    return True  
 | 
  
 | 
def __SendWeekPartyMail(curPlayer, cfgID, playerWorldLV):  
 | 
    # Î´ÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å  
 | 
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)  
 | 
    if not actBossIpyData:  
 | 
        return  
 | 
    templateIDList = actBossIpyData.GetTemplateID()  
 | 
    if not templateIDList:  
 | 
        return  
 | 
      
 | 
    totalItemDict = {}  
 | 
    for day, tidList in enumerate(templateIDList):  
 | 
        for tid in tidList:  
 | 
            ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tid)  
 | 
            if not ipyData:  
 | 
                continue  
 | 
            singleTimes = ipyData.GetSingleTimes()  
 | 
            curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (day, tid), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (day, tid), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            canGotCnt = (curTimes - gotTimes) / singleTimes  
 | 
            if not canGotCnt:  
 | 
                continue  
 | 
            itemDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV, canGotCnt)  
 | 
            GameWorld.AddDictValue(totalItemDict, itemDict)  
 | 
    #»ý·Ö½±Àø  
 | 
    pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), playerWorldLV)  
 | 
    for day, awardDict in pointAwardInfo.items():  
 | 
        pointList = awardDict.keys()  
 | 
        pointList.sort()  
 | 
        for i, point in enumerate(pointList):  
 | 
            curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            if curPoint < point:  
 | 
                continue  
 | 
            awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            if awardRecord & pow(2, i):  
 | 
                continue  
 | 
            itemList = awardDict[point]  
 | 
            for itemID, itemCnt, isBind in itemList:  
 | 
                totalItemDict[itemID] = totalItemDict.get(itemID, 0) + itemCnt  
 | 
            DataRecordPack.DR_WeekPartyPoint(curPlayer, day, point)  
 | 
    if not totalItemDict:  
 | 
        return  
 | 
    totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]  
 | 
    PlayerControl.SendMailByKey('SecondWeekReward', [curPlayer.GetID()], totalItemList)  
 | 
    return  
 | 
  
 | 
def __GetPointAwardInfo(cfgPointAwardInfo, worldLV):  
 | 
    return GameWorld.GetDictValueByRangeKey(cfgPointAwardInfo, worldLV, {})  
 | 
  
 | 
def AddWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):  
 | 
    '''Ôö¼ÓÖÜ¿ñ»¶Ïà¹Ø»î¶¯Íê³É´ÎÊý'''  
 | 
    PlayerFeastWeekParty.AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt, isAdd, isCompatible, isSync)  
 | 
    #ÅжϻÊÇ·ñ¿ªÆô  
 | 
    if not addCnt:  
 | 
        return  
 | 
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  
 | 
      
 | 
    if not cfgID:  
 | 
        return  
 | 
    if not state:  
 | 
        return  
 | 
      
 | 
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)  
 | 
    if not actBossIpyData:  
 | 
        return  
 | 
    templateIDList = actBossIpyData.GetTemplateID()  
 | 
    dayIndex = actWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)  
 | 
    if dayIndex >= len(templateIDList):  
 | 
        return  
 | 
    if actionID in [ChConfig.Def_WPAct_Login]:  
 | 
        addDayIndexList = [dayIndex]  
 | 
    else:  
 | 
        addDayIndexList = range(dayIndex + 1)  
 | 
    for dayIndex in addDayIndexList:  
 | 
        dayTidList = templateIDList[dayIndex]  
 | 
        findTidList = []  
 | 
        for tid in dayTidList:  
 | 
            if tid / 100 == actionID:  
 | 
                findTidList.append(tid)  
 | 
        if not findTidList:  
 | 
            continue  
 | 
        for findTid in findTidList:  
 | 
            ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', findTid)  
 | 
            if not ipyData:  
 | 
                continue  
 | 
            totalTimes = ipyData.GetTotalTimes()  
 | 
            curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            if isAdd:  
 | 
                curAddCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)  
 | 
                if curAddCnt <= 0:  
 | 
                    continue  
 | 
                updTimes = curTimes + curAddCnt  
 | 
            else:  
 | 
                if not isCompatible and addCnt != totalTimes:  
 | 
                    continue  
 | 
                updTimes = min(addCnt, totalTimes)  
 | 
            realAddCnt = updTimes - curTimes  
 | 
            if realAddCnt <= 0:  
 | 
                continue  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_WeekParty)  
 | 
            #¼Ó»ý·Ö  
 | 
            singleTimes = ipyData.GetSingleTimes()  
 | 
            addPoint = (curTimes % singleTimes + realAddCnt) / singleTimes * ipyData.GetPoint()  
 | 
            curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            updPoint = curPoint + addPoint  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_WeekParty)  
 | 
            GameWorld.DebugLog('   Ôö¼ÓÖÜ¿ñ»¶Ïà¹Ø»î¶¯Íê³É´ÎÊý dayIndex=%s, findTid=%s, curTimes=%s, updTimes=%s, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, curTimes, updTimes, realAddCnt, addPoint))  
 | 
            if isSync:  
 | 
                SyncWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)  
 | 
    return True  
 | 
  
 | 
def CheckWeekPartyActionCnt(curPlayer, isSync):  
 | 
    ## Í¬²½»î¶¯×´Ì¬Ê±ÐèÒª´¥·¢µÄ  
 | 
      
 | 
    # Áé³è¼¤»î  
 | 
    petDataPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptPet)  
 | 
    for petDataIndex in range(petDataPack.GetCount()):  
 | 
        petItem = petDataPack.GetAt(petDataIndex)  
 | 
        if petItem.IsEmpty():  
 | 
            continue  
 | 
        petNPCID = petItem.GetUserAttr(ShareDefine.Def_IudetPet_NPCID)  
 | 
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Pet, petNPCID, False, isSync=isSync)  
 | 
          
 | 
    # ³öÕ½ÉñÊÞ  
 | 
    ipyDataMgr = IpyGameDataPY.IPY_Data()  
 | 
    for i in xrange(ipyDataMgr.GetDogzCount()):  
 | 
        ipyData = ipyDataMgr.GetDogzByIndex(i)  
 | 
        if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):  
 | 
            AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Dogz, ipyData.GetDogzID(), False, isSync=isSync)  
 | 
              
 | 
    # ´©´÷ijƷÖÊ·ûÓ¡  
 | 
    runeHoleCnt = IpyGameDataPY.GetFuncCfg("RuneUnlock", 4)  
 | 
    for holeNum in xrange(1, runeHoleCnt + 1):  
 | 
        runeData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Rune_Data % holeNum, 0)  
 | 
        if not runeData:  
 | 
            continue  
 | 
        runeItemID = ItemControler.GetRuneItemID(runeData)  
 | 
        itemData = GameWorld.GetGameData().GetItemByTypeID(runeItemID)  
 | 
        if not itemData:  
 | 
            continue  
 | 
        itemColor = itemData.GetItemColor()  
 | 
        AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Rune, itemColor, False, isSync=isSync)  
 | 
          
 | 
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False, isSync)  
 | 
    passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)  
 | 
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, isSync)  
 | 
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, isSync)  
 | 
    AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, isSync)  
 | 
    return  
 | 
  
 | 
def GetWeekPartyActionAward(curPlayer, day, templateID):  
 | 
    '''ÁìÈ¡ÖÜ¿ñ»¶»î¶¯½±Àø'''  
 | 
    templateID = GameWorld.ToIntDef(templateID, 0)  
 | 
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  
 | 
    if not state or not cfgID:  
 | 
        return  
 | 
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)  
 | 
    if not actBossIpyData:  
 | 
        return  
 | 
    templateIDList = actBossIpyData.GetTemplateID()  
 | 
    if not templateIDList:  
 | 
        return  
 | 
    if day >= len(templateIDList):  
 | 
        return  
 | 
    dayTempIDList = templateIDList[day]  
 | 
    if templateID not in dayTempIDList:  
 | 
        return  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', templateID)  
 | 
    if not ipyData:  
 | 
        return  
 | 
    singleTimes = ipyData.GetSingleTimes()  
 | 
    curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (day, templateID), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    if curTimes - gotTimes < singleTimes:  
 | 
        return  
 | 
      
 | 
    #¸ø½±Àø  
 | 
    playerWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    awardDict = __GetAwardItem(curPlayer, ipyData, playerWorldLV)  
 | 
    # ¼ì²é±³°ü  
 | 
    needSpace = len(awardDict)  
 | 
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  
 | 
    if needSpace > packSpace:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  
 | 
        return  
 | 
    #¸üдÎÊý Ã¿´ÎÁì½±Ö»ÁìÒ»´Î  
 | 
    newGotTimes = gotTimes + singleTimes  
 | 
      
 | 
    #GameWorld.Log('  actionID=%s,curTimes=%s,gotTimes=%s,singleTimes=%s,newGotTimes=%s'%(actionID, curTimes, gotTimes,singleTimes, newGotTimes))  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_WeekParty)  
 | 
    for itemID, itemCnt in awardDict.items():  
 | 
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])  
 | 
    SyncWeekPartyPlayerInfo(curPlayer, day, templateID)  
 | 
    return  
 | 
  
 | 
  
 | 
def GetWeekPartyPointAward(curPlayer, day, getPoint):  
 | 
    ##ÁìÈ¡ÖÜ¿ñ»¶»ý·Ö½±Àø  
 | 
    getPoint = GameWorld.ToIntDef(getPoint, 0)  
 | 
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  
 | 
    if not state or not cfgID:  
 | 
        return  
 | 
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)  
 | 
    if not actBossIpyData:  
 | 
        return  
 | 
    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % day, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    if curPoint < getPoint:  
 | 
        return  
 | 
    worldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    pointAwardInfo = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)  
 | 
    pointAwardDict = pointAwardInfo.get(day, {})  
 | 
    pointList = pointAwardDict.keys()  
 | 
    pointList.sort()  
 | 
    if getPoint not in pointList:  
 | 
        return  
 | 
    getIndex = pointList.index(getPoint)  
 | 
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    if awardRecord & pow(2, getIndex):  
 | 
        GameWorld.Log(' ÁìÈ¡ÖÜ¿ñ»¶»ý·Ö½±Àø£¬ ÒÑÁìÈ¡ day=%s, getPoint=%s' % (day, getPoint))  
 | 
        return  
 | 
    itemList = pointAwardDict[getPoint]  
 | 
    needSpace = len(itemList)  
 | 
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  
 | 
    if needSpace > packSpace:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  
 | 
        return  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_WeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_WeekParty)  
 | 
    for itemID, itemCnt, isBind in itemList:  
 | 
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])  
 | 
    SyncWeekPartyPlayerInfo(curPlayer, day)  
 | 
    DataRecordPack.DR_WeekPartyPoint(curPlayer, day, getPoint)  
 | 
    return  
 | 
  
 | 
  
 | 
def __GetAwardItem(curPlayer, ipyData, worldLV, times=1):  
 | 
    awardDict = {}  
 | 
    awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)  
 | 
    for itemID, itemCnt, isbind in awardItemList:  
 | 
        if not itemID or not itemCnt:  
 | 
            continue  
 | 
        awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times  
 | 
          
 | 
    return awardDict  
 | 
  
 | 
def __GetAwardItemListByJob(curPlayer, rewardItemInfo, worldLV):  
 | 
    ## ¸ù¾ÝÖ°Òµ»ñÈ¡¶ÔÓ¦½±Àø  
 | 
    if not rewardItemInfo:  
 | 
        return []  
 | 
    if isinstance(rewardItemInfo, dict):  
 | 
        keyList = rewardItemInfo.keys()  
 | 
        # ÅäÊÀ½çµÈ¼¶·¶Î§µÄ  
 | 
        if isinstance(keyList[0], tuple) and len(keyList[0]) == 2:  
 | 
            return __GetAwardItemListByJob(curPlayer, GameWorld.GetDictValueByRangeKey(rewardItemInfo, worldLV), worldLV)  
 | 
        return rewardItemInfo.get(curPlayer.GetJob(), [])  
 | 
    return rewardItemInfo  
 | 
  
 | 
def SyncWeekPartyPlayerInfo(curPlayer, day= -1, templateID= -1):  
 | 
    #֪ͨµ±Ç°´ÎÊý¡¢ÒÑÁì´ÎÊý   
 | 
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  
 | 
    if not state or not cfgID:  
 | 
        return  
 | 
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)  
 | 
    if not actBossIpyData:  
 | 
        return  
 | 
    templateIDList = actBossIpyData.GetTemplateID()  
 | 
    if not templateIDList:  
 | 
        return  
 | 
    if day != -1:  
 | 
        if day >= len(templateIDList):  
 | 
            return  
 | 
        syncDayList = [day]  
 | 
    else:  
 | 
        syncDayList = range(len(templateIDList))  
 | 
          
 | 
    packData = ChPyNetSendPack.tagMCWeekPartyPlayerInfo()  
 | 
    packData.DayInfoList = []  
 | 
    for cday in syncDayList:  
 | 
        tiemInfo = ChPyNetSendPack.tagMCWeekPartyDayPlayerInfo()  
 | 
        tiemInfo.DayIndex = cday  
 | 
        tiemInfo.Point = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyPoint % cday, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
        tiemInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyAwardRecord % cday, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
        tiemInfo.TaskList = []  
 | 
        for tID in templateIDList[cday]:  
 | 
            if templateID != -1 and tID != templateID:  
 | 
                continue  
 | 
            tipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tID)  
 | 
            if not tipyData:  
 | 
                continue  
 | 
            taskInfo = ChPyNetSendPack.tagMCWeekPartyTaskInfo()  
 | 
            taskInfo.TemplateID = tID  
 | 
            taskInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyCurTimes % (cday, tID), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            taskInfo.GotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyGotTimes % (cday, tID), 0, ChConfig.Def_PDictType_WeekParty)  
 | 
            tiemInfo.TaskList.append(taskInfo)  
 | 
        tiemInfo.ACount = len(tiemInfo.TaskList)  
 | 
        packData.DayInfoList.append(tiemInfo)  
 | 
    packData.Count = len(packData.DayInfoList)  
 | 
    NetPackCommon.SendFakePack(curPlayer, packData)  
 | 
    return  
 | 
  
 | 
  
 | 
def SyncWeekPartyInfo(curPlayer):  
 | 
    actWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_WeekParty, {})  
 | 
    state = actWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    cfgID = actWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  
 | 
    if not cfgID:  
 | 
        return  
 | 
    actBossIpyData = IpyGameDataPY.GetIpyGameData("ActWeekParty", cfgID)  
 | 
    if not actBossIpyData:  
 | 
        return  
 | 
    templateIDList = actBossIpyData.GetTemplateID()  
 | 
    if not templateIDList:  
 | 
        return  
 | 
    worldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekPartyWorldLV, 0, ChConfig.Def_PDictType_WeekParty)  
 | 
    pointAwardDict = __GetPointAwardInfo(actBossIpyData.GetPointAward(), worldLV)  
 | 
    startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(actBossIpyData)  
 | 
    actInfo = ChPyNetSendPack.tagMCWeekPartyInfo()  
 | 
    actInfo.Clear()  
 | 
    actInfo.StartDate = startDateStr  
 | 
    actInfo.EndtDate = endDateStr  
 | 
    actInfo.AdvanceMinutes = actBossIpyData.GetAdvanceMinutes()  
 | 
    actInfo.IsDayReset = actBossIpyData.GetIsDayReset()  
 | 
    actInfo.ResetType = actBossIpyData.GetResetType()  
 | 
    actInfo.LimitLV = actBossIpyData.GetLVLimit()  
 | 
    actInfo.DayInfoList = []  
 | 
    tidList = []  
 | 
    for day, dayActList in enumerate(templateIDList):  
 | 
        dayInfo = ChPyNetSendPack.tagMCWeekPartyDayInfo()  
 | 
        dayInfo.TemplateList = dayActList  
 | 
        dayInfo.ActCnt = len(dayActList)  
 | 
        for tid in dayActList:  
 | 
            if tid not in tidList:  
 | 
                tidList.append(tid)  
 | 
        dayInfo.PItemInfo = []  
 | 
        for point, itemList in pointAwardDict.get(day, {}).items():  
 | 
            for itemID, itemCnt, isBind in itemList:  
 | 
                awardItem = ChPyNetSendPack.tagMCWeekPartyItem()  
 | 
                awardItem.ItemID = itemID  
 | 
                awardItem.ItemCnt = itemCnt  
 | 
                awardItem.IsBind = isBind  
 | 
                awardItem.NeedPoint = point  
 | 
                dayInfo.PItemInfo.append(awardItem)  
 | 
        dayInfo.PCount = len(dayInfo.PItemInfo)  
 | 
        actInfo.DayInfoList.append(dayInfo)  
 | 
    actInfo.DayCnt = len(actInfo.DayInfoList)  
 | 
    actInfo.ActionInfo = []  
 | 
    for tid in tidList:  
 | 
        ipyData = IpyGameDataPY.GetIpyGameData('WeekParty', tid)  
 | 
        if not ipyData:  
 | 
            GameWorld.ErrLog('    ÖÜ¿ñ»¶Ä£°å±íÕÒ²»µ½Ä£°å%s' % tid)  
 | 
            continue  
 | 
        tInfo = ChPyNetSendPack.tagMCWeekPartyAction()  
 | 
        tInfo.TemplateID = tid  
 | 
        tInfo.ActionType = ipyData.GetActionType()  
 | 
        tInfo.TotalTimes = ipyData.GetTotalTimes()  
 | 
        tInfo.SingleTimes = ipyData.GetSingleTimes()  
 | 
        tInfo.Point = ipyData.GetPoint()  
 | 
        tInfo.ItemInfo = []  
 | 
        awardItemList = __GetAwardItemListByJob(curPlayer, ipyData.GetReward(), worldLV)  
 | 
        for itemID, itemCnt, isBind in awardItemList:  
 | 
            awardItem = ChPyNetSendPack.tagMCWeekPartyItem()  
 | 
            awardItem.ItemID = itemID  
 | 
            awardItem.ItemCnt = itemCnt  
 | 
            awardItem.IsBind = isBind  
 | 
            awardItem.NeedPoint = 0  
 | 
            tInfo.ItemInfo.append(awardItem)  
 | 
        tInfo.Count = len(tInfo.ItemInfo)  
 | 
        actInfo.ActionInfo.append(tInfo)  
 | 
    actInfo.TCount = len(actInfo.ActionInfo)  
 | 
    NetPackCommon.SendFakePack(curPlayer, actInfo)  
 | 
    return  
 |