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