|  |  | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | FBPlayerDict_CurStep = 'FBPlayerDict_CurStep'   # 当前阶段
 | 
 |  |  | FBPlayerDict_StepState = 'FBPlayerDict_StepState'   # 阶段状态
 | 
 |  |  | # 副本通用配置
 | 
 |  |  | (
 | 
 |  |  | Def_PrepareTime, # 准备时间,秒
 | 
 |  |  | 
 |  |  | Def_LeaveTime, # 退出时间, 秒
 | 
 |  |  | Def_CollectTime, # 采集时间, 秒
 | 
 |  |  | Def_RefreshBossMark, # 刷怪标识点
 | 
 |  |  | ) = range(5)
 | 
 |  |  | Def_RefreshBossMark1, # 刷怪标识点
 | 
 |  |  | ) = range(6)
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #当前副本地图的状态
 | 
 |  |  | 
 |  |  | 
 | 
 |  |  |     if fbStep < FB_Step_Prepare:
 | 
 |  |  |         FBCommon.SetFBStep(FB_Step_Prepare, tick)
 | 
 |  |  |          | 
 |  |  |         boxIDList = FBCommon.GetFBLineRefreshNPC(mapID, lineID)[1:]
 | 
 |  |  |         npcCnt = len(boxIDList)
 | 
 |  |  |         NPCCustomRefresh.SetNPCRefresh(__GetFBTimeCfg()[Def_RefreshBossMark1], boxIDList, npcCnt, npcCnt)
 | 
 |  |  |         FBCommon.SyncDynamicBarrierState(IpyGameDataPY.GetFuncEvalCfg('HazyTreasure'), 1, curPlayer) # 准备期间有动态障碍点
 | 
 |  |  |     if fbStep <= FB_Step_Prepare:
 | 
 |  |  |         notify_tick = __GetFBTimeCfg(lineID)[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
 | 
 |  |  |         curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
 | 
 |  |  | 
 |  |  |     gameFB = GameWorld.GetGameFB()
 | 
 |  |  |     
 | 
 |  |  |     curStep = gameFB.GetGameFBDictByKey(FBPlayerDict_CurStep) + 1
 | 
 |  |  |     helpDict = {FBCommon.Help_step:curStep}
 | 
 |  |  |     helpDict = {FBCommon.Help_step:curStep, FBCommon.Help_npcTotal:gameFB.GetGameFBDictByKey(FBPlayerDict_StepState)}
 | 
 |  |  |     GameWorld.DebugLog("DoFBHelp %s" % str(helpDict))
 | 
 |  |  |     FBCommon.Notify_FBHelp(curPlayer, helpDict)
 | 
 |  |  |     return
 | 
 |  |  | 
 |  |  | def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
 | 
 |  |  |     mapID = GameWorld.GetMap().GetMapID()
 | 
 |  |  |     lineID = FBCommon.GetFBPropertyMark()
 | 
 |  |  |     bossID, boxID = FBCommon.GetFBLineRefreshNPC(mapID, lineID)
 | 
 |  |  |     bossID = FBCommon.GetFBLineRefreshNPC(mapID, lineID)[0]
 | 
 |  |  |     if bossID != curNPC.GetNPCID():
 | 
 |  |  |         return
 | 
 |  |  |     #刷宝箱进入采集阶段
 | 
 |  |  |     GameWorld.GetGameFB().SetGameFBDict(FBPlayerDict_CurStep, 1)
 | 
 |  |  |      | 
 |  |  |     DoFBHelp(curPlayer, tick)
 | 
 |  |  |     FBCommon.SyncDynamicBarrierState(IpyGameDataPY.GetFuncEvalCfg('HazyTreasure'), 0, curPlayer)
 | 
 |  |  |     #特效NPC消失
 | 
 |  |  |     FBCommon.ClearFBNPCEx(FBCommon.GetFBLineRefreshNPC(mapID, lineID)[2:])
 | 
 |  |  |      | 
 |  |  |     #FBCommon.SetFBStep(FB_Step_Collect, tick)
 | 
 |  |  |     NPCCustomRefresh.SetNPCRefresh(__GetFBTimeCfg()[Def_RefreshBossMark], [boxID])
 | 
 |  |  |     #NPCCustomRefresh.SetNPCRefresh(__GetFBTimeCfg()[Def_RefreshBossMark], [boxID])
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | ## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
 | 
 |  |  | 
 |  |  | # @return 无意义
 | 
 |  |  | # @remarks
 | 
 |  |  | def OnCanCollect(curPlayer, curNPC, tick):
 | 
 |  |  |     return True
 | 
 |  |  |     gameFB = GameWorld.GetGameFB()
 | 
 |  |  |     curStep = gameFB.GetGameFBDictByKey(FBPlayerDict_CurStep)
 | 
 |  |  |     return curStep == 1
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | ##副本中,采集物需要Loading时间.
 | 
 |  |  | 
 |  |  |     
 | 
 |  |  |     ChNPC.OnCollectEnd(curPlayer, curNPC)
 | 
 |  |  |     GameWorld.DebugLog('    采集成功!', playerID)
 | 
 |  |  |      | 
 |  |  |     #DoFBHelp(curPlayer, 0)
 | 
 |  |  |     GameWorld.GetGameFB().SetGameFBDict(FBPlayerDict_StepState, 1)
 | 
 |  |  |     DoFBHelp(curPlayer, 0)
 | 
 |  |  |     #掉落给奖励
 | 
 |  |  |     DoFairyTreasureOver(curPlayer, tick, dropPosX, dropPosY)
 | 
 |  |  |     
 |