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