| | |
| | | ## 获取地图跨服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数据
|
| | |
| | |
|
| | | 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)
|
| | |
| | |
|
| | | 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:
|