|  |  | 
 |  |  |     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetFBEnterPos"))
 | 
 |  |  |     
 | 
 |  |  |     if callFunc == None:
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |         posInfo = ipyEnterPosInfo
 | 
 |  |  |     else:
 | 
 |  |  |     posInfo = callFunc(curPlayer, mapID, lineId, ipyEnterPosInfo, tick)
 | 
 |  |  |          | 
 |  |  |     if not posInfo:
 | 
 |  |  |         return
 | 
 |  |  |     enterX, enterY = posInfo[:2]
 | 
 |  |  | 
 |  |  |     
 | 
 |  |  |     return callFunc(curPlayer, mapID, lineID)
 | 
 |  |  | 
 | 
 |  |  | ## 进入跨服副本注册数据前逻辑
 | 
 |  |  | ## @return: 是否可以注册前往跨服副本,次函数中可以写一些扣除消耗逻辑等
 | 
 |  |  | def OnRegEnterCrossFB(curPlayer, mapID, lineID):
 | 
 |  |  |     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
 | 
 |  |  |      | 
 |  |  |     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnRegEnterCrossFB"))
 | 
 |  |  |      | 
 |  |  |     if callFunc == None:
 | 
 |  |  |         return True
 | 
 |  |  |      | 
 |  |  |     return callFunc(curPlayer, mapID, lineID)
 | 
 |  |  | 
 | 
 |  |  | ## 结束跨服副本
 | 
 |  |  | def OnEndCrossFB(curPlayer, mapID, lineID, exData):
 | 
 |  |  | 
 |  |  |         return
 | 
 |  |  |     return callFunc()
 | 
 |  |  | 
 | 
 |  |  | ## 是否需要做进入副本通用检查条件逻辑,默认需要检查
 | 
 |  |  | def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
 | 
 |  |  |     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
 | 
 |  |  |      | 
 |  |  |     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnNeedCheckCanEnterFBComm"))
 | 
 |  |  |      | 
 |  |  |     if callFunc == None:
 | 
 |  |  |         return True
 | 
 |  |  |      | 
 |  |  |     return callFunc(curPlayer, mapID, lineID)
 | 
 |  |  | 
 | 
 |  |  | def OnPlayerLVUp(curPlayer):
 | 
 |  |  |     ## 玩家升级
 | 
 |  |  |     do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
 |