From b7bb8308d9b16d2802ccc3c259c871c2b6e58002 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 15 十一月 2022 19:16:05 +0800
Subject: [PATCH] 9748 【BT7】跨服BOSS定时活动(跨服妖魔boss;增加跨服日常活动时间控制;Boss刷新增加支持关联跨服日常活动;优化跨服boss复活剩余时间计算使用跨服时间;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
index cd6a3b0..f4fe1c0 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCustomRefresh.py
@@ -315,6 +315,16 @@
 def NPCRefresh_218(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
 def NPCRefresh_219(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
 def NPCRefresh_220(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_221(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_222(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_223(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_224(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_225(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_226(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_227(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_228(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_229(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
+def NPCRefresh_230(npcRefresh, tick):__DoRefreshWorldBoss(npcRefresh, tick)
 
 ## 世界boss刷怪
 #  @param npcRefresh 刷新实例
@@ -526,6 +536,7 @@
     lineID = GameWorld.GetGameWorld().GetLineID()
     realMapID = GameWorld.GetGameWorld().GetRealMapID()
     copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
+    relatedType, relatedID = 0, ""
     
     if mapID == ChConfig.Def_FBMapID_CrossDemonKing:
         bossID = GameLogic_CrossDemonKing.GetCurFBLineBOSSID()
@@ -539,7 +550,9 @@
         
         stoneNPCID = bossIpyData.GetStoneNPCID()
         bossID = bossIpyData.GetNPCID()
-
+        relatedType = bossIpyData.GetRelatedType()
+        relatedID = bossIpyData.GetRelatedID()
+        
         if mapID not in ChConfig.Def_CrossZoneMapTableName:
             return
         tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
@@ -554,8 +567,34 @@
         return
     
     gameFB = GameWorld.GetGameFB()
-    bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossRebornCross % (zoneID, bossID)
-    rebornBossState = GameWorld.GetGameWorld().GetGameWorldDictByKey(bosskey)
+    gameWorldMgr = GameWorld.GetGameWorld()
+    forceReborn = False # 强制重生
+    actBossRebornSign = 0
+    mapActBossRebornSign = 0
+    
+    # 关联日常活动
+    if relatedType == 1:
+        relatedID = int(relatedID)
+        actionKey = ShareDefine.Def_Notify_WorldKey_CrossDailyActionState % relatedID
+        rebornBossState = 1 if gameWorldMgr.GetGameWorldDictByKey(actionKey) else 0
+            
+    # 关联运营活动,待扩展
+    elif relatedType == 2:
+        pass
+    
+    else:
+        bosskey = ShareDefine.Def_Notify_WorldKey_GameWorldBossRebornCross % (zoneID, bossID)
+        rebornBossState = GameWorld.GetGameWorld().GetGameWorldDictByKey(bosskey)
+        
+    # 关联活动boss
+    if relatedType:
+        # 关联活动boss只要复活标记与上次不同,则强制重生
+        actBossRebornSign = gameWorldMgr.GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ActionBossRebornSign % relatedID)
+        mapActBossRebornSign = gameFB.GetGameFBDictByKey(ChConfig.Map_NPC_ActBossLastRebornSign % refreshMark)
+        rebornBossState = rebornBossState and actBossRebornSign
+        if rebornBossState and actBossRebornSign != mapActBossRebornSign:
+            forceReborn = True
+            
     curNPC = None
     if npcRefresh.GetCount() > 0:
         curNPC = npcRefresh.GetAt(0)
@@ -563,11 +602,16 @@
     # 复活状态
     if rebornBossState:
         if curNPC:
-            if curNPC.GetNPCID() == bossID:
+            if not forceReborn and curNPC.GetNPCID() == bossID:
                 return
             #去掉非bossNPC
             NPCCommon.SetDeadEx(curNPC)
             
+        if mapActBossRebornSign and actBossRebornSign == mapActBossRebornSign:
+            #GameWorld.DebugLog("活动线已经刷过不再刷活动boss: lineID=%s,refreshMark=%s,bossID=%s,actBossRebornSign=%s" 
+            #                   % (lineID, refreshMark, bossID, actBossRebornSign))
+            return
+        
     # 死亡状态
     else:
         if curNPC:
@@ -598,6 +642,9 @@
     __InitNewBornNPC(npcRefresh, tick)
     gameFB.SetGameFBDict(rebornTickKey, tick)
     
+    if actBossRebornSign and rebornBossState:
+        gameFB.SetGameFBDict(ChConfig.Map_NPC_ActBossLastRebornSign % refreshMark, actBossRebornSign)
+        
     GameWorld.DebugLog("CrossBossRefresh mapID=%s,realMapID=%s,copyMapID=%s,refreshMark=%s,rebornNPCID=%s,OK!" 
                        % (mapID, realMapID, copyMapID, refreshMark, rebornNPCID), lineID)
     return

--
Gitblit v1.8.0