9811 【BT9】【后端】逐鹿万界(战旗归属变更实时通知;战斗阶段掉线重连不拉回安全区,主动退出重进拉回;NPCAI102属性报错防范;优化复活时间地图ID读取;)
3个文件已修改
44 ■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AIType_102.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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):
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("召唤兽超过存活时间, 设置死亡")
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)