From 9bdcc6b36e432272bd79d43b643e3614e73ef0f3 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期一, 14 一月 2019 16:12:44 +0800 Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(本服异兽之地Boss、跨服蓬莱仙境Boss 次数共享支持) --- ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py | 28 ++++++++++++++++++++++------ 1 files changed, 22 insertions(+), 6 deletions(-) diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py index af21a5e..f2dec64 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBoss.py @@ -20,6 +20,7 @@ import IpyGameDataPY import ChPyNetSendPack import CrossRealmPlayer +import DataRecordPack import PlayerControl import NetPackCommon import CrossRealmMsg @@ -116,7 +117,8 @@ refreshTime = GetRecRefreshTime(bossRecData) killedRecord = GetRecKilledRecord(bossRecData) isAlive = __GetCrossBossIsAlive(zoneID, bossID) - bossInfoList.append([zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive]) + killerExInfo = [] # 重连成功的信息同步不发送击杀者信息 + bossInfoList.append([zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo]) if bossInfoList: bossInfoDict = {"BossInfoType":"InitOK", "BossInfoList":bossInfoList} @@ -124,12 +126,12 @@ return -def DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID): +def DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID, killerIDList): ## 跨服boss被杀 zoneIpyData = GetCrossBossZoneIpyData(realMapID, dataMapID, copyMapID) zoneID = 0 if not zoneIpyData else zoneIpyData.GetZoneID() - GameWorld.Log("击杀跨服boss: zoneID=%s,bossID=%s,realMapID=%s,dataMapID=%s,copyMapID=%s" - % (zoneID, bossID, 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: return @@ -146,7 +148,8 @@ # 广播子服跨服boss被击杀 serverGroupIDList = zoneIpyData.GetServerGroupIDList() killedRecord = GetRecKilledRecord(bossRecData) - bossInfoList = [[zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive]] + killerExInfo = [killerIDList, dataMapID] + bossInfoList = [[zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo]] bossInfoDict = {"BossInfoType":"OnKilled", "BossInfoList":bossInfoList} CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_CrossBossInfo, bossInfoDict, serverGroupIDList) return @@ -304,7 +307,7 @@ syncBOSSIDList = [] for bossInfo in bossInfoList: - zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive = bossInfo + zoneID, bossID, killedTime, refreshTime, killedRecord, isAlive, killerExInfo = bossInfo bossRecData = __GetCrossBossRecData(zoneID, bossID) SetRecKilledTime(bossRecData, killedTime) SetRecRefreshTime(bossRecData, refreshTime) @@ -312,6 +315,19 @@ __SetCrossBossIsAlive(zoneID, bossID, isAlive) syncBOSSIDList.append(bossID) + if not killerExInfo: + continue + + killerIDList, dataMapID = 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)) + DataRecordPack.SendEventPack("CrossBoss_Error", {"PlayerID":playerID, "Error":"MainServerOffline"}) + continue + msgInfo = str([dataMapID, bossID]) + killer.MapServer_QueryPlayerResult(0, 0, "CrossKillBoss", msgInfo, len(msgInfo)) + Sync_CrossBossInfo(None, syncBOSSIDList) return -- Gitblit v1.8.0