From 6551123a8a4a9c55380ebf4dff41c9d3bdbb2c47 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 15 四月 2019 17:10:07 +0800
Subject: [PATCH] 6459 【后端】【2.0】缥缈仙域开发单(分流地图配置)
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py | 58 ++++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
index 283cdf3..390ae32 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
@@ -26,6 +26,7 @@
import CrossRealmMsg
import ShareDefine
import PyGameData
+import PlayerFB
import time
@@ -55,14 +56,18 @@
## 获取地图跨服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
- tableName = ChConfig.Def_CrossZoneMapTableName[dataMapID]
- zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, dataMapID, copyMapID)
- if not zoneIpyData:
- return 0
- return zoneIpyData.GetZoneID()
+ # 固定线路分配的
+ 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:
+ return PlayerFB.GetCrossDynamicLineZoneID(dataMapID, realMapID, copyMapID)
+ return 0
def __GetCrossBossRecData(zoneID, bossID):
## 获取跨服Boss Rec数据
@@ -234,18 +239,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 +283,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:
--
Gitblit v1.8.0