xdh
2018-10-25 6366979426fccd97c0cb0bd384ada3a8b9843a24
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -39,6 +39,7 @@
import GameWorld
import ChConfig
import PlayerControl
import FamilyRobBoss
import EventShell
import FBLogic
import FBCommon
@@ -311,15 +312,35 @@
        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'%(
@@ -402,9 +423,13 @@
            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)
@@ -452,11 +477,11 @@
    
    __ProcessOpen(gameWorld, tick)
    
    __ProcessTimeKickPlayer(gameWorld, tick)
    __ProcessTimeKickPlayer(gameWorld, tick) # 处理副本生存周期强关副本
    
    __ProcessFBDelayKickPlayer(gameWorld, tick)
    __ProcessFBDelayKickPlayer(gameWorld, tick) # 关闭副本延迟踢出玩家
    
    __ProcessClose(gameWorld, tick)
    __ProcessClose(gameWorld, tick) # 自伸缩副本关闭逻辑
    
    __ProcessMapServerAcPlayer(tick)
    
@@ -477,6 +502,9 @@
    __RefreshOnFiveMinute(tick)
    #定时检测关闭超时文件
    EventReport.OnTimeCloseScribeTxt()
    #仙盟归属boss定时处理
    FamilyRobBoss.OnFamilyOwnerBossProcess(tick)
    return
## 通知RouteServer 消息