6459 【后端】【2.0】缥缈仙域开发单(跨服分区逻辑优化,支持跨服妖王分区状态同步)
10个文件已修改
248 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerFB.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/CrossRealmPlayer.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/RemoteQuery/GY_Query_CrossKillBoss.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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",
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)
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()
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():
    ## 跨服服务器是否开放中
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
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()
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",
                             }
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:
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():
    ## 跨服服务器是否开放中
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