6970 【2.0】【后端】缥缈仙域仙草园(修复草园中下线重上会看到其他NPC的bug)
修复跨服复活bug、进出跨服的视野管理由原来的设置不可见改为按视野层级管理;
3个文件已修改
42 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
@@ -139,7 +139,9 @@
            
        if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
            FBCommon.DelFBEnterTicket(curPlayer, mapID, lineID)
    else:
        DoCheckUpdateGrasslandEnd(curPlayer)
    SyncCustomSceneNPCCount(curPlayer, mapID, lineID)
    if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
        boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -1033,11 +1033,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())
        PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
    if curPlayer.GetLV() > 1:
        PlayerState.ChangePlayerSigh(curPlayer, tick)
    PlayerState.ChangePlayerSigh(curPlayer, tick)
    
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(False)
@@ -1404,10 +1403,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 +2453,7 @@
        GameWorld.DebugLog("当前无跨服地图!")
        return
    
    if not __CheckCanReborn(curPlayer, rebornType):
    if not __CheckCanReborn(curPlayer, rebornType, checkHPState=False):
        return
    
    msgDict = {"PlayerID":curPlayer.GetPlayerID(), "RebornType":rebornType}
@@ -4089,12 +4088,12 @@
#---------------------------------------------------------------------
def __CheckCanReborn(curPlayer, rebornType, gameMap=None):
def __CheckCanReborn(curPlayer, rebornType, gameMap=None, checkHPState=True):
    ''' 检查可否复活,为了逻辑统一,这里不适用玩家所在的地图,支持跨服状态下判断跨服地图
                本函数不验证玩家死亡状态等,因为有可能前后端复活状态不一致,如果这里拦住可能导致前端躺尸复活不了
    '''
    if curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
    if checkHPState and curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
        # 当血量大于0收到复活请求时,一般是前后端复活状态不一致的情况下导致的
        # 由于前端需要根据复活状态判断复活界面相关逻辑,所以这里需要做一些特殊处理,防止某些情况下前后端复活状态不一致导致的一些异常问题
        # 后端非死亡状态的情况,补同步一次复活包给前端
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -147,26 +147,13 @@
def DoEnterCrossRealm(curPlayer):
    ## 玩家进入跨服处理,本服的逻辑处理
    curPlayer.SetCanAttack(False)
    curPlayer.SetVisible(False)
    curPlayer.SetSight(0)
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(False)
    PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
    return
def DoExitCrossRealm(curPlayer):
    ## 玩家退出跨服处理,本服的逻辑处理
    GameWorld.Log("DoExitCrossRealm...", curPlayer.GetPlayerID())
    curPlayer.SetCanAttack(True)
    curPlayer.SetVisible(True)
    curPlayer.SetSight(0)
    curPlayer.RefreshView()
    curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
    curPlayer.RefreshView()
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(True)
    PlayerControl.SetPlayerSightLevel(curPlayer, 0)
    if PlayerControl.GetCrossMapID(curPlayer):
        PlayerControl.SetCrossMapID(curPlayer, 0)
    return