| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package Player.PlayerFeastRedPacket  | 
| #  | 
| # @todo:½ÚÈÕºì°ü  | 
| # @author hxp  | 
| # @date 2019-01-29  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ½ÚÈÕºì°ü  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2019-01-29 16:00"""  | 
| #-------------------------------------------------------------------------------  | 
|   | 
| import GameWorld  | 
| import PyGameData  | 
| import PlayerControl  | 
| import IpyGameDataPY  | 
| import PlayerSuccess  | 
| import ChPyNetSendPack  | 
| import NetPackCommon  | 
| import ShareDefine  | 
| import ChConfig  | 
|   | 
| def DoPlayerOnLogin(curPlayer):  | 
|     if not GetFeastRedPacketState():  | 
|         return  | 
|     isReset = __CheckPlayerFeastRedPacketAction(curPlayer)  | 
|     if not isReset:  | 
|         Sync_FeastRedPackInfo(curPlayer)  | 
|     return  | 
|   | 
| def RefreshOperationAction_FeastRedPacket():  | 
|     __UpdTodayFeastSuccIDList()  | 
|       | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for i in xrange(playerManager.OnlineCount()):  | 
|         curPlayer = playerManager.OnlineAt(i)  | 
|         if curPlayer == None or not curPlayer.GetInitOK():  | 
|             continue  | 
|         __CheckPlayerFeastRedPacketAction(curPlayer)  | 
|           | 
|     return  | 
|   | 
| def __UpdTodayFeastSuccIDList():  | 
|     feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})  | 
|     state = feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)  | 
|     dayIndex = feastRedPacketInfo.get(ShareDefine.ActKey_DayIndex, 0)  | 
|     if not state:  | 
|         return  | 
|       | 
|     feastDay = dayIndex + 1  | 
|     feastIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActFeastRedPacketSucc", feastDay)  | 
|     if not feastIpyDataList:  | 
|         return  | 
|       | 
|     succIDList = []  | 
|     for feastIpyData in feastIpyDataList:  | 
|         succIDList += list(feastIpyData.GetFeastSuccIDList())  | 
|           | 
|     GameWorld.DebugLog("    ¸üнñÈÕ½ÚÈÕºì°ü³É¾ÍIDÁбí: %s" % succIDList)  | 
|     IpyGameDataPY.SetConfigEx("TodayFeastSuccIDList", succIDList)  | 
|     return  | 
| def GetTodayFeastSuccIDList(): return IpyGameDataPY.GetConfigEx("TodayFeastSuccIDList")  | 
|   | 
| def __CheckPlayerFeastRedPacketAction(curPlayer):  | 
|     ## ¼ì²éÍæ¼Ò½ÚÈÕºì°ü»î¶¯Êý¾ÝÐÅÏ¢  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|       | 
|     feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})  | 
|     curActID = feastRedPacketInfo.get(ShareDefine.ActKey_ID, 0)  | 
|     state = feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)  | 
|     dayIndex = feastRedPacketInfo.get(ShareDefine.ActKey_DayIndex, 0)  | 
|       | 
|     playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketActID) # Íæ¼ÒÉíÉϵĻID  | 
|       | 
|     # »î¶¯ID ÏàͬµÄ»°²»´¦Àí  | 
|     if curActID == playerActID:  | 
|         GameWorld.DebugLog("ºì°ü½ÚÈջID²»±ä£¬²»´¦Àí£¡", playerID)  | 
|         return  | 
|     GameWorld.DebugLog("ÖØÖÃÍæ¼Òºì°ü½ÚÈջ! curActID=%s,playerActID=%s,state=%s,dayIndex=%s" % (curActID, playerActID, state, dayIndex), playerID)  | 
|       | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketActID, curActID)  | 
|     dayCanGrabCount = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 1)  | 
|     # ·ÇµÚÒ»ÌìÖ»ÖØÖÃÿÈÕ´ÎÊý£¬ÇÒ´ÎÊý¿ÉÒÔÀÛ¼Ó  | 
|     if dayIndex == 0:  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, 0)  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, dayCanGrabCount)  | 
|         GameWorld.DebugLog("    Ê×ÈÕÖØÖôÎÊý¼°½ð¶î!", playerID)  | 
|     else:  | 
|         canAddRemainCnt = IpyGameDataPY.GetFuncCfg('FeastRedPacket', 4)  | 
|         remainGrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)  | 
|         setTotalCanGrabCnt = (remainGrabCnt + dayCanGrabCount) if canAddRemainCnt else dayCanGrabCount  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, setTotalCanGrabCnt)  | 
|         GameWorld.DebugLog("    ·ÇÊ×ÈÕÖØÖôÎÊý! canAddRemainCnt=%s,remainGrabCnt=%s,setTotalCanGrabCnt=%s" % (canAddRemainCnt, remainGrabCnt, setTotalCanGrabCnt), playerID)  | 
|           | 
|     # ÖØÖÃÏà¹Ø³É¾Í  | 
|     resetSuccIDList = []  | 
|     ipyDataMgr = IpyGameDataPY.IPY_Data()  | 
|     for index in xrange(ipyDataMgr.GetActFeastRedPacketSuccCount()):  | 
|         ipyData = ipyDataMgr.GetActFeastRedPacketSuccByIndex(index)  | 
|         feastDay = ipyData.GetFeastDay()  | 
|         feastDayIndex = feastDay - 1  | 
|         if dayIndex == 0 or feastDayIndex == dayIndex:  | 
|             for succID in ipyData.GetFeastSuccIDList():  | 
|                 if succID not in resetSuccIDList:  | 
|                     resetSuccIDList.append(succID)  | 
|     PlayerSuccess.DoResetSuccessIDList(curPlayer, resetSuccIDList)  | 
|       | 
|     Sync_FeastRedPackInfo(curPlayer)  | 
|     return True  | 
|   | 
| def GetFeastRedPacketState():  | 
|     ## ½ÚÈÕºì°ü»î¶¯×´Ì¬  | 
|     feastRedPacketInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FeastRedPacket, {})  | 
|     return feastRedPacketInfo.get(ShareDefine.ActKey_State, 0)  | 
|   | 
| def GetFeastSuccRedPacketCanGrabCnt(curPlayer):  | 
|     ## ½ÚÈճɾͺì°ü¿ÉÁìÈ¡´ÎÊý  | 
|     return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)  | 
|   | 
| def GrabFeastRedPacketResult(curPlayer, moneyNum, getWay, isSelf):  | 
|     ##ÇÀ½ÚÈÕºì°ü½á¹û  | 
|     grabNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketGrabMoney)  | 
|     newGrabNum = grabNum + moneyNum  | 
|     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketGrabMoney, newGrabNum)  | 
|       | 
|     #¹ã²¥  | 
|     needSysOSRAllMoneyList = IpyGameDataPY.GetFuncEvalCfg('FeastRedPacket', 3)  | 
|     lastIndex = -1  | 
|     newIndex = -1  | 
|     for i, num in enumerate(needSysOSRAllMoneyList):  | 
|         if grabNum >= num:  | 
|             lastIndex = i  | 
|         if newGrabNum >= num:  | 
|             newIndex = i  | 
|     if newIndex != -1 and newIndex > lastIndex:  | 
|         PlayerControl.WorldNotify(0, 'ActivityOpenRedBag1', [curPlayer.GetName(), newGrabNum])  | 
|           | 
|     if not isSelf and getWay == ShareDefine.RedPackType_FeastSucc: #ÇÀ×Ô¼ºµÄºì°ü²»¿Û´ÎÊý  | 
|         grabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)  | 
|         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FeastRedPacketCanGrabCnt, max(0, grabCnt - 1))  | 
|           | 
|     Sync_FeastRedPackInfo(curPlayer)  | 
|     return  | 
|   | 
| def Sync_FeastRedPackInfo(curPlayer):  | 
|     #// AB 25 ½ÚÈÕºì°üÐÅÏ¢ #tagMCFeastRedPackInfo  | 
|     pack = ChPyNetSendPack.tagMCFeastRedPackInfo()  | 
|     pack.MoneyNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketGrabMoney)  | 
|     pack.GrabCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FeastRedPacketCanGrabCnt)  | 
|     NetPackCommon.SendFakePack(curPlayer, pack)  | 
|     return  | 
|   |