From 8978dd1c93b322806bac51090d40e65cee33d90d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 09 一月 2019 15:26:09 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(支持刷跨服boss)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py |   57 +++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 43 insertions(+), 14 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
index c1fae3c..a9dd91e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -45,6 +45,7 @@
 import PyGameData
 import PlayerGeTui
 import IPY_GameServer
+import CrossBoss
 
 import time
 
@@ -101,12 +102,13 @@
     if bossID <= 0:
         return
     
-    # 设置不存活,击杀玩家名
-    killPlayerName = msgList[1]
-    hurtValue = msgList[2]
-    isAddKillCnt = msgList[3]
-    isNotify = msgList[4] if len(msgList) > 4 else True
-    mapID = msgList[5] if len(msgList) > 5 else None
+    bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID = msgList
+    if GameWorld.IsCrossServer():
+        CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID)
+        return
+    
+    mapID = dataMapID
+    isAddKillCnt = False
     
     isMapNeedShunt = IsMapNeedBossShunt(mapID)
     isAlive = __GetIsAlive(bossID)
@@ -157,10 +159,12 @@
     if len(msgList) <= 0:
         return
 
-    bossID = msgList[0]
-    isAlive = msgList[1]
-    mapID = msgList[2] if len(msgList) > 2 else None
-    lineID = msgList[3] if len(msgList) > 3 else None
+    bossID, isAlive, dataMapID, realMapID, copyMapID = msgList
+    if GameWorld.IsCrossServer():
+        CrossBoss.DoCrossBossStateChange(bossID, isAlive, dataMapID, realMapID, copyMapID)
+        return
+    
+    mapID, lineID = dataMapID, copyMapID
     GameWorld.Log("世界boss状态变更: mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%s" % (mapID, lineID, bossID, isAlive, tick))
     
     if bossID <= 0:
@@ -212,7 +216,7 @@
     recTypeListData = __GetBossPrizeRecData()
     # 查找是否已有记录
     bossRec = None
-    for index in range(recTypeListData.Count()):
+    for index in xrange(recTypeListData.Count()):
         universalRecData = recTypeListData.At(index)
         if universalRecData.GetValue1() == bossID:
             bossRec = universalRecData
@@ -332,12 +336,18 @@
     recTypeListData = __GetBossPrizeRecData()
     bossInfo.BossInfoList = []
     #GameWorld.DebugLog("Sync_BossInfo...count=%s,curTime=%s" % (recTypeListData.Count(), curTime))
-    for index in range(recTypeListData.Count()):
+    for index in xrange(recTypeListData.Count()):
         universalRecData = recTypeListData.At(index)
         bossID = universalRecData.GetValue1()
         if not bossID:
             continue
         if syncBOSSIDList and bossID not in syncBOSSIDList:
+            continue
+        ipyData = IpyGameDataPY.GetIpyGameData('BOSSInfo', bossID)
+        if not ipyData:
+            continue
+        mapID = ipyData.GetMapID()
+        if mapID in ChConfig.Def_CrossMapIDList:
             continue
         bossInfoObj = ChPyNetSendPack.tagBossInfoObj()
         bossInfoObj.BossID = bossID
@@ -359,7 +369,7 @@
     if not curPlayer:
         # 全服广播在线玩家
         playerManager = GameWorld.GetPlayerManager()
-        for i in range(0, playerManager.GetActivePlayerCount()):
+        for i in xrange(playerManager.GetActivePlayerCount()):
             curPlayer = playerManager.GetActivePlayerAt(i)
             if curPlayer == None or not curPlayer.GetInitOK():
                 continue
@@ -379,6 +389,9 @@
     if not GameWorld.SetWorldDictKey(ChConfig.TYPE_WorldBossProcessTick, tick):
         #间隔未到 
         return
+    if GameWorld.IsCrossServer():
+        CrossBoss.DoCheckCrossBossReborn(tick)
+        return
     curTime = int(time.time())
     DoCheckWorldBossShuntInfo(curTime, tick)
     BossRebornWorldNotify(curTime)
@@ -386,6 +399,9 @@
         for i in xrange(IpyGameDataPY.IPY_Data().GetBOSSInfoCount()):
             ipyData = IpyGameDataPY.IPY_Data().GetBOSSInfoByIndex(i)
             bossID = ipyData.GetNPCID()
+            mapID = ipyData.GetMapID()
+            if mapID in ChConfig.Def_CrossMapIDList:
+                continue
             bossPrizeRec = __GetBossRecDataByID(bossID)
             killedTime = bossPrizeRec.GetValue2()
             refreshTime = __GetBossRefreshTime(bossID)
@@ -426,7 +442,8 @@
     if not GameWorld.SetWorldDictKey(ChConfig.TYPE_WorldBossGeTuiTick, tick):
         #间隔未到 
         return
-    
+    if GameWorld.IsCrossServer():
+        return
     curTime = int(time.time())
     for bossInfo in PyGameData.g_sortBOSSRefreshList:
         bossID, killedTime, refreshTime = bossInfo
@@ -459,6 +476,9 @@
     for i in xrange(IpyGameDataPY.IPY_Data().GetBOSSInfoCount()):
         ipyData = IpyGameDataPY.IPY_Data().GetBOSSInfoByIndex(i)
         bossID = ipyData.GetNPCID()
+        mapID = ipyData.GetMapID()
+        if mapID in ChConfig.Def_CrossMapIDList:
+            continue
         isAlive = __GetIsAlive(bossID)
         if not isAlive:
             continue
@@ -471,6 +491,7 @@
 #  @param curPlayer
 #  @return None
 def OnPlayerLogin(curPlayer):
+    CrossBoss.OnPlayerLogin(curPlayer)
     Sync_BossInfo(curPlayer)
     PyDataManager.GetBossAttentionManager().NotifyBossAttentionInfo(curPlayer)
     if IsMapNeedBossShunt(0):
@@ -487,6 +508,9 @@
 #  @param None
 #  @return None
 def OnMapServerInitOK():
+    if GameWorld.IsCrossServer():
+        CrossBoss.OnCrossMapServerInitOK()
+        return
     SendMapServerBossKilledCnt()
     __SendMapServerAliveBoss()
     if IsMapNeedBossShunt(0):
@@ -555,11 +579,16 @@
     if not GameWorld.SetWorldDictKey(ChConfig.TYPE_WorldBossOnlineCntTick, tick):
         #间隔未到 
         return
+    if GameWorld.IsCrossServer():
+        return
     GameWorld.DebugLog('世界boss在线人数统计')
     bossRebornDict = {}
     for i in xrange(IpyGameDataPY.IPY_Data().GetBOSSInfoCount()):
         ipyData = IpyGameDataPY.IPY_Data().GetBOSSInfoByIndex(i)
         bossID = ipyData.GetNPCID()
+        mapID = ipyData.GetMapID()
+        if mapID in ChConfig.Def_CrossMapIDList:
+            continue
         refreshTimeStr = ipyData.GetRefreshTime()
         if 'onlineCnt' in refreshTimeStr:
             bossRebornDict[bossID] = ipyData.GetLVLimit()

--
Gitblit v1.8.0