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 ++++++++++++++++++++++++++++++++++----------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3 +--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py | 1 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 2 +-
4 files changed, 37 insertions(+), 19 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index a74a434..5d76327 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/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]
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())
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index ab00bda..38297f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
index d484d6e..2729273 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ b/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)
--
Gitblit v1.8.0