From 7311a1f98dccf5b66e30faafd9ef9b6b0b661e23 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 14 八月 2018 17:01:21 +0800 Subject: [PATCH] Fix: 1536 【BUG】娲皇遗迹层数进入错误; 瞬间同时退出时可能导致该bug,修改为按最后一个退出的方式判断; --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py | 42 +++++++++++++++++++++++++++++++----------- 1 files changed, 31 insertions(+), 11 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py index e31eba8..b399c4a 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py @@ -311,15 +311,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'%( @@ -452,11 +472,11 @@ __ProcessOpen(gameWorld, tick) - __ProcessTimeKickPlayer(gameWorld, tick) + __ProcessTimeKickPlayer(gameWorld, tick) # 处理副本生存周期强关副本 - __ProcessFBDelayKickPlayer(gameWorld, tick) + __ProcessFBDelayKickPlayer(gameWorld, tick) # 关闭副本延迟踢出玩家 - __ProcessClose(gameWorld, tick) + __ProcessClose(gameWorld, tick) # 自伸缩副本关闭逻辑 __ProcessMapServerAcPlayer(tick) -- Gitblit v1.8.0