From 1da80cb1af2bcf8fba0510000f265bfcac69afbe Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 26 十二月 2018 22:12:07 +0800 Subject: [PATCH] 5424 【后端】【1.4】跨服竞技场开发(PK副本中扩大视野;增加阵营1跟2区分左右;增加对手离线时间通知) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py | 50 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 34 insertions(+), 16 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py index ee411d7..0213d80 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py +++ b/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()) -- Gitblit v1.8.0