From 11999c0e61fd4ce20316b7a26514e66ebea4e070 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 27 五月 2019 11:16:50 +0800
Subject: [PATCH] 6743 【后端】【2.0】31250副本地图修改为前端副本

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Guard.py |  447 ++-----------------------------------------------------
 1 files changed, 20 insertions(+), 427 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Guard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Guard.py
index ad8aa31..a5743b2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Guard.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Guard.py
@@ -14,78 +14,15 @@
 #-------------------------------------------------------------------------------
 #"""Version = 2017-12-22 14:00"""
 #-------------------------------------------------------------------------------
-
+import ChConfig
 import FBCommon
 import GameWorld
-import IpyGameDataPY
 import IPY_GameWorld
-import GameWorldProcess
-import NPCCustomRefresh
-import ChConfig
-import ShareDefine
 import ItemControler
 import PlayerControl
 import EventShell
-import EventReport
 
 
-#---副本配置对应key值---
-(
-Def_PrepareTime, # 副本准备时间(秒)
-Def_FightTime, # 进行时间(秒)
-Def_LeaveTime, # 退出时间(秒)
-) = range(3)
-
-(
-DL_RefreshMark, # 刷怪标识点
-DL_NPCID, # NPCID
-DL_SingleNPCCnt, # 单次刷NPC个数
-DL_maxCnt, #当前点最大怪物数
-DL_TotalNPCCnt, # 累计刷NPC总个数
-DL_NeedKillCnt, # 需要击杀数量
-DL_RefreshCD, # 刷新间隔
-) = range(7)
-
-
-#当前副本地图的状态
-(
-FB_Step_Open, # 副本开启
-FB_Step_Prepare, # 副本等待
-FB_Step_Fighting, # 副本进行中
-FB_Step_Over, # 副本结束
-FB_Step_Close, # 副本关闭
-) = range(5)
-
-#副本进行的关卡
-(
-Def_Prepare, # 准备
-Def_KillBandit, # 击杀强盗
-Def_BreakCage, # 破坏笼子
-Def_Dialog, # 与幼龙对话
-Def_EndGuard, # 结束
-) = range(5)
-
-FBPlayerDict_GameStep = 'FBPlayerDict_GameStep' #关卡
-FBPlayerDict_NPCKillCnt = 'FBPlayerDict_NPCKillCnt'   # NPC已击杀数量
-FBPlayerDict_NPCNeedKillCnt = 'FBPlayerDict_NPCNeedKillCnt'   # NPC需要击杀数量
-
-FBPlayerDict_TotalExp = 'FBPlayerDict_TotalExp'   # 获得的总经验
-FBPlayerDict_TotalExpPoint = 'FBPlayerDict_TotalExpPoint'   # 获得的总经验点
-
-
-##---获得副本配置---
-#  @param None
-#  @return 配置信息
-def GetGuardTimeCfg():
-    return FBCommon.GetFBLineStepTime(GameWorld.GetMap().GetMapID(), 0)
-
-##开启副本
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 开启副本
-def OnOpenFB(tick):
-    FBCommon.OpenOrCloseDoorEx([IpyGameDataPY.GetFuncCfg('GuardFBCageNPCID', 2)], 0)
-    return
 
 ## 是否能够通过活动查询进入
 #  @param curPlayer 玩家实例
@@ -94,370 +31,26 @@
 #  @param tick 时间戳
 #  @return 布尔值
 def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
-    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:请求结构体(IPY_BMChangeMapAsk)
-# @param tick:时间戳
-# @return IPY_GameWorld.cme 枚举
-def OnChangeMapAsk(ask, tick):
-    return IPY_GameWorld.cmeAccept
-
-def SetMap_Guard_GameStep(gameStep):
-    ## 设置副本步骤
-    GameWorld.GetGameFB().SetGameFBDict(FBPlayerDict_GameStep, gameStep)
-    
-    return
-## 进副本
-#  @param curPlayer
-#  @param tick
-#  @return None
-def DoEnterFB(curPlayer, tick):
-    playerID = curPlayer.GetPlayerID()
-    playerLV = curPlayer.GetLV()
-    mapID = GameWorld.GetMap().GetMapID()
-    mapID = FBCommon.GetRecordMapID(mapID)
-    gameFB = GameWorld.GetGameFB()
-   
-    GameWorld.DebugLog("DoEnterFB...,playerLV=%s" % (playerLV), playerID)
-    hadDelTicket = FBCommon.GetHadDelTicket(curPlayer)
-    if not hadDelTicket:
-        FBCommon.SetHadDelTicket(curPlayer)
-        
-        # 新手剧情副本重置所有技能CD
-        skillManager = curPlayer.GetSkillManager()
-        for i in range(0, skillManager.GetSkillCount()):
-            curSkill = skillManager.GetSkillByIndex(i)
-            if curSkill.GetRemainTime() != 0:
-                curSkill.SetRemainTime(0)
-                curSkill.Sync_Skill()
-        EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_Guard, 0, ChConfig.CME_Log_Start)
-        GameWorld.DebugLog("此副本刚进入时不直接开始,需等前端通知开始才开始!", playerID) # 掉线重上强制开始    
-        return
-
-    fbStep = gameFB.GetFBStep()
-    if fbStep < FB_Step_Prepare:
-        FBCommon.SetFBStep(FB_Step_Prepare, tick)
-        
-    if fbStep <= FB_Step_Prepare:
-        notify_tick = GetGuardTimeCfg()[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
-        
-    elif fbStep == FB_Step_Fighting:
-        notify_tick = GetGuardTimeCfg()[Def_FightTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-        curPlayer.Sync_TimeTick(IPY_GameWorld.tttTowerTake, 0, max(notify_tick, 0), True)
-    
-    DoFBHelp(curPlayer, tick)
-    return
-
-## 客户端发送开始副本
-def OnClientStartFB(curPlayer, tick):
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    if fbStep >= FB_Step_Prepare:
-        GameWorld.ErrLog("前端请求正式开始副本, 但副本已经开始了,不可重复开始!", curPlayer.GetPlayerID())
-        return
-    
-    GameWorld.DebugLog("前端场景秀已播放完毕,请求正式开始副本!", curPlayer.GetPlayerID())
-    FBCommon.SetFBStep(FB_Step_Prepare, tick)
-    notify_tick = GetGuardTimeCfg()[Def_PrepareTime] * 1000 - (tick - GameWorld.GetGameFB().GetFBStepTick())
-    curPlayer.Sync_TimeTick(IPY_GameWorld.tttWaitStart, 0, max(notify_tick, 0), True)
-    DoFBHelp(curPlayer, tick)
-    return
-
-##玩家退出副本
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 无意义
-def DoExitFB(curPlayer, tick):
-    step = GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_GameStep)
-    if step == Def_EndGuard:
-        itemID, giveExp = FBCommon.GetFBLineReward(GameWorld.GetMap().GetMapID(), 0)
-        if itemID:
-            ItemControler.GivePlayerItem(curPlayer, itemID, 1, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
-    
-    # 新手本玩家退出默认关闭副本
-    GameWorldProcess.CloseFB(tick)
-    return
-
-##玩家主动离开副本.
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-def DoPlayerLeaveFB(curPlayer, tick):
-    return
-
-## 获得副本帮助信息
-#  @param curPlayer 当前玩家(被通知对象)
-#  @param tick 当前时间
-#  @return None
-def DoFBHelp(curPlayer, tick):
-    gameFB = GameWorld.GetGameFB()
-    
-    step = gameFB.GetGameFBDictByKey(FBPlayerDict_GameStep)
-    helpDict = {FBCommon.Help_step:step, FBCommon.Help_npcTotal:gameFB.GetGameFBDictByKey(FBPlayerDict_NPCKillCnt)}
-    cageNPCID = IpyGameDataPY.GetFuncCfg('GuardFBCageNPCID')
-    helpDict[FBCommon.Help_npc] = FBCommon.GetJsonNPCKillList({cageNPCID:int(step>Def_BreakCage)})
-    helpDict["talkOver"] = int(step>Def_Dialog)
-    #副本帮助
-    GameWorld.DebugLog("DoFBHelp %s" % str(helpDict))
-    FBCommon.Notify_FBHelp(curPlayer, helpDict)
-    return
-
-
-##---副本总逻辑计时器---
-# @param tick:时间戳
-# @return 无意义
-# @remarks 副本总逻辑计时器
-def OnProcess(tick):
-    fbStep = GameWorld.GetGameFB().GetFBStep()
-    
-    # 副本准备
-    if fbStep == FB_Step_Prepare:
-        __DoLogic_FB_Prepare(tick)    
-    # 副本进行中
-    elif fbStep == FB_Step_Fighting:
-        __DoLogic_FB_Fighting(tick)
-    # 副本结束
-    elif fbStep == FB_Step_Over:
-        __DoLogic_FB_Over(tick)
-    
-    return
-
-## 副本准备逻辑
-#  @param tick:时间戳
-#  @return 无意义
-def __DoLogic_FB_Prepare(tick):
-    #gameFB = GameWorld.GetGameFB()
-    fbCfg = GetGuardTimeCfg()
-    # 间隔未到
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < fbCfg[Def_PrepareTime] * 1000:
-        return
-    FBCommon.OpenOrCloseDoorEx([IpyGameDataPY.GetFuncCfg('GuardFBCageNPCID', 2)], 1)
-    # 设置开始刷怪
-    mapID = GameWorld.GetMap().GetMapID()
-    gameFB = GameWorld.GetGameFB()
-    cageNPCID = IpyGameDataPY.GetFuncCfg('GuardFBCageNPCID')
-    refreshIDList = FBCommon.GetFBLineRefreshNPC(mapID)
-    needKillCnt = 0
-    for refreshID in refreshIDList:
-        npcCountList = NPCCustomRefresh.GetNPCRefreshCountList(refreshID)
-        if not npcCountList:
-            continue
-        for npcID, count in npcCountList:
-            if npcID == cageNPCID:
-                continue
-            needKillCnt += count
-    
-    gameFB.SetGameFBDict(FBPlayerDict_NPCNeedKillCnt, needKillCnt)
-    
-    for refreshID in refreshIDList:
-        NPCCustomRefresh.SetNPCRefreshByID(refreshID)
-    
-    SetMap_Guard_GameStep(Def_KillBandit)
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    if playerManager.GetPlayerCount() > 0:
-        curPlayer = playerManager.GetPlayerByIndex(0)
-        DoFBHelp(curPlayer, tick)
-    
-    FBCommon.SetFBStep(FB_Step_Fighting, tick)
-    
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttTowerTake, fbCfg[Def_FightTime] * 1000)
-    return
-
-
-## 副本进行中
-#  @param tick:时间戳
-#  @return 无意义
-def __DoLogic_FB_Fighting(tick):
-    fbCfg = GetGuardTimeCfg()
-    # 间隔未到
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < fbCfg[Def_FightTime] * 1000:
-        return
-    
-    __DoGuardOver(False)
-    return
-
-        
-##副本关闭中
-# @param tick:时间戳
-# @return 无意义
-# @remarks 副本关闭中
-def __DoLogic_FB_Over(tick):
-
-    #gameFB = GameWorld.GetGameFB()
-    fbCfg = GetGuardTimeCfg()
-    # 间隔未到
-    if tick - GameWorld.GetGameFB().GetFBStepTick() < fbCfg[Def_LeaveTime] * 1000:
-        return
-    
-    #副本关闭
-    GameWorldProcess.CloseFB(tick)
-    FBCommon.SetFBStep(FB_Step_Close, tick)
-    return
-
-## 获得经验
-#  @param curPlayer 当前玩家
-#  @param addExp 获得的经验
-#  @param expViewType 经验类型
-#  @return True or False
-def OnGetExp(curPlayer, addExp, expViewType):
-    
-    if expViewType != ShareDefine.Def_ViewExpType_KillNPC:
-        return
-    
-    playerID = curPlayer.GetID() 
-    gameFB = GameWorld.GetGameFB()
-    exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
-    expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
-    totalExp = expPoint * ChConfig.Def_PerPointValue + exp
-    updTotalExp = totalExp + addExp
-    updExp = updTotalExp % ChConfig.Def_PerPointValue
-    updExpPoint = updTotalExp / ChConfig.Def_PerPointValue
-    gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExp, updExp)
-    gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_TotalExpPoint, updExpPoint)
-    
-    
-    GameWorld.DebugLog("OnGetExp() totalExp=%s,addExp=%s,updTotalExp=%s" 
-                       % (totalExp, addExp, updTotalExp), playerID)
-    
-    return
-
-## 执行副本杀怪逻辑
-#  @param curPlayer 杀怪的人
-#  @param curNPC 被杀的怪
-#  @param tick 当前时间
-#  @return None
-def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
-    gameFB = GameWorld.GetGameFB()
-    fbStep = gameFB.GetFBStep()
-    if fbStep != FB_Step_Fighting:
-        return
-    cageNPCID = IpyGameDataPY.GetFuncCfg('GuardFBCageNPCID')
-    npcid = curNPC.GetNPCID()
-    if not npcid:
-        return
-    if npcid == cageNPCID:
-        #笼子打掉了触发任务可对话
-        EventShell.EventRespons_FBEvent(curPlayer, "guardfbtalk")
-        SetMap_Guard_GameStep(Def_Dialog)
-    else:
-        killCnt = gameFB.GetGameFBDictByKey(FBPlayerDict_NPCKillCnt)
-        gameFB.SetGameFBDict(FBPlayerDict_NPCKillCnt, killCnt+1)
-        if killCnt+1 >= gameFB.GetGameFBDictByKey(FBPlayerDict_NPCNeedKillCnt):
-            SetMap_Guard_GameStep(Def_BreakCage)
-       
-    DoFBHelp(curPlayer, tick)
-    return
-
-
-## 检查是否可攻击, 主判定不可攻击的情况,其他逻辑由外层决定
-#  @param attacker 攻击方
-#  @param defender 防守方
-#  @return bool
-def CheckCanAttackTagObjInFB(attacker, defender):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() != FB_Step_Fighting:
+    hasEnter = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, False, [mapID])
+    if hasEnter:
+        GameWorld.DebugLog("    已进入过副本%s" % lineID)
         return False
-
-    gameFB = GameWorld.GetGameFB()
-    cageNPCID = IpyGameDataPY.GetFuncCfg('GuardFBCageNPCID')
-    step = gameFB.GetGameFBDictByKey(FBPlayerDict_GameStep)
-    if step != Def_BreakCage:
-        defenderObjType = defender.GetGameObjType()
-        # 攻击笼子
-        if defenderObjType == IPY_GameWorld.gotNPC and defender.GetNPCID() == cageNPCID:
-            return False
-    
     return True
 
-## 任务专用,触发事件(副本内完成某任务)
-#  @param curPlayer:玩家实例
-#  @param isAchieve:是否完成任务
-#  @return None
-def DoFB_OnAchieveTask(curPlayer, isAchieve):
-    if GameWorld.GetGameFB().GetGameFBDictByKey(FBPlayerDict_GameStep) != Def_Dialog:
-        return
-    SetMap_Guard_GameStep(Def_EndGuard)
-    DoFBHelp(curPlayer, 0)
-    __DoGuardOver(True)
-    return
 
-## 是否副本复活
-#  @param None
-#  @return 是否副本复活
-def OnPlayerReborn():
-    return True
-
-##玩家死亡.
-# @param curPlayer:死亡的玩家 
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks 玩家主动离开副本.
-def DoPlayerDead(curPlayer):
-    __DoGuardOver(False)
-    return
-
-## 副本结束处理
-def __DoGuardOver(isPass):
-    gameFB = GameWorld.GetGameFB()
-    if gameFB.GetFBStep() == FB_Step_Over:
-        return
-    tick = GameWorld.GetGameWorld().GetTick()
-    curPlayer = None
-    playerManager = GameWorld.GetMapCopyPlayerManager()
-    if playerManager.GetPlayerCount() > 0:
-        curPlayer = playerManager.GetPlayerByIndex(0)
-        
-    if not curPlayer:
-        GameWorldProcess.CloseFB(tick)
-        return
-    
-    fbCfg = GetGuardTimeCfg()
-    gameFB = GameWorld.GetGameFB()
-    playerID = curPlayer.GetPlayerID()
-#    exp = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExp)
-#    expPoint = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_TotalExpPoint)
-#    totalExp = expPoint * ChConfig.Def_PerPointValue + exp
-    costTime = tick - GameWorld.GetGameFB().GetFBStepTick()
-    giveExp = 0
-    overDict = {FBCommon.Over_isPass:int(isPass), FBCommon.Over_costTime:costTime}
-    if isPass:
-        itemID, giveExp = FBCommon.GetFBLineReward(GameWorld.GetMap().GetMapID(), 0)
-        #物品改在退出副本时给
-        #ItemControler.GivePlayerItem(curPlayer, itemID, 1, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
-        if giveExp:
-            PlayerControl.PlayerControl(curPlayer).AddExp(giveExp)
-            overDict[FBCommon.Over_exp] = giveExp
-        if itemID:
-            overDict[FBCommon.Over_itemInfo] = FBCommon.GetJsonItemList([itemID])
-        
-        
-    # 通知结果
-    __SendOverInfo(curPlayer, overDict)
-    
-    # 进入离开阶段
-    FBCommon.SetFBStep(FB_Step_Over, tick)
-    FBCommon.Sync_Player_TimeTick(IPY_GameWorld.tttLeaveMap, fbCfg[Def_LeaveTime] * 1000)
-    
-    return
-
-## 发送挑战结果信息
-def __SendOverInfo(curPlayer, overDict):
-    overDict[FBCommon.Over_dataMapID] = FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID())
-    overDict[FBCommon.Over_lineID] = FBCommon.GetFBPropertyMark()
-    GameWorld.DebugLog("__SendOverInfo overDict=%s" % (str(overDict)), curPlayer.GetPlayerID())
-    FBCommon.Notify_FB_Over(curPlayer, overDict)
-    return
+def OnClientEndFB(curPlayer, mapID, lineID, dataList):
+    #客户端副本发送结束
+    itemID, giveExp = FBCommon.GetFBLineReward(mapID, 0)
+    #
+    overDict = {}
+    ItemControler.GivePlayerItem(curPlayer, itemID, 1, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
+    if giveExp:
+        PlayerControl.PlayerControl(curPlayer).AddExp(giveExp)
+        overDict[FBCommon.Over_exp] = giveExp
+    if itemID:
+        overDict[FBCommon.Over_itemInfo] = FBCommon.GetJsonItemList([itemID])
+    GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_Player_Dict_PlayerFBStar_MapId, lineID, 1, False, [mapID])
+    FBCommon.NotifyFBOver(curPlayer,mapID,lineID,1,overDict)
+    EventShell.EventRespons_FBEvent(curPlayer, "guardfbpass")
+    PlayerControl.SetCustomMap(curPlayer, 0, 0)
+    return
\ No newline at end of file

--
Gitblit v1.8.0