hxp
2018-10-26 e893a6cab624a161ae6c09dd48dfd1f1e97d929b
3964 【后端】防范登录下线流程错误
3个文件已修改
70 ■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/ChPlayer.py
@@ -68,6 +68,7 @@
import GMT_CTG
import PyGameData
import GMShell
import IPY_PlayerDefine
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -77,7 +78,15 @@
#  @return None
#  @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态
def PlayerLogin(index, tick):
    GameWorld.GetPsycoFunc(__Func_PlayerLogin)(index, tick)
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    try:
        __Func_PlayerLogin(curPlayer, tick)
    except:
        curPlayer.Kick(IPY_PlayerDefine.disWaitForPlayerLoinError)
        import traceback
        GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc())
    return
#---------------------------------------------------------------------
@@ -86,10 +95,8 @@
#  @param tick 当前时间
#  @return None
#  @remarks 登陆顺序, PlayerLogin->PlayerLoadMapState(PlayerLoginLoadMapOK), 此处未设置初始化状态
def __Func_PlayerLogin(index, tick):
def __Func_PlayerLogin(curPlayer, tick):
    
    #玩家登录初始化
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    #玩家在线时间初始化
    InitPlayerOnLineTime(curPlayer, tick)
    #玩家响应信息初始化
@@ -483,7 +490,16 @@
#  @return None
#  @remarks 函数详细说明.
def PlayerDisconnect(index, tick):
    GameWorld.GetPsycoFunc(__Func_PlayerDisconnect)(index, tick)
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    try:
        __Func_PlayerDisconnect(curPlayer, tick)
    except:
        import traceback
        GameWorld.ErrLog("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家下线逻辑错误~~~~\r\n%s" % traceback.format_exc())
    #调用底层下线
    curPlayer.DoDisconnect()
    return
## 玩家下线(封包参数)
@@ -491,8 +507,7 @@
#  @param tick 当前时间
#  @return None
#  @remarks 函数详细说明.
def __Func_PlayerDisconnect(index, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
def __Func_PlayerDisconnect(curPlayer, tick):
    
    #跨服匹配PK
    #GameWorldMergePK.OnLeaveServer(curPlayer)
@@ -510,8 +525,6 @@
    #MergePlayer.OnPlayerLeaveGotoMergeServer(curPlayer, tick)
    #------------镖车逻辑
    #TruckPlayerDisconnectProcess(curPlayer, tick)
    #调用底层下线
    curPlayer.DoDisconnect()
    return
## 设置玩家离线时间
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -925,14 +925,23 @@
    #这里只做初始化逻辑
    #在玩家切换场景的时候, 不会调用到这里
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    InitLoginPlayer(curPlayer, tick)
    DoPlayerLogin(curPlayer, tick)
    try:
        InitLoginPlayer(curPlayer, tick)
        DoPlayerLogin(curPlayer, tick)
        #锁住玩家, 等到读取地图成功, 再解锁
        curPlayer.SetCanMove(False)
        #登陆发图形验证码
        PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
    except:
        curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
        import traceback
        GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc())
    return
    
    #锁住玩家, 等到读取地图成功, 再解锁
    curPlayer.SetCanMove(False)
    #登陆发图形验证码
    PlayerAutoCheckOnline.PlayerLoginCaptcha(curPlayer, tick)
    
#---------------------------------------------------------------------
##C++封包触发, 玩家切换地图的时候, 在本地图登录
@@ -2420,7 +2429,7 @@
        import traceback
        GameWorld.ErrLog("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家下线~~~~~\r\n%s" % traceback.format_exc())
            raise Exception("玩家下线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        
    #调用底层使玩家下线
    curPlayer.DoDisconnect(tick)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -426,9 +426,17 @@
#  @remarks 函数详细说明.
def GameServer_InitOK(index, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    #通知BServer自己OK了
    curPlayer.SendToBServerServerInitOK()
    ChPlayer.OnAllServerInitOK(curPlayer, tick)
    try:
        #通知BServer自己OK了
        curPlayer.SendToBServerServerInitOK()
        ChPlayer.OnAllServerInitOK(curPlayer, tick)
    except:
        curPlayer.Kick(IPY_GameWorld.disWaitForPlayerLoinError)
        import traceback
        GameWorld.ErrLog("玩家上线逻辑错误~~~~~\r\n%s" % traceback.format_exc())
        if GameWorld.GetGameWorld().GetDebugLevel():
            raise Exception("玩家上线逻辑错误~~~~\r\n%s" % traceback.format_exc())
    return
#--------------------------------------------------------
def PlayerOnDay(curPlayer):