#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package GameWorldLogic.FBProcess.GameLogic_DuJie  
 | 
#  
 | 
# @todo:¶É½Ù¸±±¾  
 | 
# @author xdh  
 | 
# @date 2017-10-10 14:30  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ¶É½Ù¸±±¾  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
"""Version = 2017-10-10 14:30"""  
 | 
import FBCommon  
 | 
import ChConfig  
 | 
import IPY_GameWorld  
 | 
import PlayerControl  
 | 
import GameWorld  
 | 
import NPCCustomRefresh  
 | 
import IpyGameDataPY  
 | 
import PlayerPrestigeSys  
 | 
import GameFuncComm  
 | 
import ItemCommon  
 | 
import ShareDefine  
 | 
import ItemControler  
 | 
import PlayerSuccess  
 | 
import EventShell  
 | 
import EventReport  
 | 
import math  
 | 
import time  
 | 
  
 | 
#µ±Ç°¸±±¾µØÍ¼µÄ״̬  
 | 
(  
 | 
FB_Step_Open, # µØÍ¼¿ªÆô  
 | 
FB_Step_MapPrepare, # µØÍ¼×¼±¸  
 | 
FB_Step_Fighting, # Õ½¶·ÖÐ  
 | 
FB_Step_LeaveTime, # ×ÔÓÉʱ¼ä  
 | 
) = range(4)  
 | 
  
 | 
#---¶É½Ù¸±±¾---  
 | 
DuJieFB_Star = 'DuJieFB_Star' #ÆÀ¼¶  
 | 
DuJieFB_RealmLV = "DuJieFB_RealmLV"     # ¾³½çµÈ¼¶  
 | 
DuJieFB_LeaderPlayerID = "DuJieFB_LeaderPlayerID"     # ¶Ó³¤ID  
 | 
  
 | 
  
 | 
(  
 | 
Def_Time_MapPrepare, # ×¼±¸Ê±¼ä, Ãë  
 | 
Def_Time_Fight, # ³ÖÐøÊ±¼ä, Ãë  
 | 
Def_Time_Leave, # ½áÊøÊ±¼ä, Ãë  
 | 
Def_StarTime, # ÐǼ¶¶ÔÓ¦ºÄʱÅäÖÃ, Ãë  
 | 
Def_HelpAddAttrID, #»¤·¨¿ÉÔö¼ÓµÄÊôÐÔ  
 | 
) = range(5)  
 | 
  
 | 
  
 | 
def GetRealmFBTimeCfg():  
 | 
    lineID = FBCommon.GetFBPropertyMark()  
 | 
    return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_DuJie, lineID)  
 | 
  
 | 
def GetDuJieBossID():  
 | 
    realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV)  
 | 
    realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV)  
 | 
    if not realmIpyData:  
 | 
        GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % realmLV)  
 | 
        return  
 | 
    return realmIpyData.GetBossID()  
 | 
  
 | 
#---FB½Ó¿Ú----------  
 | 
##¸±±¾³õʼ»¯  
 | 
# @param tick:ʱ¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def DoFBInit(tick):  
 | 
    #GameWorld.GetGameFB().GameServer_RegisterFBInfo(GetRealmFBTimeCfg()[Def_MaxPlayerCnt], '')  
 | 
    return  
 | 
  
 | 
##¿ªÆô¸±±¾  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿ªÆô¸±±¾  
 | 
def OnOpenFB(tick):  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    gameFB.SetGameFBDict(DuJieFB_RealmLV, 0)  
 | 
    gameFB.SetGameFBDict(DuJieFB_Star, 0)  
 | 
    gameFB.SetGameFBDict(DuJieFB_LeaderPlayerID, 0)  
 | 
    return  
 | 
  
 | 
  
 | 
##¹Ø±Õ¸±±¾  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ÎÞÒâÒå  
 | 
# @remarks   
 | 
def OnCloseFB(tick):  
 | 
    #¸±±¾Ìß³öÍæ¼Ò  
 | 
    FBCommon.DoLogic_FBKickAllPlayer()  
 | 
    return  
 | 
  
 | 
##Íæ¼ÒËÀÍö.  
 | 
# @param curPlayer:ËÀÍöµÄÍæ¼Ò   
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks Íæ¼ÒÖ÷¶¯À뿪¸±±¾.  
 | 
def DoPlayerDead(curPlayer):  
 | 
    if curPlayer.GetID() == GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID):  
 | 
        __DoDoJieFBOver(False, GameWorld.GetGameWorld().GetTick())  
 | 
    return  
 | 
  
 | 
## ÊÇ·ñÄܹ»Í¨¹ý»î¶¯²éѯ½øÈë  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param mapID µØÍ¼ID  
 | 
#  @param lineID Ïß·id  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return ²¼¶ûÖµ  
 | 
def OnEnterFBEvent(curPlayer, mapID, lineID, tick):  
 | 
    return __CheckEnter(curPlayer, mapID, lineID)  
 | 
  
 | 
  
 | 
##½øÈ븱±¾¼ì²é  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param mapID µØÍ¼ID  
 | 
#  @param lineID Ïß·id  
 | 
# @return None  
 | 
def __CheckEnter(curPlayer, mapID, lineID):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Official):  
 | 
        GameWorld.DebugLog("¾ôλ¾³½ç¹¦ÄÜ먦Æô, ÎÞ·¨¿ªÆô¶É½Ù!curLV=%s" % curPlayer.GetLV())  
 | 
        return False  
 | 
    if lineID == 0 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader or (lineID == 1 and curPlayer.GetTeamID() == 0):  
 | 
        curRealmLV = curPlayer.GetOfficialRank()  
 | 
        realmIpyData = PlayerPrestigeSys.GetRealmIpyData(curRealmLV)  
 | 
        if not realmIpyData:  
 | 
            GameWorld.ErrLog("ûÓиþ³½çµÈ¼¶Êý¾Ý! Lv=%s" % curRealmLV)  
 | 
            return False  
 | 
        needRealmPoint = realmIpyData.GetNeedPoint()  
 | 
        if not needRealmPoint:  
 | 
            GameWorld.DebugLog("¾³½çÒÑÊÇ×î´óµÈ¼¶£¬²»ÄÜÉý¼¶! Lv=%s" % curRealmLV, curPlayer.GetPlayerID())  
 | 
            return False  
 | 
        if not PlayerControl.HaveMoney(curPlayer, ShareDefine.TYPE_Price_RealmPoint, needRealmPoint, False):  
 | 
            GameWorld.DebugLog("¾³½çÐÞÁ¶µã²»×㣬ÎÞ·¨¿ªÆô¶É½Ù£¡needRealmPoint=%s" % (needRealmPoint), curPlayer.GetPlayerID())  
 | 
            return False  
 | 
#        if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBIsOpen) != 1:  
 | 
#            return False  
 | 
     
 | 
      
 | 
    return True  
 | 
  
 | 
  
 | 
##¸±±¾Íæ¼Ò½øÈëµã  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param mapID µØÍ¼ID  
 | 
# @param lineId ·ÖÏßID  
 | 
# @param ipyEnterPosInfo ¹¦ÄÜÏß·IPYÅäÖÃ×ø±êÐÅÏ¢  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return posX, posY, Ëæ»ú°ë¾¶(¿ÉÑ¡)  
 | 
def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):  
 | 
    return ipyEnterPosInfo  
 | 
     
 | 
  
 | 
  
 | 
##ÊÇ·ñ¿ÉÒÔ½øÈë  
 | 
# @param ask ÇëÇó½á¹¹Ìå  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return TChangeMapError  
 | 
# @remarks   
 | 
def OnChangeMapAsk(ask, tick):  
 | 
    return IPY_GameWorld.cmeAccept  
 | 
  
 | 
  
 | 
##Íæ¼Ò½øÈ븱±¾  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ÎÞÒâÒå  
 | 
# @remarks Íæ¼Ò½øÈ븱±¾  
 | 
def DoEnterFB(curPlayer, tick):  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    fbStep = gameFB.GetFBStep()  
 | 
    if fbStep == FB_Step_LeaveTime:  
 | 
        PlayerControl.PlayerLeaveFB(curPlayer)  
 | 
        return  
 | 
      
 | 
    lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqFBFuncLine)  
 | 
    if not FBCommon.GetHadSetFBPropertyMark():  
 | 
        FBCommon.SetFBPropertyMark(lineID)  
 | 
        FBCommon.SetFBStep(FB_Step_MapPrepare, tick)  
 | 
      
 | 
      
 | 
    fbPlayerCnt = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NPCStrengthenPlayerCnt)  
 | 
    DuJieFBCfg = GetRealmFBTimeCfg()  
 | 
    if not gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID):  
 | 
        #ÖØÖÃÊôÐÔ¼Ó³É  
 | 
           
 | 
        for attrID in DuJieFBCfg[Def_HelpAddAttrID]:  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBAttrAdd % attrID, 0)  
 | 
          
 | 
        GameWorld.DebugLog('Íæ¼Ò½øÈ븱±¾')  
 | 
          
 | 
        if fbPlayerCnt == 1 or curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader:  
 | 
            __SetFBLeaderPlayer(curPlayer)  
 | 
            if gameFB.GetFBStep() == FB_Step_Fighting:  
 | 
                __OnDuJieFBStart(tick)  
 | 
    isHelpFight = lineID == 1 and curPlayer.GetTeamLV() != IPY_GameWorld.tmlLeader and fbPlayerCnt > 1  
 | 
    joinType = FBCommon.GetFBJoinType(curPlayer, isHelpFight)  
 | 
    EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_Start, joinType)  
 | 
      
 | 
      
 | 
    fbStep = gameFB.GetFBStep()  
 | 
    if fbStep == FB_Step_MapPrepare:  
 | 
        #³õʼ»¯²¢Í¨ÖªµÈ´ýµ¹¼ÆÊ±  
 | 
        __EnterFBInPrepare(curPlayer, DuJieFBCfg[Def_Time_MapPrepare] * 1000, gameFB, tick)  
 | 
          
 | 
    elif fbStep == FB_Step_Fighting:  
 | 
        #֪ͨ½øÈëʱ¼ä  
 | 
        notifyTick = max(DuJieFBCfg[Def_Time_Fight] * 1000 - (tick - gameFB.GetFBStepTick()), 0)  
 | 
        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, notifyTick, True)  
 | 
        #__UpdDuJieFBStar(tick, True)  
 | 
  
 | 
    DoFBHelp(curPlayer, tick)  
 | 
      
 | 
    return  
 | 
  
 | 
def __SetFBLeaderPlayer(curPlayer):  
 | 
    ##ÉèÖø±±¾¶É½ÙÖ÷ÈË  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    gameFB.SetGameFBDict(DuJieFB_LeaderPlayerID, curPlayer.GetPlayerID())  
 | 
    gameFB.SetGameFBDict(DuJieFB_RealmLV, curPlayer.GetOfficialRank())  
 | 
    PlayerPrestigeSys.SyncRealmFBState(curPlayer)  
 | 
      
 | 
    FBCommon.UpdateFBEnterTick(curPlayer)  
 | 
    #ÇëÇ󻤷¨  
 | 
    OnGetMemberForHelpDujie(curPlayer, False)  
 | 
    return  
 | 
  
 | 
##¸±±¾¶¨Ê±Æ÷  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¸±±¾¶¨Ê±Æ÷  
 | 
def OnProcess(tick):  
 | 
    fbStep = GameWorld.GetGameFB().GetFBStep()  
 | 
      
 | 
    if fbStep == FB_Step_MapPrepare:  
 | 
        __DoLogic_MapPrepare(tick)  
 | 
    elif fbStep == FB_Step_Fighting:  
 | 
        __DoLogic_MapFighting(tick)  
 | 
    elif fbStep == FB_Step_LeaveTime:  
 | 
        __DoLogic_MapLeave(tick)  
 | 
    return  
 | 
  
 | 
  
 | 
## ¸üе±Ç°¸±±¾ÐǼ¶  
 | 
def __UpdDuJieFBStar(tick, isForce=False):  
 | 
    return  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star)  
 | 
    if curStar == 1:  
 | 
        return curStar  
 | 
      
 | 
    useSecond = int(math.ceil((tick - gameFB.GetFBStepTick()) / 1000.0))  
 | 
    DuJieFBCfg = GetRealmFBTimeCfg()  
 | 
    starTimeList = DuJieFBCfg[Def_StarTime]  
 | 
    diffSecond = 0  
 | 
    updStar = 1 # Ä¬ÈÏÖÁÉÙ1ÐÇ  
 | 
    for star, starTime in enumerate(starTimeList, 2):  
 | 
        if useSecond <= starTime:  
 | 
            updStar = star  
 | 
            diffSecond = starTime - useSecond  
 | 
              
 | 
    if curStar == updStar and not isForce:  
 | 
        return curStar  
 | 
          
 | 
    gameFB.SetGameFBDict(DuJieFB_Star, updStar)  
 | 
      
 | 
    GameWorld.DebugLog("__UpdDuJieFBStar useSecond=%s,curStar=%s,updStar=%s, diffSecond=%s"   
 | 
                       % (useSecond, curStar, updStar, diffSecond))  
 | 
      
 | 
      
 | 
    playerManager = GameWorld.GetMapCopyPlayerManager()  
 | 
    for index in xrange(playerManager.GetPlayerCount()):  
 | 
        curPlayer = playerManager.GetPlayerByIndex(index)  
 | 
        if not curPlayer:  
 | 
            continue  
 | 
        DoFBHelp(curPlayer, tick)  
 | 
        if updStar != 1:  
 | 
            curPlayer.Sync_TimeTick(IPY_GameWorld.tttFlagTake, 0, diffSecond * 1000, True)  
 | 
              
 | 
    return updStar  
 | 
  
 | 
  
 | 
def __EnterFBInPrepare(curPlayer, downTime, gameFB, tick, notifyEff=False):  
 | 
    #֪ͨ׼±¸µ¹¼ÆÊ±  
 | 
    notifyTick = max(downTime - (tick - gameFB.GetFBStepTick()), 0)  
 | 
    curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, notifyTick, True)  
 | 
      
 | 
    if notifyEff:  
 | 
        curPlayer.Sync_TimeTick(IPY_GameWorld.tttAddUpTime, 0, notifyTick, True)  
 | 
    return  
 | 
  
 | 
  
 | 
def __DoLogic_MapPrepare(tick):  
 | 
    invadeCfg = GetRealmFBTimeCfg()  
 | 
    if tick - GameWorld.GetGameFB().GetFBStepTick() < invadeCfg[Def_Time_MapPrepare] * 1000:  
 | 
        return  
 | 
    FBCommon.SetFBStep(FB_Step_Fighting, tick)  
 | 
    __OnDuJieFBStart(tick)  
 | 
    return  
 | 
  
 | 
  
 | 
def __DoLogic_MapFighting(tick):  
 | 
    invadeCfg = GetRealmFBTimeCfg()  
 | 
      
 | 
    if tick - GameWorld.GetGameFB().GetFBStepTick() >= invadeCfg[Def_Time_Fight] * 1000:  
 | 
        __DoDoJieFBOver(False, tick)  
 | 
        return  
 | 
    __UpdDuJieFBStar(tick)  
 | 
    return  
 | 
  
 | 
def __DoLogic_MapLeave(tick):  
 | 
    invadeCfg = GetRealmFBTimeCfg()  
 | 
    if tick - GameWorld.GetGameFB().GetFBStepTick() < invadeCfg[Def_Time_Leave] * 1000:  
 | 
        return  
 | 
    # Ê±¼äµ½£¬Ìß³ö»¹ÔÚ¸±±¾µÄÍæ¼ÒµÈ...  
 | 
    #FBCommon.DoLogic_FBKickAllPlayer()  
 | 
    return  
 | 
  
 | 
def __OnDuJieFBStart(tick):  
 | 
    if not GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID):  
 | 
        findLeader = False  
 | 
        playerManager = GameWorld.GetMapCopyPlayerManager()  
 | 
        for index in xrange(playerManager.GetPlayerCount()):  
 | 
            curPlayer = playerManager.GetPlayerByIndex(index)  
 | 
            if not curPlayer:  
 | 
                continue  
 | 
            if curPlayer.GetTeamLV() == IPY_GameWorld.tmlLeader:  
 | 
                __SetFBLeaderPlayer(curPlayer)  
 | 
                findLeader = True  
 | 
                break  
 | 
        if not findLeader:  
 | 
            GameWorld.Log('    ×¼±¸µ¹¼ÆÊ±Òѹý£¬¶Ó³¤ÈÔδ½øÈ븱±¾£¡£¡£¡ ')  
 | 
            return  
 | 
    DuJieFBCfg = GetRealmFBTimeCfg()  
 | 
    bossID = GetDuJieBossID()  
 | 
    if not bossID:  
 | 
        return  
 | 
    mapID = GameWorld.GetMap().GetMapID()  
 | 
    lineID = FBCommon.GetFBPropertyMark()  
 | 
    refreshBossMark = FBCommon.GetFBLineRefreshNPC(mapID, lineID)  
 | 
    NPCCustomRefresh.SetNPCRefresh(refreshBossMark, [bossID])  
 | 
  
 | 
    # Í¨Öª¿ªÊ¼  
 | 
    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, DuJieFBCfg[Def_Time_Fight] * 1000)   
 | 
    FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp)  
 | 
    __UpdDuJieFBStar(tick)  
 | 
    return  
 | 
  
 | 
  
 | 
def __DoDoJieFBOver(isPass, tick):  
 | 
    # ¸±±¾½áÊøÂß¼  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    if gameFB.GetFBStep() != FB_Step_Fighting:  
 | 
        return  
 | 
    GameWorld.DebugLog("´¦Àí¶É½Ù¸±±¾½áÊøÂß¼")  
 | 
    invadeCfg = GetRealmFBTimeCfg()  
 | 
    costTime = tick - gameFB.GetFBStepTick()  
 | 
    FBCommon.SetFBStep(FB_Step_LeaveTime, tick)  
 | 
  
 | 
    leaderPlayerID = gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID)  
 | 
    copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager()  
 | 
    leaderPlayer = copyMapPlayerManager.FindPlayerByID(leaderPlayerID)  
 | 
    if not leaderPlayer:  
 | 
        #¶É½ÙµÄÈ˲»ÔÚÔòËãʧ°Ü  
 | 
        isPass = False  
 | 
      
 | 
    # Í¨ÖªGameServer¸±±¾½áÊø  
 | 
    msgStr = str([isPass, leaderPlayerID])  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'DuJieFBOver', msgStr, len(msgStr))  
 | 
  
 | 
    curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star)  
 | 
    realmLV = gameFB.GetGameFBDictByKey(DuJieFB_RealmLV)  
 | 
    realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV)  
 | 
    lineID = FBCommon.GetFBPropertyMark()  
 | 
    leaveTick = invadeCfg[Def_Time_Leave] * 1000  
 | 
    overDict = {FBCommon.Over_costTime:costTime,FBCommon.Over_grade:curStar, FBCommon.Over_leaderID:leaderPlayerID}  
 | 
    playerCnt = copyMapPlayerManager.GetPlayerCount()  
 | 
    for i in xrange(playerCnt):  
 | 
          
 | 
        curPlayer = copyMapPlayerManager.GetPlayerByIndex(i)  
 | 
          
 | 
        if curPlayer == None or curPlayer.IsEmpty():  
 | 
            continue  
 | 
        isHelpFight = lineID == 1 and curPlayer.GetPlayerID() != leaderPlayerID  
 | 
        joinType = FBCommon.GetFBJoinType(curPlayer, isHelpFight)  
 | 
        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, ChConfig.CME_Log_End, joinType, isPass)  
 | 
      
 | 
        curPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)  
 | 
        FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_DuJie, lineID, isPass, overDict)  
 | 
        if isPass and leaderPlayer:  
 | 
            if curPlayer.GetPlayerID() == leaderPlayerID:  
 | 
                #¶É½Ùͨ¹ý´¦Àí  
 | 
                PlayerPrestigeSys.DologicDujieFBPass(curPlayer, realmLV, curStar)  
 | 
                #Çå³ýCD  
 | 
                FBCommon.SetFBPDictValue(curPlayer, ChConfig.Def_PDict_LastEnterFBTick % ChConfig.Def_FBMapID_DuJie, 0)  
 | 
                FBCommon.SyncFBEnterTick(curPlayer)  
 | 
            else:  
 | 
                #°ïæ´òµÄ¸ø½±Àø  
 | 
                __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar)  
 | 
                EventShell.EventRespons_DujieFBHelpPass(curPlayer)  
 | 
                FBCommon.AddFBHelpPoint(curPlayer, ChConfig.Def_FBMapID_DuJie, 1)  
 | 
              
 | 
            if realmIpyData and realmIpyData.GetIsBigRealm():  
 | 
                #³É¾Í  
 | 
                PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_DujieFBHelpPass, 1)  
 | 
            if playerCnt > 1: #¶àÈË×é¶Ó¶É½Ù  
 | 
                EventShell.EventRespons_FBEvent(curPlayer, 'teamdujie')  
 | 
      
 | 
    return  
 | 
  
 | 
def __GiveTeamAward(curPlayer, leaderPlayer, realmIpyData, curStar):  
 | 
    #°ïæ´òµÄ¸ø½±Àø  
 | 
    if not realmIpyData:  
 | 
        return  
 | 
    teamAwardDict = realmIpyData.GetTeamAward()  
 | 
    if not teamAwardDict:  
 | 
        return  
 | 
      
 | 
    prizeItemList = teamAwardDict.get(curStar, [])  
 | 
    needSpace = len(prizeItemList)  
 | 
    emptySpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  
 | 
    isSendMail = int(needSpace > emptySpace) # ÊÇ·ñ·¢ËÍÓʼþ  
 | 
    if isSendMail:  
 | 
        PlayerControl.SendMailByKey("RealmFBTeam", [curPlayer.GetPlayerID()], prizeItemList, [leaderPlayer.GetPlayerName()])  
 | 
        GameWorld.DebugLog("±³°ü¿Õ¼ä²»¹»£¬·¢ËÍÓʼþ: mailItemList=%s" % str(prizeItemList), curPlayer.GetPlayerID())  
 | 
    else:  
 | 
        for itemID, itemCnt, isBind in prizeItemList:  
 | 
            ItemControler.GivePlayerItem(curPlayer, itemID, itemCnt, isBind, [IPY_GameWorld.rptItem],  
 | 
                                            event=["Dojie", False, {}])  
 | 
    return  
 | 
  
 | 
##»ñµÃ¸±±¾°ïÖúÐÅÏ¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ÎÞÒâÒå  
 | 
# @remarks ÓÃÓÚ֪ͨÕóÓª±È·ÖÌõ  
 | 
def DoFBHelp(curPlayer, tick, helpDict={}):  
 | 
  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    leaderPlayerID = gameFB.GetGameFBDictByKey(DuJieFB_LeaderPlayerID)  
 | 
#    curStar = gameFB.GetGameFBDictByKey(DuJieFB_Star)  
 | 
    helpDict[FBCommon.Help_leaderID] = leaderPlayerID  
 | 
    FBCommon.Notify_FBHelp(curPlayer, helpDict)  
 | 
    return  
 | 
  
 | 
  
 | 
## Ö´Ðи±±¾É±¹ÖÂß¼  
 | 
#  @param curPlayer É±¹ÖµÄÈË  
 | 
#  @param curNPC ±»É±µÄ¹Ö  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
def DoFB_Player_KillNPC(curPlayer, curNPC, tick):  
 | 
      
 | 
    bossID = curNPC.GetNPCID()  
 | 
    if bossID != GetDuJieBossID():  
 | 
        return  
 | 
    GameWorld.DebugLog('¶É½ÙÒѱ»»÷ɱ£¡')  
 | 
      
 | 
#    # È«·þ¹ã²¥  
 | 
#    PlayerControl.WorldNotify(0, "jiazu_liubo_202580", [curPlayer.GetFamilyName(), mapID, bossID])  
 | 
    __DoDoJieFBOver(True, tick)  
 | 
    return  
 | 
  
 | 
## ¼ì²éÊÇ·ñ¿É¹¥»÷£¬ Ö÷Åж¨²»¿É¹¥»÷µÄÇé¿ö£¬ÆäËûÂß¼ÓÉÍâ²ã¾ö¶¨  
 | 
#  @param attacker ¹¥»÷·½  
 | 
#  @param defender ·ÀÊØ·½  
 | 
#  @return bool  
 | 
def CheckCanAttackTagObjInFB(attacker, defender):  
 | 
    gameFB = GameWorld.GetGameFB()  
 | 
    if gameFB.GetFBStep() != FB_Step_Fighting:  
 | 
        return False  
 | 
    return True  
 | 
  
 | 
## ¸±±¾ÐÐΪ  
 | 
#  @param curPlayer Íæ¼Ò  
 | 
#  @param actionType ÐÐΪÀàÐÍ  
 | 
#  @param actionInfo ÐÐΪÐÅÏ¢  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
def DoFBAction(curPlayer, actionType, actionInfo, tick):  
 | 
      
 | 
    if curPlayer.GetPlayerID() != GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID):  
 | 
        return  
 | 
    #ÑéÖ¤¼ä¸ô  
 | 
    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_DuJieInspire) < IpyGameDataPY.GetFuncCfg('RealmFBHelpAttr', 3):  
 | 
        #ûµ½¼ä¸ô  
 | 
        GameWorld.DebugLog("µã»÷¹ÄÎè¼ä¸ô")  
 | 
        return  
 | 
    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_DuJieInspire, tick)  
 | 
    OnGetMemberForHelpDujie(curPlayer, True)  
 | 
      
 | 
    return  
 | 
  
 | 
def OnGetMemberForHelpDujie(curPlayer, isInspire):  
 | 
    #ÏòÃËÓÑѰÇóÊØ»¤  
 | 
#    if curPlayer.GetFamilyID() <= 0:  
 | 
#        GameWorld.DebugLog("ûÓÐÕ½ÃË£¬²»ÄÜÇëÇóÊØ»¤£¡")  
 | 
#        return  
 | 
      
 | 
    realmLV = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_RealmLV)  
 | 
    realmIpyData = PlayerPrestigeSys.GetRealmIpyData(realmLV)  
 | 
    if not realmIpyData:  
 | 
        return  
 | 
    if realmIpyData.GetIsBigRealm():  
 | 
        GameWorld.DebugLog("´ó¾³½ç¶É½Ù£¬²»ÄÜÇëÇóÊØ»¤£¡")  
 | 
        return  
 | 
    GameWorld.DebugLog("ÏòÃËÓÑѰÇó¶É½ÙÊØ»¤£¡")  
 | 
    atkAdd = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBAttrAdd % ShareDefine.Def_Effect_BaseAtkAddPer)  
 | 
    msgStr = str([atkAdd, isInspire])  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, 'GetMemberForHelpDujie', msgStr, len(msgStr))  
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
def OnGetDuJieHelpInfo(curPlayer, helpInfo):  
 | 
    #ÊÕµ½ÊØ»¤ÐÅÏ¢   
 | 
    realmFBHelpAttrDict = IpyGameDataPY.GetFuncEvalCfg('RealmFBHelpAttr')  
 | 
    totalAttrDict = {}  
 | 
    fbhelpInfo = ''  
 | 
    for helpType, name in helpInfo:  
 | 
        attrDict = realmFBHelpAttrDict.get(str(helpType), {})  
 | 
        for attrID, attrValue in attrDict.items():  
 | 
            totalAttrDict[attrID] = totalAttrDict.get(attrID, 0) + attrValue  
 | 
        fbhelpInfo +='%s|%s,' % (helpType, name)  
 | 
          
 | 
    for attrID, attrValue in totalAttrDict.items():  
 | 
        if int(attrID) in GetRealmFBTimeCfg()[Def_HelpAddAttrID]:  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RealmFBAttrAdd % attrID, attrValue)  
 | 
  
 | 
    #Ë¢ÊôÐÔ  
 | 
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrByBuff()  
 | 
      
 | 
    #¸±±¾°ïÖúÐÅÏ¢  
 | 
    if fbhelpInfo:  
 | 
        fbhelpInfo = fbhelpInfo[:-1]  
 | 
    helpDict = {'helpInfo':fbhelpInfo}  
 | 
    DoFBHelp(curPlayer, 0, helpDict)  
 | 
    return  
 | 
  
 | 
def CalcDujieFBAttrAdd(curPlayer, allAttrList):  
 | 
    #»¤·¨ÊôÐÔ¼ÆËã  
 | 
    if FBCommon.GetRecordMapID(curPlayer.GetMapID()) != ChConfig.Def_FBMapID_DuJie:  
 | 
        return  
 | 
    leaderPlayerID = GameWorld.GetGameFB().GetGameFBDictByKey(DuJieFB_LeaderPlayerID)  
 | 
    if curPlayer.GetID() != leaderPlayerID:  
 | 
        return  
 | 
#    fbStep = GameWorld.GetGameFB().GetFBStep()  
 | 
#    if fbStep != FB_Step_Fighting:  
 | 
#        return  
 | 
    fbcfg = GetRealmFBTimeCfg()  
 | 
    if not fbcfg:  
 | 
        return  
 | 
    GameWorld.DebugLog('»¤·¨ÊôÐÔ¼ÆËã allAttrList=%s'%allAttrList)  
 | 
    for attrID in GetRealmFBTimeCfg()[Def_HelpAddAttrID]:  
 | 
        attrValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RealmFBAttrAdd % attrID)  
 | 
        PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrList)  
 | 
      
 | 
    GameWorld.DebugLog('»¤·¨ÊôÐÔ¼ÆËã½á¹û allAttrList=%s'%allAttrList)  
 | 
    return  
 | 
## ÊÇ·ñ¸±±¾¸´»î  
 | 
#  @param None  
 | 
#  @return ÊÇ·ñ¸±±¾¸´»î  
 | 
def OnPlayerReborn():  
 | 
    return True 
 |