From df824550205e9f266f51ebbf4028ac37fe0992bc Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 20 三月 2019 14:01:27 +0800
Subject: [PATCH] 2683 子 天赋技能和新增双职业各两个技能 / 【后端】天赋技能
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py | 97 ++++++++++++++++++++++++++++--------------------
1 files changed, 57 insertions(+), 40 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
index f2dec64..283cdf3 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py
@@ -51,15 +51,18 @@
g_bossRecDataDict = {} # boss对应rec记录缓存 {(zoneID, bossID):recData, ...}
-def GetCrossBossZoneIpyData(realMapID, dataMapID, copyMapID):
+def GetCrossBossZoneID(realMapID, dataMapID, copyMapID):
## 获取地图跨服boss所属分区
if dataMapID not in ChConfig.Def_CrossMapIDList:
- return
- if dataMapID not in ChConfig.Def_CrossZoneTableName:
+ return 0
+ if dataMapID not in ChConfig.Def_CrossZoneMapTableName:
GameWorld.ErrLog("跨服boss没有分区表!dataMapID=%s" % dataMapID)
- return
- tableName = ChConfig.Def_CrossZoneTableName[dataMapID]
- return IpyGameDataPY.GetIpyGameData(tableName, realMapID, dataMapID, copyMapID)
+ return 0
+ tableName = ChConfig.Def_CrossZoneMapTableName[dataMapID]
+ zoneIpyData = IpyGameDataPY.GetIpyGameData(tableName, realMapID, dataMapID, copyMapID)
+ if not zoneIpyData:
+ return 0
+ return zoneIpyData.GetZoneID()
def __GetCrossBossRecData(zoneID, bossID):
## 获取跨服Boss Rec数据
@@ -99,37 +102,47 @@
## 获取跨服世界boss是否活着
return GameWorld.GetGameWorld().GetDictByKey(ChConfig.Def_WorldKey_CrossBossIsAlive % (zoneID, bossID))
-def ClientServerMsg_ServerInitOK(serverGroupID):
- ## 子服连接成功
+def Sync_CrossBossInitDataToClientServer(serverGroupID=0):
+ ''' 同步跨服Boss活动数据到子服务器
+ @param serverGroupID: 为0时同步所有子服
+ '''
- bossInfoList = []
+ GameWorld.Log("同步给子服跨服boss信息: syncServerGroupID=%s" % (serverGroupID))
+ zoneIpyDataList = CrossRealmPlayer.GetCrossCommZoneIpyDataListByServerGroupID(serverGroupID)
+ if not zoneIpyDataList:
+ GameWorld.Log(" 没有跨服boss分区信息!")
+ return
+
ipyDataMgr = IpyGameDataPY.IPY_Data()
- for i in xrange(ipyDataMgr.GetBOSSInfoCount()):
- ipyData = ipyDataMgr.GetBOSSInfoByIndex(i)
- mapID = ipyData.GetMapID()
- zoneIpyData = CrossRealmPlayer.GetServerCrossZoneIpyData(mapID, serverGroupID)
- if not zoneIpyData:
- continue
+ for zoneIpyData in zoneIpyDataList:
zoneID = zoneIpyData.GetZoneID()
- 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:
- bossInfoDict = {"BossInfoType":"InitOK", "BossInfoList":bossInfoList}
- CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossInfo, bossInfoDict, [serverGroupID])
-
+ 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:
+ 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)
+
return
def DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID, killerIDList):
## 跨服boss被杀
- zoneIpyData = GetCrossBossZoneIpyData(realMapID, dataMapID, copyMapID)
- zoneID = 0 if not zoneIpyData else zoneIpyData.GetZoneID()
+ 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))
if not zoneID:
@@ -146,6 +159,9 @@
refreshTime = SetBossRefreshTime(zoneID, bossID, killedTime, bossRecData)
# 广播子服跨服boss被击杀
+ zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByZoneID(zoneID)
+ if zoneIpyData == None:
+ return
serverGroupIDList = zoneIpyData.GetServerGroupIDList()
killedRecord = GetRecKilledRecord(bossRecData)
killerExInfo = [killerIDList, dataMapID]
@@ -156,8 +172,7 @@
def DoCrossBossStateChange(bossID, isAlive, dataMapID, realMapID, copyMapID):
## 跨服boss状态变更
- zoneIpyData = GetCrossBossZoneIpyData(realMapID, dataMapID, copyMapID)
- zoneID = 0 if not zoneIpyData else zoneIpyData.GetZoneID()
+ 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))
if not zoneID:
@@ -167,10 +182,12 @@
if isAlive:
# 广播子服跨服boss复活
- serverGroupIDList = zoneIpyData.GetServerGroupIDList()
- stateInfo = [zoneID, bossID, isAlive]
- CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossState, stateInfo, serverGroupIDList)
-
+ zoneIpyData = CrossRealmPlayer.GetCrossCommZoneIpyDataByZoneID(zoneID)
+ if zoneIpyData != None:
+ serverGroupIDList = zoneIpyData.GetServerGroupIDList()
+ stateInfo = [zoneID, bossID, isAlive]
+ CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossState, stateInfo, serverGroupIDList)
+
return
def __SetKilledRecord(bossRecData, killedTime, playerName):
@@ -222,9 +239,9 @@
ipyData = ipyDataMgr.GetBOSSInfoByIndex(i)
bossID = ipyData.GetNPCID()
mapID = ipyData.GetMapID()
- if mapID not in ChConfig.Def_CrossZoneTableName:
+ if mapID not in ChConfig.Def_CrossZoneMapTableName:
continue
- tableName = ChConfig.Def_CrossZoneTableName[mapID]
+ tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
continue
for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
@@ -269,9 +286,9 @@
ipyData = IpyGameDataPY.IPY_Data().GetBOSSInfoByIndex(i)
bossID = ipyData.GetNPCID()
mapID = ipyData.GetMapID()
- if mapID not in ChConfig.Def_CrossZoneTableName:
+ if mapID not in ChConfig.Def_CrossZoneMapTableName:
continue
- tableName = ChConfig.Def_CrossZoneTableName[mapID]
+ tableName = ChConfig.Def_CrossZoneMapTableName[mapID]
if not hasattr(ipyDataMgr, "Get%sCount" % tableName):
continue
for i in xrange(getattr(ipyDataMgr, "Get%sCount" % tableName)()):
--
Gitblit v1.8.0