From b55e44e72006eb1b6137dd8276da1383adaaebc6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 06 十二月 2023 10:13:17 +0800
Subject: [PATCH] 9811 【BT9】【后端】逐鹿万界(战旗归属变更实时通知;战斗阶段掉线重连不拉回安全区,主动退出重进拉回;NPCAI102属性报错防范;优化复活时间地图ID读取;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_102.py | 2 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 2 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py | 40 ++++++++++++++++++++++++++++++++--------
3 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py
index e6d8024..5004bbf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py
@@ -146,13 +146,12 @@
return
def popPlayerFlag(self, playerID):
- self.playerFlagDict.pop(playerID, None)
-
+ flagNPC = self.playerFlagDict.pop(playerID, None)
+ if not flagNPC:
+ return
+ npcID = flagNPC.GetNPCID()
flagOwner = self.worldHelpDict.get("flagOwner", {})
- for npcIDStr, playerInfo in flagOwner.items():
- if playerID == playerInfo[0]:
- flagOwner[npcIDStr] = [0, "", "", 0]
- break
+ flagOwner[str(npcID)] = [0, "", "", 0]
self.worldHelpDict["flagOwner"] = flagOwner
return
@@ -279,6 +278,8 @@
self.outsideFlagTick = 0 # 超出战旗范围计算tick
self.outsideFlagNotifySecond = 0 # 通知超出范围秒
+ self.leaveState = 0 # 1-主动离开;2-掉线
+
self.playerHelpDict = {} # 未通知的玩家变更信息
return
@@ -396,7 +397,9 @@
batPlayer.doPlayerEnter(curPlayer, tick)
batFamily.addJoinPlayer(playerID)
- batFamily.setPlayerToRebornPoint(curPlayer)
+ if batPlayer.leaveState != 2: # 掉线的不打回出生点
+ batFamily.setPlayerToRebornPoint(curPlayer)
+ batPlayer.leaveState = 0
if fbStep == FB_Step_Prepare:
notify_tick = GetBFStepTime()[Time_Prepare] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
@@ -471,14 +474,27 @@
mgr = GetBattleMgr()
playerID = curPlayer.GetPlayerID()
- GameWorld.Log("DoExitFB... playerID=%s,fbStep=%s" % (playerID, fbStep), mgr.zoneID)
batPlayer = mgr.getBattlePlayer(playerID)
batPlayer.onlineCalcTick = 0
+ if batPlayer.leaveState != 1:
+ batPlayer.leaveState = 2
+
+ GameWorld.Log("DoExitFB... playerID=%s,fbStep=%s,leaveState=%s" % (playerID, fbStep, batPlayer.leaveState), mgr.zoneID)
return
##玩家主动离开副本.
def DoPlayerLeaveFB(curPlayer, tick):
+ gameFB = GameWorld.GetGameFB()
+ fbStep = gameFB.GetFBStep()
+ if fbStep != FB_Step_Fighting:
+ return
+
+ mgr = GetBattleMgr()
+ playerID = curPlayer.GetPlayerID()
+ batPlayer = mgr.getBattlePlayer(playerID)
+ batPlayer.leaveState = 1
+ GameWorld.Log("DoPlayerLeaveFB... playerID=%s,fbStep=%s" % (playerID, fbStep), mgr.zoneID)
return
##副本总逻辑计时器
@@ -606,6 +622,7 @@
if not mgr.playerFlagDict:
return
+ isUpd = False
outsideR, protectSeconds = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarFlag", 4)
copyMapMgr = GameWorld.GetMapCopyPlayerManager()
@@ -614,6 +631,7 @@
if not curPlayer:
# 找不到玩家,直接归还战旗
setFlagOwner(flagNPC, None, tick)
+ isUpd = True
continue
flagPosX, flagPosY = flagNPC.GetPosX(), flagNPC.GetPosY()
@@ -633,6 +651,10 @@
PlayerControl.NotifyCode(curPlayer, "CrossFamilyFlagwarOutsideflag", [flagNPC.GetNPCID(), remainSecond])
continue
setFlagOwner(flagNPC, None, tick)
+ isUpd = True
+
+ if isUpd:
+ NotifyCrossFamilyFlagHelp()
return
def setFlagOwner(flagNPC, newOwner, tick):
@@ -822,6 +844,7 @@
if flagType:
setFlagOwner(curNPC, curPlayer, tick)
+ NotifyCrossFamilyFlagHelp()
return
@@ -854,6 +877,7 @@
# 获得对方战旗归属
if defPlayerID in mgr.playerFlagDict:
setFlagOwner(mgr.playerFlagDict[defPlayerID], curPlayer, tick)
+ NotifyCrossFamilyFlagHelp()
return True
def OnCanFBReborn(curPlayer, rebornType):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_102.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_102.py
index b473306..a098ce8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_102.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_102.py
@@ -46,6 +46,8 @@
#NPC死亡, 进入死亡倒计时
return
+ if not hasattr(curNPC, "GetLastTime") or not hasattr(curNPC, "GetBornTime"):
+ return
curNPCControl = NPCCommon.NPCControl(curNPC)
if GameObj.GetHP(curNPC) <= 0 or (curNPC.GetLastTime() != 0 and tick - curNPC.GetBornTime() >= curNPC.GetLastTime()):
#GameWorld.Log("召唤兽超过存活时间, 设置死亡")
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 2de8b03..ec120ad 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -4343,7 +4343,7 @@
mapType = GameWorld.GetMap().GetMapFBType()
if mapType != IPY_GameWorld.fbtNull:
fbRebornTimeDict = IpyGameDataPY.GetFuncEvalCfg('DuplicatesRebornTime', 1)
- curMapID = GameWorld.GetMap().GetMapID()
+ curMapID = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
if curMapID in fbRebornTimeDict:
return fbRebornTimeDict[curMapID]
return fbRebornTimeDict.get(0, 0)
--
Gitblit v1.8.0