From c2acfe7cf4641bc560a8454a985af16cf349f3ad Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 25 六月 2021 17:42:38 +0800
Subject: [PATCH] 5090 【主干】【BT2】【BT3】【bt2_1.100.1】【gt_1.100.7】循环活动优化-日期活动结束后周循环开启异常(修复活动日期时间头尾衔接导致的活动开启异常问题)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py |   57 ++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 44 insertions(+), 13 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
index fa0def1..bfea990 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/GameWorldProcess.py
@@ -44,6 +44,7 @@
 import EventShell
 import FBLogic
 import FBCommon
+import ShareDefine
 import EventReport
 import ItemCommon
 import PyGameData
@@ -76,9 +77,7 @@
     #调用副本开启触发器
     FBLogic.OnOpenFB(tick)
     
-    if gameWorld.GetMapID() in ChConfig.Def_CrossDynamicLineMap:
-        msgInfo = str([gameWorld.GetRealMapID(), gameWorld.GetCopyMapID()])
-        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "DynamicLineMapOpen", msgInfo, len(msgInfo))
+    GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosOpen)
     return
 
 ## 副本关闭
@@ -97,8 +96,9 @@
     gameFBMgr = gameWorld.GetGameFB() 
     gameFBMgr.SetPlayerLogoffTick(0)
     gameFBMgr.SetIsSafeClose(0)
-
+    
     lineID = gameWorld.GetLineID()
+    copyMapID = gameWorld.GetCopyMapID()
     GameWorld.Log("FB Close! lineID = %s, openState = %s"%(lineID, gameWorld.GetOpenState()))
     
     gameWorld.SetOpenState(IPY_GameWorld.fbosClosed)
@@ -155,9 +155,15 @@
         
     #发送未拾取的物品给玩家
     if mapID in ChConfig.Def_SendUnPickItemMailMapIDList and unPickItemDict:
+        isCrossServer = GameWorld.IsCrossServer()
+        playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo.get(copyMapID, {})
         for ownerID, mailItemList in unPickItemDict.items():
             GameWorld.Log("发送未拾取的物品给玩家: %s" % mailItemList, ownerID)
-            PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
+            if isCrossServer:
+                serverGroupID = playerServerGroupIDDict.get(ownerID, 0)
+                PlayerControl.SendCrossMail(serverGroupID, "ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
+            else:
+                PlayerControl.SendMailByKey("ItemNoPickUp", [ownerID], mailItemList, [gameWorld.GetMapID()])
         
     playerManager = gameWorld.GetMapCopyPlayerManager()
     
@@ -171,12 +177,26 @@
     #根据是否收缩型FB处理
     FreeOrClearFBByAutoSize(gameWorld)
     
-    if gameWorld.GetMapID() in ChConfig.Def_CrossDynamicLineMap:
-        realMapID, copyMapID = gameWorld.GetRealMapID(), gameWorld.GetCopyMapID()
-        key = (mapID, copyMapID)
-        funcLineDataCache = PyGameData.g_crossFuncLineDataCache.pop(key, None)
-        msgInfo = str([realMapID, copyMapID, funcLineDataCache])
-        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "DynamicLineMapClose", msgInfo, len(msgInfo))
+    GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosClosed)
+        
+    gameWorld.SetPropertyID(0)
+    PyGameData.g_crossPlayerServerGroupIDInfo.pop(copyMapID, None)
+    return
+
+def GameServer_DynamicLineMapStateChange(gameWorld, state):
+    if gameWorld.GetMapID() not in ChConfig.Def_CrossDynamicLineMap:
+        return
+    
+    realMapID, copyMapID = gameWorld.GetRealMapID(), gameWorld.GetCopyMapID()
+    if state == IPY_GameWorld.fbosWaitForClose:
+        crossFuncLineDataCache = FBLogic.OnGetCrossFuncLineDataCache()
+        msgInfo = [realMapID, copyMapID, state, crossFuncLineDataCache]
+    else:
+        msgInfo = [realMapID, copyMapID, state]
+        
+    msgInfo = str(msgInfo)
+    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "DynamicLineMapStateChange", msgInfo, len(msgInfo))
+    GameWorld.Log("DynamicLineMapStateChange realMapID=%s, copyMapID=%s, PropertyID=%s, state=%s" % (realMapID, copyMapID, gameWorld.GetPropertyID(), state))
     return
 
 ##根据表中的收缩类型释放或者清空副本状态
@@ -258,6 +278,7 @@
     
     ##踢人
     __KickAllPlayerAndCloseFB(gameWorld, tick)
+    GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosClosed)
     return
 
 ## 副本踢出玩家逻辑
@@ -612,6 +633,9 @@
 #  @remarks 函数详细说明.
 def CloseFB(tick):
     GameWorld.GetGameWorld().SetCloseFBTick(tick)
+    
+    gameWorld = GameWorld.GetGameWorld()
+    GameServer_DynamicLineMapStateChange(gameWorld, IPY_GameWorld.fbosWaitForClose)
     return
 
 ## 玩家离开地图时,尝试关闭副本
@@ -637,8 +661,15 @@
 
 def IsNoPlayerNeedCloseFB():
     ## 副本中无玩家是否需要自动关闭的副本
-    return GameWorld.GetMap().GetAutoSize() and GameWorld.GetMap().GetMapID() not in ChConfig.Def_NoPlayerNotCloseAutoSizeMap
-
+    if GameWorld.GetMap().GetAutoSize():
+        if GameWorld.GetMap().GetMapID() in ChConfig.Def_NoPlayerNotCloseAutoSizeMap:
+            return False
+        return True
+    else:
+        if GameWorld.GetMap().GetMapID() in ChConfig.Def_NoPlayerCloseNotAutoSizeMap:
+            return True
+        return False
+    
 #//08 06 根据国家统计的玩家数目#tagMPlayerCountByCountry
 #tagMPlayerCountByCountry       *   GettagMPlayerCountByCountry();
 #

--
Gitblit v1.8.0