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/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py |   40 ++++++++++++++++++++++++++++++++--------
 1 files changed, 32 insertions(+), 8 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):

--
Gitblit v1.8.0