| | |
| | | import GameWorld
|
| | | import ChConfig
|
| | | import PlayerControl
|
| | | import FamilyRobBoss
|
| | | import EventShell
|
| | | import FBLogic
|
| | | import FBCommon
|
| | |
| | | return
|
| | |
|
| | | gameFB = GameWorld.GetGameFB()
|
| | | logOffTick = gameFB.GetPlayerLogoffTick()
|
| | | fbIndex = gameWorld.GetCurGameWorldIndex()
|
| | | if fbIndex in PyGameData.g_lastExitFBType:
|
| | | '''老模式根据 GetPlayerLogoffTick()、GetIsSafeClose()判断的话在某些情况下会有隐藏bug
|
| | | 因为当副本中玩家同时退出时可能出现 GameWorld.GetMapCopyPlayerManager().GetPlayerCount() != 1 的情况
|
| | | 所以老逻辑存在副本无法关闭的bug,这里只使用新模式,老模式暂不做修改,仅做兼容后备处理
|
| | | '''
|
| | | exitFBType, exitTick = PyGameData.g_lastExitFBType[fbIndex]
|
| | | if exitFBType == 1:
|
| | | passTick = tick - exitTick
|
| | | if passTick < ChConfig.Def_EmptyFBKeepTime:
|
| | | #GameWorld.DebugLog("最后一个玩家离线退出的,副本保护中!tick=%s,exitTick=%s,passTick=%s" |
| | | # % (tick, exitTick, passTick), fbIndex)
|
| | | return
|
| | | #GameWorld.DebugLog("最后一个玩家离线退出的,副本保护超时,关闭副本!tick=%s,exitTick=%s,passTick=%s" |
| | | # % (tick, exitTick, passTick), fbIndex)
|
| | | #else:
|
| | | # GameWorld.DebugLog("最后一个玩家主动退出的,直接关闭副本!", fbIndex)
|
| | | PyGameData.g_lastExitFBType.pop(fbIndex)
|
| | | #GameWorld.DebugLog("PyGameData.g_lastExitFBType=%s" % PyGameData.g_lastExitFBType, fbIndex)
|
| | | else:
|
| | | logOffTick = gameFB.GetPlayerLogoffTick()
|
| | |
|
| | | if logOffTick == 0:
|
| | | return
|
| | |
|
| | | if (not gameFB.GetIsSafeClose()) and tick - logOffTick < ChConfig.Def_EmptyFBKeepTime:
|
| | | #GameWorld.Log(str(tick - logOffTick))
|
| | | #不是安全断线的情况下, 返回
|
| | | return
|
| | | if logOffTick == 0:
|
| | | return
|
| | | |
| | | if (not gameFB.GetIsSafeClose()) and tick - logOffTick < ChConfig.Def_EmptyFBKeepTime:
|
| | | #GameWorld.Log(str(tick - logOffTick))
|
| | | #不是安全断线的情况下, 返回
|
| | | return
|
| | |
|
| | | #输出调试信息
|
| | | GameWorld.Log('__ProcessClose! LineID = %s, openState = %s, isSafeClose = %s'%(
|
| | |
| | | return IPY_GameWorld.cmePlayerFull
|
| | |
|
| | | #检查副本状态是否可以登录
|
| | | if not FBCommon.CheckFBStateCanEnter(askStruct):
|
| | | checkRet = FBCommon.CheckFBStateCanEnter(askStruct)
|
| | | if type(checkRet) not in [tuple, list]:
|
| | | checkRet = (checkRet, "FB_andyshao_861048")
|
| | | canEnter, notifyMark = checkRet
|
| | | if not canEnter:
|
| | | #副本关闭中, 请稍后
|
| | | return IPY_GameWorld.cmeCustom, 'FB_andyshao_861048'
|
| | | return IPY_GameWorld.cmeCustom, notifyMark
|
| | |
|
| | | changeMapAskResult = FBLogic.OnChangeMapAsk(askStruct, tick)
|
| | |
|
| | |
| | |
|
| | | __ProcessOpen(gameWorld, tick)
|
| | |
|
| | | __ProcessTimeKickPlayer(gameWorld, tick)
|
| | | __ProcessTimeKickPlayer(gameWorld, tick) # 处理副本生存周期强关副本
|
| | |
|
| | | __ProcessFBDelayKickPlayer(gameWorld, tick)
|
| | | __ProcessFBDelayKickPlayer(gameWorld, tick) # 关闭副本延迟踢出玩家
|
| | |
|
| | | __ProcessClose(gameWorld, tick)
|
| | | __ProcessClose(gameWorld, tick) # 自伸缩副本关闭逻辑
|
| | |
|
| | | __ProcessMapServerAcPlayer(tick)
|
| | |
|
| | |
| | | __RefreshOnFiveMinute(tick)
|
| | | #定时检测关闭超时文件
|
| | | EventReport.OnTimeCloseScribeTxt()
|
| | | |
| | | #仙盟归属boss定时处理
|
| | | FamilyRobBoss.OnFamilyOwnerBossProcess(tick)
|
| | | return
|
| | |
|
| | | ## 通知RouteServer 消息
|