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