ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
@@ -55,14 +55,22 @@
    ## 获取地图跨服boss所属分区
    if dataMapID not in ChConfig.Def_CrossMapIDList:
        return 0
    if dataMapID not in ChConfig.Def_CrossZoneMapTableName:
        GameWorld.ErrLog("跨服boss没有分区表!dataMapID=%s" % dataMapID)
        return 0
    # 固定线路分配的
    if dataMapID in ChConfig.Def_CrossZoneMapTableName:
    tableName = ChConfig.Def_CrossZoneMapTableName[dataMapID]
    zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, dataMapID, copyMapID)
    if not zoneIpyData:
        return 0
    return zoneIpyData.GetZoneID()
    # 动态线路分配的
    elif dataMapID in ChConfig.Def_CrossDynamicLineMap:
        zoneLineDict = PyGameData.g_crossDynamicLineInfo.get(dataMapID, {}) # {dataMapID:{(zoneID, funcLineID):[mapID, copyMapID], ...}, ...}
        for zoneLineInfo, mapCopyInfo in zoneLineDict.items():
            if realMapID == mapCopyInfo[0] and copyMapID == mapCopyInfo[1]:
                return zoneLineInfo[0]
        return 0
    return 0
def __GetCrossBossRecData(zoneID, bossID):
    ## 获取跨服Boss Rec数据
@@ -234,18 +242,21 @@
    
    curTime = int(time.time())
    if not PyGameData.g_sortBOSSRefreshList:
        crossZoneName = GameWorld.GetCrossZoneName()
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for i in xrange(ipyDataMgr.GetBOSSInfoCount()):
            ipyData = ipyDataMgr.GetBOSSInfoByIndex(i)
            bossID = ipyData.GetNPCID()
            mapID = ipyData.GetMapID()
            if mapID not in ChConfig.Def_CrossZoneMapTableName:
            if mapID not in ChConfig.Def_CrossZoneTypeName:
                continue
            tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
            if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
            zoneTypeName = ChConfig.Def_CrossZoneTypeName[mapID]
            if not hasattr(ipyDataMgr, "Get%sCount" % zoneTypeName):
                continue
            for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
                zoneIpyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
            for i in xrange(getattr(ipyDataMgr, "Get%sCount" % zoneTypeName)()):
                zoneIpyData = getattr(ipyDataMgr, "Get%sByIndex" % zoneTypeName)(i)
                if zoneIpyData.GetCrossZoneName() != crossZoneName:
                    continue
                zoneID = zoneIpyData.GetZoneID()
                bossRecData = __GetCrossBossRecData(zoneID, bossID)
                killedTime = GetRecKilledTime(bossRecData)
@@ -275,24 +286,38 @@
        
    return
def GetCrossBossIsAliveOrCanReborn(zoneID, bossID):
    ##BOSS是否活着或者可重生
    if __GetCrossBossIsAlive(zoneID, bossID):
        return True
    bossRecData = __GetCrossBossRecData(zoneID, bossID)
    killedTime = GetRecKilledTime(bossRecData)
    refreshTime = GetRecRefreshTime(bossRecData)
    curTime = int(time.time())
    rebornSecond = max(0, refreshTime - (curTime - killedTime))
    return rebornSecond == 0
def OnCrossMapServerInitOK():
    __SendMapServerAliveCrossBoss()
    return
def __SendMapServerAliveCrossBoss():
    ## 同步当前还活着的boss,防止地图重启后已经刷新的boss不刷新
    crossZoneName = GameWorld.GetCrossZoneName()
    ipyDataMgr = IpyGameDataPY.IPY_Data()
    for i in xrange(IpyGameDataPY.IPY_Data().GetBOSSInfoCount()):
        ipyData = IpyGameDataPY.IPY_Data().GetBOSSInfoByIndex(i)
        bossID = ipyData.GetNPCID()
        mapID = ipyData.GetMapID()
        if mapID not in ChConfig.Def_CrossZoneMapTableName:
        if mapID not in ChConfig.Def_CrossZoneTypeName:
            continue
        tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
        if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
        zoneTypeName = ChConfig.Def_CrossZoneTypeName[mapID]
        if not hasattr(ipyDataMgr, "Get%sCount" % zoneTypeName):
            continue
        for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
            zoneIpyData = getattr(ipyDataMgr, "Get%sByIndex" % tableName)(i)
        for i in xrange(getattr(ipyDataMgr, "Get%sCount" % zoneTypeName)()):
            zoneIpyData = getattr(ipyDataMgr, "Get%sByIndex" % zoneTypeName)(i)
            if zoneIpyData.GetCrossZoneName() != crossZoneName:
                continue
            zoneID = zoneIpyData.GetZoneID()
            isAlive = __GetCrossBossIsAlive(zoneID, bossID)
            if not isAlive: