From ccaefa2a93fb82d0db5fc7e74832a292fb860984 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期二, 22 一月 2019 14:23:20 +0800
Subject: [PATCH] 5919 【后端】【1.5.100】诛仙塔功能开发

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ZhuXianBoss.py |   63 ++++++++++++++++---------------
 1 files changed, 32 insertions(+), 31 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ZhuXianBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ZhuXianBoss.py
index 83eee3e..19c2e58 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ZhuXianBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_ZhuXianBoss.py
@@ -27,16 +27,10 @@
 import ItemCommon
 import ChPyNetSendPack
 import ShareDefine
-import EventShell
-import NPCCustomRefresh
 import PlayerSuccess
 import PlayerActivity
 import NetPackCommon
 import ItemControler
-import PlayerMagicWeapon
-import PlayerBossReborn
-import PlayerFairyCeremony
-import PlayerWeekParty
 import EventReport
 
 FBDict_StartTick = 'FBDict_StartTick%s' #开始时间
@@ -48,7 +42,7 @@
 FBPlayerDict_Rank = "FBPlayerDict_Rank" # 玩家排名
 FBDict_BossTotalHP = 'FBDict_BossTotalHP%s' #BOSS血量
 
-g_npcHurtDict = {}
+g_heroHurtDict = {} #{playerID:hurt}
 
 
 def OnFBPlayerOnLogin(curPlayer):
@@ -151,9 +145,9 @@
 #  @param tick
 #  @return None
 def DoEnterFB(curPlayer, tick):
+    global g_heroHurtDict
     playerID = curPlayer.GetPlayerID()
-    mapID = GameWorld.GetMap().GetMapID()
-   
+
     lineID = GameWorld.GetGameWorld().GetPropertyID() - 1    
     
     playerCnt = GameWorld.GetGameWorld().GetMapCopyPlayerManager().GetPlayerCount()
@@ -166,6 +160,7 @@
     if not hadDelTicket:
         FBCommon.SetHadDelTicket(curPlayer)
         PyGameData.g_fbPickUpItemDict.pop(playerID, 0)
+        g_heroHurtDict.pop(playerID, 0)
 #        if playerCnt == 1:
 #            posX, posY = IpyGameDataPY.GetFuncEvalCfg('ZhuXianBossFirstPos')
 #            GameWorld.ResetPlayerPos(curPlayer, posX, posY)
@@ -204,7 +199,6 @@
 # @param tick 时间戳
 # @return 无意义
 def DoExitFB(curPlayer, tick):
-    global g_npcHurtDict
     gameWorld = GameWorld.GetGameWorld()
     # 清除鼓舞buff
     FBCommon.ClearEncourageBuff(curPlayer, tick)
@@ -212,7 +206,6 @@
     if gameWorld.GetMapCopyPlayerManager().GetPlayerCount() == 1:
         lineID = gameWorld.GetPropertyID() - 1
         PyGameData.g_ZhuXianBossPlayerHurtDict[lineID] = {}
-        g_npcHurtDict[lineID] = {}
         gameWorld.SetGameWorldDict(FBDict_StartTick % lineID, 0)
         GameWorld.GetGameFB().ClearGameFBDict()
         GameWorldProcess.CloseFB(tick)
@@ -255,12 +248,13 @@
 #  @return None
 def DoFBHelp(curPlayer, tick):
     #伤害排行信息
+    if GameWorld.GetGameFB().GetGameFBDictByKey(FBDict_IsOver):
+        return
     hurtInfo = []
     lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
     playerHurtList = PyGameData.g_ZhuXianBossPlayerHurtDict.get(lineID, {}).items()
-    npcHurtList = g_npcHurtDict.get(lineID, {}).items()
-    
-    syncHurtList = (playerHurtList + npcHurtList)[:5]
+
+    syncHurtList = playerHurtList[:5]
     syncHurtList.sort(key=lambda asd:asd[1][1], reverse=True)
         
     for i, info in enumerate(syncHurtList, 1):
@@ -271,16 +265,16 @@
         hurtDict["hurt"] = hurt % ChConfig.Def_PerPointValue
         hurtDict["hurtEx"] = hurt / ChConfig.Def_PerPointValue
         hurtInfo.append(hurtDict)
-    myRank = __GetSelfHurtRank(curPlayer)
-    if myRank and myRank > 5:
-        hurtDict = {}
-        hurtDict["rank"] = myRank
-        info = playerHurtList[myRank - 1]
-        playerName, hurt = info[1][:2]
-        hurtDict["playerName"] = playerName
-        hurtDict["hurt"] = hurt % ChConfig.Def_PerPointValue
-        hurtDict["hurtEx"] = hurt / ChConfig.Def_PerPointValue
-        hurtInfo.append(hurtDict)
+#    myRank = __GetSelfHurtRank(curPlayer)
+#    if myRank and myRank > 5:
+#        hurtDict = {}
+#        hurtDict["rank"] = myRank
+#        info = playerHurtList[myRank - 1]
+#        playerName, hurt = info[1][:2]
+#        hurtDict["playerName"] = playerName
+#        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) 
@@ -288,7 +282,11 @@
     totalHP = __GetBossTotalHP(lineID)
     hpReduceSpeed = curSpeed * 10000 / totalHP if totalHP else 0
     remainHPPer = min(100, remainHP * 100 / totalHP) if totalHP else 0
-    fbHelpDict = {FBCommon.Help_lineID:lineID, "hurtInfo":hurtInfo, 'hpReduceSpeed':hpReduceSpeed, 'remainHPPer':remainHPPer, 'isReduceing':isReduceing}
+    myHurt = g_heroHurtDict.get(curPlayer.GetID(), 0)
+    fbHelpDict = {FBCommon.Help_lineID:lineID, "hurtInfo":hurtInfo, 'hpReduceSpeed':hpReduceSpeed, 
+                  'remainHPPer':remainHPPer, 'isReduceing':isReduceing,'myHurt':myHurt % ChConfig.Def_PerPointValue,
+                  'myHurtEx':myHurt / ChConfig.Def_PerPointValue
+                  }
     GameWorld.DebugLog("DoFBHelp: %s" % fbHelpDict, curPlayer.GetPlayerID())
     FBCommon.Notify_FBHelp(curPlayer, fbHelpDict)
     return
@@ -328,6 +326,10 @@
     return
 #
 def UpdateHurtInfo(curPlayer, hurtHP, isAdd=False):
+    global g_heroHurtDict
+    playerID = curPlayer.GetPlayerID()
+    g_heroHurtDict[playerID] = g_heroHurtDict.get(playerID, 0) + hurtHP
+    
     enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % ChConfig.Def_FBMapID_ZhuXianBoss)
     if enterCnt >= FBCommon.GetEnterFBMaxCnt(curPlayer, ChConfig.Def_FBMapID_ZhuXianBoss):
         #没归属的不进伤害榜
@@ -335,7 +337,7 @@
     lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
     
     playerName = curPlayer.GetName() 
-    playerID = curPlayer.GetPlayerID()
+    
     familyID = curPlayer.GetFamilyID()
     playerHurtDict = PyGameData.g_ZhuXianBossPlayerHurtDict.get(lineID, {})
     if playerID not in playerHurtDict:
@@ -361,14 +363,13 @@
         GameWorld.Log("强制踢出玩家关闭副本: overTick=%s,tick=%s" % (overTick, tick))
         FBCommon.DoLogic_FBKickAllPlayer()
         return
-    mapID = GameWorld.GetMap().GetMapID()
-   
+
     lineID = GameWorld.GetGameWorld().GetPropertyID() - 1
     if lineID <0:
         return
     gameWorld = GameWorld.GetGameWorld()
     startTick = gameWorld.GetGameWorldDictByKey(FBDict_StartTick % lineID)
-    if not startTick:
+    if not startTick or overTick:
         return
     FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 5000)
     __CheckBossHP(tick)
@@ -405,7 +406,7 @@
     playerManager = GameWorld.GetMapCopyPlayerManager()#GameWorld.GetPlayerManager()
     firstPlayer = playerManager.FindPlayerByID(firstPlayerID)
     if firstPlayer:
-        #gameFB.SetPlayerGameFBDict(playerID, FBPlayerDict_Rank, rank)
+        gameFB.SetPlayerGameFBDict(firstPlayerID, FBPlayerDict_Rank, 1)
         if not dropPosX or not dropPosY:
             dropPosX, dropPosY = firstPlayer.GetPosX(), firstPlayer.GetPosY()
         prizeItemList = GiveZhuXianBossAward(firstPlayer, lineID, dropItemMapInfo=[dropPosX, dropPosY, True])
@@ -548,7 +549,7 @@
             dropPosX, dropPosY = curBoss.GetPosX(), curBoss.GetPosY()
         
         #结束 设置BOSS死亡
-
+        FBCommon.ClearFBNPC()
         FBCommon.NotifyCopyMapPlayerFBHelp(tick, DoFBHelp, 0)
         GameWorld.DebugLog('结束 设置BOSS死亡 lineID=%s' % lineID)
         playerHurtList = __GetSortHurtList(lineID)

--
Gitblit v1.8.0