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