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