From 9d5ec7599f3abe0cebb76ce1df3c3b8c4e0aa51e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 10 二月 2026 11:40:15 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(跨服聊天;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py |  134 +++++++++++++++++---------------------------
 1 files changed, 51 insertions(+), 83 deletions(-)

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 a993db4..d62bc5b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -18,15 +18,9 @@
 import IPY_GameWorld
 import PlayerControl
 import GameWorldProcess
-import CrossRealmPlayer
 import DataRecordPack
-import IpyGameDataPY
-import PlayerSuccess
 import ReadChConfig
-import ShareDefine
-import PyGameData
 import FBCommon
-import GameMap
 import GameObj
 
 import random
@@ -485,36 +479,6 @@
 def DoEnterFBLogic(curPlayer, tick):
     curPlayerID = curPlayer.GetID()
     
-    if GameWorld.IsCrossServer():
-        mapID = GameWorld.GetMap().GetMapID()
-        mapID = FBCommon.GetRecordMapID(mapID)
-        gameWorld = GameWorld.GetGameWorld()
-        copyMapID = gameWorld.GetCopyMapID()
-        dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), "AccID":curPlayer.GetAccID(), 
-                    "recordMapID":mapID, "mapID":GameWorld.GetMap().GetMapID(), "realMapID":gameWorld.GetRealMapID(), "copyMapID":copyMapID}
-        if mapID in ChConfig.Def_CrossDynamicLineMap:
-            fbZoneID = FBCommon.GetCrossDynamicLineMapZoneID()
-            fbFuncLineID = FBCommon.GetCrossDynamicLineMapFuncLineID()
-            playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBZoneID)
-            playerFuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
-            # 跨服排位分区与玩家分区可能不一样
-            if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in []:
-                GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s" 
-                                 % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
-                CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
-                dataDict.update({"Error":"zoneLineIDError"})
-                DataRecordPack.SendEventPack("CrossFBEnter", dataDict, curPlayer)
-                return
-            GameWorld.Log("玩家进入跨服副本动态分配的线路: fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s" 
-                          % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
-            dataDict.update({"fbZoneID":fbZoneID, "fbFuncLineID":fbFuncLineID, "playerZoneID":playerZoneID, "playerFuncLineID":playerFuncLineID})
-            
-        if copyMapID not in PyGameData.g_crossPlayerServerGroupIDInfo:
-            PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID] = {}
-        playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID]
-        playerServerGroupIDDict[curPlayerID] = PlayerControl.GetPlayerServerGroupID(curPlayer)
-        DataRecordPack.SendEventPack("CrossFBEnter", dataDict, curPlayer)
-        
     # 自伸缩副本根据玩家进入开启,主动调用一次,避免间隔调用时机未触发导致逻辑错乱
     GameWorldProcess.EnterOpenFB(tick)
     
@@ -551,8 +515,6 @@
         
     #注册玩家离开副本时间
     gameFBMgr.SetPlayerLogoffTick(0)
-    
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_EnterMap, 1, [gameMapID])
     
     if gameFBMgr.HaveFBPlayer(curPlayerID):
         #已经注册了这个玩家, 不清除已注册的玩家的字典信息
@@ -1311,9 +1273,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
@@ -1482,21 +1441,6 @@
     
     return callFunc()
 
-
-## 获得特殊副本npc掉落金钱
-#  @param curPlayer 
-#  @return None
-def OnGetNPCExp(curPlayer, curNPC):
-    do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-    
-    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetNPCExp"))
-    
-    if not callFunc:
-        return 0
-        
-    
-    return callFunc(curPlayer, curNPC)
-
 ## 获得外层经验倍率
 def OnGetOuterExpRate(curPlayer):
     do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
@@ -1523,8 +1467,10 @@
     
     return callFunc(curPlayer, addExp, expViewType)
 
-## 副本扫荡询问
 def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
+    ## 副本扫荡询问
+    # @return: None - 不可扫荡
+    # @return: 非None - 可以扫荡,且返回值直接传给 OnPlayerFBSweepResult
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepAsk"))
@@ -1534,8 +1480,8 @@
 
     return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
 
-## 副本扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx):
+def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx, askRet):
+    ## 副本扫荡结果
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepResult"))
@@ -1543,7 +1489,7 @@
     if callFunc == None:
         return False
 
-    return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
+    return callFunc(curPlayer, mapID, lineID, cnt, dataEx, askRet)
 
 ## 开始公共CD副本扫荡
 def OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
@@ -1570,10 +1516,12 @@
 def OnPlayerFBQuickPass(curPlayer, mapID, lineID):
     '''副本快速过关验证
     @param mapID: 数据地图ID
-    @param lineID: 目标关卡线路ID,可一次性跳多关,由前端发包决定
-    @return: (bossID, quickCnt) 或  None
-    @note: bossID 目标NPCID - 目标关卡所需要挑战的主NPCID,一般是boss,用于验证战力是否满足快速过关
-    @note: quickCnt 本次总共跳过几关 - 默认1
+    @param lineID: 目标关卡线路ID,可一次性跳多关,根据功能由前端发包决定或后端直接决定
+    @return: (lineID, quickCnt, quickFightPower, quickData) 或  None
+    @note: lineID 由后端决定的快速过关到哪,如果前端决定的则直接返回 lineID
+    @note: quickCnt 本次总共跳过几关 
+    @note: quickFightPower 目标阵容战力,用于验证战力是否满足快速过关
+    @note: quickData 扩展数据,功能自定义,传给 OnPlayerFBQuickPassResult
     '''
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
@@ -1585,7 +1533,7 @@
     
     return callFunc(curPlayer, mapID, lineID)
 
-def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID):
+def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID, quickData):
     '''副本快速过关结果
     '''
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -1595,7 +1543,7 @@
     if callFunc == None:
         return
 
-    return callFunc(curPlayer, mapID, lineID)
+    return callFunc(curPlayer, mapID, lineID, quickData)
 
 #---------------------------------------------------------------------
 
@@ -2244,29 +2192,16 @@
 
 def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
     ## 回合战斗请求 - 地图验证
-    # @return: 是否允许
+    # @return: 是否允许, 后端验证通过的funcLineID
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
     callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnTurnFightRequest"))
     
     if callFunc == None:
         # 默认不限制
-        return True
+        return True, funcLineID
     
     return callFunc(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
-
-def GetFBPlayerLineupID(curPlayer, mapID, funcLineID):
-    ## 获取玩家使用的攻防阵容ID
-    # @return: 攻击方阵容ID, 防守方阵容ID
-    do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-    
-    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "GetFBPlayerLineupID"))
-    
-    if callFunc == None:
-        # 默认不限制
-        return ShareDefine.Lineup_Main, ShareDefine.Lineup_Main
-    
-    return callFunc(curPlayer, mapID, funcLineID)
 
 def GetFBNPCLineupInfo(curPlayer, mapID, funcLineID):
     ## 获取NPC阵容相关
@@ -2279,6 +2214,28 @@
     
     return callFunc(curPlayer, mapID, funcLineID)
 
+def GetFBNPCInitAttr(turnFight, npcObj):
+    ## 获取副本指定NPC初始化属性
+    do_FBLogic_ID = __GetFBLogic_MapID(turnFight.mapID)
+    
+    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "GetFBNPCInitAttr"))
+    if callFunc == None:
+        return
+    
+    return callFunc(turnFight, npcObj)
+
+def OnFBNPCKilledBefore(turnFight, gameObj, killer=None, useSkill=None):
+    ## 副本NPC被击杀前处理,一般用于处理一些不被击杀的副本NPC逻辑
+    # @return: 可否被正常击杀
+    do_FBLogic_ID = __GetFBLogic_MapID(turnFight.mapID)
+    
+    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnFBNPCKilledBefore"))
+    if callFunc == None:
+        # 不需要逻辑时默认可被正常击杀
+        return True
+    
+    return callFunc(turnFight, gameObj, killer, useSkill)
+
 def OnPlayerLineupAttackResult(curPlayer, atkObj, killObjList, useSkill, mapID, funcLineID):
     ## 回合战斗主动发起的玩家阵容攻击结果额外处理 ,一般处理副本相关的掉落、奖励等
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -2290,7 +2247,7 @@
         
     return
 
-def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
+def OnTurnFightOver(turnFight, mapID, funcLineID, overMsg):
     ## 回合战斗结束
     
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -2300,5 +2257,16 @@
     if callFunc == None:
         return
     
-    return callFunc(curPlayer, turnFight, mapID, funcLineID, overMsg)
+    return callFunc(turnFight, mapID, funcLineID, overMsg)
 
+def OnTurnFightAward(curPlayer, guid, mapID, funcLineID, winFaction, statMsg, dateStr, reqData, awardDict):
+    ## 回合战斗结算奖励
+    
+    do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+    
+    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnTurnFightAward"))
+    
+    if callFunc == None:
+        return
+    
+    return callFunc(curPlayer, guid, mapID, funcLineID, winFaction, statMsg, dateStr, reqData, awardDict)

--
Gitblit v1.8.0