From d555ead90b4167b9c8cdda5ee2cadbbe69e9c505 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 23 五月 2019 20:21:06 +0800
Subject: [PATCH] 6805 【后端】【2.0】副本前端化(删除无用包)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py |  200 +++++++++-----------------------------------------
 1 files changed, 36 insertions(+), 164 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py
index b009ff5..be568a0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_HorsePetBoss.py
@@ -29,18 +29,11 @@
 import ItemControler
 import EventReport
 import NPCCommon
+import GameObj
+import EventShell
 
-FBDict_StartTick = 'FBDict_StartTick%s' #开始时间
-FBDict_Speed = 'FBDict_Speed%s' #掉血速度 /s
-FBDict_RemainHP = 'FBDict_RemainHP%s' #剩余时间
 FBPlayerDict_EncourageLV = 'FBPlayerDict_EncourageLV'   # 鼓舞等级
 FBDict_IsOver = 'FBDict_IsOver' #是否已结算, 结算时的tick
-FBDict_IsReduceing = 'FBDict_IsReduceing%s' #是否掉血中
-FBPlayerDict_Rank = "FBPlayerDict_Rank" # 玩家排名
-FBDict_BossTotalHP = 'FBDict_BossTotalHP%s' #BOSS血量
-FBDict_LastHurtTick = 'FBDict_LastHurtTick'  #上次伤害时间
-FBDict_LastHPNotify = 'FBDict_LastHPNotify'  #上一个血量广播
-
 
 (
 Def_BossTime,  #BOSS时间
@@ -56,11 +49,6 @@
 FB_Step_Close,  # 副本关闭
 ) = range(4)
     
-def OnFBPlayerOnLogin(curPlayer):
-    return
-
-def OnFBPlayerOnDay(curPlayer):
-    return
 
 
 ## 是否能够通过活动查询进入
@@ -105,8 +93,6 @@
     if not bossID:
         return
     NPCCustomRefresh.SetNPCRefresh(101, [bossID])
-    BossTime = FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_HorsePetBoss, lineID)[Def_BossTime]
-    GameWorld.GetGameWorld().SetGameWorldDict(FBDict_BossTotalHP%lineID, BossTime * 1000)
     return
 
 def OnHorsePetBossStateChange(state, tick):
@@ -146,12 +132,11 @@
         FBCommon.SetHadDelTicket(curPlayer)
         PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_HorsePetBoss, 1)
         EventReport.WriteEvent_FB(curPlayer, ChConfig.Def_FBMapID_HorsePetBoss, 0, ChConfig.CME_Log_Start)
-
+        EventShell.EventRespons_HorsePetBoss(curPlayer)
         if fbStep == FB_Step_Open:
             FBCommon.SetFBStep(FB_Step_Fighting, tick)
     UpdateHurtInfo(curPlayer, 0, True)
-    
-    UpdateHPReduceSpeed(tick)        
+   
     gameFB = GameWorld.GetGameFB()
     # 上鼓舞buff
     encourageLV = gameFB.GetPlayerGameFBDictByKey(playerID, FBPlayerDict_EncourageLV)
@@ -170,10 +155,7 @@
 def OnCloseFB(tick):
     gameWorld = GameWorld.GetGameWorld()
     lineID = gameWorld.GetPropertyID() - 1
-    gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, 0)
-    gameWorld.SetGameWorldDict(FBDict_Speed % lineID, 0)
-    gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, 0)
-    
+    PyGameData.g_horsePetBossPlayerHurtDict[lineID] = {}
     gameWorld.SetPropertyID(0)
     return
 
@@ -194,8 +176,6 @@
 #        GameWorldProcess.CloseFB(tick)
 #        return
         
-    UpdateHPReduceSpeed(tick, True)
-    
     return
 
 ##玩家主动离开副本.
@@ -209,8 +189,6 @@
     playerHurtDict = PyGameData.g_horsePetBossPlayerHurtDict.get(lineID, {})
     playerHurtDict.pop(curPlayer.GetPlayerID(), 0)
     PyGameData.g_horsePetBossPlayerHurtDict[lineID] = playerHurtDict
-    if not playerHurtDict: #榜上没人,停止掉血
-        StopReduceHP(lineID, tick)
     return
 
 ##玩家切换地图
@@ -251,18 +229,9 @@
             hurtDict["hurt"] = hurt % ChConfig.Def_PerPointValue
             hurtDict["hurtEx"] = hurt / ChConfig.Def_PerPointValue
             hurtInfo.append(hurtDict)
-
-    
-    curSpeed = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_Speed % lineID) 
-    isReduceing = GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_IsReduceing % lineID) 
-    remainHP = GetBossRemainHP(lineID, tick)
-    totalHP = __GetBossTotalHP(lineID)
-    hpReduceSpeed = curSpeed * 10000 / totalHP if totalHP else 0
-    remainHPPer = min(1000000, remainHP * 1000000 / totalHP) if totalHP else 0
-
-    fbHelpDict = {FBCommon.Help_lineID:lineID, "hurtInfo":hurtInfo, 'hpReduceSpeed':hpReduceSpeed, 
-                  'remainHPPer':remainHPPer, 'isReduceing':isReduceing,'myHurt':myHurt % ChConfig.Def_PerPointValue,
-                  'myHurtEx':myHurt / ChConfig.Def_PerPointValue, 'myRank':myRank
+    remainHPPer = GetBossRemainHPPer(GameWorld.GetGameWorld().GetCopyMapID(), lineID, tick)
+    fbHelpDict = {FBCommon.Help_lineID:lineID, "hurtInfo":hurtInfo, 'myHurt':myHurt % ChConfig.Def_PerPointValue,
+                  'myHurtEx':myHurt / ChConfig.Def_PerPointValue, 'myRank':myRank, 'remainHPPer':remainHPPer
                   }
     GameWorld.DebugLog("DoFBHelp: %s" % fbHelpDict, curPlayer.GetPlayerID())
     FBCommon.Notify_FBHelp(curPlayer, fbHelpDict)
@@ -289,10 +258,6 @@
 #  @return None
 def DoFB_Player_HurtNPC(curPlayer, curNPC, hurtHP):
     UpdateHurtInfo(curPlayer, hurtHP)
-    #有人上榜开始掉血
-    lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
-    StartReduceHP(lineID, GameWorld.GetGameWorld().GetTick())
-    GameWorld.GetGameFB().SetGameFBDict(FBDict_LastHurtTick, GameWorld.GetGameWorld().GetTick())
     return
 #
 def UpdateHurtInfo(curPlayer, hurtHP, isAdd=False):
@@ -333,17 +298,11 @@
             return
     
     elif fbStep == FB_Step_Fighting:
-        startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID)
-        if not startTick or overTick:
+        if overTick:
             return
-        lastHurtTick = gameFB.GetGameFBDictByKey(FBDict_LastHurtTick)
-        if lastHurtTick and tick - lastHurtTick >= 2000:
-            StopReduceHP(lineID, tick)
-            gameFB.SetGameFBDict(FBDict_LastHurtTick, 0)
-                
+        
         FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 5000)
-        __CheckBossHP(tick)
-    
+        
     return
 
 
@@ -368,8 +327,8 @@
     if not playerHurtList:
         GameWorld.Log(' __DoLogicHorsePetBossOver, 伤害榜上没有人!!lineID=%s'%lineID)
         return
-  
-    event = ["HorsePetBoss", False, {}]
+    bossID = CurFBLineBOSSID(lineID)
+    #event = ["HorsePetBoss", False, {}]
     batchPlayerIDList, batchAddItemList, batchParamList, batchDetailList = [], [], [], []
     playerManager = GameWorld.GetMapCopyPlayerManager()
     worldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_WorldAverageLv)
@@ -389,9 +348,8 @@
             if itemList:
                 overDict[FBCommon.Over_itemInfo] = FBCommon.GetJsonItemList(itemList)
             if giveItemList:
-                NPCCommon.DoVirtualItemDrop(player, giveItemList, dropPosX, dropPosY)
-                
-                ItemControler.GivePlayerItemOrMail(player, giveItemList, 'QCBOSS1', event)
+                NPCCommon.DoGiveItemByVirtualDrop(player, giveItemList, bossID, dropPosX, dropPosY, mailTypeKey='QCBOSS1')
+
             player.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, leaveTick, True)
             FBCommon.NotifyFBOver(player, ChConfig.Def_FBMapID_HorsePetBoss, lineID, isPass, overDict)
         elif giveItemList:
@@ -447,123 +405,37 @@
     return auctionItemList, itemList
 
 
+def DoFB_Npc_KillNPC(attacker, curNPC, tick):
+    __FBNPCOnKilled(curNPC, tick)
+    return
+def DoFB_Player_KillNPC(curPlayer, curNPC, tick):
+    __FBNPCOnKilled(curNPC, tick)
+    return
 
-def __CheckBossHP(tick):
-    gameFB = GameWorld.GetGameFB()
-    isOver = gameFB.GetGameFBDictByKey(FBDict_IsOver)
+## 执行副本杀怪逻辑
+def __FBNPCOnKilled(curNPC, tick):
     lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
-   
-    if not isOver:
-        bossID = CurFBLineBOSSID(lineID)
-        if GetBossRemainHP(lineID, tick) == 0:
-
-            
-            curBoss = GameWorld.FindNPCByNPCID(bossID)
-            dropPosX, dropPosY = 0, 0
-            if curBoss:
-                dropPosX, dropPosY = curBoss.GetPosX(), curBoss.GetPosY()
-            
-            #结束 设置BOSS死亡
-            FBCommon.ClearFBNPC()
-            FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0)
-            GameWorld.DebugLog('结束 设置BOSS死亡 lineID=%s' % lineID)
-            
-            __DoLogicHorsePetBossOver(1, tick, dropPosX, dropPosY)
-            gameFB.SetGameFBDict(FBDict_IsOver, tick)
-        else:
-            #血量广播
-            needNotifyHPPerList = [50, 20]
-            lastIndex = gameFB.GetGameFBDictByKey(FBDict_LastHPNotify)
-            if lastIndex >= len(needNotifyHPPerList):
-                return
-            remainPer = GetBossRemainHPPer(lineID, tick)
-            notifyHPPer = needNotifyHPPerList[lastIndex]
-            if remainPer == notifyHPPer or remainPer - 1 == notifyHPPer:
-                gameFB.SetGameFBDict(FBDict_LastHPNotify, lastIndex + 1)
-                lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
-                msgMark = 'QCBOSSHP1'
-                PlayerControl.WorldNotify(0, msgMark, [bossID, remainPer])
-    return
-
-def UpdateHPReduceSpeed(tick, isExit=False):
-    gameWorld = GameWorld.GetGameWorld()
-    playerCnt = gameWorld.GetMapCopyPlayerManager().GetPlayerCount()
-    playerCnt = playerCnt - 1 if isExit else playerCnt
-    if playerCnt <=0:
-        return
-    lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
-    if lineID < 0:
+    bossID = CurFBLineBOSSID(lineID)
+    if curNPC.GetNPCID() != bossID:
         return
 
-    curSpeed = eval(FBCommon.GetFBLineStepTime(ChConfig.Def_FBMapID_HorsePetBoss, lineID)[Def_HPSpeed])
-    gameWorld.SetGameWorldDict(FBDict_Speed % lineID, curSpeed)
-    if not gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing%lineID):
-        return
+    dropPosX, dropPosY = curNPC.GetPosX(), curNPC.GetPosY()
     
-    startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID)
-    remainHP = gameWorld.GetGameWorldDictByKey(FBDict_RemainHP % lineID)
-    lastSpeed = gameWorld.GetGameWorldDictByKey(FBDict_Speed % lineID)
-    if not startTick:
-        startTick = tick 
-        lastSpeed = curSpeed
-        remainHP = __GetBossTotalHP(lineID)
-    remainHP = max(0, int((remainHP - (tick - startTick) / 1000.0 * lastSpeed)))
-    gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, tick)
-    
-    gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, remainHP)
-    GameWorld.DebugLog('    curSpeed=%s, remainHP=%s, passTime=%s, lastSpeed=%s' % (curSpeed, remainHP, tick - startTick, lastSpeed))
+    #结束 设置BOSS死亡
     FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0)
-    return
-
-def StopReduceHP(lineID, tick):
-    ##暂停BOSS血量减少
-    gameWorld = GameWorld.GetGameWorld()
-    if not gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing%lineID):
-        return
-    remainHP = GetBossRemainHP(lineID, tick)
-    if not remainHP:
-        return
-    gameWorld.SetGameWorldDict(FBDict_IsReduceing % lineID, 0)
-    gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, remainHP)
-    return
-
-def StartReduceHP(lineID, tick):
-    ##开始BOSS掉血
-    gameWorld = GameWorld.GetGameWorld()
-    if gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing%lineID):
-        return
-    gameWorld.SetGameWorldDict(FBDict_IsReduceing % lineID, 1)
-    startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID)
-    if not startTick:
-        gameWorld.SetGameWorldDict(FBDict_RemainHP % lineID, __GetBossTotalHP(lineID))
-    gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, tick)
-    FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0)
-    return
-
-def __GetBossTotalHP(lineID):return GameWorld.GetGameWorld().GetGameWorldDictByKey(FBDict_BossTotalHP%lineID)
+    GameWorld.DebugLog('结束 设置BOSS死亡 lineID=%s' % lineID)
     
+    __DoLogicHorsePetBossOver(1, tick, dropPosX, dropPosY)
+    GameWorld.GetGameFB().SetGameFBDict(FBDict_IsOver, tick)
+    return
 
-def GetBossRemainHP(lineID, tick):
-    gameWorld = GameWorld.GetGameWorld()
-    
-    startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID)
-    lastSpeed = gameWorld.GetGameWorldDictByKey(FBDict_Speed % lineID) 
-    remainHP = gameWorld.GetGameWorldDictByKey(FBDict_RemainHP % lineID)
-    if not gameWorld.GetGameWorldDictByKey(FBDict_IsReduceing%lineID):
-        return remainHP
-    if not startTick:
-        startTick = tick
-        remainHP = __GetBossTotalHP(lineID)
-    else:
-        remainHP = max(0, int((remainHP - (tick - startTick) / 1000.0 * lastSpeed)))
-    return remainHP
 
-def GetBossRemainHPPer(lineID, tick):
-    remainHP = GetBossRemainHP(lineID, tick)
-    totalHP = __GetBossTotalHP(lineID)
-    if not totalHP:
+def GetBossRemainHPPer(copyMapID, funcLineID, tick):
+    bossID = CurFBLineBOSSID(funcLineID)
+    curBoss = GameWorld.FindNPCByNPCIDEx(copyMapID, bossID)
+    if not curBoss:
         return 100
-    return remainHP * 100 / totalHP
+    return GameObj.GetHP(curBoss) * 100 / GameObj.GetMaxHP(curBoss)
 
 def CurFBLineBOSSID(lineID= -1):
     #该分线刷的BOSSID

--
Gitblit v1.8.0