From 330c5a30027fd33e2f77643f4c3c2f77b4d91a0f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 10 五月 2024 16:42:13 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(回合战斗NPC相关属性统一调整到NPC扩展表;去除副本回合制表,新增冒险关卡表;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_TrialTower.py |  301 ++++++--------------------------------------------
 1 files changed, 37 insertions(+), 264 deletions(-)

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 2a292a0..efd989d 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
@@ -44,32 +44,6 @@
 import math
 
 g_runeTypeDict = {}
-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_TrialTower)
 
 def GetTowerIpyData(level):
     return IpyGameDataPY.GetIpyGameData('RuneTower', level)
@@ -110,99 +84,6 @@
     GameWorld.DebugLog(' 更新符印塔已通关数 %s' % passlv)
     return
 
-## 是否可进入
-#  @param curPlayer
-#  @param mapID 地图ID
-#  @param lineId 分线ID
-#  @param tick
-#  @return 是否可进入
-def OnEnterFBEvent(curPlayer, mapID, lineId, tick):    
-    return True
-
-
-## 检查可否进行挑战
-def __CheckCanChallenge(curPlayer, fbLevel):
-    playerID = curPlayer.GetPlayerID()
-    ipyData = GetTowerIpyData(fbLevel)
-    
-    if not ipyData:
-        GameWorld.ErrLog("符印塔关卡(%s)不存在" % (fbLevel), playerID)
-        return False
-    
-    # 是否已过关
-    if fbLevel <= __GetTrialLevelCurPassLV(curPlayer):
-        GameWorld.DebugLog("符印塔本关(%s)已过关, 无法挑战!" % fbLevel, playerID)
-        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):
-    # 不做处理,有副本行为客户端发包选择挑战关卡
-    EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_TrialTower, 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 __GetTrialBossID(fbLevel= -1):
     gameFB = GameWorld.GetGameFB()
@@ -215,92 +96,6 @@
         return 0
     return ipyData.GetNPCID()
 
-##战斗准备时间
-# @param tick  时钟
-# @return 无意义
-def __DoLogic_FightPrepare(tick):
-    gameFB = GameWorld.GetGameFB()
-    
-    trialCfg = __GetTrialCfg()
-    if tick - gameFB.GetFBStepTick() < trialCfg[Def_PrepareTime] * 1000:
-        return
-    
-    bossID = __GetTrialBossID()
-    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_TrialTower, 0), [bossID])
-    
-    #转入战斗
-    FBCommon.SetFBStep(FB_State_Fighting, tick)
-    return
-
-## 开始副本关卡
-def StartFBLevel(curPlayer, fbLevel, 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, fbLevel)
-    
-    prepareTick = __GetTrialCfg()[Def_PrepareTime] * 1000
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttAddUpTime, prepareTick)
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttWaitStart, prepareTick)
-    FBCommon.SetFBStep(FB_State_FightPrepare, tick)
-    helpDict = {FBCommon.Help_wheel:fbLevel}
-    FBCommon.Notify_FBHelp(curPlayer, helpDict)
-    GameWorld.DebugLog("StartFBLevel, fbLevel=%s, helpDict=%s" 
-                       % (fbLevel, str(helpDict)), curPlayer.GetPlayerID())
-    return
-
-
-##战斗时间
-# @param tick  时钟
-# @return 无意义
-def __DoLogic_Fighting(tick):
-    gameFB = GameWorld.GetGameFB()
-    
-    #判断时间结束
-    if tick - gameFB.GetFBStepTick() < __GetTrialCfg()[Def_FightTime] * 1000:
-        return
-    
-    fbLevel = gameFB.GetGameFBDictByKey(FBDict_Level)
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    for index in xrange(playerManager.GetPlayerCount()):
-        curPlayer = playerManager.GetPlayerByIndex(index)
-        if not curPlayer:
-            continue
-        __SendTrialTowerOverInfo(curPlayer, fbLevel, 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
@@ -473,64 +268,6 @@
     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()
-    fbLevel = gameFB.GetGameFBDictByKey(FBDict_Level)
-    __SendTrialTowerOverInfo(curPlayer, fbLevel, 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
-    
-    fbLevel = actionInfo
-    if not __CheckCanChallenge(curPlayer, fbLevel):
-        FBCommon.DoLogic_FBKickAllPlayer()
-        return
-    
-    StartFBLevel(curPlayer, fbLevel, tick)
-    return
-
-
 def GetRuneTypeByTowerLV(towerLV):
     #获取关卡可掉落符印类型
     towerRuneTypeDict = IpyGameDataPY.GetFuncEvalCfg('TowerRuneType')
@@ -659,4 +396,40 @@
     #BOSS复活活动
     PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_TowerSweep, 1)
     PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_TowerSweep, 1)
-    return True
\ No newline at end of file
+    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