| | |
| | | import IpyGameDataPY
|
| | | import ChPyNetSendPack
|
| | | import CrossRealmPlayer
|
| | | import DataRecordPack
|
| | | import PlayerControl
|
| | | import NetPackCommon
|
| | | import CrossRealmMsg
|
| | |
| | | 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}
|
| | |
| | |
|
| | | 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
|
| | |
|
| | |
| | | # 广播子服跨服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
|
| | |
| | |
|
| | | 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)
|
| | |
| | | __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
|
| | |
|