From 8efdda5afde00682163ae3ec3758a7dcbd29766f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 11 五月 2024 11:50:32 +0800
Subject: [PATCH] 10156 副本功能玩法关联回合战斗表现(符印塔、天星塔战斗改为回合制,功能玩法不变,配置不变;支持新任务系统中的挑战副本、过关副本;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py   |    9 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py                        |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py   |  329 ++------------------------------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFB.py                             |   63 ++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Adventure.py  |   19 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py |  119 ++++-------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py                             |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/FBCommon.py             |   18 
 8 files changed, 162 insertions(+), 404 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index b20f460..e9115b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -184,16 +184,17 @@
         return
     isWin, turnNum, turnMax, factionTotalHurtDict, playbackID = fightRet
     
-    needSendGameServer, awardItemList = False, []
+    needSendGameServer, awardItemList, overInfoEx = False, [], {}
     overRet = FBLogic.OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet)
     if overRet != None:
-        needSendGameServer, awardItemList = overRet
+        needSendGameServer, awardItemList, overInfoEx = overRet
         
     if needSendGameServer or mapID in ChConfig.Def_TFMapID_SendToGameServer:
         SendToGameServer_TurnFight(curPlayer, "TurnFightOver", [mapID, funcLineID, tagType, tagID, valueList, fightRet, awardItemList])
         
-    overMsg = {"isWin":isWin, "itemInfo":FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
+    overMsg = {"isWin":isWin, FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(awardItemList), "totalHurt":factionTotalHurtDict.get(1, 0)}
     playbackID and overMsg.update({"playbackID":playbackID})
+    overInfoEx and overMsg.update(overInfoEx)
     SyncTurnFightState(curPlayer, mapID, funcLineID, tagType, tagID, FightState_Award, turnNum, turnMax, overMsg)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFB.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFB.py
new file mode 100644
index 0000000..28966c4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetFB.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package GM.Commands.SetFB
+#
+# @todo:设置副本相关
+# @author hxp
+# @date 2024-05-11
+# @version 1.0
+#
+# 详细描述: 设置副本相关
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-05-11 12:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import ChConfig
+import FBCommon
+import PlayerControl
+import GameLogic_TrialTower
+import GameLogic_SkyTower
+
+#---------------------------------------------------------------------
+#逻辑实现
+## GM命令执行入口
+#  @param curPlayer 当前玩家
+#  @param paramList 参数列表
+#  @return None
+#  @remarks 函数详细说明.
+def OnExec(curPlayer, paramList):
+
+    if not paramList:
+        GameWorld.DebugAnswer(curPlayer, "设置线路: SetFB line 地图ID 已过关到线路")
+        return
+    
+    mapID = None
+    value = paramList[0]
+    if value == "line":
+        mapID = paramList[1] if len(paramList) > 1 else 0
+        funcLineID = paramList[2] if len(paramList) > 2 else 0
+        if not mapID:
+            return
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBPassLineID % mapID, funcLineID)
+        
+        if mapID == ChConfig.Def_FBMapID_TrialTower:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TrialTower_PassLV, funcLineID)
+            GameLogic_TrialTower.SyncTrialLevelInfo(curPlayer)
+        elif mapID == ChConfig.Def_FBMapID_SkyTower:
+            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_SkyTowerFloor, funcLineID)
+            GameLogic_SkyTower.SyncSkyTowerInfo(curPlayer)
+                        
+        GameWorld.DebugAnswer(curPlayer, "设置副本:%s 已过关:%s" % (mapID, funcLineID))
+    else:
+        return
+    
+    FBCommon.Sync_FBPlayerFBInfoData(curPlayer, mapID)
+    return
+
+
+
+
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 3422f9a..6e6480a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -2439,7 +2439,7 @@
 
 def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
     ## 回合战斗结束
-    # @return: 是否需要同步GameServer, 奖励列表
+    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
     
     do_FBLogic_ID = __GetFBLogic_MapID(mapID)
     
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 eab588f..eb91027 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
@@ -1720,21 +1720,21 @@
     NotifyFBCntRegainInfo(curPlayer, [mapID])
     return
 
-def OnFBOver(curPlayer, mapID, funcLineID, isWin, awardItemList):
-    ## 副本结束通用逻辑
-    
+def OnFBJoin(curPlayer, mapID, funcLineID):
+    ## 副本参与通用逻辑
     PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_FBChallenge, 1, [mapID])
-    if not isWin:
-        return
-    
-    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_FBPass)
-    
+    return
+
+def OnFBPass(curPlayer, mapID, funcLineID, awardItemList=None):
+    ## 副本过关通用逻辑
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FBPassLineID % mapID, funcLineID)
     Sync_FBPlayerFBInfoData(curPlayer, mapID)
     
-    GameWorld.DebugLog("奖励物品: %s" % awardItemList)
     if awardItemList:
+        GameWorld.DebugLog("给奖励物品: %s" % awardItemList)
         ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["FBPass_%s" % mapID, False, {"mapID":mapID, "funcLineID":funcLineID}])
+        
+    PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_FBPass)
     return
 
 def RegainFBCntProcess(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Adventure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Adventure.py
index b7867c0..d640e2c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Adventure.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Adventure.py
@@ -44,19 +44,22 @@
 
 def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
     ## 回合战斗结束
-    # @return: 是否需要同步GameServer, 奖励列表
+    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
     needSendGameServer = False
-    awardItemList = []
+    overInfoEx = {}
     isWin = fightRet[0]
     
     GameWorld.DebugLog("冒险关卡结算: funcLineID=%s,isWin=%s" % (funcLineID, isWin))
     
     ipyData = IpyGameDataPY.GetIpyGameData("Adventure", funcLineID)
     if not ipyData:
-        return needSendGameServer, awardItemList
+        return
     
-    if isWin:
-        awardItemList = ipyData.GetAwardItemList()
-        
-    FBCommon.OnFBOver(curPlayer, mapID, funcLineID, isWin, awardItemList)
-    return needSendGameServer, awardItemList
+    FBCommon.OnFBJoin(curPlayer, mapID, funcLineID)
+    
+    if not isWin:
+        return
+    
+    awardItemList = ipyData.GetAwardItemList()
+    FBCommon.OnFBPass(curPlayer, mapID, funcLineID, awardItemList)
+    return needSendGameServer, awardItemList, overInfoEx
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
index 8de5fbc..4df4b05 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_MineArea.py
@@ -48,23 +48,24 @@
 
 def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
     ## 回合战斗结束
-    # @return: 是否需要同步GameServer, 奖励列表
+    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
     needSendGameServer = True
     awardItemList = []
+    overInfoEx = {}
     
     # 摇人帮助
     if funcLineID == 0:
         # 无论胜负都要同步GameServer汇报结果
         isWin = fightRet[0]
         if not isWin:
-            return needSendGameServer, awardItemList
+            return needSendGameServer, awardItemList, overInfoEx
         
         awardItemList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHelp", 2)
-        return needSendGameServer, awardItemList
+        return needSendGameServer, awardItemList, overInfoEx
     
     # 自己驱赶
     elif funcLineID == 1:
-        return needSendGameServer, awardItemList
+        return needSendGameServer, awardItemList, overInfoEx
     
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
index e4658f8..aaf1958 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_SkyTower.py
@@ -18,9 +18,7 @@
 
 import FBCommon
 import GameWorld
-import IPY_GameWorld
 import PlayerControl
-import NPCCustomRefresh
 import ChPyNetSendPack
 import ItemControler
 import EventShell
@@ -28,34 +26,9 @@
 import ShareDefine
 import IpyGameDataPY
 import ChConfig
-import ChPlayer
 import PlayerActivity
 import PlayerBillboard
 import PlayerSuccess
-import GameObj
-import GameWorldProcess
-
-FBDict_Level = 'FBDict_Level'   # 副本关卡
-
-# 副本通用配置
-(
-Def_PrepareTime, # 每关准备时间,秒
-Def_FightTime, # 每关战斗时间,秒
-Def_ExitTime, # 退出时间, 秒
-Def_DayPrizeMaxCnt, #每日奖励最多累积几天(配0则无限)
-) = range(4)
-
-# 副本状态
-(
-FB_State_Open, # 副本开启
-FB_State_FightPrepare, # 战斗准备时间
-FB_State_Fighting, # 战斗
-FB_State_FreeTime, # 活动结束准备(胜利/失败)
-FB_State_Close, # 关闭副本
-) = range(5)
-
-## 天星塔配置
-def __GetTrialCfg(): return FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_SkyTower)
 
 def GetTowerIpyData(floor):
     return IpyGameDataPY.GetIpyGameData('SkyTower', floor)
@@ -136,18 +109,10 @@
     GameWorld.DebugLog(' 更新天星塔已通关数 %s' % floorID)
     return
 
-## 是否可进入
-#  @param curPlayer
-#  @param mapID 地图ID
-#  @param lineId 分线ID
-#  @param tick
-#  @return 是否可进入
-def OnEnterFBEvent(curPlayer, mapID, lineId, tick):
-    return True
-
-
-## 检查可否进行挑战
-def __CheckCanChallenge(curPlayer, floorID):
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+    ## 回合战斗请求 - 地图验证
+    
+    floorID = funcLineID
     playerID = curPlayer.GetPlayerID()
     ipyData = GetTowerIpyData(floorID)
     
@@ -164,224 +129,44 @@
         GameWorld.DebugLog("天星塔本关  等级不足%s, 无法挑战!" % ipyData.GetNeedLV(), playerID)
         return False
     
+    bossID = ipyData.GetBossID()
+    if tagID != bossID or tagType != ChConfig.TurnBattle_TagType_NPC:
+        GameWorld.ErrLog("目标bossID错误,无法挑战! mapID=%s,funcLineID=%s,bossID=%s,tagType=%s,tagID=%s" 
+                         % (mapID, funcLineID, bossID, tagType, tagID), curPlayer.GetPlayerID())
+        return False
+    
     return True
 
-
-##副本玩家进入点
-# @param curPlayer 玩家实例
-# @param mapID 地图ID
-# @param lineId 分线ID
-# @param ipyEnterPosInfo 功能线路IPY配置坐标信息
-# @param tick 时间戳
-# @return posX, posY, 随机半径(可选)
-def OnGetFBEnterPos(curPlayer, mapID, lineId, ipyEnterPosInfo, tick):
-    return ipyEnterPosInfo
-
-
-## 是否可以进入
-#  @param ask 请求信息
-#  @param tick
-#  @return 回复是否通过请求
-def OnChangeMapAsk(ask, tick):
-    return IPY_GameWorld.cmeAccept
-
-## 进副本
-#  @param curPlayer
-#  @param tick
-#  @return None
-def DoEnterFB(curPlayer, tick):
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
+def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
+    ## 回合战斗结束
+    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
+    needSendGameServer = False
+    awardItemList = []
+    overInfoEx = {}
     
-    if fbStep == FB_State_FightPrepare:
-        notify_tick = __GetTrialCfg()[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
-        
-    elif fbStep == FB_State_Fighting:
-        notify_tick = __GetTrialCfg()[Def_FightTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
-    elif fbStep > FB_State_Fighting:
-        PlayerControl.PlayerLeaveFB(curPlayer)
-        return
-
-
-    # 不做处理,有副本行为客户端发包选择挑战关卡
-    #EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_SkyTower, 0, ChConfig.CME_Log_Start)
-    return
-
-
-## 副本时间到关闭
-#  @param tick 当前时间
-#  @return None
-#  @remarks 函数详细说明.
-def OnCloseFB(tick):
-    return
-
-
-##玩家退出副本.
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家主动离开副本.
-def DoExitFB(curPlayer, tick):
-    # 玩家退出默认关闭副本
-    GameWorldProcess.CloseFB(tick)
-    return
-
-
-##副本总逻辑计时器
-# @param tick 时间戳
-# @return 无意义
-# @remarks 副本总逻辑计时器
-def OnProcess(tick):
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    
-    if fbStep == FB_State_FightPrepare:
-        __DoLogic_FightPrepare(tick)
-    elif fbStep == FB_State_Fighting:
-        __DoLogic_Fighting(tick)
-    elif fbStep == FB_State_FreeTime:
-        __DoLogic_FreeTime(tick)
-    elif fbStep == FB_State_Close:
-        pass
-    
-    return
-
-## 获取BossID
-def __GetSkyTowerBossID(floorID= -1):
-    gameFB = GameWorld.GetGameFB()
-    if floorID == -1:
-        floorID = gameFB.GetGameFBDictByKey(FBDict_Level)
-    ipyData = GetTowerIpyData(floorID)
-    
-    if not ipyData:
-        GameWorld.ErrLog("__GetSkyTowerBossID() can not find %s in SkyTowerNPC.txt" % floorID)
-        return 0
-    return ipyData.GetBossID()
-
-##战斗准备时间
-# @param tick  时钟
-# @return 无意义
-def __DoLogic_FightPrepare(tick):
-    gameFB = GameWorld.GetGameFB()
-    
-    trialCfg = __GetTrialCfg()
-    if tick - gameFB.GetFBStepTick() < trialCfg[Def_PrepareTime] * 1000:
-        return
-    
-    bossID = __GetSkyTowerBossID()
-    if not bossID:
-        FBCommon.DoLogic_FBKickAllPlayer()
-        return
-    
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, trialCfg[Def_FightTime] * 1000)
-    
-    NPCCustomRefresh.SetNPCRefresh(FBCommon.GetFBLineRefreshNPC(ChConfig.Def_FBMapID_SkyTower, 0), [bossID])
-    
-    #转入战斗
-    FBCommon.SetFBStep(FB_State_Fighting, tick)
-    return
-
-## 开始副本关卡
-def StartfloorID(curPlayer, floorID, tick):
-    if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
-        GameWorld.DebugLog("复活玩家...", curPlayer.GetPlayerID())
-        ChPlayer.PlayerRebornByType(curPlayer, ChConfig.rebornType_City, tick)
-    GameObj.SetHPFull(curPlayer)
-    FBCommon.ClearFBNPC()
-    
-    gameFB = GameWorld.GetGameFB()
-    gameFB.SetGameFBDict(FBDict_Level, floorID)
-    
-    prepareTick = __GetTrialCfg()[Def_PrepareTime] * 1000
-    
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttWaitStart, prepareTick)
-    FBCommon.SetFBStep(FB_State_FightPrepare, tick)
-    helpDict = {FBCommon.Help_wheel:floorID}
-    FBCommon.Notify_FBHelp(curPlayer, helpDict)
-    GameWorld.DebugLog("StartfloorID, floorID=%s, helpDict=%s" 
-                       % (floorID, str(helpDict)), curPlayer.GetPlayerID())
-    return
-
-
-##战斗时间
-# @param tick  时钟
-# @return 无意义
-def __DoLogic_Fighting(tick):
-    gameFB = GameWorld.GetGameFB()
-    
-    #判断时间结束
-    if tick - gameFB.GetFBStepTick() < __GetTrialCfg()[Def_FightTime] * 1000:
-        return
-    
-    floorID = gameFB.GetGameFBDictByKey(FBDict_Level)
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not curPlayer:
-            continue
-        __SendSkyTowerOverInfo(curPlayer, floorID, False)
-    
-    #游戏结束
-    __SetFBToFreeTime(tick)
-    return
-
-##设置副本进入离开状态
-# @param tick  时钟
-# @return 无意义
-def __SetFBToFreeTime(tick):
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, __GetTrialCfg()[Def_ExitTime] * 1000)
-    FBCommon.SetFBStep(FB_State_FreeTime, tick)
-    return
-
-##比赛结束的空闲时间
-# @param tick  时钟
-# @return 无意义
-# @remarks 比赛结束的空闲时间
-def __DoLogic_FreeTime(tick):
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < __GetTrialCfg()[Def_ExitTime] * 1000:
-        return
-    
-    #FBCommon.DoLogic_FBKickAllPlayer()
-    return
-
-## 杀怪
-#  @param curPlayer
-#  @param curNPC 被杀的怪
-#  @param tick
-#  @return None
-def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() != FB_State_Fighting:
-        return
-    bossID = __GetSkyTowerBossID()
-    if bossID != curNPC.GetNPCID():
-        return
-    
-    
-    floorID = gameFB.GetGameFBDictByKey(FBDict_Level)
-            
-    # 过关全服广播
+    floorID = funcLineID
     ipyData = GetTowerIpyData(floorID)
     if not ipyData:
+        return
+    
+    FBCommon.OnFBJoin(curPlayer, mapID, funcLineID)
+    isWin = fightRet[0]    
+    if not isWin:
         return
     
     if ipyData.GetIsNotify():
         sysMark = 'KillGodTowerInfo_1'# if floorID == maxLevel else 'GeRen_liubo_471172'
         PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetPlayerName(), floorID])
+        
     #更新关卡
     SetSkyTowerCurfloorID(curPlayer, floorID)
     # 给过关奖励
     prizeDict = __GiveFBPassPrize(curPlayer, ipyData)
-    # 过关时间
-    costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
-    prizeDict[FBCommon.Over_costTime] = costTime
+    
     __SendSkyTowerOverInfo(curPlayer, floorID, True, prizeDict)
     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_SkyTower)
     
     SyncSkyTowerInfo(curPlayer, 0) # 同步最新关卡信息
-    __SetFBToFreeTime(tick)
     
     if floorID >= 10:
         PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_SkyTower, floorID)
@@ -400,9 +185,9 @@
         GameWorld.DebugLog("全服过关信息同步GameServer: %s" % msgInfo, playerID)
         GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "SkyTower", msgInfo, len(msgInfo))
         
-    return
-
-
+    FBCommon.OnFBPass(curPlayer, mapID, funcLineID)
+    overInfoEx.update(prizeDict)
+    return needSendGameServer, awardItemList, overInfoEx
 
 ## 给过关奖励
 def __GiveFBPassPrize(curPlayer, ipyData):
@@ -414,8 +199,6 @@
     prizeDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(giveItemList)}
     return prizeDict
 
-
-
 ## 发送挑战结果信息
 def __SendSkyTowerOverInfo(curPlayer, floorID, isPass, overDict={}):
     
@@ -424,63 +207,6 @@
     overDict[FBCommon.Over_isPass] = int(isPass)
     GameWorld.DebugLog("__SendSkyTowerOverInfo overDict=%s" % (str(overDict)), curPlayer.GetPlayerID())
     FBCommon.Notify_FB_Over(curPlayer, overDict)
-    return
-
-
-## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
-#  @param attacker 攻击方
-#  @param defender 防守方
-#  @return bool
-def CheckCanAttackTagObjInFB(attacker, defender):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() != FB_State_Fighting:
-        return False
-    return True
-
-##玩家死亡.
-# @param curPlayer:死亡的玩家 
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家主动离开副本.
-def DoPlayerDead(curPlayer):
-    gameFB = GameWorld.GetGameFB()
-    floorID = gameFB.GetGameFBDictByKey(FBDict_Level)
-    __SendSkyTowerOverInfo(curPlayer, floorID, False)
-    tick = GameWorld.GetGameWorld().GetTick()
-    #游戏结束
-    __SetFBToFreeTime(tick)
-    return
-
-## 是否副本复活
-#  @param None
-#  @return 是否副本复活
-def OnPlayerReborn():
-    return True
-
-## 副本行为
-#  @param curPlayer 玩家
-#  @param actionType 行为类型
-#  @param actionInfo 行为信息
-#  @param tick 当前时间
-#  @return None
-def DoFBAction(curPlayer, actionType, actionInfo, tick):
-    # 默认为选择关卡,由客户端决定,进场及副本选关通用此行为
-    if actionInfo <= 0:
-        return
-    
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    
-    if fbStep in [FB_State_FightPrepare, FB_State_Fighting]:
-        GameWorld.DebugLog("准备或战斗中, 无法变更关卡!")
-        return
-    
-    floorID = actionInfo
-    if not __CheckCanChallenge(curPlayer, floorID):
-        FBCommon.DoLogic_FBKickAllPlayer()
-        return
-    
-    StartfloorID(curPlayer, floorID, tick)
     return
 
 def OnGetSkyTowerServerChallengeReward(curPlayer, floorID, needPlayerCount):
@@ -565,5 +291,4 @@
         SyncSkyTowerInfo(curPlayer, floorID)
         
     return
-
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
index efd989d..eaf52e7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py
@@ -18,19 +18,15 @@
 
 import FBCommon
 import GameWorld
-import IPY_GameWorld
 import PlayerControl
-import NPCCustomRefresh
 import ChPyNetSendPack
 import ItemControler
-import EventShell
 import NetPackCommon
 import ShareDefine
 import IpyGameDataPY
 import PlayerRune
 import ItemCommon
 import ChConfig
-import ChPlayer
 import PlayerSuccess
 import PlayerActivity
 import PlayerBillboard
@@ -38,7 +34,6 @@
 import PlayerActLogin
 import EventReport
 import PlayerBossReborn
-import GameObj
 
 import random
 import math
@@ -84,38 +79,44 @@
     GameWorld.DebugLog(' 更新符印塔已通关数 %s' % passlv)
     return
 
-## 获取BossID
-def __GetTrialBossID(fbLevel= -1):
-    gameFB = GameWorld.GetGameFB()
-    if fbLevel == -1:
-        fbLevel = gameFB.GetGameFBDictByKey(FBDict_Level)
-    ipyData = GetTowerIpyData(fbLevel)
+def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
+    ## 回合战斗请求 - 地图验证
+    
+    playerID = curPlayer.GetPlayerID()
+    ipyData = GetTowerIpyData(funcLineID)
     
     if not ipyData:
-        GameWorld.ErrLog("__GetTrialBossID() can not find %s in TrialTowerNPC.txt" % fbLevel)
-        return 0
-    return ipyData.GetNPCID()
-
-
-## 杀怪
-#  @param curPlayer
-#  @param curNPC 被杀的怪
-#  @param tick
-#  @return None
-def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() != FB_State_Fighting:
-        return
-    bossID = __GetTrialBossID()
-    if bossID != curNPC.GetNPCID():
-        return
+        GameWorld.ErrLog("符印塔关卡不存在: funcLineID=%s" % (funcLineID), playerID)
+        return False
     
+    # 是否已过关
+    if funcLineID <= __GetTrialLevelCurPassLV(curPlayer):
+        GameWorld.DebugLog("符印塔本关已过关, 无法挑战! funcLineID=%s" % funcLineID, playerID)
+        return False
     
-    fbLevel = gameFB.GetGameFBDictByKey(FBDict_Level)
-            
-    # 过关全服广播
+    bossID = ipyData.GetNPCID()
+    if tagID != bossID or tagType != ChConfig.TurnBattle_TagType_NPC:
+        GameWorld.ErrLog("目标bossID错误,无法挑战! mapID=%s,funcLineID=%s,bossID=%s,tagType=%s,tagID=%s" 
+                         % (mapID, funcLineID, bossID, tagType, tagID), curPlayer.GetPlayerID())
+        return False
+    
+    return True
+
+def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
+    ## 回合战斗结束
+    # @return: 是否需要同步GameServer, 奖励列表, 同步结果信息
+    needSendGameServer = False
+    awardItemList = []
+    overInfoEx = {}
+    
+    fbLevel = funcLineID
     ipyData = GetTowerIpyData(fbLevel)
     if not ipyData:
+        return
+    
+    FBCommon.OnFBJoin(curPlayer, mapID, funcLineID)
+    isWin = fightRet[0]    
+    if not isWin:
         return
     
     floorCnt = IpyGameDataPY.GetFuncCfg('TowerRuneType', 2)
@@ -123,31 +124,31 @@
         # 记录过关
         EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_TrialTower, 0, ChConfig.CME_Log_End, 0, 1)
         
+    # 过关全服广播
     if ipyData.GetIsNotify():
         IPY_Data = IpyGameDataPY.IPY_Data()
         maxLevel = IPY_Data.GetRuneTowerByIndex(IPY_Data.GetRuneTowerCount()-1).GetID()
         sysMark = 'RuneTowerInfo_1' if fbLevel == maxLevel else 'GeRen_liubo_471172'
-        PlayerControl.WorldNotify(0, sysMark,
-                                  [curPlayer.GetPlayerName(), fbLevel / 100])
+        PlayerControl.WorldNotify(0, sysMark, [curPlayer.GetPlayerName(), fbLevel / 100])
+        
     #更新关卡
     SetTrialLevelCurPassLV(curPlayer, fbLevel)
     # 给过关奖励
     prizeDict = __GiveFBPassPrize(curPlayer, fbLevel)
-    # 过关时间
-    costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
-    prizeDict[FBCommon.Over_costTime] = costTime
+    
     __SendTrialTowerOverInfo(curPlayer, fbLevel, True, prizeDict)
     
     #任务
-    EventShell.EventRespons_TrialTowerCnt(curPlayer, fbLevel)
+    #EventShell.EventRespons_TrialTowerCnt(curPlayer, fbLevel)
     
     SyncTrialLevelInfo(curPlayer) # 同步最新关卡信息
-    __SetFBToFreeTime(tick)
+    
     #每日任务
     PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Tower)
-    return
-
-
+    
+    FBCommon.OnFBPass(curPlayer, mapID, funcLineID)
+    overInfoEx.update(prizeDict)
+    return needSendGameServer, awardItemList, overInfoEx
 
 ## 给过关奖励
 def __GiveFBPassPrize(curPlayer, fbLevel):
@@ -397,39 +398,3 @@
     PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
     PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_TowerSweep, 1)
     return True
-
-
-def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
-    ## 回合战斗请求 - 地图验证
-    
-    playerID = curPlayer.GetPlayerID()
-    ipyData = GetTowerIpyData(funcLineID)
-    
-    if not ipyData:
-        GameWorld.ErrLog("符印塔关卡不存在: funcLineID=%s" % (funcLineID), playerID)
-        return False
-    
-    # 是否已过关
-    if funcLineID <= __GetTrialLevelCurPassLV(curPlayer):
-        GameWorld.DebugLog("符印塔本关已过关, 无法挑战! funcLineID=%s" % funcLineID, playerID)
-        return False
-    
-    return True
-
-def OnTurnFightOver(curPlayer, mapID, funcLineID, tagPlayerID, valueList, fightRet):
-    ## 回合战斗结束
-    # @return: 是否需要同步GameServer, 奖励列表, 发放方式(0-不发放, 1-TurnAttack模块统一发放, 2-功能自己决定发放逻辑)
-    
-    needSendGameServer = False
-    awardItemList = []
-    awardWay = 2
-    
-    isWin = fightRet[0]
-    if not isWin:
-        return needSendGameServer, awardItemList, awardWay
-    
-    return needSendGameServer, awardItemList, awardWay
-
-    
-    return
-

--
Gitblit v1.8.0