xdh
2019-05-30 60738f90008d8bea155d34a842c87c9e6cf0c66f
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -260,6 +260,8 @@
    if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
        PlayerFB.DoExitCustomScene(curPlayer)
        
    PetControl.DoLogic_PetLoadMapOK(curPlayer)
    msgInfo = ""
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
    return
@@ -1033,11 +1035,10 @@
    __CheckClearBuffOnMapChange(curPlayer, tick)
            
    #刷新玩家的视野
    if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)):
    if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)):
        GameWorld.DebugLog("===登录本服地图时,处于跨服或自定义场景状态,不刷新视野!", curPlayer.GetPlayerID())
        curPlayer.SetSightLevel(curPlayer.GetID())
    if curPlayer.GetLV() > 1:
        PlayerState.ChangePlayerSigh(curPlayer, tick)
        PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
    PlayerState.ChangePlayerSigh(curPlayer, tick)
    
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(False)
@@ -1404,10 +1405,10 @@
        #刷新自己的视野
        if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)):
            GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID())
        else:
            curPlayer.RefreshView()
            curPlayer.SetVisible(True)
            PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
        curPlayer.RefreshView()
        curPlayer.SetVisible(True)
    #如果玩家hp为0,设置玩家为死亡状态
    if curPlayer.GetHP() <= 0:
        curPlayer.SetPlayerAction(IPY_GameWorld.paDie)
@@ -2454,7 +2455,7 @@
        GameWorld.DebugLog("当前无跨服地图!")
        return
    
    if not __CheckCanReborn(curPlayer, rebornType):
    if not __CheckCanReborn(curPlayer, rebornType, checkHPState=False):
        return
    
    msgDict = {"PlayerID":curPlayer.GetPlayerID(), "RebornType":rebornType}
@@ -4089,10 +4090,17 @@
#---------------------------------------------------------------------
def __CheckCanReborn(curPlayer, rebornType, gameMap=None):
def __CheckCanReborn(curPlayer, rebornType, gameMap=None, checkHPState=True):
    ''' 检查可否复活,为了逻辑统一,这里不适用玩家所在的地图,支持跨服状态下判断跨服地图
                本函数不验证玩家死亡状态等,因为有可能前后端复活状态不一致,如果这里拦住可能导致前端躺尸复活不了
    '''
    if checkHPState and curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
        # 当血量大于0收到复活请求时,一般是前后端复活状态不一致的情况下导致的
        # 由于前端需要根据复活状态判断复活界面相关逻辑,所以这里需要做一些特殊处理,防止某些情况下前后端复活状态不一致导致的一些异常问题
        # 后端非死亡状态的情况,补同步一次复活包给前端
        SyncPlayerReborn(curPlayer, rebornType)
        return
    
    if rebornType not in ChConfig.Def_RebornTypeList:
        return
@@ -4151,13 +4159,6 @@
def __DoPlayerReborn(curPlayer, rebornType, tick, mapBornPlace=0, isAddSuperBuff=True):
    ## 执行玩家复活逻辑,该函数没有执行验证是否可复活等,不可直接调用
    if curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
        # 当血量大于0收到复活请求时,一般是前后端复活状态不一致的情况下导致的
        # 由于前端需要根据复活状态判断复活界面相关逻辑,所以这里需要做一些特殊处理,防止某些情况下前后端复活状态不一致导致的一些异常问题
        # 后端非死亡状态的情况,补同步一次复活包给前端
        SyncPlayerReborn(curPlayer, rebornType)
        return
    
    resetHpPercent = ChConfig.Def_MaxRateValue
    isFBReborn = False