From 649b36b642546062ab5102b6225b9f78ea72309d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 04 十一月 2025 18:11:02 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(优化完整战报仅包含战斗相关封包,结算奖励相关如物品,经验,货币,挑战次数等统一放在战报数据B430后同步)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py |   97 ++++++++++++++++++++++--------------------------
 1 files changed, 45 insertions(+), 52 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 01e4c7f..65e75c9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -20,13 +20,10 @@
 import GameWorldProcess
 import CrossRealmPlayer
 import DataRecordPack
-import IpyGameDataPY
-import PlayerSuccess
 import ReadChConfig
 import ShareDefine
 import PyGameData
 import FBCommon
-import GameMap
 import GameObj
 
 import random
@@ -498,7 +495,7 @@
             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 [ChConfig.Def_FBMapID_CrossChampionship]:
+            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)
@@ -551,8 +548,6 @@
         
     #注册玩家离开副本时间
     gameFBMgr.SetPlayerLogoffTick(0)
-    
-    PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_EnterMap, 1, [gameMapID])
     
     if gameFBMgr.HaveFBPlayer(curPlayerID):
         #已经注册了这个玩家, 不清除已注册的玩家的字典信息
@@ -1069,13 +1064,6 @@
     for key, mapIDList in ChConfig.Def_FB_MapID.items():
         if not mapIDList:
             continue
-        mapID = mapIDList[0]
-        ipyData = FBCommon.GetFBIpyData(mapID)
-        if ipyData and ipyData.GetDayResetType():
-            if onDayType != ipyData.GetDayResetType():
-                continue
-        elif onDayType != ShareDefine.Def_OnEventTypeEx:
-            continue
         callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (key, "OnFBPlayerOnDay"))
         if callFunc:
             callFunc(curPlayer)
@@ -1318,9 +1306,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
@@ -1489,21 +1474,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())
@@ -1530,20 +1500,21 @@
     
     return callFunc(curPlayer, addExp, expViewType)
 
-## 副本扫荡询问
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+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"))
     
-    # 没有额外条件判断默认返回True
     if callFunc == None:
-        return True
+        return
 
-    return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+    return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
 
-## 副本扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, 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"))
@@ -1551,7 +1522,7 @@
     if callFunc == None:
         return False
 
-    return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+    return callFunc(curPlayer, mapID, lineID, cnt, dataEx, askRet)
 
 ## 开始公共CD副本扫荡
 def OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
@@ -2250,27 +2221,16 @@
         return
     return callFunc()
 
-## 是否需要做进入副本通用检查条件逻辑,默认需要检查
-def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
-    do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-    
-    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnNeedCheckCanEnterFBComm"))
-    
-    if callFunc == None:
-        return True
-    
-    return callFunc(curPlayer, mapID, lineID)
-
 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)
 
@@ -2298,6 +2258,28 @@
     
     return callFunc(curPlayer, mapID, funcLineID)
 
+def GetFBNPCInitAttr(curPlayer, 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(curPlayer, turnFight, npcObj)
+
+def OnFBNPCKilledBefore(curPlayer, 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(curPlayer, turnFight, gameObj, killer, useSkill)
+
 def OnPlayerLineupAttackResult(curPlayer, atkObj, killObjList, useSkill, mapID, funcLineID):
     ## 回合战斗主动发起的玩家阵容攻击结果额外处理 ,一般处理副本相关的掉落、奖励等
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -2321,3 +2303,14 @@
     
     return callFunc(curPlayer, turnFight, mapID, funcLineID, overMsg)
 
+def OnTurnFightAward(curPlayer, turnFight, mapID, funcLineID, awardData):
+    ## 回合战斗结算奖励
+    
+    do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+    
+    callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnTurnFightAward"))
+    
+    if callFunc == None:
+        return
+    
+    return callFunc(curPlayer, turnFight, mapID, funcLineID, awardData)

--
Gitblit v1.8.0