From b671f79bdfedf80c773b5bd6bdd6181e17032bf5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 08 七月 2024 14:04:24 +0800
Subject: [PATCH] 5537 【越南】分区热更新优化需求(增加跨服分区表古神战场,古神去除与跨服PK分区关联;)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py |  121 +++++++++++++--------------------------
 1 files changed, 41 insertions(+), 80 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py
index 262c804..375371e 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py
@@ -17,7 +17,6 @@
 
 import datetime
 import PyGameData
-import CrossRealmPK
 import CrossRealmMsg
 import PlayerControl
 import PyDataManager
@@ -165,9 +164,26 @@
 def GetHMNum(openHour, openMinute): return openHour * 100 + openMinute
 def GetHMByNum(hmNum): return hmNum / 100, hmNum % 100
 
+def GetCrossBattlefieldZoneIpyDataList(serverGroupID=0):
+    ## 获取所有分区配置列表
+    ipyDataList = CrossRealmPlayer.GetCrossZoneIpyDataListByServerGroupID(ChConfig.Def_FBMapID_CrossBattlefield, serverGroupID)
+    if not ipyDataList:
+        return []
+    return ipyDataList
+
+def GetCrossBattlefieldZoneIpyData(serverGroupID):
+    ## 获取服务器所属分区配置
+    return CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(ChConfig.Def_FBMapID_CrossBattlefield, serverGroupID)
+
+def GetCrossBattlefieldZoneID(serverGroupID):
+    ## 获取服务器所属分区ID
+    zoneIpyData = GetCrossBattlefieldZoneIpyData(serverGroupID)
+    if not zoneIpyData:
+        return 0
+    return zoneIpyData.GetZoneID()
+
 def OnPlayerLogin(curPlayer):
-    serverGroupID = GameWorld.GetServerGroupID()
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
+    zoneIpyData = GetCrossBattlefieldZoneIpyData(GameWorld.GetServerGroupID())
     if not zoneIpyData:
         return
     zoneID = zoneIpyData.GetZoneID()
@@ -267,15 +283,7 @@
     '''
     
     GameWorld.Log("同步给子服跨服战场数据: syncServerGroupID=%s" % (serverGroupID))
-    if serverGroupID:
-        ipyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
-        if not ipyData:
-            return
-        crossZoneList = [ipyData]
-    else:
-        crossZoneName = GameWorld.GetCrossZoneName()
-        crossZoneList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZonePK", {"CrossZoneName":crossZoneName}, True)
-        
+    crossZoneList = GetCrossBattlefieldZoneIpyDataList(serverGroupID)
     if not crossZoneList:
         return
     
@@ -427,23 +435,14 @@
         PyGameData.g_crossDynamicLineInfo.pop(ChConfig.Def_FBMapID_CrossBattlefield, None)
         
         PyGameData.g_overPlayerIDList = []
-        
-        crossZoneName = GameWorld.GetCrossZoneName()
-        crossZoneList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZonePK", {"CrossZoneName":crossZoneName}, True)
-        if not crossZoneList:
-            crossZoneList = []
             
         hmNum = battlefieldState
         openHour, openMinute = GetHMByNum(hmNum)
         sysOpenHMList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldOpen", 1)
-        
+                
+        crossZoneList = GetCrossBattlefieldZoneIpyDataList()
         for zoneIpyData in crossZoneList:
             zoneID = zoneIpyData.GetZoneID()
-            
-            seasonState = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_CrossPKZoneSeasonState % zoneID)
-            if seasonState != 1:
-                GameWorld.Log("    跨服PK赛季未开启中,跨服战场不开启! zoneID=%s" % zoneID)
-                continue
             
             # 系统局确保每个等级段都有一场
             if [openHour, openMinute] in sysOpenHMList:
@@ -471,26 +470,18 @@
 
 def __DoBattlefieldOpenNotify(openHour, openMinute, notifyOpenMinute):
     ''' 执行跨服战场开启广播
-                    跨服PK赛季未开启状态下,跨服战场同步关闭,故也不广播
                     还要限制开服天开启
     '''
     
-    gameWorld = GameWorld.GetGameWorld()
     sysOpenHMList = IpyGameDataPY.GetFuncEvalCfg("CrossBattlefieldOpen", 1)
     if [openHour, openMinute] in sysOpenHMList:
         
-        crossZoneName = GameWorld.GetCrossZoneName()
-        crossZoneList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZonePK", {"CrossZoneName":crossZoneName}, True)
+        crossZoneList = GetCrossBattlefieldZoneIpyDataList()
         if not crossZoneList:
             return
         
         for zoneIpyData in crossZoneList:
             zoneID = zoneIpyData.GetZoneID()
-            
-            seasonState = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_CrossPKZoneSeasonState % zoneID)
-            if seasonState != 1:
-                GameWorld.DebugLog("跨服PK赛季未开启中,跨服战场系统开启广播不处理!")
-                continue
             
             serverGroupIDList = zoneIpyData.GetServerGroupIDList()
             PlayerControl.WorldNotifyCross(serverGroupIDList, 0, "CrossBattlefieldOpenSys", [notifyOpenMinute])
@@ -500,11 +491,6 @@
     curHMNum = GetHMNum(openHour, openMinute)
     
     for zoneID, buyHMInfo in PyGameData.g_crossBattlefieldBuyInfo.items():
-        
-        seasonState = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_CrossPKZoneSeasonState % zoneID)
-        if seasonState != 1:
-            GameWorld.DebugLog("跨服PK赛季未开启中,跨服战场玩家开启广播不处理!")
-            continue
         
         zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByZoneID(ChConfig.Def_FBMapID_CrossBattlefield, zoneID)
         if not zoneIpyData:
@@ -523,17 +509,10 @@
     #  @return: None-当前未开放;
     #  @return: isCallBattle, openHour, openMinute  -  当前开放中的时间时分,可进入
     
-    gameWorld = GameWorld.GetGameWorld()
     hmNum = GetCrossBattlefieldState()
     if not hmNum:
         GameWorld.Log("当前时间战场未开启!", playerID)
         PlayerControl.NotifyCodeCross(serverGroupID, playerID, "FBIsNotOpen")
-        return
-    
-    seasonState = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_CrossPKZoneSeasonState % zoneID)
-    if seasonState != 1:
-        GameWorld.Log("赛季未开启!", playerID)
-        PlayerControl.NotifyCodeCross(serverGroupID, playerID, "NotifySeasonOver")
         return
     
     if playerID in PyGameData.g_overPlayerIDList:
@@ -643,16 +622,10 @@
     if not GameWorld.IsCrossServer():
         return
     
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
+    zoneIpyData = GetCrossBattlefieldZoneIpyData(serverGroupID)
     if not zoneIpyData:
         return
     zoneID = zoneIpyData.GetZoneID()
-    
-    gameWorld = GameWorld.GetGameWorld()
-    seasonState = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_CrossPKZoneSeasonState % zoneID)
-    if seasonState != 1:
-        GameWorld.Log("跨服PK赛季未开启中,跨服战场也不能开启,无法购买!")
-        return
     
     playerID = msgData["playerID"] # 角色ID
     playerName = msgData["playerName"] # 玩家名
@@ -756,7 +729,7 @@
     tagPlayerID = msgData["tagPlayerID"]
     playerID = msgData["playerID"]
     
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
+    zoneIpyData = GetCrossBattlefieldZoneIpyData(serverGroupID)
     if not zoneIpyData:
         return
     zoneID = zoneIpyData.GetZoneID()
@@ -805,7 +778,7 @@
     tagPlayerID = msgData["tagPlayerID"]
     playerID = msgData["playerID"]
     
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
+    zoneIpyData = GetCrossBattlefieldZoneIpyData(serverGroupID)
     if not zoneIpyData:
         return
     zoneID = zoneIpyData.GetZoneID()
@@ -840,7 +813,7 @@
     serverOnly = msgData["serverOnly"]
     playerID = msgData["playerID"]
     
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
+    zoneIpyData = GetCrossBattlefieldZoneIpyData(serverGroupID)
     if not zoneIpyData:
         return
     zoneID = zoneIpyData.GetZoneID()
@@ -942,8 +915,7 @@
         for superItemPlayerID in superItemPlayerIDList:
             PlayerCompensation.SendMailByKey("CrossBattlefieldSuperAward", [superItemPlayerID], [superItemInfo], crossMail=True)
         
-    crossZoneName = GameWorld.GetCrossZoneName()
-    zoneIpyData = IpyGameDataPY.GetIpyGameData("CrossZonePK", crossZoneName, zoneID)
+    zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByZoneID(ChConfig.Def_FBMapID_CrossBattlefield, zoneID)
     serverGroupIDList = zoneIpyData.GetServerGroupIDList() if zoneIpyData else []
     
     # 通知子服更新参与玩家数据
@@ -975,18 +947,13 @@
     
     gameWorld = GameWorld.GetGameWorld()
     
-    seasonState = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKSeasonState)
     beforeState = GetCrossBattlefieldState()
-    beforeState = beforeState if (beforeState and seasonState == 1) else 0
     
-    realBattlefieldState = battlefieldState if (battlefieldState and seasonState == 1) else 0
-    
-    GameWorld.DebugLog("收到跨服服务器同步的战场状态: battlefieldState=%s,seasonState=%s,beforeState=%s,realBattlefieldState=%s" 
-                       % (battlefieldState, seasonState, beforeState, realBattlefieldState))
+    GameWorld.DebugLog("收到跨服服务器同步的战场状态: battlefieldState=%s,beforeState=%s" % (battlefieldState, beforeState))
     
     key = ShareDefine.Def_Notify_WorldKey_DailyActionState % ShareDefine.DailyActionID_CrossBattlefield
-    gameWorld.SetDict(key, realBattlefieldState)
-    GameWorld.SendMapServerMsgEx(key, realBattlefieldState)
+    gameWorld.SetDict(key, battlefieldState)
+    GameWorld.SendMapServerMsgEx(key, battlefieldState)
     return
 
 def CrossServerMsg_BattlefieldOver(msgData):
@@ -996,10 +963,9 @@
     overTime = msgData["overTime"]
     syncPlayerDataInfo = msgData["syncPlayerDataInfo"]
     
-    gameWorld = GameWorld.GetGameWorld()
-    pkZoneID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-    if zoneID != pkZoneID:
-        GameWorld.ErrLog("非本服所属分区的跨服战场购买信息! pkZoneID(%s) != zoneID(%s) %s" % (pkZoneID, zoneID, str(msgData)))
+    curZoneID = GetCrossBattlefieldZoneID(GameWorld.GetServerGroupID())
+    if zoneID != curZoneID:
+        GameWorld.ErrLog("非本服所属分区的跨服战场购买信息! curZoneID(%s) != zoneID(%s) %s" % (curZoneID, zoneID, str(msgData)))
         return
     
     for playerID, playerData in syncPlayerDataInfo.items():
@@ -1016,10 +982,9 @@
     syncBuyHMInfo = msgData["syncBuyHMInfo"]
     opData = msgData.get("opData", {})
     
-    gameWorld = GameWorld.GetGameWorld()
-    pkZoneID = gameWorld.GetDictByKey(ShareDefine.Def_Notify_WorldKey_CrossPKZoneID)
-    if zoneID != pkZoneID:
-        GameWorld.ErrLog("非本服所属分区的跨服战场购买信息! pkZoneID(%s) != zoneID(%s) %s" % (pkZoneID, zoneID, str(msgData)))
+    curZoneID = GetCrossBattlefieldZoneID(GameWorld.GetServerGroupID())
+    if zoneID != curZoneID:
+        GameWorld.ErrLog("非本服所属分区的跨服战场购买信息! curZoneID(%s) != zoneID(%s) %s" % (curZoneID, zoneID, str(msgData)))
         return
     
     if not syncBuyHMInfo:
@@ -1155,11 +1120,9 @@
                       % (openHour, openMinute, crossServerDateTime, endBuyDateTime), playerID)
         return
     
-    serverGroupID = GameWorld.GetServerGroupID()
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
-    if not zoneIpyData:
+    zoneID = GetCrossBattlefieldZoneID(GameWorld.GetServerGroupID())
+    if not zoneID:
         return
-    zoneID = zoneIpyData.GetZoneID()
     
     hmNum = GetHMNum(openHour, openMinute)
     buyPlayerInfo = GetBuyPlayerInfo(zoneID, hmNum)
@@ -1219,11 +1182,9 @@
                       % (openHour, openMinute, crossServerDateTime, endBuyDateTime), playerID)
         return
     
-    serverGroupID = GameWorld.GetServerGroupID()
-    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
-    if not zoneIpyData:
+    zoneID = GetCrossBattlefieldZoneID(GameWorld.GetServerGroupID())
+    if not zoneID:
         return
-    zoneID = zoneIpyData.GetZoneID()
     
     hmNum = GetHMNum(openHour, openMinute)
     buyPlayerInfo = GetBuyPlayerInfo(zoneID, hmNum)

--
Gitblit v1.8.0