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