| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Player.PlayerFeastWeekParty  | 
| #  | 
| # @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 DataRecordPack  | 
| import PlayerGodWeapon  | 
| import NetPackCommon  | 
| import ShareDefine  | 
| import PyGameData  | 
| import ItemCommon  | 
|   | 
|   | 
| def OnLogin(curPlayer):  | 
|     isReset = __CheckPlayerFeastWeekPartyAction(curPlayer)  | 
|     if not isReset:  | 
|         actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})  | 
|         # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢  | 
|         SyncFeastWeekPartyInfo(curPlayer)  | 
|         if actCostRebateInfo.get(ShareDefine.ActKey_State):  | 
|             SyncFeastWeekPartyPlayerInfo(curPlayer)  | 
|     return  | 
|   | 
|   | 
| def RefreshOperationAction_FeastWeekParty():  | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in xrange(playerManager.GetPlayerCount()):  | 
|         curPlayer = playerManager.GetPlayerByIndex(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|         __CheckPlayerFeastWeekPartyAction(curPlayer)  | 
|     return  | 
|   | 
|   | 
| def __CheckPlayerFeastWeekPartyAction(curPlayer):  | 
|     ## ¼ì²éÍæ¼Ò½ÚÈÕѲÀñ»î¶¯Êý¾ÝÐÅÏ¢  | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})  | 
|     #FeastWeekPartyID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_ID, 0)  | 
|     state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  | 
|     cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  | 
|     passlv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV)  | 
|     if state:  | 
|         #ÿÌì¶¼Òª´¥·¢  | 
|         AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Tower, passlv, False, True, False)  | 
|         AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Login, 1, False, False)  | 
|         AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, Operate_EquipStone.GetTotalStoneLV(curPlayer), False, True, False)  | 
|         AddFeastWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_GodWeapon, PlayerGodWeapon.GetGodWeaponTotalLV(curPlayer), False, True, False)  | 
|         SyncFeastWeekPartyPlayerInfo(curPlayer)  | 
|     playerFeastWeekPartyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyID, 0, ChConfig.Def_PDictType_FeastWeekParty)  # Íæ¼ÒÉíÉϵĻID  | 
|     # »î¶¯ID ÏàͬµÄ»°²»´¦Àí  | 
|     if cfgID == playerFeastWeekPartyID:  | 
|         #GameWorld.DebugLog("½ÚÈÕѲÀñ»î¶¯ID²»±ä£¬²»´¦Àí£¡", curPlayer.GetPlayerID())  | 
|         return  | 
|     CheckFeastWeekPartyActionCnt(curPlayer)  | 
|     # Î´ÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å  | 
|     if playerFeastWeekPartyID:  | 
|         __SendFeastWeekPartyMail(curPlayer, playerFeastWeekPartyID)  | 
|       | 
|     if not cfgID:  | 
|         GameWorld.DebugLog('    ½ÚÈÕѲÀñ»î¶¯ÖØÖÃ!')  | 
|         curPlayer.ClearNomalDict(ChConfig.Def_PDictType_FeastWeekParty)  | 
|       | 
|     GameWorld.DebugLog("½ÚÈÕѲÀñ±ä¸ü! state=%s,cfgID=%s,playerFeastWeekPartyID=%s" % (state, cfgID, playerFeastWeekPartyID), playerID)  | 
|       | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyID, cfgID, ChConfig.Def_PDictType_FeastWeekParty)  | 
|           | 
|     SyncFeastWeekPartyInfo(curPlayer)  | 
|     return True  | 
|   | 
|   | 
| def __SendFeastWeekPartyMail(curPlayer, cfgID):  | 
|     # Î´ÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å  | 
|     actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", 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('FeastWeekParty', tid)  | 
|             if not ipyData:  | 
|                 continue  | 
|             singleTimes = ipyData.GetSingleTimes()  | 
|             curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (day, tid), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|             gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, tid), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|             canGotCnt = (curTimes - gotTimes) / singleTimes  | 
|             if not canGotCnt:  | 
|                 continue  | 
|             itemDict = __GetAwardItem(curPlayer, ipyData, canGotCnt)  | 
|             GameWorld.AddDictValue(totalItemDict, itemDict)  | 
|     #»ý·Ö½±Àø  | 
|     for day, awardDict in actBossIpyData.GetPointAward().items():  | 
|         pointList = awardDict.keys()  | 
|         pointList.sort()  | 
|         for i, point in enumerate(pointList):  | 
|             curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % day, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|             if curPoint < point:  | 
|                 continue  | 
|             awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|             if awardRecord & pow(2, i):  | 
|                 continue  | 
|             itemList = awardDict[point]  | 
|             for itemID, itemCnt, isBind in itemList:  | 
|                 totalItemDict[itemID] = totalItemDict.get(itemID, 0) + itemCnt  | 
|             DataRecordPack.DR_FeastWeekPartyPoint(curPlayer, day, point)  | 
|     if not totalItemDict:  | 
|         return  | 
|     totalItemList = [[itemID, itemCnt, 1] for itemID, itemCnt in totalItemDict.items()]  | 
|     PlayerControl.SendMailByKey('SecondWeekReward2', [curPlayer.GetID()], totalItemList)  | 
|     return  | 
|   | 
|   | 
| def AddFeastWeekPartyActionCnt(curPlayer, actionID, addCnt=1, isAdd=True, isCompatible=False, isSync=True):  | 
|     '''Ôö¼Ó½ÚÈÕѲÀñÏà¹Ø»î¶¯Íê³É´ÎÊý'''  | 
|     #ÅжϻÊÇ·ñ¿ªÆô  | 
|     if not addCnt:  | 
|         return  | 
|     actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})  | 
|     state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  | 
|     cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  | 
|       | 
|     if not cfgID:  | 
|         return  | 
|     if not state and actionID not in ChConfig.AheadFinishWPActList:  | 
|         return  | 
|     actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)  | 
|     if not actBossIpyData:  | 
|         return  | 
|     templateIDList = actBossIpyData.GetTemplateID()  | 
|     dayIndex = actFeastWeekPartyInfo.get(ShareDefine.ActKey_DayIndex, 0)  | 
|     if dayIndex >= len(templateIDList):  | 
|         return  | 
|     if actionID in ChConfig.AheadFinishWPActList:  | 
|         isFind = False  | 
|         for day, dayTidList in enumerate(templateIDList[dayIndex:]):  | 
|             findTid = 0  | 
|             for tid in dayTidList:  | 
|                 if tid / 100 == actionID:  | 
|                     findTid = tid  | 
|                     break  | 
|             if not findTid:  | 
|                 continue  | 
|             ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', findTid)  | 
|             if not ipyData:  | 
|                 continue  | 
|             totalTimes = ipyData.GetTotalTimes()  | 
|             if addCnt != totalTimes:  | 
|                 continue  | 
|             dayIndex = day + dayIndex  | 
|             isFind = True  | 
|             break  | 
|         if not isFind:  | 
|             return  | 
|       | 
|     dayTidList = templateIDList[dayIndex]  | 
|     findTid = 0  | 
|     for tid in dayTidList:  | 
|         if tid / 100 == actionID:  | 
|             findTid = tid  | 
|             break  | 
|     if not findTid:  | 
|         return  | 
|     ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', findTid)  | 
|     if not ipyData:  | 
|         return  | 
|     totalTimes = ipyData.GetTotalTimes()  | 
|     curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (dayIndex, findTid), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     if isAdd:  | 
|         addCnt = addCnt if totalTimes == 0 else min(totalTimes - curTimes, addCnt)  | 
|         if addCnt <= 0:  | 
|             return  | 
|         updTimes = curTimes + addCnt  | 
|     else:  | 
|         if not isCompatible and addCnt != totalTimes:  | 
|             return  | 
|         updTimes = min(addCnt, totalTimes)  | 
|     realAddCnt = updTimes - curTimes  | 
|     if realAddCnt <= 0:  | 
|         return  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyCurTimes % (dayIndex, findTid), updTimes, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     #¼Ó»ý·Ö  | 
|     singleTimes = ipyData.GetSingleTimes()  | 
|     addPoint = (curTimes % singleTimes + realAddCnt)/singleTimes* ipyData.GetPoint()  | 
|     curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % dayIndex, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     updPoint = curPoint + addPoint  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastWeekPartyPoint % dayIndex, updPoint, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     GameWorld.DebugLog('   Ôö¼Ó½ÚÈÕѲÀñÏà¹Ø»î¶¯Íê³É´ÎÊý dayIndex=%s, findTid=%s, realAddCnt=%s,addPoint=%s' % (dayIndex, findTid, realAddCnt, addPoint))  | 
|     if isSync:  | 
|         SyncFeastWeekPartyPlayerInfo(curPlayer, dayIndex, findTid)  | 
|     return True  | 
|   | 
|   | 
| def CheckFeastWeekPartyActionCnt(curPlayer):  | 
|     ipyDataMgr = IpyGameDataPY.IPY_Data()  | 
|     for actionType in ChConfig.AheadFinishWPActList:  | 
|         if actionType == ChConfig.Def_WPAct_Horse:  | 
|             for i in xrange(ipyDataMgr.GetHorseCount()):  | 
|                 ipyData = ipyDataMgr.GetHorseByIndex(i)  | 
|                 index = ipyData.GetHorseID()  | 
|                 lv = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_Horser_LV % index, 0, ChConfig.Def_PDictType_Horse)  | 
|                 if lv:  | 
|                     AddFeastWeekPartyActionCnt(curPlayer, actionType, index, False)  | 
|         elif actionType == ChConfig.Def_WPAct_Pet:  | 
|             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)  | 
|                 AddFeastWeekPartyActionCnt(curPlayer, actionType, petNPCID, False)  | 
|         elif actionType == ChConfig.Def_WPAct_Dogz:  | 
|             for i in xrange(ipyDataMgr.GetDogzCount()):  | 
|                 ipyData = ipyDataMgr.GetDogzByIndex(i)  | 
|                 if GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_DogzFightState, i):  | 
|                     AddFeastWeekPartyActionCnt(curPlayer, actionType, ipyData.GetDogzID(), False)  | 
|         elif actionType == ChConfig.Def_WPAct_Rune:  | 
|             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()  | 
|                 AddFeastWeekPartyActionCnt(curPlayer, actionType, itemColor, False)  | 
|     return  | 
|   | 
| def GetFeastWeekPartyActionAward(curPlayer, day, templateID):  | 
|     '''ÁìÈ¡½ÚÈÕѲÀñ»î¶¯½±Àø'''  | 
|     templateID = GameWorld.ToIntDef(templateID, 0)  | 
|     ipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', templateID)  | 
|     if not ipyData:  | 
|         return  | 
|     singleTimes = ipyData.GetSingleTimes()  | 
|     curTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (day, templateID), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     gotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (day, templateID), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     if curTimes - gotTimes < singleTimes:  | 
|         return  | 
|       | 
|     #¸ø½±Àø  | 
|     awardDict = __GetAwardItem(curPlayer, ipyData)  | 
|     # ¼ì²é±³°ü  | 
|     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_FeastWeekPartyGotTimes % (day, templateID), newGotTimes, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     for itemID, itemCnt in awardDict.items():  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])  | 
|     SyncFeastWeekPartyPlayerInfo(curPlayer, day, templateID)  | 
|     return  | 
|   | 
|   | 
| def GetFeastWeekPartyPointAward(curPlayer, day, getPoint):  | 
|     ##ÁìÈ¡½ÚÈÕѲÀñ»ý·Ö½±Àø  | 
|     getPoint = GameWorld.ToIntDef(getPoint, 0)  | 
|     actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})  | 
|     state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  | 
|     cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  | 
|     if not state or not cfgID:  | 
|         return  | 
|     actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)  | 
|     if not actBossIpyData:  | 
|         return  | 
|     curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % day, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     if curPoint < getPoint:  | 
|         return  | 
|     pointAwardDict = actBossIpyData.GetPointAward().get(day, {})  | 
|     pointList = pointAwardDict.keys()  | 
|     pointList.sort()  | 
|     if getPoint not in pointList:  | 
|         return  | 
|     getIndex = pointList.index(getPoint)  | 
|     awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % day, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|     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_FeastWeekPartyAwardRecord % day, awardRecord | pow(2, getIndex), ChConfig.Def_PDictType_FeastWeekParty)  | 
|     for itemID, itemCnt, isBind in itemList:  | 
|         ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])  | 
|     SyncFeastWeekPartyPlayerInfo(curPlayer, day)  | 
|     DataRecordPack.DR_FeastWeekPartyPoint(curPlayer, day, getPoint)  | 
|     return  | 
|   | 
|   | 
| def __GetAwardItem(curPlayer, ipyData, times=1):  | 
|     awardDict = {}  | 
|     for itemID, itemCnt, isbind in ipyData.GetReward():  | 
|         if not itemID or not itemCnt:  | 
|             continue  | 
|         awardDict[itemID] = awardDict.get(itemID, 0) + itemCnt * times  | 
|           | 
|     return awardDict  | 
|   | 
|   | 
| def SyncFeastWeekPartyPlayerInfo(curPlayer, day=-1, templateID=-1):  | 
|     #֪ͨµ±Ç°´ÎÊý¡¢ÒÑÁì´ÎÊý   | 
|     actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})  | 
|     state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  | 
|     cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  | 
|     if not state or not cfgID:  | 
|         return  | 
|     actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", 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.tagMCFeastWeekPartyPlayerInfo()  | 
|     packData.DayInfoList = []  | 
|     for cday in syncDayList:  | 
|         tiemInfo = ChPyNetSendPack.tagMCFeastWeekPartyDayPlayerInfo()  | 
|         tiemInfo.DayIndex = cday  | 
|         tiemInfo.Point = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyPoint % cday, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|         tiemInfo.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyAwardRecord % cday, 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|         tiemInfo.TaskList = []  | 
|         for tID in templateIDList[cday]:  | 
|             if templateID != -1 and tID != templateID:  | 
|                 continue  | 
|             tipyData = IpyGameDataPY.GetIpyGameData('FeastWeekParty', tID)  | 
|             if not tipyData:  | 
|                 continue  | 
|             taskInfo = ChPyNetSendPack.tagMCFeastWeekPartyTaskInfo()  | 
|             taskInfo.TemplateID = tID  | 
|             taskInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyCurTimes % (cday, tID), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|             taskInfo.GotTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastWeekPartyGotTimes % (cday, tID), 0, ChConfig.Def_PDictType_FeastWeekParty)  | 
|             tiemInfo.TaskList.append(taskInfo)  | 
|         tiemInfo.ACount = len(tiemInfo.TaskList)  | 
|         packData.DayInfoList.append(tiemInfo)  | 
|     packData.Count = len(packData.DayInfoList)  | 
|     NetPackCommon.SendFakePack(curPlayer, packData)  | 
|     return  | 
|   | 
|   | 
| def SyncFeastWeekPartyInfo(curPlayer):  | 
|     actFeastWeekPartyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastWeekParty, {})  | 
|     state = actFeastWeekPartyInfo.get(ShareDefine.ActKey_State, 0)  | 
|     cfgID = actFeastWeekPartyInfo.get(ShareDefine.ActKey_CfgID, 0)  | 
|     if not cfgID:  | 
|         return  | 
|     actBossIpyData = IpyGameDataPY.GetIpyGameData("ActFeastWeekParty", cfgID)  | 
|     if not actBossIpyData:  | 
|         return  | 
|     templateIDList = actBossIpyData.GetTemplateID()  | 
|     if not templateIDList:  | 
|         return  | 
|     pointAwardDict = actBossIpyData.GetPointAward()  | 
|     actInfo = ChPyNetSendPack.tagMCFeastWeekPartyInfo()  | 
|     actInfo.Clear()  | 
|     actInfo.StartDate = actBossIpyData.GetStartDate()  | 
|     actInfo.EndtDate = actBossIpyData.GetEndDate()  | 
|     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.tagMCFeastWeekPartyDayInfo()  | 
|         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.tagMCFeastWeekPartyItem()  | 
|                 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('FeastWeekParty', tid)  | 
|         if not ipyData:  | 
|             GameWorld.ErrLog('    ½ÚÈÕѲÀñÄ£°å±íÕÒ²»µ½Ä£°å%s' % tid)  | 
|             continue  | 
|         tInfo = ChPyNetSendPack.tagMCFeastWeekPartyAction()  | 
|         tInfo.TemplateID = tid  | 
|         tInfo.ActionType = ipyData.GetActionType()  | 
|         tInfo.TotalTimes = ipyData.GetTotalTimes()  | 
|         tInfo.SingleTimes = ipyData.GetSingleTimes()  | 
|         tInfo.Point = ipyData.GetPoint()  | 
|         tInfo.ItemInfo = []  | 
|         for itemID, itemCnt, isBind in ipyData.GetReward():  | 
|             awardItem = ChPyNetSendPack.tagMCFeastWeekPartyItem()  | 
|             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  |