#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.PlayerFairyCeremony  
 | 
#  
 | 
# @todo:ÏɽçÊ¢µä  
 | 
# @author xdh  
 | 
# @date 2018-07-23 16:50  
 | 
# @version 1.0  
 | 
#  
 | 
#  
 | 
# ÏêϸÃèÊö: ÏɽçÊ¢µä  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2018-07-23 16:50"""  
 | 
#---------------------------------------------------------------------  
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import IpyGameDataPY  
 | 
import PlayerControl  
 | 
import ItemControler  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import ShareDefine  
 | 
import PyGameData  
 | 
import ItemCommon  
 | 
import PlayerBillboard  
 | 
  
 | 
(  
 | 
Def_FC_Recharge, #³äÖµ´óÀñ  
 | 
Def_FC_Fireworks, #ÑÌ»¨  
 | 
Def_FC_Party, #È«ÃñÀ´àË  
 | 
Def_FC_RechargeRank, #¾ø°æ½µÁÙ  
 | 
) = range(1, 5)  
 | 
  
 | 
  
 | 
def OnLogin(curPlayer):  
 | 
    isReset = __CheckPlayerFairyCeremonyAction(curPlayer)  
 | 
    if not isReset:  
 | 
        actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FairyCeremony, {})  
 | 
        # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢  
 | 
        if actCostRebateInfo.get(ShareDefine.ActKey_State):  
 | 
            SyncFCRechargeInfo(curPlayer)  
 | 
            SyncFCPartyInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
def RefreshOperationAction_FairyCeremony():  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
    for i in xrange(playerManager.GetPlayerCount()):  
 | 
        curPlayer = playerManager.GetPlayerByIndex(i)  
 | 
        if curPlayer == None or not curPlayer.GetInitOK():  
 | 
            continue  
 | 
        __CheckPlayerFairyCeremonyAction(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
def __CheckPlayerFairyCeremonyAction(curPlayer):  
 | 
    ## ¼ì²éÍæ¼ÒÏɽçÊ¢µä»î¶¯Êý¾ÝÐÅÏ¢  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
      
 | 
    actFairyCeremonyInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FairyCeremony, {})  
 | 
    FairyCeremonyID = actFairyCeremonyInfo.get(ShareDefine.ActKey_ID, 0)  
 | 
    state = actFairyCeremonyInfo.get(ShareDefine.ActKey_State, 0)  
 | 
      
 | 
    playerFairyCeremonyID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyCeremonyID) # Íæ¼ÒÉíÉϵĻID  
 | 
      
 | 
    # »î¶¯ID ÏàͬµÄ»°²»´¦Àí  
 | 
    if FairyCeremonyID == playerFairyCeremonyID:  
 | 
        #GameWorld.DebugLog("ÏɽçÊ¢µä»î¶¯ID²»±ä£¬²»´¦Àí£¡", curPlayer.GetPlayerID())  
 | 
        return  
 | 
    ctgRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCoinTotal) / 100  
 | 
    actWorldLV = actFairyCeremonyInfo.get(ShareDefine.ActKey_WorldLV, 0)  
 | 
    playerFCWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCActionWorldLV)  
 | 
    GameWorld.DebugLog("ÏɽçÊ¢µäÖØÖÃ! FairyCeremonyID=%s,playerCostRebateID=%s,state=%s,ActWorldLV=%s,playerFCWorldLV=%s,ctgRMBTotal=%s"   
 | 
                       % (FairyCeremonyID, playerFairyCeremonyID, state, actWorldLV, playerFCWorldLV, ctgRMBTotal), playerID)  
 | 
      
 | 
    # Î´ÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å  
 | 
    __SendFairyCeremonyMail(curPlayer, playerFCWorldLV)  
 | 
      
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyCeremonyID, FairyCeremonyID)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCActionWorldLV, actWorldLV)  
 | 
    #ÖØÖóäÖµ´óÀñ¼Ç¼  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCRechargeState, 0)  
 | 
    #ÖØÖÃÈ«ÃñÀ´àË  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCPartyCurPoint, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCPartyAwardRecord, 0)  
 | 
    for actid in ChConfig.PeoplePartyActIDList:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCPartyCurCnt % actid, 0)  
 | 
    SyncFCPartyInfo(curPlayer)  
 | 
    #ÖØÖÃÒѳäÖµRMB¼°ÑÌ»¨Ïà¹Ø  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCCTGRMBTotal, ctgRMBTotal)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCFireworksBuyCount, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCFireworksScore, 0)  
 | 
    SyncFCRechargeInfo(curPlayer)  
 | 
    return True  
 | 
  
 | 
def __SendFairyCeremonyMail(curPlayer, playerFCWorldLV):  
 | 
    # Î´ÁìÈ¡µÄ½±ÀøÓʼþ·¢·Å  
 | 
    #³äÖµ´óÀñ  
 | 
    playerID = curPlayer.GetID()  
 | 
    playerName = curPlayer.GetName()  
 | 
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCRechargeState) == 1:  
 | 
        worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Recharge)  
 | 
        awardInfoDict = IpyGameDataPY.GetFuncEvalCfg('CeremonyRecharge', 1, {})  
 | 
        if str(worldLvNum) not in awardInfoDict:  
 | 
            GameWorld.ErrLog('    Óʼþ·¢·Å³äÖµ´óÀñ½±Àø CeremonyRecharge Î´ÅäÖý±Àø worldLvNum=%s' % worldLvNum)  
 | 
        else:  
 | 
            awardList = awardInfoDict[str(worldLvNum)]  
 | 
            PlayerControl.SendMailByKey('CeremonyPayPack', [playerID], awardList, [playerName])  
 | 
    #È«ÃñÀ´àË  
 | 
    worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Party)  
 | 
    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyCurPoint)  
 | 
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyAwardRecord)  
 | 
    ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('AllPeoplePartyAward', {'WorldLvNum':worldLvNum}, True)  
 | 
    if not ipyDataList:  
 | 
        GameWorld.ErrLog('    Óʼþ·¢·ÅÈ«ÃñÀ´à˽±Àø AllPeoplePartyAward Î´ÅäÖÃÊÀ½çµÈ¼¶µµ WorldLvNum=%s' % worldLvNum)  
 | 
        return  
 | 
      
 | 
    partyAwardList = []  
 | 
    for ipyData in ipyDataList:  
 | 
        index = ipyData.GetIndex()  
 | 
        if awardRecord & pow(2, index):  
 | 
            continue  
 | 
        needPoint = ipyData.GetNeedPoint()  
 | 
        if curPoint < needPoint:  
 | 
            continue  
 | 
        awardInfoDict = ipyData.GetAward()  
 | 
        job = curPlayer.GetJob()  
 | 
        if str(job) not in awardInfoDict:  
 | 
            GameWorld.ErrLog('    Óʼþ·¢·ÅÈ«ÃñÀ´à˽±Àø AllPeoplePartyAward Î´ÅäÖÃÖ°Òµ½±Àø job=%s' % job)  
 | 
            continue  
 | 
        awardList = awardInfoDict[str(job)]  
 | 
        partyAwardList += awardList  
 | 
    if partyAwardList:  
 | 
        PlayerControl.SendMailByKey('CeremonyHaiPoint', [playerID], partyAwardList, [playerName])  
 | 
    return  
 | 
  
 | 
def __IsAtFCAction():  
 | 
    ##ÊÇ·ñÔÚÏɽçÊ¢µä»î¶¯ÖÐ  
 | 
    actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_FairyCeremony, {})  
 | 
    state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)  
 | 
    return state == 1  
 | 
  
 | 
def __GetFCWorldLVIndex(curPlayer, fcType):  
 | 
    #»ñÈ¡»î¶¯ÊÀ½çµÈ¼¶µµ  
 | 
    playerFCWorldLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCActionWorldLV)  
 | 
    fcWorldlvDict = IpyGameDataPY.GetFuncEvalCfg('CeremonyWorldLv', 1, {})  
 | 
    if str(fcType) not in fcWorldlvDict:  
 | 
        return 0  
 | 
    worldLVIndex = 0  
 | 
    worldlvList = fcWorldlvDict[str(fcType)]  
 | 
    for index, lvinfo in enumerate(worldlvList):  
 | 
        minlv, maxlv = lvinfo  
 | 
        if minlv <= playerFCWorldLV <= maxlv:  
 | 
            worldLVIndex = index  
 | 
            break  
 | 
    return worldLVIndex  
 | 
  
 | 
#################³äÖµ´óÀñ##############################  
 | 
def OnFCRecharge(curPlayer):  
 | 
    if not __IsAtFCAction():  
 | 
        return  
 | 
    curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCRechargeState)  
 | 
    if curState != 0:  
 | 
        return  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCRechargeState, 1)  
 | 
    SyncFCRechargeInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
def GetFCRechargeAward(curPlayer):  
 | 
    ## ÁìÈ¡³äÖµ´óÀñ½±Àø  
 | 
    curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCRechargeState)  
 | 
    if curState != 1:  
 | 
        return  
 | 
    worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Recharge)  
 | 
    awardInfoDict = IpyGameDataPY.GetFuncEvalCfg('CeremonyRecharge', 1, {})  
 | 
    if str(worldLvNum) not in awardInfoDict:  
 | 
        GameWorld.ErrLog('    ÁìÈ¡³äÖµ´óÀñ½±Àø CeremonyRecharge Î´ÅäÖý±Àø worldLvNum=%s' % worldLvNum)  
 | 
        return  
 | 
    awardList = awardInfoDict[str(worldLvNum)]  
 | 
    # ¼ì²é±³°ü  
 | 
    needSpace = len(awardList)  
 | 
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  
 | 
    if needSpace > packSpace:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  
 | 
        return  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCRechargeState, 2)  
 | 
    for itemID, itemCnt, isBind in awardList:  
 | 
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])  
 | 
      
 | 
    SyncFCRechargeInfo(curPlayer)  
 | 
      
 | 
    PlayerControl.WorldNotify(0, 'CeremonyRecharge', [curPlayer.GetName()])  
 | 
    return  
 | 
  
 | 
  
 | 
def SyncFCRechargeInfo(curPlayer):  
 | 
    ## Í¨Öª³äÖµ´óÀñ»î¶¯×´Ì¬  
 | 
    packData = ChPyNetSendPack.tagMCXJSDRecharge()  
 | 
    packData.State = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCRechargeState)  
 | 
    packData.CTGTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCCTGRMBTotal)  
 | 
    packData.FireworksBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCFireworksBuyCount)  
 | 
    packData.FirewordsScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCFireworksScore)  
 | 
    NetPackCommon.SendFakePack(curPlayer, packData)  
 | 
    return  
 | 
  
 | 
#################È«ÃñÀ´àË##############################  
 | 
def AddFCPartyActionCnt(curPlayer, actionID, addCnt=1):  
 | 
    ##Ôö¼ÓÈ«ÃñÀ´àËÍê³É´ÎÊý  
 | 
    if not __IsAtFCAction():  
 | 
        return  
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('AllPeopleParty', actionID)  
 | 
    if not ipyData:  
 | 
        return  
 | 
    maxCnt = ipyData.GetTotalTimes()  
 | 
    curCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyCurCnt % actionID)  
 | 
    if curCnt >= maxCnt:  
 | 
        return  
 | 
    newCnt = min(maxCnt, curCnt + addCnt)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCPartyCurCnt % actionID, newCnt)  
 | 
    singlePoint = ipyData.GetAddPoint()  
 | 
    addPoint = (newCnt - curCnt) * singlePoint  
 | 
    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyCurPoint)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCPartyCurPoint, curPoint + addPoint)  
 | 
    SyncFCPartyInfo(curPlayer, [actionID])  
 | 
    return  
 | 
  
 | 
def GetFCPartyAward(curPlayer, index):  
 | 
    ## È«ÃñÀ´àËÁì½±  
 | 
    worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Party)  
 | 
      
 | 
    ipyData = IpyGameDataPY.GetIpyGameData('AllPeoplePartyAward', worldLvNum, index)  
 | 
    if not ipyData:  
 | 
        return  
 | 
      
 | 
    curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyCurPoint)  
 | 
    if curPoint < ipyData.GetNeedPoint():  
 | 
        GameWorld.DebugLog('    È«ÃñÀ´àËÁì½±, µãÊý²»×ã%s,  worldLvNum=%s, index=%s' % (ipyData.GetNeedPoint(), worldLvNum, index), curPlayer.GetID())  
 | 
        return  
 | 
    awardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyAwardRecord)  
 | 
    awardMark = pow(2, index)  
 | 
    if awardRecord & awardMark:  
 | 
        GameWorld.DebugLog('    È«ÃñÀ´àËÁì½±, ÒÑÁì½±,  worldLvNum=%s, index=%s' % (worldLvNum, index), curPlayer.GetID())  
 | 
        return  
 | 
    awardInfoDict = ipyData.GetAward()  
 | 
    job = curPlayer.GetJob()  
 | 
    if str(job) not in awardInfoDict:  
 | 
        return  
 | 
    awardList = awardInfoDict[str(job)]  
 | 
    # ¼ì²é±³°ü  
 | 
    needSpace = len(awardList)  
 | 
    packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  
 | 
    if needSpace > packSpace:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  
 | 
        return  
 | 
    #¸üмǼ  
 | 
    awardRecord |= awardMark  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCPartyAwardRecord, awardRecord)  
 | 
    for itemID, itemCnt, isBind in awardList:  
 | 
        ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, 0, [IPY_GameWorld.rptItem])  
 | 
    #֪ͨ  
 | 
    SyncFCPartyInfo(curPlayer, isGetAward=True)  
 | 
    return  
 | 
  
 | 
  
 | 
def SyncFCPartyInfo(curPlayer, actIDList=[], isGetAward=False):  
 | 
    ##֪ͨȫÃñÀ´àËÐÅÏ¢  
 | 
    packData = ChPyNetSendPack.tagMCAllPeoplePartyInfo()  
 | 
    packData.Clear()  
 | 
    packData.CurPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyCurPoint)  
 | 
    packData.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyAwardRecord)  
 | 
    if not isGetAward:  
 | 
        packData.BuyCountList = []  
 | 
        for actID in ChConfig.PeoplePartyActIDList:  
 | 
            if actIDList and actID not in actIDList:  
 | 
                continue  
 | 
            finishInfo = ChPyNetSendPack.tagMCAllPeoplePartyCount()  
 | 
            finishInfo.ActID = actID  
 | 
            finishInfo.CurTimes = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCPartyCurCnt % actID)  
 | 
            packData.BuyCountList.append(finishInfo)  
 | 
        packData.Count = len(packData.BuyCountList)  
 | 
      
 | 
    NetPackCommon.SendFakePack(curPlayer, packData)  
 | 
    return  
 | 
  
 | 
#################¾ø°æ½µÁÙ##############################  
 | 
  
 | 
def AddFCCTGRMB(curPlayer, ctgRMB):  
 | 
    ## ³äÖµXÔª  
 | 
    if ctgRMB <= 0:  
 | 
        return  
 | 
    if not __IsAtFCAction():  
 | 
        return  
 | 
    curRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCCTGRMBTotal)  
 | 
    updRMBTotal = curRMBTotal + ctgRMB  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCCTGRMBTotal, updRMBTotal)  
 | 
    GameWorld.Log("¸üÐÂÏɽçÊ¢µä³äÖµRMBÖµ: curRMBTotal=%s,ctgRMB=%s,updRMBTotal=%s"   
 | 
                  % (curRMBTotal, ctgRMB, updRMBTotal), curPlayer.GetPlayerID())  
 | 
    SyncFCRechargeInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
def OnBuyFireworks(curPlayer, itemIndex, clientBuyCount):  
 | 
    ## ¹ºÂòÑÌ»¨  
 | 
    if not __IsAtFCAction():  
 | 
        return  
 | 
      
 | 
    fireworksDict = IpyGameDataPY.GetFuncEvalCfg('CeremonyFireParty', 1, {})  
 | 
    worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Fireworks)  
 | 
    canBuyIDList = fireworksDict.get(str(worldLvNum), []) #[ÆÕͨÑÌ»¨, ¸ß¼¶ÑÌ»¨]  
 | 
    if itemIndex not in canBuyIDList:  
 | 
        return  
 | 
    fireworksIndex = canBuyIDList.index(itemIndex)  
 | 
    AddFCPartyActionCnt(curPlayer, ChConfig.Def_PPAct_Fireworks, clientBuyCount)  
 | 
    if fireworksIndex == 1:  
 | 
        fireworksBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCFireworksBuyCount) + clientBuyCount  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCFireworksBuyCount, fireworksBuyCount)  
 | 
        GameWorld.DebugLog("¸üÐÂÍæ¼Ò¸ß¼¶ÑÌ»¨ÒѹºÂò´ÎÊý: clientBuyCount=%s,fireworksBuyCount=%s"   
 | 
                           % (clientBuyCount, fireworksBuyCount), curPlayer.GetPlayerID())  
 | 
          
 | 
    fireworksScoreList = IpyGameDataPY.GetFuncEvalCfg('CeremonyFireParty', 2) # [ÆÕͨÑÌ»¨»ý·Ö, ¸ß¼¶ÑÌ»¨»ý·Ö]  
 | 
    addScore = fireworksScoreList[fireworksIndex] * clientBuyCount  
 | 
    curFireworksScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCFireworksScore)  
 | 
    updFireworksScore = curFireworksScore + addScore  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FCFireworksScore, updFireworksScore)  
 | 
      
 | 
    billboardNeedScore = IpyGameDataPY.GetFuncCfg('CeremonyFireParty', 4)  
 | 
    if updFireworksScore >= billboardNeedScore:  
 | 
        #¸üÐÂÅÅÐаñ  
 | 
        GameWorld.DebugLog("Íæ¼Ò¾ø°æ½µÁÙ»ý·ÖÅÅÐиüÐÂ: itemIndex=%s,clientBuyCount=%s,curFireworksScore=%s,addScore=%s,updFireworksScore=%s"   
 | 
                           % (itemIndex, clientBuyCount, curFireworksScore, addScore, updFireworksScore), curPlayer.GetPlayerID())  
 | 
        PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FCCostGold, updFireworksScore)  
 | 
    else:  
 | 
        GameWorld.DebugLog("Íæ¼Ò¾ø°æ½µÁÙÑÌ»¨»ý·Ö²»×㣬ÎÞ·¨Éϰñ! updFireworksScore=%s < billboardNeedScore=%s"   
 | 
                           % (updFireworksScore, billboardNeedScore), curPlayer.GetPlayerID())  
 | 
          
 | 
    SyncFCRechargeInfo(curPlayer)   
 | 
    return  
 | 
  
 | 
#################ÑÌ»¨¿ñ»¶##############################  
 | 
def IsCanBuyFireworks(curPlayer, itemIndex, clientBuyCount):  
 | 
    ##µ±Ç°ÊÇ·ñ¿ÉÒÔÂòÑÌ»¨  
 | 
    if not __IsAtFCAction():  
 | 
        GameWorld.Log('    ÑÌ»¨¿ñ»¶ÂòÑÌ»¨ »î¶¯Î´¿ªÆô, ÎÞ·¨¹ºÂò')  
 | 
        return False  
 | 
    fireworksDict = IpyGameDataPY.GetFuncEvalCfg('CeremonyFireParty', 1, {})  
 | 
    worldLvNum = __GetFCWorldLVIndex(curPlayer, Def_FC_Fireworks)  
 | 
    canBuyIDList = fireworksDict.get(str(worldLvNum), []) #[ÆÕͨÑÌ»¨, ¸ß¼¶ÑÌ»¨]  
 | 
    if itemIndex not in canBuyIDList:  
 | 
        GameWorld.Log('    ÑÌ»¨¿ñ»¶ÂòÑÌ»¨ µ±Ç°¿ÉÒÔÂòÑÌ»¨Îª %s, ÎÞ·¨¹ºÂò %s,worldLvNum=%s'%(canBuyIDList, itemIndex,worldLvNum), curPlayer.GetID())  
 | 
        return False  
 | 
    #¸ß¼¶ÑÌ»¨ÐèÒªÅжϳäÖµµÄ×Ü¶î  
 | 
    buyOneNeedRMB = IpyGameDataPY.GetFuncCfg('CeremonyFireParty', 3) # ¹ºÂòÒ»¸ö¸ß¼¶ÑÌ»¨ËùÐè³äÖµRMBÖµ£¬µ¥Î»XÔª  
 | 
    if itemIndex == canBuyIDList[-1] and buyOneNeedRMB:  
 | 
        curRMBTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCCTGRMBTotal)  
 | 
        fireworksBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FCFireworksBuyCount)  
 | 
        totalCanBuyCount = curRMBTotal / buyOneNeedRMB  
 | 
        if (fireworksBuyCount + clientBuyCount) > totalCanBuyCount:  
 | 
            GameWorld.Log('    ÑÌ»¨¿ñ»¶ÂòÑÌ»¨  ¸ß¼¶ÑÌ»¨ËùÐèÖØÖÃRMB²»×ã, ÎÞ·¨¹ºÂò! curRMBTotal=%s,totalCanBuyCount=%s < fireworksBuyCount=%s + clientBuyCount=%s'   
 | 
                          % (curRMBTotal, totalCanBuyCount, fireworksBuyCount, clientBuyCount), curPlayer.GetID())  
 | 
            return False  
 | 
    return True  
 |