From a50378bad9ed208277b4a631307fd2db270c5736 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 13 十月 2025 11:31:46 +0800
Subject: [PATCH] 16 卡牌服务端(删除通用养成副本逻辑;)

---
 /dev/null                                                                                                |   99 ---------------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py            |    3 -
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                     |   33 -----------
 PySysDB/PySysDBPY.h                                                                                      |   13 ----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py |   16 -----
 5 files changed, 0 insertions(+), 164 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 6f0a8f9..434c83a 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1240,19 +1240,6 @@
 	DWORD		ADMapID;	//对应副本ID,默认给该副本1次次数
 };
 
-//副本通用养成表
-
-struct tagFBGeneralTrain
-{
-	DWORD		_DataMapID;	//数据地图ID
-	BYTE		_LineID;	//功能线路ID
-	WORD		LVLimit;	//多少级可挑战, 0为不限制
-	WORD		RealmLimit;	//多少境界可挑战, 0为不限制
-	DWORD		BossNPCID;	//过关bossID
-	list		OtherNPCIDList;	//其他NPCIDList
-	list		PassAwardItemList;	//过关奖励列表
-};
-
 //日常活动表
 
 struct tagDailyAction
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
index 322f90c..f967a59 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -1311,9 +1311,6 @@
         if mapID in value:
             return key
         
-    if mapID in FBCommon.GetGeneralTrainMapIDList():
-        return "GeneralTrain"
-    
     #for key , value in ReadChConfig.GetEvalChConfig("MapID_ProcessPy").items():
     #    if mapID in value:
     #        return key
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
index 51b29fe..1134db7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py
@@ -1678,22 +1678,6 @@
 #            return dataMapID
     return mapID
 
-def GetGeneralTrainMapIDList():
-    ## 获取通用养成副本
-    GeneralTrainMapIDList = IpyGameDataPY.GetConfigEx("GeneralTrainMapIDList")
-    if not GeneralTrainMapIDList:
-        GeneralTrainMapIDList = []
-        ipyDataMgr = IpyGameDataPY.IPY_Data()
-        for i in xrange(ipyDataMgr.GetFBGeneralTrainCount()):
-            ipyData = ipyDataMgr.GetFBGeneralTrainByIndex(i)
-            dMapID = ipyData.GetDataMapID()
-            if dMapID not in GeneralTrainMapIDList:
-                GeneralTrainMapIDList.append(dMapID)
-        GeneralTrainMapIDList = IpyGameDataPY.SetConfigEx("GeneralTrainMapIDList", GeneralTrainMapIDList)
-        #GameWorld.Log("加载GeneralTrainMapIDList=%s" % GeneralTrainMapIDList)
-        
-    return GeneralTrainMapIDList
-
 def Sync_FBPlayerFBInfoData(curPlayer, mapIDInfo=None):
     ## 通知个人通用副本信息
     if not mapIDInfo:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py
deleted file mode 100644
index bdc0472..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_CrossChampionship
-#
-# @todo:跨服排位争霸赛
-# @author hxp
-# @date 2022-09-21
-# @version 1.0
-#
-# 详细描述: 跨服排位争霸赛
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2022-09-21 21:30"""
-#-------------------------------------------------------------------------------
-#
-# 改为使用镜像PK,逻辑统一放 GameLogic_MirrorBattle
-#
\ No newline at end of file
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
deleted file mode 100644
index 5004bbf..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossFamilyFlagwar.py
+++ /dev/null
@@ -1,1001 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_CrossFamilyFlagwar
-#
-# @todo:跨服仙盟夺旗战/逐鹿万界
-# @author hxp
-# @date 2023-04-25
-# @version 1.0
-#
-# 详细描述: 跨服仙盟夺旗战
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2023-04-25 15:30"""
-#-------------------------------------------------------------------------------
-
-import ChConfig
-import FBCommon
-import GameWorld
-import ShareDefine
-import IPY_GameWorld
-import IpyGameDataPY
-import GameWorldProcess
-import DataRecordPack
-import PlayerControl
-import SkillCommon
-import BuffSkill
-import AICommon
-import GameObj
-import GameMap
-
-import operator
-import time
-
-#当前副本地图的状态
-(
-FB_Step_Open, # 地图开启
-FB_Step_Prepare, # 地图准备
-FB_Step_Fighting, # 战斗中
-FB_Step_LeaveTime, # 自由时间
-FB_Step_Over, # 副本关闭
-) = range(5)
-
-(
-Time_Prepare, # 副本准备时间 0
-Time_Fight, # 副本战斗时间 1
-Time_Leave, # 副本离开时间 2
-) = range(3)
-
-FightRefreshInterval = 5000 # 战斗阶段刷新处理间隔,毫秒
-
-GameFBData_BattleMgr = "BattleMgr"
-
-## 战场管理类
-class BattleMgr():
-    
-    def __init__(self):
-        self.zoneID = 0
-        self.battlePlayerDict = {} # 参与战斗的玩家 {playerID:BattlePlayer, ...}
-        self.battleFamilyDict = {} # 参与战斗的仙盟 {familyID:BattleFamily, ...}
-        self.battleFamilySortList = [] # 参与战斗的仙盟积分排名列表 [BattleFamily, ...]
-        
-        self.allotRebornPointInfo = {} # 已经分配的复活点,一个复活点可能多个仙盟共用 {index:[familyID, ...], ...}
-        
-        self.playerFlagDict = {} # 玩家获得战旗 {playerID:flagNPC, ...}
-        
-        self.worldHelpDict = {} # 未通知的世界变更信息
-        return
-    
-    def sortBattleFamilyScore(self):
-        self.battleFamilySortList = self.battleFamilyDict.values()
-        self.battleFamilySortList.sort(key=operator.attrgetter("score", "scoreSortTime"), reverse=True)
-        return
-    
-    def getBattleFamily(self, familyID):
-        if familyID in self.battleFamilyDict:
-            batFamily = self.battleFamilyDict[familyID]
-        else:        
-            batFamily = BattleFamily(familyID)
-            self.battleFamilyDict[familyID] = batFamily
-        return batFamily
-    
-    def getBattlePlayer(self, playerID):
-        if playerID in self.battlePlayerDict:
-            batPlayer = self.battlePlayerDict[playerID]
-        else:        
-            batPlayer = BattlePlayer(playerID)
-            self.battlePlayerDict[playerID] = batPlayer
-        return batPlayer
-    
-    def addBattleFamily(self, familyID, name):
-        batFamily = self.getBattleFamily(familyID)
-        batFamily.name = name
-        self.__allotRebornPoint(familyID)
-        return batFamily
-    
-    def __allotRebornPoint(self, familyID):
-        batFamily = self.getBattleFamily(familyID)
-        for familyIDList in self.allotRebornPointInfo.values():
-            if familyID in familyIDList:
-                return
-        allotIndex = -1
-        allotAlreadyIndexs = self.allotRebornPointInfo.keys()
-        rebornPointList = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwar", 2)
-        if len(rebornPointList) > len(allotAlreadyIndexs):
-            # 还有空余点未分配,直接分配空余点
-            for index, _ in enumerate(rebornPointList):
-                if index not in allotAlreadyIndexs:
-                    allotIndex = index
-                    break
-        
-        if allotIndex == -1:
-            # 没有空余点了,与其他仙盟共用,分配一个最少仙盟的复活点
-            leastIDCount = 99999
-            for index, familyIDList in self.allotRebornPointInfo.items():
-                if len(familyIDList) < leastIDCount and index < len(rebornPointList):
-                    leastIDCount = len(familyIDList)
-                    allotIndex = index
-                                
-        rebornPoint = rebornPointList[allotIndex]
-        if len(rebornPoint) != 3:
-            GameWorld.ErrLog("复活点配置异常! index=%s, %s" % (allotIndex, rebornPoint))
-            return
-        
-        if allotIndex not in self.allotRebornPointInfo:
-            self.allotRebornPointInfo[allotIndex] = []
-        familyIDList = self.allotRebornPointInfo[allotIndex]
-        familyIDList.append(familyID)
-        
-        batFamily.rebornPoint = rebornPoint
-        GameWorld.Log("分配仙盟复活点: familyID=%s,allotIndex=%s,rebornPoint=%s,allotRebornPointInfo=%s" 
-                      % (familyID, allotIndex, rebornPoint, self.allotRebornPointInfo), self.zoneID)
-        return True
-    
-    def setPlayerFlag(self, playerID, flagNPC):
-        self.playerFlagDict[playerID] = flagNPC
-        
-        npcID = flagNPC.GetNPCID()
-        batPlayer = self.getBattlePlayer(playerID)
-        familyID = batPlayer.familyID
-        batFamily = self.getBattleFamily(familyID)
-        flagOwner = self.worldHelpDict.get("flagOwner", {})
-        flagOwner[str(npcID)] = [playerID, batPlayer.name, batFamily.name, familyID]
-        self.worldHelpDict["flagOwner"] = flagOwner
-        return
-    
-    def popPlayerFlag(self, playerID):
-        flagNPC = self.playerFlagDict.pop(playerID, None)
-        if not flagNPC:
-            return
-        npcID = flagNPC.GetNPCID()
-        flagOwner = self.worldHelpDict.get("flagOwner", {})
-        flagOwner[str(npcID)] = [0, "", "", 0]
-        self.worldHelpDict["flagOwner"] = flagOwner
-        return
-    
-    def getWorldHelpInfo(self, isAll, familyID):
-        helpInfo = {}
-        if not isAll:
-            helpInfo = self.worldHelpDict
-        else:
-            flagOwner = {}
-            for playerID, flagNPC in self.playerFlagDict.items():
-                npcID = flagNPC.GetNPCID()
-                batPlayer = self.getBattlePlayer(playerID)
-                familyID = batPlayer.familyID
-                batFamily = self.getBattleFamily(familyID)
-                flagOwner[str(npcID)] = [playerID, batPlayer.name, batFamily.name, familyID]
-            helpInfo = {"flagOwner":flagOwner}
-            
-        # 取自身仙盟及前后名次仙盟信息
-        familyIndex = -1
-        familyList = []
-        for index, batFamily in enumerate(self.battleFamilySortList):
-            batFamily.syncRank = index + 1
-            if familyID == batFamily.familyID:
-                familyIndex = index
-                
-        # 第一名默认取前3名
-        if familyIndex == 0:
-            familyList = self.battleFamilySortList[:3]
-        # 最后一名默认取最后3名
-        elif familyIndex == len(self.battleFamilySortList) - 1:
-            familyList = self.battleFamilySortList[-3:]
-        elif familyIndex > 0:
-            familyList = self.battleFamilySortList[familyIndex - 1:familyIndex + 2]
-        for i, batFamily in enumerate(familyList):
-            familyList[i] = [batFamily.familyID, batFamily.score, batFamily.name, batFamily.syncRank]
-        helpInfo["familyList"] = familyList
-        return {"world":helpInfo}
-    
-## 战场仙盟类
-class BattleFamily():
-    
-    def __init__(self, familyID):
-        self.familyID = familyID
-        self.name = ""
-        self.score = 0 # 积分
-        self.scoreSortTime = 0 # 积分变更排序time值,用于同积分时,先到排名靠前
-        self.rebornPoint = [130, 300, 10] # 复活点坐标 [x,y,r],这里为默认值,防止没有分配到报错等
-        
-        self.battlePlayerIDList = [] # 参与战斗的仙盟玩家ID列表 [playerID, ...]
-        self.battlePlayerSortList = [] # 参与战斗的仙盟玩家积分排名列表 [BattlePlayer, ...]
-        
-        self.homePlayerIDList = [] # 在复活点里的玩家
-        
-        self.familyHelpDict = {} # 未通知的仙盟变更信息
-        
-        self.syncRank = -1 # 仅用于同步前端用的名次
-        return
-    
-    def addJoinPlayer(self, playerID):
-        if playerID not in self.battlePlayerIDList:
-            self.battlePlayerIDList.append(playerID)
-        self.familyHelpDict["playerCount"] = len(self.battlePlayerIDList)
-        return
-    
-    def setPlayerToRebornPoint(self, curPlayer):
-        if not self.rebornPoint:
-            return
-        randPosX, randPosY, maxDist = self.rebornPoint
-        posPoint = GameMap.GetEmptyPlaceInAreaEx(randPosX, randPosY, 3, maxDist)
-        curPlayer.ResetPos(posPoint.GetPosX(), posPoint.GetPosY())
-        return
-    
-    def sortBattlePlayerScore(self):
-        if len(self.battlePlayerIDList) != len(self.battlePlayerSortList):
-            self.battlePlayerSortList = []
-            mgr = GetBattleMgr()
-            for playerID in self.battlePlayerIDList:
-                batPlayer = mgr.getBattlePlayer(playerID)
-                self.battlePlayerSortList.append(batPlayer)
-        self.battlePlayerSortList.sort(key=operator.attrgetter("score", "scoreSortTime"), reverse=True)
-        return
-    
-    def addFamilyScore(self, addValue):
-        ## 增加积分
-        if addValue <= 0:
-            return
-        self.score = max(0, self.score + addValue)
-        self.familyHelpDict["score"] = self.score
-        calcTime = 3471264000 #GameWorld.ChangeTimeStrToNum("2080-01-01 00:00:00")
-        self.scoreSortTime = max(0, calcTime - int(time.time()))
-        #GameWorld.DebugLog("    增加仙盟积分: familyID=%s,addValue=%s,updScore=%s" % (self.familyID, addValue, self.score))
-        return
-    
-    def getFamilyHelpInfo(self, isAll):
-        helpInfo = {}
-        if not isAll:
-            helpInfo = self.familyHelpDict
-        else:
-            helpInfo = {"score":self.score, "playerCount":len(self.battlePlayerIDList)}
-        return {"family":helpInfo}
-    
-## 战场玩家类
-class BattlePlayer():
-    
-    def __init__(self, playerID):
-        self.playerID = playerID
-        self.name = ""
-        self.familyID = 0
-        self.familyName = ""
-        self.accID = ""
-        self.job = 1
-        self.realmLV = 0
-        self.fightPower = 0
-        
-        self.restoreHPTick = 0 # 营地回血tick
-        self.healthRebornCount = 0 # 原地健康复活次数
-        self.continueKillCount = 0 # 连杀次数
-        
-        self.score = 0 # 积分
-        self.scoreSortTime = 0 # 积分变更排序time值,用于同积分时,先到排名靠前
-        self.hurtTotal = 0 # 累计伤害
-        
-        self.onlineCalcTick = 0 # 在线计算tick
-        self.outsideFlagTick = 0 # 超出战旗范围计算tick
-        self.outsideFlagNotifySecond = 0 # 通知超出范围秒
-        
-        self.leaveState = 0 # 1-主动离开;2-掉线 
-        
-        self.playerHelpDict = {} # 未通知的玩家变更信息
-        return
-    
-    def doPlayerEnter(self, curPlayer, tick):   
-        self.familyID = curPlayer.GetFamilyID()
-        self.familyName = curPlayer.GetFamilyName()
-        self.job = curPlayer.GetJob()
-        self.accID = curPlayer.GetAccID()
-        self.name = curPlayer.GetPlayerName()
-        self.realmLV = curPlayer.GetOfficialRank()
-        self.fightPower = PlayerControl.GetFightPower(curPlayer)
-        
-        self.onlineCalcTick = tick
-        return
-    
-    def addPlayerScore(self, addValue):
-        if addValue <= 0:
-            return
-        self.score = max(0, self.score + addValue)
-        calcTime = 3471264000 #GameWorld.ChangeTimeStrToNum("2080-01-01 00:00:00")
-        self.scoreSortTime = max(0, calcTime - int(time.time()))
-        #GameWorld.DebugLog("    增加玩家积分: playerID=%s,addValue=%s,updScore=%s" % (self.playerID, addValue, self.score))
-        self.playerHelpDict.update({"score":self.score})
-        return
-    
-    def addHealthRebornCount(self):
-        self.healthRebornCount += 1
-        self.playerHelpDict["healthRebornCount"] = self.healthRebornCount
-        return
-    
-    def getPlayerHelpInfo(self, isAll):
-        helpInfo = {}
-        if not isAll:
-            helpInfo = self.playerHelpDict
-        else:
-            helpInfo = {"score":self.score, "healthRebornCount":self.healthRebornCount}
-        return {"player":helpInfo}
-    
-def GetBattleMgr():
-    mgr = FBCommon.GetGameFBData(GameFBData_BattleMgr)
-    if not mgr:
-        mgr = BattleMgr()
-        FBCommon.SetGameFBData(GameFBData_BattleMgr, mgr)
-    return mgr
-
-def GetBFStepTime(): return IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwar", 1) # 阶段时间
-
-def OnOpenFB(tick):
-    FBCommon.SetGameFBData(GameFBData_BattleMgr, None)
-    
-    mgr = GetBattleMgr()
-    mgr.zoneID = GameWorld.GetGameWorld().GetPropertyID()
-    
-    FBCommon.SetFBStep(FB_Step_Prepare, tick)
-    return
-
-def OnCloseFB(tick):
-    GameWorld.GetGameWorld().SetPropertyID(0)
-    FBCommon.SetGameFBData(GameFBData_BattleMgr, None)
-    #FBCommon.ClearFBNPC()
-    return
-
-
-def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
-    if GameWorld.IsCrossServer():
-        return True
-    
-    if not curPlayer.GetFamilyID():
-        GameWorld.DebugLog("无仙盟无法进入: mapID=%s" % mapID)
-        return False
-    
-    if not GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % ShareDefine.CrossDailyActionID_FamilyWarFlag):
-        GameWorld.DebugLog("非活动中,无法进入: CrossDailyActionID=%s" % ShareDefine.CrossDailyActionID_FamilyWarFlag)
-        return False
-    
-    return True
-
-def OnChangeMapAsk(ask, tick):
-    return IPY_GameWorld.cmeAccept
-
-##副本玩家进入点, 玩家分散在半径3格范围
-def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):
-    return ipyEnterPosInfo
-
-def DoEnterFB(curPlayer, tick):    
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    playerID = curPlayer.GetPlayerID()
-    familyID = curPlayer.GetFamilyID()
-    familyName = curPlayer.GetFamilyName()
-    mgr = GetBattleMgr()
-        
-    if fbStep not in [FB_Step_Prepare, FB_Step_Fighting] or not familyID:
-        GameWorld.Log("DoEnterFB... fbStep=%s,familyID=%s,playerID=%s PlayerLeaveFB" % (fbStep, familyID, playerID), mgr.zoneID)
-        PlayerControl.PlayerLeaveFB(curPlayer)
-        return
-    
-    GameWorld.Log("DoEnterFB... fbStep=%s,familyID=%s,playerID=%s" % (fbStep, familyID, playerID), mgr.zoneID)
-    
-    #--- 测试 ---
-#    testFamilyCount = 50
-#    if len(mgr.battleFamilyDict) < testFamilyCount:
-#        import random
-#        for i in range(testFamilyCount):
-#            fakeID = i + 10
-#            fakeName = "假名字%s" % fakeID
-#            fakeName = fakeName.decode(ShareDefine.Def_Game_Character_Encoding).encode(GameWorld.GetCharacterEncoding())
-#            fakeFamily = mgr.addBattleFamily(fakeID, fakeName)
-#            fakeFamily.addFamilyScore(random.randint(1000, 1500))
-    #-----------
-    
-    batFamily = mgr.addBattleFamily(familyID, familyName)
-    
-    batPlayer = mgr.getBattlePlayer(playerID)
-    batPlayer.doPlayerEnter(curPlayer, tick)
-    
-    batFamily.addJoinPlayer(playerID)
-    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())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
-        
-    elif fbStep == FB_Step_Fighting:
-        notify_tick = GetBFStepTime()[Time_Fight] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
-        
-    NotifyCrossFamilyFlagHelp(True, curPlayer)
-    return
-
-def NotifyCrossFamilyFlagHelp(isAll=False, curPlayer=None, helpEx=None):
-    ## 广播战场帮助信息,针对所有玩家
-    
-    mgr = GetBattleMgr()
-    
-    if curPlayer:
-        __notifyPlayerHelp(curPlayer, mgr, isAll, helpEx)
-    else:
-        playerManager = GameWorld.GetMapCopyPlayerManager()
-        for index in xrange(playerManager.GetPlayerCount()):
-            player = playerManager.GetPlayerByIndex(index)
-            if not player:
-                continue
-            playerID = player.GetPlayerID()
-            if playerID not in mgr.battlePlayerDict:
-                #GameWorld.DebugLog("还未加入战斗,暂不处理! playerID=%s" % playerID)
-                continue
-            __notifyPlayerHelp(player, mgr, isAll, helpEx)
-            
-        # 重置未通知的
-        mgr.worldHelpDict = {}
-        for familyID in mgr.battleFamilyDict.keys():
-            batFamily = mgr.getBattleFamily(familyID)
-            batFamily.familyHelpDict = {}
-            
-    return
-
-def __notifyPlayerHelp(curPlayer, mgr, isAll, helpEx):
-    if not mgr:
-        mgr = GetBattleMgr()
-        
-    playerID = curPlayer.GetPlayerID()
-    batPlayer = mgr.getBattlePlayer(playerID)
-    batFamily = mgr.getBattleFamily(batPlayer.familyID)
-    
-    helpDict = {}
-    helpDict.update(mgr.getWorldHelpInfo(isAll, batPlayer.familyID))
-    helpDict.update(batFamily.getFamilyHelpInfo(isAll))
-    helpDict.update(batPlayer.getPlayerHelpInfo(isAll))
-    
-    if helpEx:
-        helpDict.update(helpEx)
-        
-    GameWorld.DebugLog("FBHelp: %s" % helpDict, playerID)
-    FBCommon.Notify_FBHelp(curPlayer, helpDict)
-    batPlayer.playerHelpDict = {}
-    return
-
-
-##获得副本帮助信息, 用于通知阵营比分条
-def DoFBHelp(curPlayer, tick):
-    return
-
-##玩家退出副本
-def DoExitFB(curPlayer, tick):
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    if fbStep != FB_Step_Fighting:
-        return
-        
-    mgr = GetBattleMgr()
-    playerID = curPlayer.GetPlayerID()
-    
-    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
-
-##副本总逻辑计时器
-# @param tick 时间戳
-# @return 无意义
-# @remarks 副本总逻辑计时器
-def OnProcess(tick):
-    fbStep = GameWorld.GetGameFB().GetFBStep()
-    
-    # 副本准备
-    if fbStep == FB_Step_Prepare:
-        __DoLogic_FB_Prepare(fbStep, tick)
-        
-    # 副本进行中
-    elif fbStep == FB_Step_Fighting:
-        __DoLogic_FB_Fighting(tick)
-        
-    # 副本结束
-    elif fbStep == FB_Step_LeaveTime:
-        __DoLogic_FB_Leave(tick)
-        
-    return
-
-
-def __DoLogic_FB_Prepare(fbStep, tick):
-    
-    remaindTick = GetBFStepTime()[Time_Prepare] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-    if remaindTick > 0:
-        return
-    
-    FBCommon.SetFBStep(FB_Step_Fighting, tick)
-    
-    mgr = GetBattleMgr()
-    fightTime = GetBFStepTime()[Time_Fight] * 1000
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        playerID = curPlayer.GetPlayerID()
-        if not playerID:
-            continue
-        if playerID not in mgr.battlePlayerDict:
-            #GameWorld.DebugLog("还未加入战斗,暂不处理! playerID=%s" % playerID)
-            continue
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, fightTime, True)
-        
-        batPlayer = mgr.getBattlePlayer(playerID)
-        batPlayer.onlineCalcTick = tick # 开始战斗重新统计在线收益
-        
-        batFamily = mgr.getBattleFamily(batPlayer.familyID)
-        batFamily.setPlayerToRebornPoint(curPlayer)
-        
-    NotifyCrossFamilyFlagHelp(True)
-    #PlayerControl.FBNotify("CrossBattlefieldStartFighting")
-    return
-
-def __DoLogic_FB_Fighting(tick):
-    
-    passTick = tick - GameWorld.GetGameFB().GetFBStepTick()
-    remaindTick = GetBFStepTime()[Time_Fight] * 1000 - passTick
-    if remaindTick > 0:
-        __refreshFamilyHome(tick)
-        __refreshFlagoutside(tick)
-        
-        gameFB = GameWorld.GetGameFB()
-        lastTick = gameFB.GetGameFBDictByKey(ChConfig.Def_FB_NotifyFBHelpTick)
-        if tick - lastTick >= FightRefreshInterval:
-            gameFB.SetGameFBDict(ChConfig.Def_FB_NotifyFBHelpTick, tick)
-            refreshCrossFamilyFlagwar(tick)
-            NotifyCrossFamilyFlagHelp()
-        return
-    
-    DoOver(tick)
-    return
-
-def __DoLogic_FB_Leave(tick):
-    remaindTick = GetBFStepTime()[Time_Leave] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-    if remaindTick > 0:
-        return
-    
-    FBCommon.DoLogic_FBKickAllPlayer()
-    GameWorldProcess.CloseFB(tick)
-    FBCommon.SetFBStep(FB_Step_Over, tick)
-    return
-
-def __refreshFamilyHome(tick):
-    # 刷新营地相关,如回血等
-    
-    restoreHPPerBySecond = IpyGameDataPY.GetFuncCfg("CrossFamilyFlagwar", 3) # 每秒回血百分比
-    
-    mgr = GetBattleMgr()
-    copyMapMgr = GameWorld.GetMapCopyPlayerManager()
-    for familyID in mgr.battleFamilyDict.keys():
-        batFamily = mgr.getBattleFamily(familyID)
-        safePosX, safePosY, safeRadius = batFamily.rebornPoint
-        
-        for playerID in batFamily.homePlayerIDList[::-1]:
-            curPlayer = copyMapMgr.FindPlayerByID(playerID)
-            if not curPlayer:
-                continue
-            
-            batPlayer = mgr.getBattlePlayer(playerID)
-            
-            if GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), safePosX, safePosY) > safeRadius:
-                batFamily.homePlayerIDList.remove(playerID)
-                batPlayer.restoreHPTick = 0
-                continue
-            
-            # 营地回血
-            restoreSeconds = (tick - batPlayer.restoreHPTick) / 1000.0 if batPlayer.restoreHPTick else 1 # 首次保底1秒
-            if restoreSeconds < 1:
-                continue
-            maxHP = GameObj.GetMaxHP(curPlayer)
-            if GameObj.GetHP(curPlayer) < maxHP:
-                restoreHP = int(maxHP * restoreHPPerBySecond / 100.0 * round(restoreSeconds, 1))
-                SkillCommon.SkillAddHP(curPlayer, 0, restoreHP)
-            batPlayer.restoreHPTick = tick
-            
-    return
-
-def __refreshFlagoutside(tick):
-    # 刷新战旗出界
-    
-    mgr = GetBattleMgr()
-    
-    if not mgr.playerFlagDict:
-        return
-    
-    isUpd = False
-    outsideR, protectSeconds = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarFlag", 4)
-    
-    copyMapMgr = GameWorld.GetMapCopyPlayerManager()
-    for playerID, flagNPC in mgr.playerFlagDict.items():
-        curPlayer = copyMapMgr.FindPlayerByID(playerID)
-        if not curPlayer:
-            # 找不到玩家,直接归还战旗
-            setFlagOwner(flagNPC, None, tick)
-            isUpd = True
-            continue
-        
-        flagPosX, flagPosY = flagNPC.GetPosX(), flagNPC.GetPosY()
-        batPlayer = mgr.getBattlePlayer(playerID)
-        if GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), flagPosX, flagPosY) <= outsideR:
-            batPlayer.outsideFlagTick = 0
-            batPlayer.outsideFlagNotifySecond = 0
-        else:
-            if not batPlayer.outsideFlagTick:
-                batPlayer.outsideFlagTick = tick
-                continue
-            passSeconds = (tick - batPlayer.outsideFlagTick) / 1000
-            if passSeconds < protectSeconds:
-                remainSecond = protectSeconds - passSeconds
-                if remainSecond != batPlayer.outsideFlagNotifySecond:
-                    batPlayer.outsideFlagNotifySecond = remainSecond
-                    PlayerControl.NotifyCode(curPlayer, "CrossFamilyFlagwarOutsideflag", [flagNPC.GetNPCID(), remainSecond])
-                continue
-            setFlagOwner(flagNPC, None, tick)
-            isUpd = True
-            
-    if isUpd:
-        NotifyCrossFamilyFlagHelp()
-    return
-
-def setFlagOwner(flagNPC, newOwner, tick):
-    
-    if not flagNPC:
-        return
-    
-    ownerBuffDict = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarFlag", 5, {})
-    
-    flagNPCID = flagNPC.GetNPCID()
-    flagType = getFlagType(flagNPC)
-    if not flagType:
-        return
-    
-    mgr = GetBattleMgr()
-    copyMapMgr = GameWorld.GetMapCopyPlayerManager()
-    GameWorld.DebugLog("设置战旗归属: flagNPCID=%s,flagType=%s" % (flagNPCID, flagType), mgr.zoneID)
-    
-    for oldPlayerID, npc in mgr.playerFlagDict.items():
-        if not npc or flagNPCID != npc.GetNPCID():
-            continue
-        GameWorld.DebugLog("    移除旧归属: flagNPCID=%s,oldPlayerID=%s" % (flagNPCID, oldPlayerID), mgr.zoneID)
-        mgr.popPlayerFlag(oldPlayerID)
-        oldOwner = copyMapMgr.FindPlayerByID(oldPlayerID)
-        if oldOwner:
-            PlayerControl.NotifyCode(oldOwner, "CrossFamilyFlagwarFlagDrop", [flagNPCID])
-            # 删除归属buff
-            for delBuffID in ownerBuffDict.values():
-                BuffSkill.DelBuffBySkillID(oldOwner, delBuffID, tick)
-                
-    if newOwner:
-        newPlayerID = newOwner.GetPlayerID()
-        
-        # 已经有战旗,判断战旗类型,高级可替换低级
-        if newPlayerID in mgr.playerFlagDict:
-            bodyFlagNPC = mgr.playerFlagDict[newPlayerID]
-            bodyFlagType = getFlagType(bodyFlagNPC)
-            bodyFlagNPCID = bodyFlagNPC.GetNPCID()
-            if bodyFlagType >= flagType:
-                GameWorld.DebugLog("    新归属者已有高级战旗,保留原归属: bodyFlagNPCID=%s,bodyFlagType=%s >= flagType=%s" 
-                                   % (bodyFlagNPCID, bodyFlagType, flagType), mgr.zoneID)
-                setFlagOwnerNone(flagNPC)
-                return
-            GameWorld.DebugLog("    新归属者已有低级战旗,先归还原低级战旗: bodyFlagNPCID=%s,bodyFlagType=%s < flagType=%s" 
-                               % (bodyFlagNPCID, bodyFlagType, flagType), mgr.zoneID)
-            setFlagOwner(bodyFlagNPC, None, tick)
-            
-        batPlayer = mgr.getBattlePlayer(newPlayerID)
-        batFamily = mgr.getBattleFamily(batPlayer.familyID)
-        
-        batPlayer.outsideFlagTick = 0
-        mgr.setPlayerFlag(newPlayerID, flagNPC)
-        
-        PlayerControl.NotifyCode(newOwner, "CrossFamilyFlagwarFlagOwn", [flagNPCID])
-        
-        # 归属积分
-        ownScoreDict = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarFlag", 2, {})
-        ownPlayerScore, ownFamilyScore = ownScoreDict.get(flagType, [0, 0])
-        batPlayer.addPlayerScore(ownPlayerScore)
-        batFamily.addFamilyScore(ownFamilyScore)
-        
-        # 归属buff
-        ownerBuffID = ownerBuffDict.get(flagType, 0)
-        if ownerBuffID:
-            SkillCommon.AddBuffBySkillType_NoRefurbish(newOwner, ownerBuffID, tick)
-            
-        flagNPC.SetVisible(False)
-        
-        GameWorld.DebugLog("    更新新归属: flagNPCID=%s,newPlayerID=%s,ownerBuffID=%s" % (flagNPCID, newPlayerID, ownerBuffID), mgr.zoneID)
-        
-    # 没有新归属,归还战旗
-    else:
-        GameWorld.DebugLog("    没有新归属,归还战旗: flagNPCID=%s" % flagNPCID, mgr.zoneID)
-        setFlagOwnerNone(flagNPC)
-        
-    return
-
-def setFlagOwnerNone(flagNPC):
-    GameWorld.DebugLog("    setFlagOwnerNone: npcID=%s" % flagNPC.GetNPCID())
-    flagNPC.SetVisible(True)
-    return
-
-def refreshCrossFamilyFlagwar(tick):
-    ## 刷新战场相关
-    
-    olPlayerScore, olFamilyScore = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarScore", 2) # 玩家在战场时每秒固定获得  个人得分|仙盟得分
-    flagTimeScoreDict = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarFlag", 3, {})
-    
-    mgr = GetBattleMgr()
-    
-    copyMapMgr = GameWorld.GetMapCopyPlayerManager()
-    for familyID in mgr.battleFamilyDict.keys():
-        batFamily = mgr.getBattleFamily(familyID)
-        
-        batFamily.battlePlayerSortList = []
-        
-        safePosX, safePosY, safeRadius = batFamily.rebornPoint
-        for playerID in batFamily.battlePlayerIDList:
-            batPlayer = mgr.getBattlePlayer(playerID)
-            batFamily.battlePlayerSortList.append(batPlayer)
-            
-            curPlayer = copyMapMgr.FindPlayerByID(playerID)
-            if not curPlayer:
-                continue
-            onlineTimes = 0
-            # 累计参与战斗时长
-            if batPlayer.onlineCalcTick:
-                onlineTimes = max(0, tick - batPlayer.onlineCalcTick) / 1000
-                batPlayer.onlineCalcTick = tick
-                
-                batPlayer.addPlayerScore(onlineTimes * olPlayerScore)
-                batFamily.addFamilyScore(onlineTimes * olFamilyScore)
-                
-            # 回营地
-            if GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), safePosX, safePosY) <= safeRadius:
-                if playerID not in batFamily.homePlayerIDList:
-                    batFamily.homePlayerIDList.append(playerID)
-                    
-            # 战旗定时积分
-            if playerID in mgr.playerFlagDict:
-                flagType = getFlagType(mgr.playerFlagDict[playerID])
-                ftPlayerScore, ftFamilyScore = flagTimeScoreDict.get(flagType, [0, 0])
-                
-                batPlayer.addPlayerScore(onlineTimes * ftPlayerScore)
-                batFamily.addFamilyScore(onlineTimes * ftFamilyScore)
-                
-        batFamily.sortBattlePlayerScore()
-        
-    # 放最后排序,上面的逻辑可能还会加分
-    mgr.sortBattleFamilyScore()
-    return
-
-def getFlagType(curNPC):
-    if not curNPC:
-        return 0
-    
-    npcID = curNPC.GetNPCID()
-    flagTypeDict = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarFlag", 1, {})
-    for ft, npcIDList in flagTypeDict.items():
-        if npcID in npcIDList:
-            return ft
-    return 0
-
-##是否可以夺旗
-def OnCanCollect(curPlayer, curNPC, tick):
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    
-    # 非战斗阶段不可采集
-    if fbStep != FB_Step_Fighting:
-        return False
-    
-    playerID = curPlayer.GetPlayerID()
-    mgr = GetBattleMgr()
-    
-    if playerID in mgr.playerFlagDict:
-        ownerFlagType = getFlagType(mgr.playerFlagDict[playerID])
-        if ownerFlagType >= getFlagType(curNPC):
-            GameWorld.Log("已经拥有更高级的战旗,无法采集! ownerFlagType=%s >= %s" % (ownerFlagType, getFlagType(curNPC)), playerID)
-            return False
-        
-    return True
-
-## 开始采集
-def OnBeginCollect(curPlayer, curNPC):
-    return
-
-## 退出采集
-def OnExitCollect(curPlayer, curNPC):
-    #if not curNPC or not hasattr(curNPC, "GetNPCID"):
-    #    return
-    return
-
-##玩家收集成功(塔, 旗)
-def OnCollectOK(curPlayer, npcID, tick):
-    #GameWorld.DebugLog("OnCollectOK npcID=%s" % npcID, curPlayer.GetPlayerID())
-    tagObj = curPlayer.GetActionObj()
-    if not tagObj:
-        return
-    if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC:
-        return
-        
-    curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex())
-    #npcID = curNPC.GetNPCID()
-    flagType = getFlagType(curNPC)
-    AICommon.ClearPlayerPreparing(curNPC, curPlayer, "CrossFamilyFlagwarCollectOKSlow")
-    
-    if flagType:
-        setFlagOwner(curNPC, curPlayer, tick)
-        NotifyCrossFamilyFlagHelp()
-        
-    return
-
-## PVP伤害相关
-def OnPVPDamage(curPlayer, damageValue, tagPlayer, tick):
-    playerID = curPlayer.GetPlayerID()
-    
-    mgr = GetBattleMgr()
-    batPlayer = mgr.getBattlePlayer(playerID)
-    batPlayer.hurtTotal += damageValue
-    
-    #GameWorld.DebugLog("OnPVPDamage: damageValue=%s,hurtTotal=%s" % (damageValue, batPlayer.hurtTotal), playerID)
-    return
-
-##处理副本中杀死玩家逻辑
-def DoFBOnKill_Player(curPlayer, defender, tick):
-    playerID = curPlayer.GetPlayerID()
-    defPlayerID = defender.GetPlayerID()
-    #GameWorld.DebugLog("DoFBOnKill_Player playerID=%s,defPlayerID=%s" % (playerID, defPlayerID))
-    
-    mgr = GetBattleMgr()
-    
-    killPlayerScore, killFamilyScore = IpyGameDataPY.GetFuncEvalCfg("CrossFamilyFlagwarScore", 1) # 击杀玩家 个人得分|仙盟得分
-    batPlayer = mgr.getBattlePlayer(playerID)
-    batFamily = mgr.getBattleFamily(batPlayer.familyID)
-    
-    batPlayer.addPlayerScore(killPlayerScore)
-    batFamily.addFamilyScore(killFamilyScore)
-    
-    # 获得对方战旗归属
-    if defPlayerID in mgr.playerFlagDict:
-        setFlagOwner(mgr.playerFlagDict[defPlayerID], curPlayer, tick)
-        NotifyCrossFamilyFlagHelp()
-    return True
-
-def OnCanFBReborn(curPlayer, rebornType):
-    playerID = curPlayer.GetPlayerID()
-    if rebornType == ChConfig.rebornType_Health:
-        mgr = GetBattleMgr()
-        playerID = curPlayer.GetPlayerID()
-        batPlayer = mgr.getBattlePlayer(playerID)
-        
-        healthRebornMax = IpyGameDataPY.GetFuncCfg("CrossFamilyFlagwarReborn", 1)
-        if healthRebornMax and batPlayer.healthRebornCount >= healthRebornMax:
-            GameWorld.Log("已达原地健康复活次数上限! playerID=%s" % playerID, mgr.zoneID)
-            return False
-        
-    return True
-
-def OnPlayerReborn():
-    ## 是否副本复活
-    return True
-
-## 玩家复活后处理
-def OnPlayerRebornOver(curPlayer, rebornType):
-    mgr = GetBattleMgr()
-    playerID = curPlayer.GetPlayerID()
-    batPlayer = mgr.getBattlePlayer(playerID)
-    
-    if rebornType == ChConfig.rebornType_Health:
-        batPlayer.addHealthRebornCount()
-    else:
-        # 非原地
-        batFamily = mgr.getBattleFamily(curPlayer.GetFamilyID())
-        batFamily.setPlayerToRebornPoint(curPlayer)
-        
-        batPlayer.continueKillCount = 0 # 中断连杀数
-        
-    FBCommon.Notify_FBHelp(curPlayer, batPlayer.getPlayerHelpInfo(False))
-    return
-
-def DoOver(tick):
-    
-    mgr = GetBattleMgr()
-    zoneID = mgr.zoneID
-        
-    gameFB = GameWorld.GetGameFB()
-    gameWorld = GameWorld.GetGameWorld()
-    copyMapID = gameWorld.GetCopyMapID()
-    
-    fbStep = gameFB.GetFBStep()
-    if fbStep > FB_Step_Fighting:
-        GameWorld.ErrLog("跨服仙盟夺旗战触发重复结算,不处理! zoneID=%s,copyMapID=%s" % (mgr.zoneID, copyMapID), zoneID)
-        return
-    FBCommon.SetFBStep(FB_Step_LeaveTime, tick)
-    
-    GameWorld.Log("跨服仙盟夺旗战结算! zoneID=%s,copyMapID=%s" % (mgr.zoneID, copyMapID), zoneID)
-    
-    refreshCrossFamilyFlagwar(tick) # 结算前强刷一次
-    NotifyCrossFamilyFlagHelp(True)
-    
-    leaveTime = GetBFStepTime()[Time_Leave] * 1000
-    
-    copyMapMgr = GameWorld.GetMapCopyPlayerManager()
-    
-    drDict = {"mapID":GameWorld.GetMap().GetMapID(), "realMapID":gameWorld.GetRealMapID(), "copyMapID":copyMapID, "zoneID":zoneID}
-    drBatFamilyList = []
-    
-    battleFamilyList = []
-    for familyRank, batFamily in enumerate(mgr.battleFamilySortList, 1):
-        familyID = batFamily.familyID
-        #batFamily = mgr.getBattleFamily(familyID)
-        familyScore = batFamily.score
-        familyName = batFamily.name
-        GameWorld.Log("familyRank=%s,familyID=%s,familyScore=%s" % (familyRank, familyID, familyScore), zoneID)
-        
-        overPlayerList = [] # 同步前端结算
-        drPlayerList = [] # 流向记录
-        battlePlayerList = [] # 同步GameServer结算
-        
-        for playerRank, batPlayer in enumerate(batFamily.battlePlayerSortList, 1):
-            playerID = batPlayer.playerID
-            #batPlayer = mgr.getBattlePlayer(playerID)
-            
-            score = batPlayer.score
-            #job = batPlayer.job
-            #realmLV = batPlayer.realmLV
-            name = batPlayer.name
-            
-            hurtTotal = batPlayer.hurtTotal
-            
-            GameWorld.Log("     familyID=%s,playerRank=%s,playerID=%s,score=%s,hurtTotal=%s,accID=%s" 
-                          % (familyID, playerRank, playerID, score, hurtTotal, batPlayer.accID), zoneID)
-            
-            overPlayerList.append({"playerName":name, "score":score})
-            battlePlayerList.append([playerID, score, hurtTotal])
-            drPlayerList.append({"playerID":playerID, "accID":batPlayer.accID, "playerRank":playerRank, "score":score, "hurtTotal":hurtTotal})
-            
-        overDict = {"familyScore":familyScore, "familyRank":familyRank, "playerList":overPlayerList}
-        for playerRank, batPlayer in enumerate(batFamily.battlePlayerSortList, 1):
-            playerID = batPlayer.playerID
-            player = copyMapMgr.FindPlayerByID(playerID)
-            if not player:
-                continue
-            player.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTime, True)
-            
-            lineID = 0
-            overDict.update({"familyScore":familyScore, "familyRank":familyRank})
-            FBCommon.NotifyFBOver(player, ChConfig.Def_FBMapID_CrossFamilyFlagwar, lineID, True, overDict)
-            
-        battleFamilyList.append([familyRank, familyID, familyName, familyScore, battlePlayerList])
-        drBatFamilyList.append({"familyID":familyID, "familyScore":familyScore, "familyRank":familyRank, "drPlayerList":drPlayerList})
-        
-    # 同步GameServer 比赛结果
-    msgInfo = str([zoneID, battleFamilyList])
-    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "CrossFamilyFlagwarOver", msgInfo, len(msgInfo))
-    
-    # 记录流向
-    drDict["batFamilyList"] = drBatFamilyList
-    DataRecordPack.SendEventPack("CrossFamilyFlagwarOver", drDict)
-    return
-
-
-
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
deleted file mode 100644
index 5dea30f..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossRealmPK.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_CrossRealmPK
-#
-# @todo:跨服匹配PK
-# @author hxp
-# @date 2018-12-21
-# @version 1.0
-#
-# 详细描述: 跨服匹配PK
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2018-12-21 18:00"""
-#-------------------------------------------------------------------------------
-#
-# 改为使用镜像PK,逻辑统一放 GameLogic_MirrorBattle
-#
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_GeneralTrain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_GeneralTrain.py
deleted file mode 100644
index 795d006..0000000
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_GeneralTrain.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/python
-# -*- coding: GBK -*-
-#-------------------------------------------------------------------------------
-#
-##@package GameWorldLogic.FBProcess.GameLogic_GeneralTrain
-#
-# @todo:通用养成副本
-# @author hxp
-# @date 2024-06-26
-# @version 1.0
-#
-# 详细描述: 通用养成副本
-#
-#-------------------------------------------------------------------------------
-#"""Version = 2024-06-26 14:30"""
-#-------------------------------------------------------------------------------
-
-import FBCommon
-import GameWorld
-import IpyGameDataPY
-import ItemControler
-import ChConfig
-
-## 是否能够通过活动查询进入
-def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
-    ipyData = IpyGameDataPY.GetIpyGameData('FBGeneralTrain', mapID, lineID)
-    if not ipyData:
-        return False
-    
-    LVLimit = ipyData.GetLVLimit()
-    if LVLimit and curPlayer.GetLV() < LVLimit:
-        GameWorld.DebugLog("通用养成副本等级不足,无法挑战! mapID=%s,lineID=%s,LVLimit=%s" % (mapID, lineID, LVLimit))
-        return False
-    
-    RealmLimit = ipyData.GetRealmLimit()
-    if RealmLimit and curPlayer.GetOfficialRank() < RealmLimit:
-        GameWorld.DebugLog("通用养成副本境界不足,无法挑战! mapID=%s,lineID=%s,RealmLimit=%s" % (mapID, lineID, RealmLimit))
-        return False
-    
-    passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
-    if passLineID + 1 != lineID:
-        GameWorld.DebugLog("通用养成副本只能挑战下一关! mapID=%s,lineID=%s,passLineID=%s" % (mapID, lineID, passLineID))
-        return False
-    
-    return True
-
-## 是否需要做进入副本通用检查条件逻辑,默认需要检查
-def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
-    ## 进行中的不需要重复检查,防止断线重连被禁止进入
-    return True
-    
-def GetGeneralTrainNPCIDList(mapID, lineID):
-    npcIDList = []
-    ipyData = IpyGameDataPY.GetIpyGameData('FBGeneralTrain', mapID, lineID)
-    if not ipyData:
-        return []
-    
-    npcIDList.append(ipyData.GetBossNPCID())
-    npcIDList.extend(ipyData.GetOtherNPCIDList())
-    return npcIDList
-
-def GetGeneralTrainBossID(mapID, lineID):
-    ipyData = IpyGameDataPY.GetIpyGameData('FBGeneralTrain', mapID, lineID)
-    if not ipyData:
-        return 0
-    return ipyData.GetBossNPCID()
-
-## 可否扫荡
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):
-    
-    ipyData = IpyGameDataPY.GetIpyGameData('FBGeneralTrain', mapID, lineID)
-    if not ipyData:
-        return
-    
-    passLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
-    if passLineID < lineID:
-        GameWorld.DebugLog("没有过关不能扫荡! mapID=%s,passLineID=%s < %s" % (mapID, passLineID, lineID))
-        return
-    
-    return True
-
-## 扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, sweepCnt, isFinish, dataEx):
-    GameWorld.DebugLog("通用养成副本扫荡: mapID=%s,lineID=%s,sweepCnt=%s" % (mapID, lineID, sweepCnt))
-    ipyData = IpyGameDataPY.GetIpyGameData('FBGeneralTrain', mapID, lineID)
-    if not ipyData:
-        return
-    
-    giveItemList = ipyData.GetPassAwardItemList()
-    awardItemList = []
-    for itemID, itemCount, isAuctionItem in giveItemList:
-        awardItemList.append([itemID, itemCount * sweepCnt, isAuctionItem])
-        
-    ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList)
-    
-    isPass = 1
-    overDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList), FBCommon.Over_isSweep:1}
-    FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
-    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 488dc0e..2eb4c1f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1011,16 +1011,6 @@
                         ("DWORD", "ADMapID", 0),
                         ),
 
-                "FBGeneralTrain":(
-                        ("DWORD", "DataMapID", 1),
-                        ("BYTE", "LineID", 1),
-                        ("WORD", "LVLimit", 0),
-                        ("WORD", "RealmLimit", 0),
-                        ("DWORD", "BossNPCID", 0),
-                        ("list", "OtherNPCIDList", 0),
-                        ("list", "PassAwardItemList", 0),
-                        ),
-
                 "DailyAction":(
                         ("DWORD", "DailyID", 1),
                         ("dict", "OpenTimeDict", 0),
@@ -3960,21 +3950,6 @@
     def GetADAwardItemList(self): return self.attrTuple[2] # 广告奖励物品列表 list
     def GetADMapID(self): return self.attrTuple[3] # 对应副本ID,默认给该副本1次次数 DWORD
 
-# 副本通用养成表
-class IPY_FBGeneralTrain():
-    
-    def __init__(self):
-        self.attrTuple = None
-        return
-        
-    def GetDataMapID(self): return self.attrTuple[0] # 数据地图ID DWORD
-    def GetLineID(self): return self.attrTuple[1] # 功能线路ID BYTE
-    def GetLVLimit(self): return self.attrTuple[2] # 多少级可挑战, 0为不限制 WORD
-    def GetRealmLimit(self): return self.attrTuple[3] # 多少境界可挑战, 0为不限制 WORD
-    def GetBossNPCID(self): return self.attrTuple[4] # 过关bossID DWORD
-    def GetOtherNPCIDList(self): return self.attrTuple[5] # 其他NPCIDList list
-    def GetPassAwardItemList(self): return self.attrTuple[6] # 过关奖励列表 list
-
 # 日常活动表
 class IPY_DailyAction():
     
@@ -6433,7 +6408,6 @@
         self.__LoadFileData("FBLine", onlyCheck)
         self.__LoadFileData("Tianzi", onlyCheck)
         self.__LoadFileData("ADAward", onlyCheck)
-        self.__LoadFileData("FBGeneralTrain", onlyCheck)
         self.__LoadFileData("DailyAction", onlyCheck)
         self.__LoadFileData("EquipGSParam", onlyCheck)
         self.__LoadFileData("Success", onlyCheck)
@@ -7457,13 +7431,6 @@
     def GetADAwardByIndex(self, index):
         self.CheckLoadData("ADAward")
         return self.ipyADAwardCache[index]
-
-    def GetFBGeneralTrainCount(self):
-        self.CheckLoadData("FBGeneralTrain")
-        return self.ipyFBGeneralTrainLen
-    def GetFBGeneralTrainByIndex(self, index):
-        self.CheckLoadData("FBGeneralTrain")
-        return self.ipyFBGeneralTrainCache[index]
 
     def GetDailyActionCount(self):
         self.CheckLoadData("DailyAction")

--
Gitblit v1.8.0