From 545986a8fdde345b28cf3004be84c6cfe79a3dc1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 19 四月 2019 11:29:12 +0800
Subject: [PATCH] 6459 【后端】【2.0】缥缈仙域开发单(跨服分区逻辑优化,支持跨服妖王分区状态同步)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py | 6
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py | 121 +++++++++++++----------
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py | 6
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 22 ++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py | 14 +-
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py | 32 ++++-
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py | 2
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py | 35 ++----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 7 +
10 files changed, 137 insertions(+), 111 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index ed5051f..24d8716 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -693,7 +693,8 @@
#跨服地图
Def_CrossMapIDList = [Def_FBMapID_CrossRealmPK, Def_FBMapID_CrossPenglai, Def_FBMapID_CrossDemonKing, Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian]
#跨服分区类型配置, 没配置的默认 CrossZoneComm
-Def_CrossZoneTypeName = {Def_FBMapID_CrossPenglai:"CrossZoneComm",
+Def_CrossZoneTypeName = {0:"CrossZoneComm", # 特殊0,默认常规分区
+ Def_FBMapID_CrossPenglai:"CrossZoneComm",
Def_FBMapID_CrossDemonKing:"CrossZonePK",
Def_FBMapID_CrossGrasslandLing:"CrossZonePK",
Def_FBMapID_CrossGrasslandXian:"CrossZonePK",
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
index 390ae32..e7b0983 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
@@ -52,21 +52,21 @@
g_bossRecDataDict = {} # boss对应rec记录缓存 {(zoneID, bossID):recData, ...}
-def GetCrossBossZoneID(realMapID, dataMapID, copyMapID):
+def GetCrossBossZoneID(mapID, realMapID, copyMapID):
## 获取地图跨服boss所属分区
- if dataMapID not in ChConfig.Def_CrossMapIDList:
+ if mapID not in ChConfig.Def_CrossMapIDList:
return 0
# 固定线路分配的
- if dataMapID in ChConfig.Def_CrossZoneMapTableName:
- tableName = ChConfig.Def_CrossZoneMapTableName[dataMapID]
- zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, dataMapID, copyMapID)
+ if mapID in ChConfig.Def_CrossZoneMapTableName:
+ tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
+ zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, mapID, copyMapID)
if not zoneIpyData:
return 0
return zoneIpyData.GetZoneID()
# 动态线路分配的
- elif dataMapID in ChConfig.Def_CrossDynamicLineMap:
- return PlayerFB.GetCrossDynamicLineZoneID(dataMapID, realMapID, copyMapID)
+ elif mapID in ChConfig.Def_CrossDynamicLineMap:
+ return PlayerFB.GetCrossDynamicLineZoneID(mapID, realMapID, copyMapID)
return 0
def __GetCrossBossRecData(zoneID, bossID):
@@ -112,44 +112,58 @@
@param serverGroupID: 为0时同步所有子服
'''
- GameWorld.Log("同步给子服跨服boss信息: syncServerGroupID=%s" % (serverGroupID))
- zoneIpyDataList = CrossRealmPlayer.GetCrossCommZoneIpyDataListByServerGroupID(serverGroupID)
- if not zoneIpyDataList:
- GameWorld.Log(" 没有跨服boss分区信息!")
- return
-
+ crossMapBossIDListDict = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
- for zoneIpyData in zoneIpyDataList:
- zoneID = zoneIpyData.GetZoneID()
- bossInfoList = []
- for i in xrange(ipyDataMgr.GetBOSSInfoCount()):
- ipyData = ipyDataMgr.GetBOSSInfoByIndex(i)
- mapID = ipyData.GetMapID()
- if mapID not in ChConfig.Def_CrossMapIDList:
- continue
- bossID = ipyData.GetNPCID()
- bossRecData = __GetCrossBossRecData(zoneID, bossID)
- killedTime = GetRecKilledTime(bossRecData)
- refreshTime = GetRecRefreshTime(bossRecData)
- killedRecord = GetRecKilledRecord(bossRecData)
- isAlive = __GetCrossBossIsAlive(zoneID, bossID)
- killerExInfo = [] # 重连成功的信息同步不发送击杀者信息
- bossInfoList.append([zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo])
-
- if bossInfoList:
+ for i in xrange(ipyDataMgr.GetBOSSInfoCount()):
+ ipyData = ipyDataMgr.GetBOSSInfoByIndex(i)
+ mapID = ipyData.GetMapID()
+ bossID = ipyData.GetNPCID()
+ if mapID not in ChConfig.Def_CrossZoneTypeName:
+ continue
+ if mapID not in crossMapBossIDListDict:
+ crossMapBossIDListDict[mapID] = []
+ bossIDList = crossMapBossIDListDict[mapID]
+ bossIDList.append(bossID)
+
+ crossZoneName = GameWorld.GetCrossZoneName()
+ GameWorld.Log("同步给子服跨服boss信息: crossZoneName=%s,syncServerGroupID=%s" % (crossZoneName, serverGroupID))
+
+ # 由于不同功能的跨服boss分区可能不一样,同步子服就需要按分区分步同步,所以需先发送一条初始化的信息类型先清空子服保存的跨服boss数据,再根据功能所属分区推送
+ serverGroupIDList = [serverGroupID] if serverGroupID else []
+ bossInfoDict = {"BossInfoType":"InitOK"}
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossInfo, bossInfoDict, serverGroupIDList)
+
+ for mapID, bossIDList in crossMapBossIDListDict.items():
+ GameWorld.Log(" mapID=%s, bossIDList=%s" % (mapID, bossIDList))
+ zoneIpyDataList = CrossRealmPlayer.GetCrossZoneIpyDataListByServerGroupID(mapID, serverGroupID)
+ if not zoneIpyDataList:
+ continue
+ for zoneIpyData in zoneIpyDataList:
+ zoneID = zoneIpyData.GetZoneID()
serverGroupIDList = [serverGroupID] if serverGroupID else zoneIpyData.GetServerGroupIDList()
- bossInfoDict = {"BossInfoType":"InitOK", "BossInfoList":bossInfoList}
- CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossInfo, bossInfoDict, serverGroupIDList)
- else:
- GameWorld.Log("没有跨服boss信息! zoneID=%s" % zoneID)
-
+ bossInfoList = []
+ for bossID in bossIDList:
+ bossRecData = __GetCrossBossRecData(zoneID, bossID)
+ killedTime = GetRecKilledTime(bossRecData)
+ refreshTime = GetRecRefreshTime(bossRecData)
+ killedRecord = GetRecKilledRecord(bossRecData)
+ isAlive = __GetCrossBossIsAlive(zoneID, bossID)
+ killerExInfo = [] # 重连成功的信息同步不发送击杀者信息
+ bossInfoList.append([zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo])
+
+ if bossInfoList:
+ bossInfoDict = {"BossInfoList":bossInfoList}
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossInfo, bossInfoDict, serverGroupIDList)
+ else:
+ GameWorld.Log("没有跨服boss信息! mapID=%s,zoneID=%s" % (mapID, zoneID))
+
return
-def DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID, killerIDList):
+def DoCrossBossOnKilled(bossID, killPlayerName, mapID, realMapID, copyMapID, killerIDList):
## 跨服boss被杀
- zoneID = GetCrossBossZoneID(realMapID, dataMapID, copyMapID)
- GameWorld.Log("击杀跨服boss: zoneID=%s,bossID=%s,realMapID=%s,dataMapID=%s,copyMapID=%s,killerIDList=%s"
- % (zoneID, bossID, realMapID, dataMapID, copyMapID, killerIDList))
+ zoneID = GetCrossBossZoneID(mapID, realMapID, copyMapID)
+ GameWorld.Log("击杀跨服boss: zoneID=%s,bossID=%s,mapID=%s,realMapID=%s,copyMapID=%s,killerIDList=%s"
+ % (zoneID, bossID, mapID, realMapID, copyMapID, killerIDList))
if not zoneID:
return
@@ -164,22 +178,22 @@
refreshTime = SetBossRefreshTime(zoneID, bossID, killedTime, bossRecData)
# 广播子服跨服boss被击杀
- zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByZoneID(zoneID)
+ zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByZoneID(mapID, zoneID)
if zoneIpyData == None:
return
serverGroupIDList = zoneIpyData.GetServerGroupIDList()
killedRecord = GetRecKilledRecord(bossRecData)
- killerExInfo = [killerIDList, dataMapID]
+ killerExInfo = [killerIDList, mapID]
bossInfoList = [[zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo]]
bossInfoDict = {"BossInfoType":"OnKilled", "BossInfoList":bossInfoList}
CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossInfo, bossInfoDict, serverGroupIDList)
return
-def DoCrossBossStateChange(bossID, isAlive, dataMapID, realMapID, copyMapID):
+def DoCrossBossStateChange(bossID, isAlive, mapID, realMapID, copyMapID):
## 跨服boss状态变更
- zoneID = GetCrossBossZoneID(realMapID, dataMapID, copyMapID)
- GameWorld.Log("跨服boss状态变更: zoneID=%s,bossID=%s,isAlive=%s,realMapID=%s,dataMapID=%s,copyMapID=%s"
- % (zoneID, bossID, isAlive, realMapID, dataMapID, copyMapID))
+ zoneID = GetCrossBossZoneID(mapID, realMapID, copyMapID)
+ GameWorld.Log("跨服boss状态变更: zoneID=%s,bossID=%s,isAlive=%s,mapID=%s,realMapID=%s,copyMapID=%s"
+ % (zoneID, bossID, isAlive, mapID, realMapID, copyMapID))
if not zoneID:
return
@@ -187,7 +201,7 @@
if isAlive:
# 广播子服跨服boss复活
- zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByZoneID(zoneID)
+ zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByZoneID(mapID, zoneID)
if zoneIpyData != None:
serverGroupIDList = zoneIpyData.GetServerGroupIDList()
stateInfo = [zoneID, bossID, isAlive]
@@ -333,8 +347,8 @@
## 收到跨服服务器同步的跨服boss信息 {"BossInfoType":"InitOK", "BossInfoList":bossInfoList}
global g_bossRecDataDict
- bossInfoType = bossInfoDict["BossInfoType"]
- bossInfoList = bossInfoDict["BossInfoList"]
+ bossInfoType = bossInfoDict.get("BossInfoType", "")
+ bossInfoList = bossInfoDict.get("BossInfoList", [])
GameWorld.DebugLog("收到跨服同步的跨服boss信息: bossInfoType=%s" % (bossInfoType))
@@ -343,7 +357,8 @@
recTypeListData = GameWorld.GetUniversalRecMgr().GetTypeList(ShareDefine.Def_UniversalGameRecType_CrossBossInfo)
recTypeListData.Clear()
g_bossRecDataDict = {}
-
+ return
+
syncBOSSIDList = []
for bossInfo in bossInfoList:
zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo = bossInfo
@@ -357,14 +372,14 @@
if not killerExInfo:
continue
- killerIDList, dataMapID = killerExInfo
+ killerIDList, mapID = killerExInfo
for playerID in killerIDList:
killer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
if not killer:
- GameWorld.ErrLog("击杀跨服boss时主服玩家不在线, playerID=%s,dataMapID=%s,bossID=%s" % (playerID, dataMapID, bossID))
+ GameWorld.ErrLog("击杀跨服boss时主服玩家不在线, playerID=%s,mapID=%s,bossID=%s" % (playerID, mapID, bossID))
DataRecordPack.SendEventPack("CrossBoss_Error", {"PlayerID":playerID, "Error":"MainServerOffline"})
continue
- msgInfo = str([dataMapID, bossID])
+ msgInfo = str([mapID, bossID])
killer.MapServer_QueryPlayerResult(0, 0, "CrossKillBoss", msgInfo, len(msgInfo))
Sync_CrossBossInfo(None, syncBOSSIDList)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
index 400fcdd..cff77fa 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -48,6 +48,7 @@
import PlayerGeTui
import IPY_GameServer
import CrossBoss
+import PlayerFB
import time
@@ -102,12 +103,12 @@
if bossID <= 0:
return
- bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID, killerIDList = msgList
+ bossID, killPlayerName, hurtValue, isNotify, mapID, realMapID, copyMapID, killerIDList = msgList
+ mapID = PlayerFB.GetRecordMapID(mapID)
if GameWorld.IsCrossServer():
- CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID, killerIDList)
+ CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, mapID, realMapID, copyMapID, killerIDList)
return
- mapID = dataMapID
isAddKillCnt = False
isMapNeedShunt = IsMapNeedBossShunt(mapID)
@@ -158,13 +159,14 @@
## 世界boss状态变更
if len(msgList) <= 0:
return
-
- bossID, isAlive, dataMapID, realMapID, copyMapID = msgList
+
+ bossID, isAlive, mapID, realMapID, copyMapID = msgList
+ mapID = PlayerFB.GetRecordMapID(mapID)
if GameWorld.IsCrossServer():
- CrossBoss.DoCrossBossStateChange(bossID, isAlive, dataMapID, realMapID, copyMapID)
+ CrossBoss.DoCrossBossStateChange(bossID, isAlive, mapID, realMapID, copyMapID)
return
- mapID, lineID = dataMapID, copyMapID
+ lineID = copyMapID
GameWorld.Log("世界boss状态变更: mapID=%s,lineID=%s,bossID=%s,state=%s,tick=%s" % (mapID, lineID, bossID, isAlive, tick))
if bossID <= 0:
@@ -321,7 +323,19 @@
def OnQueryBossInfo(index, clientData, tick):
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
bossIDList = clientData.BossIDList
- Sync_BossInfo(curPlayer, bossIDList)
+ if not bossIDList:
+ Sync_BossInfo(curPlayer)
+ CrossBoss.Sync_CrossBossInfo(curPlayer)
+ return
+ bossID = bossIDList[0]
+ ipyData = IpyGameDataPY.GetIpyGameData('BOSSInfo', bossID)
+ if not ipyData:
+ return
+ mapID = ipyData.GetMapID()
+ if mapID in ChConfig.Def_CrossMapIDList:
+ CrossBoss.Sync_CrossBossInfo(curPlayer, bossIDList)
+ else:
+ Sync_BossInfo(curPlayer, bossIDList)
return
@@ -547,7 +561,7 @@
# 同步到玩家对应子服
if not serverGroupID:
return
- zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByServerGroupID(serverGroupID)
+ zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
if not zoneIpyData:
return
serverGroupIDList = zoneIpyData.GetServerGroupIDList()
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
index 778f451..c29a919 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
@@ -55,11 +55,11 @@
return opName.decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
-def GetCrossCommZoneIpyDataByZoneID(zoneID):
- ## 获取跨服常规分区
+def GetCrossZoneIpyDataByZoneID(mapID, zoneID):
+ ## 获取跨服分区
+ zoneTypeName = ChConfig.Def_CrossZoneTypeName.get(mapID, "CrossZoneComm")
crossZoneName = GameWorld.GetCrossZoneName()
- ipyData = IpyGameDataPY.GetIpyGameDataNotLog("CrossZoneComm", crossZoneName, zoneID)
- return ipyData
+ return IpyGameDataPY.GetIpyGameData(zoneTypeName, crossZoneName, zoneID)
def GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID):
## 获取跨服分区
@@ -77,30 +77,17 @@
GameWorld.ErrLog("没有找到跨服玩法对应分区! mapID=%s, serverGroupID=%s, zoneTypeName=%s" % (mapID, serverGroupID, zoneTypeName))
return
-def GetCrossCommZoneIpyDataByServerGroupID(serverGroupID):
- ## 获取跨服常规分区
- crossZoneName = GameWorld.GetCrossZoneName()
- ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZoneComm", {"CrossZoneName":crossZoneName}, True)
- if not ipyDataList:
- return
- for ipyData in ipyDataList:
- serverGroupIDList = ipyData.GetServerGroupIDList()
- for serverGroupIDInfo in serverGroupIDList:
- if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
- or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
- return ipyData
- return
-
-def GetCrossCommZoneIpyDataListByServerGroupID(serverGroupID):
+def GetCrossZoneIpyDataListByServerGroupID(mapID, serverGroupID):
## 获取跨服常规分区列表
if serverGroupID:
- ipyData = GetCrossCommZoneIpyDataByServerGroupID(serverGroupID)
+ ipyData = GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
if not ipyData:
return
ipyDataList = [ipyData]
else:
crossZoneName = GameWorld.GetCrossZoneName()
- ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZoneComm", {"CrossZoneName":crossZoneName}, True)
+ zoneTypeName = ChConfig.Def_CrossZoneTypeName.get(mapID, "CrossZoneComm")
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition(zoneTypeName, {"CrossZoneName":crossZoneName}, True)
return ipyDataList
def GetServerCrossZoneMapIpyData(mapID, serverGroupID=0):
@@ -112,11 +99,11 @@
if GameWorld.IsCrossServer():
return
serverGroupID = GameWorld.GetServerGroupID()
- zoneIpyData = GetCrossCommZoneIpyDataByServerGroupID(serverGroupID)
+ zoneIpyData = GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
if not zoneIpyData:
return
- commZoneID = zoneIpyData.GetZoneID()
- return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":commZoneID})
+ zoneID = zoneIpyData.GetZoneID()
+ return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":zoneID})
def IsCrossServerOpen():
## 跨服服务器是否开放中
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py
index b22e5d8..d4700f4 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py
@@ -259,12 +259,12 @@
GameWorld.GetPlayerManager().MapServer_QueryPlayer(0, 0, 0, mapID, "OpenFB", msgInfo, len(msgInfo))
return mapID, copyMapID, openState
-def GetCrossDynamicLineZoneID(dataMapID, mapID, copyMapID):
+def GetCrossDynamicLineZoneID(mapID, realMapID, copyMapID):
## 获取跨服动态分配的虚拟线路对应分区ID
- zoneLineDict = PyGameData.g_crossDynamicLineInfo.get(dataMapID, {})
+ zoneLineDict = PyGameData.g_crossDynamicLineInfo.get(mapID, {})
for key, funcLineObjList in zoneLineDict.items():
for funcLineObj in funcLineObjList:
- if funcLineObj.mapID == mapID and funcLineObj.copyMapID == copyMapID:
+ if funcLineObj.mapID == realMapID and funcLineObj.copyMapID == copyMapID:
zoneID = key[0]
return zoneID
return 0
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
index d7aa654..917d631 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
@@ -184,7 +184,7 @@
def ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick):
## 收到子服跨服世界频道聊天
- zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByServerGroupID(serverGroupID)
+ zoneIpyData = CrossRealmPlayer.GetCrossZoneIpyDataByServerGroupID(0, serverGroupID)
if not zoneIpyData:
return
serverGroupIDList = zoneIpyData.GetServerGroupIDList()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 4d638b9..6075bcf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1781,6 +1781,13 @@
RegisterEnter_CrossServerMapIDList = [Def_FBMapID_CrossPenglai, Def_FBMapID_CrossDemonKing, Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian]
#跨服地图
Def_CrossMapIDList = [Def_FBMapID_CrossRealmPK, Def_FBMapID_CrossPenglai, Def_FBMapID_CrossDemonKing, Def_FBMapID_CrossGrasslandLing, Def_FBMapID_CrossGrasslandXian]
+#跨服分区类型配置, 没配置的默认 CrossZoneComm
+Def_CrossZoneTypeName = {0:"CrossZoneComm", # 特殊0,默认常规分区
+ Def_FBMapID_CrossPenglai:"CrossZoneComm",
+ Def_FBMapID_CrossDemonKing:"CrossZonePK",
+ Def_FBMapID_CrossGrasslandLing:"CrossZonePK",
+ Def_FBMapID_CrossGrasslandXian:"CrossZonePK",
+ }
#跨服分区对应地图配置表名
Def_CrossZoneMapTableName = {Def_FBMapID_CrossPenglai:"CrossPenglaiZoneMap",
}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
index f99b5dd..8296afa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py
@@ -1995,33 +1995,33 @@
return
def GameServer_KillGameWorldBoss(bossID, killPlayerName, hurtValue, isNotify=True, killerIDList=[]):
- dataMapID = GameWorld.GetGameWorld().GetMapID()
+ mapID = GameWorld.GetGameWorld().GetMapID()
realMapID = GameWorld.GetGameWorld().GetRealMapID()
copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
- killMsg = str([bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID, killerIDList])
+ killMsg = str([bossID, killPlayerName, hurtValue, isNotify, mapID, realMapID, copyMapID, killerIDList])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'KillGameWorldBoss', killMsg, len(killMsg))
- GameWorld.DebugLog("Boss被击杀: bossID=%s,dataMapID=%s,realMapID=%s,copyMapID=%s,killerIDList=%s" % (bossID, dataMapID, realMapID, copyMapID, killerIDList))
+ GameWorld.DebugLog("Boss被击杀: bossID=%s,mapID=%s,realMapID=%s,copyMapID=%s,killerIDList=%s" % (bossID, mapID, realMapID, copyMapID, killerIDList))
return
def GameServe_GameWorldBossState(bossID, isAlive):
- dataMapID = GameWorld.GetGameWorld().GetMapID()
+ mapID = GameWorld.GetGameWorld().GetMapID()
realMapID = GameWorld.GetGameWorld().GetRealMapID()
copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
- stateMsg = str([bossID, isAlive, dataMapID, realMapID, copyMapID])
+ stateMsg = str([bossID, isAlive, mapID, realMapID, copyMapID])
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GameWorldBossState', '%s' % stateMsg, len(stateMsg))
- GameWorld.DebugLog("Boss状态变更: bossID=%s,isAlive=%s,dataMapID=%s,realMapID=%s,copyMapID=%s"
- % (bossID, isAlive, dataMapID, realMapID, copyMapID))
+ GameWorld.DebugLog("Boss状态变更: bossID=%s,isAlive=%s,mapID=%s,realMapID=%s,copyMapID=%s"
+ % (bossID, isAlive, mapID, realMapID, copyMapID))
if not isAlive:
- if dataMapID in ChConfig.Def_CrossZoneMapTableName:
- tableName = ChConfig.Def_CrossZoneMapTableName[dataMapID]
+ if mapID in ChConfig.Def_CrossZoneMapTableName:
+ tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
realMapID = GameWorld.GetGameWorld().GetRealMapID()
copyMapID = GameWorld.GetGameWorld().GetCopyMapID()
- zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, dataMapID, copyMapID)
+ zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, mapID, copyMapID)
if not zoneIpyData:
return
zoneID = zoneIpyData.GetZoneID()
GameWorld.GetGameWorld().SetGameWorldDict(ShareDefine.Def_Notify_WorldKey_GameWorldBossRebornCross % (zoneID, bossID), 0)
- elif dataMapID == ChConfig.Def_FBMapID_CrossDemonKing:
+ elif mapID == ChConfig.Def_FBMapID_CrossDemonKing:
zoneID = GameLogic_CrossDemonKing.GetCurFBLineZoneID()
GameWorld.GetGameWorld().SetGameWorldDict(ShareDefine.Def_Notify_WorldKey_GameWorldBossRebornCross % (zoneID, bossID), 0)
else:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
index ec3f786..23e5938 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py
@@ -36,10 +36,11 @@
return opName.decode('gbk').encode(GameWorld.GetCharacterEncoding()) + playerName
-def GetCrossCommZoneIpyDataByServerGroupID(serverGroupID):
- ## 获取跨服常规分区
+def GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID):
+ ## 获取跨服分区
+ zoneTypeName = ChConfig.Def_CrossZoneTypeName.get(mapID, "CrossZoneComm")
crossZoneName = GameWorld.GetCrossZoneName()
- ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition("CrossZoneComm", {"CrossZoneName":crossZoneName}, True)
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition(zoneTypeName, {"CrossZoneName":crossZoneName}, True)
if not ipyDataList:
return
for ipyData in ipyDataList:
@@ -48,6 +49,7 @@
if (isinstance(serverGroupIDInfo, tuple) and serverGroupIDInfo[0] <= serverGroupID <= serverGroupIDInfo[1]) \
or (isinstance(serverGroupIDInfo, int) and serverGroupIDInfo == serverGroupID):
return ipyData
+ GameWorld.ErrLog("没有找到跨服玩法对应分区! mapID=%s, serverGroupID=%s, zoneTypeName=%s" % (mapID, serverGroupID, zoneTypeName))
return
def GetServerCrossZoneMapIpyData(mapID, serverGroupID=0):
@@ -59,11 +61,11 @@
if GameWorld.IsCrossServer():
return
serverGroupID = GameWorld.GetServerGroupID()
- zoneIpyData = GetCrossCommZoneIpyDataByServerGroupID(serverGroupID)
+ zoneIpyData = GetCrossZoneIpyDataByServerGroupID(mapID, serverGroupID)
if not zoneIpyData:
return
- commZoneID = zoneIpyData.GetZoneID()
- return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":commZoneID})
+ zoneID = zoneIpyData.GetZoneID()
+ return IpyGameDataPY.GetIpyGameDataByCondition(tableName, {"ZoneID":zoneID})
def IsCrossServerOpen():
## 跨服服务器是否开放中
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py
index 84c4538..1d7336c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py
@@ -40,11 +40,11 @@
# @remarks 函数详细说明.
def DoResult(curPlayer, callFunName, funResult, tick):
killerExInfo = eval(funResult)
- dataMapID, bossID = killerExInfo
- GameWorld.Log("GY_Query_CrossKillBoss dataMapID=%s, bossID=%s" % (dataMapID, bossID), curPlayer.GetPlayerID())
+ mapID, bossID = killerExInfo
+ GameWorld.Log("GY_Query_CrossKillBoss mapID=%s, bossID=%s" % (mapID, bossID), curPlayer.GetPlayerID())
if not curPlayer:
return
- NPCCommon.OnPlayerKillBoss(curPlayer, bossID, dataMapID, False)
+ NPCCommon.OnPlayerKillBoss(curPlayer, bossID, mapID, False)
return
--
Gitblit v1.8.0