5424 【后端】【1.4】跨服竞技场开发(PK副本中扩大视野;增加阵营1跟2区分左右;增加对手离线时间通知)
4个文件已修改
56 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1800,7 +1800,7 @@
# 副本中玩家下线就被踢出
Def_DisconnectExit_FBID = []
#会有阵营的地图
Def_MapID_NeedCamp = [Def_FBMapID_FamilyWar, Def_FBMapID_GatherSoul]
Def_MapID_NeedCamp = [Def_FBMapID_FamilyWar, Def_FBMapID_GatherSoul, Def_FBMapID_CrossRealmPK]
# 进入副本需要根据请求lineID动态分配虚拟分线属性的地图
Def_MapID_LineIDToPropertyID = [Def_FBMapID_ElderBattlefield]
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py
@@ -84,8 +84,15 @@
    fbStep = gameFB.GetFBStep()
    GameWorld.Log("DoEnterFB fbRoomID=%s,playerVSRoomID=%s,fbStep=%s" % (roomID, playerVSRoomID, fbStep), playerID)
    
    gameFB.SetGameFBDict(GameFBDict_PlayerLeaveTick % playerID, 0)
    if gameFB.GetGameFBDictByKey(GameFBDict_PlayerLeaveTick % playerID):
        GameWorld.Log("    玩家离线保护时间内上线!", playerID)
        gameFB.SetGameFBDict(GameFBDict_PlayerLeaveTick % playerID, 0)
        playerManager = GameWorld.GetMapCopyPlayerManager()
        for index in xrange(playerManager.GetPlayerCount()):
            player = playerManager.GetPlayerByIndex(index)
            if player and player.GetPlayerID() != curPlayer.GetPlayerID():
                player.Sync_TimeTick(ChConfig.tttPlayerLeave, 0, 0, True)
    fbRoundNum = gameFB.GetGameFBDictByKey(FB_RoundNum)
    playerRoundNum = gameFB.GetPlayerGameFBDictByKey(playerID, FBPDict_RoundNum)
    if playerRoundNum and fbRoundNum and playerRoundNum != fbRoundNum:
@@ -98,8 +105,8 @@
    if fbStep >= FB_State_Leave or not roomID or not playerVSRoomID or roomID != playerVSRoomID:
        PlayerControl.PlayerLeaveFB(curPlayer)
        return
    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default * 3)
    
    PlayerControl.SetSight(curPlayer, ChConfig.Def_PlayerSight_Default * 2)
    # 非战斗阶段,通知动态障碍点
    if fbStep < FB_State_Fight:
        FBCommon.SyncDynamicBarrierState(IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKFB", 2), 1, curPlayer) # 准备期间有动态障碍点
@@ -107,13 +114,14 @@
    fbTimeList = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKFB", 1)
    
    if fbStep == FB_State_Open:
        curPlayer.SetFaction(1)
        gameFB.SetGameFBDict(GameFBDict_FBPlayerID % 1, playerID)
        gameFB.SetPlayerGameFBDict(playerID, FBPDict_ResetPosX, curPlayer.GetPosX())
        gameFB.SetPlayerGameFBDict(playerID, FBPDict_ResetPosY, curPlayer.GetPosY())
        gameFB.SetPlayerGameFBDict(playerID, FBPDict_RoundNum, 1)
        FBCommon.SetFBStep(FB_State_Waiting, tick)
        GameWorld.Log("    第一个进入,设置副本进入等待对手阶段!roomID=%s" % (roomID), playerID)
        __ResetPlayerState(gameFB, curPlayer, playerID, False)
        GameWorld.Log("    第一个进入,阵营1,设置副本进入等待对手阶段!roomID=%s" % (roomID), playerID)
        __ResetPlayerState(gameFB, curPlayer, playerID)
        curPlayer.Sync_TimeTick(ChConfig.tttWaitPlayer, 0, fbTimeList[Def_Time_MaxWait] * 1000, True)
        sendMsg = str([roomID])
        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "CrossPKRoomOpen", sendMsg, len(sendMsg))
@@ -122,12 +130,13 @@
        playerIDA = gameFB.GetGameFBDictByKey(GameFBDict_FBPlayerID % 1)
        playerIDB = gameFB.GetGameFBDictByKey(GameFBDict_FBPlayerID % 2)
        if not playerIDB and playerIDA != playerID:
            curPlayer.SetFaction(2)
            gameFB.SetGameFBDict(GameFBDict_FBPlayerID % 2, playerID)
            gameFB.SetPlayerGameFBDict(playerID, FBPDict_ResetPosX, curPlayer.GetPosX())
            gameFB.SetPlayerGameFBDict(playerID, FBPDict_ResetPosY, curPlayer.GetPosY())
            gameFB.SetPlayerGameFBDict(playerID, FBPDict_RoundNum, 1)
            GameWorld.Log("    第二个进入的玩家!roomID=%s" % (roomID), playerID)
            __ResetPlayerState(gameFB, curPlayer, playerID, False)
            GameWorld.Log("    第二个进入的玩家!阵营2,roomID=%s" % (roomID), playerID)
            __ResetPlayerState(gameFB, curPlayer, playerID)
            
        if GameWorld.GetMapCopyPlayerManager().GetPlayerCount() == 2:
            GameWorld.Log("    两个人都在,设置副本进入战斗倒计时阶段!roomID=%s" % (roomID), playerID)
@@ -173,6 +182,15 @@
    playerID = curPlayer.GetPlayerID()
    gameFB.SetGameFBDict(GameFBDict_PlayerLeaveTick % playerID, tick)
    GameWorld.Log("玩家战斗阶段下线!playerID=%s,waitPlayerID=%s" % (playerID, playerID))
    ## 通知对方,对手掉线
    playerManager = GameWorld.GetMapCopyPlayerManager()
    for index in xrange(playerManager.GetPlayerCount()):
        player = playerManager.GetPlayerByIndex(index)
        if player and player.GetPlayerID() != curPlayer.GetPlayerID():
            fbTimeList = IpyGameDataPY.GetFuncEvalCfg("CrossRealmPKFB", 1)
            player.Sync_TimeTick(ChConfig.tttPlayerLeave, 0, max(fbTimeList[Def_Time_Protect] * 1000, 0), True)
    return
## 获得副本帮助信息
@@ -344,7 +362,6 @@
    nextRoundNum = gameFB.GetGameFBDictByKey(FB_RoundNum) + 1
    gameFB.SetGameFBDict(FB_RoundNum, nextRoundNum)
    
    isWinnerResetState = False
    copyMapPlayerManager = GameWorld.GetMapCopyPlayerManager()
    for i in xrange(copyMapPlayerManager.GetPlayerCount()):
        player = copyMapPlayerManager.GetPlayerByIndex(i)
@@ -359,8 +376,7 @@
            ChPlayer.PlayerRebornByType(player, ChConfig.rebornType_System, tick)
            __ResetPlayerState(gameFB, player, playerID)
        else:
            if isWinnerResetState:
                __ResetPlayerState(gameFB, player, playerID)
            __ResetPlayerState(gameFB, player, playerID, False)
                
        FBCommon.Notify_FBHelp(player, helpDict)
        
@@ -441,12 +457,14 @@
    __DoFBPKAllOver(winner, winnerID, loser, loserID, overType, tick)
    return
def __ResetPlayerState(gameFB, player, playerID, resetPos=True):
    if resetPos:
        posX = gameFB.GetPlayerGameFBDictByKey(playerID, FBPDict_ResetPosX)
        posY = gameFB.GetPlayerGameFBDictByKey(playerID, FBPDict_ResetPosY)
        player.ResetPos(posX, posY)
def __ResetPlayerState(gameFB, player, playerID, resetAttr=True):
    posX = gameFB.GetPlayerGameFBDictByKey(playerID, FBPDict_ResetPosX)
    posY = gameFB.GetPlayerGameFBDictByKey(playerID, FBPDict_ResetPosY)
    player.ResetPos(posX, posY)
    if not resetAttr:
        return
    if player.GetHP() != player.GetMaxHP():
        player.SetHP(player.GetMaxHP())
        
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -1346,8 +1346,7 @@
    
    #设置阵营
    if curPlayer.GetFaction() != ChConfig.CampType_Neutral \
                and GameWorld.GetMap().GetMapID() not in ChConfig.Def_MapID_NeedCamp \
                and GameWorld.GetMap().GetMapID() not in ReadChConfig.GetEvalChConfig("MapID_NeedCamp"):
                and FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) not in ChConfig.Def_MapID_NeedCamp:
        #重置阵营
        curPlayer.SetFaction(ChConfig.CampType_Neutral)
        BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Justice, tick)
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -77,6 +77,7 @@
    ## 玩家退出跨服处理,本服的逻辑处理
    GameWorld.Log("DoExitCrossRealm...", curPlayer.GetPlayerID())
    curPlayer.SetVisible(True)
    curPlayer.RefreshView()
    curPet = curPlayer.GetPetMgr().GetFightPet()
    if curPet:
        curPet.SetVisible(True)